bfd/
[binutils/xnox.git] / gas / doc / as.info
bloba8d38108636c0c4157d0366680ff60e61ffb7127
1 This is as.info, produced by makeinfo version 4.8 from as.texinfo.
3 START-INFO-DIR-ENTRY
4 * As: (as).                     The GNU assembler.
5 * Gas: (as).                    The GNU assembler.
6 END-INFO-DIR-ENTRY
8    This file documents the GNU Assembler "as".
10    Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002,
11 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
13    Permission is granted to copy, distribute and/or modify this document
14 under the terms of the GNU Free Documentation License, Version 1.3 or
15 any later version published by the Free Software Foundation; with no
16 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
17 Texts.  A copy of the license is included in the section entitled "GNU
18 Free Documentation License".
20 \x1f
21 File: as.info,  Node: Top,  Next: Overview,  Up: (dir)
23 Using as
24 ********
26 This file is a user guide to the GNU assembler `as' (GNU Binutils)
27 version 2.20.
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".
33 * Menu:
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
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
50 \x1f
51 File: as.info,  Node: Overview,  Next: Invoking,  Prev: Top,  Up: Top
53 1 Overview
54 **********
56 Here is a brief summary of how to invoke `as'.  For details, see *Note
57 Command-Line Options: Invoking.
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 ...]
72      _Target Alpha options:_
73         [-mCPU]
74         [-mdebug | -no-mdebug]
75         [-replace | -noreplace]
76         [-relax] [-g] [-GSIZE]
77         [-F] [-32addr]
79      _Target ARC options:_
80         [-marc[5|6|7|8]]
81         [-EB|-EL]
83      _Target ARM options:_
84         [-mcpu=PROCESSOR[+EXTENSION...]]
85         [-march=ARCHITECTURE[+EXTENSION...]]
86         [-mfpu=FLOATING-POINT-FORMAT]
87         [-mfloat-abi=ABI]
88         [-meabi=VER]
89         [-mthumb]
90         [-EB|-EL]
91         [-mapcs-32|-mapcs-26|-mapcs-float|
92          -mapcs-reentrant]
93         [-mthumb-interwork] [-k]
95      _Target CRIS options:_
96         [-underscore | -no-underscore]
97         [-pic] [-N]
98         [-emulation=criself | -emulation=crisaout]
99         [-march=v0_v10 | -march=v10 | -march=v32 | -march=common_v10_v32]
101      _Target D10V options:_
102         [-O]
104      _Target D30V options:_
105         [-O|-n|-N]
107      _Target H8/300 options:_
108         [-h-tick-hex]
110      _Target i386 options:_
111         [-32|-64] [-n]
112         [-march=CPU[+EXTENSION...]] [-mtune=CPU]
114      _Target i960 options:_
115         [-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB|
116          -AKC|-AMC]
117         [-b] [-no-relax]
119      _Target IA-64 options:_
120         [-mconstant-gp|-mauto-pic]
121         [-milp32|-milp64|-mlp64|-mp64]
122         [-mle|mbe]
123         [-mtune=itanium1|-mtune=itanium2]
124         [-munwind-check=warning|-munwind-check=error]
125         [-mhint.b=ok|-mhint.b=warning|-mhint.b=error]
126         [-x|-xexplicit] [-xauto] [-xdebug]
128      _Target IP2K options:_
129         [-mip2022|-mip2022ext]
131      _Target M32C options:_
132         [-m32c|-m16c] [-relax] [-h-tick-hex]
134      _Target M32R options:_
135         [-m32rx|-[no-]warn-explicit-parallel-conflicts|
136         -W[n]p]
138      _Target M680X0 options:_
139         [-l] [-m68000|-m68010|-m68020|...]
141      _Target M68HC11 options:_
142         [-m68hc11|-m68hc12|-m68hcs12]
143         [-mshort|-mlong]
144         [-mshort-double|-mlong-double]
145         [-force-long-branches] [-short-branches]
146         [-strict-direct-mode] [-print-insn-syntax]
147         [-print-opcodes] [-generate-example]
149      _Target MCORE options:_
150         [-jsri2bsr] [-sifilter] [-relax]
151         [-mcpu=[210|340]]
152      _Target MICROBLAZE options:_
154      _Target MIPS options:_
155         [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]]
156         [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared]
157         [-non_shared] [-xgot [-mvxworks-pic]
158         [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32]
159         [-march=CPU] [-mtune=CPU] [-mips1] [-mips2]
160         [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2]
161         [-mips64] [-mips64r2]
162         [-construct-floats] [-no-construct-floats]
163         [-trap] [-no-break] [-break] [-no-trap]
164         [-mfix7000] [-mno-fix7000]
165         [-mips16] [-no-mips16]
166         [-msmartmips] [-mno-smartmips]
167         [-mips3d] [-no-mips3d]
168         [-mdmx] [-no-mdmx]
169         [-mdsp] [-mno-dsp]
170         [-mdspr2] [-mno-dspr2]
171         [-mmt] [-mno-mt]
172         [-mdebug] [-no-mdebug]
173         [-mpdr] [-mno-pdr]
175      _Target MMIX options:_
176         [-fixed-special-register-names] [-globalize-symbols]
177         [-gnu-syntax] [-relax] [-no-predefined-symbols]
178         [-no-expand] [-no-merge-gregs] [-x]
179         [-linker-allocated-gregs]
181      _Target PDP11 options:_
182         [-mpic|-mno-pic] [-mall] [-mno-extensions]
183         [-mEXTENSION|-mno-EXTENSION]
184         [-mCPU] [-mMACHINE]
186      _Target picoJava options:_
187         [-mb|-me]
189      _Target PowerPC options:_
190         [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|
191          -m403|-m405|-mppc64|-m620|-mppc64bridge|-mbooke]
192         [-mcom|-many|-maltivec|-mvsx] [-memb]
193         [-mregnames|-mno-regnames]
194         [-mrelocatable|-mrelocatable-lib]
195         [-mlittle|-mlittle-endian|-mbig|-mbig-endian]
196         [-msolaris|-mno-solaris]
198      _Target s390 options:_
199         [-m31|-m64] [-mesa|-mzarch] [-march=CPU]
200         [-mregnames|-mno-regnames]
201         [-mwarn-areg-zero]
203      _Target SCORE options:_
204         [-EB][-EL][-FIXDD][-NWARN]
205         [-SCORE5][-SCORE5U][-SCORE7][-SCORE3]
206         [-march=score7][-march=score3]
207         [-USE_R1][-KPIC][-O0][-G NUM][-V]
209      _Target SPARC options:_
210         [-Av6|-Av7|-Av8|-Asparclet|-Asparclite
211          -Av8plus|-Av8plusa|-Av9|-Av9a]
212         [-xarch=v8plus|-xarch=v8plusa] [-bump]
213         [-32|-64]
215      _Target TIC54X options:_
216       [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf]
217       [-merrors-to-file <FILENAME>|-me <FILENAME>]
220      _Target Z80 options:_
221        [-z80] [-r800]
222        [ -ignore-undocumented-instructions] [-Wnud]
223        [ -ignore-unportable-instructions] [-Wnup]
224        [ -warn-undocumented-instructions] [-Wud]
225        [ -warn-unportable-instructions] [-Wup]
226        [ -forbid-undocumented-instructions] [-Fud]
227        [ -forbid-unportable-instructions] [-Fup]
230      _Target Xtensa options:_
231       [-[no-]text-section-literals] [-[no-]absolute-literals]
232       [-[no-]target-align] [-[no-]longcalls]
233       [-[no-]transform]
234       [-rename-section OLDNAME=NEWNAME]
236 `@FILE'
237      Read command-line options from FILE.  The options read are
238      inserted in place of the original @FILE option.  If FILE does not
239      exist, or cannot be read, then the option will be treated
240      literally, and not removed.
242      Options in FILE are separated by whitespace.  A whitespace
243      character may be included in an option by surrounding the entire
244      option in either single or double quotes.  Any character
245      (including a backslash) may be included by prefixing the character
246      to be included with a backslash.  The FILE may itself contain
247      additional @FILE options; any such options will be processed
248      recursively.
250 `-a[cdghlmns]'
251      Turn on listings, in any of a variety of ways:
253     `-ac'
254           omit false conditionals
256     `-ad'
257           omit debugging directives
259     `-ag'
260           include general information, like as version and options
261           passed
263     `-ah'
264           include high-level source
266     `-al'
267           include assembly
269     `-am'
270           include macro expansions
272     `-an'
273           omit forms processing
275     `-as'
276           include symbols
278     `=file'
279           set the name of the listing file
281      You may combine these options; for example, use `-aln' for assembly
282      listing without forms processing.  The `=file' option, if used,
283      must be the last one.  By itself, `-a' defaults to `-ahls'.
285 `--alternate'
286      Begin in alternate macro mode.  *Note `.altmacro': Altmacro.
288 `-D'
289      Ignored.  This option is accepted for script compatibility with
290      calls to other assemblers.
292 `--debug-prefix-map OLD=NEW'
293      When assembling files in directory `OLD', record debugging
294      information describing them as in `NEW' instead.
296 `--defsym SYM=VALUE'
297      Define the symbol SYM to be VALUE before assembling the input file.
298      VALUE must be an integer constant.  As in C, a leading `0x'
299      indicates a hexadecimal value, and a leading `0' indicates an octal
300      value.  The value of the symbol can be overridden inside a source
301      file via the use of a `.set' pseudo-op.
303 `-f'
304      "fast"--skip whitespace and comment preprocessing (assume source is
305      compiler output).
307 `-g'
308 `--gen-debug'
309      Generate debugging information for each assembler source line
310      using whichever debug format is preferred by the target.  This
311      currently means either STABS, ECOFF or DWARF2.
313 `--gstabs'
314      Generate stabs debugging information for each assembler line.  This
315      may help debugging assembler code, if the debugger can handle it.
317 `--gstabs+'
318      Generate stabs debugging information for each assembler line, with
319      GNU extensions that probably only gdb can handle, and that could
320      make other debuggers crash or refuse to read your program.  This
321      may help debugging assembler code.  Currently the only GNU
322      extension is the location of the current working directory at
323      assembling time.
325 `--gdwarf-2'
326      Generate DWARF2 debugging information for each assembler line.
327      This may help debugging assembler code, if the debugger can handle
328      it.  Note--this option is only supported by some targets, not all
329      of them.
331 `--help'
332      Print a summary of the command line options and exit.
334 `--target-help'
335      Print a summary of all target specific options and exit.
337 `-I DIR'
338      Add directory DIR to the search list for `.include' directives.
340 `-J'
341      Don't warn about signed overflow.
343 `-K'
344      Issue warnings when difference tables altered for long
345      displacements.
347 `-L'
348 `--keep-locals'
349      Keep (in the symbol table) local symbols.  These symbols start with
350      system-specific local label prefixes, typically `.L' for ELF
351      systems or `L' for traditional a.out systems.  *Note Symbol
352      Names::.
354 `--listing-lhs-width=NUMBER'
355      Set the maximum width, in words, of the output data column for an
356      assembler listing to NUMBER.
358 `--listing-lhs-width2=NUMBER'
359      Set the maximum width, in words, of the output data column for
360      continuation lines in an assembler listing to NUMBER.
362 `--listing-rhs-width=NUMBER'
363      Set the maximum width of an input source line, as displayed in a
364      listing, to NUMBER bytes.
366 `--listing-cont-lines=NUMBER'
367      Set the maximum number of lines printed in a listing for a single
368      line of input to NUMBER + 1.
370 `-o OBJFILE'
371      Name the object-file output from `as' OBJFILE.
373 `-R'
374      Fold the data section into the text section.
376      Set the default size of GAS's hash tables to a prime number close
377      to NUMBER.  Increasing this value can reduce the length of time it
378      takes the assembler to perform its tasks, at the expense of
379      increasing the assembler's memory requirements.  Similarly
380      reducing this value can reduce the memory requirements at the
381      expense of speed.
383 `--reduce-memory-overheads'
384      This option reduces GAS's memory requirements, at the expense of
385      making the assembly processes slower.  Currently this switch is a
386      synonym for `--hash-size=4051', but in the future it may have
387      other effects as well.
389 `--statistics'
390      Print the maximum space (in bytes) and total time (in seconds)
391      used by assembly.
393 `--strip-local-absolute'
394      Remove local absolute symbols from the outgoing symbol table.
396 `-v'
397 `-version'
398      Print the `as' version.
400 `--version'
401      Print the `as' version and exit.
403 `-W'
404 `--no-warn'
405      Suppress warning messages.
407 `--fatal-warnings'
408      Treat warnings as errors.
410 `--warn'
411      Don't suppress warning messages or treat them as errors.
413 `-w'
414      Ignored.
416 `-x'
417      Ignored.
419 `-Z'
420      Generate an object file even after errors.
422 `-- | FILES ...'
423      Standard input, or source files to assemble.
426    The following options are available when as is configured for an ARC
427 processor.
429 `-marc[5|6|7|8]'
430      This option selects the core processor variant.
432 `-EB | -EL'
433      Select either big-endian (-EB) or little-endian (-EL) output.
435    The following options are available when as is configured for the ARM
436 processor family.
438 `-mcpu=PROCESSOR[+EXTENSION...]'
439      Specify which ARM processor variant is the target.
441 `-march=ARCHITECTURE[+EXTENSION...]'
442      Specify which ARM architecture variant is used by the target.
444 `-mfpu=FLOATING-POINT-FORMAT'
445      Select which Floating Point architecture is the target.
447 `-mfloat-abi=ABI'
448      Select which floating point ABI is in use.
450 `-mthumb'
451      Enable Thumb only instruction decoding.
453 `-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant'
454      Select which procedure calling convention is in use.
456 `-EB | -EL'
457      Select either big-endian (-EB) or little-endian (-EL) output.
459 `-mthumb-interwork'
460      Specify that the code has been generated with interworking between
461      Thumb and ARM code in mind.
463 `-k'
464      Specify that PIC code has been generated.
466    See the info pages for documentation of the CRIS-specific options.
468    The following options are available when as is configured for a D10V
469 processor.
470 `-O'
471      Optimize output by parallelizing instructions.
473    The following options are available when as is configured for a D30V
474 processor.
475 `-O'
476      Optimize output by parallelizing instructions.
478 `-n'
479      Warn when nops are generated.
481 `-N'
482      Warn when a nop after a 32-bit multiply instruction is generated.
484    The following options are available when as is configured for the
485 Intel 80960 processor.
487 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
488      Specify which variant of the 960 architecture is the target.
490 `-b'
491      Add code to collect statistics about branches taken.
493 `-no-relax'
494      Do not alter compare-and-branch instructions for long
495      displacements; error if necessary.
498    The following options are available when as is configured for the
499 Ubicom IP2K series.
501 `-mip2022ext'
502      Specifies that the extended IP2022 instructions are allowed.
504 `-mip2022'
505      Restores the default behaviour, which restricts the permitted
506      instructions to just the basic IP2022 ones.
509    The following options are available when as is configured for the
510 Renesas M32C and M16C processors.
512 `-m32c'
513      Assemble M32C instructions.
515 `-m16c'
516      Assemble M16C instructions (the default).
518 `-relax'
519      Enable support for link-time relaxations.
521 `-h-tick-hex'
522      Support H'00 style hex constants in addition to 0x00 style.
525    The following options are available when as is configured for the
526 Renesas M32R (formerly Mitsubishi M32R) series.
528 `--m32rx'
529      Specify which processor in the M32R family is the target.  The
530      default is normally the M32R, but this option changes it to the
531      M32RX.
533 `--warn-explicit-parallel-conflicts or --Wp'
534      Produce warning messages when questionable parallel constructs are
535      encountered.
537 `--no-warn-explicit-parallel-conflicts or --Wnp'
538      Do not produce warning messages when questionable parallel
539      constructs are encountered.
542    The following options are available when as is configured for the
543 Motorola 68000 series.
545 `-l'
546      Shorten references to undefined symbols, to one word instead of
547      two.
549 `-m68000 | -m68008 | -m68010 | -m68020 | -m68030'
550 `| -m68040 | -m68060 | -m68302 | -m68331 | -m68332'
551 `| -m68333 | -m68340 | -mcpu32 | -m5200'
552      Specify what processor in the 68000 family is the target.  The
553      default is normally the 68020, but this can be changed at
554      configuration time.
556 `-m68881 | -m68882 | -mno-68881 | -mno-68882'
557      The target machine does (or does not) have a floating-point
558      coprocessor.  The default is to assume a coprocessor for 68020,
559      68030, and cpu32.  Although the basic 68000 is not compatible with
560      the 68881, a combination of the two can be specified, since it's
561      possible to do emulation of the coprocessor instructions with the
562      main processor.
564 `-m68851 | -mno-68851'
565      The target machine does (or does not) have a memory-management
566      unit coprocessor.  The default is to assume an MMU for 68020 and
567      up.
570    For details about the PDP-11 machine dependent features options, see
571 *Note PDP-11-Options::.
573 `-mpic | -mno-pic'
574      Generate position-independent (or position-dependent) code.  The
575      default is `-mpic'.
577 `-mall'
578 `-mall-extensions'
579      Enable all instruction set extensions.  This is the default.
581 `-mno-extensions'
582      Disable all instruction set extensions.
584 `-mEXTENSION | -mno-EXTENSION'
585      Enable (or disable) a particular instruction set extension.
587 `-mCPU'
588      Enable the instruction set extensions supported by a particular
589      CPU, and disable all other extensions.
591 `-mMACHINE'
592      Enable the instruction set extensions supported by a particular
593      machine model, and disable all other extensions.
595    The following options are available when as is configured for a
596 picoJava processor.
598 `-mb'
599      Generate "big endian" format output.
601 `-ml'
602      Generate "little endian" format output.
605    The following options are available when as is configured for the
606 Motorola 68HC11 or 68HC12 series.
608 `-m68hc11 | -m68hc12 | -m68hcs12'
609      Specify what processor is the target.  The default is defined by
610      the configuration option when building the assembler.
612 `-mshort'
613      Specify to use the 16-bit integer ABI.
615 `-mlong'
616      Specify to use the 32-bit integer ABI.
618 `-mshort-double'
619      Specify to use the 32-bit double ABI.
621 `-mlong-double'
622      Specify to use the 64-bit double ABI.
624 `--force-long-branches'
625      Relative branches are turned into absolute ones. This concerns
626      conditional branches, unconditional branches and branches to a sub
627      routine.
629 `-S | --short-branches'
630      Do not turn relative branches into absolute ones when the offset
631      is out of range.
633 `--strict-direct-mode'
634      Do not turn the direct addressing mode into extended addressing
635      mode when the instruction does not support direct addressing mode.
637 `--print-insn-syntax'
638      Print the syntax of instruction in case of error.
640 `--print-opcodes'
641      print the list of instructions with syntax and then exit.
643 `--generate-example'
644      print an example of instruction for each possible instruction and
645      then exit.  This option is only useful for testing `as'.
648    The following options are available when `as' is configured for the
649 SPARC architecture:
651 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
652 `-Av8plus | -Av8plusa | -Av9 | -Av9a'
653      Explicitly select a variant of the SPARC architecture.
655      `-Av8plus' and `-Av8plusa' select a 32 bit environment.  `-Av9'
656      and `-Av9a' select a 64 bit environment.
658      `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
659      UltraSPARC extensions.
661 `-xarch=v8plus | -xarch=v8plusa'
662      For compatibility with the Solaris v9 assembler.  These options are
663      equivalent to -Av8plus and -Av8plusa, respectively.
665 `-bump'
666      Warn when the assembler switches to another architecture.
668    The following options are available when as is configured for the
669 'c54x architecture.
671 `-mfar-mode'
672      Enable extended addressing mode.  All addresses and relocations
673      will assume extended addressing (usually 23 bits).
675 `-mcpu=CPU_VERSION'
676      Sets the CPU version being compiled for.
678 `-merrors-to-file FILENAME'
679      Redirect error output to a file, for broken systems which don't
680      support such behaviour in the shell.
682    The following options are available when as is configured for a MIPS
683 processor.
685 `-G NUM'
686      This option sets the largest size of an object that can be
687      referenced implicitly with the `gp' register.  It is only accepted
688      for targets that use ECOFF format, such as a DECstation running
689      Ultrix.  The default value is 8.
691 `-EB'
692      Generate "big endian" format output.
694 `-EL'
695      Generate "little endian" format output.
697 `-mips1'
698 `-mips2'
699 `-mips3'
700 `-mips4'
701 `-mips5'
702 `-mips32'
703 `-mips32r2'
704 `-mips64'
705 `-mips64r2'
706      Generate code for a particular MIPS Instruction Set Architecture
707      level.  `-mips1' is an alias for `-march=r3000', `-mips2' is an
708      alias for `-march=r6000', `-mips3' is an alias for `-march=r4000'
709      and `-mips4' is an alias for `-march=r8000'.  `-mips5', `-mips32',
710      `-mips32r2', `-mips64', and `-mips64r2' correspond to generic
711      `MIPS V', `MIPS32', `MIPS32 Release 2', `MIPS64', and `MIPS64
712      Release 2' ISA processors, respectively.
714 `-march=CPU'
715      Generate code for a particular MIPS cpu.
717 `-mtune=CPU'
718      Schedule and tune for a particular MIPS cpu.
720 `-mfix7000'
721 `-mno-fix7000'
722      Cause nops to be inserted if the read of the destination register
723      of an mfhi or mflo instruction occurs in the following two
724      instructions.
726 `-mdebug'
727 `-no-mdebug'
728      Cause stabs-style debugging output to go into an ECOFF-style
729      .mdebug section instead of the standard ELF .stabs sections.
731 `-mpdr'
732 `-mno-pdr'
733      Control generation of `.pdr' sections.
735 `-mgp32'
736 `-mfp32'
737      The register sizes are normally inferred from the ISA and ABI, but
738      these flags force a certain group of registers to be treated as 32
739      bits wide at all times.  `-mgp32' controls the size of
740      general-purpose registers and `-mfp32' controls the size of
741      floating-point registers.
743 `-mips16'
744 `-no-mips16'
745      Generate code for the MIPS 16 processor.  This is equivalent to
746      putting `.set mips16' at the start of the assembly file.
747      `-no-mips16' turns off this option.
749 `-msmartmips'
750 `-mno-smartmips'
751      Enables the SmartMIPS extension to the MIPS32 instruction set.
752      This is equivalent to putting `.set smartmips' at the start of the
753      assembly file.  `-mno-smartmips' turns off this option.
755 `-mips3d'
756 `-no-mips3d'
757      Generate code for the MIPS-3D Application Specific Extension.
758      This tells the assembler to accept MIPS-3D instructions.
759      `-no-mips3d' turns off this option.
761 `-mdmx'
762 `-no-mdmx'
763      Generate code for the MDMX Application Specific Extension.  This
764      tells the assembler to accept MDMX instructions.  `-no-mdmx' turns
765      off this option.
767 `-mdsp'
768 `-mno-dsp'
769      Generate code for the DSP Release 1 Application Specific Extension.
770      This tells the assembler to accept DSP Release 1 instructions.
771      `-mno-dsp' turns off this option.
773 `-mdspr2'
774 `-mno-dspr2'
775      Generate code for the DSP Release 2 Application Specific Extension.
776      This option implies -mdsp.  This tells the assembler to accept DSP
777      Release 2 instructions.  `-mno-dspr2' turns off this option.
779 `-mmt'
780 `-mno-mt'
781      Generate code for the MT Application Specific Extension.  This
782      tells the assembler to accept MT instructions.  `-mno-mt' turns
783      off this option.
785 `--construct-floats'
786 `--no-construct-floats'
787      The `--no-construct-floats' option disables the construction of
788      double width floating point constants by loading the two halves of
789      the value into the two single width floating point registers that
790      make up the double width register.  By default
791      `--construct-floats' is selected, allowing construction of these
792      floating point constants.
794 `--emulation=NAME'
795      This option causes `as' to emulate `as' configured for some other
796      target, in all respects, including output format (choosing between
797      ELF and ECOFF only), handling of pseudo-opcodes which may generate
798      debugging information or store symbol table information, and
799      default endianness.  The available configuration names are:
800      `mipsecoff', `mipself', `mipslecoff', `mipsbecoff', `mipslelf',
801      `mipsbelf'.  The first two do not alter the default endianness
802      from that of the primary target for which the assembler was
803      configured; the others change the default to little- or big-endian
804      as indicated by the `b' or `l' in the name.  Using `-EB' or `-EL'
805      will override the endianness selection in any case.
807      This option is currently supported only when the primary target
808      `as' is configured for is a MIPS ELF or ECOFF target.
809      Furthermore, the primary target or others specified with
810      `--enable-targets=...' at configuration time must include support
811      for the other format, if both are to be available.  For example,
812      the Irix 5 configuration includes support for both.
814      Eventually, this option will support more configurations, with more
815      fine-grained control over the assembler's behavior, and will be
816      supported for more processors.
818 `-nocpp'
819      `as' ignores this option.  It is accepted for compatibility with
820      the native tools.
822 `--trap'
823 `--no-trap'
824 `--break'
825 `--no-break'
826      Control how to deal with multiplication overflow and division by
827      zero.  `--trap' or `--no-break' (which are synonyms) take a trap
828      exception (and only work for Instruction Set Architecture level 2
829      and higher); `--break' or `--no-trap' (also synonyms, and the
830      default) take a break exception.
832 `-n'
833      When this option is used, `as' will issue a warning every time it
834      generates a nop instruction from a macro.
836    The following options are available when as is configured for an
837 MCore processor.
839 `-jsri2bsr'
840 `-nojsri2bsr'
841      Enable or disable the JSRI to BSR transformation.  By default this
842      is enabled.  The command line option `-nojsri2bsr' can be used to
843      disable it.
845 `-sifilter'
846 `-nosifilter'
847      Enable or disable the silicon filter behaviour.  By default this
848      is disabled.  The default can be overridden by the `-sifilter'
849      command line option.
851 `-relax'
852      Alter jump instructions for long displacements.
854 `-mcpu=[210|340]'
855      Select the cpu type on the target hardware.  This controls which
856      instructions can be assembled.
858 `-EB'
859      Assemble for a big endian target.
861 `-EL'
862      Assemble for a little endian target.
865    See the info pages for documentation of the MMIX-specific options.
867    The following options are available when as is configured for the
868 s390 processor family.
870 `-m31'
871 `-m64'
872      Select the word size, either 31/32 bits or 64 bits.
874 `-mesa'
876 `-mzarch'
877      Select the architecture mode, either the Enterprise System
878      Architecture (esa) or the z/Architecture mode (zarch).
880 `-march=PROCESSOR'
881      Specify which s390 processor variant is the target, `g6', `g6',
882      `z900', `z990', `z9-109', `z9-ec', or `z10'.
884 `-mregnames'
885 `-mno-regnames'
886      Allow or disallow symbolic names for registers.
888 `-mwarn-areg-zero'
889      Warn whenever the operand for a base or index register has been
890      specified but evaluates to zero.
892    The following options are available when as is configured for an
893 Xtensa processor.
895 `--text-section-literals | --no-text-section-literals'
896      With `--text-section-literals', literal pools are interspersed in
897      the text section.  The default is `--no-text-section-literals',
898      which places literals in a separate section in the output file.
899      These options only affect literals referenced via PC-relative
900      `L32R' instructions; literals for absolute mode `L32R'
901      instructions are handled separately.
903 `--absolute-literals | --no-absolute-literals'
904      Indicate to the assembler whether `L32R' instructions use absolute
905      or PC-relative addressing.  The default is to assume absolute
906      addressing if the Xtensa processor includes the absolute `L32R'
907      addressing option.  Otherwise, only the PC-relative `L32R' mode
908      can be used.
910 `--target-align | --no-target-align'
911      Enable or disable automatic alignment to reduce branch penalties
912      at the expense of some code density.  The default is
913      `--target-align'.
915 `--longcalls | --no-longcalls'
916      Enable or disable transformation of call instructions to allow
917      calls across a greater range of addresses.  The default is
918      `--no-longcalls'.
920 `--transform | --no-transform'
921      Enable or disable all assembler transformations of Xtensa
922      instructions.  The default is `--transform'; `--no-transform'
923      should be used only in the rare cases when the instructions must
924      be exactly as specified in the assembly source.
926 `--rename-section OLDNAME=NEWNAME'
927      When generating output sections, rename the OLDNAME section to
928      NEWNAME.
930    The following options are available when as is configured for a Z80
931 family processor.
932 `-z80'
933      Assemble for Z80 processor.
935 `-r800'
936      Assemble for R800 processor.
938 `-ignore-undocumented-instructions'
939 `-Wnud'
940      Assemble undocumented Z80 instructions that also work on R800
941      without warning.
943 `-ignore-unportable-instructions'
944 `-Wnup'
945      Assemble all undocumented Z80 instructions without warning.
947 `-warn-undocumented-instructions'
948 `-Wud'
949      Issue a warning for undocumented Z80 instructions that also work
950      on R800.
952 `-warn-unportable-instructions'
953 `-Wup'
954      Issue a warning for undocumented Z80 instructions that do not work
955      on R800.
957 `-forbid-undocumented-instructions'
958 `-Fud'
959      Treat all undocumented instructions as errors.
961 `-forbid-unportable-instructions'
962 `-Fup'
963      Treat undocumented Z80 instructions that do not work on R800 as
964      errors.
966 * Menu:
968 * Manual::                      Structure of this Manual
969 * GNU Assembler::               The GNU Assembler
970 * Object Formats::              Object File Formats
971 * Command Line::                Command Line
972 * Input Files::                 Input Files
973 * Object::                      Output (Object) File
974 * Errors::                      Error and Warning Messages
976 \x1f
977 File: as.info,  Node: Manual,  Next: GNU Assembler,  Up: Overview
979 1.1 Structure of this Manual
980 ============================
982 This manual is intended to describe what you need to know to use GNU
983 `as'.  We cover the syntax expected in source files, including notation
984 for symbols, constants, and expressions; the directives that `as'
985 understands; and of course how to invoke `as'.
987    This manual also describes some of the machine-dependent features of
988 various flavors of the assembler.
990    On the other hand, this manual is _not_ intended as an introduction
991 to programming in assembly language--let alone programming in general!
992 In a similar vein, we make no attempt to introduce the machine
993 architecture; we do _not_ describe the instruction set, standard
994 mnemonics, registers or addressing modes that are standard to a
995 particular architecture.  You may want to consult the manufacturer's
996 machine architecture manual for this information.
998 \x1f
999 File: as.info,  Node: GNU Assembler,  Next: Object Formats,  Prev: Manual,  Up: Overview
1001 1.2 The GNU Assembler
1002 =====================
1004 GNU `as' is really a family of assemblers.  If you use (or have used)
1005 the GNU assembler on one architecture, you should find a fairly similar
1006 environment when you use it on another architecture.  Each version has
1007 much in common with the others, including object file formats, most
1008 assembler directives (often called "pseudo-ops") and assembler syntax.
1010    `as' is primarily intended to assemble the output of the GNU C
1011 compiler `gcc' for use by the linker `ld'.  Nevertheless, we've tried
1012 to make `as' assemble correctly everything that other assemblers for
1013 the same machine would assemble.  Any exceptions are documented
1014 explicitly (*note Machine Dependencies::).  This doesn't mean `as'
1015 always uses the same syntax as another assembler for the same
1016 architecture; for example, we know of several incompatible versions of
1017 680x0 assembly language syntax.
1019    Unlike older assemblers, `as' is designed to assemble a source
1020 program in one pass of the source file.  This has a subtle impact on the
1021 `.org' directive (*note `.org': Org.).
1023 \x1f
1024 File: as.info,  Node: Object Formats,  Next: Command Line,  Prev: GNU Assembler,  Up: Overview
1026 1.3 Object File Formats
1027 =======================
1029 The GNU assembler can be configured to produce several alternative
1030 object file formats.  For the most part, this does not affect how you
1031 write assembly language programs; but directives for debugging symbols
1032 are typically different in different file formats.  *Note Symbol
1033 Attributes: Symbol Attributes.
1035 \x1f
1036 File: as.info,  Node: Command Line,  Next: Input Files,  Prev: Object Formats,  Up: Overview
1038 1.4 Command Line
1039 ================
1041 After the program name `as', the command line may contain options and
1042 file names.  Options may appear in any order, and may be before, after,
1043 or between file names.  The order of file names is significant.
1045    `--' (two hyphens) by itself names the standard input file
1046 explicitly, as one of the files for `as' to assemble.
1048    Except for `--' any command line argument that begins with a hyphen
1049 (`-') is an option.  Each option changes the behavior of `as'.  No
1050 option changes the way another option works.  An option is a `-'
1051 followed by one or more letters; the case of the letter is important.
1052 All options are optional.
1054    Some options expect exactly one file name to follow them.  The file
1055 name may either immediately follow the option's letter (compatible with
1056 older assemblers) or it may be the next command argument (GNU
1057 standard).  These two command lines are equivalent:
1059      as -o my-object-file.o mumble.s
1060      as -omy-object-file.o mumble.s
1062 \x1f
1063 File: as.info,  Node: Input Files,  Next: Object,  Prev: Command Line,  Up: Overview
1065 1.5 Input Files
1066 ===============
1068 We use the phrase "source program", abbreviated "source", to describe
1069 the program input to one run of `as'.  The program may be in one or
1070 more files; how the source is partitioned into files doesn't change the
1071 meaning of the source.
1073    The source program is a concatenation of the text in all the files,
1074 in the order specified.
1076    Each time you run `as' it assembles exactly one source program.  The
1077 source program is made up of one or more files.  (The standard input is
1078 also a file.)
1080    You give `as' a command line that has zero or more input file names.
1081 The input files are read (from left file name to right).  A command
1082 line argument (in any position) that has no special meaning is taken to
1083 be an input file name.
1085    If you give `as' no file names it attempts to read one input file
1086 from the `as' standard input, which is normally your terminal.  You may
1087 have to type <ctl-D> to tell `as' there is no more program to assemble.
1089    Use `--' if you need to explicitly name the standard input file in
1090 your command line.
1092    If the source is empty, `as' produces a small, empty object file.
1094 Filenames and Line-numbers
1095 --------------------------
1097 There are two ways of locating a line in the input file (or files) and
1098 either may be used in reporting error messages.  One way refers to a
1099 line number in a physical file; the other refers to a line number in a
1100 "logical" file.  *Note Error and Warning Messages: Errors.
1102    "Physical files" are those files named in the command line given to
1103 `as'.
1105    "Logical files" are simply names declared explicitly by assembler
1106 directives; they bear no relation to physical files.  Logical file
1107 names help error messages reflect the original source file, when `as'
1108 source is itself synthesized from other files.  `as' understands the
1109 `#' directives emitted by the `gcc' preprocessor.  See also *Note
1110 `.file': File.
1112 \x1f
1113 File: as.info,  Node: Object,  Next: Errors,  Prev: Input Files,  Up: Overview
1115 1.6 Output (Object) File
1116 ========================
1118 Every time you run `as' it produces an output file, which is your
1119 assembly language program translated into numbers.  This file is the
1120 object file.  Its default name is `a.out'.  You can give it another
1121 name by using the `-o' option.  Conventionally, object file names end
1122 with `.o'.  The default name is used for historical reasons: older
1123 assemblers were capable of assembling self-contained programs directly
1124 into a runnable program.  (For some formats, this isn't currently
1125 possible, but it can be done for the `a.out' format.)
1127    The object file is meant for input to the linker `ld'.  It contains
1128 assembled program code, information to help `ld' integrate the
1129 assembled program into a runnable file, and (optionally) symbolic
1130 information for the debugger.
1132 \x1f
1133 File: as.info,  Node: Errors,  Prev: Object,  Up: Overview
1135 1.7 Error and Warning Messages
1136 ==============================
1138 `as' may write warnings and error messages to the standard error file
1139 (usually your terminal).  This should not happen when  a compiler runs
1140 `as' automatically.  Warnings report an assumption made so that `as'
1141 could keep assembling a flawed program; errors report a grave problem
1142 that stops the assembly.
1144    Warning messages have the format
1146      file_name:NNN:Warning Message Text
1148 (where NNN is a line number).  If a logical file name has been given
1149 (*note `.file': File.) it is used for the filename, otherwise the name
1150 of the current input file is used.  If a logical line number was given
1151 (*note `.line': Line.)  then it is used to calculate the number printed,
1152 otherwise the actual line in the current source file is printed.  The
1153 message text is intended to be self explanatory (in the grand Unix
1154 tradition).
1156    Error messages have the format
1157      file_name:NNN:FATAL:Error Message Text
1158    The file name and line number are derived as for warning messages.
1159 The actual message text may be rather less explanatory because many of
1160 them aren't supposed to happen.
1162 \x1f
1163 File: as.info,  Node: Invoking,  Next: Syntax,  Prev: Overview,  Up: Top
1165 2 Command-Line Options
1166 **********************
1168 This chapter describes command-line options available in _all_ versions
1169 of the GNU assembler; see *Note Machine Dependencies::, for options
1170 specific to particular machine architectures.
1172    If you are invoking `as' via the GNU C compiler, you can use the
1173 `-Wa' option to pass arguments through to the assembler.  The assembler
1174 arguments must be separated from each other (and the `-Wa') by commas.
1175 For example:
1177      gcc -c -g -O -Wa,-alh,-L file.c
1179 This passes two options to the assembler: `-alh' (emit a listing to
1180 standard output with high-level and assembly source) and `-L' (retain
1181 local symbols in the symbol table).
1183    Usually you do not need to use this `-Wa' mechanism, since many
1184 compiler command-line options are automatically passed to the assembler
1185 by the compiler.  (You can call the GNU compiler driver with the `-v'
1186 option to see precisely what options it passes to each compilation
1187 pass, including the assembler.)
1189 * Menu:
1191 * a::             -a[cdghlns] enable listings
1192 * alternate::     --alternate enable alternate macro syntax
1193 * D::             -D for compatibility
1194 * f::             -f to work faster
1195 * I::             -I for .include search path
1197 * K::             -K for difference tables
1199 * L::             -L to retain local symbols
1200 * listing::       --listing-XXX to configure listing output
1201 * M::             -M or --mri to assemble in MRI compatibility mode
1202 * MD::            --MD for dependency tracking
1203 * o::             -o to name the object file
1204 * R::             -R to join data and text sections
1205 * statistics::    --statistics to see statistics about assembly
1206 * traditional-format:: --traditional-format for compatible output
1207 * v::             -v to announce version
1208 * W::             -W, --no-warn, --warn, --fatal-warnings to control warnings
1209 * Z::             -Z to make object file even after errors
1211 \x1f
1212 File: as.info,  Node: a,  Next: alternate,  Up: Invoking
1214 2.1 Enable Listings: `-a[cdghlns]'
1215 ==================================
1217 These options enable listing output from the assembler.  By itself,
1218 `-a' requests high-level, assembly, and symbols listing.  You can use
1219 other letters to select specific options for the list: `-ah' requests a
1220 high-level language listing, `-al' requests an output-program assembly
1221 listing, and `-as' requests a symbol table listing.  High-level
1222 listings require that a compiler debugging option like `-g' be used,
1223 and that assembly listings (`-al') be requested also.
1225    Use the `-ag' option to print a first section with general assembly
1226 information, like as version, switches passed, or time stamp.
1228    Use the `-ac' option to omit false conditionals from a listing.  Any
1229 lines which are not assembled because of a false `.if' (or `.ifdef', or
1230 any other conditional), or a true `.if' followed by an `.else', will be
1231 omitted from the listing.
1233    Use the `-ad' option to omit debugging directives from the listing.
1235    Once you have specified one of these options, you can further control
1236 listing output and its appearance using the directives `.list',
1237 `.nolist', `.psize', `.eject', `.title', and `.sbttl'.  The `-an'
1238 option turns off all forms processing.  If you do not request listing
1239 output with one of the `-a' options, the listing-control directives
1240 have no effect.
1242    The letters after `-a' may be combined into one option, _e.g._,
1243 `-aln'.
1245    Note if the assembler source is coming from the standard input (e.g.,
1246 because it is being created by `gcc' and the `-pipe' command line switch
1247 is being used) then the listing will not contain any comments or
1248 preprocessor directives.  This is because the listing code buffers
1249 input source lines from stdin only after they have been preprocessed by
1250 the assembler.  This reduces memory usage and makes the code more
1251 efficient.
1253 \x1f
1254 File: as.info,  Node: alternate,  Next: D,  Prev: a,  Up: Invoking
1256 2.2 `--alternate'
1257 =================
1259 Begin in alternate macro mode, see *Note `.altmacro': Altmacro.
1261 \x1f
1262 File: as.info,  Node: D,  Next: f,  Prev: alternate,  Up: Invoking
1264 2.3 `-D'
1265 ========
1267 This option has no effect whatsoever, but it is accepted to make it more
1268 likely that scripts written for other assemblers also work with `as'.
1270 \x1f
1271 File: as.info,  Node: f,  Next: I,  Prev: D,  Up: Invoking
1273 2.4 Work Faster: `-f'
1274 =====================
1276 `-f' should only be used when assembling programs written by a
1277 (trusted) compiler.  `-f' stops the assembler from doing whitespace and
1278 comment preprocessing on the input file(s) before assembling them.
1279 *Note Preprocessing: Preprocessing.
1281      _Warning:_ if you use `-f' when the files actually need to be
1282      preprocessed (if they contain comments, for example), `as' does
1283      not work correctly.
1285 \x1f
1286 File: as.info,  Node: I,  Next: K,  Prev: f,  Up: Invoking
1288 2.5 `.include' Search Path: `-I' PATH
1289 =====================================
1291 Use this option to add a PATH to the list of directories `as' searches
1292 for files specified in `.include' directives (*note `.include':
1293 Include.).  You may use `-I' as many times as necessary to include a
1294 variety of paths.  The current working directory is always searched
1295 first; after that, `as' searches any `-I' directories in the same order
1296 as they were specified (left to right) on the command line.
1298 \x1f
1299 File: as.info,  Node: K,  Next: L,  Prev: I,  Up: Invoking
1301 2.6 Difference Tables: `-K'
1302 ===========================
1304 `as' sometimes alters the code emitted for directives of the form
1305 `.word SYM1-SYM2'.  *Note `.word': Word.  You can use the `-K' option
1306 if you want a warning issued when this is done.
1308 \x1f
1309 File: as.info,  Node: L,  Next: listing,  Prev: K,  Up: Invoking
1311 2.7 Include Local Symbols: `-L'
1312 ===============================
1314 Symbols beginning with system-specific local label prefixes, typically
1315 `.L' for ELF systems or `L' for traditional a.out systems, are called
1316 "local symbols".  *Note Symbol Names::.  Normally you do not see such
1317 symbols when debugging, because they are intended for the use of
1318 programs (like compilers) that compose assembler programs, not for your
1319 notice.  Normally both `as' and `ld' discard such symbols, so you do
1320 not normally debug with them.
1322    This option tells `as' to retain those local symbols in the object
1323 file.  Usually if you do this you also tell the linker `ld' to preserve
1324 those symbols.
1326 \x1f
1327 File: as.info,  Node: listing,  Next: M,  Prev: L,  Up: Invoking
1329 2.8 Configuring listing output: `--listing'
1330 ===========================================
1332 The listing feature of the assembler can be enabled via the command
1333 line switch `-a' (*note a::).  This feature combines the input source
1334 file(s) with a hex dump of the corresponding locations in the output
1335 object file, and displays them as a listing file.  The format of this
1336 listing can be controlled by directives inside the assembler source
1337 (i.e., `.list' (*note List::), `.title' (*note Title::), `.sbttl'
1338 (*note Sbttl::), `.psize' (*note Psize::), and `.eject' (*note Eject::)
1339 and also by the following switches:
1341 `--listing-lhs-width=`number''
1342      Sets the maximum width, in words, of the first line of the hex
1343      byte dump.  This dump appears on the left hand side of the listing
1344      output.
1346 `--listing-lhs-width2=`number''
1347      Sets the maximum width, in words, of any further lines of the hex
1348      byte dump for a given input source line.  If this value is not
1349      specified, it defaults to being the same as the value specified
1350      for `--listing-lhs-width'.  If neither switch is used the default
1351      is to one.
1353 `--listing-rhs-width=`number''
1354      Sets the maximum width, in characters, of the source line that is
1355      displayed alongside the hex dump.  The default value for this
1356      parameter is 100.  The source line is displayed on the right hand
1357      side of the listing output.
1359 `--listing-cont-lines=`number''
1360      Sets the maximum number of continuation lines of hex dump that
1361      will be displayed for a given single line of source input.  The
1362      default value is 4.
1364 \x1f
1365 File: as.info,  Node: M,  Next: MD,  Prev: listing,  Up: Invoking
1367 2.9 Assemble in MRI Compatibility Mode: `-M'
1368 ============================================
1370 The `-M' or `--mri' option selects MRI compatibility mode.  This
1371 changes the syntax and pseudo-op handling of `as' to make it compatible
1372 with the `ASM68K' or the `ASM960' (depending upon the configured
1373 target) assembler from Microtec Research.  The exact nature of the MRI
1374 syntax will not be documented here; see the MRI manuals for more
1375 information.  Note in particular that the handling of macros and macro
1376 arguments is somewhat different.  The purpose of this option is to
1377 permit assembling existing MRI assembler code using `as'.
1379    The MRI compatibility is not complete.  Certain operations of the
1380 MRI assembler depend upon its object file format, and can not be
1381 supported using other object file formats.  Supporting these would
1382 require enhancing each object file format individually.  These are:
1384    * global symbols in common section
1386      The m68k MRI assembler supports common sections which are merged
1387      by the linker.  Other object file formats do not support this.
1388      `as' handles common sections by treating them as a single common
1389      symbol.  It permits local symbols to be defined within a common
1390      section, but it can not support global symbols, since it has no
1391      way to describe them.
1393    * complex relocations
1395      The MRI assemblers support relocations against a negated section
1396      address, and relocations which combine the start addresses of two
1397      or more sections.  These are not support by other object file
1398      formats.
1400    * `END' pseudo-op specifying start address
1402      The MRI `END' pseudo-op permits the specification of a start
1403      address.  This is not supported by other object file formats.  The
1404      start address may instead be specified using the `-e' option to
1405      the linker, or in a linker script.
1407    * `IDNT', `.ident' and `NAME' pseudo-ops
1409      The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module
1410      name to the output file.  This is not supported by other object
1411      file formats.
1413    * `ORG' pseudo-op
1415      The m68k MRI `ORG' pseudo-op begins an absolute section at a given
1416      address.  This differs from the usual `as' `.org' pseudo-op, which
1417      changes the location within the current section.  Absolute
1418      sections are not supported by other object file formats.  The
1419      address of a section may be assigned within a linker script.
1421    There are some other features of the MRI assembler which are not
1422 supported by `as', typically either because they are difficult or
1423 because they seem of little consequence.  Some of these may be
1424 supported in future releases.
1426    * EBCDIC strings
1428      EBCDIC strings are not supported.
1430    * packed binary coded decimal
1432      Packed binary coded decimal is not supported.  This means that the
1433      `DC.P' and `DCB.P' pseudo-ops are not supported.
1435    * `FEQU' pseudo-op
1437      The m68k `FEQU' pseudo-op is not supported.
1439    * `NOOBJ' pseudo-op
1441      The m68k `NOOBJ' pseudo-op is not supported.
1443    * `OPT' branch control options
1445      The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL',
1446      and `BRW'--are ignored.  `as' automatically relaxes all branches,
1447      whether forward or backward, to an appropriate size, so these
1448      options serve no purpose.
1450    * `OPT' list control options
1452      The following m68k `OPT' list control options are ignored: `C',
1453      `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'.
1455    * other `OPT' options
1457      The following m68k `OPT' options are ignored: `NEST', `O', `OLD',
1458      `OP', `P', `PCO', `PCR', `PCS', `R'.
1460    * `OPT' `D' option is default
1462      The m68k `OPT' `D' option is the default, unlike the MRI assembler.
1463      `OPT NOD' may be used to turn it off.
1465    * `XREF' pseudo-op.
1467      The m68k `XREF' pseudo-op is ignored.
1469    * `.debug' pseudo-op
1471      The i960 `.debug' pseudo-op is not supported.
1473    * `.extended' pseudo-op
1475      The i960 `.extended' pseudo-op is not supported.
1477    * `.list' pseudo-op.
1479      The various options of the i960 `.list' pseudo-op are not
1480      supported.
1482    * `.optimize' pseudo-op
1484      The i960 `.optimize' pseudo-op is not supported.
1486    * `.output' pseudo-op
1488      The i960 `.output' pseudo-op is not supported.
1490    * `.setreal' pseudo-op
1492      The i960 `.setreal' pseudo-op is not supported.
1495 \x1f
1496 File: as.info,  Node: MD,  Next: o,  Prev: M,  Up: Invoking
1498 2.10 Dependency Tracking: `--MD'
1499 ================================
1501 `as' can generate a dependency file for the file it creates.  This file
1502 consists of a single rule suitable for `make' describing the
1503 dependencies of the main source file.
1505    The rule is written to the file named in its argument.
1507    This feature is used in the automatic updating of makefiles.
1509 \x1f
1510 File: as.info,  Node: o,  Next: R,  Prev: MD,  Up: Invoking
1512 2.11 Name the Object File: `-o'
1513 ===============================
1515 There is always one object file output when you run `as'.  By default
1516 it has the name `a.out' (or `b.out', for Intel 960 targets only).  You
1517 use this option (which takes exactly one filename) to give the object
1518 file a different name.
1520    Whatever the object file is called, `as' overwrites any existing
1521 file of the same name.
1523 \x1f
1524 File: as.info,  Node: R,  Next: statistics,  Prev: o,  Up: Invoking
1526 2.12 Join Data and Text Sections: `-R'
1527 ======================================
1529 `-R' tells `as' to write the object file as if all data-section data
1530 lives in the text section.  This is only done at the very last moment:
1531 your binary data are the same, but data section parts are relocated
1532 differently.  The data section part of your object file is zero bytes
1533 long because all its bytes are appended to the text section.  (*Note
1534 Sections and Relocation: Sections.)
1536    When you specify `-R' it would be possible to generate shorter
1537 address displacements (because we do not have to cross between text and
1538 data section).  We refrain from doing this simply for compatibility with
1539 older versions of `as'.  In future, `-R' may work this way.
1541    When `as' is configured for COFF or ELF output, this option is only
1542 useful if you use sections named `.text' and `.data'.
1544    `-R' is not supported for any of the HPPA targets.  Using `-R'
1545 generates a warning from `as'.
1547 \x1f
1548 File: as.info,  Node: statistics,  Next: traditional-format,  Prev: R,  Up: Invoking
1550 2.13 Display Assembly Statistics: `--statistics'
1551 ================================================
1553 Use `--statistics' to display two statistics about the resources used by
1554 `as': the maximum amount of space allocated during the assembly (in
1555 bytes), and the total execution time taken for the assembly (in CPU
1556 seconds).
1558 \x1f
1559 File: as.info,  Node: traditional-format,  Next: v,  Prev: statistics,  Up: Invoking
1561 2.14 Compatible Output: `--traditional-format'
1562 ==============================================
1564 For some targets, the output of `as' is different in some ways from the
1565 output of some existing assembler.  This switch requests `as' to use
1566 the traditional format instead.
1568    For example, it disables the exception frame optimizations which
1569 `as' normally does by default on `gcc' output.
1571 \x1f
1572 File: as.info,  Node: v,  Next: W,  Prev: traditional-format,  Up: Invoking
1574 2.15 Announce Version: `-v'
1575 ===========================
1577 You can find out what version of as is running by including the option
1578 `-v' (which you can also spell as `-version') on the command line.
1580 \x1f
1581 File: as.info,  Node: W,  Next: Z,  Prev: v,  Up: Invoking
1583 2.16 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings'
1584 ======================================================================
1586 `as' should never give a warning or error message when assembling
1587 compiler output.  But programs written by people often cause `as' to
1588 give a warning that a particular assumption was made.  All such
1589 warnings are directed to the standard error file.
1591    If you use the `-W' and `--no-warn' options, no warnings are issued.
1592 This only affects the warning messages: it does not change any
1593 particular of how `as' assembles your file.  Errors, which stop the
1594 assembly, are still reported.
1596    If you use the `--fatal-warnings' option, `as' considers files that
1597 generate warnings to be in error.
1599    You can switch these options off again by specifying `--warn', which
1600 causes warnings to be output as usual.
1602 \x1f
1603 File: as.info,  Node: Z,  Prev: W,  Up: Invoking
1605 2.17 Generate Object File in Spite of Errors: `-Z'
1606 ==================================================
1608 After an error message, `as' normally produces no output.  If for some
1609 reason you are interested in object file output even after `as' gives
1610 an error message on your program, use the `-Z' option.  If there are
1611 any errors, `as' continues anyways, and writes an object file after a
1612 final warning message of the form `N errors, M warnings, generating bad
1613 object file.'
1615 \x1f
1616 File: as.info,  Node: Syntax,  Next: Sections,  Prev: Invoking,  Up: Top
1618 3 Syntax
1619 ********
1621 This chapter describes the machine-independent syntax allowed in a
1622 source file.  `as' syntax is similar to what many other assemblers use;
1623 it is inspired by the BSD 4.2 assembler, except that `as' does not
1624 assemble Vax bit-fields.
1626 * Menu:
1628 * Preprocessing::              Preprocessing
1629 * Whitespace::                  Whitespace
1630 * Comments::                    Comments
1631 * Symbol Intro::                Symbols
1632 * Statements::                  Statements
1633 * Constants::                   Constants
1635 \x1f
1636 File: as.info,  Node: Preprocessing,  Next: Whitespace,  Up: Syntax
1638 3.1 Preprocessing
1639 =================
1641 The `as' internal preprocessor:
1642    * adjusts and removes extra whitespace.  It leaves one space or tab
1643      before the keywords on a line, and turns any other whitespace on
1644      the line into a single space.
1646    * removes all comments, replacing them with a single space, or an
1647      appropriate number of newlines.
1649    * converts character constants into the appropriate numeric values.
1651    It does not do macro processing, include file handling, or anything
1652 else you may get from your C compiler's preprocessor.  You can do
1653 include file processing with the `.include' directive (*note
1654 `.include': Include.).  You can use the GNU C compiler driver to get
1655 other "CPP" style preprocessing by giving the input file a `.S' suffix.
1656 *Note Options Controlling the Kind of Output: (gcc.info)Overall
1657 Options.
1659    Excess whitespace, comments, and character constants cannot be used
1660 in the portions of the input text that are not preprocessed.
1662    If the first line of an input file is `#NO_APP' or if you use the
1663 `-f' option, whitespace and comments are not removed from the input
1664 file.  Within an input file, you can ask for whitespace and comment
1665 removal in specific portions of the by putting a line that says `#APP'
1666 before the text that may contain whitespace or comments, and putting a
1667 line that says `#NO_APP' after this text.  This feature is mainly
1668 intend to support `asm' statements in compilers whose output is
1669 otherwise free of comments and whitespace.
1671 \x1f
1672 File: as.info,  Node: Whitespace,  Next: Comments,  Prev: Preprocessing,  Up: Syntax
1674 3.2 Whitespace
1675 ==============
1677 "Whitespace" is one or more blanks or tabs, in any order.  Whitespace
1678 is used to separate symbols, and to make programs neater for people to
1679 read.  Unless within character constants (*note Character Constants:
1680 Characters.), any whitespace means the same as exactly one space.
1682 \x1f
1683 File: as.info,  Node: Comments,  Next: Symbol Intro,  Prev: Whitespace,  Up: Syntax
1685 3.3 Comments
1686 ============
1688 There are two ways of rendering comments to `as'.  In both cases the
1689 comment is equivalent to one space.
1691    Anything from `/*' through the next `*/' is a comment.  This means
1692 you may not nest these comments.
1694      /*
1695        The only way to include a newline ('\n') in a comment
1696        is to use this sort of comment.
1697      */
1699      /* This sort of comment does not nest. */
1701    Anything from the "line comment" character to the next newline is
1702 considered a comment and is ignored.  The line comment character is `;'
1703 on the ARC; `@' on the ARM; `;' for the H8/300 family; `;' for the HPPA;
1704 `#' on the i386 and x86-64; `#' on the i960; `;' for the PDP-11; `;'
1705 for picoJava; `#' for Motorola PowerPC; `#' for IBM S/390; `#' for the
1706 Sunplus SCORE; `!' for the Renesas / SuperH SH; `!' on the SPARC; `#'
1707 on the ip2k; `#' on the m32c; `#' on the m32r; `|' on the 680x0; `#' on
1708 the 68HC11 and 68HC12; `#' on the Vax; `;' for the Z80; `!' for the
1709 Z8000; `#' on the V850; `#' for Xtensa systems; see *Note Machine
1710 Dependencies::.
1712    On some machines there are two different line comment characters.
1713 One character only begins a comment if it is the first non-whitespace
1714 character on a line, while the other always begins a comment.
1716    The V850 assembler also supports a double dash as starting a comment
1717 that extends to the end of the line.
1719    `--';
1721    To be compatible with past assemblers, lines that begin with `#'
1722 have a special interpretation.  Following the `#' should be an absolute
1723 expression (*note Expressions::): the logical line number of the _next_
1724 line.  Then a string (*note Strings: Strings.) is allowed: if present
1725 it is a new logical file name.  The rest of the line, if any, should be
1726 whitespace.
1728    If the first non-whitespace characters on the line are not numeric,
1729 the line is ignored.  (Just like a comment.)
1731                                # This is an ordinary comment.
1732      # 42-6 "new_file_name"    # New logical file name
1733                                # This is logical line # 36.
1734    This feature is deprecated, and may disappear from future versions
1735 of `as'.
1737 \x1f
1738 File: as.info,  Node: Symbol Intro,  Next: Statements,  Prev: Comments,  Up: Syntax
1740 3.4 Symbols
1741 ===========
1743 A "symbol" is one or more characters chosen from the set of all letters
1744 (both upper and lower case), digits and the three characters `_.$'.  On
1745 most machines, you can also use `$' in symbol names; exceptions are
1746 noted in *Note Machine Dependencies::.  No symbol may begin with a
1747 digit.  Case is significant.  There is no length limit: all characters
1748 are significant.  Symbols are delimited by characters not in that set,
1749 or by the beginning of a file (since the source program must end with a
1750 newline, the end of a file is not a possible symbol delimiter).  *Note
1751 Symbols::.  
1753 \x1f
1754 File: as.info,  Node: Statements,  Next: Constants,  Prev: Symbol Intro,  Up: Syntax
1756 3.5 Statements
1757 ==============
1759 A "statement" ends at a newline character (`\n') or line separator
1760 character.  (The line separator is usually `;', unless this conflicts
1761 with the comment character; see *Note Machine Dependencies::.)  The
1762 newline or separator character is considered part of the preceding
1763 statement.  Newlines and separators within character constants are an
1764 exception: they do not end statements.
1766 It is an error to end any statement with end-of-file:  the last
1767 character of any input file should be a newline.
1769    An empty statement is allowed, and may include whitespace.  It is
1770 ignored.
1772    A statement begins with zero or more labels, optionally followed by a
1773 key symbol which determines what kind of statement it is.  The key
1774 symbol determines the syntax of the rest of the statement.  If the
1775 symbol begins with a dot `.' then the statement is an assembler
1776 directive: typically valid for any computer.  If the symbol begins with
1777 a letter the statement is an assembly language "instruction": it
1778 assembles into a machine language instruction.  Different versions of
1779 `as' for different computers recognize different instructions.  In
1780 fact, the same symbol may represent a different instruction in a
1781 different computer's assembly language.
1783    A label is a symbol immediately followed by a colon (`:').
1784 Whitespace before a label or after a colon is permitted, but you may not
1785 have whitespace between a label's symbol and its colon. *Note Labels::.
1787    For HPPA targets, labels need not be immediately followed by a
1788 colon, but the definition of a label must begin in column zero.  This
1789 also implies that only one label may be defined on each line.
1791      label:     .directive    followed by something
1792      another_label:           # This is an empty statement.
1793                 instruction   operand_1, operand_2, ...
1795 \x1f
1796 File: as.info,  Node: Constants,  Prev: Statements,  Up: Syntax
1798 3.6 Constants
1799 =============
1801 A constant is a number, written so that its value is known by
1802 inspection, without knowing any context.  Like this:
1803      .byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
1804      .ascii "Ring the bell\7"                  # A string constant.
1805      .octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
1806      .float 0f-314159265358979323846264338327\
1807      95028841971.693993751E-40                 # - pi, a flonum.
1809 * Menu:
1811 * Characters::                  Character Constants
1812 * Numbers::                     Number Constants
1814 \x1f
1815 File: as.info,  Node: Characters,  Next: Numbers,  Up: Constants
1817 3.6.1 Character Constants
1818 -------------------------
1820 There are two kinds of character constants.  A "character" stands for
1821 one character in one byte and its value may be used in numeric
1822 expressions.  String constants (properly called string _literals_) are
1823 potentially many bytes and their values may not be used in arithmetic
1824 expressions.
1826 * Menu:
1828 * Strings::                     Strings
1829 * Chars::                       Characters
1831 \x1f
1832 File: as.info,  Node: Strings,  Next: Chars,  Up: Characters
1834 3.6.1.1 Strings
1835 ...............
1837 A "string" is written between double-quotes.  It may contain
1838 double-quotes or null characters.  The way to get special characters
1839 into a string is to "escape" these characters: precede them with a
1840 backslash `\' character.  For example `\\' represents one backslash:
1841 the first `\' is an escape which tells `as' to interpret the second
1842 character literally as a backslash (which prevents `as' from
1843 recognizing the second `\' as an escape character).  The complete list
1844 of escapes follows.
1846 `\b'
1847      Mnemonic for backspace; for ASCII this is octal code 010.
1849 `\f'
1850      Mnemonic for FormFeed; for ASCII this is octal code 014.
1852 `\n'
1853      Mnemonic for newline; for ASCII this is octal code 012.
1855 `\r'
1856      Mnemonic for carriage-Return; for ASCII this is octal code 015.
1858 `\t'
1859      Mnemonic for horizontal Tab; for ASCII this is octal code 011.
1861 `\ DIGIT DIGIT DIGIT'
1862      An octal character code.  The numeric code is 3 octal digits.  For
1863      compatibility with other Unix systems, 8 and 9 are accepted as
1864      digits: for example, `\008' has the value 010, and `\009' the
1865      value 011.
1867 `\`x' HEX-DIGITS...'
1868      A hex character code.  All trailing hex digits are combined.
1869      Either upper or lower case `x' works.
1871 `\\'
1872      Represents one `\' character.
1874 `\"'
1875      Represents one `"' character.  Needed in strings to represent this
1876      character, because an unescaped `"' would end the string.
1878 `\ ANYTHING-ELSE'
1879      Any other character when escaped by `\' gives a warning, but
1880      assembles as if the `\' was not present.  The idea is that if you
1881      used an escape sequence you clearly didn't want the literal
1882      interpretation of the following character.  However `as' has no
1883      other interpretation, so `as' knows it is giving you the wrong
1884      code and warns you of the fact.
1886    Which characters are escapable, and what those escapes represent,
1887 varies widely among assemblers.  The current set is what we think the
1888 BSD 4.2 assembler recognizes, and is a subset of what most C compilers
1889 recognize.  If you are in doubt, do not use an escape sequence.
1891 \x1f
1892 File: as.info,  Node: Chars,  Prev: Strings,  Up: Characters
1894 3.6.1.2 Characters
1895 ..................
1897 A single character may be written as a single quote immediately
1898 followed by that character.  The same escapes apply to characters as to
1899 strings.  So if you want to write the character backslash, you must
1900 write `'\\' where the first `\' escapes the second `\'.  As you can
1901 see, the quote is an acute accent, not a grave accent.  A newline
1902 immediately following an acute accent is taken as a literal character
1903 and does not count as the end of a statement.  The value of a character
1904 constant in a numeric expression is the machine's byte-wide code for
1905 that character.  `as' assumes your character code is ASCII: `'A' means
1906 65, `'B' means 66, and so on.
1908 \x1f
1909 File: as.info,  Node: Numbers,  Prev: Characters,  Up: Constants
1911 3.6.2 Number Constants
1912 ----------------------
1914 `as' distinguishes three kinds of numbers according to how they are
1915 stored in the target machine.  _Integers_ are numbers that would fit
1916 into an `int' in the C language.  _Bignums_ are integers, but they are
1917 stored in more than 32 bits.  _Flonums_ are floating point numbers,
1918 described below.
1920 * Menu:
1922 * Integers::                    Integers
1923 * Bignums::                     Bignums
1924 * Flonums::                     Flonums
1926 \x1f
1927 File: as.info,  Node: Integers,  Next: Bignums,  Up: Numbers
1929 3.6.2.1 Integers
1930 ................
1932 A binary integer is `0b' or `0B' followed by zero or more of the binary
1933 digits `01'.
1935    An octal integer is `0' followed by zero or more of the octal digits
1936 (`01234567').
1938    A decimal integer starts with a non-zero digit followed by zero or
1939 more digits (`0123456789').
1941    A hexadecimal integer is `0x' or `0X' followed by one or more
1942 hexadecimal digits chosen from `0123456789abcdefABCDEF'.
1944    Integers have the usual values.  To denote a negative integer, use
1945 the prefix operator `-' discussed under expressions (*note Prefix
1946 Operators: Prefix Ops.).
1948 \x1f
1949 File: as.info,  Node: Bignums,  Next: Flonums,  Prev: Integers,  Up: Numbers
1951 3.6.2.2 Bignums
1952 ...............
1954 A "bignum" has the same syntax and semantics as an integer except that
1955 the number (or its negative) takes more than 32 bits to represent in
1956 binary.  The distinction is made because in some places integers are
1957 permitted while bignums are not.
1959 \x1f
1960 File: as.info,  Node: Flonums,  Prev: Bignums,  Up: Numbers
1962 3.6.2.3 Flonums
1963 ...............
1965 A "flonum" represents a floating point number.  The translation is
1966 indirect: a decimal floating point number from the text is converted by
1967 `as' to a generic binary floating point number of more than sufficient
1968 precision.  This generic floating point number is converted to a
1969 particular computer's floating point format (or formats) by a portion
1970 of `as' specialized to that computer.
1972    A flonum is written by writing (in order)
1973    * The digit `0'.  (`0' is optional on the HPPA.)
1975    * A letter, to tell `as' the rest of the number is a flonum.  `e' is
1976      recommended.  Case is not important.
1978      On the H8/300, Renesas / SuperH SH, and AMD 29K architectures, the
1979      letter must be one of the letters `DFPRSX' (in upper or lower
1980      case).
1982      On the ARC, the letter must be one of the letters `DFRS' (in upper
1983      or lower case).
1985      On the Intel 960 architecture, the letter must be one of the
1986      letters `DFT' (in upper or lower case).
1988      On the HPPA architecture, the letter must be `E' (upper case only).
1990    * An optional sign: either `+' or `-'.
1992    * An optional "integer part": zero or more decimal digits.
1994    * An optional "fractional part": `.' followed by zero or more
1995      decimal digits.
1997    * An optional exponent, consisting of:
1999         * An `E' or `e'.
2001         * Optional sign: either `+' or `-'.
2003         * One or more decimal digits.
2006    At least one of the integer part or the fractional part must be
2007 present.  The floating point number has the usual base-10 value.
2009    `as' does all processing using integers.  Flonums are computed
2010 independently of any floating point hardware in the computer running
2011 `as'.
2013 \x1f
2014 File: as.info,  Node: Sections,  Next: Symbols,  Prev: Syntax,  Up: Top
2016 4 Sections and Relocation
2017 *************************
2019 * Menu:
2021 * Secs Background::             Background
2022 * Ld Sections::                 Linker Sections
2023 * As Sections::                 Assembler Internal Sections
2024 * Sub-Sections::                Sub-Sections
2025 * bss::                         bss Section
2027 \x1f
2028 File: as.info,  Node: Secs Background,  Next: Ld Sections,  Up: Sections
2030 4.1 Background
2031 ==============
2033 Roughly, a section is a range of addresses, with no gaps; all data "in"
2034 those addresses is treated the same for some particular purpose.  For
2035 example there may be a "read only" section.
2037    The linker `ld' reads many object files (partial programs) and
2038 combines their contents to form a runnable program.  When `as' emits an
2039 object file, the partial program is assumed to start at address 0.
2040 `ld' assigns the final addresses for the partial program, so that
2041 different partial programs do not overlap.  This is actually an
2042 oversimplification, but it suffices to explain how `as' uses sections.
2044    `ld' moves blocks of bytes of your program to their run-time
2045 addresses.  These blocks slide to their run-time addresses as rigid
2046 units; their length does not change and neither does the order of bytes
2047 within them.  Such a rigid unit is called a _section_.  Assigning
2048 run-time addresses to sections is called "relocation".  It includes the
2049 task of adjusting mentions of object-file addresses so they refer to
2050 the proper run-time addresses.  For the H8/300, and for the Renesas /
2051 SuperH SH, `as' pads sections if needed to ensure they end on a word
2052 (sixteen bit) boundary.
2054    An object file written by `as' has at least three sections, any of
2055 which may be empty.  These are named "text", "data" and "bss" sections.
2057    When it generates COFF or ELF output, `as' can also generate
2058 whatever other named sections you specify using the `.section'
2059 directive (*note `.section': Section.).  If you do not use any
2060 directives that place output in the `.text' or `.data' sections, these
2061 sections still exist, but are empty.
2063    When `as' generates SOM or ELF output for the HPPA, `as' can also
2064 generate whatever other named sections you specify using the `.space'
2065 and `.subspace' directives.  See `HP9000 Series 800 Assembly Language
2066 Reference Manual' (HP 92432-90001) for details on the `.space' and
2067 `.subspace' assembler directives.
2069    Additionally, `as' uses different names for the standard text, data,
2070 and bss sections when generating SOM output.  Program text is placed
2071 into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'.
2073    Within the object file, the text section starts at address `0', the
2074 data section follows, and the bss section follows the data section.
2076    When generating either SOM or ELF output files on the HPPA, the text
2077 section starts at address `0', the data section at address `0x4000000',
2078 and the bss section follows the data section.
2080    To let `ld' know which data changes when the sections are relocated,
2081 and how to change that data, `as' also writes to the object file
2082 details of the relocation needed.  To perform relocation `ld' must
2083 know, each time an address in the object file is mentioned:
2084    * Where in the object file is the beginning of this reference to an
2085      address?
2087    * How long (in bytes) is this reference?
2089    * Which section does the address refer to?  What is the numeric
2090      value of
2091           (ADDRESS) - (START-ADDRESS OF SECTION)?
2093    * Is the reference to an address "Program-Counter relative"?
2095    In fact, every address `as' ever uses is expressed as
2096      (SECTION) + (OFFSET INTO SECTION)
2097    Further, most expressions `as' computes have this section-relative
2098 nature.  (For some object formats, such as SOM for the HPPA, some
2099 expressions are symbol-relative instead.)
2101    In this manual we use the notation {SECNAME N} to mean "offset N
2102 into section SECNAME."
2104    Apart from text, data and bss sections you need to know about the
2105 "absolute" section.  When `ld' mixes partial programs, addresses in the
2106 absolute section remain unchanged.  For example, address `{absolute 0}'
2107 is "relocated" to run-time address 0 by `ld'.  Although the linker
2108 never arranges two partial programs' data sections with overlapping
2109 addresses after linking, _by definition_ their absolute sections must
2110 overlap.  Address `{absolute 239}' in one part of a program is always
2111 the same address when the program is running as address `{absolute
2112 239}' in any other part of the program.
2114    The idea of sections is extended to the "undefined" section.  Any
2115 address whose section is unknown at assembly time is by definition
2116 rendered {undefined U}--where U is filled in later.  Since numbers are
2117 always defined, the only way to generate an undefined address is to
2118 mention an undefined symbol.  A reference to a named common block would
2119 be such a symbol: its value is unknown at assembly time so it has
2120 section _undefined_.
2122    By analogy the word _section_ is used to describe groups of sections
2123 in the linked program.  `ld' puts all partial programs' text sections
2124 in contiguous addresses in the linked program.  It is customary to
2125 refer to the _text section_ of a program, meaning all the addresses of
2126 all partial programs' text sections.  Likewise for data and bss
2127 sections.
2129    Some sections are manipulated by `ld'; others are invented for use
2130 of `as' and have no meaning except during assembly.
2132 \x1f
2133 File: as.info,  Node: Ld Sections,  Next: As Sections,  Prev: Secs Background,  Up: Sections
2135 4.2 Linker Sections
2136 ===================
2138 `ld' deals with just four kinds of sections, summarized below.
2140 *named sections*
2141 *text section*
2142 *data section*
2143      These sections hold your program.  `as' and `ld' treat them as
2144      separate but equal sections.  Anything you can say of one section
2145      is true of another.  When the program is running, however, it is
2146      customary for the text section to be unalterable.  The text
2147      section is often shared among processes: it contains instructions,
2148      constants and the like.  The data section of a running program is
2149      usually alterable: for example, C variables would be stored in the
2150      data section.
2152 *bss section*
2153      This section contains zeroed bytes when your program begins
2154      running.  It is used to hold uninitialized variables or common
2155      storage.  The length of each partial program's bss section is
2156      important, but because it starts out containing zeroed bytes there
2157      is no need to store explicit zero bytes in the object file.  The
2158      bss section was invented to eliminate those explicit zeros from
2159      object files.
2161 *absolute section*
2162      Address 0 of this section is always "relocated" to runtime address
2163      0.  This is useful if you want to refer to an address that `ld'
2164      must not change when relocating.  In this sense we speak of
2165      absolute addresses being "unrelocatable": they do not change
2166      during relocation.
2168 *undefined section*
2169      This "section" is a catch-all for address references to objects
2170      not in the preceding sections.
2172    An idealized example of three relocatable sections follows.  The
2173 example uses the traditional section names `.text' and `.data'.  Memory
2174 addresses are on the horizontal axis.
2176                            +-----+----+--+
2177      partial program # 1:  |ttttt|dddd|00|
2178                            +-----+----+--+
2180                            text   data bss
2181                            seg.   seg. seg.
2183                            +---+---+---+
2184      partial program # 2:  |TTT|DDD|000|
2185                            +---+---+---+
2187                            +--+---+-----+--+----+---+-----+~~
2188      linked program:       |  |TTT|ttttt|  |dddd|DDD|00000|
2189                            +--+---+-----+--+----+---+-----+~~
2191          addresses:        0 ...
2193 \x1f
2194 File: as.info,  Node: As Sections,  Next: Sub-Sections,  Prev: Ld Sections,  Up: Sections
2196 4.3 Assembler Internal Sections
2197 ===============================
2199 These sections are meant only for the internal use of `as'.  They have
2200 no meaning at run-time.  You do not really need to know about these
2201 sections for most purposes; but they can be mentioned in `as' warning
2202 messages, so it might be helpful to have an idea of their meanings to
2203 `as'.  These sections are used to permit the value of every expression
2204 in your assembly language program to be a section-relative address.
2206 ASSEMBLER-INTERNAL-LOGIC-ERROR!
2207      An internal assembler logic error has been found.  This means
2208      there is a bug in the assembler.
2210 expr section
2211      The assembler stores complex expression internally as combinations
2212      of symbols.  When it needs to represent an expression as a symbol,
2213      it puts it in the expr section.
2215 \x1f
2216 File: as.info,  Node: Sub-Sections,  Next: bss,  Prev: As Sections,  Up: Sections
2218 4.4 Sub-Sections
2219 ================
2221 Assembled bytes conventionally fall into two sections: text and data.
2222 You may have separate groups of data in named sections that you want to
2223 end up near to each other in the object file, even though they are not
2224 contiguous in the assembler source.  `as' allows you to use
2225 "subsections" for this purpose.  Within each section, there can be
2226 numbered subsections with values from 0 to 8192.  Objects assembled
2227 into the same subsection go into the object file together with other
2228 objects in the same subsection.  For example, a compiler might want to
2229 store constants in the text section, but might not want to have them
2230 interspersed with the program being assembled.  In this case, the
2231 compiler could issue a `.text 0' before each section of code being
2232 output, and a `.text 1' before each group of constants being output.
2234 Subsections are optional.  If you do not use subsections, everything
2235 goes in subsection number zero.
2237    Each subsection is zero-padded up to a multiple of four bytes.
2238 (Subsections may be padded a different amount on different flavors of
2239 `as'.)
2241    Subsections appear in your object file in numeric order, lowest
2242 numbered to highest.  (All this to be compatible with other people's
2243 assemblers.)  The object file contains no representation of
2244 subsections; `ld' and other programs that manipulate object files see
2245 no trace of them.  They just see all your text subsections as a text
2246 section, and all your data subsections as a data section.
2248    To specify which subsection you want subsequent statements assembled
2249 into, use a numeric argument to specify it, in a `.text EXPRESSION' or
2250 a `.data EXPRESSION' statement.  When generating COFF output, you can
2251 also use an extra subsection argument with arbitrary named sections:
2252 `.section NAME, EXPRESSION'.  When generating ELF output, you can also
2253 use the `.subsection' directive (*note SubSection::) to specify a
2254 subsection: `.subsection EXPRESSION'.  EXPRESSION should be an absolute
2255 expression (*note Expressions::).  If you just say `.text' then `.text
2256 0' is assumed.  Likewise `.data' means `.data 0'.  Assembly begins in
2257 `text 0'.  For instance:
2258      .text 0     # The default subsection is text 0 anyway.
2259      .ascii "This lives in the first text subsection. *"
2260      .text 1
2261      .ascii "But this lives in the second text subsection."
2262      .data 0
2263      .ascii "This lives in the data section,"
2264      .ascii "in the first data subsection."
2265      .text 0
2266      .ascii "This lives in the first text section,"
2267      .ascii "immediately following the asterisk (*)."
2269    Each section has a "location counter" incremented by one for every
2270 byte assembled into that section.  Because subsections are merely a
2271 convenience restricted to `as' there is no concept of a subsection
2272 location counter.  There is no way to directly manipulate a location
2273 counter--but the `.align' directive changes it, and any label
2274 definition captures its current value.  The location counter of the
2275 section where statements are being assembled is said to be the "active"
2276 location counter.
2278 \x1f
2279 File: as.info,  Node: bss,  Prev: Sub-Sections,  Up: Sections
2281 4.5 bss Section
2282 ===============
2284 The bss section is used for local common variable storage.  You may
2285 allocate address space in the bss section, but you may not dictate data
2286 to load into it before your program executes.  When your program starts
2287 running, all the contents of the bss section are zeroed bytes.
2289    The `.lcomm' pseudo-op defines a symbol in the bss section; see
2290 *Note `.lcomm': Lcomm.
2292    The `.comm' pseudo-op may be used to declare a common symbol, which
2293 is another form of uninitialized symbol; see *Note `.comm': Comm.
2295    When assembling for a target which supports multiple sections, such
2296 as ELF or COFF, you may switch into the `.bss' section and define
2297 symbols as usual; see *Note `.section': Section.  You may only assemble
2298 zero values into the section.  Typically the section will only contain
2299 symbol definitions and `.skip' directives (*note `.skip': Skip.).
2301 \x1f
2302 File: as.info,  Node: Symbols,  Next: Expressions,  Prev: Sections,  Up: Top
2304 5 Symbols
2305 *********
2307 Symbols are a central concept: the programmer uses symbols to name
2308 things, the linker uses symbols to link, and the debugger uses symbols
2309 to debug.
2311      _Warning:_ `as' does not place symbols in the object file in the
2312      same order they were declared.  This may break some debuggers.
2314 * Menu:
2316 * Labels::                      Labels
2317 * Setting Symbols::             Giving Symbols Other Values
2318 * Symbol Names::                Symbol Names
2319 * Dot::                         The Special Dot Symbol
2320 * Symbol Attributes::           Symbol Attributes
2322 \x1f
2323 File: as.info,  Node: Labels,  Next: Setting Symbols,  Up: Symbols
2325 5.1 Labels
2326 ==========
2328 A "label" is written as a symbol immediately followed by a colon `:'.
2329 The symbol then represents the current value of the active location
2330 counter, and is, for example, a suitable instruction operand.  You are
2331 warned if you use the same symbol to represent two different locations:
2332 the first definition overrides any other definitions.
2334    On the HPPA, the usual form for a label need not be immediately
2335 followed by a colon, but instead must start in column zero.  Only one
2336 label may be defined on a single line.  To work around this, the HPPA
2337 version of `as' also provides a special directive `.label' for defining
2338 labels more flexibly.
2340 \x1f
2341 File: as.info,  Node: Setting Symbols,  Next: Symbol Names,  Prev: Labels,  Up: Symbols
2343 5.2 Giving Symbols Other Values
2344 ===============================
2346 A symbol can be given an arbitrary value by writing a symbol, followed
2347 by an equals sign `=', followed by an expression (*note Expressions::).
2348 This is equivalent to using the `.set' directive.  *Note `.set': Set.
2349 In the same way, using a double equals sign `='`=' here represents an
2350 equivalent of the `.eqv' directive.  *Note `.eqv': Eqv.
2352    Blackfin does not support symbol assignment with `='.
2354 \x1f
2355 File: as.info,  Node: Symbol Names,  Next: Dot,  Prev: Setting Symbols,  Up: Symbols
2357 5.3 Symbol Names
2358 ================
2360 Symbol names begin with a letter or with one of `._'.  On most
2361 machines, you can also use `$' in symbol names; exceptions are noted in
2362 *Note Machine Dependencies::.  That character may be followed by any
2363 string of digits, letters, dollar signs (unless otherwise noted for a
2364 particular target machine), and underscores.
2366 Case of letters is significant: `foo' is a different symbol name than
2367 `Foo'.
2369    Each symbol has exactly one name.  Each name in an assembly language
2370 program refers to exactly one symbol.  You may use that symbol name any
2371 number of times in a program.
2373 Local Symbol Names
2374 ------------------
2376 A local symbol is any symbol beginning with certain local label
2377 prefixes.  By default, the local label prefix is `.L' for ELF systems or
2378 `L' for traditional a.out systems, but each target may have its own set
2379 of local label prefixes.  On the HPPA local symbols begin with `L$'.
2381    Local symbols are defined and used within the assembler, but they are
2382 normally not saved in object files.  Thus, they are not visible when
2383 debugging.  You may use the `-L' option (*note Include Local Symbols:
2384 `-L': L.) to retain the local symbols in the object files.
2386 Local Labels
2387 ------------
2389 Local labels help compilers and programmers use names temporarily.
2390 They create symbols which are guaranteed to be unique over the entire
2391 scope of the input source code and which can be referred to by a simple
2392 notation.  To define a local label, write a label of the form `N:'
2393 (where N represents any positive integer).  To refer to the most recent
2394 previous definition of that label write `Nb', using the same number as
2395 when you defined the label.  To refer to the next definition of a local
2396 label, write `Nf'--the `b' stands for "backwards" and the `f' stands
2397 for "forwards".
2399    There is no restriction on how you can use these labels, and you can
2400 reuse them too.  So that it is possible to repeatedly define the same
2401 local label (using the same number `N'), although you can only refer to
2402 the most recently defined local label of that number (for a backwards
2403 reference) or the next definition of a specific local label for a
2404 forward reference.  It is also worth noting that the first 10 local
2405 labels (`0:'...`9:') are implemented in a slightly more efficient
2406 manner than the others.
2408    Here is an example:
2410      1:        branch 1f
2411      2:        branch 1b
2412      1:        branch 2f
2413      2:        branch 1b
2415    Which is the equivalent of:
2417      label_1:  branch label_3
2418      label_2:  branch label_1
2419      label_3:  branch label_4
2420      label_4:  branch label_3
2422    Local label names are only a notational device.  They are immediately
2423 transformed into more conventional symbol names before the assembler
2424 uses them.  The symbol names are stored in the symbol table, appear in
2425 error messages, and are optionally emitted to the object file.  The
2426 names are constructed using these parts:
2428 `_local label prefix_'
2429      All local symbols begin with the system-specific local label
2430      prefix.  Normally both `as' and `ld' forget symbols that start
2431      with the local label prefix.  These labels are used for symbols
2432      you are never intended to see.  If you use the `-L' option then
2433      `as' retains these symbols in the object file. If you also
2434      instruct `ld' to retain these symbols, you may use them in
2435      debugging.
2437 `NUMBER'
2438      This is the number that was used in the local label definition.
2439      So if the label is written `55:' then the number is `55'.
2441 `C-B'
2442      This unusual character is included so you do not accidentally
2443      invent a symbol of the same name.  The character has ASCII value
2444      of `\002' (control-B).
2446 `_ordinal number_'
2447      This is a serial number to keep the labels distinct.  The first
2448      definition of `0:' gets the number `1'.  The 15th definition of
2449      `0:' gets the number `15', and so on.  Likewise the first
2450      definition of `1:' gets the number `1' and its 15th definition
2451      gets `15' as well.
2453    So for example, the first `1:' may be named `.L1C-B1', and the 44th
2454 `3:' may be named `.L3C-B44'.
2456 Dollar Local Labels
2457 -------------------
2459 `as' also supports an even more local form of local labels called
2460 dollar labels.  These labels go out of scope (i.e., they become
2461 undefined) as soon as a non-local label is defined.  Thus they remain
2462 valid for only a small region of the input source code.  Normal local
2463 labels, by contrast, remain in scope for the entire file, or until they
2464 are redefined by another occurrence of the same local label.
2466    Dollar labels are defined in exactly the same way as ordinary local
2467 labels, except that they have a dollar sign suffix to their numeric
2468 value, e.g., `55$:'.
2470    They can also be distinguished from ordinary local labels by their
2471 transformed names which use ASCII character `\001' (control-A) as the
2472 magic character to distinguish them from ordinary labels.  For example,
2473 the fifth definition of `6$' may be named `.L6C-A5'.
2475 \x1f
2476 File: as.info,  Node: Dot,  Next: Symbol Attributes,  Prev: Symbol Names,  Up: Symbols
2478 5.4 The Special Dot Symbol
2479 ==========================
2481 The special symbol `.' refers to the current address that `as' is
2482 assembling into.  Thus, the expression `melvin: .long .' defines
2483 `melvin' to contain its own address.  Assigning a value to `.' is
2484 treated the same as a `.org' directive.  Thus, the expression `.=.+4'
2485 is the same as saying `.space 4'.
2487 \x1f
2488 File: as.info,  Node: Symbol Attributes,  Prev: Dot,  Up: Symbols
2490 5.5 Symbol Attributes
2491 =====================
2493 Every symbol has, as well as its name, the attributes "Value" and
2494 "Type".  Depending on output format, symbols can also have auxiliary
2495 attributes.
2497    If you use a symbol without defining it, `as' assumes zero for all
2498 these attributes, and probably won't warn you.  This makes the symbol
2499 an externally defined symbol, which is generally what you would want.
2501 * Menu:
2503 * Symbol Value::                Value
2504 * Symbol Type::                 Type
2507 * a.out Symbols::               Symbol Attributes: `a.out'
2509 * COFF Symbols::                Symbol Attributes for COFF
2511 * SOM Symbols::                Symbol Attributes for SOM
2513 \x1f
2514 File: as.info,  Node: Symbol Value,  Next: Symbol Type,  Up: Symbol Attributes
2516 5.5.1 Value
2517 -----------
2519 The value of a symbol is (usually) 32 bits.  For a symbol which labels a
2520 location in the text, data, bss or absolute sections the value is the
2521 number of addresses from the start of that section to the label.
2522 Naturally for text, data and bss sections the value of a symbol changes
2523 as `ld' changes section base addresses during linking.  Absolute
2524 symbols' values do not change during linking: that is why they are
2525 called absolute.
2527    The value of an undefined symbol is treated in a special way.  If it
2528 is 0 then the symbol is not defined in this assembler source file, and
2529 `ld' tries to determine its value from other files linked into the same
2530 program.  You make this kind of symbol simply by mentioning a symbol
2531 name without defining it.  A non-zero value represents a `.comm' common
2532 declaration.  The value is how much common storage to reserve, in bytes
2533 (addresses).  The symbol refers to the first address of the allocated
2534 storage.
2536 \x1f
2537 File: as.info,  Node: Symbol Type,  Next: a.out Symbols,  Prev: Symbol Value,  Up: Symbol Attributes
2539 5.5.2 Type
2540 ----------
2542 The type attribute of a symbol contains relocation (section)
2543 information, any flag settings indicating that a symbol is external, and
2544 (optionally), other information for linkers and debuggers.  The exact
2545 format depends on the object-code output format in use.
2547 \x1f
2548 File: as.info,  Node: a.out Symbols,  Next: COFF Symbols,  Prev: Symbol Type,  Up: Symbol Attributes
2550 5.5.3 Symbol Attributes: `a.out'
2551 --------------------------------
2553 * Menu:
2555 * Symbol Desc::                 Descriptor
2556 * Symbol Other::                Other
2558 \x1f
2559 File: as.info,  Node: Symbol Desc,  Next: Symbol Other,  Up: a.out Symbols
2561 5.5.3.1 Descriptor
2562 ..................
2564 This is an arbitrary 16-bit value.  You may establish a symbol's
2565 descriptor value by using a `.desc' statement (*note `.desc': Desc.).
2566 A descriptor value means nothing to `as'.
2568 \x1f
2569 File: as.info,  Node: Symbol Other,  Prev: Symbol Desc,  Up: a.out Symbols
2571 5.5.3.2 Other
2572 .............
2574 This is an arbitrary 8-bit value.  It means nothing to `as'.
2576 \x1f
2577 File: as.info,  Node: COFF Symbols,  Next: SOM Symbols,  Prev: a.out Symbols,  Up: Symbol Attributes
2579 5.5.4 Symbol Attributes for COFF
2580 --------------------------------
2582 The COFF format supports a multitude of auxiliary symbol attributes;
2583 like the primary symbol attributes, they are set between `.def' and
2584 `.endef' directives.
2586 5.5.4.1 Primary Attributes
2587 ..........................
2589 The symbol name is set with `.def'; the value and type, respectively,
2590 with `.val' and `.type'.
2592 5.5.4.2 Auxiliary Attributes
2593 ............................
2595 The `as' directives `.dim', `.line', `.scl', `.size', `.tag', and
2596 `.weak' can generate auxiliary symbol table information for COFF.
2598 \x1f
2599 File: as.info,  Node: SOM Symbols,  Prev: COFF Symbols,  Up: Symbol Attributes
2601 5.5.5 Symbol Attributes for SOM
2602 -------------------------------
2604 The SOM format for the HPPA supports a multitude of symbol attributes
2605 set with the `.EXPORT' and `.IMPORT' directives.
2607    The attributes are described in `HP9000 Series 800 Assembly Language
2608 Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT'
2609 assembler directive documentation.
2611 \x1f
2612 File: as.info,  Node: Expressions,  Next: Pseudo Ops,  Prev: Symbols,  Up: Top
2614 6 Expressions
2615 *************
2617 An "expression" specifies an address or numeric value.  Whitespace may
2618 precede and/or follow an expression.
2620    The result of an expression must be an absolute number, or else an
2621 offset into a particular section.  If an expression is not absolute,
2622 and there is not enough information when `as' sees the expression to
2623 know its section, a second pass over the source program might be
2624 necessary to interpret the expression--but the second pass is currently
2625 not implemented.  `as' aborts with an error message in this situation.
2627 * Menu:
2629 * Empty Exprs::                 Empty Expressions
2630 * Integer Exprs::               Integer Expressions
2632 \x1f
2633 File: as.info,  Node: Empty Exprs,  Next: Integer Exprs,  Up: Expressions
2635 6.1 Empty Expressions
2636 =====================
2638 An empty expression has no value: it is just whitespace or null.
2639 Wherever an absolute expression is required, you may omit the
2640 expression, and `as' assumes a value of (absolute) 0.  This is
2641 compatible with other assemblers.
2643 \x1f
2644 File: as.info,  Node: Integer Exprs,  Prev: Empty Exprs,  Up: Expressions
2646 6.2 Integer Expressions
2647 =======================
2649 An "integer expression" is one or more _arguments_ delimited by
2650 _operators_.
2652 * Menu:
2654 * Arguments::                   Arguments
2655 * Operators::                   Operators
2656 * Prefix Ops::                  Prefix Operators
2657 * Infix Ops::                   Infix Operators
2659 \x1f
2660 File: as.info,  Node: Arguments,  Next: Operators,  Up: Integer Exprs
2662 6.2.1 Arguments
2663 ---------------
2665 "Arguments" are symbols, numbers or subexpressions.  In other contexts
2666 arguments are sometimes called "arithmetic operands".  In this manual,
2667 to avoid confusing them with the "instruction operands" of the machine
2668 language, we use the term "argument" to refer to parts of expressions
2669 only, reserving the word "operand" to refer only to machine instruction
2670 operands.
2672    Symbols are evaluated to yield {SECTION NNN} where SECTION is one of
2673 text, data, bss, absolute, or undefined.  NNN is a signed, 2's
2674 complement 32 bit integer.
2676    Numbers are usually integers.
2678    A number can be a flonum or bignum.  In this case, you are warned
2679 that only the low order 32 bits are used, and `as' pretends these 32
2680 bits are an integer.  You may write integer-manipulating instructions
2681 that act on exotic constants, compatible with other assemblers.
2683    Subexpressions are a left parenthesis `(' followed by an integer
2684 expression, followed by a right parenthesis `)'; or a prefix operator
2685 followed by an argument.
2687 \x1f
2688 File: as.info,  Node: Operators,  Next: Prefix Ops,  Prev: Arguments,  Up: Integer Exprs
2690 6.2.2 Operators
2691 ---------------
2693 "Operators" are arithmetic functions, like `+' or `%'.  Prefix
2694 operators are followed by an argument.  Infix operators appear between
2695 their arguments.  Operators may be preceded and/or followed by
2696 whitespace.
2698 \x1f
2699 File: as.info,  Node: Prefix Ops,  Next: Infix Ops,  Prev: Operators,  Up: Integer Exprs
2701 6.2.3 Prefix Operator
2702 ---------------------
2704 `as' has the following "prefix operators".  They each take one
2705 argument, which must be absolute.
2708      "Negation".  Two's complement negation.
2711      "Complementation".  Bitwise not.
2713 \x1f
2714 File: as.info,  Node: Infix Ops,  Prev: Prefix Ops,  Up: Integer Exprs
2716 6.2.4 Infix Operators
2717 ---------------------
2719 "Infix operators" take two arguments, one on either side.  Operators
2720 have precedence, but operations with equal precedence are performed left
2721 to right.  Apart from `+' or `-', both arguments must be absolute, and
2722 the result is absolute.
2724   1. Highest Precedence
2726     `*'
2727           "Multiplication".
2729     `/'
2730           "Division".  Truncation is the same as the C operator `/'
2732     `%'
2733           "Remainder".
2735     `<<'
2736           "Shift Left".  Same as the C operator `<<'.
2738     `>>'
2739           "Shift Right".  Same as the C operator `>>'.
2741   2. Intermediate precedence
2743     `|'
2744           "Bitwise Inclusive Or".
2746     `&'
2747           "Bitwise And".
2749     `^'
2750           "Bitwise Exclusive Or".
2752     `!'
2753           "Bitwise Or Not".
2755   3. Low Precedence
2757     `+'
2758           "Addition".  If either argument is absolute, the result has
2759           the section of the other argument.  You may not add together
2760           arguments from different sections.
2762     `-'
2763           "Subtraction".  If the right argument is absolute, the result
2764           has the section of the left argument.  If both arguments are
2765           in the same section, the result is absolute.  You may not
2766           subtract arguments from different sections.
2768     `=='
2769           "Is Equal To"
2771     `<>'
2772     `!='
2773           "Is Not Equal To"
2775     `<'
2776           "Is Less Than"
2778     `>'
2779           "Is Greater Than"
2781     `>='
2782           "Is Greater Than Or Equal To"
2784     `<='
2785           "Is Less Than Or Equal To"
2787           The comparison operators can be used as infix operators.  A
2788           true results has a value of -1 whereas a false result has a
2789           value of 0.   Note, these operators perform signed
2790           comparisons.
2792   4. Lowest Precedence
2794     `&&'
2795           "Logical And".
2797     `||'
2798           "Logical Or".
2800           These two logical operations can be used to combine the
2801           results of sub expressions.  Note, unlike the comparison
2802           operators a true result returns a value of 1 but a false
2803           results does still return 0.  Also note that the logical or
2804           operator has a slightly lower precedence than logical and.
2807    In short, it's only meaningful to add or subtract the _offsets_ in an
2808 address; you can only have a defined section in one of the two
2809 arguments.
2811 \x1f
2812 File: as.info,  Node: Pseudo Ops,  Next: Object Attributes,  Prev: Expressions,  Up: Top
2814 7 Assembler Directives
2815 **********************
2817 All assembler directives have names that begin with a period (`.').
2818 The rest of the name is letters, usually in lower case.
2820    This chapter discusses directives that are available regardless of
2821 the target machine configuration for the GNU assembler.  Some machine
2822 configurations provide additional directives.  *Note Machine
2823 Dependencies::.
2825 * Menu:
2827 * Abort::                       `.abort'
2829 * ABORT (COFF)::                `.ABORT'
2831 * Align::                       `.align ABS-EXPR , ABS-EXPR'
2832 * Altmacro::                    `.altmacro'
2833 * Ascii::                       `.ascii "STRING"'...
2834 * Asciz::                       `.asciz "STRING"'...
2835 * Balign::                      `.balign ABS-EXPR , ABS-EXPR'
2836 * Byte::                        `.byte EXPRESSIONS'
2837 * CFI directives::              `.cfi_startproc [simple]', `.cfi_endproc', etc.
2838 * Comm::                        `.comm SYMBOL , LENGTH '
2839 * Data::                        `.data SUBSECTION'
2841 * Def::                         `.def NAME'
2843 * Desc::                        `.desc SYMBOL, ABS-EXPRESSION'
2845 * Dim::                         `.dim'
2847 * Double::                      `.double FLONUMS'
2848 * Eject::                       `.eject'
2849 * Else::                        `.else'
2850 * Elseif::                      `.elseif'
2851 * End::                         `.end'
2853 * Endef::                       `.endef'
2855 * Endfunc::                     `.endfunc'
2856 * Endif::                       `.endif'
2857 * Equ::                         `.equ SYMBOL, EXPRESSION'
2858 * Equiv::                       `.equiv SYMBOL, EXPRESSION'
2859 * Eqv::                         `.eqv SYMBOL, EXPRESSION'
2860 * Err::                         `.err'
2861 * Error::                       `.error STRING'
2862 * Exitm::                       `.exitm'
2863 * Extern::                      `.extern'
2864 * Fail::                        `.fail'
2865 * File::                        `.file'
2866 * Fill::                        `.fill REPEAT , SIZE , VALUE'
2867 * Float::                       `.float FLONUMS'
2868 * Func::                        `.func'
2869 * Global::                      `.global SYMBOL', `.globl SYMBOL'
2871 * Gnu_attribute::               `.gnu_attribute TAG,VALUE'
2872 * Hidden::                      `.hidden NAMES'
2874 * hword::                       `.hword EXPRESSIONS'
2875 * Ident::                       `.ident'
2876 * If::                          `.if ABSOLUTE EXPRESSION'
2877 * Incbin::                      `.incbin "FILE"[,SKIP[,COUNT]]'
2878 * Include::                     `.include "FILE"'
2879 * Int::                         `.int EXPRESSIONS'
2881 * Internal::                    `.internal NAMES'
2883 * Irp::                         `.irp SYMBOL,VALUES'...
2884 * Irpc::                        `.irpc SYMBOL,VALUES'...
2885 * Lcomm::                       `.lcomm SYMBOL , LENGTH'
2886 * Lflags::                      `.lflags'
2888 * Line::                        `.line LINE-NUMBER'
2890 * Linkonce::                    `.linkonce [TYPE]'
2891 * List::                        `.list'
2892 * Ln::                          `.ln LINE-NUMBER'
2893 * Loc::                         `.loc FILENO LINENO'
2894 * Loc_mark_labels::             `.loc_mark_labels ENABLE'
2896 * Local::                       `.local NAMES'
2898 * Long::                        `.long EXPRESSIONS'
2900 * Macro::                       `.macro NAME ARGS'...
2901 * MRI::                         `.mri VAL'
2902 * Noaltmacro::                  `.noaltmacro'
2903 * Nolist::                      `.nolist'
2904 * Octa::                        `.octa BIGNUMS'
2905 * Org::                         `.org NEW-LC, FILL'
2906 * P2align::                     `.p2align ABS-EXPR, ABS-EXPR, ABS-EXPR'
2908 * PopSection::                  `.popsection'
2909 * Previous::                    `.previous'
2911 * Print::                       `.print STRING'
2913 * Protected::                   `.protected NAMES'
2915 * Psize::                       `.psize LINES, COLUMNS'
2916 * Purgem::                      `.purgem NAME'
2918 * PushSection::                 `.pushsection NAME'
2920 * Quad::                        `.quad BIGNUMS'
2921 * Reloc::                       `.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
2922 * Rept::                        `.rept COUNT'
2923 * Sbttl::                       `.sbttl "SUBHEADING"'
2925 * Scl::                         `.scl CLASS'
2927 * Section::                     `.section NAME[, FLAGS]'
2929 * Set::                         `.set SYMBOL, EXPRESSION'
2930 * Short::                       `.short EXPRESSIONS'
2931 * Single::                      `.single FLONUMS'
2933 * Size::                        `.size [NAME , EXPRESSION]'
2935 * Skip::                        `.skip SIZE , FILL'
2937 * Sleb128::                     `.sleb128 EXPRESSIONS'
2939 * Space::                       `.space SIZE , FILL'
2941 * Stab::                        `.stabd, .stabn, .stabs'
2943 * String::                      `.string "STR"', `.string8 "STR"', `.string16 "STR"', `.string32 "STR"', `.string64 "STR"'
2944 * Struct::                      `.struct EXPRESSION'
2946 * SubSection::                  `.subsection'
2947 * Symver::                      `.symver NAME,NAME2@NODENAME'
2950 * Tag::                         `.tag STRUCTNAME'
2952 * Text::                        `.text SUBSECTION'
2953 * Title::                       `.title "HEADING"'
2955 * Type::                        `.type <INT | NAME , TYPE DESCRIPTION>'
2957 * Uleb128::                     `.uleb128 EXPRESSIONS'
2959 * Val::                         `.val ADDR'
2962 * Version::                     `.version "STRING"'
2963 * VTableEntry::                 `.vtable_entry TABLE, OFFSET'
2964 * VTableInherit::               `.vtable_inherit CHILD, PARENT'
2966 * Warning::                     `.warning STRING'
2967 * Weak::                        `.weak NAMES'
2968 * Weakref::                     `.weakref ALIAS, SYMBOL'
2969 * Word::                        `.word EXPRESSIONS'
2970 * Deprecated::                  Deprecated Directives
2972 \x1f
2973 File: as.info,  Node: Abort,  Next: ABORT (COFF),  Up: Pseudo Ops
2975 7.1 `.abort'
2976 ============
2978 This directive stops the assembly immediately.  It is for compatibility
2979 with other assemblers.  The original idea was that the assembly
2980 language source would be piped into the assembler.  If the sender of
2981 the source quit, it could use this directive tells `as' to quit also.
2982 One day `.abort' will not be supported.
2984 \x1f
2985 File: as.info,  Node: ABORT (COFF),  Next: Align,  Prev: Abort,  Up: Pseudo Ops
2987 7.2 `.ABORT' (COFF)
2988 ===================
2990 When producing COFF output, `as' accepts this directive as a synonym
2991 for `.abort'.
2993 \x1f
2994 File: as.info,  Node: Align,  Next: Altmacro,  Prev: ABORT (COFF),  Up: Pseudo Ops
2996 7.3 `.align ABS-EXPR, ABS-EXPR, ABS-EXPR'
2997 =========================================
2999 Pad the location counter (in the current subsection) to a particular
3000 storage boundary.  The first expression (which must be absolute) is the
3001 alignment required, as described below.
3003    The second expression (also absolute) gives the fill value to be
3004 stored in the padding bytes.  It (and the comma) may be omitted.  If it
3005 is omitted, the padding bytes are normally zero.  However, on some
3006 systems, if the section is marked as containing code and the fill value
3007 is omitted, the space is filled with no-op instructions.
3009    The third expression is also absolute, and is also optional.  If it
3010 is present, it is the maximum number of bytes that should be skipped by
3011 this alignment directive.  If doing the alignment would require
3012 skipping more bytes than the specified maximum, then the alignment is
3013 not done at all.  You can omit the fill value (the second argument)
3014 entirely by simply using two commas after the required alignment; this
3015 can be useful if you want the alignment to be filled with no-op
3016 instructions when appropriate.
3018    The way the required alignment is specified varies from system to
3019 system.  For the arc, hppa, i386 using ELF, i860, iq2000, m68k, or32,
3020 s390, sparc, tic4x, tic80 and xtensa, the first expression is the
3021 alignment request in bytes.  For example `.align 8' advances the
3022 location counter until it is a multiple of 8.  If the location counter
3023 is already a multiple of 8, no change is needed.  For the tic54x, the
3024 first expression is the alignment request in words.
3026    For other systems, including ppc, i386 using a.out format, arm and
3027 strongarm, it is the number of low-order zero bits the location counter
3028 must have after advancement.  For example `.align 3' advances the
3029 location counter until it a multiple of 8.  If the location counter is
3030 already a multiple of 8, no change is needed.
3032    This inconsistency is due to the different behaviors of the various
3033 native assemblers for these systems which GAS must emulate.  GAS also
3034 provides `.balign' and `.p2align' directives, described later, which
3035 have a consistent behavior across all architectures (but are specific
3036 to GAS).
3038 \x1f
3039 File: as.info,  Node: Altmacro,  Next: Ascii,  Prev: Align,  Up: Pseudo Ops
3041 7.4 `.altmacro'
3042 ===============
3044 Enable alternate macro mode, enabling:
3046 `LOCAL NAME [ , ... ]'
3047      One additional directive, `LOCAL', is available.  It is used to
3048      generate a string replacement for each of the NAME arguments, and
3049      replace any instances of NAME in each macro expansion.  The
3050      replacement string is unique in the assembly, and different for
3051      each separate macro expansion.  `LOCAL' allows you to write macros
3052      that define symbols, without fear of conflict between separate
3053      macro expansions.
3055 `String delimiters'
3056      You can write strings delimited in these other ways besides
3057      `"STRING"':
3059     `'STRING''
3060           You can delimit strings with single-quote characters.
3062     `<STRING>'
3063           You can delimit strings with matching angle brackets.
3065 `single-character string escape'
3066      To include any single character literally in a string (even if the
3067      character would otherwise have some special meaning), you can
3068      prefix the character with `!' (an exclamation mark).  For example,
3069      you can write `<4.3 !> 5.4!!>' to get the literal text `4.3 >
3070      5.4!'.
3072 `Expression results as strings'
3073      You can write `%EXPR' to evaluate the expression EXPR and use the
3074      result as a string.
3076 \x1f
3077 File: as.info,  Node: Ascii,  Next: Asciz,  Prev: Altmacro,  Up: Pseudo Ops
3079 7.5 `.ascii "STRING"'...
3080 ========================
3082 `.ascii' expects zero or more string literals (*note Strings::)
3083 separated by commas.  It assembles each string (with no automatic
3084 trailing zero byte) into consecutive addresses.
3086 \x1f
3087 File: as.info,  Node: Asciz,  Next: Balign,  Prev: Ascii,  Up: Pseudo Ops
3089 7.6 `.asciz "STRING"'...
3090 ========================
3092 `.asciz' is just like `.ascii', but each string is followed by a zero
3093 byte.  The "z" in `.asciz' stands for "zero".
3095 \x1f
3096 File: as.info,  Node: Balign,  Next: Byte,  Prev: Asciz,  Up: Pseudo Ops
3098 7.7 `.balign[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR'
3099 ==============================================
3101 Pad the location counter (in the current subsection) to a particular
3102 storage boundary.  The first expression (which must be absolute) is the
3103 alignment request in bytes.  For example `.balign 8' advances the
3104 location counter until it is a multiple of 8.  If the location counter
3105 is already a multiple of 8, no change is needed.
3107    The second expression (also absolute) gives the fill value to be
3108 stored in the padding bytes.  It (and the comma) may be omitted.  If it
3109 is omitted, the padding bytes are normally zero.  However, on some
3110 systems, if the section is marked as containing code and the fill value
3111 is omitted, the space is filled with no-op instructions.
3113    The third expression is also absolute, and is also optional.  If it
3114 is present, it is the maximum number of bytes that should be skipped by
3115 this alignment directive.  If doing the alignment would require
3116 skipping more bytes than the specified maximum, then the alignment is
3117 not done at all.  You can omit the fill value (the second argument)
3118 entirely by simply using two commas after the required alignment; this
3119 can be useful if you want the alignment to be filled with no-op
3120 instructions when appropriate.
3122    The `.balignw' and `.balignl' directives are variants of the
3123 `.balign' directive.  The `.balignw' directive treats the fill pattern
3124 as a two byte word value.  The `.balignl' directives treats the fill
3125 pattern as a four byte longword value.  For example, `.balignw
3126 4,0x368d' will align to a multiple of 4.  If it skips two bytes, they
3127 will be filled in with the value 0x368d (the exact placement of the
3128 bytes depends upon the endianness of the processor).  If it skips 1 or
3129 3 bytes, the fill value is undefined.
3131 \x1f
3132 File: as.info,  Node: Byte,  Next: CFI directives,  Prev: Balign,  Up: Pseudo Ops
3134 7.8 `.byte EXPRESSIONS'
3135 =======================
3137 `.byte' expects zero or more expressions, separated by commas.  Each
3138 expression is assembled into the next byte.
3140 \x1f
3141 File: as.info,  Node: CFI directives,  Next: Comm,  Prev: Byte,  Up: Pseudo Ops
3143 7.9 `.cfi_startproc [simple]'
3144 =============================
3146 `.cfi_startproc' is used at the beginning of each function that should
3147 have an entry in `.eh_frame'. It initializes some internal data
3148 structures. Don't forget to close the function by `.cfi_endproc'.
3150 7.10 `.cfi_sections SECTION_LIST'
3151 =================================
3153 `.cfi_sections' may be used to specify whether CFI directives should
3154 emit `.eh_frame' section and/or `.debug_frame' section.  If
3155 SECTION_LIST is `.eh_frame', `.eh_frame' is emitted, if SECTION_LIST is
3156 `.debug_frame', `.debug_frame' is emitted.  To emit both use
3157 `.eh_frame, .debug_frame'.  The default if this directive is not used
3158 is `.cfi_sections .eh_frame'.
3160    Unless `.cfi_startproc' is used along with parameter `simple' it
3161 also emits some architecture dependent initial CFI instructions.
3163 7.11 `.cfi_endproc'
3164 ===================
3166 `.cfi_endproc' is used at the end of a function where it closes its
3167 unwind entry previously opened by `.cfi_startproc', and emits it to
3168 `.eh_frame'.
3170 7.12 `.cfi_personality ENCODING [, EXP]'
3171 ========================================
3173 `.cfi_personality' defines personality routine and its encoding.
3174 ENCODING must be a constant determining how the personality should be
3175 encoded.  If it is 255 (`DW_EH_PE_omit'), second argument is not
3176 present, otherwise second argument should be a constant or a symbol
3177 name.  When using indirect encodings, the symbol provided should be the
3178 location where personality can be loaded from, not the personality
3179 routine itself.  The default after `.cfi_startproc' is
3180 `.cfi_personality 0xff', no personality routine.
3182 7.13 `.cfi_lsda ENCODING [, EXP]'
3183 =================================
3185 `.cfi_lsda' defines LSDA and its encoding.  ENCODING must be a constant
3186 determining how the LSDA should be encoded.  If it is 255
3187 (`DW_EH_PE_omit'), second argument is not present, otherwise second
3188 argument should be a constant or a symbol name.  The default after
3189 `.cfi_startproc' is `.cfi_lsda 0xff', no LSDA.
3191 7.14 `.cfi_def_cfa REGISTER, OFFSET'
3192 ====================================
3194 `.cfi_def_cfa' defines a rule for computing CFA as: take address from
3195 REGISTER and add OFFSET to it.
3197 7.15 `.cfi_def_cfa_register REGISTER'
3198 =====================================
3200 `.cfi_def_cfa_register' modifies a rule for computing CFA. From now on
3201 REGISTER will be used instead of the old one. Offset remains the same.
3203 7.16 `.cfi_def_cfa_offset OFFSET'
3204 =================================
3206 `.cfi_def_cfa_offset' modifies a rule for computing CFA. Register
3207 remains the same, but OFFSET is new. Note that it is the absolute
3208 offset that will be added to a defined register to compute CFA address.
3210 7.17 `.cfi_adjust_cfa_offset OFFSET'
3211 ====================================
3213 Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is
3214 added/substracted from the previous offset.
3216 7.18 `.cfi_offset REGISTER, OFFSET'
3217 ===================================
3219 Previous value of REGISTER is saved at offset OFFSET from CFA.
3221 7.19 `.cfi_rel_offset REGISTER, OFFSET'
3222 =======================================
3224 Previous value of REGISTER is saved at offset OFFSET from the current
3225 CFA register.  This is transformed to `.cfi_offset' using the known
3226 displacement of the CFA register from the CFA.  This is often easier to
3227 use, because the number will match the code it's annotating.
3229 7.20 `.cfi_register REGISTER1, REGISTER2'
3230 =========================================
3232 Previous value of REGISTER1 is saved in register REGISTER2.
3234 7.21 `.cfi_restore REGISTER'
3235 ============================
3237 `.cfi_restore' says that the rule for REGISTER is now the same as it
3238 was at the beginning of the function, after all initial instruction
3239 added by `.cfi_startproc' were executed.
3241 7.22 `.cfi_undefined REGISTER'
3242 ==============================
3244 From now on the previous value of REGISTER can't be restored anymore.
3246 7.23 `.cfi_same_value REGISTER'
3247 ===============================
3249 Current value of REGISTER is the same like in the previous frame, i.e.
3250 no restoration needed.
3252 7.24 `.cfi_remember_state',
3253 ===========================
3255 First save all current rules for all registers by `.cfi_remember_state',
3256 then totally screw them up by subsequent `.cfi_*' directives and when
3257 everything is hopelessly bad, use `.cfi_restore_state' to restore the
3258 previous saved state.
3260 7.25 `.cfi_return_column REGISTER'
3261 ==================================
3263 Change return column REGISTER, i.e. the return address is either
3264 directly in REGISTER or can be accessed by rules for REGISTER.
3266 7.26 `.cfi_signal_frame'
3267 ========================
3269 Mark current function as signal trampoline.
3271 7.27 `.cfi_window_save'
3272 =======================
3274 SPARC register window has been saved.
3276 7.28 `.cfi_escape' EXPRESSION[, ...]
3277 ====================================
3279 Allows the user to add arbitrary bytes to the unwind info.  One might
3280 use this to add OS-specific CFI opcodes, or generic CFI opcodes that
3281 GAS does not yet support.
3283 7.29 `.cfi_val_encoded_addr REGISTER, ENCODING, LABEL'
3284 ======================================================
3286 The current value of REGISTER is LABEL.  The value of LABEL will be
3287 encoded in the output file according to ENCODING; see the description
3288 of `.cfi_personality' for details on this encoding.
3290    The usefulness of equating a register to a fixed label is probably
3291 limited to the return address register.  Here, it can be useful to mark
3292 a code segment that has only one return address which is reached by a
3293 direct branch and no copy of the return address exists in memory or
3294 another register.
3296 \x1f
3297 File: as.info,  Node: Comm,  Next: Data,  Prev: CFI directives,  Up: Pseudo Ops
3299 7.30 `.comm SYMBOL , LENGTH '
3300 =============================
3302 `.comm' declares a common symbol named SYMBOL.  When linking, a common
3303 symbol in one object file may be merged with a defined or common symbol
3304 of the same name in another object file.  If `ld' does not see a
3305 definition for the symbol-just one or more common symbols-then it will
3306 allocate LENGTH bytes of uninitialized memory.  LENGTH must be an
3307 absolute expression.  If `ld' sees multiple common symbols with the
3308 same name, and they do not all have the same size, it will allocate
3309 space using the largest size.
3311    When using ELF or (as a GNU extension) PE, the `.comm' directive
3312 takes an optional third argument.  This is the desired alignment of the
3313 symbol, specified for ELF as a byte boundary (for example, an alignment
3314 of 16 means that the least significant 4 bits of the address should be
3315 zero), and for PE as a power of two (for example, an alignment of 5
3316 means aligned to a 32-byte boundary).  The alignment must be an
3317 absolute expression, and it must be a power of two.  If `ld' allocates
3318 uninitialized memory for the common symbol, it will use the alignment
3319 when placing the symbol.  If no alignment is specified, `as' will set
3320 the alignment to the largest power of two less than or equal to the
3321 size of the symbol, up to a maximum of 16 on ELF, or the default
3322 section alignment of 4 on PE(1).
3324    The syntax for `.comm' differs slightly on the HPPA.  The syntax is
3325 `SYMBOL .comm, LENGTH'; SYMBOL is optional.
3327    ---------- Footnotes ----------
3329    (1) This is not the same as the executable image file alignment
3330 controlled by `ld''s `--section-alignment' option; image file sections
3331 in PE are aligned to multiples of 4096, which is far too large an
3332 alignment for ordinary variables.  It is rather the default alignment
3333 for (non-debug) sections within object (`*.o') files, which are less
3334 strictly aligned.
3336 \x1f
3337 File: as.info,  Node: Data,  Next: Def,  Prev: Comm,  Up: Pseudo Ops
3339 7.31 `.data SUBSECTION'
3340 =======================
3342 `.data' tells `as' to assemble the following statements onto the end of
3343 the data subsection numbered SUBSECTION (which is an absolute
3344 expression).  If SUBSECTION is omitted, it defaults to zero.
3346 \x1f
3347 File: as.info,  Node: Def,  Next: Desc,  Prev: Data,  Up: Pseudo Ops
3349 7.32 `.def NAME'
3350 ================
3352 Begin defining debugging information for a symbol NAME; the definition
3353 extends until the `.endef' directive is encountered.
3355 \x1f
3356 File: as.info,  Node: Desc,  Next: Dim,  Prev: Def,  Up: Pseudo Ops
3358 7.33 `.desc SYMBOL, ABS-EXPRESSION'
3359 ===================================
3361 This directive sets the descriptor of the symbol (*note Symbol
3362 Attributes::) to the low 16 bits of an absolute expression.
3364    The `.desc' directive is not available when `as' is configured for
3365 COFF output; it is only for `a.out' or `b.out' object format.  For the
3366 sake of compatibility, `as' accepts it, but produces no output, when
3367 configured for COFF.
3369 \x1f
3370 File: as.info,  Node: Dim,  Next: Double,  Prev: Desc,  Up: Pseudo Ops
3372 7.34 `.dim'
3373 ===========
3375 This directive is generated by compilers to include auxiliary debugging
3376 information in the symbol table.  It is only permitted inside
3377 `.def'/`.endef' pairs.
3379 \x1f
3380 File: as.info,  Node: Double,  Next: Eject,  Prev: Dim,  Up: Pseudo Ops
3382 7.35 `.double FLONUMS'
3383 ======================
3385 `.double' expects zero or more flonums, separated by commas.  It
3386 assembles floating point numbers.  The exact kind of floating point
3387 numbers emitted depends on how `as' is configured.  *Note Machine
3388 Dependencies::.
3390 \x1f
3391 File: as.info,  Node: Eject,  Next: Else,  Prev: Double,  Up: Pseudo Ops
3393 7.36 `.eject'
3394 =============
3396 Force a page break at this point, when generating assembly listings.
3398 \x1f
3399 File: as.info,  Node: Else,  Next: Elseif,  Prev: Eject,  Up: Pseudo Ops
3401 7.37 `.else'
3402 ============
3404 `.else' is part of the `as' support for conditional assembly; see *Note
3405 `.if': If.  It marks the beginning of a section of code to be assembled
3406 if the condition for the preceding `.if' was false.
3408 \x1f
3409 File: as.info,  Node: Elseif,  Next: End,  Prev: Else,  Up: Pseudo Ops
3411 7.38 `.elseif'
3412 ==============
3414 `.elseif' is part of the `as' support for conditional assembly; see
3415 *Note `.if': If.  It is shorthand for beginning a new `.if' block that
3416 would otherwise fill the entire `.else' section.
3418 \x1f
3419 File: as.info,  Node: End,  Next: Endef,  Prev: Elseif,  Up: Pseudo Ops
3421 7.39 `.end'
3422 ===========
3424 `.end' marks the end of the assembly file.  `as' does not process
3425 anything in the file past the `.end' directive.
3427 \x1f
3428 File: as.info,  Node: Endef,  Next: Endfunc,  Prev: End,  Up: Pseudo Ops
3430 7.40 `.endef'
3431 =============
3433 This directive flags the end of a symbol definition begun with `.def'.
3435 \x1f
3436 File: as.info,  Node: Endfunc,  Next: Endif,  Prev: Endef,  Up: Pseudo Ops
3438 7.41 `.endfunc'
3439 ===============
3441 `.endfunc' marks the end of a function specified with `.func'.
3443 \x1f
3444 File: as.info,  Node: Endif,  Next: Equ,  Prev: Endfunc,  Up: Pseudo Ops
3446 7.42 `.endif'
3447 =============
3449 `.endif' is part of the `as' support for conditional assembly; it marks
3450 the end of a block of code that is only assembled conditionally.  *Note
3451 `.if': If.
3453 \x1f
3454 File: as.info,  Node: Equ,  Next: Equiv,  Prev: Endif,  Up: Pseudo Ops
3456 7.43 `.equ SYMBOL, EXPRESSION'
3457 ==============================
3459 This directive sets the value of SYMBOL to EXPRESSION.  It is
3460 synonymous with `.set'; see *Note `.set': Set.
3462    The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'.
3464    The syntax for `equ' on the Z80 is `SYMBOL equ EXPRESSION'.  On the
3465 Z80 it is an eror if SYMBOL is already defined, but the symbol is not
3466 protected from later redefinition.  Compare *Note Equiv::.
3468 \x1f
3469 File: as.info,  Node: Equiv,  Next: Eqv,  Prev: Equ,  Up: Pseudo Ops
3471 7.44 `.equiv SYMBOL, EXPRESSION'
3472 ================================
3474 The `.equiv' directive is like `.equ' and `.set', except that the
3475 assembler will signal an error if SYMBOL is already defined.  Note a
3476 symbol which has been referenced but not actually defined is considered
3477 to be undefined.
3479    Except for the contents of the error message, this is roughly
3480 equivalent to
3481      .ifdef SYM
3482      .err
3483      .endif
3484      .equ SYM,VAL
3485    plus it protects the symbol from later redefinition.
3487 \x1f
3488 File: as.info,  Node: Eqv,  Next: Err,  Prev: Equiv,  Up: Pseudo Ops
3490 7.45 `.eqv SYMBOL, EXPRESSION'
3491 ==============================
3493 The `.eqv' directive is like `.equiv', but no attempt is made to
3494 evaluate the expression or any part of it immediately.  Instead each
3495 time the resulting symbol is used in an expression, a snapshot of its
3496 current value is taken.
3498 \x1f
3499 File: as.info,  Node: Err,  Next: Error,  Prev: Eqv,  Up: Pseudo Ops
3501 7.46 `.err'
3502 ===========
3504 If `as' assembles a `.err' directive, it will print an error message
3505 and, unless the `-Z' option was used, it will not generate an object
3506 file.  This can be used to signal an error in conditionally compiled
3507 code.
3509 \x1f
3510 File: as.info,  Node: Error,  Next: Exitm,  Prev: Err,  Up: Pseudo Ops
3512 7.47 `.error "STRING"'
3513 ======================
3515 Similarly to `.err', this directive emits an error, but you can specify
3516 a string that will be emitted as the error message.  If you don't
3517 specify the message, it defaults to `".error directive invoked in
3518 source file"'.  *Note Error and Warning Messages: Errors.
3520       .error "This code has not been assembled and tested."
3522 \x1f
3523 File: as.info,  Node: Exitm,  Next: Extern,  Prev: Error,  Up: Pseudo Ops
3525 7.48 `.exitm'
3526 =============
3528 Exit early from the current macro definition.  *Note Macro::.
3530 \x1f
3531 File: as.info,  Node: Extern,  Next: Fail,  Prev: Exitm,  Up: Pseudo Ops
3533 7.49 `.extern'
3534 ==============
3536 `.extern' is accepted in the source program--for compatibility with
3537 other assemblers--but it is ignored.  `as' treats all undefined symbols
3538 as external.
3540 \x1f
3541 File: as.info,  Node: Fail,  Next: File,  Prev: Extern,  Up: Pseudo Ops
3543 7.50 `.fail EXPRESSION'
3544 =======================
3546 Generates an error or a warning.  If the value of the EXPRESSION is 500
3547 or more, `as' will print a warning message.  If the value is less than
3548 500, `as' will print an error message.  The message will include the
3549 value of EXPRESSION.  This can occasionally be useful inside complex
3550 nested macros or conditional assembly.
3552 \x1f
3553 File: as.info,  Node: File,  Next: Fill,  Prev: Fail,  Up: Pseudo Ops
3555 7.51 `.file'
3556 ============
3558 There are two different versions of the `.file' directive.  Targets
3559 that support DWARF2 line number information use the DWARF2 version of
3560 `.file'.  Other targets use the default version.
3562 Default Version
3563 ---------------
3565 This version of the `.file' directive tells `as' that we are about to
3566 start a new logical file.  The syntax is:
3568      .file STRING
3570    STRING is the new file name.  In general, the filename is recognized
3571 whether or not it is surrounded by quotes `"'; but if you wish to
3572 specify an empty file name, you must give the quotes-`""'.  This
3573 statement may go away in future: it is only recognized to be compatible
3574 with old `as' programs.
3576 DWARF2 Version
3577 --------------
3579 When emitting DWARF2 line number information, `.file' assigns filenames
3580 to the `.debug_line' file name table.  The syntax is:
3582      .file FILENO FILENAME
3584    The FILENO operand should be a unique positive integer to use as the
3585 index of the entry in the table.  The FILENAME operand is a C string
3586 literal.
3588    The detail of filename indices is exposed to the user because the
3589 filename table is shared with the `.debug_info' section of the DWARF2
3590 debugging information, and thus the user must know the exact indices
3591 that table entries will have.
3593 \x1f
3594 File: as.info,  Node: Fill,  Next: Float,  Prev: File,  Up: Pseudo Ops
3596 7.52 `.fill REPEAT , SIZE , VALUE'
3597 ==================================
3599 REPEAT, SIZE and VALUE are absolute expressions.  This emits REPEAT
3600 copies of SIZE bytes.  REPEAT may be zero or more.  SIZE may be zero or
3601 more, but if it is more than 8, then it is deemed to have the value 8,
3602 compatible with other people's assemblers.  The contents of each REPEAT
3603 bytes is taken from an 8-byte number.  The highest order 4 bytes are
3604 zero.  The lowest order 4 bytes are VALUE rendered in the byte-order of
3605 an integer on the computer `as' is assembling for.  Each SIZE bytes in
3606 a repetition is taken from the lowest order SIZE bytes of this number.
3607 Again, this bizarre behavior is compatible with other people's
3608 assemblers.
3610    SIZE and VALUE are optional.  If the second comma and VALUE are
3611 absent, VALUE is assumed zero.  If the first comma and following tokens
3612 are absent, SIZE is assumed to be 1.
3614 \x1f
3615 File: as.info,  Node: Float,  Next: Func,  Prev: Fill,  Up: Pseudo Ops
3617 7.53 `.float FLONUMS'
3618 =====================
3620 This directive assembles zero or more flonums, separated by commas.  It
3621 has the same effect as `.single'.  The exact kind of floating point
3622 numbers emitted depends on how `as' is configured.  *Note Machine
3623 Dependencies::.
3625 \x1f
3626 File: as.info,  Node: Func,  Next: Global,  Prev: Float,  Up: Pseudo Ops
3628 7.54 `.func NAME[,LABEL]'
3629 =========================
3631 `.func' emits debugging information to denote function NAME, and is
3632 ignored unless the file is assembled with debugging enabled.  Only
3633 `--gstabs[+]' is currently supported.  LABEL is the entry point of the
3634 function and if omitted NAME prepended with the `leading char' is used.
3635 `leading char' is usually `_' or nothing, depending on the target.  All
3636 functions are currently defined to have `void' return type.  The
3637 function must be terminated with `.endfunc'.
3639 \x1f
3640 File: as.info,  Node: Global,  Next: Gnu_attribute,  Prev: Func,  Up: Pseudo Ops
3642 7.55 `.global SYMBOL', `.globl SYMBOL'
3643 ======================================
3645 `.global' makes the symbol visible to `ld'.  If you define SYMBOL in
3646 your partial program, its value is made available to other partial
3647 programs that are linked with it.  Otherwise, SYMBOL takes its
3648 attributes from a symbol of the same name from another file linked into
3649 the same program.
3651    Both spellings (`.globl' and `.global') are accepted, for
3652 compatibility with other assemblers.
3654    On the HPPA, `.global' is not always enough to make it accessible to
3655 other partial programs.  You may need the HPPA-only `.EXPORT' directive
3656 as well.  *Note HPPA Assembler Directives: HPPA Directives.
3658 \x1f
3659 File: as.info,  Node: Gnu_attribute,  Next: Hidden,  Prev: Global,  Up: Pseudo Ops
3661 7.56 `.gnu_attribute TAG,VALUE'
3662 ===============================
3664 Record a GNU object attribute for this file.  *Note Object Attributes::.
3666 \x1f
3667 File: as.info,  Node: Hidden,  Next: hword,  Prev: Gnu_attribute,  Up: Pseudo Ops
3669 7.57 `.hidden NAMES'
3670 ====================
3672 This is one of the ELF visibility directives.  The other two are
3673 `.internal' (*note `.internal': Internal.) and `.protected' (*note
3674 `.protected': Protected.).
3676    This directive overrides the named symbols default visibility (which
3677 is set by their binding: local, global or weak).  The directive sets
3678 the visibility to `hidden' which means that the symbols are not visible
3679 to other components.  Such symbols are always considered to be
3680 `protected' as well.
3682 \x1f
3683 File: as.info,  Node: hword,  Next: Ident,  Prev: Hidden,  Up: Pseudo Ops
3685 7.58 `.hword EXPRESSIONS'
3686 =========================
3688 This expects zero or more EXPRESSIONS, and emits a 16 bit number for
3689 each.
3691    This directive is a synonym for `.short'; depending on the target
3692 architecture, it may also be a synonym for `.word'.
3694 \x1f
3695 File: as.info,  Node: Ident,  Next: If,  Prev: hword,  Up: Pseudo Ops
3697 7.59 `.ident'
3698 =============
3700 This directive is used by some assemblers to place tags in object
3701 files.  The behavior of this directive varies depending on the target.
3702 When using the a.out object file format, `as' simply accepts the
3703 directive for source-file compatibility with existing assemblers, but
3704 does not emit anything for it.  When using COFF, comments are emitted
3705 to the `.comment' or `.rdata' section, depending on the target.  When
3706 using ELF, comments are emitted to the `.comment' section.
3708 \x1f
3709 File: as.info,  Node: If,  Next: Incbin,  Prev: Ident,  Up: Pseudo Ops
3711 7.60 `.if ABSOLUTE EXPRESSION'
3712 ==============================
3714 `.if' marks the beginning of a section of code which is only considered
3715 part of the source program being assembled if the argument (which must
3716 be an ABSOLUTE EXPRESSION) is non-zero.  The end of the conditional
3717 section of code must be marked by `.endif' (*note `.endif': Endif.);
3718 optionally, you may include code for the alternative condition, flagged
3719 by `.else' (*note `.else': Else.).  If you have several conditions to
3720 check, `.elseif' may be used to avoid nesting blocks if/else within
3721 each subsequent `.else' block.
3723    The following variants of `.if' are also supported:
3724 `.ifdef SYMBOL'
3725      Assembles the following section of code if the specified SYMBOL
3726      has been defined.  Note a symbol which has been referenced but not
3727      yet defined is considered to be undefined.
3729 `.ifb TEXT'
3730      Assembles the following section of code if the operand is blank
3731      (empty).
3733 `.ifc STRING1,STRING2'
3734      Assembles the following section of code if the two strings are the
3735      same.  The strings may be optionally quoted with single quotes.
3736      If they are not quoted, the first string stops at the first comma,
3737      and the second string stops at the end of the line.  Strings which
3738      contain whitespace should be quoted.  The string comparison is
3739      case sensitive.
3741 `.ifeq ABSOLUTE EXPRESSION'
3742      Assembles the following section of code if the argument is zero.
3744 `.ifeqs STRING1,STRING2'
3745      Another form of `.ifc'.  The strings must be quoted using double
3746      quotes.
3748 `.ifge ABSOLUTE EXPRESSION'
3749      Assembles the following section of code if the argument is greater
3750      than or equal to zero.
3752 `.ifgt ABSOLUTE EXPRESSION'
3753      Assembles the following section of code if the argument is greater
3754      than zero.
3756 `.ifle ABSOLUTE EXPRESSION'
3757      Assembles the following section of code if the argument is less
3758      than or equal to zero.
3760 `.iflt ABSOLUTE EXPRESSION'
3761      Assembles the following section of code if the argument is less
3762      than zero.
3764 `.ifnb TEXT'
3765      Like `.ifb', but the sense of the test is reversed: this assembles
3766      the following section of code if the operand is non-blank
3767      (non-empty).
3769 `.ifnc STRING1,STRING2.'
3770      Like `.ifc', but the sense of the test is reversed: this assembles
3771      the following section of code if the two strings are not the same.
3773 `.ifndef SYMBOL'
3774 `.ifnotdef SYMBOL'
3775      Assembles the following section of code if the specified SYMBOL
3776      has not been defined.  Both spelling variants are equivalent.
3777      Note a symbol which has been referenced but not yet defined is
3778      considered to be undefined.
3780 `.ifne ABSOLUTE EXPRESSION'
3781      Assembles the following section of code if the argument is not
3782      equal to zero (in other words, this is equivalent to `.if').
3784 `.ifnes STRING1,STRING2'
3785      Like `.ifeqs', but the sense of the test is reversed: this
3786      assembles the following section of code if the two strings are not
3787      the same.
3789 \x1f
3790 File: as.info,  Node: Incbin,  Next: Include,  Prev: If,  Up: Pseudo Ops
3792 7.61 `.incbin "FILE"[,SKIP[,COUNT]]'
3793 ====================================
3795 The `incbin' directive includes FILE verbatim at the current location.
3796 You can control the search paths used with the `-I' command-line option
3797 (*note Command-Line Options: Invoking.).  Quotation marks are required
3798 around FILE.
3800    The SKIP argument skips a number of bytes from the start of the
3801 FILE.  The COUNT argument indicates the maximum number of bytes to
3802 read.  Note that the data is not aligned in any way, so it is the user's
3803 responsibility to make sure that proper alignment is provided both
3804 before and after the `incbin' directive.
3806 \x1f
3807 File: as.info,  Node: Include,  Next: Int,  Prev: Incbin,  Up: Pseudo Ops
3809 7.62 `.include "FILE"'
3810 ======================
3812 This directive provides a way to include supporting files at specified
3813 points in your source program.  The code from FILE is assembled as if
3814 it followed the point of the `.include'; when the end of the included
3815 file is reached, assembly of the original file continues.  You can
3816 control the search paths used with the `-I' command-line option (*note
3817 Command-Line Options: Invoking.).  Quotation marks are required around
3818 FILE.
3820 \x1f
3821 File: as.info,  Node: Int,  Next: Internal,  Prev: Include,  Up: Pseudo Ops
3823 7.63 `.int EXPRESSIONS'
3824 =======================
3826 Expect zero or more EXPRESSIONS, of any section, separated by commas.
3827 For each expression, emit a number that, at run time, is the value of
3828 that expression.  The byte order and bit size of the number depends on
3829 what kind of target the assembly is for.
3831 \x1f
3832 File: as.info,  Node: Internal,  Next: Irp,  Prev: Int,  Up: Pseudo Ops
3834 7.64 `.internal NAMES'
3835 ======================
3837 This is one of the ELF visibility directives.  The other two are
3838 `.hidden' (*note `.hidden': Hidden.) and `.protected' (*note
3839 `.protected': Protected.).
3841    This directive overrides the named symbols default visibility (which
3842 is set by their binding: local, global or weak).  The directive sets
3843 the visibility to `internal' which means that the symbols are
3844 considered to be `hidden' (i.e., not visible to other components), and
3845 that some extra, processor specific processing must also be performed
3846 upon the  symbols as well.
3848 \x1f
3849 File: as.info,  Node: Irp,  Next: Irpc,  Prev: Internal,  Up: Pseudo Ops
3851 7.65 `.irp SYMBOL,VALUES'...
3852 ============================
3854 Evaluate a sequence of statements assigning different values to SYMBOL.
3855 The sequence of statements starts at the `.irp' directive, and is
3856 terminated by an `.endr' directive.  For each VALUE, SYMBOL is set to
3857 VALUE, and the sequence of statements is assembled.  If no VALUE is
3858 listed, the sequence of statements is assembled once, with SYMBOL set
3859 to the null string.  To refer to SYMBOL within the sequence of
3860 statements, use \SYMBOL.
3862    For example, assembling
3864              .irp    param,1,2,3
3865              move    d\param,sp@-
3866              .endr
3868    is equivalent to assembling
3870              move    d1,sp@-
3871              move    d2,sp@-
3872              move    d3,sp@-
3874    For some caveats with the spelling of SYMBOL, see also *Note Macro::.
3876 \x1f
3877 File: as.info,  Node: Irpc,  Next: Lcomm,  Prev: Irp,  Up: Pseudo Ops
3879 7.66 `.irpc SYMBOL,VALUES'...
3880 =============================
3882 Evaluate a sequence of statements assigning different values to SYMBOL.
3883 The sequence of statements starts at the `.irpc' directive, and is
3884 terminated by an `.endr' directive.  For each character in VALUE,
3885 SYMBOL is set to the character, and the sequence of statements is
3886 assembled.  If no VALUE is listed, the sequence of statements is
3887 assembled once, with SYMBOL set to the null string.  To refer to SYMBOL
3888 within the sequence of statements, use \SYMBOL.
3890    For example, assembling
3892              .irpc    param,123
3893              move    d\param,sp@-
3894              .endr
3896    is equivalent to assembling
3898              move    d1,sp@-
3899              move    d2,sp@-
3900              move    d3,sp@-
3902    For some caveats with the spelling of SYMBOL, see also the discussion
3903 at *Note Macro::.
3905 \x1f
3906 File: as.info,  Node: Lcomm,  Next: Lflags,  Prev: Irpc,  Up: Pseudo Ops
3908 7.67 `.lcomm SYMBOL , LENGTH'
3909 =============================
3911 Reserve LENGTH (an absolute expression) bytes for a local common
3912 denoted by SYMBOL.  The section and value of SYMBOL are those of the
3913 new local common.  The addresses are allocated in the bss section, so
3914 that at run-time the bytes start off zeroed.  SYMBOL is not declared
3915 global (*note `.global': Global.), so is normally not visible to `ld'.
3917    Some targets permit a third argument to be used with `.lcomm'.  This
3918 argument specifies the desired alignment of the symbol in the bss
3919 section.
3921    The syntax for `.lcomm' differs slightly on the HPPA.  The syntax is
3922 `SYMBOL .lcomm, LENGTH'; SYMBOL is optional.
3924 \x1f
3925 File: as.info,  Node: Lflags,  Next: Line,  Prev: Lcomm,  Up: Pseudo Ops
3927 7.68 `.lflags'
3928 ==============
3930 `as' accepts this directive, for compatibility with other assemblers,
3931 but ignores it.
3933 \x1f
3934 File: as.info,  Node: Line,  Next: Linkonce,  Prev: Lflags,  Up: Pseudo Ops
3936 7.69 `.line LINE-NUMBER'
3937 ========================
3939 Change the logical line number.  LINE-NUMBER must be an absolute
3940 expression.  The next line has that logical line number.  Therefore any
3941 other statements on the current line (after a statement separator
3942 character) are reported as on logical line number LINE-NUMBER - 1.  One
3943 day `as' will no longer support this directive: it is recognized only
3944 for compatibility with existing assembler programs.
3946 Even though this is a directive associated with the `a.out' or `b.out'
3947 object-code formats, `as' still recognizes it when producing COFF
3948 output, and treats `.line' as though it were the COFF `.ln' _if_ it is
3949 found outside a `.def'/`.endef' pair.
3951    Inside a `.def', `.line' is, instead, one of the directives used by
3952 compilers to generate auxiliary symbol information for debugging.
3954 \x1f
3955 File: as.info,  Node: Linkonce,  Next: List,  Prev: Line,  Up: Pseudo Ops
3957 7.70 `.linkonce [TYPE]'
3958 =======================
3960 Mark the current section so that the linker only includes a single copy
3961 of it.  This may be used to include the same section in several
3962 different object files, but ensure that the linker will only include it
3963 once in the final output file.  The `.linkonce' pseudo-op must be used
3964 for each instance of the section.  Duplicate sections are detected
3965 based on the section name, so it should be unique.
3967    This directive is only supported by a few object file formats; as of
3968 this writing, the only object file format which supports it is the
3969 Portable Executable format used on Windows NT.
3971    The TYPE argument is optional.  If specified, it must be one of the
3972 following strings.  For example:
3973      .linkonce same_size
3974    Not all types may be supported on all object file formats.
3976 `discard'
3977      Silently discard duplicate sections.  This is the default.
3979 `one_only'
3980      Warn if there are duplicate sections, but still keep only one copy.
3982 `same_size'
3983      Warn if any of the duplicates have different sizes.
3985 `same_contents'
3986      Warn if any of the duplicates do not have exactly the same
3987      contents.
3989 \x1f
3990 File: as.info,  Node: List,  Next: Ln,  Prev: Linkonce,  Up: Pseudo Ops
3992 7.71 `.list'
3993 ============
3995 Control (in conjunction with the `.nolist' directive) whether or not
3996 assembly listings are generated.  These two directives maintain an
3997 internal counter (which is zero initially).   `.list' increments the
3998 counter, and `.nolist' decrements it.  Assembly listings are generated
3999 whenever the counter is greater than zero.
4001    By default, listings are disabled.  When you enable them (with the
4002 `-a' command line option; *note Command-Line Options: Invoking.), the
4003 initial value of the listing counter is one.
4005 \x1f
4006 File: as.info,  Node: Ln,  Next: Loc,  Prev: List,  Up: Pseudo Ops
4008 7.72 `.ln LINE-NUMBER'
4009 ======================
4011 `.ln' is a synonym for `.line'.
4013 \x1f
4014 File: as.info,  Node: Loc,  Next: Loc_mark_labels,  Prev: Ln,  Up: Pseudo Ops
4016 7.73 `.loc FILENO LINENO [COLUMN] [OPTIONS]'
4017 ============================================
4019 When emitting DWARF2 line number information, the `.loc' directive will
4020 add a row to the `.debug_line' line number matrix corresponding to the
4021 immediately following assembly instruction.  The FILENO, LINENO, and
4022 optional COLUMN arguments will be applied to the `.debug_line' state
4023 machine before the row is added.
4025    The OPTIONS are a sequence of the following tokens in any order:
4027 `basic_block'
4028      This option will set the `basic_block' register in the
4029      `.debug_line' state machine to `true'.
4031 `prologue_end'
4032      This option will set the `prologue_end' register in the
4033      `.debug_line' state machine to `true'.
4035 `epilogue_begin'
4036      This option will set the `epilogue_begin' register in the
4037      `.debug_line' state machine to `true'.
4039 `is_stmt VALUE'
4040      This option will set the `is_stmt' register in the `.debug_line'
4041      state machine to `value', which must be either 0 or 1.
4043 `isa VALUE'
4044      This directive will set the `isa' register in the `.debug_line'
4045      state machine to VALUE, which must be an unsigned integer.
4047 `discriminator VALUE'
4048      This directive will set the `discriminator' register in the
4049      `.debug_line' state machine to VALUE, which must be an unsigned
4050      integer.
4053 \x1f
4054 File: as.info,  Node: Loc_mark_labels,  Next: Local,  Prev: Loc,  Up: Pseudo Ops
4056 7.74 `.loc_mark_labels ENABLE'
4057 ==============================
4059 When emitting DWARF2 line number information, the `.loc_mark_labels'
4060 directive makes the assembler emit an entry to the `.debug_line' line
4061 number matrix with the `basic_block' register in the state machine set
4062 whenever a code label is seen.  The ENABLE argument should be either 1
4063 or 0, to enable or disable this function respectively.
4065 \x1f
4066 File: as.info,  Node: Local,  Next: Long,  Prev: Loc_mark_labels,  Up: Pseudo Ops
4068 7.75 `.local NAMES'
4069 ===================
4071 This directive, which is available for ELF targets, marks each symbol in
4072 the comma-separated list of `names' as a local symbol so that it will
4073 not be externally visible.  If the symbols do not already exist, they
4074 will be created.
4076    For targets where the `.lcomm' directive (*note Lcomm::) does not
4077 accept an alignment argument, which is the case for most ELF targets,
4078 the `.local' directive can be used in combination with `.comm' (*note
4079 Comm::) to define aligned local common data.
4081 \x1f
4082 File: as.info,  Node: Long,  Next: Macro,  Prev: Local,  Up: Pseudo Ops
4084 7.76 `.long EXPRESSIONS'
4085 ========================
4087 `.long' is the same as `.int'.  *Note `.int': Int.
4089 \x1f
4090 File: as.info,  Node: Macro,  Next: MRI,  Prev: Long,  Up: Pseudo Ops
4092 7.77 `.macro'
4093 =============
4095 The commands `.macro' and `.endm' allow you to define macros that
4096 generate assembly output.  For example, this definition specifies a
4097 macro `sum' that puts a sequence of numbers into memory:
4099              .macro  sum from=0, to=5
4100              .long   \from
4101              .if     \to-\from
4102              sum     "(\from+1)",\to
4103              .endif
4104              .endm
4106 With that definition, `SUM 0,5' is equivalent to this assembly input:
4108              .long   0
4109              .long   1
4110              .long   2
4111              .long   3
4112              .long   4
4113              .long   5
4115 `.macro MACNAME'
4116 `.macro MACNAME MACARGS ...'
4117      Begin the definition of a macro called MACNAME.  If your macro
4118      definition requires arguments, specify their names after the macro
4119      name, separated by commas or spaces.  You can qualify the macro
4120      argument to indicate whether all invocations must specify a
4121      non-blank value (through `:`req''), or whether it takes all of the
4122      remaining arguments (through `:`vararg'').  You can supply a
4123      default value for any macro argument by following the name with
4124      `=DEFLT'.  You cannot define two macros with the same MACNAME
4125      unless it has been subject to the `.purgem' directive (*note
4126      Purgem::) between the two definitions.  For example, these are all
4127      valid `.macro' statements:
4129     `.macro comm'
4130           Begin the definition of a macro called `comm', which takes no
4131           arguments.
4133     `.macro plus1 p, p1'
4134     `.macro plus1 p p1'
4135           Either statement begins the definition of a macro called
4136           `plus1', which takes two arguments; within the macro
4137           definition, write `\p' or `\p1' to evaluate the arguments.
4139     `.macro reserve_str p1=0 p2'
4140           Begin the definition of a macro called `reserve_str', with two
4141           arguments.  The first argument has a default value, but not
4142           the second.  After the definition is complete, you can call
4143           the macro either as `reserve_str A,B' (with `\p1' evaluating
4144           to A and `\p2' evaluating to B), or as `reserve_str ,B' (with
4145           `\p1' evaluating as the default, in this case `0', and `\p2'
4146           evaluating to B).
4148     `.macro m p1:req, p2=0, p3:vararg'
4149           Begin the definition of a macro called `m', with at least
4150           three arguments.  The first argument must always have a value
4151           specified, but not the second, which instead has a default
4152           value. The third formal will get assigned all remaining
4153           arguments specified at invocation time.
4155           When you call a macro, you can specify the argument values
4156           either by position, or by keyword.  For example, `sum 9,17'
4157           is equivalent to `sum to=17, from=9'.
4160      Note that since each of the MACARGS can be an identifier exactly
4161      as any other one permitted by the target architecture, there may be
4162      occasional problems if the target hand-crafts special meanings to
4163      certain characters when they occur in a special position.  For
4164      example, if the colon (`:') is generally permitted to be part of a
4165      symbol name, but the architecture specific code special-cases it
4166      when occurring as the final character of a symbol (to denote a
4167      label), then the macro parameter replacement code will have no way
4168      of knowing that and consider the whole construct (including the
4169      colon) an identifier, and check only this identifier for being the
4170      subject to parameter substitution.  So for example this macro
4171      definition:
4173                 .macro label l
4174           \l:
4175                 .endm
4177      might not work as expected.  Invoking `label foo' might not create
4178      a label called `foo' but instead just insert the text `\l:' into
4179      the assembler source, probably generating an error about an
4180      unrecognised identifier.
4182      Similarly problems might occur with the period character (`.')
4183      which is often allowed inside opcode names (and hence identifier
4184      names).  So for example constructing a macro to build an opcode
4185      from a base name and a length specifier like this:
4187                 .macro opcode base length
4188                   \base.\length
4189                 .endm
4191      and invoking it as `opcode store l' will not create a `store.l'
4192      instruction but instead generate some kind of error as the
4193      assembler tries to interpret the text `\base.\length'.
4195      There are several possible ways around this problem:
4197     `Insert white space'
4198           If it is possible to use white space characters then this is
4199           the simplest solution.  eg:
4201                 .macro label l
4202                \l :
4203                 .endm
4205     `Use `\()''
4206           The string `\()' can be used to separate the end of a macro
4207           argument from the following text.  eg:
4209                 .macro opcode base length
4210                        \base\().\length
4211                 .endm
4213     `Use the alternate macro syntax mode'
4214           In the alternative macro syntax mode the ampersand character
4215           (`&') can be used as a separator.  eg:
4217                 .altmacro
4218                 .macro label l
4219                l&:
4220                 .endm
4222      Note: this problem of correctly identifying string parameters to
4223      pseudo ops also applies to the identifiers used in `.irp' (*note
4224      Irp::) and `.irpc' (*note Irpc::) as well.
4226 `.endm'
4227      Mark the end of a macro definition.
4229 `.exitm'
4230      Exit early from the current macro definition.
4232 `\@'
4233      `as' maintains a counter of how many macros it has executed in
4234      this pseudo-variable; you can copy that number to your output with
4235      `\@', but _only within a macro definition_.
4237 `LOCAL NAME [ , ... ]'
4238      _Warning: `LOCAL' is only available if you select "alternate macro
4239      syntax" with `--alternate' or `.altmacro'._ *Note `.altmacro':
4240      Altmacro.
4242 \x1f
4243 File: as.info,  Node: MRI,  Next: Noaltmacro,  Prev: Macro,  Up: Pseudo Ops
4245 7.78 `.mri VAL'
4246 ===============
4248 If VAL is non-zero, this tells `as' to enter MRI mode.  If VAL is zero,
4249 this tells `as' to exit MRI mode.  This change affects code assembled
4250 until the next `.mri' directive, or until the end of the file.  *Note
4251 MRI mode: M.
4253 \x1f
4254 File: as.info,  Node: Noaltmacro,  Next: Nolist,  Prev: MRI,  Up: Pseudo Ops
4256 7.79 `.noaltmacro'
4257 ==================
4259 Disable alternate macro mode.  *Note Altmacro::.
4261 \x1f
4262 File: as.info,  Node: Nolist,  Next: Octa,  Prev: Noaltmacro,  Up: Pseudo Ops
4264 7.80 `.nolist'
4265 ==============
4267 Control (in conjunction with the `.list' directive) whether or not
4268 assembly listings are generated.  These two directives maintain an
4269 internal counter (which is zero initially).   `.list' increments the
4270 counter, and `.nolist' decrements it.  Assembly listings are generated
4271 whenever the counter is greater than zero.
4273 \x1f
4274 File: as.info,  Node: Octa,  Next: Org,  Prev: Nolist,  Up: Pseudo Ops
4276 7.81 `.octa BIGNUMS'
4277 ====================
4279 This directive expects zero or more bignums, separated by commas.  For
4280 each bignum, it emits a 16-byte integer.
4282    The term "octa" comes from contexts in which a "word" is two bytes;
4283 hence _octa_-word for 16 bytes.
4285 \x1f
4286 File: as.info,  Node: Org,  Next: P2align,  Prev: Octa,  Up: Pseudo Ops
4288 7.82 `.org NEW-LC , FILL'
4289 =========================
4291 Advance the location counter of the current section to NEW-LC.  NEW-LC
4292 is either an absolute expression or an expression with the same section
4293 as the current subsection.  That is, you can't use `.org' to cross
4294 sections: if NEW-LC has the wrong section, the `.org' directive is
4295 ignored.  To be compatible with former assemblers, if the section of
4296 NEW-LC is absolute, `as' issues a warning, then pretends the section of
4297 NEW-LC is the same as the current subsection.
4299    `.org' may only increase the location counter, or leave it
4300 unchanged; you cannot use `.org' to move the location counter backwards.
4302    Because `as' tries to assemble programs in one pass, NEW-LC may not
4303 be undefined.  If you really detest this restriction we eagerly await a
4304 chance to share your improved assembler.
4306    Beware that the origin is relative to the start of the section, not
4307 to the start of the subsection.  This is compatible with other people's
4308 assemblers.
4310    When the location counter (of the current subsection) is advanced,
4311 the intervening bytes are filled with FILL which should be an absolute
4312 expression.  If the comma and FILL are omitted, FILL defaults to zero.
4314 \x1f
4315 File: as.info,  Node: P2align,  Next: PopSection,  Prev: Org,  Up: Pseudo Ops
4317 7.83 `.p2align[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR'
4318 ================================================
4320 Pad the location counter (in the current subsection) to a particular
4321 storage boundary.  The first expression (which must be absolute) is the
4322 number of low-order zero bits the location counter must have after
4323 advancement.  For example `.p2align 3' advances the location counter
4324 until it a multiple of 8.  If the location counter is already a
4325 multiple of 8, no change is needed.
4327    The second expression (also absolute) gives the fill value to be
4328 stored in the padding bytes.  It (and the comma) may be omitted.  If it
4329 is omitted, the padding bytes are normally zero.  However, on some
4330 systems, if the section is marked as containing code and the fill value
4331 is omitted, the space is filled with no-op instructions.
4333    The third expression is also absolute, and is also optional.  If it
4334 is present, it is the maximum number of bytes that should be skipped by
4335 this alignment directive.  If doing the alignment would require
4336 skipping more bytes than the specified maximum, then the alignment is
4337 not done at all.  You can omit the fill value (the second argument)
4338 entirely by simply using two commas after the required alignment; this
4339 can be useful if you want the alignment to be filled with no-op
4340 instructions when appropriate.
4342    The `.p2alignw' and `.p2alignl' directives are variants of the
4343 `.p2align' directive.  The `.p2alignw' directive treats the fill
4344 pattern as a two byte word value.  The `.p2alignl' directives treats the
4345 fill pattern as a four byte longword value.  For example, `.p2alignw
4346 2,0x368d' will align to a multiple of 4.  If it skips two bytes, they
4347 will be filled in with the value 0x368d (the exact placement of the
4348 bytes depends upon the endianness of the processor).  If it skips 1 or
4349 3 bytes, the fill value is undefined.
4351 \x1f
4352 File: as.info,  Node: PopSection,  Next: Previous,  Prev: P2align,  Up: Pseudo Ops
4354 7.84 `.popsection'
4355 ==================
4357 This is one of the ELF section stack manipulation directives.  The
4358 others are `.section' (*note Section::), `.subsection' (*note
4359 SubSection::), `.pushsection' (*note PushSection::), and `.previous'
4360 (*note Previous::).
4362    This directive replaces the current section (and subsection) with
4363 the top section (and subsection) on the section stack.  This section is
4364 popped off the stack.
4366 \x1f
4367 File: as.info,  Node: Previous,  Next: Print,  Prev: PopSection,  Up: Pseudo Ops
4369 7.85 `.previous'
4370 ================
4372 This is one of the ELF section stack manipulation directives.  The
4373 others are `.section' (*note Section::), `.subsection' (*note
4374 SubSection::), `.pushsection' (*note PushSection::), and `.popsection'
4375 (*note PopSection::).
4377    This directive swaps the current section (and subsection) with most
4378 recently referenced section/subsection pair prior to this one.  Multiple
4379 `.previous' directives in a row will flip between two sections (and
4380 their subsections).  For example:
4382      .section A
4383       .subsection 1
4384        .word 0x1234
4385       .subsection 2
4386        .word 0x5678
4387      .previous
4388       .word 0x9abc
4390    Will place 0x1234 and 0x9abc into subsection 1 and 0x5678 into
4391 subsection 2 of section A.  Whilst:
4393      .section A
4394      .subsection 1
4395        # Now in section A subsection 1
4396        .word 0x1234
4397      .section B
4398      .subsection 0
4399        # Now in section B subsection 0
4400        .word 0x5678
4401      .subsection 1
4402        # Now in section B subsection 1
4403        .word 0x9abc
4404      .previous
4405        # Now in section B subsection 0
4406        .word 0xdef0
4408    Will place 0x1234 into section A, 0x5678 and 0xdef0 into subsection
4409 0 of section B and 0x9abc into subsection 1 of section B.
4411    In terms of the section stack, this directive swaps the current
4412 section with the top section on the section stack.
4414 \x1f
4415 File: as.info,  Node: Print,  Next: Protected,  Prev: Previous,  Up: Pseudo Ops
4417 7.86 `.print STRING'
4418 ====================
4420 `as' will print STRING on the standard output during assembly.  You
4421 must put STRING in double quotes.
4423 \x1f
4424 File: as.info,  Node: Protected,  Next: Psize,  Prev: Print,  Up: Pseudo Ops
4426 7.87 `.protected NAMES'
4427 =======================
4429 This is one of the ELF visibility directives.  The other two are
4430 `.hidden' (*note Hidden::) and `.internal' (*note Internal::).
4432    This directive overrides the named symbols default visibility (which
4433 is set by their binding: local, global or weak).  The directive sets
4434 the visibility to `protected' which means that any references to the
4435 symbols from within the components that defines them must be resolved
4436 to the definition in that component, even if a definition in another
4437 component would normally preempt this.
4439 \x1f
4440 File: as.info,  Node: Psize,  Next: Purgem,  Prev: Protected,  Up: Pseudo Ops
4442 7.88 `.psize LINES , COLUMNS'
4443 =============================
4445 Use this directive to declare the number of lines--and, optionally, the
4446 number of columns--to use for each page, when generating listings.
4448    If you do not use `.psize', listings use a default line-count of 60.
4449 You may omit the comma and COLUMNS specification; the default width is
4450 200 columns.
4452    `as' generates formfeeds whenever the specified number of lines is
4453 exceeded (or whenever you explicitly request one, using `.eject').
4455    If you specify LINES as `0', no formfeeds are generated save those
4456 explicitly specified with `.eject'.
4458 \x1f
4459 File: as.info,  Node: Purgem,  Next: PushSection,  Prev: Psize,  Up: Pseudo Ops
4461 7.89 `.purgem NAME'
4462 ===================
4464 Undefine the macro NAME, so that later uses of the string will not be
4465 expanded.  *Note Macro::.
4467 \x1f
4468 File: as.info,  Node: PushSection,  Next: Quad,  Prev: Purgem,  Up: Pseudo Ops
4470 7.90 `.pushsection NAME [, SUBSECTION] [, "FLAGS"[, @TYPE[,ARGUMENTS]]]'
4471 ========================================================================
4473 This is one of the ELF section stack manipulation directives.  The
4474 others are `.section' (*note Section::), `.subsection' (*note
4475 SubSection::), `.popsection' (*note PopSection::), and `.previous'
4476 (*note Previous::).
4478    This directive pushes the current section (and subsection) onto the
4479 top of the section stack, and then replaces the current section and
4480 subsection with `name' and `subsection'. The optional `flags', `type'
4481 and `arguments' are treated the same as in the `.section' (*note
4482 Section::) directive.
4484 \x1f
4485 File: as.info,  Node: Quad,  Next: Reloc,  Prev: PushSection,  Up: Pseudo Ops
4487 7.91 `.quad BIGNUMS'
4488 ====================
4490 `.quad' expects zero or more bignums, separated by commas.  For each
4491 bignum, it emits an 8-byte integer.  If the bignum won't fit in 8
4492 bytes, it prints a warning message; and just takes the lowest order 8
4493 bytes of the bignum.  
4495    The term "quad" comes from contexts in which a "word" is two bytes;
4496 hence _quad_-word for 8 bytes.
4498 \x1f
4499 File: as.info,  Node: Reloc,  Next: Rept,  Prev: Quad,  Up: Pseudo Ops
4501 7.92 `.reloc OFFSET, RELOC_NAME[, EXPRESSION]'
4502 ==============================================
4504 Generate a relocation at OFFSET of type RELOC_NAME with value
4505 EXPRESSION.  If OFFSET is a number, the relocation is generated in the
4506 current section.  If OFFSET is an expression that resolves to a symbol
4507 plus offset, the relocation is generated in the given symbol's section.
4508 EXPRESSION, if present, must resolve to a symbol plus addend or to an
4509 absolute value, but note that not all targets support an addend.  e.g.
4510 ELF REL targets such as i386 store an addend in the section contents
4511 rather than in the relocation.  This low level interface does not
4512 support addends stored in the section.
4514 \x1f
4515 File: as.info,  Node: Rept,  Next: Sbttl,  Prev: Reloc,  Up: Pseudo Ops
4517 7.93 `.rept COUNT'
4518 ==================
4520 Repeat the sequence of lines between the `.rept' directive and the next
4521 `.endr' directive COUNT times.
4523    For example, assembling
4525              .rept   3
4526              .long   0
4527              .endr
4529    is equivalent to assembling
4531              .long   0
4532              .long   0
4533              .long   0
4535 \x1f
4536 File: as.info,  Node: Sbttl,  Next: Scl,  Prev: Rept,  Up: Pseudo Ops
4538 7.94 `.sbttl "SUBHEADING"'
4539 ==========================
4541 Use SUBHEADING as the title (third line, immediately after the title
4542 line) when generating assembly listings.
4544    This directive affects subsequent pages, as well as the current page
4545 if it appears within ten lines of the top of a page.
4547 \x1f
4548 File: as.info,  Node: Scl,  Next: Section,  Prev: Sbttl,  Up: Pseudo Ops
4550 7.95 `.scl CLASS'
4551 =================
4553 Set the storage-class value for a symbol.  This directive may only be
4554 used inside a `.def'/`.endef' pair.  Storage class may flag whether a
4555 symbol is static or external, or it may record further symbolic
4556 debugging information.
4558 \x1f
4559 File: as.info,  Node: Section,  Next: Set,  Prev: Scl,  Up: Pseudo Ops
4561 7.96 `.section NAME'
4562 ====================
4564 Use the `.section' directive to assemble the following code into a
4565 section named NAME.
4567    This directive is only supported for targets that actually support
4568 arbitrarily named sections; on `a.out' targets, for example, it is not
4569 accepted, even with a standard `a.out' section name.
4571 COFF Version
4572 ------------
4574    For COFF targets, the `.section' directive is used in one of the
4575 following ways:
4577      .section NAME[, "FLAGS"]
4578      .section NAME[, SUBSECTION]
4580    If the optional argument is quoted, it is taken as flags to use for
4581 the section.  Each flag is a single character.  The following flags are
4582 recognized:
4584      bss section (uninitialized data)
4587      section is not loaded
4590      writable section
4593      data section
4596      read-only section
4599      executable section
4602      shared section (meaningful for PE targets)
4605      ignored.  (For compatibility with the ELF version)
4608      section is not readable (meaningful for PE targets)
4610    If no flags are specified, the default flags depend upon the section
4611 name.  If the section name is not recognized, the default will be for
4612 the section to be loaded and writable.  Note the `n' and `w' flags
4613 remove attributes from the section, rather than adding them, so if they
4614 are used on their own it will be as if no flags had been specified at
4615 all.
4617    If the optional argument to the `.section' directive is not quoted,
4618 it is taken as a subsection number (*note Sub-Sections::).
4620 ELF Version
4621 -----------
4623    This is one of the ELF section stack manipulation directives.  The
4624 others are `.subsection' (*note SubSection::), `.pushsection' (*note
4625 PushSection::), `.popsection' (*note PopSection::), and `.previous'
4626 (*note Previous::).
4628    For ELF targets, the `.section' directive is used like this:
4630      .section NAME [, "FLAGS"[, @TYPE[,FLAG_SPECIFIC_ARGUMENTS]]]
4632    The optional FLAGS argument is a quoted string which may contain any
4633 combination of the following characters:
4635      section is allocatable
4638      section is writable
4641      section is executable
4644      section is mergeable
4647      section contains zero terminated strings
4650      section is a member of a section group
4653      section is used for thread-local-storage
4655    The optional TYPE argument may contain one of the following
4656 constants:
4657 `@progbits'
4658      section contains data
4660 `@nobits'
4661      section does not contain data (i.e., section only occupies space)
4663 `@note'
4664      section contains data which is used by things other than the
4665      program
4667 `@init_array'
4668      section contains an array of pointers to init functions
4670 `@fini_array'
4671      section contains an array of pointers to finish functions
4673 `@preinit_array'
4674      section contains an array of pointers to pre-init functions
4676    Many targets only support the first three section types.
4678    Note on targets where the `@' character is the start of a comment (eg
4679 ARM) then another character is used instead.  For example the ARM port
4680 uses the `%' character.
4682    If FLAGS contains the `M' symbol then the TYPE argument must be
4683 specified as well as an extra argument--ENTSIZE--like this:
4685      .section NAME , "FLAGS"M, @TYPE, ENTSIZE
4687    Sections with the `M' flag but not `S' flag must contain fixed size
4688 constants, each ENTSIZE octets long. Sections with both `M' and `S'
4689 must contain zero terminated strings where each character is ENTSIZE
4690 bytes long. The linker may remove duplicates within sections with the
4691 same name, same entity size and same flags.  ENTSIZE must be an
4692 absolute expression.  For sections with both `M' and `S', a string
4693 which is a suffix of a larger string is considered a duplicate.  Thus
4694 `"def"' will be merged with `"abcdef"';  A reference to the first
4695 `"def"' will be changed to a reference to `"abcdef"+3'.
4697    If FLAGS contains the `G' symbol then the TYPE argument must be
4698 present along with an additional field like this:
4700      .section NAME , "FLAGS"G, @TYPE, GROUPNAME[, LINKAGE]
4702    The GROUPNAME field specifies the name of the section group to which
4703 this particular section belongs.  The optional linkage field can
4704 contain:
4705 `comdat'
4706      indicates that only one copy of this section should be retained
4708 `.gnu.linkonce'
4709      an alias for comdat
4711    Note: if both the M and G flags are present then the fields for the
4712 Merge flag should come first, like this:
4714      .section NAME , "FLAGS"MG, @TYPE, ENTSIZE, GROUPNAME[, LINKAGE]
4716    If no flags are specified, the default flags depend upon the section
4717 name.  If the section name is not recognized, the default will be for
4718 the section to have none of the above flags: it will not be allocated
4719 in memory, nor writable, nor executable.  The section will contain data.
4721    For ELF targets, the assembler supports another type of `.section'
4722 directive for compatibility with the Solaris assembler:
4724      .section "NAME"[, FLAGS...]
4726    Note that the section name is quoted.  There may be a sequence of
4727 comma separated flags:
4728 `#alloc'
4729      section is allocatable
4731 `#write'
4732      section is writable
4734 `#execinstr'
4735      section is executable
4737 `#tls'
4738      section is used for thread local storage
4740    This directive replaces the current section and subsection.  See the
4741 contents of the gas testsuite directory `gas/testsuite/gas/elf' for
4742 some examples of how this directive and the other section stack
4743 directives work.
4745 \x1f
4746 File: as.info,  Node: Set,  Next: Short,  Prev: Section,  Up: Pseudo Ops
4748 7.97 `.set SYMBOL, EXPRESSION'
4749 ==============================
4751 Set the value of SYMBOL to EXPRESSION.  This changes SYMBOL's value and
4752 type to conform to EXPRESSION.  If SYMBOL was flagged as external, it
4753 remains flagged (*note Symbol Attributes::).
4755    You may `.set' a symbol many times in the same assembly.
4757    If you `.set' a global symbol, the value stored in the object file
4758 is the last value stored into it.
4760    The syntax for `set' on the HPPA is `SYMBOL .set EXPRESSION'.
4762    On Z80 `set' is a real instruction, use `SYMBOL defl EXPRESSION'
4763 instead.
4765 \x1f
4766 File: as.info,  Node: Short,  Next: Single,  Prev: Set,  Up: Pseudo Ops
4768 7.98 `.short EXPRESSIONS'
4769 =========================
4771 `.short' is normally the same as `.word'.  *Note `.word': Word.
4773    In some configurations, however, `.short' and `.word' generate
4774 numbers of different lengths.  *Note Machine Dependencies::.
4776 \x1f
4777 File: as.info,  Node: Single,  Next: Size,  Prev: Short,  Up: Pseudo Ops
4779 7.99 `.single FLONUMS'
4780 ======================
4782 This directive assembles zero or more flonums, separated by commas.  It
4783 has the same effect as `.float'.  The exact kind of floating point
4784 numbers emitted depends on how `as' is configured.  *Note Machine
4785 Dependencies::.
4787 \x1f
4788 File: as.info,  Node: Size,  Next: Skip,  Prev: Single,  Up: Pseudo Ops
4790 7.100 `.size'
4791 =============
4793 This directive is used to set the size associated with a symbol.
4795 COFF Version
4796 ------------
4798    For COFF targets, the `.size' directive is only permitted inside
4799 `.def'/`.endef' pairs.  It is used like this:
4801      .size EXPRESSION
4803 ELF Version
4804 -----------
4806    For ELF targets, the `.size' directive is used like this:
4808      .size NAME , EXPRESSION
4810    This directive sets the size associated with a symbol NAME.  The
4811 size in bytes is computed from EXPRESSION which can make use of label
4812 arithmetic.  This directive is typically used to set the size of
4813 function symbols.
4815 \x1f
4816 File: as.info,  Node: Skip,  Next: Sleb128,  Prev: Size,  Up: Pseudo Ops
4818 7.101 `.skip SIZE , FILL'
4819 =========================
4821 This directive emits SIZE bytes, each of value FILL.  Both SIZE and
4822 FILL are absolute expressions.  If the comma and FILL are omitted, FILL
4823 is assumed to be zero.  This is the same as `.space'.
4825 \x1f
4826 File: as.info,  Node: Sleb128,  Next: Space,  Prev: Skip,  Up: Pseudo Ops
4828 7.102 `.sleb128 EXPRESSIONS'
4829 ============================
4831 SLEB128 stands for "signed little endian base 128."  This is a compact,
4832 variable length representation of numbers used by the DWARF symbolic
4833 debugging format.  *Note `.uleb128': Uleb128.
4835 \x1f
4836 File: as.info,  Node: Space,  Next: Stab,  Prev: Sleb128,  Up: Pseudo Ops
4838 7.103 `.space SIZE , FILL'
4839 ==========================
4841 This directive emits SIZE bytes, each of value FILL.  Both SIZE and
4842 FILL are absolute expressions.  If the comma and FILL are omitted, FILL
4843 is assumed to be zero.  This is the same as `.skip'.
4845      _Warning:_ `.space' has a completely different meaning for HPPA
4846      targets; use `.block' as a substitute.  See `HP9000 Series 800
4847      Assembly Language Reference Manual' (HP 92432-90001) for the
4848      meaning of the `.space' directive.  *Note HPPA Assembler
4849      Directives: HPPA Directives, for a summary.
4851 \x1f
4852 File: as.info,  Node: Stab,  Next: String,  Prev: Space,  Up: Pseudo Ops
4854 7.104 `.stabd, .stabn, .stabs'
4855 ==============================
4857 There are three directives that begin `.stab'.  All emit symbols (*note
4858 Symbols::), for use by symbolic debuggers.  The symbols are not entered
4859 in the `as' hash table: they cannot be referenced elsewhere in the
4860 source file.  Up to five fields are required:
4862 STRING
4863      This is the symbol's name.  It may contain any character except
4864      `\000', so is more general than ordinary symbol names.  Some
4865      debuggers used to code arbitrarily complex structures into symbol
4866      names using this field.
4868 TYPE
4869      An absolute expression.  The symbol's type is set to the low 8
4870      bits of this expression.  Any bit pattern is permitted, but `ld'
4871      and debuggers choke on silly bit patterns.
4873 OTHER
4874      An absolute expression.  The symbol's "other" attribute is set to
4875      the low 8 bits of this expression.
4877 DESC
4878      An absolute expression.  The symbol's descriptor is set to the low
4879      16 bits of this expression.
4881 VALUE
4882      An absolute expression which becomes the symbol's value.
4884    If a warning is detected while reading a `.stabd', `.stabn', or
4885 `.stabs' statement, the symbol has probably already been created; you
4886 get a half-formed symbol in your object file.  This is compatible with
4887 earlier assemblers!
4889 `.stabd TYPE , OTHER , DESC'
4890      The "name" of the symbol generated is not even an empty string.
4891      It is a null pointer, for compatibility.  Older assemblers used a
4892      null pointer so they didn't waste space in object files with empty
4893      strings.
4895      The symbol's value is set to the location counter, relocatably.
4896      When your program is linked, the value of this symbol is the
4897      address of the location counter when the `.stabd' was assembled.
4899 `.stabn TYPE , OTHER , DESC , VALUE'
4900      The name of the symbol is set to the empty string `""'.
4902 `.stabs STRING ,  TYPE , OTHER , DESC , VALUE'
4903      All five fields are specified.
4905 \x1f
4906 File: as.info,  Node: String,  Next: Struct,  Prev: Stab,  Up: Pseudo Ops
4908 7.105 `.string' "STR", `.string8' "STR", `.string16'
4909 ====================================================
4911 "STR", `.string32' "STR", `.string64' "STR"
4913    Copy the characters in STR to the object file.  You may specify more
4914 than one string to copy, separated by commas.  Unless otherwise
4915 specified for a particular machine, the assembler marks the end of each
4916 string with a 0 byte.  You can use any of the escape sequences
4917 described in *Note Strings: Strings.
4919    The variants `string16', `string32' and `string64' differ from the
4920 `string' pseudo opcode in that each 8-bit character from STR is copied
4921 and expanded to 16, 32 or 64 bits respectively.  The expanded characters
4922 are stored in target endianness byte order.
4924    Example:
4925         .string32 "BYE"
4926      expands to:
4927         .string   "B\0\0\0Y\0\0\0E\0\0\0"  /* On little endian targets.  */
4928         .string   "\0\0\0B\0\0\0Y\0\0\0E"  /* On big endian targets.  */
4930 \x1f
4931 File: as.info,  Node: Struct,  Next: SubSection,  Prev: String,  Up: Pseudo Ops
4933 7.106 `.struct EXPRESSION'
4934 ==========================
4936 Switch to the absolute section, and set the section offset to
4937 EXPRESSION, which must be an absolute expression.  You might use this
4938 as follows:
4939              .struct 0
4940      field1:
4941              .struct field1 + 4
4942      field2:
4943              .struct field2 + 4
4944      field3:
4945    This would define the symbol `field1' to have the value 0, the symbol
4946 `field2' to have the value 4, and the symbol `field3' to have the value
4947 8.  Assembly would be left in the absolute section, and you would need
4948 to use a `.section' directive of some sort to change to some other
4949 section before further assembly.
4951 \x1f
4952 File: as.info,  Node: SubSection,  Next: Symver,  Prev: Struct,  Up: Pseudo Ops
4954 7.107 `.subsection NAME'
4955 ========================
4957 This is one of the ELF section stack manipulation directives.  The
4958 others are `.section' (*note Section::), `.pushsection' (*note
4959 PushSection::), `.popsection' (*note PopSection::), and `.previous'
4960 (*note Previous::).
4962    This directive replaces the current subsection with `name'.  The
4963 current section is not changed.  The replaced subsection is put onto
4964 the section stack in place of the then current top of stack subsection.
4966 \x1f
4967 File: as.info,  Node: Symver,  Next: Tag,  Prev: SubSection,  Up: Pseudo Ops
4969 7.108 `.symver'
4970 ===============
4972 Use the `.symver' directive to bind symbols to specific version nodes
4973 within a source file.  This is only supported on ELF platforms, and is
4974 typically used when assembling files to be linked into a shared library.
4975 There are cases where it may make sense to use this in objects to be
4976 bound into an application itself so as to override a versioned symbol
4977 from a shared library.
4979    For ELF targets, the `.symver' directive can be used like this:
4980      .symver NAME, NAME2@NODENAME
4981    If the symbol NAME is defined within the file being assembled, the
4982 `.symver' directive effectively creates a symbol alias with the name
4983 NAME2@NODENAME, and in fact the main reason that we just don't try and
4984 create a regular alias is that the @ character isn't permitted in
4985 symbol names.  The NAME2 part of the name is the actual name of the
4986 symbol by which it will be externally referenced.  The name NAME itself
4987 is merely a name of convenience that is used so that it is possible to
4988 have definitions for multiple versions of a function within a single
4989 source file, and so that the compiler can unambiguously know which
4990 version of a function is being mentioned.  The NODENAME portion of the
4991 alias should be the name of a node specified in the version script
4992 supplied to the linker when building a shared library.  If you are
4993 attempting to override a versioned symbol from a shared library, then
4994 NODENAME should correspond to the nodename of the symbol you are trying
4995 to override.
4997    If the symbol NAME is not defined within the file being assembled,
4998 all references to NAME will be changed to NAME2@NODENAME.  If no
4999 reference to NAME is made, NAME2@NODENAME will be removed from the
5000 symbol table.
5002    Another usage of the `.symver' directive is:
5003      .symver NAME, NAME2@@NODENAME
5004    In this case, the symbol NAME must exist and be defined within the
5005 file being assembled. It is similar to NAME2@NODENAME. The difference
5006 is NAME2@@NODENAME will also be used to resolve references to NAME2 by
5007 the linker.
5009    The third usage of the `.symver' directive is:
5010      .symver NAME, NAME2@@@NODENAME
5011    When NAME is not defined within the file being assembled, it is
5012 treated as NAME2@NODENAME. When NAME is defined within the file being
5013 assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME.
5015 \x1f
5016 File: as.info,  Node: Tag,  Next: Text,  Prev: Symver,  Up: Pseudo Ops
5018 7.109 `.tag STRUCTNAME'
5019 =======================
5021 This directive is generated by compilers to include auxiliary debugging
5022 information in the symbol table.  It is only permitted inside
5023 `.def'/`.endef' pairs.  Tags are used to link structure definitions in
5024 the symbol table with instances of those structures.
5026 \x1f
5027 File: as.info,  Node: Text,  Next: Title,  Prev: Tag,  Up: Pseudo Ops
5029 7.110 `.text SUBSECTION'
5030 ========================
5032 Tells `as' to assemble the following statements onto the end of the
5033 text subsection numbered SUBSECTION, which is an absolute expression.
5034 If SUBSECTION is omitted, subsection number zero is used.
5036 \x1f
5037 File: as.info,  Node: Title,  Next: Type,  Prev: Text,  Up: Pseudo Ops
5039 7.111 `.title "HEADING"'
5040 ========================
5042 Use HEADING as the title (second line, immediately after the source
5043 file name and pagenumber) when generating assembly listings.
5045    This directive affects subsequent pages, as well as the current page
5046 if it appears within ten lines of the top of a page.
5048 \x1f
5049 File: as.info,  Node: Type,  Next: Uleb128,  Prev: Title,  Up: Pseudo Ops
5051 7.112 `.type'
5052 =============
5054 This directive is used to set the type of a symbol.
5056 COFF Version
5057 ------------
5059    For COFF targets, this directive is permitted only within
5060 `.def'/`.endef' pairs.  It is used like this:
5062      .type INT
5064    This records the integer INT as the type attribute of a symbol table
5065 entry.
5067 ELF Version
5068 -----------
5070    For ELF targets, the `.type' directive is used like this:
5072      .type NAME , TYPE DESCRIPTION
5074    This sets the type of symbol NAME to be either a function symbol or
5075 an object symbol.  There are five different syntaxes supported for the
5076 TYPE DESCRIPTION field, in order to provide compatibility with various
5077 other assemblers.
5079    Because some of the characters used in these syntaxes (such as `@'
5080 and `#') are comment characters for some architectures, some of the
5081 syntaxes below do not work on all architectures.  The first variant
5082 will be accepted by the GNU assembler on all architectures so that
5083 variant should be used for maximum portability, if you do not need to
5084 assemble your code with other assemblers.
5086    The syntaxes supported are:
5088        .type <name> STT_<TYPE_IN_UPPER_CASE>
5089        .type <name>,#<type>
5090        .type <name>,@<type>
5091        .type <name>,%<type>
5092        .type <name>,"<type>"
5094    The types supported are:
5096 `STT_FUNC'
5097 `function'
5098      Mark the symbol as being a function name.
5100 `STT_GNU_IFUNC'
5101 `gnu_indirect_function'
5102      Mark the symbol as an indirect function when evaluated during reloc
5103      processing.  (This is only supported on Linux targeted assemblers).
5105 `STT_OBJECT'
5106 `object'
5107      Mark the symbol as being a data object.
5109 `STT_TLS'
5110 `tls_object'
5111      Mark the symbol as being a thead-local data object.
5113 `STT_COMMON'
5114 `common'
5115      Mark the symbol as being a common data object.
5117 `STT_NOTYPE'
5118 `notype'
5119      Does not mark the symbol in any way.  It is supported just for
5120      completeness.
5122 `gnu_unique_object'
5123      Marks the symbol as being a globally unique data object.  The
5124      dynamic linker will make sure that in the entire process there is
5125      just one symbol with this name and type in use.  (This is only
5126      supported on Linux targeted assemblers).
5129    Note: Some targets support extra types in addition to those listed
5130 above.
5132 \x1f
5133 File: as.info,  Node: Uleb128,  Next: Val,  Prev: Type,  Up: Pseudo Ops
5135 7.113 `.uleb128 EXPRESSIONS'
5136 ============================
5138 ULEB128 stands for "unsigned little endian base 128."  This is a
5139 compact, variable length representation of numbers used by the DWARF
5140 symbolic debugging format.  *Note `.sleb128': Sleb128.
5142 \x1f
5143 File: as.info,  Node: Val,  Next: Version,  Prev: Uleb128,  Up: Pseudo Ops
5145 7.114 `.val ADDR'
5146 =================
5148 This directive, permitted only within `.def'/`.endef' pairs, records
5149 the address ADDR as the value attribute of a symbol table entry.
5151 \x1f
5152 File: as.info,  Node: Version,  Next: VTableEntry,  Prev: Val,  Up: Pseudo Ops
5154 7.115 `.version "STRING"'
5155 =========================
5157 This directive creates a `.note' section and places into it an ELF
5158 formatted note of type NT_VERSION.  The note's name is set to `string'.
5160 \x1f
5161 File: as.info,  Node: VTableEntry,  Next: VTableInherit,  Prev: Version,  Up: Pseudo Ops
5163 7.116 `.vtable_entry TABLE, OFFSET'
5164 ===================================
5166 This directive finds or creates a symbol `table' and creates a
5167 `VTABLE_ENTRY' relocation for it with an addend of `offset'.
5169 \x1f
5170 File: as.info,  Node: VTableInherit,  Next: Warning,  Prev: VTableEntry,  Up: Pseudo Ops
5172 7.117 `.vtable_inherit CHILD, PARENT'
5173 =====================================
5175 This directive finds the symbol `child' and finds or creates the symbol
5176 `parent' and then creates a `VTABLE_INHERIT' relocation for the parent
5177 whose addend is the value of the child symbol.  As a special case the
5178 parent name of `0' is treated as referring to the `*ABS*' section.
5180 \x1f
5181 File: as.info,  Node: Warning,  Next: Weak,  Prev: VTableInherit,  Up: Pseudo Ops
5183 7.118 `.warning "STRING"'
5184 =========================
5186 Similar to the directive `.error' (*note `.error "STRING"': Error.),
5187 but just emits a warning.
5189 \x1f
5190 File: as.info,  Node: Weak,  Next: Weakref,  Prev: Warning,  Up: Pseudo Ops
5192 7.119 `.weak NAMES'
5193 ===================
5195 This directive sets the weak attribute on the comma separated list of
5196 symbol `names'.  If the symbols do not already exist, they will be
5197 created.
5199    On COFF targets other than PE, weak symbols are a GNU extension.
5200 This directive sets the weak attribute on the comma separated list of
5201 symbol `names'.  If the symbols do not already exist, they will be
5202 created.
5204    On the PE target, weak symbols are supported natively as weak
5205 aliases.  When a weak symbol is created that is not an alias, GAS
5206 creates an alternate symbol to hold the default value.
5208 \x1f
5209 File: as.info,  Node: Weakref,  Next: Word,  Prev: Weak,  Up: Pseudo Ops
5211 7.120 `.weakref ALIAS, TARGET'
5212 ==============================
5214 This directive creates an alias to the target symbol that enables the
5215 symbol to be referenced with weak-symbol semantics, but without
5216 actually making it weak.  If direct references or definitions of the
5217 symbol are present, then the symbol will not be weak, but if all
5218 references to it are through weak references, the symbol will be marked
5219 as weak in the symbol table.
5221    The effect is equivalent to moving all references to the alias to a
5222 separate assembly source file, renaming the alias to the symbol in it,
5223 declaring the symbol as weak there, and running a reloadable link to
5224 merge the object files resulting from the assembly of the new source
5225 file and the old source file that had the references to the alias
5226 removed.
5228    The alias itself never makes to the symbol table, and is entirely
5229 handled within the assembler.
5231 \x1f
5232 File: as.info,  Node: Word,  Next: Deprecated,  Prev: Weakref,  Up: Pseudo Ops
5234 7.121 `.word EXPRESSIONS'
5235 =========================
5237 This directive expects zero or more EXPRESSIONS, of any section,
5238 separated by commas.
5240    The size of the number emitted, and its byte order, depend on what
5241 target computer the assembly is for.
5243      _Warning: Special Treatment to support Compilers_
5245    Machines with a 32-bit address space, but that do less than 32-bit
5246 addressing, require the following special treatment.  If the machine of
5247 interest to you does 32-bit addressing (or doesn't require it; *note
5248 Machine Dependencies::), you can ignore this issue.
5250    In order to assemble compiler output into something that works, `as'
5251 occasionally does strange things to `.word' directives.  Directives of
5252 the form `.word sym1-sym2' are often emitted by compilers as part of
5253 jump tables.  Therefore, when `as' assembles a directive of the form
5254 `.word sym1-sym2', and the difference between `sym1' and `sym2' does
5255 not fit in 16 bits, `as' creates a "secondary jump table", immediately
5256 before the next label.  This secondary jump table is preceded by a
5257 short-jump to the first byte after the secondary table.  This
5258 short-jump prevents the flow of control from accidentally falling into
5259 the new table.  Inside the table is a long-jump to `sym2'.  The
5260 original `.word' contains `sym1' minus the address of the long-jump to
5261 `sym2'.
5263    If there were several occurrences of `.word sym1-sym2' before the
5264 secondary jump table, all of them are adjusted.  If there was a `.word
5265 sym3-sym4', that also did not fit in sixteen bits, a long-jump to
5266 `sym4' is included in the secondary jump table, and the `.word'
5267 directives are adjusted to contain `sym3' minus the address of the
5268 long-jump to `sym4'; and so on, for as many entries in the original
5269 jump table as necessary.
5271 \x1f
5272 File: as.info,  Node: Deprecated,  Prev: Word,  Up: Pseudo Ops
5274 7.122 Deprecated Directives
5275 ===========================
5277 One day these directives won't work.  They are included for
5278 compatibility with older assemblers.
5279 .abort
5281 .line
5283 \x1f
5284 File: as.info,  Node: Object Attributes,  Next: Machine Dependencies,  Prev: Pseudo Ops,  Up: Top
5286 8 Object Attributes
5287 *******************
5289 `as' assembles source files written for a specific architecture into
5290 object files for that architecture.  But not all object files are alike.
5291 Many architectures support incompatible variations.  For instance,
5292 floating point arguments might be passed in floating point registers if
5293 the object file requires hardware floating point support--or floating
5294 point arguments might be passed in integer registers if the object file
5295 supports processors with no hardware floating point unit.  Or, if two
5296 objects are built for different generations of the same architecture,
5297 the combination may require the newer generation at run-time.
5299    This information is useful during and after linking.  At link time,
5300 `ld' can warn about incompatible object files.  After link time, tools
5301 like `gdb' can use it to process the linked file correctly.
5303    Compatibility information is recorded as a series of object
5304 attributes.  Each attribute has a "vendor", "tag", and "value".  The
5305 vendor is a string, and indicates who sets the meaning of the tag.  The
5306 tag is an integer, and indicates what property the attribute describes.
5307 The value may be a string or an integer, and indicates how the
5308 property affects this object.  Missing attributes are the same as
5309 attributes with a zero value or empty string value.
5311    Object attributes were developed as part of the ABI for the ARM
5312 Architecture.  The file format is documented in `ELF for the ARM
5313 Architecture'.
5315 * Menu:
5317 * GNU Object Attributes::               GNU Object Attributes
5318 * Defining New Object Attributes::      Defining New Object Attributes
5320 \x1f
5321 File: as.info,  Node: GNU Object Attributes,  Next: Defining New Object Attributes,  Up: Object Attributes
5323 8.1 GNU Object Attributes
5324 =========================
5326 The `.gnu_attribute' directive records an object attribute with vendor
5327 `gnu'.
5329    Except for `Tag_compatibility', which has both an integer and a
5330 string for its value, GNU attributes have a string value if the tag
5331 number is odd and an integer value if the tag number is even.  The
5332 second bit (`TAG & 2' is set for architecture-independent attributes
5333 and clear for architecture-dependent ones.
5335 8.1.1 Common GNU attributes
5336 ---------------------------
5338 These attributes are valid on all architectures.
5340 Tag_compatibility (32)
5341      The compatibility attribute takes an integer flag value and a
5342      vendor name.  If the flag value is 0, the file is compatible with
5343      other toolchains.  If it is 1, then the file is only compatible
5344      with the named toolchain.  If it is greater than 1, the file can
5345      only be processed by other toolchains under some private
5346      arrangement indicated by the flag value and the vendor name.
5348 8.1.2 MIPS Attributes
5349 ---------------------
5351 Tag_GNU_MIPS_ABI_FP (4)
5352      The floating-point ABI used by this object file.  The value will
5353      be:
5355         * 0 for files not affected by the floating-point ABI.
5357         * 1 for files using the hardware floating-point with a standard
5358           double-precision FPU.
5360         * 2 for files using the hardware floating-point ABI with a
5361           single-precision FPU.
5363         * 3 for files using the software floating-point ABI.
5365         * 4 for files using the hardware floating-point ABI with 64-bit
5366           wide double-precision floating-point registers and 32-bit
5367           wide general purpose registers.
5369 8.1.3 PowerPC Attributes
5370 ------------------------
5372 Tag_GNU_Power_ABI_FP (4)
5373      The floating-point ABI used by this object file.  The value will
5374      be:
5376         * 0 for files not affected by the floating-point ABI.
5378         * 1 for files using double-precision hardware floating-point
5379           ABI.
5381         * 2 for files using the software floating-point ABI.
5383         * 3 for files using single-precision hardware floating-point
5384           ABI.
5386 Tag_GNU_Power_ABI_Vector (8)
5387      The vector ABI used by this object file.  The value will be:
5389         * 0 for files not affected by the vector ABI.
5391         * 1 for files using general purpose registers to pass vectors.
5393         * 2 for files using AltiVec registers to pass vectors.
5395         * 3 for files using SPE registers to pass vectors.
5397 \x1f
5398 File: as.info,  Node: Defining New Object Attributes,  Prev: GNU Object Attributes,  Up: Object Attributes
5400 8.2 Defining New Object Attributes
5401 ==================================
5403 If you want to define a new GNU object attribute, here are the places
5404 you will need to modify.  New attributes should be discussed on the
5405 `binutils' mailing list.
5407    * This manual, which is the official register of attributes.
5409    * The header for your architecture `include/elf', to define the tag.
5411    * The `bfd' support file for your architecture, to merge the
5412      attribute and issue any appropriate link warnings.
5414    * Test cases in `ld/testsuite' for merging and link warnings.
5416    * `binutils/readelf.c' to display your attribute.
5418    * GCC, if you want the compiler to mark the attribute automatically.
5420 \x1f
5421 File: as.info,  Node: Machine Dependencies,  Next: Reporting Bugs,  Prev: Object Attributes,  Up: Top
5423 9 Machine Dependent Features
5424 ****************************
5426 The machine instruction sets are (almost by definition) different on
5427 each machine where `as' runs.  Floating point representations vary as
5428 well, and `as' often supports a few additional directives or
5429 command-line options for compatibility with other assemblers on a
5430 particular platform.  Finally, some versions of `as' support special
5431 pseudo-instructions for branch optimization.
5433    This chapter discusses most of these differences, though it does not
5434 include details on any machine's instruction set.  For details on that
5435 subject, see the hardware manufacturer's manual.
5437 * Menu:
5440 * Alpha-Dependent::             Alpha Dependent Features
5442 * ARC-Dependent::               ARC Dependent Features
5444 * ARM-Dependent::               ARM Dependent Features
5446 * AVR-Dependent::               AVR Dependent Features
5448 * Blackfin-Dependent::          Blackfin Dependent Features
5450 * CR16-Dependent::              CR16 Dependent Features
5452 * CRIS-Dependent::              CRIS Dependent Features
5454 * D10V-Dependent::              D10V Dependent Features
5456 * D30V-Dependent::              D30V Dependent Features
5458 * H8/300-Dependent::            Renesas H8/300 Dependent Features
5460 * HPPA-Dependent::              HPPA Dependent Features
5462 * ESA/390-Dependent::           IBM ESA/390 Dependent Features
5464 * i386-Dependent::              Intel 80386 and AMD x86-64 Dependent Features
5466 * i860-Dependent::              Intel 80860 Dependent Features
5468 * i960-Dependent::              Intel 80960 Dependent Features
5470 * IA-64-Dependent::             Intel IA-64 Dependent Features
5472 * IP2K-Dependent::              IP2K Dependent Features
5474 * LM32-Dependent::              LM32 Dependent Features
5476 * M32C-Dependent::              M32C Dependent Features
5478 * M32R-Dependent::              M32R Dependent Features
5480 * M68K-Dependent::              M680x0 Dependent Features
5482 * M68HC11-Dependent::           M68HC11 and 68HC12 Dependent Features
5484 * MicroBlaze-Dependent::        MICROBLAZE Dependent Features
5486 * MIPS-Dependent::              MIPS Dependent Features
5488 * MMIX-Dependent::              MMIX Dependent Features
5490 * MSP430-Dependent::            MSP430 Dependent Features
5492 * SH-Dependent::                Renesas / SuperH SH Dependent Features
5493 * SH64-Dependent::              SuperH SH64 Dependent Features
5495 * PDP-11-Dependent::            PDP-11 Dependent Features
5497 * PJ-Dependent::                picoJava Dependent Features
5499 * PPC-Dependent::               PowerPC Dependent Features
5501 * S/390-Dependent::             IBM S/390 Dependent Features
5503 * SCORE-Dependent::             SCORE Dependent Features
5505 * Sparc-Dependent::             SPARC Dependent Features
5507 * TIC54X-Dependent::            TI TMS320C54x Dependent Features
5509 * V850-Dependent::              V850 Dependent Features
5511 * Xtensa-Dependent::            Xtensa Dependent Features
5513 * Z80-Dependent::               Z80 Dependent Features
5515 * Z8000-Dependent::             Z8000 Dependent Features
5517 * Vax-Dependent::               VAX Dependent Features
5519 \x1f
5520 File: as.info,  Node: Alpha-Dependent,  Next: ARC-Dependent,  Up: Machine Dependencies
5522 9.1 Alpha Dependent Features
5523 ============================
5525 * Menu:
5527 * Alpha Notes::                Notes
5528 * Alpha Options::              Options
5529 * Alpha Syntax::               Syntax
5530 * Alpha Floating Point::       Floating Point
5531 * Alpha Directives::           Alpha Machine Directives
5532 * Alpha Opcodes::              Opcodes
5534 \x1f
5535 File: as.info,  Node: Alpha Notes,  Next: Alpha Options,  Up: Alpha-Dependent
5537 9.1.1 Notes
5538 -----------
5540 The documentation here is primarily for the ELF object format.  `as'
5541 also supports the ECOFF and EVAX formats, but features specific to
5542 these formats are not yet documented.
5544 \x1f
5545 File: as.info,  Node: Alpha Options,  Next: Alpha Syntax,  Prev: Alpha Notes,  Up: Alpha-Dependent
5547 9.1.2 Options
5548 -------------
5550 `-mCPU'
5551      This option specifies the target processor.  If an attempt is made
5552      to assemble an instruction which will not execute on the target
5553      processor, the assembler may either expand the instruction as a
5554      macro or issue an error message.  This option is equivalent to the
5555      `.arch' directive.
5557      The following processor names are recognized: `21064', `21064a',
5558      `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a',
5559      `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6',
5560      `ev67', `ev68'.  The special name `all' may be used to allow the
5561      assembler to accept instructions valid for any Alpha processor.
5563      In order to support existing practice in OSF/1 with respect to
5564      `.arch', and existing practice within `MILO' (the Linux ARC
5565      bootloader), the numbered processor names (e.g. 21064) enable the
5566      processor-specific PALcode instructions, while the
5567      "electro-vlasic" names (e.g. `ev4') do not.
5569 `-mdebug'
5570 `-no-mdebug'
5571      Enables or disables the generation of `.mdebug' encapsulation for
5572      stabs directives and procedure descriptors.  The default is to
5573      automatically enable `.mdebug' when the first stabs directive is
5574      seen.
5576 `-relax'
5577      This option forces all relocations to be put into the object file,
5578      instead of saving space and resolving some relocations at assembly
5579      time.  Note that this option does not propagate all symbol
5580      arithmetic into the object file, because not all symbol arithmetic
5581      can be represented.  However, the option can still be useful in
5582      specific applications.
5584 `-replace'
5586 `-noreplace'
5587      Enables or disables the optimization of procedure calls, both at
5588      assemblage and at link time.  These options are only available for
5589      VMS targets and `-replace' is the default.  See section 1.4.1 of
5590      the OpenVMS Linker Utility Manual.
5592 `-g'
5593      This option is used when the compiler generates debug information.
5594      When `gcc' is using `mips-tfile' to generate debug information
5595      for ECOFF, local labels must be passed through to the object file.
5596      Otherwise this option has no effect.
5598 `-GSIZE'
5599      A local common symbol larger than SIZE is placed in `.bss', while
5600      smaller symbols are placed in `.sbss'.
5602 `-F'
5603 `-32addr'
5604      These options are ignored for backward compatibility.
5606 \x1f
5607 File: as.info,  Node: Alpha Syntax,  Next: Alpha Floating Point,  Prev: Alpha Options,  Up: Alpha-Dependent
5609 9.1.3 Syntax
5610 ------------
5612 The assembler syntax closely follow the Alpha Reference Manual;
5613 assembler directives and general syntax closely follow the OSF/1 and
5614 OpenVMS syntax, with a few differences for ELF.
5616 * Menu:
5618 * Alpha-Chars::                Special Characters
5619 * Alpha-Regs::                 Register Names
5620 * Alpha-Relocs::               Relocations
5622 \x1f
5623 File: as.info,  Node: Alpha-Chars,  Next: Alpha-Regs,  Up: Alpha Syntax
5625 9.1.3.1 Special Characters
5626 ..........................
5628 `#' is the line comment character.
5630    `;' can be used instead of a newline to separate statements.
5632 \x1f
5633 File: as.info,  Node: Alpha-Regs,  Next: Alpha-Relocs,  Prev: Alpha-Chars,  Up: Alpha Syntax
5635 9.1.3.2 Register Names
5636 ......................
5638 The 32 integer registers are referred to as `$N' or `$rN'.  In
5639 addition, registers 15, 28, 29, and 30 may be referred to by the
5640 symbols `$fp', `$at', `$gp', and `$sp' respectively.
5642    The 32 floating-point registers are referred to as `$fN'.
5644 \x1f
5645 File: as.info,  Node: Alpha-Relocs,  Prev: Alpha-Regs,  Up: Alpha Syntax
5647 9.1.3.3 Relocations
5648 ...................
5650 Some of these relocations are available for ECOFF, but mostly only for
5651 ELF.  They are modeled after the relocation format introduced in
5652 Digital Unix 4.0, but there are additions.
5654    The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the
5655 relocation.  In some cases NUMBER is used to relate specific
5656 instructions.
5658    The relocation is placed at the end of the instruction like so:
5660      ldah  $0,a($29)    !gprelhigh
5661      lda   $0,a($0)     !gprellow
5662      ldq   $1,b($29)    !literal!100
5663      ldl   $2,0($1)     !lituse_base!100
5665 `!literal'
5666 `!literal!N'
5667      Used with an `ldq' instruction to load the address of a symbol
5668      from the GOT.
5670      A sequence number N is optional, and if present is used to pair
5671      `lituse' relocations with this `literal' relocation.  The `lituse'
5672      relocations are used by the linker to optimize the code based on
5673      the final location of the symbol.
5675      Note that these optimizations are dependent on the data flow of the
5676      program.  Therefore, if _any_ `lituse' is paired with a `literal'
5677      relocation, then _all_ uses of the register set by the `literal'
5678      instruction must also be marked with `lituse' relocations.  This
5679      is because the original `literal' instruction may be deleted or
5680      transformed into another instruction.
5682      Also note that there may be a one-to-many relationship between
5683      `literal' and `lituse', but not a many-to-one.  That is, if there
5684      are two code paths that load up the same address and feed the
5685      value to a single use, then the use may not use a `lituse'
5686      relocation.
5688 `!lituse_base!N'
5689      Used with any memory format instruction (e.g. `ldl') to indicate
5690      that the literal is used for an address load.  The offset field of
5691      the instruction must be zero.  During relaxation, the code may be
5692      altered to use a gp-relative load.
5694 `!lituse_jsr!N'
5695      Used with a register branch format instruction (e.g. `jsr') to
5696      indicate that the literal is used for a call.  During relaxation,
5697      the code may be altered to use a direct branch (e.g. `bsr').
5699 `!lituse_jsrdirect!N'
5700      Similar to `lituse_jsr', but also that this call cannot be vectored
5701      through a PLT entry.  This is useful for functions with special
5702      calling conventions which do not allow the normal call-clobbered
5703      registers to be clobbered.
5705 `!lituse_bytoff!N'
5706      Used with a byte mask instruction (e.g. `extbl') to indicate that
5707      only the low 3 bits of the address are relevant.  During
5708      relaxation, the code may be altered to use an immediate instead of
5709      a register shift.
5711 `!lituse_addr!N'
5712      Used with any other instruction to indicate that the original
5713      address is in fact used, and the original `ldq' instruction may
5714      not be altered or deleted.  This is useful in conjunction with
5715      `lituse_jsr' to test whether a weak symbol is defined.
5717           ldq  $27,foo($29)   !literal!1
5718           beq  $27,is_undef   !lituse_addr!1
5719           jsr  $26,($27),foo  !lituse_jsr!1
5721 `!lituse_tlsgd!N'
5722      Used with a register branch format instruction to indicate that the
5723      literal is the call to `__tls_get_addr' used to compute the
5724      address of the thread-local storage variable whose descriptor was
5725      loaded with `!tlsgd!N'.
5727 `!lituse_tlsldm!N'
5728      Used with a register branch format instruction to indicate that the
5729      literal is the call to `__tls_get_addr' used to compute the
5730      address of the base of the thread-local storage block for the
5731      current module.  The descriptor for the module must have been
5732      loaded with `!tlsldm!N'.
5734 `!gpdisp!N'
5735      Used with `ldah' and `lda' to load the GP from the current
5736      address, a-la the `ldgp' macro.  The source register for the
5737      `ldah' instruction must contain the address of the `ldah'
5738      instruction.  There must be exactly one `lda' instruction paired
5739      with the `ldah' instruction, though it may appear anywhere in the
5740      instruction stream.  The immediate operands must be zero.
5742           bsr  $26,foo
5743           ldah $29,0($26)     !gpdisp!1
5744           lda  $29,0($29)     !gpdisp!1
5746 `!gprelhigh'
5747      Used with an `ldah' instruction to add the high 16 bits of a
5748      32-bit displacement from the GP.
5750 `!gprellow'
5751      Used with any memory format instruction to add the low 16 bits of a
5752      32-bit displacement from the GP.
5754 `!gprel'
5755      Used with any memory format instruction to add a 16-bit
5756      displacement from the GP.
5758 `!samegp'
5759      Used with any branch format instruction to skip the GP load at the
5760      target address.  The referenced symbol must have the same GP as the
5761      source object file, and it must be declared to either not use `$27'
5762      or perform a standard GP load in the first two instructions via the
5763      `.prologue' directive.
5765 `!tlsgd'
5766 `!tlsgd!N'
5767      Used with an `lda' instruction to load the address of a TLS
5768      descriptor for a symbol in the GOT.
5770      The sequence number N is optional, and if present it used to pair
5771      the descriptor load with both the `literal' loading the address of
5772      the `__tls_get_addr' function and the `lituse_tlsgd' marking the
5773      call to that function.
5775      For proper relaxation, both the `tlsgd', `literal' and `lituse'
5776      relocations must be in the same extended basic block.  That is,
5777      the relocation with the lowest address must be executed first at
5778      runtime.
5780 `!tlsldm'
5781 `!tlsldm!N'
5782      Used with an `lda' instruction to load the address of a TLS
5783      descriptor for the current module in the GOT.
5785      Similar in other respects to `tlsgd'.
5787 `!gotdtprel'
5788      Used with an `ldq' instruction to load the offset of the TLS
5789      symbol within its module's thread-local storage block.  Also known
5790      as the dynamic thread pointer offset or dtp-relative offset.
5792 `!dtprelhi'
5793 `!dtprello'
5794 `!dtprel'
5795      Like `gprel' relocations except they compute dtp-relative offsets.
5797 `!gottprel'
5798      Used with an `ldq' instruction to load the offset of the TLS
5799      symbol from the thread pointer.  Also known as the tp-relative
5800      offset.
5802 `!tprelhi'
5803 `!tprello'
5804 `!tprel'
5805      Like `gprel' relocations except they compute tp-relative offsets.
5807 \x1f
5808 File: as.info,  Node: Alpha Floating Point,  Next: Alpha Directives,  Prev: Alpha Syntax,  Up: Alpha-Dependent
5810 9.1.4 Floating Point
5811 --------------------
5813 The Alpha family uses both IEEE and VAX floating-point numbers.
5815 \x1f
5816 File: as.info,  Node: Alpha Directives,  Next: Alpha Opcodes,  Prev: Alpha Floating Point,  Up: Alpha-Dependent
5818 9.1.5 Alpha Assembler Directives
5819 --------------------------------
5821 `as' for the Alpha supports many additional directives for
5822 compatibility with the native assembler.  This section describes them
5823 only briefly.
5825    These are the additional directives in `as' for the Alpha:
5827 `.arch CPU'
5828      Specifies the target processor.  This is equivalent to the `-mCPU'
5829      command-line option.  *Note Options: Alpha Options, for a list of
5830      values for CPU.
5832 `.ent FUNCTION[, N]'
5833      Mark the beginning of FUNCTION.  An optional number may follow for
5834      compatibility with the OSF/1 assembler, but is ignored.  When
5835      generating `.mdebug' information, this will create a procedure
5836      descriptor for the function.  In ELF, it will mark the symbol as a
5837      function a-la the generic `.type' directive.
5839 `.end FUNCTION'
5840      Mark the end of FUNCTION.  In ELF, it will set the size of the
5841      symbol a-la the generic `.size' directive.
5843 `.mask MASK, OFFSET'
5844      Indicate which of the integer registers are saved in the current
5845      function's stack frame.  MASK is interpreted a bit mask in which
5846      bit N set indicates that register N is saved.  The registers are
5847      saved in a block located OFFSET bytes from the "canonical frame
5848      address" (CFA) which is the value of the stack pointer on entry to
5849      the function.  The registers are saved sequentially, except that
5850      the return address register (normally `$26') is saved first.
5852      This and the other directives that describe the stack frame are
5853      currently only used when generating `.mdebug' information.  They
5854      may in the future be used to generate DWARF2 `.debug_frame' unwind
5855      information for hand written assembly.
5857 `.fmask MASK, OFFSET'
5858      Indicate which of the floating-point registers are saved in the
5859      current stack frame.  The MASK and OFFSET parameters are
5860      interpreted as with `.mask'.
5862 `.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]'
5863      Describes the shape of the stack frame.  The frame pointer in use
5864      is FRAMEREG; normally this is either `$fp' or `$sp'.  The frame
5865      pointer is FRAMEOFFSET bytes below the CFA.  The return address is
5866      initially located in RETREG until it is saved as indicated in
5867      `.mask'.  For compatibility with OSF/1 an optional ARGOFFSET
5868      parameter is accepted and ignored.  It is believed to indicate the
5869      offset from the CFA to the saved argument registers.
5871 `.prologue N'
5872      Indicate that the stack frame is set up and all registers have been
5873      spilled.  The argument N indicates whether and how the function
5874      uses the incoming "procedure vector" (the address of the called
5875      function) in `$27'.  0 indicates that `$27' is not used; 1
5876      indicates that the first two instructions of the function use `$27'
5877      to perform a load of the GP register; 2 indicates that `$27' is
5878      used in some non-standard way and so the linker cannot elide the
5879      load of the procedure vector during relaxation.
5881 `.usepv FUNCTION, WHICH'
5882      Used to indicate the use of the `$27' register, similar to
5883      `.prologue', but without the other semantics of needing to be
5884      inside an open `.ent'/`.end' block.
5886      The WHICH argument should be either `no', indicating that `$27' is
5887      not used, or `std', indicating that the first two instructions of
5888      the function perform a GP load.
5890      One might use this directive instead of `.prologue' if you are
5891      also using dwarf2 CFI directives.
5893 `.gprel32 EXPRESSION'
5894      Computes the difference between the address in EXPRESSION and the
5895      GP for the current object file, and stores it in 4 bytes.  In
5896      addition to being smaller than a full 8 byte address, this also
5897      does not require a dynamic relocation when used in a shared
5898      library.
5900 `.t_floating EXPRESSION'
5901      Stores EXPRESSION as an IEEE double precision value.
5903 `.s_floating EXPRESSION'
5904      Stores EXPRESSION as an IEEE single precision value.
5906 `.f_floating EXPRESSION'
5907      Stores EXPRESSION as a VAX F format value.
5909 `.g_floating EXPRESSION'
5910      Stores EXPRESSION as a VAX G format value.
5912 `.d_floating EXPRESSION'
5913      Stores EXPRESSION as a VAX D format value.
5915 `.set FEATURE'
5916      Enables or disables various assembler features.  Using the positive
5917      name of the feature enables while using `noFEATURE' disables.
5919     `at'
5920           Indicates that macro expansions may clobber the "assembler
5921           temporary" (`$at' or `$28') register.  Some macros may not be
5922           expanded without this and will generate an error message if
5923           `noat' is in effect.  When `at' is in effect, a warning will
5924           be generated if `$at' is used by the programmer.
5926     `macro'
5927           Enables the expansion of macro instructions.  Note that
5928           variants of real instructions, such as `br label' vs `br
5929           $31,label' are considered alternate forms and not macros.
5931     `move'
5932     `reorder'
5933     `volatile'
5934           These control whether and how the assembler may re-order
5935           instructions.  Accepted for compatibility with the OSF/1
5936           assembler, but `as' does not do instruction scheduling, so
5937           these features are ignored.
5939    The following directives are recognized for compatibility with the
5940 OSF/1 assembler but are ignored.
5942      .proc           .aproc
5943      .reguse         .livereg
5944      .option         .aent
5945      .ugen           .eflag
5946      .alias          .noalias
5948 \x1f
5949 File: as.info,  Node: Alpha Opcodes,  Prev: Alpha Directives,  Up: Alpha-Dependent
5951 9.1.6 Opcodes
5952 -------------
5954 For detailed information on the Alpha machine instruction set, see the
5955 Alpha Architecture Handbook
5956 (ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf).
5958 \x1f
5959 File: as.info,  Node: ARC-Dependent,  Next: ARM-Dependent,  Prev: Alpha-Dependent,  Up: Machine Dependencies
5961 9.2 ARC Dependent Features
5962 ==========================
5964 * Menu:
5966 * ARC Options::              Options
5967 * ARC Syntax::               Syntax
5968 * ARC Floating Point::       Floating Point
5969 * ARC Directives::           ARC Machine Directives
5970 * ARC Opcodes::              Opcodes
5972 \x1f
5973 File: as.info,  Node: ARC Options,  Next: ARC Syntax,  Up: ARC-Dependent
5975 9.2.1 Options
5976 -------------
5978 `-marc[5|6|7|8]'
5979      This option selects the core processor variant.  Using `-marc' is
5980      the same as `-marc6', which is also the default.
5982     `arc5'
5983           Base instruction set.
5985     `arc6'
5986           Jump-and-link (jl) instruction.  No requirement of an
5987           instruction between setting flags and conditional jump.  For
5988           example:
5990                  mov.f r0,r1
5991                  beq   foo
5993     `arc7'
5994           Break (brk) and sleep (sleep) instructions.
5996     `arc8'
5997           Software interrupt (swi) instruction.
6000      Note: the `.option' directive can to be used to select a core
6001      variant from within assembly code.
6003 `-EB'
6004      This option specifies that the output generated by the assembler
6005      should be marked as being encoded for a big-endian processor.
6007 `-EL'
6008      This option specifies that the output generated by the assembler
6009      should be marked as being encoded for a little-endian processor -
6010      this is the default.
6013 \x1f
6014 File: as.info,  Node: ARC Syntax,  Next: ARC Floating Point,  Prev: ARC Options,  Up: ARC-Dependent
6016 9.2.2 Syntax
6017 ------------
6019 * Menu:
6021 * ARC-Chars::                Special Characters
6022 * ARC-Regs::                 Register Names
6024 \x1f
6025 File: as.info,  Node: ARC-Chars,  Next: ARC-Regs,  Up: ARC Syntax
6027 9.2.2.1 Special Characters
6028 ..........................
6030 *TODO*
6032 \x1f
6033 File: as.info,  Node: ARC-Regs,  Prev: ARC-Chars,  Up: ARC Syntax
6035 9.2.2.2 Register Names
6036 ......................
6038 *TODO*
6040 \x1f
6041 File: as.info,  Node: ARC Floating Point,  Next: ARC Directives,  Prev: ARC Syntax,  Up: ARC-Dependent
6043 9.2.3 Floating Point
6044 --------------------
6046 The ARC core does not currently have hardware floating point support.
6047 Software floating point support is provided by `GCC' and uses IEEE
6048 floating-point numbers.
6050 \x1f
6051 File: as.info,  Node: ARC Directives,  Next: ARC Opcodes,  Prev: ARC Floating Point,  Up: ARC-Dependent
6053 9.2.4 ARC Machine Directives
6054 ----------------------------
6056 The ARC version of `as' supports the following additional machine
6057 directives:
6059 `.2byte EXPRESSIONS'
6060      *TODO*
6062 `.3byte EXPRESSIONS'
6063      *TODO*
6065 `.4byte EXPRESSIONS'
6066      *TODO*
6068 `.extAuxRegister NAME,ADDRESS,MODE'
6069      The ARCtangent A4 has extensible auxiliary register space.  The
6070      auxiliary registers can be defined in the assembler source code by
6071      using this directive.  The first parameter is the NAME of the new
6072      auxiallry register.  The second parameter is the ADDRESS of the
6073      register in the auxiliary register memory map for the variant of
6074      the ARC.  The third parameter specifies the MODE in which the
6075      register can be operated is and it can be one of:
6077     `r          (readonly)'
6079     `w          (write only)'
6081     `r|w        (read or write)'
6083      For example:
6085             .extAuxRegister mulhi,0x12,w
6087      This specifies an extension auxiliary register called _mulhi_
6088      which is at address 0x12 in the memory space and which is only
6089      writable.
6091 `.extCondCode SUFFIX,VALUE'
6092      The condition codes on the ARCtangent A4 are extensible and can be
6093      specified by means of this assembler directive.  They are specified
6094      by the suffix and the value for the condition code.  They can be
6095      used to specify extra condition codes with any values.  For
6096      example:
6098             .extCondCode is_busy,0x14
6100              add.is_busy  r1,r2,r3
6101              bis_busy     _main
6103 `.extCoreRegister NAME,REGNUM,MODE,SHORTCUT'
6104      Specifies an extension core register NAME for the application.
6105      This allows a register NAME with a valid REGNUM between 0 and 60,
6106      with the following as valid values for MODE
6108     `_r_   (readonly)'
6110     `_w_   (write only)'
6112     `_r|w_ (read or write)'
6114      The other parameter gives a description of the register having a
6115      SHORTCUT in the pipeline.  The valid values are:
6117     `can_shortcut'
6119     `cannot_shortcut'
6121      For example:
6123             .extCoreRegister mlo,57,r,can_shortcut
6125      This defines an extension core register mlo with the value 57 which
6126      can shortcut the pipeline.
6128 `.extInstruction NAME,OPCODE,SUBOPCODE,SUFFIXCLASS,SYNTAXCLASS'
6129      The ARCtangent A4 allows the user to specify extension
6130      instructions.  The extension instructions are not macros.  The
6131      assembler creates encodings for use of these instructions
6132      according to the specification by the user.  The parameters are:
6134     *NAME
6135           Name of the extension instruction
6137     *OPCODE
6138           Opcode to be used. (Bits 27:31 in the encoding).  Valid values
6139           0x10-0x1f or 0x03
6141     *SUBOPCODE
6142           Subopcode to be used.  Valid values are from 0x09-0x3f.
6143           However the correct value also depends on SYNTAXCLASS
6145     *SUFFIXCLASS
6146           Determines the kinds of suffixes to be allowed.  Valid values
6147           are `SUFFIX_NONE', `SUFFIX_COND', `SUFFIX_FLAG' which
6148           indicates the absence or presence of conditional suffixes and
6149           flag setting by the extension instruction.  It is also
6150           possible to specify that an instruction sets the flags and is
6151           conditional by using `SUFFIX_CODE' | `SUFFIX_FLAG'.
6153     *SYNTAXCLASS
6154           Determines the syntax class for the instruction.  It can have
6155           the following values:
6157          ``SYNTAX_2OP':'
6158                2 Operand Instruction
6160          ``SYNTAX_3OP':'
6161                3 Operand Instruction
6163           In addition there could be modifiers for the syntax class as
6164           described below:
6166                Syntax Class Modifiers are:
6168              - `OP1_MUST_BE_IMM': Modifies syntax class SYNTAX_3OP,
6169                specifying that the first operand of a three-operand
6170                instruction must be an immediate (i.e., the result is
6171                discarded).  OP1_MUST_BE_IMM is used by bitwise ORing it
6172                with SYNTAX_3OP as given in the example below.  This
6173                could usually be used to set the flags using specific
6174                instructions and not retain results.
6176              - `OP1_IMM_IMPLIED': Modifies syntax class SYNTAX_20P, it
6177                specifies that there is an implied immediate destination
6178                operand which does not appear in the syntax.  For
6179                example, if the source code contains an instruction like:
6181                     inst r1,r2
6183                it really means that the first argument is an implied
6184                immediate (that is, the result is discarded).  This is
6185                the same as though the source code were: inst 0,r1,r2.
6186                You use OP1_IMM_IMPLIED by bitwise ORing it with
6187                SYNTAX_20P.
6190      For example, defining 64-bit multiplier with immediate operands:
6192           .extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG ,
6193                           SYNTAX_3OP|OP1_MUST_BE_IMM
6195      The above specifies an extension instruction called mp64 which has
6196      3 operands, sets the flags, can be used with a condition code, for
6197      which the first operand is an immediate.  (Equivalent to
6198      discarding the result of the operation).
6200            .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED
6202      This describes a 2 operand instruction with an implicit first
6203      immediate operand.  The result of this operation would be
6204      discarded.
6206 `.half EXPRESSIONS'
6207      *TODO*
6209 `.long EXPRESSIONS'
6210      *TODO*
6212 `.option ARC|ARC5|ARC6|ARC7|ARC8'
6213      The `.option' directive must be followed by the desired core
6214      version. Again `arc' is an alias for `arc6'.
6216      Note: the `.option' directive overrides the command line option
6217      `-marc'; a warning is emitted when the version is not consistent
6218      between the two - even for the implicit default core version
6219      (arc6).
6221 `.short EXPRESSIONS'
6222      *TODO*
6224 `.word EXPRESSIONS'
6225      *TODO*
6228 \x1f
6229 File: as.info,  Node: ARC Opcodes,  Prev: ARC Directives,  Up: ARC-Dependent
6231 9.2.5 Opcodes
6232 -------------
6234 For information on the ARC instruction set, see `ARC Programmers
6235 Reference Manual', ARC International (www.arc.com)
6237 \x1f
6238 File: as.info,  Node: ARM-Dependent,  Next: AVR-Dependent,  Prev: ARC-Dependent,  Up: Machine Dependencies
6240 9.3 ARM Dependent Features
6241 ==========================
6243 * Menu:
6245 * ARM Options::              Options
6246 * ARM Syntax::               Syntax
6247 * ARM Floating Point::       Floating Point
6248 * ARM Directives::           ARM Machine Directives
6249 * ARM Opcodes::              Opcodes
6250 * ARM Mapping Symbols::      Mapping Symbols
6251 * ARM Unwinding Tutorial::   Unwinding
6253 \x1f
6254 File: as.info,  Node: ARM Options,  Next: ARM Syntax,  Up: ARM-Dependent
6256 9.3.1 Options
6257 -------------
6259 `-mcpu=PROCESSOR[+EXTENSION...]'
6260      This option specifies the target processor.  The assembler will
6261      issue an error message if an attempt is made to assemble an
6262      instruction which will not execute on the target processor.  The
6263      following processor names are recognized: `arm1', `arm2', `arm250',
6264      `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
6265      `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
6266      `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t',
6267      `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi',
6268      `arm7tdmi-s', `arm8', `arm810', `strongarm', `strongarm1',
6269      `strongarm110', `strongarm1100', `strongarm1110', `arm9', `arm920',
6270      `arm920t', `arm922t', `arm940t', `arm9tdmi', `fa526' (Faraday
6271      FA526 processor), `fa626' (Faraday FA626 processor), `arm9e',
6272      `arm926e', `arm926ej-s', `arm946e-r0', `arm946e', `arm946e-s',
6273      `arm966e-r0', `arm966e', `arm966e-s', `arm968e-s', `arm10t',
6274      `arm10tdmi', `arm10e', `arm1020', `arm1020t', `arm1020e',
6275      `arm1022e', `arm1026ej-s', `fa626te' (Faraday FA626TE processor),
6276      `fa726te' (Faraday FA726TE processor), `arm1136j-s', `arm1136jf-s',
6277      `arm1156t2-s', `arm1156t2f-s', `arm1176jz-s', `arm1176jzf-s',
6278      `mpcore', `mpcorenovfp', `cortex-a8', `cortex-a9', `cortex-r4',
6279      `cortex-m3', `cortex-m1', `cortex-m0', `ep9312' (ARM920 with
6280      Cirrus Maverick coprocessor), `i80200' (Intel XScale processor)
6281      `iwmmxt' (Intel(r) XScale processor with Wireless MMX(tm)
6282      technology coprocessor) and `xscale'.  The special name `all' may
6283      be used to allow the assembler to accept instructions valid for
6284      any ARM processor.
6286      In addition to the basic instruction set, the assembler can be
6287      told to accept various extension mnemonics that extend the
6288      processor using the co-processor instruction space.  For example,
6289      `-mcpu=arm920+maverick' is equivalent to specifying
6290      `-mcpu=ep9312'.  The following extensions are currently supported:
6291      `+maverick' `+iwmmxt' and `+xscale'.
6293 `-march=ARCHITECTURE[+EXTENSION...]'
6294      This option specifies the target architecture.  The assembler will
6295      issue an error message if an attempt is made to assemble an
6296      instruction which will not execute on the target architecture.
6297      The following architecture names are recognized: `armv1', `armv2',
6298      `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm',
6299      `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te',
6300      `armv5texp', `armv6', `armv6j', `armv6k', `armv6z', `armv6zk',
6301      `armv7', `armv7-a', `armv7-r', `armv7-m', `iwmmxt' and `xscale'.
6302      If both `-mcpu' and `-march' are specified, the assembler will use
6303      the setting for `-mcpu'.
6305      The architecture option can be extended with the same instruction
6306      set extension options as the `-mcpu' option.
6308 `-mfpu=FLOATING-POINT-FORMAT'
6309      This option specifies the floating point format to assemble for.
6310      The assembler will issue an error message if an attempt is made to
6311      assemble an instruction which will not execute on the target
6312      floating point unit.  The following format options are recognized:
6313      `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11',
6314      `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0',
6315      `vfp9', `vfpxd', `vfpv2' `vfpv3' `vfpv3-d16' `arm1020t',
6316      `arm1020e', `arm1136jf-s', `maverick' and `neon'.
6318      In addition to determining which instructions are assembled, this
6319      option also affects the way in which the `.double' assembler
6320      directive behaves when assembling little-endian code.
6322      The default is dependent on the processor selected.  For
6323      Architecture 5 or later, the default is to assembler for VFP
6324      instructions; for earlier architectures the default is to assemble
6325      for FPA instructions.
6327 `-mthumb'
6328      This option specifies that the assembler should start assembling
6329      Thumb instructions; that is, it should behave as though the file
6330      starts with a `.code 16' directive.
6332 `-mthumb-interwork'
6333      This option specifies that the output generated by the assembler
6334      should be marked as supporting interworking.
6336 `-mimplicit-it=never'
6337 `-mimplicit-it=always'
6338 `-mimplicit-it=arm'
6339 `-mimplicit-it=thumb'
6340      The `-mimplicit-it' option controls the behavior of the assembler
6341      when conditional instructions are not enclosed in IT blocks.
6342      There are four possible behaviors.  If `never' is specified, such
6343      constructs cause a warning in ARM code and an error in Thumb-2
6344      code.  If `always' is specified, such constructs are accepted in
6345      both ARM and Thumb-2 code, where the IT instruction is added
6346      implicitly.  If `arm' is specified, such constructs are accepted
6347      in ARM code and cause an error in Thumb-2 code.  If `thumb' is
6348      specified, such constructs cause a warning in ARM code and are
6349      accepted in Thumb-2 code.  If you omit this option, the behavior
6350      is equivalent to `-mimplicit-it=arm'.
6352 `-mapcs `[26|32]''
6353      This option specifies that the output generated by the assembler
6354      should be marked as supporting the indicated version of the Arm
6355      Procedure.  Calling Standard.
6357 `-matpcs'
6358      This option specifies that the output generated by the assembler
6359      should be marked as supporting the Arm/Thumb Procedure Calling
6360      Standard.  If enabled this option will cause the assembler to
6361      create an empty debugging section in the object file called
6362      .arm.atpcs.  Debuggers can use this to determine the ABI being
6363      used by.
6365 `-mapcs-float'
6366      This indicates the floating point variant of the APCS should be
6367      used.  In this variant floating point arguments are passed in FP
6368      registers rather than integer registers.
6370 `-mapcs-reentrant'
6371      This indicates that the reentrant variant of the APCS should be
6372      used.  This variant supports position independent code.
6374 `-mfloat-abi=ABI'
6375      This option specifies that the output generated by the assembler
6376      should be marked as using specified floating point ABI.  The
6377      following values are recognized: `soft', `softfp' and `hard'.
6379 `-meabi=VER'
6380      This option specifies which EABI version the produced object files
6381      should conform to.  The following values are recognized: `gnu', `4'
6382      and `5'.
6384 `-EB'
6385      This option specifies that the output generated by the assembler
6386      should be marked as being encoded for a big-endian processor.
6388 `-EL'
6389      This option specifies that the output generated by the assembler
6390      should be marked as being encoded for a little-endian processor.
6392 `-k'
6393      This option specifies that the output of the assembler should be
6394      marked as position-independent code (PIC).
6396 `--fix-v4bx'
6397      Allow `BX' instructions in ARMv4 code.  This is intended for use
6398      with the linker option of the same name.
6400 `-mwarn-deprecated'
6401 `-mno-warn-deprecated'
6402      Enable or disable warnings about using deprecated options or
6403      features.  The default is to warn.
6406 \x1f
6407 File: as.info,  Node: ARM Syntax,  Next: ARM Floating Point,  Prev: ARM Options,  Up: ARM-Dependent
6409 9.3.2 Syntax
6410 ------------
6412 * Menu:
6414 * ARM-Instruction-Set::      Instruction Set
6415 * ARM-Chars::                Special Characters
6416 * ARM-Regs::                 Register Names
6417 * ARM-Relocations::          Relocations
6419 \x1f
6420 File: as.info,  Node: ARM-Instruction-Set,  Next: ARM-Chars,  Up: ARM Syntax
6422 9.3.2.1 Instruction Set Syntax
6423 ..............................
6425 Two slightly different syntaxes are support for ARM and THUMB
6426 instructions.  The default, `divided', uses the old style where ARM and
6427 THUMB instructions had their own, separate syntaxes.  The new,
6428 `unified' syntax, which can be selected via the `.syntax' directive,
6429 and has the following main features:
6432      Immediate operands do not require a `#' prefix.
6435      The `IT' instruction may appear, and if it does it is validated
6436      against subsequent conditional affixes.  In ARM mode it does not
6437      generate machine code, in THUMB mode it does.
6440      For ARM instructions the conditional affixes always appear at the
6441      end of the instruction.  For THUMB instructions conditional
6442      affixes can be used, but only inside the scope of an `IT'
6443      instruction.
6446      All of the instructions new to the V6T2 architecture (and later)
6447      are available.  (Only a few such instructions can be written in the
6448      `divided' syntax).
6451      The `.N' and `.W' suffixes are recognized and honored.
6454      All instructions set the flags if and only if they have an `s'
6455      affix.
6457 \x1f
6458 File: as.info,  Node: ARM-Chars,  Next: ARM-Regs,  Prev: ARM-Instruction-Set,  Up: ARM Syntax
6460 9.3.2.2 Special Characters
6461 ..........................
6463 The presence of a `@' on a line indicates the start of a comment that
6464 extends to the end of the current line.  If a `#' appears as the first
6465 character of a line, the whole line is treated as a comment.
6467    The `;' character can be used instead of a newline to separate
6468 statements.
6470    Either `#' or `$' can be used to indicate immediate operands.
6472    *TODO* Explain about /data modifier on symbols.
6474 \x1f
6475 File: as.info,  Node: ARM-Regs,  Next: ARM-Relocations,  Prev: ARM-Chars,  Up: ARM Syntax
6477 9.3.2.3 Register Names
6478 ......................
6480 *TODO* Explain about ARM register naming, and the predefined names.
6482 \x1f
6483 File: as.info,  Node: ARM Floating Point,  Next: ARM Directives,  Prev: ARM Syntax,  Up: ARM-Dependent
6485 9.3.3 Floating Point
6486 --------------------
6488 The ARM family uses IEEE floating-point numbers.
6490 \x1f
6491 File: as.info,  Node: ARM-Relocations,  Prev: ARM-Regs,  Up: ARM Syntax
6493 9.3.3.1 ARM relocation generation
6494 .................................
6496 Specific data relocations can be generated by putting the relocation
6497 name in parentheses after the symbol name.  For example:
6499              .word foo(TARGET1)
6501    This will generate an `R_ARM_TARGET1' relocation against the symbol
6502 FOO.  The following relocations are supported: `GOT', `GOTOFF',
6503 `TARGET1', `TARGET2', `SBREL', `TLSGD', `TLSLDM', `TLSLDO', `GOTTPOFF'
6504 and `TPOFF'.
6506    For compatibility with older toolchains the assembler also accepts
6507 `(PLT)' after branch targets.  This will generate the deprecated
6508 `R_ARM_PLT32' relocation.
6510    Relocations for `MOVW' and `MOVT' instructions can be generated by
6511 prefixing the value with `#:lower16:' and `#:upper16' respectively.
6512 For example to load the 32-bit address of foo into r0:
6514              MOVW r0, #:lower16:foo
6515              MOVT r0, #:upper16:foo
6517 \x1f
6518 File: as.info,  Node: ARM Directives,  Next: ARM Opcodes,  Prev: ARM Floating Point,  Up: ARM-Dependent
6520 9.3.4 ARM Machine Directives
6521 ----------------------------
6523 `.2byte EXPRESSION [, EXPRESSION]*'
6524 `.4byte EXPRESSION [, EXPRESSION]*'
6525 `.8byte EXPRESSION [, EXPRESSION]*'
6526      These directives write 2, 4 or 8 byte values to the output section.
6528 `.align EXPRESSION [, EXPRESSION]'
6529      This is the generic .ALIGN directive.  For the ARM however if the
6530      first argument is zero (ie no alignment is needed) the assembler
6531      will behave as if the argument had been 2 (ie pad to the next four
6532      byte boundary).  This is for compatibility with ARM's own
6533      assembler.
6535 `.arch NAME'
6536      Select the target architecture.  Valid values for NAME are the
6537      same as for the `-march' commandline option.
6539 `.arm'
6540      This performs the same action as .CODE 32.
6542 `.pad #COUNT'
6543      Generate unwinder annotations for a stack adjustment of COUNT
6544      bytes.  A positive value indicates the function prologue allocated
6545      stack space by decrementing the stack pointer.
6547 `.bss'
6548      This directive switches to the `.bss' section.
6550 `.cantunwind'
6551      Prevents unwinding through the current function.  No personality
6552      routine or exception table data is required or permitted.
6554 `.code `[16|32]''
6555      This directive selects the instruction set being generated. The
6556      value 16 selects Thumb, with the value 32 selecting ARM.
6558 `.cpu NAME'
6559      Select the target processor.  Valid values for NAME are the same as
6560      for the `-mcpu' commandline option.
6562 `NAME .dn REGISTER NAME [.TYPE] [[INDEX]]'
6564 `NAME .qn REGISTER NAME [.TYPE] [[INDEX]]'
6565      The `dn' and `qn' directives are used to create typed and/or
6566      indexed register aliases for use in Advanced SIMD Extension (Neon)
6567      instructions.  The former should be used to create aliases of
6568      double-precision registers, and the latter to create aliases of
6569      quad-precision registers.
6571      If these directives are used to create typed aliases, those
6572      aliases can be used in Neon instructions instead of writing types
6573      after the mnemonic or after each operand.  For example:
6575                   x .dn d2.f32
6576                   y .dn d3.f32
6577                   z .dn d4.f32[1]
6578                   vmul x,y,z
6580      This is equivalent to writing the following:
6582                   vmul.f32 d2,d3,d4[1]
6584      Aliases created using `dn' or `qn' can be destroyed using `unreq'.
6586 `.eabi_attribute TAG, VALUE'
6587      Set the EABI object attribute TAG to VALUE.
6589      The TAG is either an attribute number, or one of the following:
6590      `Tag_CPU_raw_name', `Tag_CPU_name', `Tag_CPU_arch',
6591      `Tag_CPU_arch_profile', `Tag_ARM_ISA_use', `Tag_THUMB_ISA_use',
6592      `Tag_VFP_arch', `Tag_WMMX_arch', `Tag_Advanced_SIMD_arch',
6593      `Tag_PCS_config', `Tag_ABI_PCS_R9_use', `Tag_ABI_PCS_RW_data',
6594      `Tag_ABI_PCS_RO_data', `Tag_ABI_PCS_GOT_use',
6595      `Tag_ABI_PCS_wchar_t', `Tag_ABI_FP_rounding',
6596      `Tag_ABI_FP_denormal', `Tag_ABI_FP_exceptions',
6597      `Tag_ABI_FP_user_exceptions', `Tag_ABI_FP_number_model',
6598      `Tag_ABI_align8_needed', `Tag_ABI_align8_preserved',
6599      `Tag_ABI_enum_size', `Tag_ABI_HardFP_use', `Tag_ABI_VFP_args',
6600      `Tag_ABI_WMMX_args', `Tag_ABI_optimization_goals',
6601      `Tag_ABI_FP_optimization_goals', `Tag_compatibility',
6602      `Tag_CPU_unaligned_access', `Tag_VFP_HP_extension',
6603      `Tag_ABI_FP_16bit_format', `Tag_nodefaults',
6604      `Tag_also_compatible_with', `Tag_conformance', `Tag_T2EE_use',
6605      `Tag_Virtualization_use', `Tag_MPextension_use'
6607      The VALUE is either a `number', `"string"', or `number, "string"'
6608      depending on the tag.
6610 `.even'
6611      This directive aligns to an even-numbered address.
6613 `.extend  EXPRESSION [, EXPRESSION]*'
6614 `.ldouble  EXPRESSION [, EXPRESSION]*'
6615      These directives write 12byte long double floating-point values to
6616      the output section.  These are not compatible with current ARM
6617      processors or ABIs.
6619 `.fnend'
6620      Marks the end of a function with an unwind table entry.  The
6621      unwind index table entry is created when this directive is
6622      processed.
6624      If no personality routine has been specified then standard
6625      personality routine 0 or 1 will be used, depending on the number
6626      of unwind opcodes required.
6628 `.fnstart'
6629      Marks the start of a function with an unwind table entry.
6631 `.force_thumb'
6632      This directive forces the selection of Thumb instructions, even if
6633      the target processor does not support those instructions
6635 `.fpu NAME'
6636      Select the floating-point unit to assemble for.  Valid values for
6637      NAME are the same as for the `-mfpu' commandline option.
6639 `.handlerdata'
6640      Marks the end of the current function, and the start of the
6641      exception table entry for that function.  Anything between this
6642      directive and the `.fnend' directive will be added to the
6643      exception table entry.
6645      Must be preceded by a `.personality' or `.personalityindex'
6646      directive.
6648 `.inst OPCODE [ , ... ]'
6650 `.inst.n OPCODE [ , ... ]'
6652 `.inst.w OPCODE [ , ... ]'
6653      Generates the instruction corresponding to the numerical value
6654      OPCODE.  `.inst.n' and `.inst.w' allow the Thumb instruction size
6655      to be specified explicitly, overriding the normal encoding rules.
6657 `.ldouble  EXPRESSION [, EXPRESSION]*'
6658      See `.extend'.
6660 `.ltorg'
6661      This directive causes the current contents of the literal pool to
6662      be dumped into the current section (which is assumed to be the
6663      .text section) at the current location (aligned to a word
6664      boundary).  `GAS' maintains a separate literal pool for each
6665      section and each sub-section.  The `.ltorg' directive will only
6666      affect the literal pool of the current section and sub-section.
6667      At the end of assembly all remaining, un-empty literal pools will
6668      automatically be dumped.
6670      Note - older versions of `GAS' would dump the current literal pool
6671      any time a section change occurred.  This is no longer done, since
6672      it prevents accurate control of the placement of literal pools.
6674 `.movsp REG [, #OFFSET]'
6675      Tell the unwinder that REG contains an offset from the current
6676      stack pointer.  If OFFSET is not specified then it is assumed to be
6677      zero.
6679 `.object_arch NAME'
6680      Override the architecture recorded in the EABI object attribute
6681      section.  Valid values for NAME are the same as for the `.arch'
6682      directive.  Typically this is useful when code uses runtime
6683      detection of CPU features.
6685 `.packed  EXPRESSION [, EXPRESSION]*'
6686      This directive writes 12-byte packed floating-point values to the
6687      output section.  These are not compatible with current ARM
6688      processors or ABIs.
6690 `.pad #COUNT'
6691      Generate unwinder annotations for a stack adjustment of COUNT
6692      bytes.  A positive value indicates the function prologue allocated
6693      stack space by decrementing the stack pointer.
6695 `.personality NAME'
6696      Sets the personality routine for the current function to NAME.
6698 `.personalityindex INDEX'
6699      Sets the personality routine for the current function to the EABI
6700      standard routine number INDEX
6702 `.pool'
6703      This is a synonym for .ltorg.
6705 `NAME .req REGISTER NAME'
6706      This creates an alias for REGISTER NAME called NAME.  For example:
6708                   foo .req r0
6710 `.save REGLIST'
6711      Generate unwinder annotations to restore the registers in REGLIST.
6712      The format of REGLIST is the same as the corresponding
6713      store-multiple instruction.
6715      _core registers_
6716             .save {r4, r5, r6, lr}
6717             stmfd sp!, {r4, r5, r6, lr}
6718      _FPA registers_
6719             .save f4, 2
6720             sfmfd f4, 2, [sp]!
6721      _VFP registers_
6722             .save {d8, d9, d10}
6723             fstmdx sp!, {d8, d9, d10}
6724      _iWMMXt registers_
6725             .save {wr10, wr11}
6726             wstrd wr11, [sp, #-8]!
6727             wstrd wr10, [sp, #-8]!
6728           or
6729             .save wr11
6730             wstrd wr11, [sp, #-8]!
6731             .save wr10
6732             wstrd wr10, [sp, #-8]!
6734 `.setfp FPREG, SPREG [, #OFFSET]'
6735      Make all unwinder annotations relative to a frame pointer.
6736      Without this the unwinder will use offsets from the stack pointer.
6738      The syntax of this directive is the same as the `sub' or `mov'
6739      instruction used to set the frame pointer.  SPREG must be either
6740      `sp' or mentioned in a previous `.movsp' directive.
6742           .movsp ip
6743           mov ip, sp
6744           ...
6745           .setfp fp, ip, #4
6746           sub fp, ip, #4
6748 `.secrel32 EXPRESSION [, EXPRESSION]*'
6749      This directive emits relocations that evaluate to the
6750      section-relative offset of each expression's symbol.  This
6751      directive is only supported for PE targets.
6753 `.syntax [`unified' | `divided']'
6754      This directive sets the Instruction Set Syntax as described in the
6755      *Note ARM-Instruction-Set:: section.
6757 `.thumb'
6758      This performs the same action as .CODE 16.
6760 `.thumb_func'
6761      This directive specifies that the following symbol is the name of a
6762      Thumb encoded function.  This information is necessary in order to
6763      allow the assembler and linker to generate correct code for
6764      interworking between Arm and Thumb instructions and should be used
6765      even if interworking is not going to be performed.  The presence
6766      of this directive also implies `.thumb'
6768      This directive is not neccessary when generating EABI objects.  On
6769      these targets the encoding is implicit when generating Thumb code.
6771 `.thumb_set'
6772      This performs the equivalent of a `.set' directive in that it
6773      creates a symbol which is an alias for another symbol (possibly
6774      not yet defined).  This directive also has the added property in
6775      that it marks the aliased symbol as being a thumb function entry
6776      point, in the same way that the `.thumb_func' directive does.
6778 `.unreq ALIAS-NAME'
6779      This undefines a register alias which was previously defined using
6780      the `req', `dn' or `qn' directives.  For example:
6782                   foo .req r0
6783                   .unreq foo
6785      An error occurs if the name is undefined.  Note - this pseudo op
6786      can be used to delete builtin in register name aliases (eg 'r0').
6787      This should only be done if it is really necessary.
6789 `.unwind_raw OFFSET, BYTE1, ...'
6790      Insert one of more arbitary unwind opcode bytes, which are known
6791      to adjust the stack pointer by OFFSET bytes.
6793      For example `.unwind_raw 4, 0xb1, 0x01' is equivalent to `.save
6794      {r0}'
6796 `.vsave VFP-REGLIST'
6797      Generate unwinder annotations to restore the VFP registers in
6798      VFP-REGLIST using FLDMD.  Also works for VFPv3 registers that are
6799      to be restored using VLDM.  The format of VFP-REGLIST is the same
6800      as the corresponding store-multiple instruction.
6802      _VFP registers_
6803             .vsave {d8, d9, d10}
6804             fstmdd sp!, {d8, d9, d10}
6805      _VFPv3 registers_
6806             .vsave {d15, d16, d17}
6807             vstm sp!, {d15, d16, d17}
6809      Since FLDMX and FSTMX are now deprecated, this directive should be
6810      used in favour of `.save' for saving VFP registers for ARMv6 and
6811      above.
6814 \x1f
6815 File: as.info,  Node: ARM Opcodes,  Next: ARM Mapping Symbols,  Prev: ARM Directives,  Up: ARM-Dependent
6817 9.3.5 Opcodes
6818 -------------
6820 `as' implements all the standard ARM opcodes.  It also implements
6821 several pseudo opcodes, including several synthetic load instructions.
6823 `NOP'
6824             nop
6826      This pseudo op will always evaluate to a legal ARM instruction
6827      that does nothing.  Currently it will evaluate to MOV r0, r0.
6829 `LDR'
6830             ldr <register> , = <expression>
6832      If expression evaluates to a numeric constant then a MOV or MVN
6833      instruction will be used in place of the LDR instruction, if the
6834      constant can be generated by either of these instructions.
6835      Otherwise the constant will be placed into the nearest literal
6836      pool (if it not already there) and a PC relative LDR instruction
6837      will be generated.
6839 `ADR'
6840             adr <register> <label>
6842      This instruction will load the address of LABEL into the indicated
6843      register.  The instruction will evaluate to a PC relative ADD or
6844      SUB instruction depending upon where the label is located.  If the
6845      label is out of range, or if it is not defined in the same file
6846      (and section) as the ADR instruction, then an error will be
6847      generated.  This instruction will not make use of the literal pool.
6849 `ADRL'
6850             adrl <register> <label>
6852      This instruction will load the address of LABEL into the indicated
6853      register.  The instruction will evaluate to one or two PC relative
6854      ADD or SUB instructions depending upon where the label is located.
6855      If a second instruction is not needed a NOP instruction will be
6856      generated in its place, so that this instruction is always 8 bytes
6857      long.
6859      If the label is out of range, or if it is not defined in the same
6860      file (and section) as the ADRL instruction, then an error will be
6861      generated.  This instruction will not make use of the literal pool.
6864    For information on the ARM or Thumb instruction sets, see `ARM
6865 Software Development Toolkit Reference Manual', Advanced RISC Machines
6866 Ltd.
6868 \x1f
6869 File: as.info,  Node: ARM Mapping Symbols,  Next: ARM Unwinding Tutorial,  Prev: ARM Opcodes,  Up: ARM-Dependent
6871 9.3.6 Mapping Symbols
6872 ---------------------
6874 The ARM ELF specification requires that special symbols be inserted
6875 into object files to mark certain features:
6877 `$a'
6878      At the start of a region of code containing ARM instructions.
6880 `$t'
6881      At the start of a region of code containing THUMB instructions.
6883 `$d'
6884      At the start of a region of data.
6887    The assembler will automatically insert these symbols for you - there
6888 is no need to code them yourself.  Support for tagging symbols ($b, $f,
6889 $p and $m) which is also mentioned in the current ARM ELF specification
6890 is not implemented.  This is because they have been dropped from the
6891 new EABI and so tools cannot rely upon their presence.
6893 \x1f
6894 File: as.info,  Node: ARM Unwinding Tutorial,  Prev: ARM Mapping Symbols,  Up: ARM-Dependent
6896 9.3.7 Unwinding
6897 ---------------
6899 The ABI for the ARM Architecture specifies a standard format for
6900 exception unwind information.  This information is used when an
6901 exception is thrown to determine where control should be transferred.
6902 In particular, the unwind information is used to determine which
6903 function called the function that threw the exception, and which
6904 function called that one, and so forth.  This information is also used
6905 to restore the values of callee-saved registers in the function
6906 catching the exception.
6908    If you are writing functions in assembly code, and those functions
6909 call other functions that throw exceptions, you must use assembly
6910 pseudo ops to ensure that appropriate exception unwind information is
6911 generated.  Otherwise, if one of the functions called by your assembly
6912 code throws an exception, the run-time library will be unable to unwind
6913 the stack through your assembly code and your program will not behave
6914 correctly.
6916    To illustrate the use of these pseudo ops, we will examine the code
6917 that G++ generates for the following C++ input:
6920 void callee (int *);
6923 caller ()
6925   int i;
6926   callee (&i);
6927   return i;
6930    This example does not show how to throw or catch an exception from
6931 assembly code.  That is a much more complex operation and should always
6932 be done in a high-level language, such as C++, that directly supports
6933 exceptions.
6935    The code generated by one particular version of G++ when compiling
6936 the example above is:
6939 _Z6callerv:
6940         .fnstart
6941 .LFB2:
6942         @ Function supports interworking.
6943         @ args = 0, pretend = 0, frame = 8
6944         @ frame_needed = 1, uses_anonymous_args = 0
6945         stmfd   sp!, {fp, lr}
6946         .save {fp, lr}
6947 .LCFI0:
6948         .setfp fp, sp, #4
6949         add     fp, sp, #4
6950 .LCFI1:
6951         .pad #8
6952         sub     sp, sp, #8
6953 .LCFI2:
6954         sub     r3, fp, #8
6955         mov     r0, r3
6956         bl      _Z6calleePi
6957         ldr     r3, [fp, #-8]
6958         mov     r0, r3
6959         sub     sp, fp, #4
6960         ldmfd   sp!, {fp, lr}
6961         bx      lr
6962 .LFE2:
6963         .fnend
6965    Of course, the sequence of instructions varies based on the options
6966 you pass to GCC and on the version of GCC in use.  The exact
6967 instructions are not important since we are focusing on the pseudo ops
6968 that are used to generate unwind information.
6970    An important assumption made by the unwinder is that the stack frame
6971 does not change during the body of the function.  In particular, since
6972 we assume that the assembly code does not itself throw an exception,
6973 the only point where an exception can be thrown is from a call, such as
6974 the `bl' instruction above.  At each call site, the same saved
6975 registers (including `lr', which indicates the return address) must be
6976 located in the same locations relative to the frame pointer.
6978    The `.fnstart' (*note .fnstart pseudo op: arm_fnstart.) pseudo op
6979 appears immediately before the first instruction of the function while
6980 the `.fnend' (*note .fnend pseudo op: arm_fnend.) pseudo op appears
6981 immediately after the last instruction of the function.  These pseudo
6982 ops specify the range of the function.
6984    Only the order of the other pseudos ops (e.g., `.setfp' or `.pad')
6985 matters; their exact locations are irrelevant.  In the example above,
6986 the compiler emits the pseudo ops with particular instructions.  That
6987 makes it easier to understand the code, but it is not required for
6988 correctness.  It would work just as well to emit all of the pseudo ops
6989 other than `.fnend' in the same order, but immediately after `.fnstart'.
6991    The `.save' (*note .save pseudo op: arm_save.) pseudo op indicates
6992 registers that have been saved to the stack so that they can be
6993 restored before the function returns.  The argument to the `.save'
6994 pseudo op is a list of registers to save.  If a register is
6995 "callee-saved" (as specified by the ABI) and is modified by the
6996 function you are writing, then your code must save the value before it
6997 is modified and restore the original value before the function returns.
6998 If an exception is thrown, the run-time library restores the values of
6999 these registers from their locations on the stack before returning
7000 control to the exception handler.  (Of course, if an exception is not
7001 thrown, the function that contains the `.save' pseudo op restores these
7002 registers in the function epilogue, as is done with the `ldmfd'
7003 instruction above.)
7005    You do not have to save callee-saved registers at the very beginning
7006 of the function and you do not need to use the `.save' pseudo op
7007 immediately following the point at which the registers are saved.
7008 However, if you modify a callee-saved register, you must save it on the
7009 stack before modifying it and before calling any functions which might
7010 throw an exception.  And, you must use the `.save' pseudo op to
7011 indicate that you have done so.
7013    The `.pad' (*note .pad: arm_pad.) pseudo op indicates a modification
7014 of the stack pointer that does not save any registers.  The argument is
7015 the number of bytes (in decimal) that are subtracted from the stack
7016 pointer.  (On ARM CPUs, the stack grows downwards, so subtracting from
7017 the stack pointer increases the size of the stack.)
7019    The `.setfp' (*note .setfp pseudo op: arm_setfp.) pseudo op
7020 indicates the register that contains the frame pointer.  The first
7021 argument is the register that is set, which is typically `fp'.  The
7022 second argument indicates the register from which the frame pointer
7023 takes its value.  The third argument, if present, is the value (in
7024 decimal) added to the register specified by the second argument to
7025 compute the value of the frame pointer.  You should not modify the
7026 frame pointer in the body of the function.
7028    If you do not use a frame pointer, then you should not use the
7029 `.setfp' pseudo op.  If you do not use a frame pointer, then you should
7030 avoid modifying the stack pointer outside of the function prologue.
7031 Otherwise, the run-time library will be unable to find saved registers
7032 when it is unwinding the stack.
7034    The pseudo ops described above are sufficient for writing assembly
7035 code that calls functions which may throw exceptions.  If you need to
7036 know more about the object-file format used to represent unwind
7037 information, you may consult the `Exception Handling ABI for the ARM
7038 Architecture' available from `http://infocenter.arm.com'.
7040 \x1f
7041 File: as.info,  Node: AVR-Dependent,  Next: Blackfin-Dependent,  Prev: ARM-Dependent,  Up: Machine Dependencies
7043 9.4 AVR Dependent Features
7044 ==========================
7046 * Menu:
7048 * AVR Options::              Options
7049 * AVR Syntax::               Syntax
7050 * AVR Opcodes::              Opcodes
7052 \x1f
7053 File: as.info,  Node: AVR Options,  Next: AVR Syntax,  Up: AVR-Dependent
7055 9.4.1 Options
7056 -------------
7058 `-mmcu=MCU'
7059      Specify ATMEL AVR instruction set or MCU type.
7061      Instruction set avr1 is for the minimal AVR core, not supported by
7062      the C compiler, only for assembler programs (MCU types: at90s1200,
7063      attiny11, attiny12, attiny15, attiny28).
7065      Instruction set avr2 (default) is for the classic AVR core with up
7066      to 8K program memory space (MCU types: at90s2313, at90s2323,
7067      at90s2333, at90s2343, attiny22, attiny26, at90s4414, at90s4433,
7068      at90s4434, at90s8515, at90c8534, at90s8535).
7070      Instruction set avr25 is for the classic AVR core with up to 8K
7071      program memory space plus the MOVW instruction (MCU types:
7072      attiny13, attiny13a, attiny2313, attiny2313a, attiny24, attiny24a,
7073      attiny4313, attiny44, attiny44a, attiny84, attiny25, attiny45,
7074      attiny85, attiny261, attiny261a, attiny461, attiny861, attiny861a,
7075      attiny87, attiny43u, attiny48, attiny88, at86rf401, ata6289).
7077      Instruction set avr3 is for the classic AVR core with up to 128K
7078      program memory space (MCU types: at43usb355, at76c711).
7080      Instruction set avr31 is for the classic AVR core with exactly
7081      128K program memory space (MCU types: atmega103, at43usb320).
7083      Instruction set avr35 is for classic AVR core plus MOVW, CALL, and
7084      JMP instructions (MCU types: attiny167, attiny327, at90usb82,
7085      at90usb162, atmega8u2, atmega16u2, atmega32u2).
7087      Instruction set avr4 is for the enhanced AVR core with up to 8K
7088      program memory space (MCU types: atmega48, atmega48p,atmega8,
7089      atmega88, atmega88p, atmega8515, atmega8535, atmega8hva,
7090      atmega4hvd, atmega8hvd, at90pwm1, at90pwm2, at90pwm2b, at90pwm3,
7091      at90pwm3b, at90pwm81, atmega8m1, atmega8c1).
7093      Instruction set avr5 is for the enhanced AVR core with up to 128K
7094      program memory space (MCU types: atmega16, atmega161, atmega162,
7095      atmega163, atmega164p, atmega165, atmega165p, atmega168,
7096      atmega168p, atmega169, atmega169p, atmega16c1, atmega32,
7097      atmega323, atmega324p, atmega325, atmega325p, atmega3250,
7098      atmega3250p, atmega328p, atmega329, atmega329p, atmega3290,
7099      atmega3290p, atmega406, atmega64, atmega640, atmega644,
7100      atmega644p, atmega644pa, atmega645, atmega6450, atmega649,
7101      atmega6490, atmega16hva, atmega16hvb, atmega32hvb, at90can32,
7102      at90can64, at90pwm216, at90pwm316, atmega32c1, atmega64c1,
7103      atmega16m1, atmega32m1, atmega64m1, atmega16u4, atmega32u4,
7104      atmega32u6, at90usb646, at90usb647, at94k, at90scr100).
7106      Instruction set avr51 is for the enhanced AVR core with exactly
7107      128K program memory space (MCU types: atmega128, atmega1280,
7108      atmega1281, atmega1284p, atmega128rfa1, at90can128, at90usb1286,
7109      at90usb1287, m3000f, m3000s, m3001b).
7111      Instruction set avr6 is for the enhanced AVR core with a 3-byte PC
7112      (MCU types: atmega2560, atmega2561).
7114 `-mall-opcodes'
7115      Accept all AVR opcodes, even if not supported by `-mmcu'.
7117 `-mno-skip-bug'
7118      This option disable warnings for skipping two-word instructions.
7120 `-mno-wrap'
7121      This option reject `rjmp/rcall' instructions with 8K wrap-around.
7124 \x1f
7125 File: as.info,  Node: AVR Syntax,  Next: AVR Opcodes,  Prev: AVR Options,  Up: AVR-Dependent
7127 9.4.2 Syntax
7128 ------------
7130 * Menu:
7132 * AVR-Chars::                Special Characters
7133 * AVR-Regs::                 Register Names
7134 * AVR-Modifiers::            Relocatable Expression Modifiers
7136 \x1f
7137 File: as.info,  Node: AVR-Chars,  Next: AVR-Regs,  Up: AVR Syntax
7139 9.4.2.1 Special Characters
7140 ..........................
7142 The presence of a `;' on a line indicates the start of a comment that
7143 extends to the end of the current line.  If a `#' appears as the first
7144 character of a line, the whole line is treated as a comment.
7146    The `$' character can be used instead of a newline to separate
7147 statements.
7149 \x1f
7150 File: as.info,  Node: AVR-Regs,  Next: AVR-Modifiers,  Prev: AVR-Chars,  Up: AVR Syntax
7152 9.4.2.2 Register Names
7153 ......................
7155 The AVR has 32 x 8-bit general purpose working registers `r0', `r1',
7156 ... `r31'.  Six of the 32 registers can be used as three 16-bit
7157 indirect address register pointers for Data Space addressing. One of
7158 the these address pointers can also be used as an address pointer for
7159 look up tables in Flash program memory. These added function registers
7160 are the 16-bit `X', `Y' and `Z' - registers.
7162      X = r26:r27
7163      Y = r28:r29
7164      Z = r30:r31
7166 \x1f
7167 File: as.info,  Node: AVR-Modifiers,  Prev: AVR-Regs,  Up: AVR Syntax
7169 9.4.2.3 Relocatable Expression Modifiers
7170 ........................................
7172 The assembler supports several modifiers when using relocatable
7173 addresses in AVR instruction operands.  The general syntax is the
7174 following:
7176      modifier(relocatable-expression)
7178 `lo8'
7179      This modifier allows you to use bits 0 through 7 of an address
7180      expression as 8 bit relocatable expression.
7182 `hi8'
7183      This modifier allows you to use bits 7 through 15 of an address
7184      expression as 8 bit relocatable expression.  This is useful with,
7185      for example, the AVR `ldi' instruction and `lo8' modifier.
7187      For example
7189           ldi r26, lo8(sym+10)
7190           ldi r27, hi8(sym+10)
7192 `hh8'
7193      This modifier allows you to use bits 16 through 23 of an address
7194      expression as 8 bit relocatable expression.  Also, can be useful
7195      for loading 32 bit constants.
7197 `hlo8'
7198      Synonym of `hh8'.
7200 `hhi8'
7201      This modifier allows you to use bits 24 through 31 of an
7202      expression as 8 bit expression. This is useful with, for example,
7203      the AVR `ldi' instruction and `lo8', `hi8', `hlo8', `hhi8',
7204      modifier.
7206      For example
7208           ldi r26, lo8(285774925)
7209           ldi r27, hi8(285774925)
7210           ldi r28, hlo8(285774925)
7211           ldi r29, hhi8(285774925)
7212           ; r29,r28,r27,r26 = 285774925
7214 `pm_lo8'
7215      This modifier allows you to use bits 0 through 7 of an address
7216      expression as 8 bit relocatable expression.  This modifier useful
7217      for addressing data or code from Flash/Program memory. The using
7218      of `pm_lo8' similar to `lo8'.
7220 `pm_hi8'
7221      This modifier allows you to use bits 8 through 15 of an address
7222      expression as 8 bit relocatable expression.  This modifier useful
7223      for addressing data or code from Flash/Program memory.
7225 `pm_hh8'
7226      This modifier allows you to use bits 15 through 23 of an address
7227      expression as 8 bit relocatable expression.  This modifier useful
7228      for addressing data or code from Flash/Program memory.
7231 \x1f
7232 File: as.info,  Node: AVR Opcodes,  Prev: AVR Syntax,  Up: AVR-Dependent
7234 9.4.3 Opcodes
7235 -------------
7237 For detailed information on the AVR machine instruction set, see
7238 `www.atmel.com/products/AVR'.
7240    `as' implements all the standard AVR opcodes.  The following table
7241 summarizes the AVR opcodes, and their arguments.
7243      Legend:
7244         r   any register
7245         d   `ldi' register (r16-r31)
7246         v   `movw' even register (r0, r2, ..., r28, r30)
7247         a   `fmul' register (r16-r23)
7248         w   `adiw' register (r24,r26,r28,r30)
7249         e   pointer registers (X,Y,Z)
7250         b   base pointer register and displacement ([YZ]+disp)
7251         z   Z pointer register (for [e]lpm Rd,Z[+])
7252         M   immediate value from 0 to 255
7253         n   immediate value from 0 to 255 ( n = ~M ). Relocation impossible
7254         s   immediate value from 0 to 7
7255         P   Port address value from 0 to 63. (in, out)
7256         p   Port address value from 0 to 31. (cbi, sbi, sbic, sbis)
7257         K   immediate value from 0 to 63 (used in `adiw', `sbiw')
7258         i   immediate value
7259         l   signed pc relative offset from -64 to 63
7260         L   signed pc relative offset from -2048 to 2047
7261         h   absolute code address (call, jmp)
7262         S   immediate value from 0 to 7 (S = s << 4)
7263         ?   use this opcode entry if no parameters, else use next opcode entry
7265      1001010010001000   clc
7266      1001010011011000   clh
7267      1001010011111000   cli
7268      1001010010101000   cln
7269      1001010011001000   cls
7270      1001010011101000   clt
7271      1001010010111000   clv
7272      1001010010011000   clz
7273      1001010000001000   sec
7274      1001010001011000   seh
7275      1001010001111000   sei
7276      1001010000101000   sen
7277      1001010001001000   ses
7278      1001010001101000   set
7279      1001010000111000   sev
7280      1001010000011000   sez
7281      100101001SSS1000   bclr    S
7282      100101000SSS1000   bset    S
7283      1001010100001001   icall
7284      1001010000001001   ijmp
7285      1001010111001000   lpm     ?
7286      1001000ddddd010+   lpm     r,z
7287      1001010111011000   elpm    ?
7288      1001000ddddd011+   elpm    r,z
7289      0000000000000000   nop
7290      1001010100001000   ret
7291      1001010100011000   reti
7292      1001010110001000   sleep
7293      1001010110011000   break
7294      1001010110101000   wdr
7295      1001010111101000   spm
7296      000111rdddddrrrr   adc     r,r
7297      000011rdddddrrrr   add     r,r
7298      001000rdddddrrrr   and     r,r
7299      000101rdddddrrrr   cp      r,r
7300      000001rdddddrrrr   cpc     r,r
7301      000100rdddddrrrr   cpse    r,r
7302      001001rdddddrrrr   eor     r,r
7303      001011rdddddrrrr   mov     r,r
7304      100111rdddddrrrr   mul     r,r
7305      001010rdddddrrrr   or      r,r
7306      000010rdddddrrrr   sbc     r,r
7307      000110rdddddrrrr   sub     r,r
7308      001001rdddddrrrr   clr     r
7309      000011rdddddrrrr   lsl     r
7310      000111rdddddrrrr   rol     r
7311      001000rdddddrrrr   tst     r
7312      0111KKKKddddKKKK   andi    d,M
7313      0111KKKKddddKKKK   cbr     d,n
7314      1110KKKKddddKKKK   ldi     d,M
7315      11101111dddd1111   ser     d
7316      0110KKKKddddKKKK   ori     d,M
7317      0110KKKKddddKKKK   sbr     d,M
7318      0011KKKKddddKKKK   cpi     d,M
7319      0100KKKKddddKKKK   sbci    d,M
7320      0101KKKKddddKKKK   subi    d,M
7321      1111110rrrrr0sss   sbrc    r,s
7322      1111111rrrrr0sss   sbrs    r,s
7323      1111100ddddd0sss   bld     r,s
7324      1111101ddddd0sss   bst     r,s
7325      10110PPdddddPPPP   in      r,P
7326      10111PPrrrrrPPPP   out     P,r
7327      10010110KKddKKKK   adiw    w,K
7328      10010111KKddKKKK   sbiw    w,K
7329      10011000pppppsss   cbi     p,s
7330      10011010pppppsss   sbi     p,s
7331      10011001pppppsss   sbic    p,s
7332      10011011pppppsss   sbis    p,s
7333      111101lllllll000   brcc    l
7334      111100lllllll000   brcs    l
7335      111100lllllll001   breq    l
7336      111101lllllll100   brge    l
7337      111101lllllll101   brhc    l
7338      111100lllllll101   brhs    l
7339      111101lllllll111   brid    l
7340      111100lllllll111   brie    l
7341      111100lllllll000   brlo    l
7342      111100lllllll100   brlt    l
7343      111100lllllll010   brmi    l
7344      111101lllllll001   brne    l
7345      111101lllllll010   brpl    l
7346      111101lllllll000   brsh    l
7347      111101lllllll110   brtc    l
7348      111100lllllll110   brts    l
7349      111101lllllll011   brvc    l
7350      111100lllllll011   brvs    l
7351      111101lllllllsss   brbc    s,l
7352      111100lllllllsss   brbs    s,l
7353      1101LLLLLLLLLLLL   rcall   L
7354      1100LLLLLLLLLLLL   rjmp    L
7355      1001010hhhhh111h   call    h
7356      1001010hhhhh110h   jmp     h
7357      1001010rrrrr0101   asr     r
7358      1001010rrrrr0000   com     r
7359      1001010rrrrr1010   dec     r
7360      1001010rrrrr0011   inc     r
7361      1001010rrrrr0110   lsr     r
7362      1001010rrrrr0001   neg     r
7363      1001000rrrrr1111   pop     r
7364      1001001rrrrr1111   push    r
7365      1001010rrrrr0111   ror     r
7366      1001010rrrrr0010   swap    r
7367      00000001ddddrrrr   movw    v,v
7368      00000010ddddrrrr   muls    d,d
7369      000000110ddd0rrr   mulsu   a,a
7370      000000110ddd1rrr   fmul    a,a
7371      000000111ddd0rrr   fmuls   a,a
7372      000000111ddd1rrr   fmulsu  a,a
7373      1001001ddddd0000   sts     i,r
7374      1001000ddddd0000   lds     r,i
7375      10o0oo0dddddbooo   ldd     r,b
7376      100!000dddddee-+   ld      r,e
7377      10o0oo1rrrrrbooo   std     b,r
7378      100!001rrrrree-+   st      e,r
7379      1001010100011001   eicall
7380      1001010000011001   eijmp
7382 \x1f
7383 File: as.info,  Node: Blackfin-Dependent,  Next: CR16-Dependent,  Prev: AVR-Dependent,  Up: Machine Dependencies
7385 9.5 Blackfin Dependent Features
7386 ===============================
7388 * Menu:
7390 * Blackfin Options::            Blackfin Options
7391 * Blackfin Syntax::             Blackfin Syntax
7392 * Blackfin Directives::         Blackfin Directives
7394 \x1f
7395 File: as.info,  Node: Blackfin Options,  Next: Blackfin Syntax,  Up: Blackfin-Dependent
7397 9.5.1 Options
7398 -------------
7400 `-mcpu=PROCESSOR[-SIREVISION]'
7401      This option specifies the target processor.  The optional
7402      SIREVISION is not used in assembler.  It's here such that GCC can
7403      easily pass down its `-mcpu=' option.  The assembler will issue an
7404      error message if an attempt is made to assemble an instruction
7405      which will not execute on the target processor.  The following
7406      processor names are recognized: `bf512', `bf514', `bf516', `bf518',
7407      `bf522', `bf523', `bf524', `bf525', `bf526', `bf527', `bf531',
7408      `bf532', `bf533', `bf534', `bf535' (not implemented yet), `bf536',
7409      `bf537', `bf538', `bf539', `bf542', `bf542m', `bf544', `bf544m',
7410      `bf547', `bf547m', `bf548', `bf548m', `bf549', `bf549m', and
7411      `bf561'.
7414 \x1f
7415 File: as.info,  Node: Blackfin Syntax,  Next: Blackfin Directives,  Prev: Blackfin Options,  Up: Blackfin-Dependent
7417 9.5.2 Syntax
7418 ------------
7420 `Special Characters'
7421      Assembler input is free format and may appear anywhere on the line.
7422      One instruction may extend across multiple lines or more than one
7423      instruction may appear on the same line.  White space (space, tab,
7424      comments or newline) may appear anywhere between tokens.  A token
7425      must not have embedded spaces.  Tokens include numbers, register
7426      names, keywords, user identifiers, and also some multicharacter
7427      special symbols like "+=", "/*" or "||".
7429 `Instruction Delimiting'
7430      A semicolon must terminate every instruction.  Sometimes a complete
7431      instruction will consist of more than one operation.  There are two
7432      cases where this occurs.  The first is when two general operations
7433      are combined.  Normally a comma separates the different parts, as
7434      in
7436           a0= r3.h * r2.l, a1 = r3.l * r2.h ;
7438      The second case occurs when a general instruction is combined with
7439      one or two memory references for joint issue.  The latter portions
7440      are set off by a "||" token.
7442           a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++];
7444 `Register Names'
7445      The assembler treats register names and instruction keywords in a
7446      case insensitive manner.  User identifiers are case sensitive.
7447      Thus, R3.l, R3.L, r3.l and r3.L are all equivalent input to the
7448      assembler.
7450      Register names are reserved and may not be used as program
7451      identifiers.
7453      Some operations (such as "Move Register") require a register pair.
7454      Register pairs are always data registers and are denoted using a
7455      colon, eg., R3:2.  The larger number must be written firsts.  Note
7456      that the hardware only supports odd-even pairs, eg., R7:6, R5:4,
7457      R3:2, and R1:0.
7459      Some instructions (such as -SP (Push Multiple)) require a group of
7460      adjacent registers.  Adjacent registers are denoted in the syntax
7461      by the range enclosed in parentheses and separated by a colon,
7462      eg., (R7:3).  Again, the larger number appears first.
7464      Portions of a particular register may be individually specified.
7465      This is written with a dot (".") following the register name and
7466      then a letter denoting the desired portion.  For 32-bit registers,
7467      ".H" denotes the most significant ("High") portion.  ".L" denotes
7468      the least-significant portion.  The subdivisions of the 40-bit
7469      registers are described later.
7471 `Accumulators'
7472      The set of 40-bit registers A1 and A0 that normally contain data
7473      that is being manipulated.  Each accumulator can be accessed in
7474      four ways.
7476     `one 40-bit register'
7477           The register will be referred to as A1 or A0.
7479     `one 32-bit register'
7480           The registers are designated as A1.W or A0.W.
7482     `two 16-bit registers'
7483           The registers are designated as A1.H, A1.L, A0.H or A0.L.
7485     `one 8-bit register'
7486           The registers are designated as A1.X or A0.X for the bits that
7487           extend beyond bit 31.
7489 `Data Registers'
7490      The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7)
7491      that normally contain data for manipulation.  These are
7492      abbreviated as D-register or Dreg.  Data registers can be accessed
7493      as 32-bit registers or as two independent 16-bit registers.  The
7494      least significant 16 bits of each register is called the "low"
7495      half and is designated with ".L" following the register name.  The
7496      most significant 16 bits are called the "high" half and is
7497      designated with ".H" following the name.
7499              R7.L, r2.h, r4.L, R0.H
7501 `Pointer Registers'
7502      The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP)
7503      that normally contain byte addresses of data structures.  These are
7504      abbreviated as P-register or Preg.
7506           p2, p5, fp, sp
7508 `Stack Pointer SP'
7509      The stack pointer contains the 32-bit address of the last occupied
7510      byte location in the stack.  The stack grows by decrementing the
7511      stack pointer.
7513 `Frame Pointer FP'
7514      The frame pointer contains the 32-bit address of the previous frame
7515      pointer in the stack.  It is located at the top of a frame.
7517 `Loop Top'
7518      LT0 and LT1.  These registers contain the 32-bit address of the
7519      top of a zero overhead loop.
7521 `Loop Count'
7522      LC0 and LC1.  These registers contain the 32-bit counter of the
7523      zero overhead loop executions.
7525 `Loop Bottom'
7526      LB0 and LB1.  These registers contain the 32-bit address of the
7527      bottom of a zero overhead loop.
7529 `Index Registers'
7530      The set of 32-bit registers (I0, I1, I2, I3) that normally contain
7531      byte addresses of data structures.  Abbreviated I-register or Ireg.
7533 `Modify Registers'
7534      The set of 32-bit registers (M0, M1, M2, M3) that normally contain
7535      offset values that are added and subracted to one of the index
7536      registers.  Abbreviated as Mreg.
7538 `Length Registers'
7539      The set of 32-bit registers (L0, L1, L2, L3) that normally contain
7540      the length in bytes of the circular buffer.  Abbreviated as Lreg.
7541      Clear the Lreg to disable circular addressing for the
7542      corresponding Ireg.
7544 `Base Registers'
7545      The set of 32-bit registers (B0, B1, B2, B3) that normally contain
7546      the base address in bytes of the circular buffer.  Abbreviated as
7547      Breg.
7549 `Floating Point'
7550      The Blackfin family has no hardware floating point but the .float
7551      directive generates ieee floating point numbers for use with
7552      software floating point libraries.
7554 `Blackfin Opcodes'
7555      For detailed information on the Blackfin machine instruction set,
7556      see the Blackfin(r) Processor Instruction Set Reference.
7559 \x1f
7560 File: as.info,  Node: Blackfin Directives,  Prev: Blackfin Syntax,  Up: Blackfin-Dependent
7562 9.5.3 Directives
7563 ----------------
7565 The following directives are provided for compatibility with the VDSP
7566 assembler.
7568 `.byte2'
7569      Initializes a four byte data object.
7571 `.byte4'
7572      Initializes a two byte data object.
7574 `.db'
7575      TBD
7577 `.dd'
7578      TBD
7580 `.dw'
7581      TBD
7583 `.var'
7584      Define and initialize a 32 bit data object.
7586 \x1f
7587 File: as.info,  Node: CR16-Dependent,  Next: CRIS-Dependent,  Prev: Blackfin-Dependent,  Up: Machine Dependencies
7589 9.6 CR16 Dependent Features
7590 ===========================
7592 * Menu:
7594 * CR16 Operand Qualifiers::     CR16 Machine Operand Qualifiers
7596 \x1f
7597 File: as.info,  Node: CR16 Operand Qualifiers,  Up: CR16-Dependent
7599 9.6.1 CR16 Operand Qualifiers
7600 -----------------------------
7602 The National Semiconductor CR16 target of `as' has a few machine
7603 dependent operand qualifiers.
7605    Operand expression type qualifier is an optional field in the
7606 instruction operand, to determines the type of the expression field of
7607 an operand. The `@' is required. CR16 architecture uses one of the
7608 following expression qualifiers:
7611      - `Specifies expression operand type as small'
7614      - `Specifies expression operand type as medium'
7617      - `Specifies expression operand type as large'
7620      - `Specifies the CR16 Assembler generates a relocation entry for
7621      the operand, where pc has implied bit, the expression is adjusted
7622      accordingly. The linker uses the relocation entry to update the
7623      operand address at link time.'
7625 `got/GOT'
7626      - `Specifies the CR16 Assembler generates a relocation entry for
7627      the operand, offset from Global Offset Table. The linker uses this
7628      relocation entry to update the operand address at link time'
7630 `cgot/cGOT'
7631      - `Specifies the CompactRISC Assembler generates a relocation
7632      entry for the operand, where pc has implied bit, the expression is
7633      adjusted accordingly. The linker uses the relocation entry to
7634      update the operand address at link time.'
7636    CR16 target operand qualifiers and its size (in bits):
7638 `Immediate Operand'
7639      - s --- 4 bits
7642      - m --- 16 bits, for movb and movw instructions.
7645      - m --- 20 bits, movd instructions.
7648      - l --- 32 bits
7650 `Absolute Operand'
7651      - s --- Illegal specifier for this operand.
7654      - m --- 20 bits, movd instructions.
7656 `Displacement Operand'
7657      - s --- 8 bits
7660      - m --- 16 bits
7663      - l --- 24 bits
7665    For example:
7666      1   `movw $_myfun@c,r1'
7668          This loads the address of _myfun, shifted right by 1, into r1.
7670      2   `movd $_myfun@c,(r2,r1)'
7672          This loads the address of _myfun, shifted right by 1, into register-pair r2-r1.
7674      3   `_myfun_ptr:'
7675          `.long _myfun@c'
7676          `loadd _myfun_ptr, (r1,r0)'
7677          `jal (r1,r0)'
7679          This .long directive, the address of _myfunc, shifted right by 1 at link time.
7681      4   `loadd  _data1@GOT(r12), (r1,r0)'
7683          This loads the address of _data1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r2-r1.
7685      5   `loadd  _myfunc@cGOT(r12), (r1,r0)'
7687          This loads the address of _myfun, shifted right by 1, into global offset table (ie GOT) and its offset value from GOT loads into register-pair r1-r0.
7689 \x1f
7690 File: as.info,  Node: CRIS-Dependent,  Next: D10V-Dependent,  Prev: CR16-Dependent,  Up: Machine Dependencies
7692 9.7 CRIS Dependent Features
7693 ===========================
7695 * Menu:
7697 * CRIS-Opts::              Command-line Options
7698 * CRIS-Expand::            Instruction expansion
7699 * CRIS-Symbols::           Symbols
7700 * CRIS-Syntax::            Syntax
7702 \x1f
7703 File: as.info,  Node: CRIS-Opts,  Next: CRIS-Expand,  Up: CRIS-Dependent
7705 9.7.1 Command-line Options
7706 --------------------------
7708 The CRIS version of `as' has these machine-dependent command-line
7709 options.
7711    The format of the generated object files can be either ELF or a.out,
7712 specified by the command-line options `--emulation=crisaout' and
7713 `--emulation=criself'.  The default is ELF (criself), unless `as' has
7714 been configured specifically for a.out by using the configuration name
7715 `cris-axis-aout'.
7717    There are two different link-incompatible ELF object file variants
7718 for CRIS, for use in environments where symbols are expected to be
7719 prefixed by a leading `_' character and for environments without such a
7720 symbol prefix.  The variant used for GNU/Linux port has no symbol
7721 prefix.  Which variant to produce is specified by either of the options
7722 `--underscore' and `--no-underscore'.  The default is `--underscore'.
7723 Since symbols in CRIS a.out objects are expected to have a `_' prefix,
7724 specifying `--no-underscore' when generating a.out objects is an error.
7725 Besides the object format difference, the effect of this option is to
7726 parse register names differently (*note crisnous::).  The
7727 `--no-underscore' option makes a `$' register prefix mandatory.
7729    The option `--pic' must be passed to `as' in order to recognize the
7730 symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note
7731 crispic::).  This will also affect expansion of instructions.  The
7732 expansion with `--pic' will use PC-relative rather than (slightly
7733 faster) absolute addresses in those expansions.
7735    The option `--march=ARCHITECTURE' specifies the recognized
7736 instruction set and recognized register names.  It also controls the
7737 architecture type of the object file.  Valid values for ARCHITECTURE
7738 are:
7739 `v0_v10'
7740      All instructions and register names for any architecture variant
7741      in the set v0...v10 are recognized.  This is the default if the
7742      target is configured as cris-*.
7744 `v10'
7745      Only instructions and register names for CRIS v10 (as found in
7746      ETRAX 100 LX) are recognized.  This is the default if the target
7747      is configured as crisv10-*.
7749 `v32'
7750      Only instructions and register names for CRIS v32 (code name
7751      Guinness) are recognized.  This is the default if the target is
7752      configured as crisv32-*.  This value implies `--no-mul-bug-abort'.
7753      (A subsequent `--mul-bug-abort' will turn it back on.)
7755 `common_v10_v32'
7756      Only instructions with register names and addressing modes with
7757      opcodes common to the v10 and v32 are recognized.
7759    When `-N' is specified, `as' will emit a warning when a 16-bit
7760 branch instruction is expanded into a 32-bit multiple-instruction
7761 construct (*note CRIS-Expand::).
7763    Some versions of the CRIS v10, for example in the Etrax 100 LX,
7764 contain a bug that causes destabilizing memory accesses when a multiply
7765 instruction is executed with certain values in the first operand just
7766 before a cache-miss.  When the `--mul-bug-abort' command line option is
7767 active (the default value), `as' will refuse to assemble a file
7768 containing a multiply instruction at a dangerous offset, one that could
7769 be the last on a cache-line, or is in a section with insufficient
7770 alignment.  This placement checking does not catch any case where the
7771 multiply instruction is dangerously placed because it is located in a
7772 delay-slot.  The `--mul-bug-abort' command line option turns off the
7773 checking.
7775 \x1f
7776 File: as.info,  Node: CRIS-Expand,  Next: CRIS-Symbols,  Prev: CRIS-Opts,  Up: CRIS-Dependent
7778 9.7.2 Instruction expansion
7779 ---------------------------
7781 `as' will silently choose an instruction that fits the operand size for
7782 `[register+constant]' operands.  For example, the offset `127' in
7783 `move.d [r3+127],r4' fits in an instruction using a signed-byte offset.
7784 Similarly, `move.d [r2+32767],r1' will generate an instruction using a
7785 16-bit offset.  For symbolic expressions and constants that do not fit
7786 in 16 bits including the sign bit, a 32-bit offset is generated.
7788    For branches, `as' will expand from a 16-bit branch instruction into
7789 a sequence of instructions that can reach a full 32-bit address.  Since
7790 this does not correspond to a single instruction, such expansions can
7791 optionally be warned about.  *Note CRIS-Opts::.
7793    If the operand is found to fit the range, a `lapc' mnemonic will
7794 translate to a `lapcq' instruction.  Use `lapc.d' to force the 32-bit
7795 `lapc' instruction.
7797    Similarly, the `addo' mnemonic will translate to the shortest
7798 fitting instruction of `addoq', `addo.w' and `addo.d', when used with a
7799 operand that is a constant known at assembly time.
7801 \x1f
7802 File: as.info,  Node: CRIS-Symbols,  Next: CRIS-Syntax,  Prev: CRIS-Expand,  Up: CRIS-Dependent
7804 9.7.3 Symbols
7805 -------------
7807 Some symbols are defined by the assembler.  They're intended to be used
7808 in conditional assembly, for example:
7809       .if ..asm.arch.cris.v32
7810       CODE FOR CRIS V32
7811       .elseif ..asm.arch.cris.common_v10_v32
7812       CODE COMMON TO CRIS V32 AND CRIS V10
7813       .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10
7814       CODE FOR V10
7815       .else
7816       .error "Code needs to be added here."
7817       .endif
7819    These symbols are defined in the assembler, reflecting command-line
7820 options, either when specified or the default.  They are always
7821 defined, to 0 or 1.
7822 `..asm.arch.cris.any_v0_v10'
7823      This symbol is non-zero when `--march=v0_v10' is specified or the
7824      default.
7826 `..asm.arch.cris.common_v10_v32'
7827      Set according to the option `--march=common_v10_v32'.
7829 `..asm.arch.cris.v10'
7830      Reflects the option `--march=v10'.
7832 `..asm.arch.cris.v32'
7833      Corresponds to `--march=v10'.
7835    Speaking of symbols, when a symbol is used in code, it can have a
7836 suffix modifying its value for use in position-independent code. *Note
7837 CRIS-Pic::.
7839 \x1f
7840 File: as.info,  Node: CRIS-Syntax,  Prev: CRIS-Symbols,  Up: CRIS-Dependent
7842 9.7.4 Syntax
7843 ------------
7845 There are different aspects of the CRIS assembly syntax.
7847 * Menu:
7849 * CRIS-Chars::                  Special Characters
7850 * CRIS-Pic::                    Position-Independent Code Symbols
7851 * CRIS-Regs::                   Register Names
7852 * CRIS-Pseudos::                Assembler Directives
7854 \x1f
7855 File: as.info,  Node: CRIS-Chars,  Next: CRIS-Pic,  Up: CRIS-Syntax
7857 9.7.4.1 Special Characters
7858 ..........................
7860 The character `#' is a line comment character.  It starts a comment if
7861 and only if it is placed at the beginning of a line.
7863    A `;' character starts a comment anywhere on the line, causing all
7864 characters up to the end of the line to be ignored.
7866    A `@' character is handled as a line separator equivalent to a
7867 logical new-line character (except in a comment), so separate
7868 instructions can be specified on a single line.
7870 \x1f
7871 File: as.info,  Node: CRIS-Pic,  Next: CRIS-Regs,  Prev: CRIS-Chars,  Up: CRIS-Syntax
7873 9.7.4.2 Symbols in position-independent code
7874 ............................................
7876 When generating position-independent code (SVR4 PIC) for use in
7877 cris-axis-linux-gnu or crisv32-axis-linux-gnu shared libraries, symbol
7878 suffixes are used to specify what kind of run-time symbol lookup will
7879 be used, expressed in the object as different _relocation types_.
7880 Usually, all absolute symbol values must be located in a table, the
7881 _global offset table_, leaving the code position-independent;
7882 independent of values of global symbols and independent of the address
7883 of the code.  The suffix modifies the value of the symbol, into for
7884 example an index into the global offset table where the real symbol
7885 value is entered, or a PC-relative value, or a value relative to the
7886 start of the global offset table.  All symbol suffixes start with the
7887 character `:' (omitted in the list below).  Every symbol use in code or
7888 a read-only section must therefore have a PIC suffix to enable a useful
7889 shared library to be created.  Usually, these constructs must not be
7890 used with an additive constant offset as is usually allowed, i.e. no 4
7891 as in `symbol + 4' is allowed.  This restriction is checked at
7892 link-time, not at assembly-time.
7894 `GOT'
7895      Attaching this suffix to a symbol in an instruction causes the
7896      symbol to be entered into the global offset table.  The value is a
7897      32-bit index for that symbol into the global offset table.  The
7898      name of the corresponding relocation is `R_CRIS_32_GOT'.  Example:
7899      `move.d [$r0+extsym:GOT],$r9'
7901 `GOT16'
7902      Same as for `GOT', but the value is a 16-bit index into the global
7903      offset table.  The corresponding relocation is `R_CRIS_16_GOT'.
7904      Example: `move.d [$r0+asymbol:GOT16],$r10'
7906 `PLT'
7907      This suffix is used for function symbols.  It causes a _procedure
7908      linkage table_, an array of code stubs, to be created at the time
7909      the shared object is created or linked against, together with a
7910      global offset table entry.  The value is a pc-relative offset to
7911      the corresponding stub code in the procedure linkage table.  This
7912      arrangement causes the run-time symbol resolver to be called to
7913      look up and set the value of the symbol the first time the
7914      function is called (at latest; depending environment variables).
7915      It is only safe to leave the symbol unresolved this way if all
7916      references are function calls.  The name of the relocation is
7917      `R_CRIS_32_PLT_PCREL'.  Example: `add.d fnname:PLT,$pc'
7919 `PLTG'
7920      Like PLT, but the value is relative to the beginning of the global
7921      offset table.  The relocation is `R_CRIS_32_PLT_GOTREL'.  Example:
7922      `move.d fnname:PLTG,$r3'
7924 `GOTPLT'
7925      Similar to `PLT', but the value of the symbol is a 32-bit index
7926      into the global offset table.  This is somewhat of a mix between
7927      the effect of the `GOT' and the `PLT' suffix; the difference to
7928      `GOT' is that there will be a procedure linkage table entry
7929      created, and that the symbol is assumed to be a function entry and
7930      will be resolved by the run-time resolver as with `PLT'.  The
7931      relocation is `R_CRIS_32_GOTPLT'.  Example: `jsr
7932      [$r0+fnname:GOTPLT]'
7934 `GOTPLT16'
7935      A variant of `GOTPLT' giving a 16-bit value.  Its relocation name
7936      is `R_CRIS_16_GOTPLT'.  Example: `jsr [$r0+fnname:GOTPLT16]'
7938 `GOTOFF'
7939      This suffix must only be attached to a local symbol, but may be
7940      used in an expression adding an offset.  The value is the address
7941      of the symbol relative to the start of the global offset table.
7942      The relocation name is `R_CRIS_32_GOTREL'.  Example: `move.d
7943      [$r0+localsym:GOTOFF],r3'
7945 \x1f
7946 File: as.info,  Node: CRIS-Regs,  Next: CRIS-Pseudos,  Prev: CRIS-Pic,  Up: CRIS-Syntax
7948 9.7.4.3 Register names
7949 ......................
7951 A `$' character may always prefix a general or special register name in
7952 an instruction operand but is mandatory when the option
7953 `--no-underscore' is specified or when the `.syntax register_prefix'
7954 directive is in effect (*note crisnous::).  Register names are
7955 case-insensitive.
7957 \x1f
7958 File: as.info,  Node: CRIS-Pseudos,  Prev: CRIS-Regs,  Up: CRIS-Syntax
7960 9.7.4.4 Assembler Directives
7961 ............................
7963 There are a few CRIS-specific pseudo-directives in addition to the
7964 generic ones.  *Note Pseudo Ops::.  Constants emitted by
7965 pseudo-directives are in little-endian order for CRIS.  There is no
7966 support for floating-point-specific directives for CRIS.
7968 `.dword EXPRESSIONS'
7969      The `.dword' directive is a synonym for `.int', expecting zero or
7970      more EXPRESSIONS, separated by commas.  For each expression, a
7971      32-bit little-endian constant is emitted.
7973 `.syntax ARGUMENT'
7974      The `.syntax' directive takes as ARGUMENT one of the following
7975      case-sensitive choices.
7977     `no_register_prefix'
7978           The `.syntax no_register_prefix' directive makes a `$'
7979           character prefix on all registers optional.  It overrides a
7980           previous setting, including the corresponding effect of the
7981           option `--no-underscore'.  If this directive is used when
7982           ordinary symbols do not have a `_' character prefix, care
7983           must be taken to avoid ambiguities whether an operand is a
7984           register or a symbol; using symbols with names the same as
7985           general or special registers then invoke undefined behavior.
7987     `register_prefix'
7988           This directive makes a `$' character prefix on all registers
7989           mandatory.  It overrides a previous setting, including the
7990           corresponding effect of the option `--underscore'.
7992     `leading_underscore'
7993           This is an assertion directive, emitting an error if the
7994           `--no-underscore' option is in effect.
7996     `no_leading_underscore'
7997           This is the opposite of the `.syntax leading_underscore'
7998           directive and emits an error if the option `--underscore' is
7999           in effect.
8001 `.arch ARGUMENT'
8002      This is an assertion directive, giving an error if the specified
8003      ARGUMENT is not the same as the specified or default value for the
8004      `--march=ARCHITECTURE' option (*note march-option::).
8007 \x1f
8008 File: as.info,  Node: D10V-Dependent,  Next: D30V-Dependent,  Prev: CRIS-Dependent,  Up: Machine Dependencies
8010 9.8 D10V Dependent Features
8011 ===========================
8013 * Menu:
8015 * D10V-Opts::                   D10V Options
8016 * D10V-Syntax::                 Syntax
8017 * D10V-Float::                  Floating Point
8018 * D10V-Opcodes::                Opcodes
8020 \x1f
8021 File: as.info,  Node: D10V-Opts,  Next: D10V-Syntax,  Up: D10V-Dependent
8023 9.8.1 D10V Options
8024 ------------------
8026 The Mitsubishi D10V version of `as' has a few machine dependent options.
8028 `-O'
8029      The D10V can often execute two sub-instructions in parallel. When
8030      this option is used, `as' will attempt to optimize its output by
8031      detecting when instructions can be executed in parallel.
8033 `--nowarnswap'
8034      To optimize execution performance, `as' will sometimes swap the
8035      order of instructions. Normally this generates a warning. When
8036      this option is used, no warning will be generated when
8037      instructions are swapped.
8039 `--gstabs-packing'
8041 `--no-gstabs-packing'
8042      `as' packs adjacent short instructions into a single packed
8043      instruction. `--no-gstabs-packing' turns instruction packing off if
8044      `--gstabs' is specified as well; `--gstabs-packing' (the default)
8045      turns instruction packing on even when `--gstabs' is specified.
8047 \x1f
8048 File: as.info,  Node: D10V-Syntax,  Next: D10V-Float,  Prev: D10V-Opts,  Up: D10V-Dependent
8050 9.8.2 Syntax
8051 ------------
8053 The D10V syntax is based on the syntax in Mitsubishi's D10V
8054 architecture manual.  The differences are detailed below.
8056 * Menu:
8058 * D10V-Size::                 Size Modifiers
8059 * D10V-Subs::                 Sub-Instructions
8060 * D10V-Chars::                Special Characters
8061 * D10V-Regs::                 Register Names
8062 * D10V-Addressing::           Addressing Modes
8063 * D10V-Word::                 @WORD Modifier
8065 \x1f
8066 File: as.info,  Node: D10V-Size,  Next: D10V-Subs,  Up: D10V-Syntax
8068 9.8.2.1 Size Modifiers
8069 ......................
8071 The D10V version of `as' uses the instruction names in the D10V
8072 Architecture Manual.  However, the names in the manual are sometimes
8073 ambiguous.  There are instruction names that can assemble to a short or
8074 long form opcode.  How does the assembler pick the correct form?  `as'
8075 will always pick the smallest form if it can.  When dealing with a
8076 symbol that is not defined yet when a line is being assembled, it will
8077 always use the long form.  If you need to force the assembler to use
8078 either the short or long form of the instruction, you can append either
8079 `.s' (short) or `.l' (long) to it.  For example, if you are writing an
8080 assembly program and you want to do a branch to a symbol that is
8081 defined later in your program, you can write `bra.s   foo'.  Objdump
8082 and GDB will always append `.s' or `.l' to instructions which have both
8083 short and long forms.
8085 \x1f
8086 File: as.info,  Node: D10V-Subs,  Next: D10V-Chars,  Prev: D10V-Size,  Up: D10V-Syntax
8088 9.8.2.2 Sub-Instructions
8089 ........................
8091 The D10V assembler takes as input a series of instructions, either
8092 one-per-line, or in the special two-per-line format described in the
8093 next section.  Some of these instructions will be short-form or
8094 sub-instructions.  These sub-instructions can be packed into a single
8095 instruction.  The assembler will do this automatically.  It will also
8096 detect when it should not pack instructions.  For example, when a label
8097 is defined, the next instruction will never be packaged with the
8098 previous one.  Whenever a branch and link instruction is called, it
8099 will not be packaged with the next instruction so the return address
8100 will be valid.  Nops are automatically inserted when necessary.
8102    If you do not want the assembler automatically making these
8103 decisions, you can control the packaging and execution type (parallel
8104 or sequential) with the special execution symbols described in the next
8105 section.
8107 \x1f
8108 File: as.info,  Node: D10V-Chars,  Next: D10V-Regs,  Prev: D10V-Subs,  Up: D10V-Syntax
8110 9.8.2.3 Special Characters
8111 ..........................
8113 `;' and `#' are the line comment characters.  Sub-instructions may be
8114 executed in order, in reverse-order, or in parallel.  Instructions
8115 listed in the standard one-per-line format will be executed
8116 sequentially.  To specify the executing order, use the following
8117 symbols:
8118 `->'
8119      Sequential with instruction on the left first.
8121 `<-'
8122      Sequential with instruction on the right first.
8124 `||'
8125      Parallel
8126    The D10V syntax allows either one instruction per line, one
8127 instruction per line with the execution symbol, or two instructions per
8128 line.  For example
8129 `abs       a1      ->      abs     r0'
8130      Execute these sequentially.  The instruction on the right is in
8131      the right container and is executed second.
8133 `abs       r0      <-      abs     a1'
8134      Execute these reverse-sequentially.  The instruction on the right
8135      is in the right container, and is executed first.
8137 `ld2w    r2,@r8+         ||      mac     a0,r0,r7'
8138      Execute these in parallel.
8140 `ld2w    r2,@r8+         ||'
8141 `mac     a0,r0,r7'
8142      Two-line format. Execute these in parallel.
8144 `ld2w    r2,@r8+'
8145 `mac     a0,r0,r7'
8146      Two-line format. Execute these sequentially.  Assembler will put
8147      them in the proper containers.
8149 `ld2w    r2,@r8+         ->'
8150 `mac     a0,r0,r7'
8151      Two-line format. Execute these sequentially.  Same as above but
8152      second instruction will always go into right container.
8153    Since `$' has no special meaning, you may use it in symbol names.
8155 \x1f
8156 File: as.info,  Node: D10V-Regs,  Next: D10V-Addressing,  Prev: D10V-Chars,  Up: D10V-Syntax
8158 9.8.2.4 Register Names
8159 ......................
8161 You can use the predefined symbols `r0' through `r15' to refer to the
8162 D10V registers.  You can also use `sp' as an alias for `r15'.  The
8163 accumulators are `a0' and `a1'.  There are special register-pair names
8164 that may optionally be used in opcodes that require even-numbered
8165 registers. Register names are not case sensitive.
8167    Register Pairs
8168 `r0-r1'
8170 `r2-r3'
8172 `r4-r5'
8174 `r6-r7'
8176 `r8-r9'
8178 `r10-r11'
8180 `r12-r13'
8182 `r14-r15'
8184    The D10V also has predefined symbols for these control registers and
8185 status bits:
8186 `psw'
8187      Processor Status Word
8189 `bpsw'
8190      Backup Processor Status Word
8192 `pc'
8193      Program Counter
8195 `bpc'
8196      Backup Program Counter
8198 `rpt_c'
8199      Repeat Count
8201 `rpt_s'
8202      Repeat Start address
8204 `rpt_e'
8205      Repeat End address
8207 `mod_s'
8208      Modulo Start address
8210 `mod_e'
8211      Modulo End address
8213 `iba'
8214      Instruction Break Address
8216 `f0'
8217      Flag 0
8219 `f1'
8220      Flag 1
8223      Carry flag
8225 \x1f
8226 File: as.info,  Node: D10V-Addressing,  Next: D10V-Word,  Prev: D10V-Regs,  Up: D10V-Syntax
8228 9.8.2.5 Addressing Modes
8229 ........................
8231 `as' understands the following addressing modes for the D10V.  `RN' in
8232 the following refers to any of the numbered registers, but _not_ the
8233 control registers.
8234 `RN'
8235      Register direct
8237 `@RN'
8238      Register indirect
8240 `@RN+'
8241      Register indirect with post-increment
8243 `@RN-'
8244      Register indirect with post-decrement
8246 `@-SP'
8247      Register indirect with pre-decrement
8249 `@(DISP, RN)'
8250      Register indirect with displacement
8252 `ADDR'
8253      PC relative address (for branch or rep).
8255 `#IMM'
8256      Immediate data (the `#' is optional and ignored)
8258 \x1f
8259 File: as.info,  Node: D10V-Word,  Prev: D10V-Addressing,  Up: D10V-Syntax
8261 9.8.2.6 @WORD Modifier
8262 ......................
8264 Any symbol followed by `@word' will be replaced by the symbol's value
8265 shifted right by 2.  This is used in situations such as loading a
8266 register with the address of a function (or any other code fragment).
8267 For example, if you want to load a register with the location of the
8268 function `main' then jump to that function, you could do it as follows:
8269      ldi     r2, main@word
8270      jmp     r2
8272 \x1f
8273 File: as.info,  Node: D10V-Float,  Next: D10V-Opcodes,  Prev: D10V-Syntax,  Up: D10V-Dependent
8275 9.8.3 Floating Point
8276 --------------------
8278 The D10V has no hardware floating point, but the `.float' and `.double'
8279 directives generates IEEE floating-point numbers for compatibility with
8280 other development tools.
8282 \x1f
8283 File: as.info,  Node: D10V-Opcodes,  Prev: D10V-Float,  Up: D10V-Dependent
8285 9.8.4 Opcodes
8286 -------------
8288 For detailed information on the D10V machine instruction set, see `D10V
8289 Architecture: A VLIW Microprocessor for Multimedia Applications'
8290 (Mitsubishi Electric Corp.).  `as' implements all the standard D10V
8291 opcodes.  The only changes are those described in the section on size
8292 modifiers
8294 \x1f
8295 File: as.info,  Node: D30V-Dependent,  Next: H8/300-Dependent,  Prev: D10V-Dependent,  Up: Machine Dependencies
8297 9.9 D30V Dependent Features
8298 ===========================
8300 * Menu:
8302 * D30V-Opts::                   D30V Options
8303 * D30V-Syntax::                 Syntax
8304 * D30V-Float::                  Floating Point
8305 * D30V-Opcodes::                Opcodes
8307 \x1f
8308 File: as.info,  Node: D30V-Opts,  Next: D30V-Syntax,  Up: D30V-Dependent
8310 9.9.1 D30V Options
8311 ------------------
8313 The Mitsubishi D30V version of `as' has a few machine dependent options.
8315 `-O'
8316      The D30V can often execute two sub-instructions in parallel. When
8317      this option is used, `as' will attempt to optimize its output by
8318      detecting when instructions can be executed in parallel.
8320 `-n'
8321      When this option is used, `as' will issue a warning every time it
8322      adds a nop instruction.
8324 `-N'
8325      When this option is used, `as' will issue a warning if it needs to
8326      insert a nop after a 32-bit multiply before a load or 16-bit
8327      multiply instruction.
8329 \x1f
8330 File: as.info,  Node: D30V-Syntax,  Next: D30V-Float,  Prev: D30V-Opts,  Up: D30V-Dependent
8332 9.9.2 Syntax
8333 ------------
8335 The D30V syntax is based on the syntax in Mitsubishi's D30V
8336 architecture manual.  The differences are detailed below.
8338 * Menu:
8340 * D30V-Size::                 Size Modifiers
8341 * D30V-Subs::                 Sub-Instructions
8342 * D30V-Chars::                Special Characters
8343 * D30V-Guarded::              Guarded Execution
8344 * D30V-Regs::                 Register Names
8345 * D30V-Addressing::           Addressing Modes
8347 \x1f
8348 File: as.info,  Node: D30V-Size,  Next: D30V-Subs,  Up: D30V-Syntax
8350 9.9.2.1 Size Modifiers
8351 ......................
8353 The D30V version of `as' uses the instruction names in the D30V
8354 Architecture Manual.  However, the names in the manual are sometimes
8355 ambiguous.  There are instruction names that can assemble to a short or
8356 long form opcode.  How does the assembler pick the correct form?  `as'
8357 will always pick the smallest form if it can.  When dealing with a
8358 symbol that is not defined yet when a line is being assembled, it will
8359 always use the long form.  If you need to force the assembler to use
8360 either the short or long form of the instruction, you can append either
8361 `.s' (short) or `.l' (long) to it.  For example, if you are writing an
8362 assembly program and you want to do a branch to a symbol that is
8363 defined later in your program, you can write `bra.s foo'.  Objdump and
8364 GDB will always append `.s' or `.l' to instructions which have both
8365 short and long forms.
8367 \x1f
8368 File: as.info,  Node: D30V-Subs,  Next: D30V-Chars,  Prev: D30V-Size,  Up: D30V-Syntax
8370 9.9.2.2 Sub-Instructions
8371 ........................
8373 The D30V assembler takes as input a series of instructions, either
8374 one-per-line, or in the special two-per-line format described in the
8375 next section.  Some of these instructions will be short-form or
8376 sub-instructions.  These sub-instructions can be packed into a single
8377 instruction.  The assembler will do this automatically.  It will also
8378 detect when it should not pack instructions.  For example, when a label
8379 is defined, the next instruction will never be packaged with the
8380 previous one.  Whenever a branch and link instruction is called, it
8381 will not be packaged with the next instruction so the return address
8382 will be valid.  Nops are automatically inserted when necessary.
8384    If you do not want the assembler automatically making these
8385 decisions, you can control the packaging and execution type (parallel
8386 or sequential) with the special execution symbols described in the next
8387 section.
8389 \x1f
8390 File: as.info,  Node: D30V-Chars,  Next: D30V-Guarded,  Prev: D30V-Subs,  Up: D30V-Syntax
8392 9.9.2.3 Special Characters
8393 ..........................
8395 `;' and `#' are the line comment characters.  Sub-instructions may be
8396 executed in order, in reverse-order, or in parallel.  Instructions
8397 listed in the standard one-per-line format will be executed
8398 sequentially unless you use the `-O' option.
8400    To specify the executing order, use the following symbols:
8401 `->'
8402      Sequential with instruction on the left first.
8404 `<-'
8405      Sequential with instruction on the right first.
8407 `||'
8408      Parallel
8410    The D30V syntax allows either one instruction per line, one
8411 instruction per line with the execution symbol, or two instructions per
8412 line.  For example
8413 `abs r2,r3 -> abs r4,r5'
8414      Execute these sequentially.  The instruction on the right is in
8415      the right container and is executed second.
8417 `abs r2,r3 <- abs r4,r5'
8418      Execute these reverse-sequentially.  The instruction on the right
8419      is in the right container, and is executed first.
8421 `abs r2,r3 || abs r4,r5'
8422      Execute these in parallel.
8424 `ldw r2,@(r3,r4) ||'
8425 `mulx r6,r8,r9'
8426      Two-line format. Execute these in parallel.
8428 `mulx a0,r8,r9'
8429 `stw r2,@(r3,r4)'
8430      Two-line format. Execute these sequentially unless `-O' option is
8431      used.  If the `-O' option is used, the assembler will determine if
8432      the instructions could be done in parallel (the above two
8433      instructions can be done in parallel), and if so, emit them as
8434      parallel instructions.  The assembler will put them in the proper
8435      containers.  In the above example, the assembler will put the
8436      `stw' instruction in left container and the `mulx' instruction in
8437      the right container.
8439 `stw r2,@(r3,r4) ->'
8440 `mulx a0,r8,r9'
8441      Two-line format.  Execute the `stw' instruction followed by the
8442      `mulx' instruction sequentially.  The first instruction goes in the
8443      left container and the second instruction goes into right
8444      container.  The assembler will give an error if the machine
8445      ordering constraints are violated.
8447 `stw r2,@(r3,r4) <-'
8448 `mulx a0,r8,r9'
8449      Same as previous example, except that the `mulx' instruction is
8450      executed before the `stw' instruction.
8452    Since `$' has no special meaning, you may use it in symbol names.
8454 \x1f
8455 File: as.info,  Node: D30V-Guarded,  Next: D30V-Regs,  Prev: D30V-Chars,  Up: D30V-Syntax
8457 9.9.2.4 Guarded Execution
8458 .........................
8460 `as' supports the full range of guarded execution directives for each
8461 instruction.  Just append the directive after the instruction proper.
8462 The directives are:
8464 `/tx'
8465      Execute the instruction if flag f0 is true.
8467 `/fx'
8468      Execute the instruction if flag f0 is false.
8470 `/xt'
8471      Execute the instruction if flag f1 is true.
8473 `/xf'
8474      Execute the instruction if flag f1 is false.
8476 `/tt'
8477      Execute the instruction if both flags f0 and f1 are true.
8479 `/tf'
8480      Execute the instruction if flag f0 is true and flag f1 is false.
8482 \x1f
8483 File: as.info,  Node: D30V-Regs,  Next: D30V-Addressing,  Prev: D30V-Guarded,  Up: D30V-Syntax
8485 9.9.2.5 Register Names
8486 ......................
8488 You can use the predefined symbols `r0' through `r63' to refer to the
8489 D30V registers.  You can also use `sp' as an alias for `r63' and `link'
8490 as an alias for `r62'.  The accumulators are `a0' and `a1'.
8492    The D30V also has predefined symbols for these control registers and
8493 status bits:
8494 `psw'
8495      Processor Status Word
8497 `bpsw'
8498      Backup Processor Status Word
8500 `pc'
8501      Program Counter
8503 `bpc'
8504      Backup Program Counter
8506 `rpt_c'
8507      Repeat Count
8509 `rpt_s'
8510      Repeat Start address
8512 `rpt_e'
8513      Repeat End address
8515 `mod_s'
8516      Modulo Start address
8518 `mod_e'
8519      Modulo End address
8521 `iba'
8522      Instruction Break Address
8524 `f0'
8525      Flag 0
8527 `f1'
8528      Flag 1
8530 `f2'
8531      Flag 2
8533 `f3'
8534      Flag 3
8536 `f4'
8537      Flag 4
8539 `f5'
8540      Flag 5
8542 `f6'
8543      Flag 6
8545 `f7'
8546      Flag 7
8549      Same as flag 4 (saturation flag)
8552      Same as flag 5 (overflow flag)
8554 `va'
8555      Same as flag 6 (sticky overflow flag)
8558      Same as flag 7 (carry/borrow flag)
8561      Same as flag 7 (carry/borrow flag)
8563 \x1f
8564 File: as.info,  Node: D30V-Addressing,  Prev: D30V-Regs,  Up: D30V-Syntax
8566 9.9.2.6 Addressing Modes
8567 ........................
8569 `as' understands the following addressing modes for the D30V.  `RN' in
8570 the following refers to any of the numbered registers, but _not_ the
8571 control registers.
8572 `RN'
8573      Register direct
8575 `@RN'
8576      Register indirect
8578 `@RN+'
8579      Register indirect with post-increment
8581 `@RN-'
8582      Register indirect with post-decrement
8584 `@-SP'
8585      Register indirect with pre-decrement
8587 `@(DISP, RN)'
8588      Register indirect with displacement
8590 `ADDR'
8591      PC relative address (for branch or rep).
8593 `#IMM'
8594      Immediate data (the `#' is optional and ignored)
8596 \x1f
8597 File: as.info,  Node: D30V-Float,  Next: D30V-Opcodes,  Prev: D30V-Syntax,  Up: D30V-Dependent
8599 9.9.3 Floating Point
8600 --------------------
8602 The D30V has no hardware floating point, but the `.float' and `.double'
8603 directives generates IEEE floating-point numbers for compatibility with
8604 other development tools.
8606 \x1f
8607 File: as.info,  Node: D30V-Opcodes,  Prev: D30V-Float,  Up: D30V-Dependent
8609 9.9.4 Opcodes
8610 -------------
8612 For detailed information on the D30V machine instruction set, see `D30V
8613 Architecture: A VLIW Microprocessor for Multimedia Applications'
8614 (Mitsubishi Electric Corp.).  `as' implements all the standard D30V
8615 opcodes.  The only changes are those described in the section on size
8616 modifiers
8618 \x1f
8619 File: as.info,  Node: H8/300-Dependent,  Next: HPPA-Dependent,  Prev: D30V-Dependent,  Up: Machine Dependencies
8621 9.10 H8/300 Dependent Features
8622 ==============================
8624 * Menu:
8626 * H8/300 Options::              Options
8627 * H8/300 Syntax::               Syntax
8628 * H8/300 Floating Point::       Floating Point
8629 * H8/300 Directives::           H8/300 Machine Directives
8630 * H8/300 Opcodes::              Opcodes
8632 \x1f
8633 File: as.info,  Node: H8/300 Options,  Next: H8/300 Syntax,  Up: H8/300-Dependent
8635 9.10.1 Options
8636 --------------
8638 The Renesas H8/300 version of `as' has one machine-dependent option:
8640 `-h-tick-hex'
8641      Support H'00 style hex constants in addition to 0x00 style.
8644 \x1f
8645 File: as.info,  Node: H8/300 Syntax,  Next: H8/300 Floating Point,  Prev: H8/300 Options,  Up: H8/300-Dependent
8647 9.10.2 Syntax
8648 -------------
8650 * Menu:
8652 * H8/300-Chars::                Special Characters
8653 * H8/300-Regs::                 Register Names
8654 * H8/300-Addressing::           Addressing Modes
8656 \x1f
8657 File: as.info,  Node: H8/300-Chars,  Next: H8/300-Regs,  Up: H8/300 Syntax
8659 9.10.2.1 Special Characters
8660 ...........................
8662 `;' is the line comment character.
8664    `$' can be used instead of a newline to separate statements.
8665 Therefore _you may not use `$' in symbol names_ on the H8/300.
8667 \x1f
8668 File: as.info,  Node: H8/300-Regs,  Next: H8/300-Addressing,  Prev: H8/300-Chars,  Up: H8/300 Syntax
8670 9.10.2.2 Register Names
8671 .......................
8673 You can use predefined symbols of the form `rNh' and `rNl' to refer to
8674 the H8/300 registers as sixteen 8-bit general-purpose registers.  N is
8675 a digit from `0' to `7'); for instance, both `r0h' and `r7l' are valid
8676 register names.
8678    You can also use the eight predefined symbols `rN' to refer to the
8679 H8/300 registers as 16-bit registers (you must use this form for
8680 addressing).
8682    On the H8/300H, you can also use the eight predefined symbols `erN'
8683 (`er0' ... `er7') to refer to the 32-bit general purpose registers.
8685    The two control registers are called `pc' (program counter; a 16-bit
8686 register, except on the H8/300H where it is 24 bits) and `ccr'
8687 (condition code register; an 8-bit register).  `r7' is used as the
8688 stack pointer, and can also be called `sp'.
8690 \x1f
8691 File: as.info,  Node: H8/300-Addressing,  Prev: H8/300-Regs,  Up: H8/300 Syntax
8693 9.10.2.3 Addressing Modes
8694 .........................
8696 as understands the following addressing modes for the H8/300:
8697 `rN'
8698      Register direct
8700 `@rN'
8701      Register indirect
8703 `@(D, rN)'
8704 `@(D:16, rN)'
8705 `@(D:24, rN)'
8706      Register indirect: 16-bit or 24-bit displacement D from register
8707      N.  (24-bit displacements are only meaningful on the H8/300H.)
8709 `@rN+'
8710      Register indirect with post-increment
8712 `@-rN'
8713      Register indirect with pre-decrement
8715 ``@'AA'
8716 ``@'AA:8'
8717 ``@'AA:16'
8718 ``@'AA:24'
8719      Absolute address `aa'.  (The address size `:24' only makes sense
8720      on the H8/300H.)
8722 `#XX'
8723 `#XX:8'
8724 `#XX:16'
8725 `#XX:32'
8726      Immediate data XX.  You may specify the `:8', `:16', or `:32' for
8727      clarity, if you wish; but `as' neither requires this nor uses
8728      it--the data size required is taken from context.
8730 ``@'`@'AA'
8731 ``@'`@'AA:8'
8732      Memory indirect.  You may specify the `:8' for clarity, if you
8733      wish; but `as' neither requires this nor uses it.
8735 \x1f
8736 File: as.info,  Node: H8/300 Floating Point,  Next: H8/300 Directives,  Prev: H8/300 Syntax,  Up: H8/300-Dependent
8738 9.10.3 Floating Point
8739 ---------------------
8741 The H8/300 family has no hardware floating point, but the `.float'
8742 directive generates IEEE floating-point numbers for compatibility with
8743 other development tools.
8745 \x1f
8746 File: as.info,  Node: H8/300 Directives,  Next: H8/300 Opcodes,  Prev: H8/300 Floating Point,  Up: H8/300-Dependent
8748 9.10.4 H8/300 Machine Directives
8749 --------------------------------
8751 `as' has the following machine-dependent directives for the H8/300:
8753 `.h8300h'
8754      Recognize and emit additional instructions for the H8/300H
8755      variant, and also make `.int' emit 32-bit numbers rather than the
8756      usual (16-bit) for the H8/300 family.
8758 `.h8300s'
8759      Recognize and emit additional instructions for the H8S variant, and
8760      also make `.int' emit 32-bit numbers rather than the usual (16-bit)
8761      for the H8/300 family.
8763 `.h8300hn'
8764      Recognize and emit additional instructions for the H8/300H variant
8765      in normal mode, and also make `.int' emit 32-bit numbers rather
8766      than the usual (16-bit) for the H8/300 family.
8768 `.h8300sn'
8769      Recognize and emit additional instructions for the H8S variant in
8770      normal mode, and also make `.int' emit 32-bit numbers rather than
8771      the usual (16-bit) for the H8/300 family.
8773    On the H8/300 family (including the H8/300H) `.word' directives
8774 generate 16-bit numbers.
8776 \x1f
8777 File: as.info,  Node: H8/300 Opcodes,  Prev: H8/300 Directives,  Up: H8/300-Dependent
8779 9.10.5 Opcodes
8780 --------------
8782 For detailed information on the H8/300 machine instruction set, see
8783 `H8/300 Series Programming Manual'.  For information specific to the
8784 H8/300H, see `H8/300H Series Programming Manual' (Renesas).
8786    `as' implements all the standard H8/300 opcodes.  No additional
8787 pseudo-instructions are needed on this family.
8789    The following table summarizes the H8/300 opcodes, and their
8790 arguments.  Entries marked `*' are opcodes used only on the H8/300H.
8792               Legend:
8793                  Rs   source register
8794                  Rd   destination register
8795                  abs  absolute address
8796                  imm  immediate data
8797               disp:N  N-bit displacement from a register
8798              pcrel:N  N-bit displacement relative to program counter
8800         add.b #imm,rd              *  andc #imm,ccr
8801         add.b rs,rd                   band #imm,rd
8802         add.w rs,rd                   band #imm,@rd
8803      *  add.w #imm,rd                 band #imm,@abs:8
8804      *  add.l rs,rd                   bra  pcrel:8
8805      *  add.l #imm,rd              *  bra  pcrel:16
8806         adds #imm,rd                  bt   pcrel:8
8807         addx #imm,rd               *  bt   pcrel:16
8808         addx rs,rd                    brn  pcrel:8
8809         and.b #imm,rd              *  brn  pcrel:16
8810         and.b rs,rd                   bf   pcrel:8
8811      *  and.w rs,rd                *  bf   pcrel:16
8812      *  and.w #imm,rd                 bhi  pcrel:8
8813      *  and.l #imm,rd              *  bhi  pcrel:16
8814      *  and.l rs,rd                   bls  pcrel:8
8816      *  bls  pcrel:16                 bld  #imm,rd
8817         bcc  pcrel:8                  bld  #imm,@rd
8818      *  bcc  pcrel:16                 bld  #imm,@abs:8
8819         bhs  pcrel:8                  bnot #imm,rd
8820      *  bhs  pcrel:16                 bnot #imm,@rd
8821         bcs  pcrel:8                  bnot #imm,@abs:8
8822      *  bcs  pcrel:16                 bnot rs,rd
8823         blo  pcrel:8                  bnot rs,@rd
8824      *  blo  pcrel:16                 bnot rs,@abs:8
8825         bne  pcrel:8                  bor  #imm,rd
8826      *  bne  pcrel:16                 bor  #imm,@rd
8827         beq  pcrel:8                  bor  #imm,@abs:8
8828      *  beq  pcrel:16                 bset #imm,rd
8829         bvc  pcrel:8                  bset #imm,@rd
8830      *  bvc  pcrel:16                 bset #imm,@abs:8
8831         bvs  pcrel:8                  bset rs,rd
8832      *  bvs  pcrel:16                 bset rs,@rd
8833         bpl  pcrel:8                  bset rs,@abs:8
8834      *  bpl  pcrel:16                 bsr  pcrel:8
8835         bmi  pcrel:8                  bsr  pcrel:16
8836      *  bmi  pcrel:16                 bst  #imm,rd
8837         bge  pcrel:8                  bst  #imm,@rd
8838      *  bge  pcrel:16                 bst  #imm,@abs:8
8839         blt  pcrel:8                  btst #imm,rd
8840      *  blt  pcrel:16                 btst #imm,@rd
8841         bgt  pcrel:8                  btst #imm,@abs:8
8842      *  bgt  pcrel:16                 btst rs,rd
8843         ble  pcrel:8                  btst rs,@rd
8844      *  ble  pcrel:16                 btst rs,@abs:8
8845         bclr #imm,rd                  bxor #imm,rd
8846         bclr #imm,@rd                 bxor #imm,@rd
8847         bclr #imm,@abs:8              bxor #imm,@abs:8
8848         bclr rs,rd                    cmp.b #imm,rd
8849         bclr rs,@rd                   cmp.b rs,rd
8850         bclr rs,@abs:8                cmp.w rs,rd
8851         biand #imm,rd                 cmp.w rs,rd
8852         biand #imm,@rd             *  cmp.w #imm,rd
8853         biand #imm,@abs:8          *  cmp.l #imm,rd
8854         bild #imm,rd               *  cmp.l rs,rd
8855         bild #imm,@rd                 daa  rs
8856         bild #imm,@abs:8              das  rs
8857         bior #imm,rd                  dec.b rs
8858         bior #imm,@rd              *  dec.w #imm,rd
8859         bior #imm,@abs:8           *  dec.l #imm,rd
8860         bist #imm,rd                  divxu.b rs,rd
8861         bist #imm,@rd              *  divxu.w rs,rd
8862         bist #imm,@abs:8           *  divxs.b rs,rd
8863         bixor #imm,rd              *  divxs.w rs,rd
8864         bixor #imm,@rd                eepmov
8865         bixor #imm,@abs:8          *  eepmovw
8867      *  exts.w rd                     mov.w rs,@abs:16
8868      *  exts.l rd                  *  mov.l #imm,rd
8869      *  extu.w rd                  *  mov.l rs,rd
8870      *  extu.l rd                  *  mov.l @rs,rd
8871         inc  rs                    *  mov.l @(disp:16,rs),rd
8872      *  inc.w #imm,rd              *  mov.l @(disp:24,rs),rd
8873      *  inc.l #imm,rd              *  mov.l @rs+,rd
8874         jmp  @rs                   *  mov.l @abs:16,rd
8875         jmp  abs                   *  mov.l @abs:24,rd
8876         jmp  @@abs:8               *  mov.l rs,@rd
8877         jsr  @rs                   *  mov.l rs,@(disp:16,rd)
8878         jsr  abs                   *  mov.l rs,@(disp:24,rd)
8879         jsr  @@abs:8               *  mov.l rs,@-rd
8880         ldc  #imm,ccr              *  mov.l rs,@abs:16
8881         ldc  rs,ccr                *  mov.l rs,@abs:24
8882      *  ldc  @abs:16,ccr              movfpe @abs:16,rd
8883      *  ldc  @abs:24,ccr              movtpe rs,@abs:16
8884      *  ldc  @(disp:16,rs),ccr        mulxu.b rs,rd
8885      *  ldc  @(disp:24,rs),ccr     *  mulxu.w rs,rd
8886      *  ldc  @rs+,ccr              *  mulxs.b rs,rd
8887      *  ldc  @rs,ccr               *  mulxs.w rs,rd
8888      *  mov.b @(disp:24,rs),rd        neg.b rs
8889      *  mov.b rs,@(disp:24,rd)     *  neg.w rs
8890         mov.b @abs:16,rd           *  neg.l rs
8891         mov.b rs,rd                   nop
8892         mov.b @abs:8,rd               not.b rs
8893         mov.b rs,@abs:8            *  not.w rs
8894         mov.b rs,rd                *  not.l rs
8895         mov.b #imm,rd                 or.b #imm,rd
8896         mov.b @rs,rd                  or.b rs,rd
8897         mov.b @(disp:16,rs),rd     *  or.w #imm,rd
8898         mov.b @rs+,rd              *  or.w rs,rd
8899         mov.b @abs:8,rd            *  or.l #imm,rd
8900         mov.b rs,@rd               *  or.l rs,rd
8901         mov.b rs,@(disp:16,rd)        orc  #imm,ccr
8902         mov.b rs,@-rd                 pop.w rs
8903         mov.b rs,@abs:8            *  pop.l rs
8904         mov.w rs,@rd                  push.w rs
8905      *  mov.w @(disp:24,rs),rd     *  push.l rs
8906      *  mov.w rs,@(disp:24,rd)        rotl.b rs
8907      *  mov.w @abs:24,rd           *  rotl.w rs
8908      *  mov.w rs,@abs:24           *  rotl.l rs
8909         mov.w rs,rd                   rotr.b rs
8910         mov.w #imm,rd              *  rotr.w rs
8911         mov.w @rs,rd               *  rotr.l rs
8912         mov.w @(disp:16,rs),rd        rotxl.b rs
8913         mov.w @rs+,rd              *  rotxl.w rs
8914         mov.w @abs:16,rd           *  rotxl.l rs
8915         mov.w rs,@(disp:16,rd)        rotxr.b rs
8916         mov.w rs,@-rd              *  rotxr.w rs
8918      *  rotxr.l rs                 *  stc  ccr,@(disp:24,rd)
8919         bpt                        *  stc  ccr,@-rd
8920         rte                        *  stc  ccr,@abs:16
8921         rts                        *  stc  ccr,@abs:24
8922         shal.b rs                     sub.b rs,rd
8923      *  shal.w rs                     sub.w rs,rd
8924      *  shal.l rs                  *  sub.w #imm,rd
8925         shar.b rs                  *  sub.l rs,rd
8926      *  shar.w rs                  *  sub.l #imm,rd
8927      *  shar.l rs                     subs #imm,rd
8928         shll.b rs                     subx #imm,rd
8929      *  shll.w rs                     subx rs,rd
8930      *  shll.l rs                  *  trapa #imm
8931         shlr.b rs                     xor  #imm,rd
8932      *  shlr.w rs                     xor  rs,rd
8933      *  shlr.l rs                  *  xor.w #imm,rd
8934         sleep                      *  xor.w rs,rd
8935         stc  ccr,rd                *  xor.l #imm,rd
8936      *  stc  ccr,@rs               *  xor.l rs,rd
8937      *  stc  ccr,@(disp:16,rd)        xorc #imm,ccr
8939    Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined
8940 with variants using the suffixes `.b', `.w', and `.l' to specify the
8941 size of a memory operand.  `as' supports these suffixes, but does not
8942 require them; since one of the operands is always a register, `as' can
8943 deduce the correct size.
8945    For example, since `r0' refers to a 16-bit register,
8946      mov    r0,@foo
8947 is equivalent to
8948      mov.w  r0,@foo
8950    If you use the size suffixes, `as' issues a warning when the suffix
8951 and the register size do not match.
8953 \x1f
8954 File: as.info,  Node: HPPA-Dependent,  Next: ESA/390-Dependent,  Prev: H8/300-Dependent,  Up: Machine Dependencies
8956 9.11 HPPA Dependent Features
8957 ============================
8959 * Menu:
8961 * HPPA Notes::                Notes
8962 * HPPA Options::              Options
8963 * HPPA Syntax::               Syntax
8964 * HPPA Floating Point::       Floating Point
8965 * HPPA Directives::           HPPA Machine Directives
8966 * HPPA Opcodes::              Opcodes
8968 \x1f
8969 File: as.info,  Node: HPPA Notes,  Next: HPPA Options,  Up: HPPA-Dependent
8971 9.11.1 Notes
8972 ------------
8974 As a back end for GNU CC `as' has been throughly tested and should work
8975 extremely well.  We have tested it only minimally on hand written
8976 assembly code and no one has tested it much on the assembly output from
8977 the HP compilers.
8979    The format of the debugging sections has changed since the original
8980 `as' port (version 1.3X) was released; therefore, you must rebuild all
8981 HPPA objects and libraries with the new assembler so that you can debug
8982 the final executable.
8984    The HPPA `as' port generates a small subset of the relocations
8985 available in the SOM and ELF object file formats.  Additional relocation
8986 support will be added as it becomes necessary.
8988 \x1f
8989 File: as.info,  Node: HPPA Options,  Next: HPPA Syntax,  Prev: HPPA Notes,  Up: HPPA-Dependent
8991 9.11.2 Options
8992 --------------
8994 `as' has no machine-dependent command-line options for the HPPA.
8996 \x1f
8997 File: as.info,  Node: HPPA Syntax,  Next: HPPA Floating Point,  Prev: HPPA Options,  Up: HPPA-Dependent
8999 9.11.3 Syntax
9000 -------------
9002 The assembler syntax closely follows the HPPA instruction set reference
9003 manual; assembler directives and general syntax closely follow the HPPA
9004 assembly language reference manual, with a few noteworthy differences.
9006    First, a colon may immediately follow a label definition.  This is
9007 simply for compatibility with how most assembly language programmers
9008 write code.
9010    Some obscure expression parsing problems may affect hand written
9011 code which uses the `spop' instructions, or code which makes significant
9012 use of the `!' line separator.
9014    `as' is much less forgiving about missing arguments and other
9015 similar oversights than the HP assembler.  `as' notifies you of missing
9016 arguments as syntax errors; this is regarded as a feature, not a bug.
9018    Finally, `as' allows you to use an external symbol without
9019 explicitly importing the symbol.  _Warning:_ in the future this will be
9020 an error for HPPA targets.
9022    Special characters for HPPA targets include:
9024    `;' is the line comment character.
9026    `!' can be used instead of a newline to separate statements.
9028    Since `$' has no special meaning, you may use it in symbol names.
9030 \x1f
9031 File: as.info,  Node: HPPA Floating Point,  Next: HPPA Directives,  Prev: HPPA Syntax,  Up: HPPA-Dependent
9033 9.11.4 Floating Point
9034 ---------------------
9036 The HPPA family uses IEEE floating-point numbers.
9038 \x1f
9039 File: as.info,  Node: HPPA Directives,  Next: HPPA Opcodes,  Prev: HPPA Floating Point,  Up: HPPA-Dependent
9041 9.11.5 HPPA Assembler Directives
9042 --------------------------------
9044 `as' for the HPPA supports many additional directives for compatibility
9045 with the native assembler.  This section describes them only briefly.
9046 For detailed information on HPPA-specific assembler directives, see
9047 `HP9000 Series 800 Assembly Language Reference Manual' (HP 92432-90001).
9049    `as' does _not_ support the following assembler directives described
9050 in the HP manual:
9052      .endm           .liston
9053      .enter          .locct
9054      .leave          .macro
9055      .listoff
9057    Beyond those implemented for compatibility, `as' supports one
9058 additional assembler directive for the HPPA: `.param'.  It conveys
9059 register argument locations for static functions.  Its syntax closely
9060 follows the `.export' directive.
9062    These are the additional directives in `as' for the HPPA:
9064 `.block N'
9065 `.blockz N'
9066      Reserve N bytes of storage, and initialize them to zero.
9068 `.call'
9069      Mark the beginning of a procedure call.  Only the special case
9070      with _no arguments_ is allowed.
9072 `.callinfo [ PARAM=VALUE, ... ]  [ FLAG, ... ]'
9073      Specify a number of parameters and flags that define the
9074      environment for a procedure.
9076      PARAM may be any of `frame' (frame size), `entry_gr' (end of
9077      general register range), `entry_fr' (end of float register range),
9078      `entry_sr' (end of space register range).
9080      The values for FLAG are `calls' or `caller' (proc has
9081      subroutines), `no_calls' (proc does not call subroutines),
9082      `save_rp' (preserve return pointer), `save_sp' (proc preserves
9083      stack pointer), `no_unwind' (do not unwind this proc), `hpux_int'
9084      (proc is interrupt routine).
9086 `.code'
9087      Assemble into the standard section called `$TEXT$', subsection
9088      `$CODE$'.
9090 `.copyright "STRING"'
9091      In the SOM object format, insert STRING into the object code,
9092      marked as a copyright string.
9094 `.copyright "STRING"'
9095      In the ELF object format, insert STRING into the object code,
9096      marked as a version string.
9098 `.enter'
9099      Not yet supported; the assembler rejects programs containing this
9100      directive.
9102 `.entry'
9103      Mark the beginning of a procedure.
9105 `.exit'
9106      Mark the end of a procedure.
9108 `.export NAME [ ,TYP ]  [ ,PARAM=R ]'
9109      Make a procedure NAME available to callers.  TYP, if present, must
9110      be one of `absolute', `code' (ELF only, not SOM), `data', `entry',
9111      `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'.
9113      PARAM, if present, provides either relocation information for the
9114      procedure arguments and result, or a privilege level.  PARAM may be
9115      `argwN' (where N ranges from `0' to `3', and indicates one of four
9116      one-word arguments); `rtnval' (the procedure's result); or
9117      `priv_lev' (privilege level).  For arguments or the result, R
9118      specifies how to relocate, and must be one of `no' (not
9119      relocatable), `gr' (argument is in general register), `fr' (in
9120      floating point register), or `fu' (upper half of float register).
9121      For `priv_lev', R is an integer.
9123 `.half N'
9124      Define a two-byte integer constant N; synonym for the portable
9125      `as' directive `.short'.
9127 `.import NAME [ ,TYP ]'
9128      Converse of `.export'; make a procedure available to call.  The
9129      arguments use the same conventions as the first two arguments for
9130      `.export'.
9132 `.label NAME'
9133      Define NAME as a label for the current assembly location.
9135 `.leave'
9136      Not yet supported; the assembler rejects programs containing this
9137      directive.
9139 `.origin LC'
9140      Advance location counter to LC. Synonym for the `as' portable
9141      directive `.org'.
9143 `.param NAME [ ,TYP ]  [ ,PARAM=R ]'
9144      Similar to `.export', but used for static procedures.
9146 `.proc'
9147      Use preceding the first statement of a procedure.
9149 `.procend'
9150      Use following the last statement of a procedure.
9152 `LABEL .reg EXPR'
9153      Synonym for `.equ'; define LABEL with the absolute expression EXPR
9154      as its value.
9156 `.space SECNAME [ ,PARAMS ]'
9157      Switch to section SECNAME, creating a new section by that name if
9158      necessary.  You may only use PARAMS when creating a new section,
9159      not when switching to an existing one.  SECNAME may identify a
9160      section by number rather than by name.
9162      If specified, the list PARAMS declares attributes of the section,
9163      identified by keywords.  The keywords recognized are `spnum=EXP'
9164      (identify this section by the number EXP, an absolute expression),
9165      `sort=EXP' (order sections according to this sort key when linking;
9166      EXP is an absolute expression), `unloadable' (section contains no
9167      loadable data), `notdefined' (this section defined elsewhere), and
9168      `private' (data in this section not available to other programs).
9170 `.spnum SECNAM'
9171      Allocate four bytes of storage, and initialize them with the
9172      section number of the section named SECNAM.  (You can define the
9173      section number with the HPPA `.space' directive.)
9175 `.string "STR"'
9176      Copy the characters in the string STR to the object file.  *Note
9177      Strings: Strings, for information on escape sequences you can use
9178      in `as' strings.
9180      _Warning!_ The HPPA version of `.string' differs from the usual
9181      `as' definition: it does _not_ write a zero byte after copying STR.
9183 `.stringz "STR"'
9184      Like `.string', but appends a zero byte after copying STR to object
9185      file.
9187 `.subspa NAME [ ,PARAMS ]'
9188 `.nsubspa NAME [ ,PARAMS ]'
9189      Similar to `.space', but selects a subsection NAME within the
9190      current section.  You may only specify PARAMS when you create a
9191      subsection (in the first instance of `.subspa' for this NAME).
9193      If specified, the list PARAMS declares attributes of the
9194      subsection, identified by keywords.  The keywords recognized are
9195      `quad=EXPR' ("quadrant" for this subsection), `align=EXPR'
9196      (alignment for beginning of this subsection; a power of two),
9197      `access=EXPR' (value for "access rights" field), `sort=EXPR'
9198      (sorting order for this subspace in link), `code_only' (subsection
9199      contains only code), `unloadable' (subsection cannot be loaded
9200      into memory), `comdat' (subsection is comdat), `common'
9201      (subsection is common block), `dup_comm' (subsection may have
9202      duplicate names), or `zero' (subsection is all zeros, do not write
9203      in object file).
9205      `.nsubspa' always creates a new subspace with the given name, even
9206      if one with the same name already exists.
9208      `comdat', `common' and `dup_comm' can be used to implement various
9209      flavors of one-only support when using the SOM linker.  The SOM
9210      linker only supports specific combinations of these flags.  The
9211      details are not documented.  A brief description is provided here.
9213      `comdat' provides a form of linkonce support.  It is useful for
9214      both code and data subspaces.  A `comdat' subspace has a key symbol
9215      marked by the `is_comdat' flag or `ST_COMDAT'.  Only the first
9216      subspace for any given key is selected.  The key symbol becomes
9217      universal in shared links.  This is similar to the behavior of
9218      `secondary_def' symbols.
9220      `common' provides Fortran named common support.  It is only useful
9221      for data subspaces.  Symbols with the flag `is_common' retain this
9222      flag in shared links.  Referencing a `is_common' symbol in a shared
9223      library from outside the library doesn't work.  Thus, `is_common'
9224      symbols must be output whenever they are needed.
9226      `common' and `dup_comm' together provide Cobol common support.
9227      The subspaces in this case must all be the same length.
9228      Otherwise, this support is similar to the Fortran common support.
9230      `dup_comm' by itself provides a type of one-only support for code.
9231      Only the first `dup_comm' subspace is selected.  There is a rather
9232      complex algorithm to compare subspaces.  Code symbols marked with
9233      the `dup_common' flag are hidden.  This support was intended for
9234      "C++ duplicate inlines".
9236      A simplified technique is used to mark the flags of symbols based
9237      on the flags of their subspace.  A symbol with the scope
9238      SS_UNIVERSAL and type ST_ENTRY, ST_CODE or ST_DATA is marked with
9239      the corresponding settings of `comdat', `common' and `dup_comm'
9240      from the subspace, respectively.  This avoids having to introduce
9241      additional directives to mark these symbols.  The HP assembler
9242      sets `is_common' from `common'.  However, it doesn't set the
9243      `dup_common' from `dup_comm'.  It doesn't have `comdat' support.
9245 `.version "STR"'
9246      Write STR as version identifier in object code.
9248 \x1f
9249 File: as.info,  Node: HPPA Opcodes,  Prev: HPPA Directives,  Up: HPPA-Dependent
9251 9.11.6 Opcodes
9252 --------------
9254 For detailed information on the HPPA machine instruction set, see
9255 `PA-RISC Architecture and Instruction Set Reference Manual' (HP
9256 09740-90039).
9258 \x1f
9259 File: as.info,  Node: ESA/390-Dependent,  Next: i386-Dependent,  Prev: HPPA-Dependent,  Up: Machine Dependencies
9261 9.12 ESA/390 Dependent Features
9262 ===============================
9264 * Menu:
9266 * ESA/390 Notes::                Notes
9267 * ESA/390 Options::              Options
9268 * ESA/390 Syntax::               Syntax
9269 * ESA/390 Floating Point::       Floating Point
9270 * ESA/390 Directives::           ESA/390 Machine Directives
9271 * ESA/390 Opcodes::              Opcodes
9273 \x1f
9274 File: as.info,  Node: ESA/390 Notes,  Next: ESA/390 Options,  Up: ESA/390-Dependent
9276 9.12.1 Notes
9277 ------------
9279 The ESA/390 `as' port is currently intended to be a back-end for the
9280 GNU CC compiler.  It is not HLASM compatible, although it does support
9281 a subset of some of the HLASM directives.  The only supported binary
9282 file format is ELF; none of the usual MVS/VM/OE/USS object file
9283 formats, such as ESD or XSD, are supported.
9285    When used with the GNU CC compiler, the ESA/390 `as' will produce
9286 correct, fully relocated, functional binaries, and has been used to
9287 compile and execute large projects.  However, many aspects should still
9288 be considered experimental; these include shared library support,
9289 dynamically loadable objects, and any relocation other than the 31-bit
9290 relocation.
9292 \x1f
9293 File: as.info,  Node: ESA/390 Options,  Next: ESA/390 Syntax,  Prev: ESA/390 Notes,  Up: ESA/390-Dependent
9295 9.12.2 Options
9296 --------------
9298 `as' has no machine-dependent command-line options for the ESA/390.
9300 \x1f
9301 File: as.info,  Node: ESA/390 Syntax,  Next: ESA/390 Floating Point,  Prev: ESA/390 Options,  Up: ESA/390-Dependent
9303 9.12.3 Syntax
9304 -------------
9306 The opcode/operand syntax follows the ESA/390 Principles of Operation
9307 manual; assembler directives and general syntax are loosely based on the
9308 prevailing AT&T/SVR4/ELF/Solaris style notation.  HLASM-style directives
9309 are _not_ supported for the most part, with the exception of those
9310 described herein.
9312    A leading dot in front of directives is optional, and the case of
9313 directives is ignored; thus for example, .using and USING have the same
9314 effect.
9316    A colon may immediately follow a label definition.  This is simply
9317 for compatibility with how most assembly language programmers write
9318 code.
9320    `#' is the line comment character.
9322    `;' can be used instead of a newline to separate statements.
9324    Since `$' has no special meaning, you may use it in symbol names.
9326    Registers can be given the symbolic names r0..r15, fp0, fp2, fp4,
9327 fp6.  By using thesse symbolic names, `as' can detect simple syntax
9328 errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca for
9329 r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base
9330 for r3 and rpgt or r.pgt for r4.
9332    `*' is the current location counter.  Unlike `.' it is always
9333 relative to the last USING directive.  Note that this means that
9334 expressions cannot use multiplication, as any occurrence of `*' will be
9335 interpreted as a location counter.
9337    All labels are relative to the last USING.  Thus, branches to a label
9338 always imply the use of base+displacement.
9340    Many of the usual forms of address constants / address literals are
9341 supported.  Thus,
9342         .using  *,r3
9343         L       r15,=A(some_routine)
9344         LM      r6,r7,=V(some_longlong_extern)
9345         A       r1,=F'12'
9346         AH      r0,=H'42'
9347         ME      r6,=E'3.1416'
9348         MD      r6,=D'3.14159265358979'
9349         O       r6,=XL4'cacad0d0'
9350         .ltorg
9351    should all behave as expected: that is, an entry in the literal pool
9352 will be created (or reused if it already exists), and the instruction
9353 operands will be the displacement into the literal pool using the
9354 current base register (as last declared with the `.using' directive).
9356 \x1f
9357 File: as.info,  Node: ESA/390 Floating Point,  Next: ESA/390 Directives,  Prev: ESA/390 Syntax,  Up: ESA/390-Dependent
9359 9.12.4 Floating Point
9360 ---------------------
9362 The assembler generates only IEEE floating-point numbers.  The older
9363 floating point formats are not supported.
9365 \x1f
9366 File: as.info,  Node: ESA/390 Directives,  Next: ESA/390 Opcodes,  Prev: ESA/390 Floating Point,  Up: ESA/390-Dependent
9368 9.12.5 ESA/390 Assembler Directives
9369 -----------------------------------
9371 `as' for the ESA/390 supports all of the standard ELF/SVR4 assembler
9372 directives that are documented in the main part of this documentation.
9373 Several additional directives are supported in order to implement the
9374 ESA/390 addressing model.  The most important of these are `.using' and
9375 `.ltorg'
9377    These are the additional directives in `as' for the ESA/390:
9379 `.dc'
9380      A small subset of the usual DC directive is supported.
9382 `.drop REGNO'
9383      Stop using REGNO as the base register.  The REGNO must have been
9384      previously declared with a `.using' directive in the same section
9385      as the current section.
9387 `.ebcdic STRING'
9388      Emit the EBCDIC equivalent of the indicated string.  The emitted
9389      string will be null terminated.  Note that the directives
9390      `.string' etc. emit ascii strings by default.
9392 `EQU'
9393      The standard HLASM-style EQU directive is not supported; however,
9394      the standard `as' directive .equ can be used to the same effect.
9396 `.ltorg'
9397      Dump the literal pool accumulated so far; begin a new literal pool.
9398      The literal pool will be written in the current section; in order
9399      to generate correct assembly, a `.using' must have been previously
9400      specified in the same section.
9402 `.using EXPR,REGNO'
9403      Use REGNO as the base register for all subsequent RX, RS, and SS
9404      form instructions. The EXPR will be evaluated to obtain the base
9405      address; usually, EXPR will merely be `*'.
9407      This assembler allows two `.using' directives to be simultaneously
9408      outstanding, one in the `.text' section, and one in another section
9409      (typically, the `.data' section).  This feature allows dynamically
9410      loaded objects to be implemented in a relatively straightforward
9411      way.  A `.using' directive must always be specified in the `.text'
9412      section; this will specify the base register that will be used for
9413      branches in the `.text' section.  A second `.using' may be
9414      specified in another section; this will specify the base register
9415      that is used for non-label address literals.  When a second
9416      `.using' is specified, then the subsequent `.ltorg' must be put in
9417      the same section; otherwise an error will result.
9419      Thus, for example, the following code uses `r3' to address branch
9420      targets and `r4' to address the literal pool, which has been
9421      written to the `.data' section.  The is, the constants
9422      `=A(some_routine)', `=H'42'' and `=E'3.1416'' will all appear in
9423      the `.data' section.
9425           .data
9426                 .using  LITPOOL,r4
9427           .text
9428                 BASR    r3,0
9429                 .using  *,r3
9430                   B       START
9431                 .long   LITPOOL
9432           START:
9433                 L       r4,4(,r3)
9434                 L       r15,=A(some_routine)
9435                 LTR     r15,r15
9436                 BNE     LABEL
9437                 AH      r0,=H'42'
9438           LABEL:
9439                 ME      r6,=E'3.1416'
9440           .data
9441           LITPOOL:
9442                 .ltorg
9444      Note that this dual-`.using' directive semantics extends and is
9445      not compatible with HLASM semantics.  Note that this assembler
9446      directive does not support the full range of HLASM semantics.
9449 \x1f
9450 File: as.info,  Node: ESA/390 Opcodes,  Prev: ESA/390 Directives,  Up: ESA/390-Dependent
9452 9.12.6 Opcodes
9453 --------------
9455 For detailed information on the ESA/390 machine instruction set, see
9456 `ESA/390 Principles of Operation' (IBM Publication Number DZ9AR004).
9458 \x1f
9459 File: as.info,  Node: i386-Dependent,  Next: i860-Dependent,  Prev: ESA/390-Dependent,  Up: Machine Dependencies
9461 9.13 80386 Dependent Features
9462 =============================
9464    The i386 version `as' supports both the original Intel 386
9465 architecture in both 16 and 32-bit mode as well as AMD x86-64
9466 architecture extending the Intel architecture to 64-bits.
9468 * Menu:
9470 * i386-Options::                Options
9471 * i386-Directives::             X86 specific directives
9472 * i386-Syntax::                 AT&T Syntax versus Intel Syntax
9473 * i386-Mnemonics::              Instruction Naming
9474 * i386-Regs::                   Register Naming
9475 * i386-Prefixes::               Instruction Prefixes
9476 * i386-Memory::                 Memory References
9477 * i386-Jumps::                  Handling of Jump Instructions
9478 * i386-Float::                  Floating Point
9479 * i386-SIMD::                   Intel's MMX and AMD's 3DNow! SIMD Operations
9480 * i386-16bit::                  Writing 16-bit Code
9481 * i386-Arch::                   Specifying an x86 CPU architecture
9482 * i386-Bugs::                   AT&T Syntax bugs
9483 * i386-Notes::                  Notes
9485 \x1f
9486 File: as.info,  Node: i386-Options,  Next: i386-Directives,  Up: i386-Dependent
9488 9.13.1 Options
9489 --------------
9491 The i386 version of `as' has a few machine dependent options:
9493 `--32 | --64'
9494      Select the word size, either 32 bits or 64 bits. Selecting 32-bit
9495      implies Intel i386 architecture, while 64-bit implies AMD x86-64
9496      architecture.
9498      These options are only available with the ELF object file format,
9499      and require that the necessary BFD support has been included (on a
9500      32-bit platform you have to add -enable-64-bit-bfd to configure
9501      enable 64-bit usage and use x86-64 as target platform).
9503 `-n'
9504      By default, x86 GAS replaces multiple nop instructions used for
9505      alignment within code sections with multi-byte nop instructions
9506      such as leal 0(%esi,1),%esi.  This switch disables the
9507      optimization.
9509 `--divide'
9510      On SVR4-derived platforms, the character `/' is treated as a
9511      comment character, which means that it cannot be used in
9512      expressions.  The `--divide' option turns `/' into a normal
9513      character.  This does not disable `/' at the beginning of a line
9514      starting a comment, or affect using `#' for starting a comment.
9516 `-march=CPU[+EXTENSION...]'
9517      This option specifies the target processor.  The assembler will
9518      issue an error message if an attempt is made to assemble an
9519      instruction which will not execute on the target processor.  The
9520      following processor names are recognized: `i8086', `i186', `i286',
9521      `i386', `i486', `i586', `i686', `pentium', `pentiumpro',
9522      `pentiumii', `pentiumiii', `pentium4', `prescott', `nocona',
9523      `core', `core2', `corei7', `l1om', `k6', `k6_2', `athlon',
9524      `opteron', `k8', `amdfam10', `generic32' and `generic64'.
9526      In addition to the basic instruction set, the assembler can be
9527      told to accept various extension mnemonics.  For example,
9528      `-march=i686+sse4+vmx' extends I686 with SSE4 and VMX.  The
9529      following extensions are currently supported: `8087', `287', `387',
9530      `no87', `mmx', `nommx', `sse', `sse2', `sse3', `ssse3', `sse4.1',
9531      `sse4.2', `sse4', `nosse', `avx', `noavx', `vmx', `smx', `xsave',
9532      `aes', `pclmul', `fma', `movbe', `ept', `clflush', `syscall',
9533      `rdtscp', `3dnow', `3dnowa', `sse4a', `sse5', `svme', `abm' and
9534      `padlock'.  Note that rather than extending a basic instruction
9535      set, the extension mnemonics starting with `no' revoke the
9536      respective functionality.
9538      When the `.arch' directive is used with `-march', the `.arch'
9539      directive will take precedent.
9541 `-mtune=CPU'
9542      This option specifies a processor to optimize for. When used in
9543      conjunction with the `-march' option, only instructions of the
9544      processor specified by the `-march' option will be generated.
9546      Valid CPU values are identical to the processor list of
9547      `-march=CPU'.
9549 `-msse2avx'
9550      This option specifies that the assembler should encode SSE
9551      instructions with VEX prefix.
9553 `-msse-check=NONE'
9555 `-msse-check=WARNING'
9557 `-msse-check=ERROR'
9558      These options control if the assembler should check SSE
9559      intructions.  `-msse-check=NONE' will make the assembler not to
9560      check SSE instructions,  which is the default.
9561      `-msse-check=WARNING' will make the assembler issue a warning for
9562      any SSE intruction.  `-msse-check=ERROR' will make the assembler
9563      issue an error for any SSE intruction.
9565 `-mmnemonic=ATT'
9567 `-mmnemonic=INTEL'
9568      This option specifies instruction mnemonic for matching
9569      instructions.  The `.att_mnemonic' and `.intel_mnemonic'
9570      directives will take precedent.
9572 `-msyntax=ATT'
9574 `-msyntax=INTEL'
9575      This option specifies instruction syntax when processing
9576      instructions.  The `.att_syntax' and `.intel_syntax' directives
9577      will take precedent.
9579 `-mnaked-reg'
9580      This opetion specifies that registers don't require a `%' prefix.
9581      The `.att_syntax' and `.intel_syntax' directives will take
9582      precedent.
9585 \x1f
9586 File: as.info,  Node: i386-Directives,  Next: i386-Syntax,  Prev: i386-Options,  Up: i386-Dependent
9588 9.13.2 x86 specific Directives
9589 ------------------------------
9591 `.lcomm SYMBOL , LENGTH[, ALIGNMENT]'
9592      Reserve LENGTH (an absolute expression) bytes for a local common
9593      denoted by SYMBOL.  The section and value of SYMBOL are those of
9594      the new local common.  The addresses are allocated in the bss
9595      section, so that at run-time the bytes start off zeroed.  Since
9596      SYMBOL is not declared global, it is normally not visible to `ld'.
9597      The optional third parameter, ALIGNMENT, specifies the desired
9598      alignment of the symbol in the bss section.
9600      This directive is only available for COFF based x86 targets.
9603 \x1f
9604 File: as.info,  Node: i386-Syntax,  Next: i386-Mnemonics,  Prev: i386-Directives,  Up: i386-Dependent
9606 9.13.3 AT&T Syntax versus Intel Syntax
9607 --------------------------------------
9609 `as' now supports assembly using Intel assembler syntax.
9610 `.intel_syntax' selects Intel mode, and `.att_syntax' switches back to
9611 the usual AT&T mode for compatibility with the output of `gcc'.  Either
9612 of these directives may have an optional argument, `prefix', or
9613 `noprefix' specifying whether registers require a `%' prefix.  AT&T
9614 System V/386 assembler syntax is quite different from Intel syntax.  We
9615 mention these differences because almost all 80386 documents use Intel
9616 syntax.  Notable differences between the two syntaxes are:
9618    * AT&T immediate operands are preceded by `$'; Intel immediate
9619      operands are undelimited (Intel `push 4' is AT&T `pushl $4').
9620      AT&T register operands are preceded by `%'; Intel register operands
9621      are undelimited.  AT&T absolute (as opposed to PC relative)
9622      jump/call operands are prefixed by `*'; they are undelimited in
9623      Intel syntax.
9625    * AT&T and Intel syntax use the opposite order for source and
9626      destination operands.  Intel `add eax, 4' is `addl $4, %eax'.  The
9627      `source, dest' convention is maintained for compatibility with
9628      previous Unix assemblers.  Note that `bound', `invlpga', and
9629      instructions with 2 immediate operands, such as the `enter'
9630      instruction, do _not_ have reversed order.  *Note i386-Bugs::.
9632    * In AT&T syntax the size of memory operands is determined from the
9633      last character of the instruction mnemonic.  Mnemonic suffixes of
9634      `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long
9635      (32-bit) and quadruple word (64-bit) memory references.  Intel
9636      syntax accomplishes this by prefixing memory operands (_not_ the
9637      instruction mnemonics) with `byte ptr', `word ptr', `dword ptr'
9638      and `qword ptr'.  Thus, Intel `mov al, byte ptr FOO' is `movb FOO,
9639      %al' in AT&T syntax.
9641    * Immediate form long jumps and calls are `lcall/ljmp $SECTION,
9642      $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far
9643      SECTION:OFFSET'.  Also, the far return instruction is `lret
9644      $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far
9645      STACK-ADJUST'.
9647    * The AT&T assembler does not provide support for multiple section
9648      programs.  Unix style systems expect all programs to be single
9649      sections.
9651 \x1f
9652 File: as.info,  Node: i386-Mnemonics,  Next: i386-Regs,  Prev: i386-Syntax,  Up: i386-Dependent
9654 9.13.4 Instruction Naming
9655 -------------------------
9657 Instruction mnemonics are suffixed with one character modifiers which
9658 specify the size of operands.  The letters `b', `w', `l' and `q'
9659 specify byte, word, long and quadruple word operands.  If no suffix is
9660 specified by an instruction then `as' tries to fill in the missing
9661 suffix based on the destination register operand (the last one by
9662 convention).  Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx';
9663 also, `mov $1, %bx' is equivalent to `movw $1, bx'.  Note that this is
9664 incompatible with the AT&T Unix assembler which assumes that a missing
9665 mnemonic suffix implies long operand size.  (This incompatibility does
9666 not affect compiler output since compilers always explicitly specify
9667 the mnemonic suffix.)
9669    Almost all instructions have the same names in AT&T and Intel format.
9670 There are a few exceptions.  The sign extend and zero extend
9671 instructions need two sizes to specify them.  They need a size to
9672 sign/zero extend _from_ and a size to zero extend _to_.  This is
9673 accomplished by using two instruction mnemonic suffixes in AT&T syntax.
9674 Base names for sign extend and zero extend are `movs...' and `movz...'
9675 in AT&T syntax (`movsx' and `movzx' in Intel syntax).  The instruction
9676 mnemonic suffixes are tacked on to this base name, the _from_ suffix
9677 before the _to_ suffix.  Thus, `movsbl %al, %edx' is AT&T syntax for
9678 "move sign extend _from_ %al _to_ %edx."  Possible suffixes, thus, are
9679 `bl' (from byte to long), `bw' (from byte to word), `wl' (from word to
9680 long), `bq' (from byte to quadruple word), `wq' (from word to quadruple
9681 word), and `lq' (from long to quadruple word).
9683    Different encoding options can be specified via optional mnemonic
9684 suffix.  `.s' suffix swaps 2 register operands in encoding when moving
9685 from one register to another.
9687    The Intel-syntax conversion instructions
9689    * `cbw' -- sign-extend byte in `%al' to word in `%ax',
9691    * `cwde' -- sign-extend word in `%ax' to long in `%eax',
9693    * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax',
9695    * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax',
9697    * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64
9698      only),
9700    * `cqo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax'
9701      (x86-64 only),
9703 are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T
9704 naming.  `as' accepts either naming for these instructions.
9706    Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax,
9707 but are `call far' and `jump far' in Intel convention.
9709 9.13.5 AT&T Mnemonic versus Intel Mnemonic
9710 ------------------------------------------
9712 `as' supports assembly using Intel mnemonic.  `.intel_mnemonic' selects
9713 Intel mnemonic with Intel syntax, and `.att_mnemonic' switches back to
9714 the usual AT&T mnemonic with AT&T syntax for compatibility with the
9715 output of `gcc'.  Several x87 instructions, `fadd', `fdiv', `fdivp',
9716 `fdivr', `fdivrp', `fmul', `fsub', `fsubp', `fsubr' and `fsubrp',  are
9717 implemented in AT&T System V/386 assembler with different mnemonics
9718 from those in Intel IA32 specification.  `gcc' generates those
9719 instructions with AT&T mnemonic.
9721 \x1f
9722 File: as.info,  Node: i386-Regs,  Next: i386-Prefixes,  Prev: i386-Mnemonics,  Up: i386-Dependent
9724 9.13.6 Register Naming
9725 ----------------------
9727 Register operands are always prefixed with `%'.  The 80386 registers
9728 consist of
9730    * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx',
9731      `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp'
9732      (the stack pointer).
9734    * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di',
9735      `%si', `%bp', and `%sp'.
9737    * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl',
9738      `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax',
9739      `%bx', `%cx', and `%dx')
9741    * the 6 section registers `%cs' (code section), `%ds' (data
9742      section), `%ss' (stack section), `%es', `%fs', and `%gs'.
9744    * the 3 processor control registers `%cr0', `%cr2', and `%cr3'.
9746    * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and
9747      `%db7'.
9749    * the 2 test registers `%tr6' and `%tr7'.
9751    * the 8 floating point register stack `%st' or equivalently
9752      `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)',
9753      `%st(6)', and `%st(7)'.  These registers are overloaded by 8 MMX
9754      registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6'
9755      and `%mm7'.
9757    * the 8 SSE registers registers `%xmm0', `%xmm1', `%xmm2', `%xmm3',
9758      `%xmm4', `%xmm5', `%xmm6' and `%xmm7'.
9760    The AMD x86-64 architecture extends the register set by:
9762    * enhancing the 8 32-bit registers to 64-bit: `%rax' (the
9763      accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the
9764      frame pointer), `%rsp' (the stack pointer)
9766    * the 8 extended registers `%r8'-`%r15'.
9768    * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d'
9770    * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w'
9772    * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b'
9774    * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'.
9776    * the 8 debug registers: `%db8'-`%db15'.
9778    * the 8 SSE registers: `%xmm8'-`%xmm15'.
9780 \x1f
9781 File: as.info,  Node: i386-Prefixes,  Next: i386-Memory,  Prev: i386-Regs,  Up: i386-Dependent
9783 9.13.7 Instruction Prefixes
9784 ---------------------------
9786 Instruction prefixes are used to modify the following instruction.  They
9787 are used to repeat string instructions, to provide section overrides, to
9788 perform bus lock operations, and to change operand and address sizes.
9789 (Most instructions that normally operate on 32-bit operands will use
9790 16-bit operands if the instruction has an "operand size" prefix.)
9791 Instruction prefixes are best written on the same line as the
9792 instruction they act upon. For example, the `scas' (scan string)
9793 instruction is repeated with:
9795              repne scas %es:(%edi),%al
9797    You may also place prefixes on the lines immediately preceding the
9798 instruction, but this circumvents checks that `as' does with prefixes,
9799 and will not work with all prefixes.
9801    Here is a list of instruction prefixes:
9803    * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'.
9804      These are automatically added by specifying using the
9805      SECTION:MEMORY-OPERAND form for memory references.
9807    * Operand/Address size prefixes `data16' and `addr16' change 32-bit
9808      operands/addresses into 16-bit operands/addresses, while `data32'
9809      and `addr32' change 16-bit ones (in a `.code16' section) into
9810      32-bit operands/addresses.  These prefixes _must_ appear on the
9811      same line of code as the instruction they modify. For example, in
9812      a 16-bit `.code16' section, you might write:
9814                   addr32 jmpl *(%ebx)
9816    * The bus lock prefix `lock' inhibits interrupts during execution of
9817      the instruction it precedes.  (This is only valid with certain
9818      instructions; see a 80386 manual for details).
9820    * The wait for coprocessor prefix `wait' waits for the coprocessor to
9821      complete the current instruction.  This should never be needed for
9822      the 80386/80387 combination.
9824    * The `rep', `repe', and `repne' prefixes are added to string
9825      instructions to make them repeat `%ecx' times (`%cx' times if the
9826      current address size is 16-bits).  
9828    * The `rex' family of prefixes is used by x86-64 to encode
9829      extensions to i386 instruction set.  The `rex' prefix has four
9830      bits -- an operand size overwrite (`64') used to change operand
9831      size from 32-bit to 64-bit and X, Y and Z extensions bits used to
9832      extend the register set.
9834      You may write the `rex' prefixes directly. The `rex64xyz'
9835      instruction emits `rex' prefix with all the bits set.  By omitting
9836      the `64', `x', `y' or `z' you may write other prefixes as well.
9837      Normally, there is no need to write the prefixes explicitly, since
9838      gas will automatically generate them based on the instruction
9839      operands.
9841 \x1f
9842 File: as.info,  Node: i386-Memory,  Next: i386-Jumps,  Prev: i386-Prefixes,  Up: i386-Dependent
9844 9.13.8 Memory References
9845 ------------------------
9847 An Intel syntax indirect memory reference of the form
9849      SECTION:[BASE + INDEX*SCALE + DISP]
9851 is translated into the AT&T syntax
9853      SECTION:DISP(BASE, INDEX, SCALE)
9855 where BASE and INDEX are the optional 32-bit base and index registers,
9856 DISP is the optional displacement, and SCALE, taking the values 1, 2,
9857 4, and 8, multiplies INDEX to calculate the address of the operand.  If
9858 no SCALE is specified, SCALE is taken to be 1.  SECTION specifies the
9859 optional section register for the memory operand, and may override the
9860 default section register (see a 80386 manual for section register
9861 defaults). Note that section overrides in AT&T syntax _must_ be
9862 preceded by a `%'.  If you specify a section override which coincides
9863 with the default section register, `as' does _not_ output any section
9864 register override prefixes to assemble the given instruction.  Thus,
9865 section overrides can be specified to emphasize which section register
9866 is used for a given memory operand.
9868    Here are some examples of Intel and AT&T style memory references:
9870 AT&T: `-4(%ebp)', Intel:  `[ebp - 4]'
9871      BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default
9872      section is used (`%ss' for addressing with `%ebp' as the base
9873      register).  INDEX, SCALE are both missing.
9875 AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]'
9876      INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'.  All other
9877      fields are missing.  The section register here defaults to `%ds'.
9879 AT&T: `foo(,1)'; Intel `[foo]'
9880      This uses the value pointed to by `foo' as a memory operand.  Note
9881      that BASE and INDEX are both missing, but there is only _one_ `,'.
9882      This is a syntactic exception.
9884 AT&T: `%gs:foo'; Intel `gs:foo'
9885      This selects the contents of the variable `foo' with section
9886      register SECTION being `%gs'.
9888    Absolute (as opposed to PC relative) call and jump operands must be
9889 prefixed with `*'.  If no `*' is specified, `as' always chooses PC
9890 relative addressing for jump/call labels.
9892    Any instruction that has a memory operand, but no register operand,
9893 _must_ specify its size (byte, word, long, or quadruple) with an
9894 instruction mnemonic suffix (`b', `w', `l' or `q', respectively).
9896    The x86-64 architecture adds an RIP (instruction pointer relative)
9897 addressing.  This addressing mode is specified by using `rip' as a base
9898 register.  Only constant offsets are valid. For example:
9900 AT&T: `1234(%rip)', Intel: `[rip + 1234]'
9901      Points to the address 1234 bytes past the end of the current
9902      instruction.
9904 AT&T: `symbol(%rip)', Intel: `[rip + symbol]'
9905      Points to the `symbol' in RIP relative way, this is shorter than
9906      the default absolute addressing.
9908    Other addressing modes remain unchanged in x86-64 architecture,
9909 except registers used are 64-bit instead of 32-bit.
9911 \x1f
9912 File: as.info,  Node: i386-Jumps,  Next: i386-Float,  Prev: i386-Memory,  Up: i386-Dependent
9914 9.13.9 Handling of Jump Instructions
9915 ------------------------------------
9917 Jump instructions are always optimized to use the smallest possible
9918 displacements.  This is accomplished by using byte (8-bit) displacement
9919 jumps whenever the target is sufficiently close.  If a byte displacement
9920 is insufficient a long displacement is used.  We do not support word
9921 (16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump
9922 instruction with the `data16' instruction prefix), since the 80386
9923 insists upon masking `%eip' to 16 bits after the word displacement is
9924 added. (See also *note i386-Arch::)
9926    Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz'
9927 and `loopne' instructions only come in byte displacements, so that if
9928 you use these instructions (`gcc' does not use them) you may get an
9929 error message (and incorrect code).  The AT&T 80386 assembler tries to
9930 get around this problem by expanding `jcxz foo' to
9932               jcxz cx_zero
9933               jmp cx_nonzero
9934      cx_zero: jmp foo
9935      cx_nonzero:
9937 \x1f
9938 File: as.info,  Node: i386-Float,  Next: i386-SIMD,  Prev: i386-Jumps,  Up: i386-Dependent
9940 9.13.10 Floating Point
9941 ----------------------
9943 All 80387 floating point types except packed BCD are supported.  (BCD
9944 support may be added without much difficulty).  These data types are
9945 16-, 32-, and 64- bit integers, and single (32-bit), double (64-bit),
9946 and extended (80-bit) precision floating point.  Each supported type
9947 has an instruction mnemonic suffix and a constructor associated with
9948 it.  Instruction mnemonic suffixes specify the operand's data type.
9949 Constructors build these data types into memory.
9951    * Floating point constructors are `.float' or `.single', `.double',
9952      and `.tfloat' for 32-, 64-, and 80-bit formats.  These correspond
9953      to instruction mnemonic suffixes `s', `l', and `t'. `t' stands for
9954      80-bit (ten byte) real.  The 80387 only supports this format via
9955      the `fldt' (load 80-bit real to stack top) and `fstpt' (store
9956      80-bit real and pop stack) instructions.
9958    * Integer constructors are `.word', `.long' or `.int', and `.quad'
9959      for the 16-, 32-, and 64-bit integer formats.  The corresponding
9960      instruction mnemonic suffixes are `s' (single), `l' (long), and
9961      `q' (quad).  As with the 80-bit real format, the 64-bit `q' format
9962      is only present in the `fildq' (load quad integer to stack top)
9963      and `fistpq' (store quad integer and pop stack) instructions.
9965    Register to register operations should not use instruction mnemonic
9966 suffixes.  `fstl %st, %st(1)' will give a warning, and be assembled as
9967 if you wrote `fst %st, %st(1)', since all register to register
9968 operations use 80-bit floating point operands. (Contrast this with
9969 `fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating
9970 point format, then stores the result in the 4 byte location `mem')
9972 \x1f
9973 File: as.info,  Node: i386-SIMD,  Next: i386-16bit,  Prev: i386-Float,  Up: i386-Dependent
9975 9.13.11 Intel's MMX and AMD's 3DNow! SIMD Operations
9976 ----------------------------------------------------
9978 `as' supports Intel's MMX instruction set (SIMD instructions for
9979 integer data), available on Intel's Pentium MMX processors and Pentium
9980 II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and
9981 probably others.  It also supports AMD's 3DNow!  instruction set (SIMD
9982 instructions for 32-bit floating point data) available on AMD's K6-2
9983 processor and possibly others in the future.
9985    Currently, `as' does not support Intel's floating point SIMD, Katmai
9986 (KNI).
9988    The eight 64-bit MMX operands, also used by 3DNow!, are called
9989 `%mm0', `%mm1', ... `%mm7'.  They contain eight 8-bit integers, four
9990 16-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit
9991 floating point values.  The MMX registers cannot be used at the same
9992 time as the floating point stack.
9994    See Intel and AMD documentation, keeping in mind that the operand
9995 order in instructions is reversed from the Intel syntax.
9997 \x1f
9998 File: as.info,  Node: i386-16bit,  Next: i386-Arch,  Prev: i386-SIMD,  Up: i386-Dependent
10000 9.13.12 Writing 16-bit Code
10001 ---------------------------
10003 While `as' normally writes only "pure" 32-bit i386 code or 64-bit
10004 x86-64 code depending on the default configuration, it also supports
10005 writing code to run in real mode or in 16-bit protected mode code
10006 segments.  To do this, put a `.code16' or `.code16gcc' directive before
10007 the assembly language instructions to be run in 16-bit mode.  You can
10008 switch `as' back to writing normal 32-bit code with the `.code32'
10009 directive.
10011    `.code16gcc' provides experimental support for generating 16-bit
10012 code from gcc, and differs from `.code16' in that `call', `ret',
10013 `enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf'
10014 instructions default to 32-bit size.  This is so that the stack pointer
10015 is manipulated in the same way over function calls, allowing access to
10016 function parameters at the same stack offsets as in 32-bit mode.
10017 `.code16gcc' also automatically adds address size prefixes where
10018 necessary to use the 32-bit addressing modes that gcc generates.
10020    The code which `as' generates in 16-bit mode will not necessarily
10021 run on a 16-bit pre-80386 processor.  To write code that runs on such a
10022 processor, you must refrain from using _any_ 32-bit constructs which
10023 require `as' to output address or operand size prefixes.
10025    Note that writing 16-bit code instructions by explicitly specifying a
10026 prefix or an instruction mnemonic suffix within a 32-bit code section
10027 generates different machine instructions than those generated for a
10028 16-bit code segment.  In a 32-bit code section, the following code
10029 generates the machine opcode bytes `66 6a 04', which pushes the value
10030 `4' onto the stack, decrementing `%esp' by 2.
10032              pushw $4
10034    The same code in a 16-bit code section would generate the machine
10035 opcode bytes `6a 04' (i.e., without the operand size prefix), which is
10036 correct since the processor default operand size is assumed to be 16
10037 bits in a 16-bit code section.
10039 \x1f
10040 File: as.info,  Node: i386-Bugs,  Next: i386-Notes,  Prev: i386-Arch,  Up: i386-Dependent
10042 9.13.13 AT&T Syntax bugs
10043 ------------------------
10045 The UnixWare assembler, and probably other AT&T derived ix86 Unix
10046 assemblers, generate floating point instructions with reversed source
10047 and destination registers in certain cases.  Unfortunately, gcc and
10048 possibly many other programs use this reversed syntax, so we're stuck
10049 with it.
10051    For example
10053              fsub %st,%st(3)
10054    results in `%st(3)' being updated to `%st - %st(3)' rather than the
10055 expected `%st(3) - %st'.  This happens with all the non-commutative
10056 arithmetic floating point operations with two register operands where
10057 the source register is `%st' and the destination register is `%st(i)'.
10059 \x1f
10060 File: as.info,  Node: i386-Arch,  Next: i386-Bugs,  Prev: i386-16bit,  Up: i386-Dependent
10062 9.13.14 Specifying CPU Architecture
10063 -----------------------------------
10065 `as' may be told to assemble for a particular CPU (sub-)architecture
10066 with the `.arch CPU_TYPE' directive.  This directive enables a warning
10067 when gas detects an instruction that is not supported on the CPU
10068 specified.  The choices for CPU_TYPE are:
10070 `i8086'        `i186'         `i286'         `i386'
10071 `i486'         `i586'         `i686'         `pentium'
10072 `pentiumpro'   `pentiumii'    `pentiumiii'   `pentium4'
10073 `prescott'     `nocona'       `core'         `core2'
10074 `corei7'       `l1om'                        
10075 `k6'           `k6_2'         `athlon'       `k8'
10076 `amdfam10'                                   
10077 `generic32'    `generic64'                   
10078 `.mmx'         `.sse'         `.sse2'        `.sse3'
10079 `.ssse3'       `.sse4.1'      `.sse4.2'      `.sse4'
10080 `.avx'         `.vmx'         `.smx'         `.xsave'
10081 `.aes'         `.pclmul'      `.fma'         `.movbe'
10082 `.ept'         `.clflush'                    
10083 `.3dnow'       `.3dnowa'      `.sse4a'       `.sse5'
10084 `.syscall'     `.rdtscp'      `.svme'        `.abm'
10085 `.padlock'                                   
10087    Apart from the warning, there are only two other effects on `as'
10088 operation;  Firstly, if you specify a CPU other than `i486', then shift
10089 by one instructions such as `sarl $1, %eax' will automatically use a
10090 two byte opcode sequence.  The larger three byte opcode sequence is
10091 used on the 486 (and when no architecture is specified) because it
10092 executes faster on the 486.  Note that you can explicitly request the
10093 two byte opcode by writing `sarl %eax'.  Secondly, if you specify
10094 `i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte
10095 offset conditional jumps will be promoted when necessary to a two
10096 instruction sequence consisting of a conditional jump of the opposite
10097 sense around an unconditional jump to the target.
10099    Following the CPU architecture (but not a sub-architecture, which
10100 are those starting with a dot), you may specify `jumps' or `nojumps' to
10101 control automatic promotion of conditional jumps. `jumps' is the
10102 default, and enables jump promotion;  All external jumps will be of the
10103 long variety, and file-local jumps will be promoted as necessary.
10104 (*note i386-Jumps::)  `nojumps' leaves external conditional jumps as
10105 byte offset jumps, and warns about file-local conditional jumps that
10106 `as' promotes.  Unconditional jumps are treated as for `jumps'.
10108    For example
10110       .arch i8086,nojumps
10112 \x1f
10113 File: as.info,  Node: i386-Notes,  Prev: i386-Bugs,  Up: i386-Dependent
10115 9.13.15 Notes
10116 -------------
10118 There is some trickery concerning the `mul' and `imul' instructions
10119 that deserves mention.  The 16-, 32-, 64- and 128-bit expanding
10120 multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul')
10121 can be output only in the one operand form.  Thus, `imul %ebx, %eax'
10122 does _not_ select the expanding multiply; the expanding multiply would
10123 clobber the `%edx' register, and this would confuse `gcc' output.  Use
10124 `imul %ebx' to get the 64-bit product in `%edx:%eax'.
10126    We have added a two operand form of `imul' when the first operand is
10127 an immediate mode expression and the second operand is a register.
10128 This is just a shorthand, so that, multiplying `%eax' by 69, for
10129 example, can be done with `imul $69, %eax' rather than `imul $69, %eax,
10130 %eax'.
10132 \x1f
10133 File: as.info,  Node: i860-Dependent,  Next: i960-Dependent,  Prev: i386-Dependent,  Up: Machine Dependencies
10135 9.14 Intel i860 Dependent Features
10136 ==================================
10138 * Menu:
10140 * Notes-i860::                  i860 Notes
10141 * Options-i860::                i860 Command-line Options
10142 * Directives-i860::             i860 Machine Directives
10143 * Opcodes for i860::            i860 Opcodes
10145 \x1f
10146 File: as.info,  Node: Notes-i860,  Next: Options-i860,  Up: i860-Dependent
10148 9.14.1 i860 Notes
10149 -----------------
10151 This is a fairly complete i860 assembler which is compatible with the
10152 UNIX System V/860 Release 4 assembler. However, it does not currently
10153 support SVR4 PIC (i.e., `@GOT, @GOTOFF, @PLT').
10155    Like the SVR4/860 assembler, the output object format is ELF32.
10156 Currently, this is the only supported object format. If there is
10157 sufficient interest, other formats such as COFF may be implemented.
10159    Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter
10160 being the default.  One difference is that AT&T syntax requires the '%'
10161 prefix on register names while Intel syntax does not.  Another
10162 difference is in the specification of relocatable expressions.  The
10163 Intel syntax is `ha%expression' whereas the SVR4 syntax is
10164 `[expression]@ha' (and similarly for the "l" and "h" selectors).
10166 \x1f
10167 File: as.info,  Node: Options-i860,  Next: Directives-i860,  Prev: Notes-i860,  Up: i860-Dependent
10169 9.14.2 i860 Command-line Options
10170 --------------------------------
10172 9.14.2.1 SVR4 compatibility options
10173 ...................................
10175 `-V'
10176      Print assembler version.
10178 `-Qy'
10179      Ignored.
10181 `-Qn'
10182      Ignored.
10184 9.14.2.2 Other options
10185 ......................
10187 `-EL'
10188      Select little endian output (this is the default).
10190 `-EB'
10191      Select big endian output. Note that the i860 always reads
10192      instructions as little endian data, so this option only effects
10193      data and not instructions.
10195 `-mwarn-expand'
10196      Emit a warning message if any pseudo-instruction expansions
10197      occurred.  For example, a `or' instruction with an immediate
10198      larger than 16-bits will be expanded into two instructions. This
10199      is a very undesirable feature to rely on, so this flag can help
10200      detect any code where it happens. One use of it, for instance, has
10201      been to find and eliminate any place where `gcc' may emit these
10202      pseudo-instructions.
10204 `-mxp'
10205      Enable support for the i860XP instructions and control registers.
10206      By default, this option is disabled so that only the base
10207      instruction set (i.e., i860XR) is supported.
10209 `-mintel-syntax'
10210      The i860 assembler defaults to AT&T/SVR4 syntax.  This option
10211      enables the Intel syntax.
10213 \x1f
10214 File: as.info,  Node: Directives-i860,  Next: Opcodes for i860,  Prev: Options-i860,  Up: i860-Dependent
10216 9.14.3 i860 Machine Directives
10217 ------------------------------
10219 `.dual'
10220      Enter dual instruction mode. While this directive is supported, the
10221      preferred way to use dual instruction mode is to explicitly code
10222      the dual bit with the `d.' prefix.
10224 `.enddual'
10225      Exit dual instruction mode. While this directive is supported, the
10226      preferred way to use dual instruction mode is to explicitly code
10227      the dual bit with the `d.' prefix.
10229 `.atmp'
10230      Change the temporary register used when expanding pseudo
10231      operations. The default register is `r31'.
10233    The `.dual', `.enddual', and `.atmp' directives are available only
10234 in the Intel syntax mode.
10236    Both syntaxes allow for the standard `.align' directive.  However,
10237 the Intel syntax additionally allows keywords for the alignment
10238 parameter: "`.align type'", where `type' is one of `.short', `.long',
10239 `.quad', `.single', `.double' representing alignments of 2, 4, 16, 4,
10240 and 8, respectively.
10242 \x1f
10243 File: as.info,  Node: Opcodes for i860,  Prev: Directives-i860,  Up: i860-Dependent
10245 9.14.4 i860 Opcodes
10246 -------------------
10248 All of the Intel i860XR and i860XP machine instructions are supported.
10249 Please see either _i860 Microprocessor Programmer's Reference Manual_
10250 or _i860 Microprocessor Architecture_ for more information.
10252 9.14.4.1 Other instruction support (pseudo-instructions)
10253 ........................................................
10255 For compatibility with some other i860 assemblers, a number of
10256 pseudo-instructions are supported. While these are supported, they are
10257 a very undesirable feature that should be avoided - in particular, when
10258 they result in an expansion to multiple actual i860 instructions. Below
10259 are the pseudo-instructions that result in expansions.
10260    * Load large immediate into general register:
10262      The pseudo-instruction `mov imm,%rn' (where the immediate does not
10263      fit within a signed 16-bit field) will be expanded into:
10264           orh large_imm@h,%r0,%rn
10265           or large_imm@l,%rn,%rn
10267    * Load/store with relocatable address expression:
10269      For example, the pseudo-instruction `ld.b addr_exp(%rx),%rn' will
10270      be expanded into:
10271           orh addr_exp@ha,%rx,%r31
10272           ld.l addr_exp@l(%r31),%rn
10274      The analogous expansions apply to `ld.x, st.x, fld.x, pfld.x,
10275      fst.x', and `pst.x' as well.
10277    * Signed large immediate with add/subtract:
10279      If any of the arithmetic operations `adds, addu, subs, subu' are
10280      used with an immediate larger than 16-bits (signed), then they
10281      will be expanded.  For instance, the pseudo-instruction `adds
10282      large_imm,%rx,%rn' expands to:
10283           orh large_imm@h,%r0,%r31
10284           or large_imm@l,%r31,%r31
10285           adds %r31,%rx,%rn
10287    * Unsigned large immediate with logical operations:
10289      Logical operations (`or, andnot, or, xor') also result in
10290      expansions.  The pseudo-instruction `or large_imm,%rx,%rn' results
10291      in:
10292           orh large_imm@h,%rx,%r31
10293           or large_imm@l,%r31,%rn
10295      Similarly for the others, except for `and' which expands to:
10296           andnot (-1 - large_imm)@h,%rx,%r31
10297           andnot (-1 - large_imm)@l,%r31,%rn
10299 \x1f
10300 File: as.info,  Node: i960-Dependent,  Next: IA-64-Dependent,  Prev: i860-Dependent,  Up: Machine Dependencies
10302 9.15 Intel 80960 Dependent Features
10303 ===================================
10305 * Menu:
10307 * Options-i960::                i960 Command-line Options
10308 * Floating Point-i960::         Floating Point
10309 * Directives-i960::             i960 Machine Directives
10310 * Opcodes for i960::            i960 Opcodes
10312 \x1f
10313 File: as.info,  Node: Options-i960,  Next: Floating Point-i960,  Up: i960-Dependent
10315 9.15.1 i960 Command-line Options
10316 --------------------------------
10318 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
10319      Select the 80960 architecture.  Instructions or features not
10320      supported by the selected architecture cause fatal errors.
10322      `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'.
10323      Synonyms are provided for compatibility with other tools.
10325      If you do not specify any of these options, `as' generates code
10326      for any instruction or feature that is supported by _some_ version
10327      of the 960 (even if this means mixing architectures!).  In
10328      principle, `as' attempts to deduce the minimal sufficient
10329      processor type if none is specified; depending on the object code
10330      format, the processor type may be recorded in the object file.  If
10331      it is critical that the `as' output match a specific architecture,
10332      specify that architecture explicitly.
10334 `-b'
10335      Add code to collect information about conditional branches taken,
10336      for later optimization using branch prediction bits.  (The
10337      conditional branch instructions have branch prediction bits in the
10338      CA, CB, and CC architectures.)  If BR represents a conditional
10339      branch instruction, the following represents the code generated by
10340      the assembler when `-b' is specified:
10342                   call    INCREMENT ROUTINE
10343                   .word   0       # pre-counter
10344           Label:  BR
10345                   call    INCREMENT ROUTINE
10346                   .word   0       # post-counter
10348      The counter following a branch records the number of times that
10349      branch was _not_ taken; the difference between the two counters is
10350      the number of times the branch _was_ taken.
10352      A table of every such `Label' is also generated, so that the
10353      external postprocessor `gbr960' (supplied by Intel) can locate all
10354      the counters.  This table is always labeled `__BRANCH_TABLE__';
10355      this is a local symbol to permit collecting statistics for many
10356      separate object files.  The table is word aligned, and begins with
10357      a two-word header.  The first word, initialized to 0, is used in
10358      maintaining linked lists of branch tables.  The second word is a
10359      count of the number of entries in the table, which follow
10360      immediately: each is a word, pointing to one of the labels
10361      illustrated above.
10363            +------------+------------+------------+ ... +------------+
10364            |            |            |            |     |            |
10365            |  *NEXT     |  COUNT: N  | *BRLAB 1   |     | *BRLAB N   |
10366            |            |            |            |     |            |
10367            +------------+------------+------------+ ... +------------+
10369                          __BRANCH_TABLE__ layout
10371      The first word of the header is used to locate multiple branch
10372      tables, since each object file may contain one. Normally the links
10373      are maintained with a call to an initialization routine, placed at
10374      the beginning of each function in the file.  The GNU C compiler
10375      generates these calls automatically when you give it a `-b' option.
10376      For further details, see the documentation of `gbr960'.
10378 `-no-relax'
10379      Normally, Compare-and-Branch instructions with targets that require
10380      displacements greater than 13 bits (or that have external targets)
10381      are replaced with the corresponding compare (or `chkbit') and
10382      branch instructions.  You can use the `-no-relax' option to
10383      specify that `as' should generate errors instead, if the target
10384      displacement is larger than 13 bits.
10386      This option does not affect the Compare-and-Jump instructions; the
10387      code emitted for them is _always_ adjusted when necessary
10388      (depending on displacement size), regardless of whether you use
10389      `-no-relax'.
10391 \x1f
10392 File: as.info,  Node: Floating Point-i960,  Next: Directives-i960,  Prev: Options-i960,  Up: i960-Dependent
10394 9.15.2 Floating Point
10395 ---------------------
10397 `as' generates IEEE floating-point numbers for the directives `.float',
10398 `.double', `.extended', and `.single'.
10400 \x1f
10401 File: as.info,  Node: Directives-i960,  Next: Opcodes for i960,  Prev: Floating Point-i960,  Up: i960-Dependent
10403 9.15.3 i960 Machine Directives
10404 ------------------------------
10406 `.bss SYMBOL, LENGTH, ALIGN'
10407      Reserve LENGTH bytes in the bss section for a local SYMBOL,
10408      aligned to the power of two specified by ALIGN.  LENGTH and ALIGN
10409      must be positive absolute expressions.  This directive differs
10410      from `.lcomm' only in that it permits you to specify an alignment.
10411      *Note `.lcomm': Lcomm.
10413 `.extended FLONUMS'
10414      `.extended' expects zero or more flonums, separated by commas; for
10415      each flonum, `.extended' emits an IEEE extended-format (80-bit)
10416      floating-point number.
10418 `.leafproc CALL-LAB, BAL-LAB'
10419      You can use the `.leafproc' directive in conjunction with the
10420      optimized `callj' instruction to enable faster calls of leaf
10421      procedures.  If a procedure is known to call no other procedures,
10422      you may define an entry point that skips procedure prolog code
10423      (and that does not depend on system-supplied saved context), and
10424      declare it as the BAL-LAB using `.leafproc'.  If the procedure
10425      also has an entry point that goes through the normal prolog, you
10426      can specify that entry point as CALL-LAB.
10428      A `.leafproc' declaration is meant for use in conjunction with the
10429      optimized call instruction `callj'; the directive records the data
10430      needed later to choose between converting the `callj' into a `bal'
10431      or a `call'.
10433      CALL-LAB is optional; if only one argument is present, or if the
10434      two arguments are identical, the single argument is assumed to be
10435      the `bal' entry point.
10437 `.sysproc NAME, INDEX'
10438      The `.sysproc' directive defines a name for a system procedure.
10439      After you define it using `.sysproc', you can use NAME to refer to
10440      the system procedure identified by INDEX when calling procedures
10441      with the optimized call instruction `callj'.
10443      Both arguments are required; INDEX must be between 0 and 31
10444      (inclusive).
10446 \x1f
10447 File: as.info,  Node: Opcodes for i960,  Prev: Directives-i960,  Up: i960-Dependent
10449 9.15.4 i960 Opcodes
10450 -------------------
10452 All Intel 960 machine instructions are supported; *note i960
10453 Command-line Options: Options-i960. for a discussion of selecting the
10454 instruction subset for a particular 960 architecture.
10456    Some opcodes are processed beyond simply emitting a single
10457 corresponding instruction: `callj', and Compare-and-Branch or
10458 Compare-and-Jump instructions with target displacements larger than 13
10459 bits.
10461 * Menu:
10463 * callj-i960::                  `callj'
10464 * Compare-and-branch-i960::     Compare-and-Branch
10466 \x1f
10467 File: as.info,  Node: callj-i960,  Next: Compare-and-branch-i960,  Up: Opcodes for i960
10469 9.15.4.1 `callj'
10470 ................
10472 You can write `callj' to have the assembler or the linker determine the
10473 most appropriate form of subroutine call: `call', `bal', or `calls'.
10474 If the assembly source contains enough information--a `.leafproc' or
10475 `.sysproc' directive defining the operand--then `as' translates the
10476 `callj'; if not, it simply emits the `callj', leaving it for the linker
10477 to resolve.
10479 \x1f
10480 File: as.info,  Node: Compare-and-branch-i960,  Prev: callj-i960,  Up: Opcodes for i960
10482 9.15.4.2 Compare-and-Branch
10483 ...........................
10485 The 960 architectures provide combined Compare-and-Branch instructions
10486 that permit you to store the branch target in the lower 13 bits of the
10487 instruction word itself.  However, if you specify a branch target far
10488 enough away that its address won't fit in 13 bits, the assembler can
10489 either issue an error, or convert your Compare-and-Branch instruction
10490 into separate instructions to do the compare and the branch.
10492    Whether `as' gives an error or expands the instruction depends on
10493 two choices you can make: whether you use the `-no-relax' option, and
10494 whether you use a "Compare and Branch" instruction or a "Compare and
10495 Jump" instruction.  The "Jump" instructions are _always_ expanded if
10496 necessary; the "Branch" instructions are expanded when necessary
10497 _unless_ you specify `-no-relax'--in which case `as' gives an error
10498 instead.
10500    These are the Compare-and-Branch instructions, their "Jump" variants,
10501 and the instruction pairs they may expand into:
10503              Compare and
10504           Branch      Jump       Expanded to
10505           ------    ------       ------------
10506              bbc                 chkbit; bno
10507              bbs                 chkbit; bo
10508           cmpibe    cmpije       cmpi; be
10509           cmpibg    cmpijg       cmpi; bg
10510          cmpibge   cmpijge       cmpi; bge
10511           cmpibl    cmpijl       cmpi; bl
10512          cmpible   cmpijle       cmpi; ble
10513          cmpibno   cmpijno       cmpi; bno
10514          cmpibne   cmpijne       cmpi; bne
10515           cmpibo    cmpijo       cmpi; bo
10516           cmpobe    cmpoje       cmpo; be
10517           cmpobg    cmpojg       cmpo; bg
10518          cmpobge   cmpojge       cmpo; bge
10519           cmpobl    cmpojl       cmpo; bl
10520          cmpoble   cmpojle       cmpo; ble
10521          cmpobne   cmpojne       cmpo; bne
10523 \x1f
10524 File: as.info,  Node: IA-64-Dependent,  Next: IP2K-Dependent,  Prev: i960-Dependent,  Up: Machine Dependencies
10526 9.16 IA-64 Dependent Features
10527 =============================
10529 * Menu:
10531 * IA-64 Options::              Options
10532 * IA-64 Syntax::               Syntax
10533 * IA-64 Opcodes::              Opcodes
10535 \x1f
10536 File: as.info,  Node: IA-64 Options,  Next: IA-64 Syntax,  Up: IA-64-Dependent
10538 9.16.1 Options
10539 --------------
10541 `-mconstant-gp'
10542      This option instructs the assembler to mark the resulting object
10543      file as using the "constant GP" model.  With this model, it is
10544      assumed that the entire program uses a single global pointer (GP)
10545      value.  Note that this option does not in any fashion affect the
10546      machine code emitted by the assembler.  All it does is turn on the
10547      EF_IA_64_CONS_GP flag in the ELF file header.
10549 `-mauto-pic'
10550      This option instructs the assembler to mark the resulting object
10551      file as using the "constant GP without function descriptor" data
10552      model.  This model is like the "constant GP" model, except that it
10553      additionally does away with function descriptors.  What this means
10554      is that the address of a function refers directly to the
10555      function's code entry-point.  Normally, such an address would
10556      refer to a function descriptor, which contains both the code
10557      entry-point and the GP-value needed by the function.  Note that
10558      this option does not in any fashion affect the machine code
10559      emitted by the assembler.  All it does is turn on the
10560      EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header.
10562 `-milp32'
10564 `-milp64'
10566 `-mlp64'
10568 `-mp64'
10569      These options select the data model.  The assembler defaults to
10570      `-mlp64' (LP64 data model).
10572 `-mle'
10574 `-mbe'
10575      These options select the byte order.  The `-mle' option selects
10576      little-endian byte order (default) and `-mbe' selects big-endian
10577      byte order.  Note that IA-64 machine code always uses
10578      little-endian byte order.
10580 `-mtune=itanium1'
10582 `-mtune=itanium2'
10583      Tune for a particular IA-64 CPU, ITANIUM1 or ITANIUM2. The default
10584      is ITANIUM2.
10586 `-munwind-check=warning'
10588 `-munwind-check=error'
10589      These options control what the assembler will do when performing
10590      consistency checks on unwind directives.  `-munwind-check=warning'
10591      will make the assembler issue a warning when an unwind directive
10592      check fails.  This is the default.  `-munwind-check=error' will
10593      make the assembler issue an error when an unwind directive check
10594      fails.
10596 `-mhint.b=ok'
10598 `-mhint.b=warning'
10600 `-mhint.b=error'
10601      These options control what the assembler will do when the `hint.b'
10602      instruction is used.  `-mhint.b=ok' will make the assembler accept
10603      `hint.b'.  `-mint.b=warning' will make the assembler issue a
10604      warning when `hint.b' is used.  `-mhint.b=error' will make the
10605      assembler treat `hint.b' as an error, which is the default.
10607 `-x'
10609 `-xexplicit'
10610      These options turn on dependency violation checking.
10612 `-xauto'
10613      This option instructs the assembler to automatically insert stop
10614      bits where necessary to remove dependency violations.  This is the
10615      default mode.
10617 `-xnone'
10618      This option turns off dependency violation checking.
10620 `-xdebug'
10621      This turns on debug output intended to help tracking down bugs in
10622      the dependency violation checker.
10624 `-xdebugn'
10625      This is a shortcut for -xnone -xdebug.
10627 `-xdebugx'
10628      This is a shortcut for -xexplicit -xdebug.
10631 \x1f
10632 File: as.info,  Node: IA-64 Syntax,  Next: IA-64 Opcodes,  Prev: IA-64 Options,  Up: IA-64-Dependent
10634 9.16.2 Syntax
10635 -------------
10637 The assembler syntax closely follows the IA-64 Assembly Language
10638 Reference Guide.
10640 * Menu:
10642 * IA-64-Chars::                Special Characters
10643 * IA-64-Regs::                 Register Names
10644 * IA-64-Bits::                 Bit Names
10646 \x1f
10647 File: as.info,  Node: IA-64-Chars,  Next: IA-64-Regs,  Up: IA-64 Syntax
10649 9.16.2.1 Special Characters
10650 ...........................
10652 `//' is the line comment token.
10654    `;' can be used instead of a newline to separate statements.
10656 \x1f
10657 File: as.info,  Node: IA-64-Regs,  Next: IA-64-Bits,  Prev: IA-64-Chars,  Up: IA-64 Syntax
10659 9.16.2.2 Register Names
10660 .......................
10662 The 128 integer registers are referred to as `rN'.  The 128
10663 floating-point registers are referred to as `fN'.  The 128 application
10664 registers are referred to as `arN'.  The 128 control registers are
10665 referred to as `crN'.  The 64 one-bit predicate registers are referred
10666 to as `pN'.  The 8 branch registers are referred to as `bN'.  In
10667 addition, the assembler defines a number of aliases: `gp' (`r1'), `sp'
10668 (`r12'), `rp' (`b0'), `ret0' (`r8'), `ret1' (`r9'), `ret2' (`r10'),
10669 `ret3' (`r9'), `fargN' (`f8+N'), and `fretN' (`f8+N').
10671    For convenience, the assembler also defines aliases for all named
10672 application and control registers.  For example, `ar.bsp' refers to the
10673 register backing store pointer (`ar17').  Similarly, `cr.eoi' refers to
10674 the end-of-interrupt register (`cr67').
10676 \x1f
10677 File: as.info,  Node: IA-64-Bits,  Prev: IA-64-Regs,  Up: IA-64 Syntax
10679 9.16.2.3 IA-64 Processor-Status-Register (PSR) Bit Names
10680 ........................................................
10682 The assembler defines bit masks for each of the bits in the IA-64
10683 processor status register.  For example, `psr.ic' corresponds to a
10684 value of 0x2000.  These masks are primarily intended for use with the
10685 `ssm'/`sum' and `rsm'/`rum' instructions, but they can be used anywhere
10686 else where an integer constant is expected.
10688 \x1f
10689 File: as.info,  Node: IA-64 Opcodes,  Prev: IA-64 Syntax,  Up: IA-64-Dependent
10691 9.16.3 Opcodes
10692 --------------
10694 For detailed information on the IA-64 machine instruction set, see the
10695 IA-64 Architecture Handbook
10696 (http://developer.intel.com/design/itanium/arch_spec.htm).
10698 \x1f
10699 File: as.info,  Node: IP2K-Dependent,  Next: LM32-Dependent,  Prev: IA-64-Dependent,  Up: Machine Dependencies
10701 9.17 IP2K Dependent Features
10702 ============================
10704 * Menu:
10706 * IP2K-Opts::                   IP2K Options
10708 \x1f
10709 File: as.info,  Node: IP2K-Opts,  Up: IP2K-Dependent
10711 9.17.1 IP2K Options
10712 -------------------
10714 The Ubicom IP2K version of `as' has a few machine dependent options:
10716 `-mip2022ext'
10717      `as' can assemble the extended IP2022 instructions, but it will
10718      only do so if this is specifically allowed via this command line
10719      option.
10721 `-mip2022'
10722      This option restores the assembler's default behaviour of not
10723      permitting the extended IP2022 instructions to be assembled.
10726 \x1f
10727 File: as.info,  Node: LM32-Dependent,  Next: M32C-Dependent,  Prev: IP2K-Dependent,  Up: Machine Dependencies
10729 9.18 LM32 Dependent Features
10730 ============================
10732 * Menu:
10734 * LM32 Options::              Options
10735 * LM32 Syntax::               Syntax
10736 * LM32 Opcodes::              Opcodes
10738 \x1f
10739 File: as.info,  Node: LM32 Options,  Next: LM32 Syntax,  Up: LM32-Dependent
10741 9.18.1 Options
10742 --------------
10744 `-mmultiply-enabled'
10745      Enable multiply instructions.
10747 `-mdivide-enabled'
10748      Enable divide instructions.
10750 `-mbarrel-shift-enabled'
10751      Enable barrel-shift instructions.
10753 `-msign-extend-enabled'
10754      Enable sign extend instructions.
10756 `-muser-enabled'
10757      Enable user defined instructions.
10759 `-micache-enabled'
10760      Enable instruction cache related CSRs.
10762 `-mdcache-enabled'
10763      Enable data cache related CSRs.
10765 `-mbreak-enabled'
10766      Enable break instructions.
10768 `-mall-enabled'
10769      Enable all instructions and CSRs.
10772 \x1f
10773 File: as.info,  Node: LM32 Syntax,  Next: LM32 Opcodes,  Prev: LM32 Options,  Up: LM32-Dependent
10775 9.18.2 Syntax
10776 -------------
10778 * Menu:
10780 * LM32-Regs::                 Register Names
10781 * LM32-Modifiers::            Relocatable Expression Modifiers
10783 \x1f
10784 File: as.info,  Node: LM32-Regs,  Next: LM32-Modifiers,  Up: LM32 Syntax
10786 9.18.2.1 Register Names
10787 .......................
10789 LM32 has 32 x 32-bit general purpose registers `r0', `r1', ... `r31'.
10791    The following aliases are defined: `gp' - `r26', `fp' - `r27', `sp'
10792 - `r28', `ra' - `r29', `ea' - `r30', `ba' - `r31'.
10794    LM32 has the following Control and Status Registers (CSRs).
10796 `IE'
10797      Interrupt enable.
10799 `IM'
10800      Interrupt mask.
10802 `IP'
10803      Interrupt pending.
10805 `ICC'
10806      Instruction cache control.
10808 `DCC'
10809      Data cache control.
10811 `CC'
10812      Cycle counter.
10814 `CFG'
10815      Configuration.
10817 `EBA'
10818      Exception base address.
10820 `DC'
10821      Debug control.
10823 `DEBA'
10824      Debug exception base address.
10826 `JTX'
10827      JTAG transmit.
10829 `JRX'
10830      JTAG receive.
10832 `BP0'
10833      Breakpoint 0.
10835 `BP1'
10836      Breakpoint 1.
10838 `BP2'
10839      Breakpoint 2.
10841 `BP3'
10842      Breakpoint 3.
10844 `WP0'
10845      Watchpoint 0.
10847 `WP1'
10848      Watchpoint 1.
10850 `WP2'
10851      Watchpoint 2.
10853 `WP3'
10854      Watchpoint 3.
10856 \x1f
10857 File: as.info,  Node: LM32-Modifiers,  Prev: LM32-Regs,  Up: LM32 Syntax
10859 9.18.2.2 Relocatable Expression Modifiers
10860 .........................................
10862 The assembler supports several modifiers when using relocatable
10863 addresses in LM32 instruction operands.  The general syntax is the
10864 following:
10866      modifier(relocatable-expression)
10868 `lo'
10869      This modifier allows you to use bits 0 through 15 of an address
10870      expression as 16 bit relocatable expression.
10872 `hi'
10873      This modifier allows you to use bits 16 through 23 of an address
10874      expression as 16 bit relocatable expression.
10876      For example
10878           ori  r4, r4, lo(sym+10)
10879           orhi r4, r4, hi(sym+10)
10881 `gp'
10882      This modified creates a 16-bit relocatable expression that is the
10883      offset of the symbol from the global pointer.
10885           mva r4, gp(sym)
10887 `got'
10888      This modifier places a symbol in the GOT and creates a 16-bit
10889      relocatable expression that is the offset into the GOT of this
10890      symbol.
10892           lw r4, (gp+got(sym))
10894 `gotofflo16'
10895      This modifier allows you to use the bits 0 through 15 of an
10896      address which is an offset from the GOT.
10898 `gotoffhi16'
10899      This modifier allows you to use the bits 16 through 31 of an
10900      address which is an offset from the GOT.
10902           orhi r4, r4, gotoffhi16(lsym)
10903           addi r4, r4, gotofflo16(lsym)
10906 \x1f
10907 File: as.info,  Node: LM32 Opcodes,  Prev: LM32 Syntax,  Up: LM32-Dependent
10909 9.18.3 Opcodes
10910 --------------
10912 For detailed information on the LM32 machine instruction set, see
10913 `http://www.latticesemi.com/products/intellectualproperty/ipcores/mico32/'.
10915    `as' implements all the standard LM32 opcodes.
10917 \x1f
10918 File: as.info,  Node: M32C-Dependent,  Next: M32R-Dependent,  Prev: LM32-Dependent,  Up: Machine Dependencies
10920 9.19 M32C Dependent Features
10921 ============================
10923    `as' can assemble code for several different members of the Renesas
10924 M32C family.  Normally the default is to assemble code for the M16C
10925 microprocessor.  The `-m32c' option may be used to change the default
10926 to the M32C microprocessor.
10928 * Menu:
10930 * M32C-Opts::                   M32C Options
10931 * M32C-Modifiers::              Symbolic Operand Modifiers
10933 \x1f
10934 File: as.info,  Node: M32C-Opts,  Next: M32C-Modifiers,  Up: M32C-Dependent
10936 9.19.1 M32C Options
10937 -------------------
10939 The Renesas M32C version of `as' has these machine-dependent options:
10941 `-m32c'
10942      Assemble M32C instructions.
10944 `-m16c'
10945      Assemble M16C instructions (default).
10947 `-relax'
10948      Enable support for link-time relaxations.
10950 `-h-tick-hex'
10951      Support H'00 style hex constants in addition to 0x00 style.
10954 \x1f
10955 File: as.info,  Node: M32C-Modifiers,  Prev: M32C-Opts,  Up: M32C-Dependent
10957 9.19.2 Symbolic Operand Modifiers
10958 ---------------------------------
10960 The assembler supports several modifiers when using symbol addresses in
10961 M32C instruction operands.  The general syntax is the following:
10963      %modifier(symbol)
10965 `%dsp8'
10966 `%dsp16'
10967      These modifiers override the assembler's assumptions about how big
10968      a symbol's address is.  Normally, when it sees an operand like
10969      `sym[a0]' it assumes `sym' may require the widest displacement
10970      field (16 bits for `-m16c', 24 bits for `-m32c').  These modifiers
10971      tell it to assume the address will fit in an 8 or 16 bit
10972      (respectively) unsigned displacement.  Note that, of course, if it
10973      doesn't actually fit you will get linker errors.  Example:
10975           mov.w %dsp8(sym)[a0],r1
10976           mov.b #0,%dsp8(sym)[a0]
10978 `%hi8'
10979      This modifier allows you to load bits 16 through 23 of a 24 bit
10980      address into an 8 bit register.  This is useful with, for example,
10981      the M16C `smovf' instruction, which expects a 20 bit address in
10982      `r1h' and `a0'.  Example:
10984           mov.b #%hi8(sym),r1h
10985           mov.w #%lo16(sym),a0
10986           smovf.b
10988 `%lo16'
10989      Likewise, this modifier allows you to load bits 0 through 15 of a
10990      24 bit address into a 16 bit register.
10992 `%hi16'
10993      This modifier allows you to load bits 16 through 31 of a 32 bit
10994      address into a 16 bit register.  While the M32C family only has 24
10995      bits of address space, it does support addresses in pairs of 16 bit
10996      registers (like `a1a0' for the `lde' instruction).  This modifier
10997      is for loading the upper half in such cases.  Example:
10999           mov.w #%hi16(sym),a1
11000           mov.w #%lo16(sym),a0
11001           ...
11002           lde.w [a1a0],r1
11005 \x1f
11006 File: as.info,  Node: M32R-Dependent,  Next: M68K-Dependent,  Prev: M32C-Dependent,  Up: Machine Dependencies
11008 9.20 M32R Dependent Features
11009 ============================
11011 * Menu:
11013 * M32R-Opts::                   M32R Options
11014 * M32R-Directives::             M32R Directives
11015 * M32R-Warnings::               M32R Warnings
11017 \x1f
11018 File: as.info,  Node: M32R-Opts,  Next: M32R-Directives,  Up: M32R-Dependent
11020 9.20.1 M32R Options
11021 -------------------
11023 The Renease M32R version of `as' has a few machine dependent options:
11025 `-m32rx'
11026      `as' can assemble code for several different members of the
11027      Renesas M32R family.  Normally the default is to assemble code for
11028      the M32R microprocessor.  This option may be used to change the
11029      default to the M32RX microprocessor, which adds some more
11030      instructions to the basic M32R instruction set, and some
11031      additional parameters to some of the original instructions.
11033 `-m32r2'
11034      This option changes the target processor to the the M32R2
11035      microprocessor.
11037 `-m32r'
11038      This option can be used to restore the assembler's default
11039      behaviour of assembling for the M32R microprocessor.  This can be
11040      useful if the default has been changed by a previous command line
11041      option.
11043 `-little'
11044      This option tells the assembler to produce little-endian code and
11045      data.  The default is dependent upon how the toolchain was
11046      configured.
11048 `-EL'
11049      This is a synonym for _-little_.
11051 `-big'
11052      This option tells the assembler to produce big-endian code and
11053      data.
11055 `-EB'
11056      This is a synonum for _-big_.
11058 `-KPIC'
11059      This option specifies that the output of the assembler should be
11060      marked as position-independent code (PIC).
11062 `-parallel'
11063      This option tells the assembler to attempts to combine two
11064      sequential instructions into a single, parallel instruction, where
11065      it is legal to do so.
11067 `-no-parallel'
11068      This option disables a previously enabled _-parallel_ option.
11070 `-no-bitinst'
11071      This option disables the support for the extended bit-field
11072      instructions provided by the M32R2.  If this support needs to be
11073      re-enabled the _-bitinst_ switch can be used to restore it.
11075 `-O'
11076      This option tells the assembler to attempt to optimize the
11077      instructions that it produces.  This includes filling delay slots
11078      and converting sequential instructions into parallel ones.  This
11079      option implies _-parallel_.
11081 `-warn-explicit-parallel-conflicts'
11082      Instructs `as' to produce warning messages when questionable
11083      parallel instructions are encountered.  This option is enabled by
11084      default, but `gcc' disables it when it invokes `as' directly.
11085      Questionable instructions are those whose behaviour would be
11086      different if they were executed sequentially.  For example the
11087      code fragment `mv r1, r2 || mv r3, r1' produces a different result
11088      from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3
11089      and then r2 into r1, whereas the later moves r2 into r1 and r3.
11091 `-Wp'
11092      This is a shorter synonym for the
11093      _-warn-explicit-parallel-conflicts_ option.
11095 `-no-warn-explicit-parallel-conflicts'
11096      Instructs `as' not to produce warning messages when questionable
11097      parallel instructions are encountered.
11099 `-Wnp'
11100      This is a shorter synonym for the
11101      _-no-warn-explicit-parallel-conflicts_ option.
11103 `-ignore-parallel-conflicts'
11104      This option tells the assembler's to stop checking parallel
11105      instructions for constraint violations.  This ability is provided
11106      for hardware vendors testing chip designs and should not be used
11107      under normal circumstances.
11109 `-no-ignore-parallel-conflicts'
11110      This option restores the assembler's default behaviour of checking
11111      parallel instructions to detect constraint violations.
11113 `-Ip'
11114      This is a shorter synonym for the _-ignore-parallel-conflicts_
11115      option.
11117 `-nIp'
11118      This is a shorter synonym for the _-no-ignore-parallel-conflicts_
11119      option.
11121 `-warn-unmatched-high'
11122      This option tells the assembler to produce a warning message if a
11123      `.high' pseudo op is encountered without a matching `.low' pseudo
11124      op.  The presence of such an unmatched pseudo op usually indicates
11125      a programming error.
11127 `-no-warn-unmatched-high'
11128      Disables a previously enabled _-warn-unmatched-high_ option.
11130 `-Wuh'
11131      This is a shorter synonym for the _-warn-unmatched-high_ option.
11133 `-Wnuh'
11134      This is a shorter synonym for the _-no-warn-unmatched-high_ option.
11137 \x1f
11138 File: as.info,  Node: M32R-Directives,  Next: M32R-Warnings,  Prev: M32R-Opts,  Up: M32R-Dependent
11140 9.20.2 M32R Directives
11141 ----------------------
11143 The Renease M32R version of `as' has a few architecture specific
11144 directives:
11146 `low EXPRESSION'
11147      The `low' directive computes the value of its expression and
11148      places the lower 16-bits of the result into the immediate-field of
11149      the instruction.  For example:
11151              or3   r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678
11152              add3, r0, r0, #low(fred)   ; compute r0 = r0 + low 16-bits of address of fred
11154 `high EXPRESSION'
11155      The `high' directive computes the value of its expression and
11156      places the upper 16-bits of the result into the immediate-field of
11157      the instruction.  For example:
11159              seth  r0, #high(0x12345678) ; compute r0 = 0x12340000
11160              seth, r0, #high(fred)       ; compute r0 = upper 16-bits of address of fred
11162 `shigh EXPRESSION'
11163      The `shigh' directive is very similar to the `high' directive.  It
11164      also computes the value of its expression and places the upper
11165      16-bits of the result into the immediate-field of the instruction.
11166      The difference is that `shigh' also checks to see if the lower
11167      16-bits could be interpreted as a signed number, and if so it
11168      assumes that a borrow will occur from the upper-16 bits.  To
11169      compensate for this the `shigh' directive pre-biases the upper 16
11170      bit value by adding one to it.  For example:
11172      For example:
11174              seth  r0, #shigh(0x12345678) ; compute r0 = 0x12340000
11175              seth  r0, #shigh(0x00008000) ; compute r0 = 0x00010000
11177      In the second example the lower 16-bits are 0x8000.  If these are
11178      treated as a signed value and sign extended to 32-bits then the
11179      value becomes 0xffff8000.  If this value is then added to
11180      0x00010000 then the result is 0x00008000.
11182      This behaviour is to allow for the different semantics of the
11183      `or3' and `add3' instructions.  The `or3' instruction treats its
11184      16-bit immediate argument as unsigned whereas the `add3' treats
11185      its 16-bit immediate as a signed value.  So for example:
11187              seth  r0, #shigh(0x00008000)
11188              add3  r0, r0, #low(0x00008000)
11190      Produces the correct result in r0, whereas:
11192              seth  r0, #shigh(0x00008000)
11193              or3   r0, r0, #low(0x00008000)
11195      Stores 0xffff8000 into r0.
11197      Note - the `shigh' directive does not know where in the assembly
11198      source code the lower 16-bits of the value are going set, so it
11199      cannot check to make sure that an `or3' instruction is being used
11200      rather than an `add3' instruction.  It is up to the programmer to
11201      make sure that correct directives are used.
11203 `.m32r'
11204      The directive performs a similar thing as the _-m32r_ command line
11205      option.  It tells the assembler to only accept M32R instructions
11206      from now on.  An instructions from later M32R architectures are
11207      refused.
11209 `.m32rx'
11210      The directive performs a similar thing as the _-m32rx_ command
11211      line option.  It tells the assembler to start accepting the extra
11212      instructions in the M32RX ISA as well as the ordinary M32R ISA.
11214 `.m32r2'
11215      The directive performs a similar thing as the _-m32r2_ command
11216      line option.  It tells the assembler to start accepting the extra
11217      instructions in the M32R2 ISA as well as the ordinary M32R ISA.
11219 `.little'
11220      The directive performs a similar thing as the _-little_ command
11221      line option.  It tells the assembler to start producing
11222      little-endian code and data.  This option should be used with care
11223      as producing mixed-endian binary files is fraught with danger.
11225 `.big'
11226      The directive performs a similar thing as the _-big_ command line
11227      option.  It tells the assembler to start producing big-endian code
11228      and data.  This option should be used with care as producing
11229      mixed-endian binary files is fraught with danger.
11232 \x1f
11233 File: as.info,  Node: M32R-Warnings,  Prev: M32R-Directives,  Up: M32R-Dependent
11235 9.20.3 M32R Warnings
11236 --------------------
11238 There are several warning and error messages that can be produced by
11239 `as' which are specific to the M32R:
11241 `output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?'
11242      This message is only produced if warnings for explicit parallel
11243      conflicts have been enabled.  It indicates that the assembler has
11244      encountered a parallel instruction in which the destination
11245      register of the left hand instruction is used as an input register
11246      in the right hand instruction.  For example in this code fragment
11247      `mv r1, r2 || neg r3, r1' register r1 is the destination of the
11248      move instruction and the input to the neg instruction.
11250 `output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?'
11251      This message is only produced if warnings for explicit parallel
11252      conflicts have been enabled.  It indicates that the assembler has
11253      encountered a parallel instruction in which the destination
11254      register of the right hand instruction is used as an input
11255      register in the left hand instruction.  For example in this code
11256      fragment `mv r1, r2 || neg r2, r3' register r2 is the destination
11257      of the neg instruction and the input to the move instruction.
11259 `instruction `...' is for the M32RX only'
11260      This message is produced when the assembler encounters an
11261      instruction which is only supported by the M32Rx processor, and
11262      the `-m32rx' command line flag has not been specified to allow
11263      assembly of such instructions.
11265 `unknown instruction `...''
11266      This message is produced when the assembler encounters an
11267      instruction which it does not recognize.
11269 `only the NOP instruction can be issued in parallel on the m32r'
11270      This message is produced when the assembler encounters a parallel
11271      instruction which does not involve a NOP instruction and the
11272      `-m32rx' command line flag has not been specified.  Only the M32Rx
11273      processor is able to execute two instructions in parallel.
11275 `instruction `...' cannot be executed in parallel.'
11276      This message is produced when the assembler encounters a parallel
11277      instruction which is made up of one or two instructions which
11278      cannot be executed in parallel.
11280 `Instructions share the same execution pipeline'
11281      This message is produced when the assembler encounters a parallel
11282      instruction whoes components both use the same execution pipeline.
11284 `Instructions write to the same destination register.'
11285      This message is produced when the assembler encounters a parallel
11286      instruction where both components attempt to modify the same
11287      register.  For example these code fragments will produce this
11288      message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2,
11289      @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx
11290      r3, r4' (Both write to the condition bit)
11293 \x1f
11294 File: as.info,  Node: M68K-Dependent,  Next: M68HC11-Dependent,  Prev: M32R-Dependent,  Up: Machine Dependencies
11296 9.21 M680x0 Dependent Features
11297 ==============================
11299 * Menu:
11301 * M68K-Opts::                   M680x0 Options
11302 * M68K-Syntax::                 Syntax
11303 * M68K-Moto-Syntax::            Motorola Syntax
11304 * M68K-Float::                  Floating Point
11305 * M68K-Directives::             680x0 Machine Directives
11306 * M68K-opcodes::                Opcodes
11308 \x1f
11309 File: as.info,  Node: M68K-Opts,  Next: M68K-Syntax,  Up: M68K-Dependent
11311 9.21.1 M680x0 Options
11312 ---------------------
11314 The Motorola 680x0 version of `as' has a few machine dependent options:
11316 `-march=ARCHITECTURE'
11317      This option specifies a target architecture.  The following
11318      architectures are recognized: `68000', `68010', `68020', `68030',
11319      `68040', `68060', `cpu32', `isaa', `isaaplus', `isab', `isac' and
11320      `cfv4e'.
11322 `-mcpu=CPU'
11323      This option specifies a target cpu.  When used in conjunction with
11324      the `-march' option, the cpu must be within the specified
11325      architecture.  Also, the generic features of the architecture are
11326      used for instruction generation, rather than those of the specific
11327      chip.
11329 `-m[no-]68851'
11331 `-m[no-]68881'
11333 `-m[no-]div'
11335 `-m[no-]usp'
11337 `-m[no-]float'
11339 `-m[no-]mac'
11341 `-m[no-]emac'
11342      Enable or disable various architecture specific features.  If a
11343      chip or architecture by default supports an option (for instance
11344      `-march=isaaplus' includes the `-mdiv' option), explicitly
11345      disabling the option will override the default.
11347 `-l'
11348      You can use the `-l' option to shorten the size of references to
11349      undefined symbols.  If you do not use the `-l' option, references
11350      to undefined symbols are wide enough for a full `long' (32 bits).
11351      (Since `as' cannot know where these symbols end up, `as' can only
11352      allocate space for the linker to fill in later.  Since `as' does
11353      not know how far away these symbols are, it allocates as much
11354      space as it can.)  If you use this option, the references are only
11355      one word wide (16 bits).  This may be useful if you want the
11356      object file to be as small as possible, and you know that the
11357      relevant symbols are always less than 17 bits away.
11359 `--register-prefix-optional'
11360      For some configurations, especially those where the compiler
11361      normally does not prepend an underscore to the names of user
11362      variables, the assembler requires a `%' before any use of a
11363      register name.  This is intended to let the assembler distinguish
11364      between C variables and functions named `a0' through `a7', and so
11365      on.  The `%' is always accepted, but is not required for certain
11366      configurations, notably `sun3'.  The `--register-prefix-optional'
11367      option may be used to permit omitting the `%' even for
11368      configurations for which it is normally required.  If this is
11369      done, it will generally be impossible to refer to C variables and
11370      functions with the same names as register names.
11372 `--bitwise-or'
11373      Normally the character `|' is treated as a comment character, which
11374      means that it can not be used in expressions.  The `--bitwise-or'
11375      option turns `|' into a normal character.  In this mode, you must
11376      either use C style comments, or start comments with a `#' character
11377      at the beginning of a line.
11379 `--base-size-default-16  --base-size-default-32'
11380      If you use an addressing mode with a base register without
11381      specifying the size, `as' will normally use the full 32 bit value.
11382      For example, the addressing mode `%a0@(%d0)' is equivalent to
11383      `%a0@(%d0:l)'.  You may use the `--base-size-default-16' option to
11384      tell `as' to default to using the 16 bit value.  In this case,
11385      `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'.  You may use the
11386      `--base-size-default-32' option to restore the default behaviour.
11388 `--disp-size-default-16  --disp-size-default-32'
11389      If you use an addressing mode with a displacement, and the value
11390      of the displacement is not known, `as' will normally assume that
11391      the value is 32 bits.  For example, if the symbol `disp' has not
11392      been defined, `as' will assemble the addressing mode
11393      `%a0@(disp,%d0)' as though `disp' is a 32 bit value.  You may use
11394      the `--disp-size-default-16' option to tell `as' to instead assume
11395      that the displacement is 16 bits.  In this case, `as' will
11396      assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value.  You
11397      may use the `--disp-size-default-32' option to restore the default
11398      behaviour.
11400 `--pcrel'
11401      Always keep branches PC-relative.  In the M680x0 architecture all
11402      branches are defined as PC-relative.  However, on some processors
11403      they are limited to word displacements maximum.  When `as' needs a
11404      long branch that is not available, it normally emits an absolute
11405      jump instead.  This option disables this substitution.  When this
11406      option is given and no long branches are available, only word
11407      branches will be emitted.  An error message will be generated if a
11408      word branch cannot reach its target.  This option has no effect on
11409      68020 and other processors that have long branches.  *note Branch
11410      Improvement: M68K-Branch.
11412 `-m68000'
11413      `as' can assemble code for several different members of the
11414      Motorola 680x0 family.  The default depends upon how `as' was
11415      configured when it was built; normally, the default is to assemble
11416      code for the 68020 microprocessor.  The following options may be
11417      used to change the default.  These options control which
11418      instructions and addressing modes are permitted.  The members of
11419      the 680x0 family are very similar.  For detailed information about
11420      the differences, see the Motorola manuals.
11422     `-m68000'
11423     `-m68ec000'
11424     `-m68hc000'
11425     `-m68hc001'
11426     `-m68008'
11427     `-m68302'
11428     `-m68306'
11429     `-m68307'
11430     `-m68322'
11431     `-m68356'
11432           Assemble for the 68000. `-m68008', `-m68302', and so on are
11433           synonyms for `-m68000', since the chips are the same from the
11434           point of view of the assembler.
11436     `-m68010'
11437           Assemble for the 68010.
11439     `-m68020'
11440     `-m68ec020'
11441           Assemble for the 68020.  This is normally the default.
11443     `-m68030'
11444     `-m68ec030'
11445           Assemble for the 68030.
11447     `-m68040'
11448     `-m68ec040'
11449           Assemble for the 68040.
11451     `-m68060'
11452     `-m68ec060'
11453           Assemble for the 68060.
11455     `-mcpu32'
11456     `-m68330'
11457     `-m68331'
11458     `-m68332'
11459     `-m68333'
11460     `-m68334'
11461     `-m68336'
11462     `-m68340'
11463     `-m68341'
11464     `-m68349'
11465     `-m68360'
11466           Assemble for the CPU32 family of chips.
11468     `-m5200'
11470     `-m5202'
11472     `-m5204'
11474     `-m5206'
11476     `-m5206e'
11478     `-m521x'
11480     `-m5249'
11482     `-m528x'
11484     `-m5307'
11486     `-m5407'
11488     `-m547x'
11490     `-m548x'
11492     `-mcfv4'
11494     `-mcfv4e'
11495           Assemble for the ColdFire family of chips.
11497     `-m68881'
11498     `-m68882'
11499           Assemble 68881 floating point instructions.  This is the
11500           default for the 68020, 68030, and the CPU32.  The 68040 and
11501           68060 always support floating point instructions.
11503     `-mno-68881'
11504           Do not assemble 68881 floating point instructions.  This is
11505           the default for 68000 and the 68010.  The 68040 and 68060
11506           always support floating point instructions, even if this
11507           option is used.
11509     `-m68851'
11510           Assemble 68851 MMU instructions.  This is the default for the
11511           68020, 68030, and 68060.  The 68040 accepts a somewhat
11512           different set of MMU instructions; `-m68851' and `-m68040'
11513           should not be used together.
11515     `-mno-68851'
11516           Do not assemble 68851 MMU instructions.  This is the default
11517           for the 68000, 68010, and the CPU32.  The 68040 accepts a
11518           somewhat different set of MMU instructions.
11520 \x1f
11521 File: as.info,  Node: M68K-Syntax,  Next: M68K-Moto-Syntax,  Prev: M68K-Opts,  Up: M68K-Dependent
11523 9.21.2 Syntax
11524 -------------
11526 This syntax for the Motorola 680x0 was developed at MIT.
11528    The 680x0 version of `as' uses instructions names and syntax
11529 compatible with the Sun assembler.  Intervening periods are ignored;
11530 for example, `movl' is equivalent to `mov.l'.
11532    In the following table APC stands for any of the address registers
11533 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address
11534 relative to the program counter (`%zpc'), a suppressed address register
11535 (`%za0' through `%za7'), or it may be omitted entirely.  The use of
11536 SIZE means one of `w' or `l', and it may be omitted, along with the
11537 leading colon, unless a scale is also specified.  The use of SCALE
11538 means one of `1', `2', `4', or `8', and it may always be omitted along
11539 with the leading colon.
11541    The following addressing modes are understood:
11542 "Immediate"
11543      `#NUMBER'
11545 "Data Register"
11546      `%d0' through `%d7'
11548 "Address Register"
11549      `%a0' through `%a7'
11550      `%a7' is also known as `%sp', i.e., the Stack Pointer.  `%a6' is
11551      also known as `%fp', the Frame Pointer.
11553 "Address Register Indirect"
11554      `%a0@' through `%a7@'
11556 "Address Register Postincrement"
11557      `%a0@+' through `%a7@+'
11559 "Address Register Predecrement"
11560      `%a0@-' through `%a7@-'
11562 "Indirect Plus Offset"
11563      `APC@(NUMBER)'
11565 "Index"
11566      `APC@(NUMBER,REGISTER:SIZE:SCALE)'
11568      The NUMBER may be omitted.
11570 "Postindex"
11571      `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)'
11573      The ONUMBER or the REGISTER, but not both, may be omitted.
11575 "Preindex"
11576      `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)'
11578      The NUMBER may be omitted.  Omitting the REGISTER produces the
11579      Postindex addressing mode.
11581 "Absolute"
11582      `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'.
11584 \x1f
11585 File: as.info,  Node: M68K-Moto-Syntax,  Next: M68K-Float,  Prev: M68K-Syntax,  Up: M68K-Dependent
11587 9.21.3 Motorola Syntax
11588 ----------------------
11590 The standard Motorola syntax for this chip differs from the syntax
11591 already discussed (*note Syntax: M68K-Syntax.).  `as' can accept
11592 Motorola syntax for operands, even if MIT syntax is used for other
11593 operands in the same instruction.  The two kinds of syntax are fully
11594 compatible.
11596    In the following table APC stands for any of the address registers
11597 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address
11598 relative to the program counter (`%zpc'), or a suppressed address
11599 register (`%za0' through `%za7').  The use of SIZE means one of `w' or
11600 `l', and it may always be omitted along with the leading dot.  The use
11601 of SCALE means one of `1', `2', `4', or `8', and it may always be
11602 omitted along with the leading asterisk.
11604    The following additional addressing modes are understood:
11606 "Address Register Indirect"
11607      `(%a0)' through `(%a7)'
11608      `%a7' is also known as `%sp', i.e., the Stack Pointer.  `%a6' is
11609      also known as `%fp', the Frame Pointer.
11611 "Address Register Postincrement"
11612      `(%a0)+' through `(%a7)+'
11614 "Address Register Predecrement"
11615      `-(%a0)' through `-(%a7)'
11617 "Indirect Plus Offset"
11618      `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'.
11620      The NUMBER may also appear within the parentheses, as in
11621      `(NUMBER,%A0)'.  When used with the PC, the NUMBER may be omitted
11622      (with an address register, omitting the NUMBER produces Address
11623      Register Indirect mode).
11625 "Index"
11626      `NUMBER(APC,REGISTER.SIZE*SCALE)'
11628      The NUMBER may be omitted, or it may appear within the
11629      parentheses.  The APC may be omitted.  The REGISTER and the APC
11630      may appear in either order.  If both APC and REGISTER are address
11631      registers, and the SIZE and SCALE are omitted, then the first
11632      register is taken as the base register, and the second as the
11633      index register.
11635 "Postindex"
11636      `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)'
11638      The ONUMBER, or the REGISTER, or both, may be omitted.  Either the
11639      NUMBER or the APC may be omitted, but not both.
11641 "Preindex"
11642      `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)'
11644      The NUMBER, or the APC, or the REGISTER, or any two of them, may
11645      be omitted.  The ONUMBER may be omitted.  The REGISTER and the APC
11646      may appear in either order.  If both APC and REGISTER are address
11647      registers, and the SIZE and SCALE are omitted, then the first
11648      register is taken as the base register, and the second as the
11649      index register.
11651 \x1f
11652 File: as.info,  Node: M68K-Float,  Next: M68K-Directives,  Prev: M68K-Moto-Syntax,  Up: M68K-Dependent
11654 9.21.4 Floating Point
11655 ---------------------
11657 Packed decimal (P) format floating literals are not supported.  Feel
11658 free to add the code!
11660    The floating point formats generated by directives are these.
11662 `.float'
11663      `Single' precision floating point constants.
11665 `.double'
11666      `Double' precision floating point constants.
11668 `.extend'
11669 `.ldouble'
11670      `Extended' precision (`long double') floating point constants.
11672 \x1f
11673 File: as.info,  Node: M68K-Directives,  Next: M68K-opcodes,  Prev: M68K-Float,  Up: M68K-Dependent
11675 9.21.5 680x0 Machine Directives
11676 -------------------------------
11678 In order to be compatible with the Sun assembler the 680x0 assembler
11679 understands the following directives.
11681 `.data1'
11682      This directive is identical to a `.data 1' directive.
11684 `.data2'
11685      This directive is identical to a `.data 2' directive.
11687 `.even'
11688      This directive is a special case of the `.align' directive; it
11689      aligns the output to an even byte boundary.
11691 `.skip'
11692      This directive is identical to a `.space' directive.
11694 `.arch NAME'
11695      Select the target architecture and extension features.  Valid
11696      values for NAME are the same as for the `-march' command line
11697      option.  This directive cannot be specified after any instructions
11698      have been assembled.  If it is given multiple times, or in
11699      conjunction with the `-march' option, all uses must be for the
11700      same architecture and extension set.
11702 `.cpu NAME'
11703      Select the target cpu.  Valid valuse for NAME are the same as for
11704      the `-mcpu' command line option.  This directive cannot be
11705      specified after any instructions have been assembled.  If it is
11706      given multiple times, or in conjunction with the `-mopt' option,
11707      all uses must be for the same cpu.
11710 \x1f
11711 File: as.info,  Node: M68K-opcodes,  Prev: M68K-Directives,  Up: M68K-Dependent
11713 9.21.6 Opcodes
11714 --------------
11716 * Menu:
11718 * M68K-Branch::                 Branch Improvement
11719 * M68K-Chars::                  Special Characters
11721 \x1f
11722 File: as.info,  Node: M68K-Branch,  Next: M68K-Chars,  Up: M68K-opcodes
11724 9.21.6.1 Branch Improvement
11725 ...........................
11727 Certain pseudo opcodes are permitted for branch instructions.  They
11728 expand to the shortest branch instruction that reach the target.
11729 Generally these mnemonics are made by substituting `j' for `b' at the
11730 start of a Motorola mnemonic.
11732    The following table summarizes the pseudo-operations.  A `*' flags
11733 cases that are more fully described after the table:
11735                Displacement
11736                +------------------------------------------------------------
11737                |                68020           68000/10, not PC-relative OK
11738      Pseudo-Op |BYTE    WORD    LONG            ABSOLUTE LONG JUMP    **
11739                +------------------------------------------------------------
11740           jbsr |bsrs    bsrw    bsrl            jsr
11741            jra |bras    braw    bral            jmp
11742      *     jXX |bXXs    bXXw    bXXl            bNXs;jmp
11743      *    dbXX | N/A    dbXXw   dbXX;bras;bral  dbXX;bras;jmp
11744           fjXX | N/A    fbXXw   fbXXl            N/A
11746      XX: condition
11747      NX: negative of condition XX
11748                        `*'--see full description below
11749          `**'--this expansion mode is disallowed by `--pcrel'
11751 `jbsr'
11752 `jra'
11753      These are the simplest jump pseudo-operations; they always map to
11754      one particular machine instruction, depending on the displacement
11755      to the branch target.  This instruction will be a byte or word
11756      branch is that is sufficient.  Otherwise, a long branch will be
11757      emitted if available.  If no long branches are available and the
11758      `--pcrel' option is not given, an absolute long jump will be
11759      emitted instead.  If no long branches are available, the `--pcrel'
11760      option is given, and a word branch cannot reach the target, an
11761      error message is generated.
11763      In addition to standard branch operands, `as' allows these
11764      pseudo-operations to have all operands that are allowed for jsr
11765      and jmp, substituting these instructions if the operand given is
11766      not valid for a branch instruction.
11768 `jXX'
11769      Here, `jXX' stands for an entire family of pseudo-operations,
11770      where XX is a conditional branch or condition-code test.  The full
11771      list of pseudo-ops in this family is:
11772            jhi   jls   jcc   jcs   jne   jeq   jvc
11773            jvs   jpl   jmi   jge   jlt   jgt   jle
11775      Usually, each of these pseudo-operations expands to a single branch
11776      instruction.  However, if a word branch is not sufficient, no long
11777      branches are available, and the `--pcrel' option is not given, `as'
11778      issues a longer code fragment in terms of NX, the opposite
11779      condition to XX.  For example, under these conditions:
11780               jXX foo
11781      gives
11782                bNXs oof
11783                jmp foo
11784            oof:
11786 `dbXX'
11787      The full family of pseudo-operations covered here is
11788            dbhi   dbls   dbcc   dbcs   dbne   dbeq   dbvc
11789            dbvs   dbpl   dbmi   dbge   dblt   dbgt   dble
11790            dbf    dbra   dbt
11792      Motorola `dbXX' instructions allow word displacements only.  When
11793      a word displacement is sufficient, each of these pseudo-operations
11794      expands to the corresponding Motorola instruction.  When a word
11795      displacement is not sufficient and long branches are available,
11796      when the source reads `dbXX foo', `as' emits
11797                dbXX oo1
11798                bras oo2
11799            oo1:bral foo
11800            oo2:
11802      If, however, long branches are not available and the `--pcrel'
11803      option is not given, `as' emits
11804                dbXX oo1
11805                bras oo2
11806            oo1:jmp foo
11807            oo2:
11809 `fjXX'
11810      This family includes
11811            fjne   fjeq   fjge   fjlt   fjgt   fjle   fjf
11812            fjt    fjgl   fjgle  fjnge  fjngl  fjngle fjngt
11813            fjnle  fjnlt  fjoge  fjogl  fjogt  fjole  fjolt
11814            fjor   fjseq  fjsf   fjsne  fjst   fjueq  fjuge
11815            fjugt  fjule  fjult  fjun
11817      Each of these pseudo-operations always expands to a single Motorola
11818      coprocessor branch instruction, word or long.  All Motorola
11819      coprocessor branch instructions allow both word and long
11820      displacements.
11823 \x1f
11824 File: as.info,  Node: M68K-Chars,  Prev: M68K-Branch,  Up: M68K-opcodes
11826 9.21.6.2 Special Characters
11827 ...........................
11829 The immediate character is `#' for Sun compatibility.  The line-comment
11830 character is `|' (unless the `--bitwise-or' option is used).  If a `#'
11831 appears at the beginning of a line, it is treated as a comment unless
11832 it looks like `# line file', in which case it is treated normally.
11834 \x1f
11835 File: as.info,  Node: M68HC11-Dependent,  Next: MicroBlaze-Dependent,  Prev: M68K-Dependent,  Up: Machine Dependencies
11837 9.22 M68HC11 and M68HC12 Dependent Features
11838 ===========================================
11840 * Menu:
11842 * M68HC11-Opts::                   M68HC11 and M68HC12 Options
11843 * M68HC11-Syntax::                 Syntax
11844 * M68HC11-Modifiers::              Symbolic Operand Modifiers
11845 * M68HC11-Directives::             Assembler Directives
11846 * M68HC11-Float::                  Floating Point
11847 * M68HC11-opcodes::                Opcodes
11849 \x1f
11850 File: as.info,  Node: M68HC11-Opts,  Next: M68HC11-Syntax,  Up: M68HC11-Dependent
11852 9.22.1 M68HC11 and M68HC12 Options
11853 ----------------------------------
11855 The Motorola 68HC11 and 68HC12 version of `as' have a few machine
11856 dependent options.
11858 `-m68hc11'
11859      This option switches the assembler in the M68HC11 mode. In this
11860      mode, the assembler only accepts 68HC11 operands and mnemonics. It
11861      produces code for the 68HC11.
11863 `-m68hc12'
11864      This option switches the assembler in the M68HC12 mode. In this
11865      mode, the assembler also accepts 68HC12 operands and mnemonics. It
11866      produces code for the 68HC12. A few 68HC11 instructions are
11867      replaced by some 68HC12 instructions as recommended by Motorola
11868      specifications.
11870 `-m68hcs12'
11871      This option switches the assembler in the M68HCS12 mode.  This
11872      mode is similar to `-m68hc12' but specifies to assemble for the
11873      68HCS12 series.  The only difference is on the assembling of the
11874      `movb' and `movw' instruction when a PC-relative operand is used.
11876 `-mshort'
11877      This option controls the ABI and indicates to use a 16-bit integer
11878      ABI.  It has no effect on the assembled instructions.  This is the
11879      default.
11881 `-mlong'
11882      This option controls the ABI and indicates to use a 32-bit integer
11883      ABI.
11885 `-mshort-double'
11886      This option controls the ABI and indicates to use a 32-bit float
11887      ABI.  This is the default.
11889 `-mlong-double'
11890      This option controls the ABI and indicates to use a 64-bit float
11891      ABI.
11893 `--strict-direct-mode'
11894      You can use the `--strict-direct-mode' option to disable the
11895      automatic translation of direct page mode addressing into extended
11896      mode when the instruction does not support direct mode.  For
11897      example, the `clr' instruction does not support direct page mode
11898      addressing. When it is used with the direct page mode, `as' will
11899      ignore it and generate an absolute addressing.  This option
11900      prevents `as' from doing this, and the wrong usage of the direct
11901      page mode will raise an error.
11903 `--short-branches'
11904      The `--short-branches' option turns off the translation of
11905      relative branches into absolute branches when the branch offset is
11906      out of range. By default `as' transforms the relative branch
11907      (`bsr', `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc',
11908      `bls', `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch
11909      when the offset is out of the -128 .. 127 range.  In that case,
11910      the `bsr' instruction is translated into a `jsr', the `bra'
11911      instruction is translated into a `jmp' and the conditional
11912      branches instructions are inverted and followed by a `jmp'. This
11913      option disables these translations and `as' will generate an error
11914      if a relative branch is out of range. This option does not affect
11915      the optimization associated to the `jbra', `jbsr' and `jbXX'
11916      pseudo opcodes.
11918 `--force-long-branches'
11919      The `--force-long-branches' option forces the translation of
11920      relative branches into absolute branches. This option does not
11921      affect the optimization associated to the `jbra', `jbsr' and
11922      `jbXX' pseudo opcodes.
11924 `--print-insn-syntax'
11925      You can use the `--print-insn-syntax' option to obtain the syntax
11926      description of the instruction when an error is detected.
11928 `--print-opcodes'
11929      The `--print-opcodes' option prints the list of all the
11930      instructions with their syntax. The first item of each line
11931      represents the instruction name and the rest of the line indicates
11932      the possible operands for that instruction. The list is printed in
11933      alphabetical order. Once the list is printed `as' exits.
11935 `--generate-example'
11936      The `--generate-example' option is similar to `--print-opcodes'
11937      but it generates an example for each instruction instead.
11939 \x1f
11940 File: as.info,  Node: M68HC11-Syntax,  Next: M68HC11-Modifiers,  Prev: M68HC11-Opts,  Up: M68HC11-Dependent
11942 9.22.2 Syntax
11943 -------------
11945 In the M68HC11 syntax, the instruction name comes first and it may be
11946 followed by one or several operands (up to three). Operands are
11947 separated by comma (`,'). In the normal mode, `as' will complain if too
11948 many operands are specified for a given instruction. In the MRI mode
11949 (turned on with `-M' option), it will treat them as comments. Example:
11951      inx
11952      lda  #23
11953      bset 2,x #4
11954      brclr *bot #8 foo
11956    The following addressing modes are understood for 68HC11 and 68HC12:
11957 "Immediate"
11958      `#NUMBER'
11960 "Address Register"
11961      `NUMBER,X', `NUMBER,Y'
11963      The NUMBER may be omitted in which case 0 is assumed.
11965 "Direct Addressing mode"
11966      `*SYMBOL', or `*DIGITS'
11968 "Absolute"
11969      `SYMBOL', or `DIGITS'
11971    The M68HC12 has other more complex addressing modes. All of them are
11972 supported and they are represented below:
11974 "Constant Offset Indexed Addressing Mode"
11975      `NUMBER,REG'
11977      The NUMBER may be omitted in which case 0 is assumed.  The
11978      register can be either `X', `Y', `SP' or `PC'.  The assembler will
11979      use the smaller post-byte definition according to the constant
11980      value (5-bit constant offset, 9-bit constant offset or 16-bit
11981      constant offset).  If the constant is not known by the assembler
11982      it will use the 16-bit constant offset post-byte and the value
11983      will be resolved at link time.
11985 "Offset Indexed Indirect"
11986      `[NUMBER,REG]'
11988      The register can be either `X', `Y', `SP' or `PC'.
11990 "Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement"
11991      `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+'
11993      The number must be in the range `-8'..`+8' and must not be 0.  The
11994      register can be either `X', `Y', `SP' or `PC'.
11996 "Accumulator Offset"
11997      `ACC,REG'
11999      The accumulator register can be either `A', `B' or `D'.  The
12000      register can be either `X', `Y', `SP' or `PC'.
12002 "Accumulator D offset indexed-indirect"
12003      `[D,REG]'
12005      The register can be either `X', `Y', `SP' or `PC'.
12008    For example:
12010      ldab 1024,sp
12011      ldd [10,x]
12012      orab 3,+x
12013      stab -2,y-
12014      ldx a,pc
12015      sty [d,sp]
12017 \x1f
12018 File: as.info,  Node: M68HC11-Modifiers,  Next: M68HC11-Directives,  Prev: M68HC11-Syntax,  Up: M68HC11-Dependent
12020 9.22.3 Symbolic Operand Modifiers
12021 ---------------------------------
12023 The assembler supports several modifiers when using symbol addresses in
12024 68HC11 and 68HC12 instruction operands.  The general syntax is the
12025 following:
12027      %modifier(symbol)
12029 `%addr'
12030      This modifier indicates to the assembler and linker to use the
12031      16-bit physical address corresponding to the symbol.  This is
12032      intended to be used on memory window systems to map a symbol in
12033      the memory bank window.  If the symbol is in a memory expansion
12034      part, the physical address corresponds to the symbol address
12035      within the memory bank window.  If the symbol is not in a memory
12036      expansion part, this is the symbol address (using or not using the
12037      %addr modifier has no effect in that case).
12039 `%page'
12040      This modifier indicates to use the memory page number corresponding
12041      to the symbol.  If the symbol is in a memory expansion part, its
12042      page number is computed by the linker as a number used to map the
12043      page containing the symbol in the memory bank window.  If the
12044      symbol is not in a memory expansion part, the page number is 0.
12046 `%hi'
12047      This modifier indicates to use the 8-bit high part of the physical
12048      address of the symbol.
12050 `%lo'
12051      This modifier indicates to use the 8-bit low part of the physical
12052      address of the symbol.
12055    For example a 68HC12 call to a function `foo_example' stored in
12056 memory expansion part could be written as follows:
12058      call %addr(foo_example),%page(foo_example)
12060    and this is equivalent to
12062      call foo_example
12064    And for 68HC11 it could be written as follows:
12066      ldab #%page(foo_example)
12067      stab _page_switch
12068      jsr  %addr(foo_example)
12070 \x1f
12071 File: as.info,  Node: M68HC11-Directives,  Next: M68HC11-Float,  Prev: M68HC11-Modifiers,  Up: M68HC11-Dependent
12073 9.22.4 Assembler Directives
12074 ---------------------------
12076 The 68HC11 and 68HC12 version of `as' have the following specific
12077 assembler directives:
12079 `.relax'
12080      The relax directive is used by the `GNU Compiler' to emit a
12081      specific relocation to mark a group of instructions for linker
12082      relaxation.  The sequence of instructions within the group must be
12083      known to the linker so that relaxation can be performed.
12085 `.mode [mshort|mlong|mshort-double|mlong-double]'
12086      This directive specifies the ABI.  It overrides the `-mshort',
12087      `-mlong', `-mshort-double' and `-mlong-double' options.
12089 `.far SYMBOL'
12090      This directive marks the symbol as a `far' symbol meaning that it
12091      uses a `call/rtc' calling convention as opposed to `jsr/rts'.
12092      During a final link, the linker will identify references to the
12093      `far' symbol and will verify the proper calling convention.
12095 `.interrupt SYMBOL'
12096      This directive marks the symbol as an interrupt entry point.  This
12097      information is then used by the debugger to correctly unwind the
12098      frame across interrupts.
12100 `.xrefb SYMBOL'
12101      This directive is defined for compatibility with the
12102      `Specification for Motorola 8 and 16-Bit Assembly Language Input
12103      Standard' and is ignored.
12106 \x1f
12107 File: as.info,  Node: M68HC11-Float,  Next: M68HC11-opcodes,  Prev: M68HC11-Directives,  Up: M68HC11-Dependent
12109 9.22.5 Floating Point
12110 ---------------------
12112 Packed decimal (P) format floating literals are not supported.  Feel
12113 free to add the code!
12115    The floating point formats generated by directives are these.
12117 `.float'
12118      `Single' precision floating point constants.
12120 `.double'
12121      `Double' precision floating point constants.
12123 `.extend'
12124 `.ldouble'
12125      `Extended' precision (`long double') floating point constants.
12127 \x1f
12128 File: as.info,  Node: M68HC11-opcodes,  Prev: M68HC11-Float,  Up: M68HC11-Dependent
12130 9.22.6 Opcodes
12131 --------------
12133 * Menu:
12135 * M68HC11-Branch::                 Branch Improvement
12137 \x1f
12138 File: as.info,  Node: M68HC11-Branch,  Up: M68HC11-opcodes
12140 9.22.6.1 Branch Improvement
12141 ...........................
12143 Certain pseudo opcodes are permitted for branch instructions.  They
12144 expand to the shortest branch instruction that reach the target.
12145 Generally these mnemonics are made by prepending `j' to the start of
12146 Motorola mnemonic. These pseudo opcodes are not affected by the
12147 `--short-branches' or `--force-long-branches' options.
12149    The following table summarizes the pseudo-operations.
12151                              Displacement Width
12152           +-------------------------------------------------------------+
12153           |                     Options                                 |
12154           |    --short-branches           --force-long-branches         |
12155           +--------------------------+----------------------------------+
12156        Op |BYTE             WORD     | BYTE          WORD               |
12157           +--------------------------+----------------------------------+
12158       bsr | bsr <pc-rel>    <error>  |               jsr <abs>          |
12159       bra | bra <pc-rel>    <error>  |               jmp <abs>          |
12160      jbsr | bsr <pc-rel>   jsr <abs> | bsr <pc-rel>  jsr <abs>          |
12161      jbra | bra <pc-rel>   jmp <abs> | bra <pc-rel>  jmp <abs>          |
12162       bXX | bXX <pc-rel>    <error>  |               bNX +3; jmp <abs>  |
12163      jbXX | bXX <pc-rel>   bNX +3;   | bXX <pc-rel>  bNX +3; jmp <abs>  |
12164           |                jmp <abs> |                                  |
12165           +--------------------------+----------------------------------+
12166      XX: condition
12167      NX: negative of condition XX
12169 `jbsr'
12170 `jbra'
12171      These are the simplest jump pseudo-operations; they always map to
12172      one particular machine instruction, depending on the displacement
12173      to the branch target.
12175 `jbXX'
12176      Here, `jbXX' stands for an entire family of pseudo-operations,
12177      where XX is a conditional branch or condition-code test.  The full
12178      list of pseudo-ops in this family is:
12179            jbcc   jbeq   jbge   jbgt   jbhi   jbvs   jbpl  jblo
12180            jbcs   jbne   jblt   jble   jbls   jbvc   jbmi
12182      For the cases of non-PC relative displacements and long
12183      displacements, `as' issues a longer code fragment in terms of NX,
12184      the opposite condition to XX.  For example, for the non-PC
12185      relative case:
12186               jbXX foo
12187      gives
12188                bNXs oof
12189                jmp foo
12190            oof:
12193 \x1f
12194 File: as.info,  Node: MicroBlaze-Dependent,  Next: MIPS-Dependent,  Prev: M68HC11-Dependent,  Up: Machine Dependencies
12196 9.23 MicroBlaze Dependent Features
12197 ==================================
12199    The Xilinx MicroBlaze processor family includes several variants,
12200 all using the same core instruction set.  This chapter covers features
12201 of the GNU assembler that are specific to the MicroBlaze architecture.
12202 For details about the MicroBlaze instruction set, please see the
12203 `MicroBlaze Processor Reference Guide (UG081)' available at
12204 www.xilinx.com.
12206 * Menu:
12208 * MicroBlaze Directives::           Directives for MicroBlaze Processors.
12210 \x1f
12211 File: as.info,  Node: MicroBlaze Directives,  Up: MicroBlaze-Dependent
12213 9.23.1 Directives
12214 -----------------
12216 A number of assembler directives are available for MicroBlaze.
12218 `.data8 EXPRESSION,...'
12219      This directive is an alias for `.byte'. Each expression is
12220      assembled into an eight-bit value.
12222 `.data16 EXPRESSION,...'
12223      This directive is an alias for `.hword'. Each expression is
12224      assembled into an 16-bit value.
12226 `.data32 EXPRESSION,...'
12227      This directive is an alias for `.word'. Each expression is
12228      assembled into an 32-bit value.
12230 `.ent NAME[,LABEL]'
12231      This directive is an alias for `.func' denoting the start of
12232      function NAME at (optional) LABEL.
12234 `.end NAME[,LABEL]'
12235      This directive is an alias for `.endfunc' denoting the end of
12236      function NAME.
12238 `.gpword LABEL,...'
12239      This directive is an alias for `.rva'.  The resolved address of
12240      LABEL is stored in the data section.
12242 `.weakext LABEL'
12243      Declare that LABEL is a weak external symbol.
12245 `.rodata'
12246      Switch to .rodata section. Equivalent to `.section .rodata'
12248 `.sdata2'
12249      Switch to .sdata2 section. Equivalent to `.section .sdata2'
12251 `.sdata'
12252      Switch to .sdata section. Equivalent to `.section .sdata'
12254 `.bss'
12255      Switch to .bss section. Equivalent to `.section .bss'
12257 `.sbss'
12258      Switch to .sbss section. Equivalent to `.section .sbss'
12260 \x1f
12261 File: as.info,  Node: MIPS-Dependent,  Next: MMIX-Dependent,  Prev: MicroBlaze-Dependent,  Up: Machine Dependencies
12263 9.24 MIPS Dependent Features
12264 ============================
12266    GNU `as' for MIPS architectures supports several different MIPS
12267 processors, and MIPS ISA levels I through V, MIPS32, and MIPS64.  For
12268 information about the MIPS instruction set, see `MIPS RISC
12269 Architecture', by Kane and Heindrich (Prentice-Hall).  For an overview
12270 of MIPS assembly conventions, see "Appendix D: Assembly Language
12271 Programming" in the same work.
12273 * Menu:
12275 * MIPS Opts::           Assembler options
12276 * MIPS Object::         ECOFF object code
12277 * MIPS Stabs::          Directives for debugging information
12278 * MIPS ISA::            Directives to override the ISA level
12279 * MIPS symbol sizes::   Directives to override the size of symbols
12280 * MIPS autoextend::     Directives for extending MIPS 16 bit instructions
12281 * MIPS insn::           Directive to mark data as an instruction
12282 * MIPS option stack::   Directives to save and restore options
12283 * MIPS ASE instruction generation overrides:: Directives to control
12284                         generation of MIPS ASE instructions
12285 * MIPS floating-point:: Directives to override floating-point options
12287 \x1f
12288 File: as.info,  Node: MIPS Opts,  Next: MIPS Object,  Up: MIPS-Dependent
12290 9.24.1 Assembler options
12291 ------------------------
12293 The MIPS configurations of GNU `as' support these special options:
12295 `-G NUM'
12296      This option sets the largest size of an object that can be
12297      referenced implicitly with the `gp' register.  It is only accepted
12298      for targets that use ECOFF format.  The default value is 8.
12300 `-EB'
12301 `-EL'
12302      Any MIPS configuration of `as' can select big-endian or
12303      little-endian output at run time (unlike the other GNU development
12304      tools, which must be configured for one or the other).  Use `-EB'
12305      to select big-endian output, and `-EL' for little-endian.
12307 `-KPIC'
12308      Generate SVR4-style PIC.  This option tells the assembler to
12309      generate SVR4-style position-independent macro expansions.  It
12310      also tells the assembler to mark the output file as PIC.
12312 `-mvxworks-pic'
12313      Generate VxWorks PIC.  This option tells the assembler to generate
12314      VxWorks-style position-independent macro expansions.
12316 `-mips1'
12317 `-mips2'
12318 `-mips3'
12319 `-mips4'
12320 `-mips5'
12321 `-mips32'
12322 `-mips32r2'
12323 `-mips64'
12324 `-mips64r2'
12325      Generate code for a particular MIPS Instruction Set Architecture
12326      level.  `-mips1' corresponds to the R2000 and R3000 processors,
12327      `-mips2' to the R6000 processor, `-mips3' to the R4000 processor,
12328      and `-mips4' to the R8000 and R10000 processors.  `-mips5',
12329      `-mips32', `-mips32r2', `-mips64', and `-mips64r2' correspond to
12330      generic MIPS V, MIPS32, MIPS32 RELEASE 2, MIPS64, and MIPS64
12331      RELEASE 2 ISA processors, respectively.  You can also switch
12332      instruction sets during the assembly; see *Note Directives to
12333      override the ISA level: MIPS ISA.
12335 `-mgp32'
12336 `-mfp32'
12337      Some macros have different expansions for 32-bit and 64-bit
12338      registers.  The register sizes are normally inferred from the ISA
12339      and ABI, but these flags force a certain group of registers to be
12340      treated as 32 bits wide at all times.  `-mgp32' controls the size
12341      of general-purpose registers and `-mfp32' controls the size of
12342      floating-point registers.
12344      The `.set gp=32' and `.set fp=32' directives allow the size of
12345      registers to be changed for parts of an object. The default value
12346      is restored by `.set gp=default' and `.set fp=default'.
12348      On some MIPS variants there is a 32-bit mode flag; when this flag
12349      is set, 64-bit instructions generate a trap.  Also, some 32-bit
12350      OSes only save the 32-bit registers on a context switch, so it is
12351      essential never to use the 64-bit registers.
12353 `-mgp64'
12354 `-mfp64'
12355      Assume that 64-bit registers are available.  This is provided in
12356      the interests of symmetry with `-mgp32' and `-mfp32'.
12358      The `.set gp=64' and `.set fp=64' directives allow the size of
12359      registers to be changed for parts of an object. The default value
12360      is restored by `.set gp=default' and `.set fp=default'.
12362 `-mips16'
12363 `-no-mips16'
12364      Generate code for the MIPS 16 processor.  This is equivalent to
12365      putting `.set mips16' at the start of the assembly file.
12366      `-no-mips16' turns off this option.
12368 `-msmartmips'
12369 `-mno-smartmips'
12370      Enables the SmartMIPS extensions to the MIPS32 instruction set,
12371      which provides a number of new instructions which target smartcard
12372      and cryptographic applications.  This is equivalent to putting
12373      `.set smartmips' at the start of the assembly file.
12374      `-mno-smartmips' turns off this option.
12376 `-mips3d'
12377 `-no-mips3d'
12378      Generate code for the MIPS-3D Application Specific Extension.
12379      This tells the assembler to accept MIPS-3D instructions.
12380      `-no-mips3d' turns off this option.
12382 `-mdmx'
12383 `-no-mdmx'
12384      Generate code for the MDMX Application Specific Extension.  This
12385      tells the assembler to accept MDMX instructions.  `-no-mdmx' turns
12386      off this option.
12388 `-mdsp'
12389 `-mno-dsp'
12390      Generate code for the DSP Release 1 Application Specific Extension.
12391      This tells the assembler to accept DSP Release 1 instructions.
12392      `-mno-dsp' turns off this option.
12394 `-mdspr2'
12395 `-mno-dspr2'
12396      Generate code for the DSP Release 2 Application Specific Extension.
12397      This option implies -mdsp.  This tells the assembler to accept DSP
12398      Release 2 instructions.  `-mno-dspr2' turns off this option.
12400 `-mmt'
12401 `-mno-mt'
12402      Generate code for the MT Application Specific Extension.  This
12403      tells the assembler to accept MT instructions.  `-mno-mt' turns
12404      off this option.
12406 `-mfix7000'
12407 `-mno-fix7000'
12408      Cause nops to be inserted if the read of the destination register
12409      of an mfhi or mflo instruction occurs in the following two
12410      instructions.
12412 `-mfix-vr4120'
12413 `-no-mfix-vr4120'
12414      Insert nops to work around certain VR4120 errata.  This option is
12415      intended to be used on GCC-generated code: it is not designed to
12416      catch all problems in hand-written assembler code.
12418 `-mfix-vr4130'
12419 `-no-mfix-vr4130'
12420      Insert nops to work around the VR4130 `mflo'/`mfhi' errata.
12422 `-mfix-24k'
12423 `-no-mfix-24k'
12424      Insert nops to work around the 24K `eret'/`deret' errata.
12426 `-m4010'
12427 `-no-m4010'
12428      Generate code for the LSI R4010 chip.  This tells the assembler to
12429      accept the R4010 specific instructions (`addciu', `ffc', etc.),
12430      and to not schedule `nop' instructions around accesses to the `HI'
12431      and `LO' registers.  `-no-m4010' turns off this option.
12433 `-m4650'
12434 `-no-m4650'
12435      Generate code for the MIPS R4650 chip.  This tells the assembler
12436      to accept the `mad' and `madu' instruction, and to not schedule
12437      `nop' instructions around accesses to the `HI' and `LO' registers.
12438      `-no-m4650' turns off this option.
12440 `-m3900'
12441 `-no-m3900'
12442 `-m4100'
12443 `-no-m4100'
12444      For each option `-mNNNN', generate code for the MIPS RNNNN chip.
12445      This tells the assembler to accept instructions specific to that
12446      chip, and to schedule for that chip's hazards.
12448 `-march=CPU'
12449      Generate code for a particular MIPS cpu.  It is exactly equivalent
12450      to `-mCPU', except that there are more value of CPU understood.
12451      Valid CPU value are:
12453           2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130,
12454           vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231,
12455           rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000,
12456           10000, 12000, 14000, 16000, 4kc, 4km, 4kp, 4ksc, 4kec, 4kem,
12457           4kep, 4ksd, m4k, m4kp, 24kc, 24kf2_1, 24kf, 24kf1_1, 24kec,
12458           24kef2_1, 24kef, 24kef1_1, 34kc, 34kf2_1, 34kf, 34kf1_1, 74kc,
12459           74kf2_1, 74kf, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1, 1004kf,
12460           1004kf1_1, 5kc, 5kf, 20kc, 25kf, sb1, sb1a, loongson2e,
12461           loongson2f, octeon, xlr
12463      For compatibility reasons, `Nx' and `Bfx' are accepted as synonyms
12464      for `Nf1_1'.  These values are deprecated.
12466 `-mtune=CPU'
12467      Schedule and tune for a particular MIPS cpu.  Valid CPU values are
12468      identical to `-march=CPU'.
12470 `-mabi=ABI'
12471      Record which ABI the source code uses.  The recognized arguments
12472      are: `32', `n32', `o64', `64' and `eabi'.
12474 `-msym32'
12475 `-mno-sym32'
12476      Equivalent to adding `.set sym32' or `.set nosym32' to the
12477      beginning of the assembler input.  *Note MIPS symbol sizes::.
12479 `-nocpp'
12480      This option is ignored.  It is accepted for command-line
12481      compatibility with other assemblers, which use it to turn off C
12482      style preprocessing.  With GNU `as', there is no need for
12483      `-nocpp', because the GNU assembler itself never runs the C
12484      preprocessor.
12486 `-msoft-float'
12487 `-mhard-float'
12488      Disable or enable floating-point instructions.  Note that by
12489      default floating-point instructions are always allowed even with
12490      CPU targets that don't have support for these instructions.
12492 `-msingle-float'
12493 `-mdouble-float'
12494      Disable or enable double-precision floating-point operations.  Note
12495      that by default double-precision floating-point operations are
12496      always allowed even with CPU targets that don't have support for
12497      these operations.
12499 `--construct-floats'
12500 `--no-construct-floats'
12501      The `--no-construct-floats' option disables the construction of
12502      double width floating point constants by loading the two halves of
12503      the value into the two single width floating point registers that
12504      make up the double width register.  This feature is useful if the
12505      processor support the FR bit in its status  register, and this bit
12506      is known (by the programmer) to be set.  This bit prevents the
12507      aliasing of the double width register by the single width
12508      registers.
12510      By default `--construct-floats' is selected, allowing construction
12511      of these floating point constants.
12513 `--trap'
12514 `--no-break'
12515      `as' automatically macro expands certain division and
12516      multiplication instructions to check for overflow and division by
12517      zero.  This option causes `as' to generate code to take a trap
12518      exception rather than a break exception when an error is detected.
12519      The trap instructions are only supported at Instruction Set
12520      Architecture level 2 and higher.
12522 `--break'
12523 `--no-trap'
12524      Generate code to take a break exception rather than a trap
12525      exception when an error is detected.  This is the default.
12527 `-mpdr'
12528 `-mno-pdr'
12529      Control generation of `.pdr' sections.  Off by default on IRIX, on
12530      elsewhere.
12532 `-mshared'
12533 `-mno-shared'
12534      When generating code using the Unix calling conventions (selected
12535      by `-KPIC' or `-mcall_shared'), gas will normally generate code
12536      which can go into a shared library.  The `-mno-shared' option
12537      tells gas to generate code which uses the calling convention, but
12538      can not go into a shared library.  The resulting code is slightly
12539      more efficient.  This option only affects the handling of the
12540      `.cpload' and `.cpsetup' pseudo-ops.
12542 \x1f
12543 File: as.info,  Node: MIPS Object,  Next: MIPS Stabs,  Prev: MIPS Opts,  Up: MIPS-Dependent
12545 9.24.2 MIPS ECOFF object code
12546 -----------------------------
12548 Assembling for a MIPS ECOFF target supports some additional sections
12549 besides the usual `.text', `.data' and `.bss'.  The additional sections
12550 are `.rdata', used for read-only data, `.sdata', used for small data,
12551 and `.sbss', used for small common objects.
12553    When assembling for ECOFF, the assembler uses the `$gp' (`$28')
12554 register to form the address of a "small object".  Any object in the
12555 `.sdata' or `.sbss' sections is considered "small" in this sense.  For
12556 external objects, or for objects in the `.bss' section, you can use the
12557 `gcc' `-G' option to control the size of objects addressed via `$gp';
12558 the default value is 8, meaning that a reference to any object eight
12559 bytes or smaller uses `$gp'.  Passing `-G 0' to `as' prevents it from
12560 using the `$gp' register on the basis of object size (but the assembler
12561 uses `$gp' for objects in `.sdata' or `sbss' in any case).  The size of
12562 an object in the `.bss' section is set by the `.comm' or `.lcomm'
12563 directive that defines it.  The size of an external object may be set
12564 with the `.extern' directive.  For example, `.extern sym,4' declares
12565 that the object at `sym' is 4 bytes in length, whie leaving `sym'
12566 otherwise undefined.
12568    Using small ECOFF objects requires linker support, and assumes that
12569 the `$gp' register is correctly initialized (normally done
12570 automatically by the startup code).  MIPS ECOFF assembly code must not
12571 modify the `$gp' register.
12573 \x1f
12574 File: as.info,  Node: MIPS Stabs,  Next: MIPS ISA,  Prev: MIPS Object,  Up: MIPS-Dependent
12576 9.24.3 Directives for debugging information
12577 -------------------------------------------
12579 MIPS ECOFF `as' supports several directives used for generating
12580 debugging information which are not support by traditional MIPS
12581 assemblers.  These are `.def', `.endef', `.dim', `.file', `.scl',
12582 `.size', `.tag', `.type', `.val', `.stabd', `.stabn', and `.stabs'.
12583 The debugging information generated by the three `.stab' directives can
12584 only be read by GDB, not by traditional MIPS debuggers (this
12585 enhancement is required to fully support C++ debugging).  These
12586 directives are primarily used by compilers, not assembly language
12587 programmers!
12589 \x1f
12590 File: as.info,  Node: MIPS symbol sizes,  Next: MIPS autoextend,  Prev: MIPS ISA,  Up: MIPS-Dependent
12592 9.24.4 Directives to override the size of symbols
12593 -------------------------------------------------
12595 The n64 ABI allows symbols to have any 64-bit value.  Although this
12596 provides a great deal of flexibility, it means that some macros have
12597 much longer expansions than their 32-bit counterparts.  For example,
12598 the non-PIC expansion of `dla $4,sym' is usually:
12600      lui     $4,%highest(sym)
12601      lui     $1,%hi(sym)
12602      daddiu  $4,$4,%higher(sym)
12603      daddiu  $1,$1,%lo(sym)
12604      dsll32  $4,$4,0
12605      daddu   $4,$4,$1
12607    whereas the 32-bit expansion is simply:
12609      lui     $4,%hi(sym)
12610      daddiu  $4,$4,%lo(sym)
12612    n64 code is sometimes constructed in such a way that all symbolic
12613 constants are known to have 32-bit values, and in such cases, it's
12614 preferable to use the 32-bit expansion instead of the 64-bit expansion.
12616    You can use the `.set sym32' directive to tell the assembler that,
12617 from this point on, all expressions of the form `SYMBOL' or `SYMBOL +
12618 OFFSET' have 32-bit values.  For example:
12620      .set sym32
12621      dla     $4,sym
12622      lw      $4,sym+16
12623      sw      $4,sym+0x8000($4)
12625    will cause the assembler to treat `sym', `sym+16' and `sym+0x8000'
12626 as 32-bit values.  The handling of non-symbolic addresses is not
12627 affected.
12629    The directive `.set nosym32' ends a `.set sym32' block and reverts
12630 to the normal behavior.  It is also possible to change the symbol size
12631 using the command-line options `-msym32' and `-mno-sym32'.
12633    These options and directives are always accepted, but at present,
12634 they have no effect for anything other than n64.
12636 \x1f
12637 File: as.info,  Node: MIPS ISA,  Next: MIPS symbol sizes,  Prev: MIPS Stabs,  Up: MIPS-Dependent
12639 9.24.5 Directives to override the ISA level
12640 -------------------------------------------
12642 GNU `as' supports an additional directive to change the MIPS
12643 Instruction Set Architecture level on the fly: `.set mipsN'.  N should
12644 be a number from 0 to 5, or 32, 32r2, 64 or 64r2.  The values other
12645 than 0 make the assembler accept instructions for the corresponding ISA
12646 level, from that point on in the assembly.  `.set mipsN' affects not
12647 only which instructions are permitted, but also how certain macros are
12648 expanded.  `.set mips0' restores the ISA level to its original level:
12649 either the level you selected with command line options, or the default
12650 for your configuration.  You can use this feature to permit specific
12651 MIPS3 instructions while assembling in 32 bit mode.  Use this directive
12652 with care!
12654    The `.set arch=CPU' directive provides even finer control.  It
12655 changes the effective CPU target and allows the assembler to use
12656 instructions specific to a particular CPU.  All CPUs supported by the
12657 `-march' command line option are also selectable by this directive.
12658 The original value is restored by `.set arch=default'.
12660    The directive `.set mips16' puts the assembler into MIPS 16 mode, in
12661 which it will assemble instructions for the MIPS 16 processor.  Use
12662 `.set nomips16' to return to normal 32 bit mode.
12664    Traditional MIPS assemblers do not support this directive.
12666 \x1f
12667 File: as.info,  Node: MIPS autoextend,  Next: MIPS insn,  Prev: MIPS symbol sizes,  Up: MIPS-Dependent
12669 9.24.6 Directives for extending MIPS 16 bit instructions
12670 --------------------------------------------------------
12672 By default, MIPS 16 instructions are automatically extended to 32 bits
12673 when necessary.  The directive `.set noautoextend' will turn this off.
12674 When `.set noautoextend' is in effect, any 32 bit instruction must be
12675 explicitly extended with the `.e' modifier (e.g., `li.e $4,1000').  The
12676 directive `.set autoextend' may be used to once again automatically
12677 extend instructions when necessary.
12679    This directive is only meaningful when in MIPS 16 mode.  Traditional
12680 MIPS assemblers do not support this directive.
12682 \x1f
12683 File: as.info,  Node: MIPS insn,  Next: MIPS option stack,  Prev: MIPS autoextend,  Up: MIPS-Dependent
12685 9.24.7 Directive to mark data as an instruction
12686 -----------------------------------------------
12688 The `.insn' directive tells `as' that the following data is actually
12689 instructions.  This makes a difference in MIPS 16 mode: when loading
12690 the address of a label which precedes instructions, `as' automatically
12691 adds 1 to the value, so that jumping to the loaded address will do the
12692 right thing.
12694    The `.global' and `.globl' directives supported by `as' will by
12695 default mark the symbol as pointing to a region of data not code.  This
12696 means that, for example, any instructions following such a symbol will
12697 not be disassembled by `objdump' as it will regard them as data.  To
12698 change this behaviour an optional section name can be placed after the
12699 symbol name in the `.global' directive.  If this section exists and is
12700 known to be a code section, then the symbol will be marked as poiting at
12701 code not data.  Ie the syntax for the directive is:
12703    `.global SYMBOL[ SECTION][, SYMBOL[ SECTION]] ...',
12705    Here is a short example:
12707              .global foo .text, bar, baz .data
12708      foo:
12709              nop
12710      bar:
12711              .word 0x0
12712      baz:
12713              .word 0x1
12715 \x1f
12716 File: as.info,  Node: MIPS option stack,  Next: MIPS ASE instruction generation overrides,  Prev: MIPS insn,  Up: MIPS-Dependent
12718 9.24.8 Directives to save and restore options
12719 ---------------------------------------------
12721 The directives `.set push' and `.set pop' may be used to save and
12722 restore the current settings for all the options which are controlled
12723 by `.set'.  The `.set push' directive saves the current settings on a
12724 stack.  The `.set pop' directive pops the stack and restores the
12725 settings.
12727    These directives can be useful inside an macro which must change an
12728 option such as the ISA level or instruction reordering but does not want
12729 to change the state of the code which invoked the macro.
12731    Traditional MIPS assemblers do not support these directives.
12733 \x1f
12734 File: as.info,  Node: MIPS ASE instruction generation overrides,  Next: MIPS floating-point,  Prev: MIPS option stack,  Up: MIPS-Dependent
12736 9.24.9 Directives to control generation of MIPS ASE instructions
12737 ----------------------------------------------------------------
12739 The directive `.set mips3d' makes the assembler accept instructions
12740 from the MIPS-3D Application Specific Extension from that point on in
12741 the assembly.  The `.set nomips3d' directive prevents MIPS-3D
12742 instructions from being accepted.
12744    The directive `.set smartmips' makes the assembler accept
12745 instructions from the SmartMIPS Application Specific Extension to the
12746 MIPS32 ISA from that point on in the assembly.  The `.set nosmartmips'
12747 directive prevents SmartMIPS instructions from being accepted.
12749    The directive `.set mdmx' makes the assembler accept instructions
12750 from the MDMX Application Specific Extension from that point on in the
12751 assembly.  The `.set nomdmx' directive prevents MDMX instructions from
12752 being accepted.
12754    The directive `.set dsp' makes the assembler accept instructions
12755 from the DSP Release 1 Application Specific Extension from that point
12756 on in the assembly.  The `.set nodsp' directive prevents DSP Release 1
12757 instructions from being accepted.
12759    The directive `.set dspr2' makes the assembler accept instructions
12760 from the DSP Release 2 Application Specific Extension from that point
12761 on in the assembly.  This dirctive implies `.set dsp'.  The `.set
12762 nodspr2' directive prevents DSP Release 2 instructions from being
12763 accepted.
12765    The directive `.set mt' makes the assembler accept instructions from
12766 the MT Application Specific Extension from that point on in the
12767 assembly.  The `.set nomt' directive prevents MT instructions from
12768 being accepted.
12770    Traditional MIPS assemblers do not support these directives.
12772 \x1f
12773 File: as.info,  Node: MIPS floating-point,  Prev: MIPS ASE instruction generation overrides,  Up: MIPS-Dependent
12775 9.24.10 Directives to override floating-point options
12776 -----------------------------------------------------
12778 The directives `.set softfloat' and `.set hardfloat' provide finer
12779 control of disabling and enabling float-point instructions.  These
12780 directives always override the default (that hard-float instructions
12781 are accepted) or the command-line options (`-msoft-float' and
12782 `-mhard-float').
12784    The directives `.set singlefloat' and `.set doublefloat' provide
12785 finer control of disabling and enabling double-precision float-point
12786 operations.  These directives always override the default (that
12787 double-precision operations are accepted) or the command-line options
12788 (`-msingle-float' and `-mdouble-float').
12790    Traditional MIPS assemblers do not support these directives.
12792 \x1f
12793 File: as.info,  Node: MMIX-Dependent,  Next: MSP430-Dependent,  Prev: MIPS-Dependent,  Up: Machine Dependencies
12795 9.25 MMIX Dependent Features
12796 ============================
12798 * Menu:
12800 * MMIX-Opts::              Command-line Options
12801 * MMIX-Expand::            Instruction expansion
12802 * MMIX-Syntax::            Syntax
12803 * MMIX-mmixal::            Differences to `mmixal' syntax and semantics
12805 \x1f
12806 File: as.info,  Node: MMIX-Opts,  Next: MMIX-Expand,  Up: MMIX-Dependent
12808 9.25.1 Command-line Options
12809 ---------------------------
12811 The MMIX version of `as' has some machine-dependent options.
12813    When `--fixed-special-register-names' is specified, only the register
12814 names specified in *Note MMIX-Regs:: are recognized in the instructions
12815 `PUT' and `GET'.
12817    You can use the `--globalize-symbols' to make all symbols global.
12818 This option is useful when splitting up a `mmixal' program into several
12819 files.
12821    The `--gnu-syntax' turns off most syntax compatibility with
12822 `mmixal'.  Its usability is currently doubtful.
12824    The `--relax' option is not fully supported, but will eventually make
12825 the object file prepared for linker relaxation.
12827    If you want to avoid inadvertently calling a predefined symbol and
12828 would rather get an error, for example when using `as' with a compiler
12829 or other machine-generated code, specify `--no-predefined-syms'.  This
12830 turns off built-in predefined definitions of all such symbols,
12831 including rounding-mode symbols, segment symbols, `BIT' symbols, and
12832 `TRAP' symbols used in `mmix' "system calls".  It also turns off
12833 predefined special-register names, except when used in `PUT' and `GET'
12834 instructions.
12836    By default, some instructions are expanded to fit the size of the
12837 operand or an external symbol (*note MMIX-Expand::).  By passing
12838 `--no-expand', no such expansion will be done, instead causing errors
12839 at link time if the operand does not fit.
12841    The `mmixal' documentation (*note mmixsite::) specifies that global
12842 registers allocated with the `GREG' directive (*note MMIX-greg::) and
12843 initialized to the same non-zero value, will refer to the same global
12844 register.  This isn't strictly enforceable in `as' since the final
12845 addresses aren't known until link-time, but it will do an effort unless
12846 the `--no-merge-gregs' option is specified.  (Register merging isn't
12847 yet implemented in `ld'.)
12849    `as' will warn every time it expands an instruction to fit an
12850 operand unless the option `-x' is specified.  It is believed that this
12851 behaviour is more useful than just mimicking `mmixal''s behaviour, in
12852 which instructions are only expanded if the `-x' option is specified,
12853 and assembly fails otherwise, when an instruction needs to be expanded.
12854 It needs to be kept in mind that `mmixal' is both an assembler and
12855 linker, while `as' will expand instructions that at link stage can be
12856 contracted.  (Though linker relaxation isn't yet implemented in `ld'.)
12857 The option `-x' also imples `--linker-allocated-gregs'.
12859    If instruction expansion is enabled, `as' can expand a `PUSHJ'
12860 instruction into a series of instructions.  The shortest expansion is
12861 to not expand it, but just mark the call as redirectable to a stub,
12862 which `ld' creates at link-time, but only if the original `PUSHJ'
12863 instruction is found not to reach the target.  The stub consists of the
12864 necessary instructions to form a jump to the target.  This happens if
12865 `as' can assert that the `PUSHJ' instruction can reach such a stub.
12866 The option `--no-pushj-stubs' disables this shorter expansion, and the
12867 longer series of instructions is then created at assembly-time.  The
12868 option `--no-stubs' is a synonym, intended for compatibility with
12869 future releases, where generation of stubs for other instructions may
12870 be implemented.
12872    Usually a two-operand-expression (*note GREG-base::) without a
12873 matching `GREG' directive is treated as an error by `as'.  When the
12874 option `--linker-allocated-gregs' is in effect, they are instead passed
12875 through to the linker, which will allocate as many global registers as
12876 is needed.
12878 \x1f
12879 File: as.info,  Node: MMIX-Expand,  Next: MMIX-Syntax,  Prev: MMIX-Opts,  Up: MMIX-Dependent
12881 9.25.2 Instruction expansion
12882 ----------------------------
12884 When `as' encounters an instruction with an operand that is either not
12885 known or does not fit the operand size of the instruction, `as' (and
12886 `ld') will expand the instruction into a sequence of instructions
12887 semantically equivalent to the operand fitting the instruction.
12888 Expansion will take place for the following instructions:
12890 `GETA'
12891      Expands to a sequence of four instructions: `SETL', `INCML',
12892      `INCMH' and `INCH'.  The operand must be a multiple of four.
12894 Conditional branches
12895      A branch instruction is turned into a branch with the complemented
12896      condition and prediction bit over five instructions; four
12897      instructions setting `$255' to the operand value, which like with
12898      `GETA' must be a multiple of four, and a final `GO $255,$255,0'.
12900 `PUSHJ'
12901      Similar to expansion for conditional branches; four instructions
12902      set `$255' to the operand value, followed by a `PUSHGO
12903      $255,$255,0'.
12905 `JMP'
12906      Similar to conditional branches and `PUSHJ'.  The final instruction
12907      is `GO $255,$255,0'.
12909    The linker `ld' is expected to shrink these expansions for code
12910 assembled with `--relax' (though not currently implemented).
12912 \x1f
12913 File: as.info,  Node: MMIX-Syntax,  Next: MMIX-mmixal,  Prev: MMIX-Expand,  Up: MMIX-Dependent
12915 9.25.3 Syntax
12916 -------------
12918 The assembly syntax is supposed to be upward compatible with that
12919 described in Sections 1.3 and 1.4 of `The Art of Computer Programming,
12920 Volume 1'.  Draft versions of those chapters as well as other MMIX
12921 information is located at
12922 `http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html'.  Most code
12923 examples from the mmixal package located there should work unmodified
12924 when assembled and linked as single files, with a few noteworthy
12925 exceptions (*note MMIX-mmixal::).
12927    Before an instruction is emitted, the current location is aligned to
12928 the next four-byte boundary.  If a label is defined at the beginning of
12929 the line, its value will be the aligned value.
12931    In addition to the traditional hex-prefix `0x', a hexadecimal number
12932 can also be specified by the prefix character `#'.
12934    After all operands to an MMIX instruction or directive have been
12935 specified, the rest of the line is ignored, treated as a comment.
12937 * Menu:
12939 * MMIX-Chars::                  Special Characters
12940 * MMIX-Symbols::                Symbols
12941 * MMIX-Regs::                   Register Names
12942 * MMIX-Pseudos::                Assembler Directives
12944 \x1f
12945 File: as.info,  Node: MMIX-Chars,  Next: MMIX-Symbols,  Up: MMIX-Syntax
12947 9.25.3.1 Special Characters
12948 ...........................
12950 The characters `*' and `#' are line comment characters; each start a
12951 comment at the beginning of a line, but only at the beginning of a
12952 line.  A `#' prefixes a hexadecimal number if found elsewhere on a line.
12954    Two other characters, `%' and `!', each start a comment anywhere on
12955 the line.  Thus you can't use the `modulus' and `not' operators in
12956 expressions normally associated with these two characters.
12958    A `;' is a line separator, treated as a new-line, so separate
12959 instructions can be specified on a single line.
12961 \x1f
12962 File: as.info,  Node: MMIX-Symbols,  Next: MMIX-Regs,  Prev: MMIX-Chars,  Up: MMIX-Syntax
12964 9.25.3.2 Symbols
12965 ................
12967 The character `:' is permitted in identifiers.  There are two
12968 exceptions to it being treated as any other symbol character: if a
12969 symbol begins with `:', it means that the symbol is in the global
12970 namespace and that the current prefix should not be prepended to that
12971 symbol (*note MMIX-prefix::).  The `:' is then not considered part of
12972 the symbol.  For a symbol in the label position (first on a line), a `:'
12973 at the end of a symbol is silently stripped off.  A label is permitted,
12974 but not required, to be followed by a `:', as with many other assembly
12975 formats.
12977    The character `@' in an expression, is a synonym for `.', the
12978 current location.
12980    In addition to the common forward and backward local symbol formats
12981 (*note Symbol Names::), they can be specified with upper-case `B' and
12982 `F', as in `8B' and `9F'.  A local label defined for the current
12983 position is written with a `H' appended to the number:
12984      3H LDB $0,$1,2
12985    This and traditional local-label formats cannot be mixed: a label
12986 must be defined and referred to using the same format.
12988    There's a minor caveat: just as for the ordinary local symbols, the
12989 local symbols are translated into ordinary symbols using control
12990 characters are to hide the ordinal number of the symbol.
12991 Unfortunately, these symbols are not translated back in error messages.
12992 Thus you may see confusing error messages when local symbols are used.
12993 Control characters `\003' (control-C) and `\004' (control-D) are used
12994 for the MMIX-specific local-symbol syntax.
12996    The symbol `Main' is handled specially; it is always global.
12998    By defining the symbols `__.MMIX.start..text' and
12999 `__.MMIX.start..data', the address of respectively the `.text' and
13000 `.data' segments of the final program can be defined, though when
13001 linking more than one object file, the code or data in the object file
13002 containing the symbol is not guaranteed to be start at that position;
13003 just the final executable.  *Note MMIX-loc::.
13005 \x1f
13006 File: as.info,  Node: MMIX-Regs,  Next: MMIX-Pseudos,  Prev: MMIX-Symbols,  Up: MMIX-Syntax
13008 9.25.3.3 Register names
13009 .......................
13011 Local and global registers are specified as `$0' to `$255'.  The
13012 recognized special register names are `rJ', `rA', `rB', `rC', `rD',
13013 `rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ',
13014 `rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT',
13015 `rWW', `rXX', `rYY' and `rZZ'.  A leading `:' is optional for special
13016 register names.
13018    Local and global symbols can be equated to register names and used in
13019 place of ordinary registers.
13021    Similarly for special registers, local and global symbols can be
13022 used.  Also, symbols equated from numbers and constant expressions are
13023 allowed in place of a special register, except when either of the
13024 options `--no-predefined-syms' and `--fixed-special-register-names' are
13025 specified.  Then only the special register names above are allowed for
13026 the instructions having a special register operand; `GET' and `PUT'.
13028 \x1f
13029 File: as.info,  Node: MMIX-Pseudos,  Prev: MMIX-Regs,  Up: MMIX-Syntax
13031 9.25.3.4 Assembler Directives
13032 .............................
13034 `LOC'
13035      The `LOC' directive sets the current location to the value of the
13036      operand field, which may include changing sections.  If the
13037      operand is a constant, the section is set to either `.data' if the
13038      value is `0x2000000000000000' or larger, else it is set to `.text'.
13039      Within a section, the current location may only be changed to
13040      monotonically higher addresses.  A LOC expression must be a
13041      previously defined symbol or a "pure" constant.
13043      An example, which sets the label PREV to the current location, and
13044      updates the current location to eight bytes forward:
13045           prev LOC @+8
13047      When a LOC has a constant as its operand, a symbol
13048      `__.MMIX.start..text' or `__.MMIX.start..data' is defined
13049      depending on the address as mentioned above.  Each such symbol is
13050      interpreted as special by the linker, locating the section at that
13051      address.  Note that if multiple files are linked, the first object
13052      file with that section will be mapped to that address (not
13053      necessarily the file with the LOC definition).
13055 `LOCAL'
13056      Example:
13057            LOCAL external_symbol
13058            LOCAL 42
13059            .local asymbol
13061      This directive-operation generates a link-time assertion that the
13062      operand does not correspond to a global register.  The operand is
13063      an expression that at link-time resolves to a register symbol or a
13064      number.  A number is treated as the register having that number.
13065      There is one restriction on the use of this directive: the
13066      pseudo-directive must be placed in a section with contents, code
13067      or data.
13069 `IS'
13070      The `IS' directive:
13071           asymbol IS an_expression
13072      sets the symbol `asymbol' to `an_expression'.  A symbol may not be
13073      set more than once using this directive.  Local labels may be set
13074      using this directive, for example:
13075           5H IS @+4
13077 `GREG'
13078      This directive reserves a global register, gives it an initial
13079      value and optionally gives it a symbolic name.  Some examples:
13081           areg GREG
13082           breg GREG data_value
13083                GREG data_buffer
13084                .greg creg, another_data_value
13086      The symbolic register name can be used in place of a (non-special)
13087      register.  If a value isn't provided, it defaults to zero.  Unless
13088      the option `--no-merge-gregs' is specified, non-zero registers
13089      allocated with this directive may be eliminated by `as'; another
13090      register with the same value used in its place.  Any of the
13091      instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU',
13092      `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW',
13093      `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT',
13094      `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can
13095      have a value nearby an initial value in place of its second and
13096      third operands.  Here, "nearby" is defined as within the range
13097      0...255 from the initial value of such an allocated register.
13099           buffer1 BYTE 0,0,0,0,0
13100           buffer2 BYTE 0,0,0,0,0
13101            ...
13102            GREG buffer1
13103            LDOU $42,buffer2
13104      In the example above, the `Y' field of the `LDOUI' instruction
13105      (LDOU with a constant Z) will be replaced with the global register
13106      allocated for `buffer1', and the `Z' field will have the value 5,
13107      the offset from `buffer1' to `buffer2'.  The result is equivalent
13108      to this code:
13109           buffer1 BYTE 0,0,0,0,0
13110           buffer2 BYTE 0,0,0,0,0
13111            ...
13112           tmpreg GREG buffer1
13113            LDOU $42,tmpreg,(buffer2-buffer1)
13115      Global registers allocated with this directive are allocated in
13116      order higher-to-lower within a file.  Other than that, the exact
13117      order of register allocation and elimination is undefined.  For
13118      example, the order is undefined when more than one file with such
13119      directives are linked together.  With the options `-x' and
13120      `--linker-allocated-gregs', `GREG' directives for two-operand
13121      cases like the one mentioned above can be omitted.  Sufficient
13122      global registers will then be allocated by the linker.
13124 `BYTE'
13125      The `BYTE' directive takes a series of operands separated by a
13126      comma.  If an operand is a string (*note Strings::), each
13127      character of that string is emitted as a byte.  Other operands
13128      must be constant expressions without forward references, in the
13129      range 0...255.  If you need operands having expressions with
13130      forward references, use `.byte' (*note Byte::).  An operand can be
13131      omitted, defaulting to a zero value.
13133 `WYDE'
13134 `TETRA'
13135 `OCTA'
13136      The directives `WYDE', `TETRA' and `OCTA' emit constants of two,
13137      four and eight bytes size respectively.  Before anything else
13138      happens for the directive, the current location is aligned to the
13139      respective constant-size boundary.  If a label is defined at the
13140      beginning of the line, its value will be that after the alignment.
13141      A single operand can be omitted, defaulting to a zero value
13142      emitted for the directive.  Operands can be expressed as strings
13143      (*note Strings::), in which case each character in the string is
13144      emitted as a separate constant of the size indicated by the
13145      directive.
13147 `PREFIX'
13148      The `PREFIX' directive sets a symbol name prefix to be prepended to
13149      all symbols (except local symbols, *note MMIX-Symbols::), that are
13150      not prefixed with `:', until the next `PREFIX' directive.  Such
13151      prefixes accumulate.  For example,
13152            PREFIX a
13153            PREFIX b
13154           c IS 0
13155      defines a symbol `abc' with the value 0.
13157 `BSPEC'
13158 `ESPEC'
13159      A pair of `BSPEC' and `ESPEC' directives delimit a section of
13160      special contents (without specified semantics).  Example:
13161            BSPEC 42
13162            TETRA 1,2,3
13163            ESPEC
13164      The single operand to `BSPEC' must be number in the range 0...255.
13165      The `BSPEC' number 80 is used by the GNU binutils implementation.
13167 \x1f
13168 File: as.info,  Node: MMIX-mmixal,  Prev: MMIX-Syntax,  Up: MMIX-Dependent
13170 9.25.4 Differences to `mmixal'
13171 ------------------------------
13173 The binutils `as' and `ld' combination has a few differences in
13174 function compared to `mmixal' (*note mmixsite::).
13176    The replacement of a symbol with a GREG-allocated register (*note
13177 GREG-base::) is not handled the exactly same way in `as' as in
13178 `mmixal'.  This is apparent in the `mmixal' example file `inout.mms',
13179 where different registers with different offsets, eventually yielding
13180 the same address, are used in the first instruction.  This type of
13181 difference should however not affect the function of any program unless
13182 it has specific assumptions about the allocated register number.
13184    Line numbers (in the `mmo' object format) are currently not
13185 supported.
13187    Expression operator precedence is not that of mmixal: operator
13188 precedence is that of the C programming language.  It's recommended to
13189 use parentheses to explicitly specify wanted operator precedence
13190 whenever more than one type of operators are used.
13192    The serialize unary operator `&', the fractional division operator
13193 `//', the logical not operator `!' and the modulus operator `%' are not
13194 available.
13196    Symbols are not global by default, unless the option
13197 `--globalize-symbols' is passed.  Use the `.global' directive to
13198 globalize symbols (*note Global::).
13200    Operand syntax is a bit stricter with `as' than `mmixal'.  For
13201 example, you can't say `addu 1,2,3', instead you must write `addu
13202 $1,$2,3'.
13204    You can't LOC to a lower address than those already visited (i.e.,
13205 "backwards").
13207    A LOC directive must come before any emitted code.
13209    Predefined symbols are visible as file-local symbols after use.  (In
13210 the ELF file, that is--the linked mmo file has no notion of a file-local
13211 symbol.)
13213    Some mapping of constant expressions to sections in LOC expressions
13214 is attempted, but that functionality is easily confused and should be
13215 avoided unless compatibility with `mmixal' is required.  A LOC
13216 expression to `0x2000000000000000' or higher, maps to the `.data'
13217 section and lower addresses map to the `.text' section (*note
13218 MMIX-loc::).
13220    The code and data areas are each contiguous.  Sparse programs with
13221 far-away LOC directives will take up the same amount of space as a
13222 contiguous program with zeros filled in the gaps between the LOC
13223 directives.  If you need sparse programs, you might try and get the
13224 wanted effect with a linker script and splitting up the code parts into
13225 sections (*note Section::).  Assembly code for this, to be compatible
13226 with `mmixal', would look something like:
13227       .if 0
13228       LOC away_expression
13229       .else
13230       .section away,"ax"
13231       .fi
13232    `as' will not execute the LOC directive and `mmixal' ignores the
13233 lines with `.'.  This construct can be used generally to help
13234 compatibility.
13236    Symbols can't be defined twice-not even to the same value.
13238    Instruction mnemonics are recognized case-insensitive, though the
13239 `IS' and `GREG' pseudo-operations must be specified in upper-case
13240 characters.
13242    There's no unicode support.
13244    The following is a list of programs in `mmix.tar.gz', available at
13245 `http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html', last
13246 checked with the version dated 2001-08-25 (md5sum
13247 c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do
13248 not assemble with `as':
13250 `silly.mms'
13251      LOC to a previous address.
13253 `sim.mms'
13254      Redefines symbol `Done'.
13256 `test.mms'
13257      Uses the serial operator `&'.
13259 \x1f
13260 File: as.info,  Node: MSP430-Dependent,  Next: SH-Dependent,  Prev: MMIX-Dependent,  Up: Machine Dependencies
13262 9.26 MSP 430 Dependent Features
13263 ===============================
13265 * Menu:
13267 * MSP430 Options::              Options
13268 * MSP430 Syntax::               Syntax
13269 * MSP430 Floating Point::       Floating Point
13270 * MSP430 Directives::           MSP 430 Machine Directives
13271 * MSP430 Opcodes::              Opcodes
13272 * MSP430 Profiling Capability:: Profiling Capability
13274 \x1f
13275 File: as.info,  Node: MSP430 Options,  Next: MSP430 Syntax,  Up: MSP430-Dependent
13277 9.26.1 Options
13278 --------------
13280 `-m'
13281      select the mpu arch. Currently has no effect.
13283 `-mP'
13284      enables polymorph instructions handler.
13286 `-mQ'
13287      enables relaxation at assembly time. DANGEROUS!
13290 \x1f
13291 File: as.info,  Node: MSP430 Syntax,  Next: MSP430 Floating Point,  Prev: MSP430 Options,  Up: MSP430-Dependent
13293 9.26.2 Syntax
13294 -------------
13296 * Menu:
13298 * MSP430-Macros::               Macros
13299 * MSP430-Chars::                Special Characters
13300 * MSP430-Regs::                 Register Names
13301 * MSP430-Ext::                  Assembler Extensions
13303 \x1f
13304 File: as.info,  Node: MSP430-Macros,  Next: MSP430-Chars,  Up: MSP430 Syntax
13306 9.26.2.1 Macros
13307 ...............
13309 The macro syntax used on the MSP 430 is like that described in the MSP
13310 430 Family Assembler Specification.  Normal `as' macros should still
13311 work.
13313    Additional built-in macros are:
13315 `llo(exp)'
13316      Extracts least significant word from 32-bit expression 'exp'.
13318 `lhi(exp)'
13319      Extracts most significant word from 32-bit expression 'exp'.
13321 `hlo(exp)'
13322      Extracts 3rd word from 64-bit expression 'exp'.
13324 `hhi(exp)'
13325      Extracts 4rd word from 64-bit expression 'exp'.
13328    They normally being used as an immediate source operand.
13329          mov    #llo(1), r10    ;       == mov  #1, r10
13330          mov    #lhi(1), r10    ;       == mov  #0, r10
13332 \x1f
13333 File: as.info,  Node: MSP430-Chars,  Next: MSP430-Regs,  Prev: MSP430-Macros,  Up: MSP430 Syntax
13335 9.26.2.2 Special Characters
13336 ...........................
13338 `;' is the line comment character.
13340    The character `$' in jump instructions indicates current location and
13341 implemented only for TI syntax compatibility.
13343 \x1f
13344 File: as.info,  Node: MSP430-Regs,  Next: MSP430-Ext,  Prev: MSP430-Chars,  Up: MSP430 Syntax
13346 9.26.2.3 Register Names
13347 .......................
13349 General-purpose registers are represented by predefined symbols of the
13350 form `rN' (for global registers), where N represents a number between
13351 `0' and `15'.  The leading letters may be in either upper or lower
13352 case; for example, `r13' and `R7' are both valid register names.
13354    Register names `PC', `SP' and `SR' cannot be used as register names
13355 and will be treated as variables. Use `r0', `r1', and `r2' instead.
13357 \x1f
13358 File: as.info,  Node: MSP430-Ext,  Prev: MSP430-Regs,  Up: MSP430 Syntax
13360 9.26.2.4 Assembler Extensions
13361 .............................
13363 `@rN'
13364      As destination operand being treated as `0(rn)'
13366 `0(rN)'
13367      As source operand being treated as `@rn'
13369 `jCOND +N'
13370      Skips next N bytes followed by jump instruction and equivalent to
13371      `jCOND $+N+2'
13374    Also, there are some instructions, which cannot be found in other
13375 assemblers.  These are branch instructions, which has different opcodes
13376 upon jump distance.  They all got PC relative addressing mode.
13378 `beq label'
13379      A polymorph instruction which is `jeq label' in case if jump
13380      distance within allowed range for cpu's jump instruction. If not,
13381      this unrolls into a sequence of
13382             jne $+6
13383             br  label
13385 `bne label'
13386      A polymorph instruction which is `jne label' or `jeq +4; br label'
13388 `blt label'
13389      A polymorph instruction which is `jl label' or `jge +4; br label'
13391 `bltn label'
13392      A polymorph instruction which is `jn label' or `jn +2; jmp +4; br
13393      label'
13395 `bltu label'
13396      A polymorph instruction which is `jlo label' or `jhs +2; br label'
13398 `bge label'
13399      A polymorph instruction which is `jge label' or `jl +4; br label'
13401 `bgeu label'
13402      A polymorph instruction which is `jhs label' or `jlo +4; br label'
13404 `bgt label'
13405      A polymorph instruction which is `jeq +2; jge label' or `jeq +6;
13406      jl  +4; br label'
13408 `bgtu label'
13409      A polymorph instruction which is `jeq +2; jhs label' or `jeq +6;
13410      jlo +4; br label'
13412 `bleu label'
13413      A polymorph instruction which is `jeq label; jlo label' or `jeq
13414      +2; jhs +4; br label'
13416 `ble label'
13417      A polymorph instruction which is `jeq label; jl  label' or `jeq
13418      +2; jge +4; br label'
13420 `jump label'
13421      A polymorph instruction which is `jmp label' or `br label'
13423 \x1f
13424 File: as.info,  Node: MSP430 Floating Point,  Next: MSP430 Directives,  Prev: MSP430 Syntax,  Up: MSP430-Dependent
13426 9.26.3 Floating Point
13427 ---------------------
13429 The MSP 430 family uses IEEE 32-bit floating-point numbers.
13431 \x1f
13432 File: as.info,  Node: MSP430 Directives,  Next: MSP430 Opcodes,  Prev: MSP430 Floating Point,  Up: MSP430-Dependent
13434 9.26.4 MSP 430 Machine Directives
13435 ---------------------------------
13437 `.file'
13438      This directive is ignored; it is accepted for compatibility with
13439      other MSP 430 assemblers.
13441           _Warning:_ in other versions of the GNU assembler, `.file' is
13442           used for the directive called `.app-file' in the MSP 430
13443           support.
13445 `.line'
13446      This directive is ignored; it is accepted for compatibility with
13447      other MSP 430 assemblers.
13449 `.arch'
13450      Currently this directive is ignored; it is accepted for
13451      compatibility with other MSP 430 assemblers.
13453 `.profiler'
13454      This directive instructs assembler to add new profile entry to the
13455      object file.
13458 \x1f
13459 File: as.info,  Node: MSP430 Opcodes,  Next: MSP430 Profiling Capability,  Prev: MSP430 Directives,  Up: MSP430-Dependent
13461 9.26.5 Opcodes
13462 --------------
13464 `as' implements all the standard MSP 430 opcodes.  No additional
13465 pseudo-instructions are needed on this family.
13467    For information on the 430 machine instruction set, see `MSP430
13468 User's Manual, document slau049d', Texas Instrument, Inc.
13470 \x1f
13471 File: as.info,  Node: MSP430 Profiling Capability,  Prev: MSP430 Opcodes,  Up: MSP430-Dependent
13473 9.26.6 Profiling Capability
13474 ---------------------------
13476 It is a performance hit to use gcc's profiling approach for this tiny
13477 target.  Even more - jtag hardware facility does not perform any
13478 profiling functions.  However we've got gdb's built-in simulator where
13479 we can do anything.
13481    We define new section `.profiler' which holds all profiling
13482 information.  We define new pseudo operation `.profiler' which will
13483 instruct assembler to add new profile entry to the object file. Profile
13484 should take place at the present address.
13486    Pseudo operation format:
13488    `.profiler flags,function_to_profile [, cycle_corrector, extra]'
13490    where:
13492           `flags' is a combination of the following characters:
13494     `s'
13495           function entry
13497     `x'
13498           function exit
13500     `i'
13501           function is in init section
13503     `f'
13504           function is in fini section
13506     `l'
13507           library call
13509     `c'
13510           libc standard call
13512     `d'
13513           stack value demand
13515     `I'
13516           interrupt service routine
13518     `P'
13519           prologue start
13521     `p'
13522           prologue end
13524     `E'
13525           epilogue start
13527     `e'
13528           epilogue end
13530     `j'
13531           long jump / sjlj unwind
13533     `a'
13534           an arbitrary code fragment
13536     `t'
13537           extra parameter saved (a constant value like frame size)
13539 `function_to_profile'
13540      a function address
13542 `cycle_corrector'
13543      a value which should be added to the cycle counter, zero if
13544      omitted.
13546 `extra'
13547      any extra parameter, zero if omitted.
13550    For example:
13551      .global fxx
13552      .type fxx,@function
13553      fxx:
13554      .LFrameOffset_fxx=0x08
13555      .profiler "scdP", fxx     ; function entry.
13556                           ; we also demand stack value to be saved
13557        push r11
13558        push r10
13559        push r9
13560        push r8
13561      .profiler "cdpt",fxx,0, .LFrameOffset_fxx  ; check stack value at this point
13562                                           ; (this is a prologue end)
13563                                           ; note, that spare var filled with
13564                                           ; the farme size
13565        mov r15,r8
13566      ...
13567      .profiler cdE,fxx         ; check stack
13568        pop r8
13569        pop r9
13570        pop r10
13571        pop r11
13572      .profiler xcde,fxx,3      ; exit adds 3 to the cycle counter
13573        ret                     ; cause 'ret' insn takes 3 cycles
13575 \x1f
13576 File: as.info,  Node: PDP-11-Dependent,  Next: PJ-Dependent,  Prev: SH64-Dependent,  Up: Machine Dependencies
13578 9.27 PDP-11 Dependent Features
13579 ==============================
13581 * Menu:
13583 * PDP-11-Options::              Options
13584 * PDP-11-Pseudos::              Assembler Directives
13585 * PDP-11-Syntax::               DEC Syntax versus BSD Syntax
13586 * PDP-11-Mnemonics::            Instruction Naming
13587 * PDP-11-Synthetic::            Synthetic Instructions
13589 \x1f
13590 File: as.info,  Node: PDP-11-Options,  Next: PDP-11-Pseudos,  Up: PDP-11-Dependent
13592 9.27.1 Options
13593 --------------
13595 The PDP-11 version of `as' has a rich set of machine dependent options.
13597 9.27.1.1 Code Generation Options
13598 ................................
13600 `-mpic | -mno-pic'
13601      Generate position-independent (or position-dependent) code.
13603      The default is to generate position-independent code.
13605 9.27.1.2 Instruction Set Extension Options
13606 ..........................................
13608 These options enables or disables the use of extensions over the base
13609 line instruction set as introduced by the first PDP-11 CPU: the KA11.
13610 Most options come in two variants: a `-m'EXTENSION that enables
13611 EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION.
13613    The default is to enable all extensions.
13615 `-mall | -mall-extensions'
13616      Enable all instruction set extensions.
13618 `-mno-extensions'
13619      Disable all instruction set extensions.
13621 `-mcis | -mno-cis'
13622      Enable (or disable) the use of the commercial instruction set,
13623      which consists of these instructions: `ADDNI', `ADDN', `ADDPI',
13624      `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC',
13625      `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI',
13626      `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL',
13627      `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI',
13628      `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC',
13629      `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI',
13630      `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'.
13632 `-mcsm | -mno-csm'
13633      Enable (or disable) the use of the `CSM' instruction.
13635 `-meis | -mno-eis'
13636      Enable (or disable) the use of the extended instruction set, which
13637      consists of these instructions: `ASHC', `ASH', `DIV', `MARK',
13638      `MUL', `RTT', `SOB' `SXT', and `XOR'.
13640 `-mfis | -mkev11'
13641 `-mno-fis | -mno-kev11'
13642      Enable (or disable) the use of the KEV11 floating-point
13643      instructions: `FADD', `FDIV', `FMUL', and `FSUB'.
13645 `-mfpp | -mfpu | -mfp-11'
13646 `-mno-fpp | -mno-fpu | -mno-fp-11'
13647      Enable (or disable) the use of FP-11 floating-point instructions:
13648      `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF',
13649      `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF',
13650      `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST',
13651      `SUBF', and `TSTF'.
13653 `-mlimited-eis | -mno-limited-eis'
13654      Enable (or disable) the use of the limited extended instruction
13655      set: `MARK', `RTT', `SOB', `SXT', and `XOR'.
13657      The -mno-limited-eis options also implies -mno-eis.
13659 `-mmfpt | -mno-mfpt'
13660      Enable (or disable) the use of the `MFPT' instruction.
13662 `-mmultiproc | -mno-multiproc'
13663      Enable (or disable) the use of multiprocessor instructions:
13664      `TSTSET' and `WRTLCK'.
13666 `-mmxps | -mno-mxps'
13667      Enable (or disable) the use of the `MFPS' and `MTPS' instructions.
13669 `-mspl | -mno-spl'
13670      Enable (or disable) the use of the `SPL' instruction.
13672      Enable (or disable) the use of the microcode instructions: `LDUB',
13673      `MED', and `XFC'.
13675 9.27.1.3 CPU Model Options
13676 ..........................
13678 These options enable the instruction set extensions supported by a
13679 particular CPU, and disables all other extensions.
13681 `-mka11'
13682      KA11 CPU.  Base line instruction set only.
13684 `-mkb11'
13685      KB11 CPU.  Enable extended instruction set and `SPL'.
13687 `-mkd11a'
13688      KD11-A CPU.  Enable limited extended instruction set.
13690 `-mkd11b'
13691      KD11-B CPU.  Base line instruction set only.
13693 `-mkd11d'
13694      KD11-D CPU.  Base line instruction set only.
13696 `-mkd11e'
13697      KD11-E CPU.  Enable extended instruction set, `MFPS', and `MTPS'.
13699 `-mkd11f | -mkd11h | -mkd11q'
13700      KD11-F, KD11-H, or KD11-Q CPU.  Enable limited extended
13701      instruction set, `MFPS', and `MTPS'.
13703 `-mkd11k'
13704      KD11-K CPU.  Enable extended instruction set, `LDUB', `MED',
13705      `MFPS', `MFPT', `MTPS', and `XFC'.
13707 `-mkd11z'
13708      KD11-Z CPU.  Enable extended instruction set, `CSM', `MFPS',
13709      `MFPT', `MTPS', and `SPL'.
13711 `-mf11'
13712      F11 CPU.  Enable extended instruction set, `MFPS', `MFPT', and
13713      `MTPS'.
13715 `-mj11'
13716      J11 CPU.  Enable extended instruction set, `CSM', `MFPS', `MFPT',
13717      `MTPS', `SPL', `TSTSET', and `WRTLCK'.
13719 `-mt11'
13720      T11 CPU.  Enable limited extended instruction set, `MFPS', and
13721      `MTPS'.
13723 9.27.1.4 Machine Model Options
13724 ..............................
13726 These options enable the instruction set extensions supported by a
13727 particular machine model, and disables all other extensions.
13729 `-m11/03'
13730      Same as `-mkd11f'.
13732 `-m11/04'
13733      Same as `-mkd11d'.
13735 `-m11/05 | -m11/10'
13736      Same as `-mkd11b'.
13738 `-m11/15 | -m11/20'
13739      Same as `-mka11'.
13741 `-m11/21'
13742      Same as `-mt11'.
13744 `-m11/23 | -m11/24'
13745      Same as `-mf11'.
13747 `-m11/34'
13748      Same as `-mkd11e'.
13750 `-m11/34a'
13751      Ame as `-mkd11e' `-mfpp'.
13753 `-m11/35 | -m11/40'
13754      Same as `-mkd11a'.
13756 `-m11/44'
13757      Same as `-mkd11z'.
13759 `-m11/45 | -m11/50 | -m11/55 | -m11/70'
13760      Same as `-mkb11'.
13762 `-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94'
13763      Same as `-mj11'.
13765 `-m11/60'
13766      Same as `-mkd11k'.
13768 \x1f
13769 File: as.info,  Node: PDP-11-Pseudos,  Next: PDP-11-Syntax,  Prev: PDP-11-Options,  Up: PDP-11-Dependent
13771 9.27.2 Assembler Directives
13772 ---------------------------
13774 The PDP-11 version of `as' has a few machine dependent assembler
13775 directives.
13777 `.bss'
13778      Switch to the `bss' section.
13780 `.even'
13781      Align the location counter to an even number.
13783 \x1f
13784 File: as.info,  Node: PDP-11-Syntax,  Next: PDP-11-Mnemonics,  Prev: PDP-11-Pseudos,  Up: PDP-11-Dependent
13786 9.27.3 PDP-11 Assembly Language Syntax
13787 --------------------------------------
13789 `as' supports both DEC syntax and BSD syntax.  The only difference is
13790 that in DEC syntax, a `#' character is used to denote an immediate
13791 constants, while in BSD syntax the character for this purpose is `$'.
13793    general-purpose registers are named `r0' through `r7'.  Mnemonic
13794 alternatives for `r6' and `r7' are `sp' and `pc', respectively.
13796    Floating-point registers are named `ac0' through `ac3', or
13797 alternatively `fr0' through `fr3'.
13799    Comments are started with a `#' or a `/' character, and extend to
13800 the end of the line.  (FIXME: clash with immediates?)
13802 \x1f
13803 File: as.info,  Node: PDP-11-Mnemonics,  Next: PDP-11-Synthetic,  Prev: PDP-11-Syntax,  Up: PDP-11-Dependent
13805 9.27.4 Instruction Naming
13806 -------------------------
13808 Some instructions have alternative names.
13810 `BCC'
13811      `BHIS'
13813 `BCS'
13814      `BLO'
13816 `L2DR'
13817      `L2D'
13819 `L3DR'
13820      `L3D'
13822 `SYS'
13823      `TRAP'
13825 \x1f
13826 File: as.info,  Node: PDP-11-Synthetic,  Prev: PDP-11-Mnemonics,  Up: PDP-11-Dependent
13828 9.27.5 Synthetic Instructions
13829 -----------------------------
13831 The `JBR' and `J'CC synthetic instructions are not supported yet.
13833 \x1f
13834 File: as.info,  Node: PJ-Dependent,  Next: PPC-Dependent,  Prev: PDP-11-Dependent,  Up: Machine Dependencies
13836 9.28 picoJava Dependent Features
13837 ================================
13839 * Menu:
13841 * PJ Options::              Options
13843 \x1f
13844 File: as.info,  Node: PJ Options,  Up: PJ-Dependent
13846 9.28.1 Options
13847 --------------
13849 `as' has two additional command-line options for the picoJava
13850 architecture.
13851 `-ml'
13852      This option selects little endian data output.
13854 `-mb'
13855      This option selects big endian data output.
13857 \x1f
13858 File: as.info,  Node: PPC-Dependent,  Next: S/390-Dependent,  Prev: PJ-Dependent,  Up: Machine Dependencies
13860 9.29 PowerPC Dependent Features
13861 ===============================
13863 * Menu:
13865 * PowerPC-Opts::                Options
13866 * PowerPC-Pseudo::              PowerPC Assembler Directives
13868 \x1f
13869 File: as.info,  Node: PowerPC-Opts,  Next: PowerPC-Pseudo,  Up: PPC-Dependent
13871 9.29.1 Options
13872 --------------
13874 The PowerPC chip family includes several successive levels, using the
13875 same core instruction set, but including a few additional instructions
13876 at each level.  There are exceptions to this however.  For details on
13877 what instructions each variant supports, please see the chip's
13878 architecture reference manual.
13880    The following table lists all available PowerPC options.
13882 `-mpwrx | -mpwr2'
13883      Generate code for POWER/2 (RIOS2).
13885 `-mpwr'
13886      Generate code for POWER (RIOS1)
13888 `-m601'
13889      Generate code for PowerPC 601.
13891 `-mppc, -mppc32, -m603, -m604'
13892      Generate code for PowerPC 603/604.
13894 `-m403, -m405'
13895      Generate code for PowerPC 403/405.
13897 `-m440'
13898      Generate code for PowerPC 440.  BookE and some 405 instructions.
13900 `-m476'
13901      Generate code for PowerPC 476.
13903 `-m7400, -m7410, -m7450, -m7455'
13904      Generate code for PowerPC 7400/7410/7450/7455.
13906 `-m750cl'
13907      Generate code for PowerPC 750CL.
13909 `-mppc64, -m620'
13910      Generate code for PowerPC 620/625/630.
13912 `-me500, -me500x2'
13913      Generate code for Motorola e500 core complex.
13915 `-mspe'
13916      Generate code for Motorola SPE instructions.
13918 `-mppc64bridge'
13919      Generate code for PowerPC 64, including bridge insns.
13921 `-mbooke'
13922      Generate code for 32-bit BookE.
13924 `-ma2'
13925      Generate code for A2 architecture.
13927 `-me300'
13928      Generate code for PowerPC e300 family.
13930 `-maltivec'
13931      Generate code for processors with AltiVec instructions.
13933 `-mvsx'
13934      Generate code for processors with Vector-Scalar (VSX) instructions.
13936 `-mpower4'
13937      Generate code for Power4 architecture.
13939 `-mpower5'
13940      Generate code for Power5 architecture.
13942 `-mpower6'
13943      Generate code for Power6 architecture.
13945 `-mpower7'
13946      Generate code for Power7 architecture.
13948 `-mcell'
13949      Generate code for Cell Broadband Engine architecture.
13951 `-mcom'
13952      Generate code Power/PowerPC common instructions.
13954 `-many'
13955      Generate code for any architecture (PWR/PWRX/PPC).
13957 `-mregnames'
13958      Allow symbolic names for registers.
13960 `-mno-regnames'
13961      Do not allow symbolic names for registers.
13963 `-mrelocatable'
13964      Support for GCC's -mrelocatable option.
13966 `-mrelocatable-lib'
13967      Support for GCC's -mrelocatable-lib option.
13969 `-memb'
13970      Set PPC_EMB bit in ELF flags.
13972 `-mlittle, -mlittle-endian'
13973      Generate code for a little endian machine.
13975 `-mbig, -mbig-endian'
13976      Generate code for a big endian machine.
13978 `-msolaris'
13979      Generate code for Solaris.
13981 `-mno-solaris'
13982      Do not generate code for Solaris.
13984 \x1f
13985 File: as.info,  Node: PowerPC-Pseudo,  Prev: PowerPC-Opts,  Up: PPC-Dependent
13987 9.29.2 PowerPC Assembler Directives
13988 -----------------------------------
13990 A number of assembler directives are available for PowerPC.  The
13991 following table is far from complete.
13993 `.machine "string"'
13994      This directive allows you to change the machine for which code is
13995      generated.  `"string"' may be any of the -m cpu selection options
13996      (without the -m) enclosed in double quotes, `"push"', or `"pop"'.
13997      `.machine "push"' saves the currently selected cpu, which may be
13998      restored with `.machine "pop"'.
14000 \x1f
14001 File: as.info,  Node: S/390-Dependent,  Next: SCORE-Dependent,  Prev: PPC-Dependent,  Up: Machine Dependencies
14003 9.30 IBM S/390 Dependent Features
14004 =================================
14006    The s390 version of `as' supports two architectures modes and seven
14007 chip levels. The architecture modes are the Enterprise System
14008 Architecture (ESA) and the newer z/Architecture mode. The chip levels
14009 are g5, g6, z900, z990, z9-109, z9-ec and z10.
14011 * Menu:
14013 * s390 Options::                Command-line Options.
14014 * s390 Characters::             Special Characters.
14015 * s390 Syntax::                 Assembler Instruction syntax.
14016 * s390 Directives::             Assembler Directives.
14017 * s390 Floating Point::         Floating Point.
14019 \x1f
14020 File: as.info,  Node: s390 Options,  Next: s390 Characters,  Up: S/390-Dependent
14022 9.30.1 Options
14023 --------------
14025 The following table lists all available s390 specific options:
14027 `-m31 | -m64'
14028      Select 31- or 64-bit ABI implying a word size of 32- or 64-bit.
14030      These options are only available with the ELF object file format,
14031      and require that the necessary BFD support has been included (on a
14032      31-bit platform you must add -enable-64-bit-bfd on the call to the
14033      configure script to enable 64-bit usage and use s390x as target
14034      platform).
14036 `-mesa | -mzarch'
14037      Select the architecture mode, either the Enterprise System
14038      Architecture (esa) mode or the z/Architecture mode (zarch).
14040      The 64-bit instructions are only available with the z/Architecture
14041      mode.  The combination of `-m64' and `-mesa' results in a warning
14042      message.
14044 `-march=CPU'
14045      This option specifies the target processor. The following
14046      processor names are recognized: `g5', `g6', `z900', `z990',
14047      `z9-109', `z9-ec' and `z10'.  Assembling an instruction that is
14048      not supported on the target processor results in an error message.
14049      Do not specify `g5' or `g6' with `-mzarch'.
14051 `-mregnames'
14052      Allow symbolic names for registers.
14054 `-mno-regnames'
14055      Do not allow symbolic names for registers.
14057 `-mwarn-areg-zero'
14058      Warn whenever the operand for a base or index register has been
14059      specified but evaluates to zero. This can indicate the misuse of
14060      general purpose register 0 as an address register.
14063 \x1f
14064 File: as.info,  Node: s390 Characters,  Next: s390 Syntax,  Prev: s390 Options,  Up: S/390-Dependent
14066 9.30.2 Special Characters
14067 -------------------------
14069 `#' is the line comment character.
14071 \x1f
14072 File: as.info,  Node: s390 Syntax,  Next: s390 Directives,  Prev: s390 Characters,  Up: S/390-Dependent
14074 9.30.3 Instruction syntax
14075 -------------------------
14077 The assembler syntax closely follows the syntax outlined in Enterprise
14078 Systems Architecture/390 Principles of Operation (SA22-7201) and the
14079 z/Architecture Principles of Operation (SA22-7832).
14081    Each instruction has two major parts, the instruction mnemonic and
14082 the instruction operands. The instruction format varies.
14084 * Menu:
14086 * s390 Register::               Register Naming
14087 * s390 Mnemonics::              Instruction Mnemonics
14088 * s390 Operands::               Instruction Operands
14089 * s390 Formats::                Instruction Formats
14090 * s390 Aliases::                Instruction Aliases
14091 * s390 Operand Modifier::       Instruction Operand Modifier
14092 * s390 Instruction Marker::     Instruction Marker
14093 * s390 Literal Pool Entries::   Literal Pool Entries
14095 \x1f
14096 File: as.info,  Node: s390 Register,  Next: s390 Mnemonics,  Up: s390 Syntax
14098 9.30.3.1 Register naming
14099 ........................
14101 The `as' recognizes a number of predefined symbols for the various
14102 processor registers. A register specification in one of the instruction
14103 formats is an unsigned integer between 0 and 15. The specific
14104 instruction and the position of the register in the instruction format
14105 denotes the type of the register. The register symbols are prefixed with
14106 `%':
14108      %rN   the 16 general purpose registers, 0 <= N <= 15
14109      %fN   the 16 floating point registers, 0 <= N <= 15
14110      %aN   the 16 access registers, 0 <= N <= 15
14111      %cN   the 16 control registers, 0 <= N <= 15
14112      %lit  an alias for the general purpose register %r13
14113      %sp   an alias for the general purpose register %r15
14115 \x1f
14116 File: as.info,  Node: s390 Mnemonics,  Next: s390 Operands,  Prev: s390 Register,  Up: s390 Syntax
14118 9.30.3.2 Instruction Mnemonics
14119 ..............................
14121 All instructions documented in the Principles of Operation are supported
14122 with the mnemonic and order of operands as described.  The instruction
14123 mnemonic identifies the instruction format (*Note s390 Formats::) and
14124 the specific operation code for the instruction.  For example, the `lr'
14125 mnemonic denotes the instruction format `RR' with the operation code
14126 `0x18'.
14128    The definition of the various mnemonics follows a scheme, where the
14129 first character usually hint at the type of the instruction:
14131      a          add instruction, for example `al' for add logical 32-bit
14132      b          branch instruction, for example `bc' for branch on condition
14133      c          compare or convert instruction, for example `cr' for compare
14134                 register 32-bit
14135      d          divide instruction, for example `dlr' devide logical register
14136                 64-bit to 32-bit
14137      i          insert instruction, for example `ic' insert character
14138      l          load instruction, for example `ltr' load and test register
14139      mv         move instruction, for example `mvc' move character
14140      m          multiply instruction, for example `mh' multiply halfword
14141      n          and instruction, for example `ni' and immediate
14142      o          or instruction, for example `oc' or character
14143      sla, sll   shift left single instruction
14144      sra, srl   shift right single instruction
14145      st         store instruction, for example `stm' store multiple
14146      s          subtract instruction, for example `slr' subtract
14147                 logical 32-bit
14148      t          test or translate instruction, of example `tm' test under mask
14149      x          exclusive or instruction, for example `xc' exclusive or
14150                 character
14152    Certain characters at the end of the mnemonic may describe a property
14153 of the instruction:
14155      c   the instruction uses a 8-bit character operand
14156      f   the instruction extends a 32-bit operand to 64 bit
14157      g   the operands are treated as 64-bit values
14158      h   the operand uses a 16-bit halfword operand
14159      i   the instruction uses an immediate operand
14160      l   the instruction uses unsigned, logical operands
14161      m   the instruction uses a mask or operates on multiple values
14162      r   if r is the last character, the instruction operates on registers
14163      y   the instruction uses 20-bit displacements
14165    There are many exceptions to the scheme outlined in the above lists,
14166 in particular for the priviledged instructions. For non-priviledged
14167 instruction it works quite well, for example the instruction `clgfr' c:
14168 compare instruction, l: unsigned operands, g: 64-bit operands, f: 32-
14169 to 64-bit extension, r: register operands. The instruction compares an
14170 64-bit value in a register with the zero extended 32-bit value from a
14171 second register.  For a complete list of all mnemonics see appendix B
14172 in the Principles of Operation.
14174 \x1f
14175 File: as.info,  Node: s390 Operands,  Next: s390 Formats,  Prev: s390 Mnemonics,  Up: s390 Syntax
14177 9.30.3.3 Instruction Operands
14178 .............................
14180 Instruction operands can be grouped into three classes, operands located
14181 in registers, immediate operands, and operands in storage.
14183    A register operand can be located in general, floating-point, access,
14184 or control register. The register is identified by a four-bit field.
14185 The field containing the register operand is called the R field.
14187    Immediate operands are contained within the instruction and can have
14188 8, 16 or 32 bits. The field containing the immediate operand is called
14189 the I field. Dependent on the instruction the I field is either signed
14190 or unsigned.
14192    A storage operand consists of an address and a length. The address
14193 of a storage operands can be specified in any of these ways:
14195    * The content of a single general R
14197    * The sum of the content of a general register called the base
14198      register B plus the content of a displacement field D
14200    * The sum of the contents of two general registers called the index
14201      register X and the base register B plus the content of a
14202      displacement field
14204    * The sum of the current instruction address and a 32-bit signed
14205      immediate field multiplied by two.
14207    The length of a storage operand can be:
14209    * Implied by the instruction
14211    * Specified by a bitmask
14213    * Specified by a four-bit or eight-bit length field L
14215    * Specified by the content of a general register
14217    The notation for storage operand addresses formed from multiple
14218 fields is as follows:
14220 `Dn(Bn)'
14221      the address for operand number n is formed from the content of
14222      general register Bn called the base register and the displacement
14223      field Dn.
14225 `Dn(Xn,Bn)'
14226      the address for operand number n is formed from the content of
14227      general register Xn called the index register, general register Bn
14228      called the base register and the displacement field Dn.
14230 `Dn(Ln,Bn)'
14231      the address for operand number n is formed from the content of
14232      general regiser Bn called the base register and the displacement
14233      field Dn.  The length of the operand n is specified by the field
14234      Ln.
14236    The base registers Bn and the index registers Xn of a storage
14237 operand can be skipped. If Bn and Xn are skipped, a zero will be stored
14238 to the operand field. The notation changes as follows:
14240      full notation        short notation
14241      ------------------------------------------ 
14242      Dn(0,Bn)             Dn(Bn)
14243      Dn(0,0)              Dn
14244      Dn(0)                Dn
14245      Dn(Ln,0)             Dn(Ln)
14247 \x1f
14248 File: as.info,  Node: s390 Formats,  Next: s390 Aliases,  Prev: s390 Operands,  Up: s390 Syntax
14250 9.30.3.4 Instruction Formats
14251 ............................
14253 The Principles of Operation manuals lists 26 instruction formats where
14254 some of the formats have multiple variants. For the `.insn' pseudo
14255 directive the assembler recognizes some of the formats.  Typically, the
14256 most general variant of the instruction format is used by the `.insn'
14257 directive.
14259    The following table lists the abbreviations used in the table of
14260 instruction formats:
14262      OpCode / OpCd   Part of the op code.
14263      Bx              Base register number for operand x.
14264      Dx              Displacement for operand x.
14265      DLx             Displacement lower 12 bits for operand x.
14266      DHx             Displacement higher 8-bits for operand x.
14267      Rx              Register number for operand x.
14268      Xx              Index register number for operand x.
14269      Ix              Signed immediate for operand x.
14270      Ux              Unsigned immediate for operand x.
14272    An instruction is two, four, or six bytes in length and must be
14273 aligned on a 2 byte boundary. The first two bits of the instruction
14274 specify the length of the instruction, 00 indicates a two byte
14275 instruction, 01 and 10 indicates a four byte instruction, and 11
14276 indicates a six byte instruction.
14278    The following table lists the s390 instruction formats that are
14279 available with the `.insn' pseudo directive:
14281 `E format'
14283      +-------------+
14284      |    OpCode   |
14285      +-------------+
14286      0            15
14288 `RI format: <insn> R1,I2'
14290      +--------+----+----+------------------+
14291      | OpCode | R1 |OpCd|        I2        |
14292      +--------+----+----+------------------+
14293      0        8    12   16                31
14295 `RIE format: <insn> R1,R3,I2'
14297      +--------+----+----+------------------+--------+--------+
14298      | OpCode | R1 | R3 |        I2        |////////| OpCode |
14299      +--------+----+----+------------------+--------+--------+
14300      0        8    12   16                 32       40      47
14302 `RIL format: <insn> R1,I2'
14304      +--------+----+----+------------------------------------+
14305      | OpCode | R1 |OpCd|                  I2                |
14306      +--------+----+----+------------------------------------+
14307      0        8    12   16                                  47
14309 `RILU format: <insn> R1,U2'
14311      +--------+----+----+------------------------------------+
14312      | OpCode | R1 |OpCd|                  U2                |
14313      +--------+----+----+------------------------------------+
14314      0        8    12   16                                  47
14316 `RIS format: <insn> R1,I2,M3,D4(B4)'
14318      +--------+----+----+----+-------------+--------+--------+
14319      | OpCode | R1 | M3 | B4 |     D4      |   I2   | Opcode |
14320      +--------+----+----+----+-------------+--------+--------+
14321      0        8    12   16   20            32       36      47
14323 `RR format: <insn> R1,R2'
14325      +--------+----+----+
14326      | OpCode | R1 | R2 |
14327      +--------+----+----+
14328      0        8    12  15
14330 `RRE format: <insn> R1,R2'
14332      +------------------+--------+----+----+
14333      |      OpCode      |////////| R1 | R2 |
14334      +------------------+--------+----+----+
14335      0                  16       24   28  31
14337 `RRF format: <insn> R1,R2,R3,M4'
14339      +------------------+----+----+----+----+
14340      |      OpCode      | R3 | M4 | R1 | R2 |
14341      +------------------+----+----+----+----+
14342      0                  16   20   24   28  31
14344 `RRS format: <insn> R1,R2,M3,D4(B4)'
14346      +--------+----+----+----+-------------+----+----+--------+
14347      | OpCode | R1 | R3 | B4 |     D4      | M3 |////| OpCode |
14348      +--------+----+----+----+-------------+----+----+--------+
14349      0        8    12   16   20            32   36   40      47
14351 `RS format: <insn> R1,R3,D2(B2)'
14353      +--------+----+----+----+-------------+
14354      | OpCode | R1 | R3 | B2 |     D2      |
14355      +--------+----+----+----+-------------+
14356      0        8    12   16   20           31
14358 `RSE format: <insn> R1,R3,D2(B2)'
14360      +--------+----+----+----+-------------+--------+--------+
14361      | OpCode | R1 | R3 | B2 |     D2      |////////| OpCode |
14362      +--------+----+----+----+-------------+--------+--------+
14363      0        8    12   16   20            32       40      47
14365 `RSI format: <insn> R1,R3,I2'
14367      +--------+----+----+------------------------------------+
14368      | OpCode | R1 | R3 |                  I2                |
14369      +--------+----+----+------------------------------------+
14370      0        8    12   16                                  47
14372 `RSY format: <insn> R1,R3,D2(B2)'
14374      +--------+----+----+----+-------------+--------+--------+
14375      | OpCode | R1 | R3 | B2 |    DL2      |  DH2   | OpCode |
14376      +--------+----+----+----+-------------+--------+--------+
14377      0        8    12   16   20            32       40      47
14379 `RX format: <insn> R1,D2(X2,B2)'
14381      +--------+----+----+----+-------------+
14382      | OpCode | R1 | X2 | B2 |     D2      |
14383      +--------+----+----+----+-------------+
14384      0        8    12   16   20           31
14386 `RXE format: <insn> R1,D2(X2,B2)'
14388      +--------+----+----+----+-------------+--------+--------+
14389      | OpCode | R1 | X2 | B2 |     D2      |////////| OpCode |
14390      +--------+----+----+----+-------------+--------+--------+
14391      0        8    12   16   20            32       40      47
14393 `RXF format: <insn> R1,R3,D2(X2,B2)'
14395      +--------+----+----+----+-------------+----+---+--------+
14396      | OpCode | R3 | X2 | B2 |     D2      | R1 |///| OpCode |
14397      +--------+----+----+----+-------------+----+---+--------+
14398      0        8    12   16   20            32   36  40      47
14400 `RXY format: <insn> R1,D2(X2,B2)'
14402      +--------+----+----+----+-------------+--------+--------+
14403      | OpCode | R1 | X2 | B2 |     DL2     |   DH2  | OpCode |
14404      +--------+----+----+----+-------------+--------+--------+
14405      0        8    12   16   20            32   36   40      47
14407 `S format: <insn> D2(B2)'
14409      +------------------+----+-------------+
14410      |      OpCode      | B2 |     D2      |
14411      +------------------+----+-------------+
14412      0                  16   20           31
14414 `SI format: <insn> D1(B1),I2'
14416      +--------+---------+----+-------------+
14417      | OpCode |   I2    | B1 |     D1      |
14418      +--------+---------+----+-------------+
14419      0        8         16   20           31
14421 `SIY format: <insn> D1(B1),U2'
14423      +--------+---------+----+-------------+--------+--------+
14424      | OpCode |   I2    | B1 |     DL1     |  DH1   | OpCode |
14425      +--------+---------+----+-------------+--------+--------+
14426      0        8         16   20            32   36   40      47
14428 `SIL format: <insn> D1(B1),I2'
14430      +------------------+----+-------------+-----------------+
14431      |      OpCode      | B1 |      D1     |       I2        |
14432      +------------------+----+-------------+-----------------+
14433      0                  16   20            32               47
14435 `SS format: <insn> D1(R1,B1),D2(B3),R3'
14437      +--------+----+----+----+-------------+----+------------+
14438      | OpCode | R1 | R3 | B1 |     D1      | B2 |     D2     |
14439      +--------+----+----+----+-------------+----+------------+
14440      0        8    12   16   20            32   36          47
14442 `SSE format: <insn> D1(B1),D2(B2)'
14444      +------------------+----+-------------+----+------------+
14445      |      OpCode      | B1 |     D1      | B2 |     D2     |
14446      +------------------+----+-------------+----+------------+
14447      0        8    12   16   20            32   36           47
14449 `SSF format: <insn> D1(B1),D2(B2),R3'
14451      +--------+----+----+----+-------------+----+------------+
14452      | OpCode | R3 |OpCd| B1 |     D1      | B2 |     D2     |
14453      +--------+----+----+----+-------------+----+------------+
14454      0        8    12   16   20            32   36           47
14457    For the complete list of all instruction format variants see the
14458 Principles of Operation manuals.
14460 \x1f
14461 File: as.info,  Node: s390 Aliases,  Next: s390 Operand Modifier,  Prev: s390 Formats,  Up: s390 Syntax
14463 9.30.3.5 Instruction Aliases
14464 ............................
14466 A specific bit pattern can have multiple mnemonics, for example the bit
14467 pattern `0xa7000000' has the mnemonics `tmh' and `tmlh'. In addition,
14468 there are a number of mnemonics recognized by `as' that are not present
14469 in the Principles of Operation.  These are the short forms of the
14470 branch instructions, where the condition code mask operand is encoded
14471 in the mnemonic. This is relevant for the branch instructions, the
14472 compare and branch instructions, and the compare and trap instructions.
14474    For the branch instructions there are 20 condition code strings that
14475 can be used as part of the mnemonic in place of a mask operand in the
14476 instruction format:
14478      instruction          short form
14479      ------------------------------------------ 
14480      bcr   M1,R2          b<m>r  R2
14481      bc    M1,D2(X2,B2)   b<m>   D2(X2,B2)
14482      brc   M1,I2          j<m>   I2
14483      brcl  M1,I2          jg<m>  I2
14485    In the mnemonic for a branch instruction the condition code string
14486 <m> can be any of the following:
14488      o     jump on overflow / if ones
14489      h     jump on A high
14490      p     jump on plus
14491      nle   jump on not low or equal
14492      l     jump on A low
14493      m     jump on minus
14494      nhe   jump on not high or equal
14495      lh    jump on low or high
14496      ne    jump on A not equal B
14497      nz    jump on not zero / if not zeros
14498      e     jump on A equal B
14499      z     jump on zero / if zeroes
14500      nlh   jump on not low or high
14501      he    jump on high or equal
14502      nl    jump on A not low
14503      nm    jump on not minus / if not mixed
14504      le    jump on low or equal
14505      nh    jump on A not high
14506      np    jump on not plus
14507      no    jump on not overflow / if not ones
14509    For the compare and branch, and compare and trap instructions there
14510 are 12 condition code strings that can be used as part of the mnemonic
14511 in place of a mask operand in the instruction format:
14513      instruction                 short form
14514      -------------------------------------------------------- 
14515      crb    R1,R2,M3,D4(B4)      crb<m>    R1,R2,D4(B4)
14516      cgrb   R1,R2,M3,D4(B4)      cgrb<m>   R1,R2,D4(B4)
14517      crj    R1,R2,M3,I4          crj<m>    R1,R2,I4
14518      cgrj   R1,R2,M3,I4          cgrj<m>   R1,R2,I4
14519      cib    R1,I2,M3,D4(B4)      cib<m>    R1,I2,D4(B4)
14520      cgib   R1,I2,M3,D4(B4)      cgib<m>   R1,I2,D4(B4)
14521      cij    R1,I2,M3,I4          cij<m>    R1,I2,I4
14522      cgij   R1,I2,M3,I4          cgij<m>   R1,I2,I4
14523      crt    R1,R2,M3             crt<m>    R1,R2
14524      cgrt   R1,R2,M3             cgrt<m>   R1,R2
14525      cit    R1,I2,M3             cit<m>    R1,I2
14526      cgit   R1,I2,M3             cgit<m>   R1,I2
14527      clrb   R1,R2,M3,D4(B4)      clrb<m>   R1,R2,D4(B4)
14528      clgrb  R1,R2,M3,D4(B4)      clgrb<m>  R1,R2,D4(B4)
14529      clrj   R1,R2,M3,I4          clrj<m>   R1,R2,I4
14530      clgrj  R1,R2,M3,I4          clgrj<m>  R1,R2,I4
14531      clib   R1,I2,M3,D4(B4)      clib<m>   R1,I2,D4(B4)
14532      clgib  R1,I2,M3,D4(B4)      clgib<m>  R1,I2,D4(B4)
14533      clij   R1,I2,M3,I4          clij<m>   R1,I2,I4
14534      clgij  R1,I2,M3,I4          clgij<m>  R1,I2,I4
14535      clrt   R1,R2,M3             clrt<m>   R1,R2
14536      clgrt  R1,R2,M3             clgrt<m>  R1,R2
14537      clfit  R1,I2,M3             clfit<m>  R1,I2
14538      clgit  R1,I2,M3             clgit<m>  R1,I2
14540    In the mnemonic for a compare and branch and compare and trap
14541 instruction the condition code string <m> can be any of the following:
14543      h     jump on A high
14544      nle   jump on not low or equal
14545      l     jump on A low
14546      nhe   jump on not high or equal
14547      ne    jump on A not equal B
14548      lh    jump on low or high
14549      e     jump on A equal B
14550      nlh   jump on not low or high
14551      nl    jump on A not low
14552      he    jump on high or equal
14553      nh    jump on A not high
14554      le    jump on low or equal
14556 \x1f
14557 File: as.info,  Node: s390 Operand Modifier,  Next: s390 Instruction Marker,  Prev: s390 Aliases,  Up: s390 Syntax
14559 9.30.3.6 Instruction Operand Modifier
14560 .....................................
14562 If a symbol modifier is attached to a symbol in an expression for an
14563 instruction operand field, the symbol term is replaced with a reference
14564 to an object in the global offset table (GOT) or the procedure linkage
14565 table (PLT). The following expressions are allowed: `symbol@modifier +
14566 constant', `symbol@modifier + label + constant', and `symbol@modifier -
14567 label + constant'.  The term `symbol' is the symbol that will be
14568 entered into the GOT or PLT, `label' is a local label, and `constant'
14569 is an arbitrary expression that the assembler can evaluate to a
14570 constant value.
14572    The term `(symbol + constant1)@modifier +/- label + constant2' is
14573 also accepted but a warning message is printed and the term is
14574 converted to `symbol@modifier +/- label + constant1 + constant2'.
14576 `@got'
14577 `@got12'
14578      The @got modifier can be used for displacement fields, 16-bit
14579      immediate fields and 32-bit pc-relative immediate fields. The
14580      @got12 modifier is synonym to @got. The symbol is added to the
14581      GOT. For displacement fields and 16-bit immediate fields the
14582      symbol term is replaced with the offset from the start of the GOT
14583      to the GOT slot for the symbol.  For a 32-bit pc-relative field
14584      the pc-relative offset to the GOT slot from the current
14585      instruction address is used.
14587 `@gotent'
14588      The @gotent modifier can be used for 32-bit pc-relative immediate
14589      fields.  The symbol is added to the GOT and the symbol term is
14590      replaced with the pc-relative offset from the current instruction
14591      to the GOT slot for the symbol.
14593 `@gotoff'
14594      The @gotoff modifier can be used for 16-bit immediate fields. The
14595      symbol term is replaced with the offset from the start of the GOT
14596      to the address of the symbol.
14598 `@gotplt'
14599      The @gotplt modifier can be used for displacement fields, 16-bit
14600      immediate fields, and 32-bit pc-relative immediate fields. A
14601      procedure linkage table entry is generated for the symbol and a
14602      jump slot for the symbol is added to the GOT. For displacement
14603      fields and 16-bit immediate fields the symbol term is replaced
14604      with the offset from the start of the GOT to the jump slot for the
14605      symbol. For a 32-bit pc-relative field the pc-relative offset to
14606      the jump slot from the current instruction address is used.
14608 `@plt'
14609      The @plt modifier can be used for 16-bit and 32-bit pc-relative
14610      immediate fields. A procedure linkage table entry is generated for
14611      the symbol.  The symbol term is replaced with the relative offset
14612      from the current instruction to the PLT entry for the symbol.
14614 `@pltoff'
14615      The @pltoff modifier can be used for 16-bit immediate fields. The
14616      symbol term is replaced with the offset from the start of the PLT
14617      to the address of the symbol.
14619 `@gotntpoff'
14620      The @gotntpoff modifier can be used for displacement fields. The
14621      symbol is added to the static TLS block and the negated offset to
14622      the symbol in the static TLS block is added to the GOT. The symbol
14623      term is replaced with the offset to the GOT slot from the start of
14624      the GOT.
14626 `@indntpoff'
14627      The @indntpoff modifier can be used for 32-bit pc-relative
14628      immediate fields. The symbol is added to the static TLS block and
14629      the negated offset to the symbol in the static TLS block is added
14630      to the GOT. The symbol term is replaced with the pc-relative
14631      offset to the GOT slot from the current instruction address.
14633    For more information about the thread local storage modifiers
14634 `gotntpoff' and `indntpoff' see the ELF extension documentation `ELF
14635 Handling For Thread-Local Storage'.
14637 \x1f
14638 File: as.info,  Node: s390 Instruction Marker,  Next: s390 Literal Pool Entries,  Prev: s390 Operand Modifier,  Up: s390 Syntax
14640 9.30.3.7 Instruction Marker
14641 ...........................
14643 The thread local storage instruction markers are used by the linker to
14644 perform code optimization.
14646 `:tls_load'
14647      The :tls_load marker is used to flag the load instruction in the
14648      initial exec TLS model that retrieves the offset from the thread
14649      pointer to a thread local storage variable from the GOT.
14651 `:tls_gdcall'
14652      The :tls_gdcall marker is used to flag the branch-and-save
14653      instruction to the __tls_get_offset function in the global dynamic
14654      TLS model.
14656 `:tls_ldcall'
14657      The :tls_ldcall marker is used to flag the branch-and-save
14658      instruction to the __tls_get_offset function in the local dynamic
14659      TLS model.
14661    For more information about the thread local storage instruction
14662 marker and the linker optimizations see the ELF extension documentation
14663 `ELF Handling For Thread-Local Storage'.
14665 \x1f
14666 File: as.info,  Node: s390 Literal Pool Entries,  Prev: s390 Instruction Marker,  Up: s390 Syntax
14668 9.30.3.8 Literal Pool Entries
14669 .............................
14671 A literal pool is a collection of values. To access the values a pointer
14672 to the literal pool is loaded to a register, the literal pool register.
14673 Usually, register %r13 is used as the literal pool register (*Note s390
14674 Register::). Literal pool entries are created by adding the suffix
14675 :lit1, :lit2, :lit4, or :lit8 to the end of an expression for an
14676 instruction operand. The expression is added to the literal pool and the
14677 operand is replaced with the offset to the literal in the literal pool.
14679 `:lit1'
14680      The literal pool entry is created as an 8-bit value. An operand
14681      modifier must not be used for the original expression.
14683 `:lit2'
14684      The literal pool entry is created as a 16 bit value. The operand
14685      modifier @got may be used in the original expression. The term
14686      `x@got:lit2' will put the got offset for the global symbol x to
14687      the literal pool as 16 bit value.
14689 `:lit4'
14690      The literal pool entry is created as a 32-bit value. The operand
14691      modifier @got and @plt may be used in the original expression. The
14692      term `x@got:lit4' will put the got offset for the global symbol x
14693      to the literal pool as a 32-bit value. The term `x@plt:lit4' will
14694      put the plt offset for the global symbol x to the literal pool as
14695      a 32-bit value.
14697 `:lit8'
14698      The literal pool entry is created as a 64-bit value. The operand
14699      modifier @got and @plt may be used in the original expression. The
14700      term `x@got:lit8' will put the got offset for the global symbol x
14701      to the literal pool as a 64-bit value. The term `x@plt:lit8' will
14702      put the plt offset for the global symbol x to the literal pool as
14703      a 64-bit value.
14705    The assembler directive `.ltorg' is used to emit all literal pool
14706 entries to the current position.
14708 \x1f
14709 File: as.info,  Node: s390 Directives,  Next: s390 Floating Point,  Prev: s390 Syntax,  Up: S/390-Dependent
14711 9.30.4 Assembler Directives
14712 ---------------------------
14714 `as' for s390 supports all of the standard ELF assembler directives as
14715 outlined in the main part of this document.  Some directives have been
14716 extended and there are some additional directives, which are only
14717 available for the s390 `as'.
14719 `.insn'
14720      This directive permits the numeric representation of an
14721      instructions and makes the assembler insert the operands according
14722      to one of the instructions formats for `.insn' (*Note s390
14723      Formats::).  For example, the instruction `l %r1,24(%r15)' could
14724      be written as `.insn rx,0x58000000,%r1,24(%r15)'.  
14726 `.short'
14727 `.long'
14728 `.quad'
14729      This directive places one or more 16-bit (.short), 32-bit (.long),
14730      or 64-bit (.quad) values into the current section. If an ELF or
14731      TLS modifier is used only the following expressions are allowed:
14732      `symbol@modifier + constant', `symbol@modifier + label +
14733      constant', and `symbol@modifier - label + constant'.  The
14734      following modifiers are available:
14735     `@got'
14736     `@got12'
14737           The @got modifier can be used for .short, .long and .quad.
14738           The @got12 modifier is synonym to @got. The symbol is added
14739           to the GOT. The symbol term is replaced with offset from the
14740           start of the GOT to the GOT slot for the symbol.
14742     `@gotoff'
14743           The @gotoff modifier can be used for .short, .long and .quad.
14744           The symbol term is replaced with the offset from the start of
14745           the GOT to the address of the symbol.
14747     `@gotplt'
14748           The @gotplt modifier can be used for .long and .quad. A
14749           procedure linkage table entry is generated for the symbol and
14750           a jump slot for the symbol is added to the GOT. The symbol
14751           term is replaced with the offset from the start of the GOT to
14752           the jump slot for the symbol.
14754     `@plt'
14755           The @plt modifier can be used for .long and .quad. A
14756           procedure linkage table entry us generated for the symbol.
14757           The symbol term is replaced with the address of the PLT entry
14758           for the symbol.
14760     `@pltoff'
14761           The @pltoff modifier can be used for .short, .long and .quad.
14762           The symbol term is replaced with the offset from the start of
14763           the PLT to the address of the symbol.
14765     `@tlsgd'
14766     `@tlsldm'
14767           The @tlsgd and @tlsldm modifier can be used for .long and
14768           .quad. A tls_index structure for the symbol is added to the
14769           GOT. The symbol term is replaced with the offset from the
14770           start of the GOT to the tls_index structure.
14772     `@gotntpoff'
14773     `@indntpoff'
14774           The @gotntpoff and @indntpoff modifier can be used for .long
14775           and .quad.  The symbol is added to the static TLS block and
14776           the negated offset to the symbol in the static TLS block is
14777           added to the GOT. For @gotntpoff the symbol term is replaced
14778           with the offset from the start of the GOT to the GOT slot,
14779           for @indntpoff the symbol term is replaced with the address
14780           of the GOT slot.
14782     `@dtpoff'
14783           The @dtpoff modifier can be used for .long and .quad. The
14784           symbol term is replaced with the offset of the symbol
14785           relative to the start of the TLS block it is contained in.
14787     `@ntpoff'
14788           The @ntpoff modifier can be used for .long and .quad. The
14789           symbol term is replaced with the offset of the symbol
14790           relative to the TCB pointer.
14792      For more information about the thread local storage modifiers see
14793      the ELF extension documentation `ELF Handling For Thread-Local
14794      Storage'.
14796 `.ltorg'
14797      This directive causes the current contents of the literal pool to
14798      be dumped to the current location (*Note s390 Literal Pool
14799      Entries::).
14801 \x1f
14802 File: as.info,  Node: s390 Floating Point,  Prev: s390 Directives,  Up: S/390-Dependent
14804 9.30.5 Floating Point
14805 ---------------------
14807 The assembler recognizes both the IEEE floating-point instruction and
14808 the hexadecimal floating-point instructions. The floating-point
14809 constructors `.float', `.single', and `.double' always emit the IEEE
14810 format. To assemble hexadecimal floating-point constants the `.long'
14811 and `.quad' directives must be used.
14813 \x1f
14814 File: as.info,  Node: SCORE-Dependent,  Next: Sparc-Dependent,  Prev: S/390-Dependent,  Up: Machine Dependencies
14816 9.31 SCORE Dependent Features
14817 =============================
14819 * Menu:
14821 * SCORE-Opts::          Assembler options
14822 * SCORE-Pseudo::        SCORE Assembler Directives
14824 \x1f
14825 File: as.info,  Node: SCORE-Opts,  Next: SCORE-Pseudo,  Up: SCORE-Dependent
14827 9.31.1 Options
14828 --------------
14830 The following table lists all available SCORE options.
14832 `-G NUM'
14833      This option sets the largest size of an object that can be
14834      referenced implicitly with the `gp' register. The default value is
14835      8.
14837 `-EB'
14838      Assemble code for a big-endian cpu
14840 `-EL'
14841      Assemble code for a little-endian cpu
14843 `-FIXDD'
14844      Assemble code for fix data dependency
14846 `-NWARN'
14847      Assemble code for no warning message for fix data dependency
14849 `-SCORE5'
14850      Assemble code for target is SCORE5
14852 `-SCORE5U'
14853      Assemble code for target is SCORE5U
14855 `-SCORE7'
14856      Assemble code for target is SCORE7, this is default setting
14858 `-SCORE3'
14859      Assemble code for target is SCORE3
14861 `-march=score7'
14862      Assemble code for target is SCORE7, this is default setting
14864 `-march=score3'
14865      Assemble code for target is SCORE3
14867 `-USE_R1'
14868      Assemble code for no warning message when using temp register r1
14870 `-KPIC'
14871      Generate code for PIC.  This option tells the assembler to generate
14872      score position-independent macro expansions.  It also tells the
14873      assembler to mark the output file as PIC.
14875 `-O0'
14876      Assembler will not perform any optimizations
14878 `-V'
14879      Sunplus release version
14882 \x1f
14883 File: as.info,  Node: SCORE-Pseudo,  Prev: SCORE-Opts,  Up: SCORE-Dependent
14885 9.31.2 SCORE Assembler Directives
14886 ---------------------------------
14888 A number of assembler directives are available for SCORE.  The
14889 following table is far from complete.
14891 `.set nwarn'
14892      Let the assembler not to generate warnings if the source machine
14893      language instructions happen data dependency.
14895 `.set fixdd'
14896      Let the assembler to insert bubbles (32 bit nop instruction / 16
14897      bit nop! Instruction) if the source machine language instructions
14898      happen data dependency.
14900 `.set nofixdd'
14901      Let the assembler to generate warnings if the source machine
14902      language instructions happen data dependency. (Default)
14904 `.set r1'
14905      Let the assembler not to generate warnings if the source program
14906      uses r1. allow user to use r1
14908 `set nor1'
14909      Let the assembler to generate warnings if the source program uses
14910      r1. (Default)
14912 `.sdata'
14913      Tell the assembler to add subsequent data into the sdata section
14915 `.rdata'
14916      Tell the assembler to add subsequent data into the rdata section
14918 `.frame "frame-register", "offset", "return-pc-register"'
14919      Describe a stack frame. "frame-register" is the frame register,
14920      "offset" is the distance from the frame register to the virtual
14921      frame pointer, "return-pc-register" is the return program register.
14922      You must use ".ent" before ".frame" and only one ".frame" can be
14923      used per ".ent".
14925 `.mask "bitmask", "frameoffset"'
14926      Indicate which of the integer registers are saved in the current
14927      function's stack frame, this is for the debugger to explain the
14928      frame chain.
14930 `.ent "proc-name"'
14931      Set the beginning of the procedure "proc_name". Use this directive
14932      when you want to generate information for the debugger.
14934 `.end proc-name'
14935      Set the end of a procedure. Use this directive to generate
14936      information for the debugger.
14938 `.bss'
14939      Switch the destination of following statements into the bss
14940      section, which is used for data that is uninitialized anywhere.
14943 \x1f
14944 File: as.info,  Node: SH-Dependent,  Next: SH64-Dependent,  Prev: MSP430-Dependent,  Up: Machine Dependencies
14946 9.32 Renesas / SuperH SH Dependent Features
14947 ===========================================
14949 * Menu:
14951 * SH Options::              Options
14952 * SH Syntax::               Syntax
14953 * SH Floating Point::       Floating Point
14954 * SH Directives::           SH Machine Directives
14955 * SH Opcodes::              Opcodes
14957 \x1f
14958 File: as.info,  Node: SH Options,  Next: SH Syntax,  Up: SH-Dependent
14960 9.32.1 Options
14961 --------------
14963 `as' has following command-line options for the Renesas (formerly
14964 Hitachi) / SuperH SH family.
14966 `--little'
14967      Generate little endian code.
14969 `--big'
14970      Generate big endian code.
14972 `--relax'
14973      Alter jump instructions for long displacements.
14975 `--small'
14976      Align sections to 4 byte boundaries, not 16.
14978 `--dsp'
14979      Enable sh-dsp insns, and disable sh3e / sh4 insns.
14981 `--renesas'
14982      Disable optimization with section symbol for compatibility with
14983      Renesas assembler.
14985 `--allow-reg-prefix'
14986      Allow '$' as a register name prefix.
14988 `--isa=sh4 | sh4a'
14989      Specify the sh4 or sh4a instruction set.
14991 `--isa=dsp'
14992      Enable sh-dsp insns, and disable sh3e / sh4 insns.
14994 `--isa=fp'
14995      Enable sh2e, sh3e, sh4, and sh4a insn sets.
14997 `--isa=all'
14998      Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
15000 `-h-tick-hex'
15001      Support H'00 style hex constants in addition to 0x00 style.
15004 \x1f
15005 File: as.info,  Node: SH Syntax,  Next: SH Floating Point,  Prev: SH Options,  Up: SH-Dependent
15007 9.32.2 Syntax
15008 -------------
15010 * Menu:
15012 * SH-Chars::                Special Characters
15013 * SH-Regs::                 Register Names
15014 * SH-Addressing::           Addressing Modes
15016 \x1f
15017 File: as.info,  Node: SH-Chars,  Next: SH-Regs,  Up: SH Syntax
15019 9.32.2.1 Special Characters
15020 ...........................
15022 `!' is the line comment character.
15024    You can use `;' instead of a newline to separate statements.
15026    Since `$' has no special meaning, you may use it in symbol names.
15028 \x1f
15029 File: as.info,  Node: SH-Regs,  Next: SH-Addressing,  Prev: SH-Chars,  Up: SH Syntax
15031 9.32.2.2 Register Names
15032 .......................
15034 You can use the predefined symbols `r0', `r1', `r2', `r3', `r4', `r5',
15035 `r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and `r15' to
15036 refer to the SH registers.
15038    The SH also has these control registers:
15040 `pr'
15041      procedure register (holds return address)
15043 `pc'
15044      program counter
15046 `mach'
15047 `macl'
15048      high and low multiply accumulator registers
15050 `sr'
15051      status register
15053 `gbr'
15054      global base register
15056 `vbr'
15057      vector base register (for interrupt vectors)
15059 \x1f
15060 File: as.info,  Node: SH-Addressing,  Prev: SH-Regs,  Up: SH Syntax
15062 9.32.2.3 Addressing Modes
15063 .........................
15065 `as' understands the following addressing modes for the SH.  `RN' in
15066 the following refers to any of the numbered registers, but _not_ the
15067 control registers.
15069 `RN'
15070      Register direct
15072 `@RN'
15073      Register indirect
15075 `@-RN'
15076      Register indirect with pre-decrement
15078 `@RN+'
15079      Register indirect with post-increment
15081 `@(DISP, RN)'
15082      Register indirect with displacement
15084 `@(R0, RN)'
15085      Register indexed
15087 `@(DISP, GBR)'
15088      `GBR' offset
15090 `@(R0, GBR)'
15091      GBR indexed
15093 `ADDR'
15094 `@(DISP, PC)'
15095      PC relative address (for branch or for addressing memory).  The
15096      `as' implementation allows you to use the simpler form ADDR
15097      anywhere a PC relative address is called for; the alternate form
15098      is supported for compatibility with other assemblers.
15100 `#IMM'
15101      Immediate data
15103 \x1f
15104 File: as.info,  Node: SH Floating Point,  Next: SH Directives,  Prev: SH Syntax,  Up: SH-Dependent
15106 9.32.3 Floating Point
15107 ---------------------
15109 SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other
15110 SH groups can use `.float' directive to generate IEEE floating-point
15111 numbers.
15113    SH2E and SH3E support single-precision floating point calculations as
15114 well as entirely PCAPI compatible emulation of double-precision
15115 floating point calculations. SH2E and SH3E instructions are a subset of
15116 the floating point calculations conforming to the IEEE754 standard.
15118    In addition to single-precision and double-precision floating-point
15119 operation capability, the on-chip FPU of SH4 has a 128-bit graphic
15120 engine that enables 32-bit floating-point data to be processed 128 bits
15121 at a time. It also supports 4 * 4 array operations and inner product
15122 operations. Also, a superscalar architecture is employed that enables
15123 simultaneous execution of two instructions (including FPU
15124 instructions), providing performance of up to twice that of
15125 conventional architectures at the same frequency.
15127 \x1f
15128 File: as.info,  Node: SH Directives,  Next: SH Opcodes,  Prev: SH Floating Point,  Up: SH-Dependent
15130 9.32.4 SH Machine Directives
15131 ----------------------------
15133 `uaword'
15134 `ualong'
15135      `as' will issue a warning when a misaligned `.word' or `.long'
15136      directive is used.  You may use `.uaword' or `.ualong' to indicate
15137      that the value is intentionally misaligned.
15139 \x1f
15140 File: as.info,  Node: SH Opcodes,  Prev: SH Directives,  Up: SH-Dependent
15142 9.32.5 Opcodes
15143 --------------
15145 For detailed information on the SH machine instruction set, see
15146 `SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core
15147 Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH).
15149    `as' implements all the standard SH opcodes.  No additional
15150 pseudo-instructions are needed on this family.  Note, however, that
15151 because `as' supports a simpler form of PC-relative addressing, you may
15152 simply write (for example)
15154      mov.l  bar,r0
15156 where other assemblers might require an explicit displacement to `bar'
15157 from the program counter:
15159      mov.l  @(DISP, PC)
15161    Here is a summary of SH opcodes:
15163      Legend:
15164      Rn        a numbered register
15165      Rm        another numbered register
15166      #imm      immediate data
15167      disp      displacement
15168      disp8     8-bit displacement
15169      disp12    12-bit displacement
15171      add #imm,Rn                    lds.l @Rn+,PR
15172      add Rm,Rn                      mac.w @Rm+,@Rn+
15173      addc Rm,Rn                     mov #imm,Rn
15174      addv Rm,Rn                     mov Rm,Rn
15175      and #imm,R0                    mov.b Rm,@(R0,Rn)
15176      and Rm,Rn                      mov.b Rm,@-Rn
15177      and.b #imm,@(R0,GBR)           mov.b Rm,@Rn
15178      bf disp8                       mov.b @(disp,Rm),R0
15179      bra disp12                     mov.b @(disp,GBR),R0
15180      bsr disp12                     mov.b @(R0,Rm),Rn
15181      bt disp8                       mov.b @Rm+,Rn
15182      clrmac                         mov.b @Rm,Rn
15183      clrt                           mov.b R0,@(disp,Rm)
15184      cmp/eq #imm,R0                 mov.b R0,@(disp,GBR)
15185      cmp/eq Rm,Rn                   mov.l Rm,@(disp,Rn)
15186      cmp/ge Rm,Rn                   mov.l Rm,@(R0,Rn)
15187      cmp/gt Rm,Rn                   mov.l Rm,@-Rn
15188      cmp/hi Rm,Rn                   mov.l Rm,@Rn
15189      cmp/hs Rm,Rn                   mov.l @(disp,Rn),Rm
15190      cmp/pl Rn                      mov.l @(disp,GBR),R0
15191      cmp/pz Rn                      mov.l @(disp,PC),Rn
15192      cmp/str Rm,Rn                  mov.l @(R0,Rm),Rn
15193      div0s Rm,Rn                    mov.l @Rm+,Rn
15194      div0u                          mov.l @Rm,Rn
15195      div1 Rm,Rn                     mov.l R0,@(disp,GBR)
15196      exts.b Rm,Rn                   mov.w Rm,@(R0,Rn)
15197      exts.w Rm,Rn                   mov.w Rm,@-Rn
15198      extu.b Rm,Rn                   mov.w Rm,@Rn
15199      extu.w Rm,Rn                   mov.w @(disp,Rm),R0
15200      jmp @Rn                        mov.w @(disp,GBR),R0
15201      jsr @Rn                        mov.w @(disp,PC),Rn
15202      ldc Rn,GBR                     mov.w @(R0,Rm),Rn
15203      ldc Rn,SR                      mov.w @Rm+,Rn
15204      ldc Rn,VBR                     mov.w @Rm,Rn
15205      ldc.l @Rn+,GBR                 mov.w R0,@(disp,Rm)
15206      ldc.l @Rn+,SR                  mov.w R0,@(disp,GBR)
15207      ldc.l @Rn+,VBR                 mova @(disp,PC),R0
15208      lds Rn,MACH                    movt Rn
15209      lds Rn,MACL                    muls Rm,Rn
15210      lds Rn,PR                      mulu Rm,Rn
15211      lds.l @Rn+,MACH                neg Rm,Rn
15212      lds.l @Rn+,MACL                negc Rm,Rn
15214      nop                            stc VBR,Rn
15215      not Rm,Rn                      stc.l GBR,@-Rn
15216      or #imm,R0                     stc.l SR,@-Rn
15217      or Rm,Rn                       stc.l VBR,@-Rn
15218      or.b #imm,@(R0,GBR)            sts MACH,Rn
15219      rotcl Rn                       sts MACL,Rn
15220      rotcr Rn                       sts PR,Rn
15221      rotl Rn                        sts.l MACH,@-Rn
15222      rotr Rn                        sts.l MACL,@-Rn
15223      rte                            sts.l PR,@-Rn
15224      rts                            sub Rm,Rn
15225      sett                           subc Rm,Rn
15226      shal Rn                        subv Rm,Rn
15227      shar Rn                        swap.b Rm,Rn
15228      shll Rn                        swap.w Rm,Rn
15229      shll16 Rn                      tas.b @Rn
15230      shll2 Rn                       trapa #imm
15231      shll8 Rn                       tst #imm,R0
15232      shlr Rn                        tst Rm,Rn
15233      shlr16 Rn                      tst.b #imm,@(R0,GBR)
15234      shlr2 Rn                       xor #imm,R0
15235      shlr8 Rn                       xor Rm,Rn
15236      sleep                          xor.b #imm,@(R0,GBR)
15237      stc GBR,Rn                     xtrct Rm,Rn
15238      stc SR,Rn
15240 \x1f
15241 File: as.info,  Node: SH64-Dependent,  Next: PDP-11-Dependent,  Prev: SH-Dependent,  Up: Machine Dependencies
15243 9.33 SuperH SH64 Dependent Features
15244 ===================================
15246 * Menu:
15248 * SH64 Options::              Options
15249 * SH64 Syntax::               Syntax
15250 * SH64 Directives::           SH64 Machine Directives
15251 * SH64 Opcodes::              Opcodes
15253 \x1f
15254 File: as.info,  Node: SH64 Options,  Next: SH64 Syntax,  Up: SH64-Dependent
15256 9.33.1 Options
15257 --------------
15259 `-isa=sh4 | sh4a'
15260      Specify the sh4 or sh4a instruction set.
15262 `-isa=dsp'
15263      Enable sh-dsp insns, and disable sh3e / sh4 insns.
15265 `-isa=fp'
15266      Enable sh2e, sh3e, sh4, and sh4a insn sets.
15268 `-isa=all'
15269      Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
15271 `-isa=shmedia | -isa=shcompact'
15272      Specify the default instruction set.  `SHmedia' specifies the
15273      32-bit opcodes, and `SHcompact' specifies the 16-bit opcodes
15274      compatible with previous SH families.  The default depends on the
15275      ABI selected; the default for the 64-bit ABI is SHmedia, and the
15276      default for the 32-bit ABI is SHcompact.  If neither the ABI nor
15277      the ISA is specified, the default is 32-bit SHcompact.
15279      Note that the `.mode' pseudo-op is not permitted if the ISA is not
15280      specified on the command line.
15282 `-abi=32 | -abi=64'
15283      Specify the default ABI.  If the ISA is specified and the ABI is
15284      not, the default ABI depends on the ISA, with SHmedia defaulting
15285      to 64-bit and SHcompact defaulting to 32-bit.
15287      Note that the `.abi' pseudo-op is not permitted if the ABI is not
15288      specified on the command line.  When the ABI is specified on the
15289      command line, any `.abi' pseudo-ops in the source must match it.
15291 `-shcompact-const-crange'
15292      Emit code-range descriptors for constants in SHcompact code
15293      sections.
15295 `-no-mix'
15296      Disallow SHmedia code in the same section as constants and
15297      SHcompact code.
15299 `-no-expand'
15300      Do not expand MOVI, PT, PTA or PTB instructions.
15302 `-expand-pt32'
15303      With -abi=64, expand PT, PTA and PTB instructions to 32 bits only.
15305 `-h-tick-hex'
15306      Support H'00 style hex constants in addition to 0x00 style.
15309 \x1f
15310 File: as.info,  Node: SH64 Syntax,  Next: SH64 Directives,  Prev: SH64 Options,  Up: SH64-Dependent
15312 9.33.2 Syntax
15313 -------------
15315 * Menu:
15317 * SH64-Chars::                Special Characters
15318 * SH64-Regs::                 Register Names
15319 * SH64-Addressing::           Addressing Modes
15321 \x1f
15322 File: as.info,  Node: SH64-Chars,  Next: SH64-Regs,  Up: SH64 Syntax
15324 9.33.2.1 Special Characters
15325 ...........................
15327 `!' is the line comment character.
15329    You can use `;' instead of a newline to separate statements.
15331    Since `$' has no special meaning, you may use it in symbol names.
15333 \x1f
15334 File: as.info,  Node: SH64-Regs,  Next: SH64-Addressing,  Prev: SH64-Chars,  Up: SH64 Syntax
15336 9.33.2.2 Register Names
15337 .......................
15339 You can use the predefined symbols `r0' through `r63' to refer to the
15340 SH64 general registers, `cr0' through `cr63' for control registers,
15341 `tr0' through `tr7' for target address registers, `fr0' through `fr63'
15342 for single-precision floating point registers, `dr0' through `dr62'
15343 (even numbered registers only) for double-precision floating point
15344 registers, `fv0' through `fv60' (multiples of four only) for
15345 single-precision floating point vectors, `fp0' through `fp62' (even
15346 numbered registers only) for single-precision floating point pairs,
15347 `mtrx0' through `mtrx48' (multiples of 16 only) for 4x4 matrices of
15348 single-precision floating point registers, `pc' for the program
15349 counter, and `fpscr' for the floating point status and control register.
15351    You can also refer to the control registers by the mnemonics `sr',
15352 `ssr', `pssr', `intevt', `expevt', `pexpevt', `tra', `spc', `pspc',
15353 `resvec', `vbr', `tea', `dcr', `kcr0', `kcr1', `ctc', and `usr'.
15355 \x1f
15356 File: as.info,  Node: SH64-Addressing,  Prev: SH64-Regs,  Up: SH64 Syntax
15358 9.33.2.3 Addressing Modes
15359 .........................
15361 SH64 operands consist of either a register or immediate value.  The
15362 immediate value can be a constant or label reference (or portion of a
15363 label reference), as in this example:
15365         movi    4,r2
15366         pt      function, tr4
15367         movi    (function >> 16) & 65535,r0
15368         shori   function & 65535, r0
15369         ld.l    r0,4,r0
15371    Instruction label references can reference labels in either SHmedia
15372 or SHcompact.  To differentiate between the two, labels in SHmedia
15373 sections will always have the least significant bit set (i.e. they will
15374 be odd), which SHcompact labels will have the least significant bit
15375 reset (i.e. they will be even).  If you need to reference the actual
15376 address of a label, you can use the `datalabel' modifier, as in this
15377 example:
15379         .long   function
15380         .long   datalabel function
15382    In that example, the first longword may or may not have the least
15383 significant bit set depending on whether the label is an SHmedia label
15384 or an SHcompact label.  The second longword will be the actual address
15385 of the label, regardless of what type of label it is.
15387 \x1f
15388 File: as.info,  Node: SH64 Directives,  Next: SH64 Opcodes,  Prev: SH64 Syntax,  Up: SH64-Dependent
15390 9.33.3 SH64 Machine Directives
15391 ------------------------------
15393 In addition to the SH directives, the SH64 provides the following
15394 directives:
15396 `.mode [shmedia|shcompact]'
15397 `.isa [shmedia|shcompact]'
15398      Specify the ISA for the following instructions (the two directives
15399      are equivalent).  Note that programs such as `objdump' rely on
15400      symbolic labels to determine when such mode switches occur (by
15401      checking the least significant bit of the label's address), so
15402      such mode/isa changes should always be followed by a label (in
15403      practice, this is true anyway).  Note that you cannot use these
15404      directives if you didn't specify an ISA on the command line.
15406 `.abi [32|64]'
15407      Specify the ABI for the following instructions.  Note that you
15408      cannot use this directive unless you specified an ABI on the
15409      command line, and the ABIs specified must match.
15411 `.uaquad'
15412      Like .uaword and .ualong, this allows you to specify an
15413      intentionally unaligned quadword (64 bit word).
15416 \x1f
15417 File: as.info,  Node: SH64 Opcodes,  Prev: SH64 Directives,  Up: SH64-Dependent
15419 9.33.4 Opcodes
15420 --------------
15422 For detailed information on the SH64 machine instruction set, see
15423 `SuperH 64 bit RISC Series Architecture Manual' (SuperH, Inc.).
15425    `as' implements all the standard SH64 opcodes.  In addition, the
15426 following pseudo-opcodes may be expanded into one or more alternate
15427 opcodes:
15429 `movi'
15430      If the value doesn't fit into a standard `movi' opcode, `as' will
15431      replace the `movi' with a sequence of `movi' and `shori' opcodes.
15433 `pt'
15434      This expands to a sequence of `movi' and `shori' opcode, followed
15435      by a `ptrel' opcode, or to a `pta' or `ptb' opcode, depending on
15436      the label referenced.
15439 \x1f
15440 File: as.info,  Node: Sparc-Dependent,  Next: TIC54X-Dependent,  Prev: SCORE-Dependent,  Up: Machine Dependencies
15442 9.34 SPARC Dependent Features
15443 =============================
15445 * Menu:
15447 * Sparc-Opts::                  Options
15448 * Sparc-Aligned-Data::          Option to enforce aligned data
15449 * Sparc-Syntax::                Syntax
15450 * Sparc-Float::                 Floating Point
15451 * Sparc-Directives::            Sparc Machine Directives
15453 \x1f
15454 File: as.info,  Node: Sparc-Opts,  Next: Sparc-Aligned-Data,  Up: Sparc-Dependent
15456 9.34.1 Options
15457 --------------
15459 The SPARC chip family includes several successive versions, using the
15460 same core instruction set, but including a few additional instructions
15461 at each version.  There are exceptions to this however.  For details on
15462 what instructions each variant supports, please see the chip's
15463 architecture reference manual.
15465    By default, `as' assumes the core instruction set (SPARC v6), but
15466 "bumps" the architecture level as needed: it switches to successively
15467 higher architectures as it encounters instructions that only exist in
15468 the higher levels.
15470    If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump
15471 past sparclite by default, an option must be passed to enable the v9
15472 instructions.
15474    GAS treats sparclite as being compatible with v8, unless an
15475 architecture is explicitly requested.  SPARC v9 is always incompatible
15476 with sparclite.
15478 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
15479 `-Av8plus | -Av8plusa | -Av9 | -Av9a'
15480      Use one of the `-A' options to select one of the SPARC
15481      architectures explicitly.  If you select an architecture
15482      explicitly, `as' reports a fatal error if it encounters an
15483      instruction or feature requiring an incompatible or higher level.
15485      `-Av8plus' and `-Av8plusa' select a 32 bit environment.
15487      `-Av9' and `-Av9a' select a 64 bit environment and are not
15488      available unless GAS is explicitly configured with 64 bit
15489      environment support.
15491      `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
15492      UltraSPARC extensions.
15494 `-xarch=v8plus | -xarch=v8plusa'
15495      For compatibility with the SunOS v9 assembler.  These options are
15496      equivalent to -Av8plus and -Av8plusa, respectively.
15498 `-bump'
15499      Warn whenever it is necessary to switch to another level.  If an
15500      architecture level is explicitly requested, GAS will not issue
15501      warnings until that level is reached, and will then bump the level
15502      as required (except between incompatible levels).
15504 `-32 | -64'
15505      Select the word size, either 32 bits or 64 bits.  These options
15506      are only available with the ELF object file format, and require
15507      that the necessary BFD support has been included.
15509 \x1f
15510 File: as.info,  Node: Sparc-Aligned-Data,  Next: Sparc-Syntax,  Prev: Sparc-Opts,  Up: Sparc-Dependent
15512 9.34.2 Enforcing aligned data
15513 -----------------------------
15515 SPARC GAS normally permits data to be misaligned.  For example, it
15516 permits the `.long' pseudo-op to be used on a byte boundary.  However,
15517 the native SunOS assemblers issue an error when they see misaligned
15518 data.
15520    You can use the `--enforce-aligned-data' option to make SPARC GAS
15521 also issue an error about misaligned data, just as the SunOS assemblers
15524    The `--enforce-aligned-data' option is not the default because gcc
15525 issues misaligned data pseudo-ops when it initializes certain packed
15526 data structures (structures defined using the `packed' attribute).  You
15527 may have to assemble with GAS in order to initialize packed data
15528 structures in your own code.
15530 \x1f
15531 File: as.info,  Node: Sparc-Syntax,  Next: Sparc-Float,  Prev: Sparc-Aligned-Data,  Up: Sparc-Dependent
15533 9.34.3 Sparc Syntax
15534 -------------------
15536 The assembler syntax closely follows The Sparc Architecture Manual,
15537 versions 8 and 9, as well as most extensions defined by Sun for their
15538 UltraSPARC and Niagara line of processors.
15540 * Menu:
15542 * Sparc-Chars::                Special Characters
15543 * Sparc-Regs::                 Register Names
15544 * Sparc-Constants::            Constant Names
15545 * Sparc-Relocs::               Relocations
15546 * Sparc-Size-Translations::    Size Translations
15548 \x1f
15549 File: as.info,  Node: Sparc-Chars,  Next: Sparc-Regs,  Up: Sparc-Syntax
15551 9.34.3.1 Special Characters
15552 ...........................
15554 `#' is the line comment character.
15556    `;' can be used instead of a newline to separate statements.
15558 \x1f
15559 File: as.info,  Node: Sparc-Regs,  Next: Sparc-Constants,  Prev: Sparc-Chars,  Up: Sparc-Syntax
15561 9.34.3.2 Register Names
15562 .......................
15564 The Sparc integer register file is broken down into global, outgoing,
15565 local, and incoming.
15567    * The 8 global registers are referred to as `%gN'.
15569    * The 8 outgoing registers are referred to as `%oN'.
15571    * The 8 local registers are referred to as `%lN'.
15573    * The 8 incoming registers are referred to as `%iN'.
15575    * The frame pointer register `%i6' can be referenced using the alias
15576      `%fp'.
15578    * The stack pointer register `%o6' can be referenced using the alias
15579      `%sp'.
15581    Floating point registers are simply referred to as `%fN'.  When
15582 assembling for pre-V9, only 32 floating point registers are available.
15583 For V9 and later there are 64, but there are restrictions when
15584 referencing the upper 32 registers.  They can only be accessed as
15585 double or quad, and thus only even or quad numbered accesses are
15586 allowed.  For example, `%f34' is a legal floating point register, but
15587 `%f35' is not.
15589    Certain V9 instructions allow access to ancillary state registers.
15590 Most simply they can be referred to as `%asrN' where N can be from 16
15591 to 31.  However, there are some aliases defined to reference ASR
15592 registers defined for various UltraSPARC processors:
15594    * The tick compare register is referred to as `%tick_cmpr'.
15596    * The system tick register is referred to as `%stick'.  An alias,
15597      `%sys_tick', exists but is deprecated and should not be used by
15598      new software.
15600    * The system tick compare register is referred to as `%stick_cmpr'.
15601      An alias, `%sys_tick_cmpr', exists but is deprecated and should
15602      not be used by new software.
15604    * The software interrupt register is referred to as `%softint'.
15606    * The set software interrupt register is referred to as
15607      `%set_softint'.  The mnemonic `%softint_set' is provided as an
15608      alias.
15610    * The clear software interrupt register is referred to as
15611      `%clear_softint'.  The mnemonic `%softint_clear' is provided as an
15612      alias.
15614    * The performance instrumentation counters register is referred to as
15615      `%pic'.
15617    * The performance control register is referred to as `%pcr'.
15619    * The graphics status register is referred to as `%gsr'.
15621    * The V9 dispatch control register is referred to as `%dcr'.
15623    Various V9 branch and conditional move instructions allow
15624 specification of which set of integer condition codes to test.  These
15625 are referred to as `%xcc' and `%icc'.
15627    In V9, there are 4 sets of floating point condition codes which are
15628 referred to as `%fccN'.
15630    Several special privileged and non-privileged registers exist:
15632    * The V9 address space identifier register is referred to as `%asi'.
15634    * The V9 restorable windows register is referred to as `%canrestore'.
15636    * The V9 savable windows register is referred to as `%cansave'.
15638    * The V9 clean windows register is referred to as `%cleanwin'.
15640    * The V9 current window pointer register is referred to as `%cwp'.
15642    * The floating-point queue register is referred to as `%fq'.
15644    * The V8 co-processor queue register is referred to as `%cq'.
15646    * The floating point status register is referred to as `%fsr'.
15648    * The other windows register is referred to as `%otherwin'.
15650    * The V9 program counter register is referred to as `%pc'.
15652    * The V9 next program counter register is referred to as `%npc'.
15654    * The V9 processor interrupt level register is referred to as `%pil'.
15656    * The V9 processor state register is referred to as `%pstate'.
15658    * The trap base address register is referred to as `%tba'.
15660    * The V9 tick register is referred to as `%tick'.
15662    * The V9 trap level is referred to as `%tl'.
15664    * The V9 trap program counter is referred to as `%tpc'.
15666    * The V9 trap next program counter is referred to as `%tnpc'.
15668    * The V9 trap state is referred to as `%tstate'.
15670    * The V9 trap type is referred to as `%tt'.
15672    * The V9 condition codes is referred to as `%ccr'.
15674    * The V9 floating-point registers state is referred to as `%fprs'.
15676    * The V9 version register is referred to as `%ver'.
15678    * The V9 window state register is referred to as `%wstate'.
15680    * The Y register is referred to as `%y'.
15682    * The V8 window invalid mask register is referred to as `%wim'.
15684    * The V8 processor state register is referred to as `%psr'.
15686    * The V9 global register level register is referred to as `%gl'.
15688    Several special register names exist for hypervisor mode code:
15690    * The hyperprivileged processor state register is referred to as
15691      `%hpstate'.
15693    * The hyperprivileged trap state register is referred to as
15694      `%htstate'.
15696    * The hyperprivileged interrupt pending register is referred to as
15697      `%hintp'.
15699    * The hyperprivileged trap base address register is referred to as
15700      `%htba'.
15702    * The hyperprivileged implementation version register is referred to
15703      as `%hver'.
15705    * The hyperprivileged system tick compare register is referred to as
15706      `%hstick_cmpr'.  Note that there is no `%hstick' register, the
15707      normal `%stick' is used.
15709 \x1f
15710 File: as.info,  Node: Sparc-Constants,  Next: Sparc-Relocs,  Prev: Sparc-Regs,  Up: Sparc-Syntax
15712 9.34.3.3 Constants
15713 ..................
15715 Several Sparc instructions take an immediate operand field for which
15716 mnemonic names exist.  Two such examples are `membar' and `prefetch'.
15717 Another example are the set of V9 memory access instruction that allow
15718 specification of an address space identifier.
15720    The `membar' instruction specifies a memory barrier that is the
15721 defined by the operand which is a bitmask.  The supported mask
15722 mnemonics are:
15724    * `#Sync' requests that all operations (including nonmemory
15725      reference operations) appearing prior to the `membar' must have
15726      been performed and the effects of any exceptions become visible
15727      before any instructions after the `membar' may be initiated.  This
15728      corresponds to `membar' cmask field bit 2.
15730    * `#MemIssue' requests that all memory reference operations
15731      appearing prior to the `membar' must have been performed before
15732      any memory operation after the `membar' may be initiated.  This
15733      corresponds to `membar' cmask field bit 1.
15735    * `#Lookaside' requests that a store appearing prior to the `membar'
15736      must complete before any load following the `membar' referencing
15737      the same address can be initiated.  This corresponds to `membar'
15738      cmask field bit 0.
15740    * `#StoreStore' defines that the effects of all stores appearing
15741      prior to the `membar' instruction must be visible to all
15742      processors before the effect of any stores following the `membar'.
15743      Equivalent to the deprecated `stbar' instruction.  This
15744      corresponds to `membar' mmask field bit 3.
15746    * `#LoadStore' defines all loads appearing prior to the `membar'
15747      instruction must have been performed before the effect of any
15748      stores following the `membar' is visible to any other processor.
15749      This corresponds to `membar' mmask field bit 2.
15751    * `#StoreLoad' defines that the effects of all stores appearing
15752      prior to the `membar' instruction must be visible to all
15753      processors before loads following the `membar' may be performed.
15754      This corresponds to `membar' mmask field bit 1.
15756    * `#LoadLoad' defines that all loads appearing prior to the `membar'
15757      instruction must have been performed before any loads following
15758      the `membar' may be performed.  This corresponds to `membar' mmask
15759      field bit 0.
15762    These values can be ored together, for example:
15764      membar #Sync
15765      membar #StoreLoad | #LoadLoad
15766      membar #StoreLoad | #StoreStore
15768    The `prefetch' and `prefetcha' instructions take a prefetch function
15769 code.  The following prefetch function code constant mnemonics are
15770 available:
15772    * `#n_reads' requests a prefetch for several reads, and corresponds
15773      to a prefetch function code of 0.
15775      `#one_read' requests a prefetch for one read, and corresponds to a
15776      prefetch function code of 1.
15778      `#n_writes' requests a prefetch for several writes (and possibly
15779      reads), and corresponds to a prefetch function code of 2.
15781      `#one_write' requests a prefetch for one write, and corresponds to
15782      a prefetch function code of 3.
15784      `#page' requests a prefetch page, and corresponds to a prefetch
15785      function code of 4.
15787      `#invalidate' requests a prefetch invalidate, and corresponds to a
15788      prefetch function code of 16.
15790      `#unified' requests a prefetch to the nearest unified cache, and
15791      corresponds to a prefetch function code of 17.
15793      `#n_reads_strong' requests a strong prefetch for several reads,
15794      and corresponds to a prefetch function code of 20.
15796      `#one_read_strong' requests a strong prefetch for one read, and
15797      corresponds to a prefetch function code of 21.
15799      `#n_writes_strong' requests a strong prefetch for several writes,
15800      and corresponds to a prefetch function code of 22.
15802      `#one_write_strong' requests a strong prefetch for one write, and
15803      corresponds to a prefetch function code of 23.
15805      Onle one prefetch code may be specified.  Here are some examples:
15807           prefetch  [%l0 + %l2], #one_read
15808           prefetch  [%g2 + 8], #n_writes
15809           prefetcha [%g1] 0x8, #unified
15810           prefetcha [%o0 + 0x10] %asi, #n_reads
15812      The actual behavior of a given prefetch function code is processor
15813      specific.  If a processor does not implement a given prefetch
15814      function code, it will treat the prefetch instruction as a nop.
15816      For instructions that accept an immediate address space identifier,
15817      `as' provides many mnemonics corresponding to V9 defined as well
15818      as UltraSPARC and Niagara extended values.  For example, `#ASI_P'
15819      and `#ASI_BLK_INIT_QUAD_LDD_AIUS'.  See the V9 and processor
15820      specific manuals for details.
15823 \x1f
15824 File: as.info,  Node: Sparc-Relocs,  Next: Sparc-Size-Translations,  Prev: Sparc-Constants,  Up: Sparc-Syntax
15826 9.34.3.4 Relocations
15827 ....................
15829 ELF relocations are available as defined in the 32-bit and 64-bit Sparc
15830 ELF specifications.
15832    `R_SPARC_HI22' is obtained using `%hi' and `R_SPARC_LO10' is
15833 obtained using `%lo'.  Likewise `R_SPARC_HIX22' is obtained from `%hix'
15834 and `R_SPARC_LOX10' is obtained using `%lox'.  For example:
15836      sethi %hi(symbol), %g1
15837      or    %g1, %lo(symbol), %g1
15839      sethi %hix(symbol), %g1
15840      xor   %g1, %lox(symbol), %g1
15842    These "high" mnemonics extract bits 31:10 of their operand, and the
15843 "low" mnemonics extract bits 9:0 of their operand.
15845    V9 code model relocations can be requested as follows:
15847    * `R_SPARC_HH22' is requested using `%hh'.  It can also be generated
15848      using `%uhi'.
15850    * `R_SPARC_HM10' is requested using `%hm'.  It can also be generated
15851      using `%ulo'.
15853    * `R_SPARC_LM22' is requested using `%lm'.
15855    * `R_SPARC_H44' is requested using `%h44'.
15857    * `R_SPARC_M44' is requested using `%m44'.
15859    * `R_SPARC_L44' is requested using `%l44'.
15861    The PC relative relocation `R_SPARC_PC22' can be obtained by
15862 enclosing an operand inside of `%pc22'.  Likewise, the `R_SPARC_PC10'
15863 relocation can be obtained using `%pc10'.  These are mostly used when
15864 assembling PIC code.  For example, the standard PIC sequence on Sparc
15865 to get the base of the global offset table, PC relative, into a
15866 register, can be performed as:
15868      sethi %pc22(_GLOBAL_OFFSET_TABLE_-4), %l7
15869      add   %l7, %pc10(_GLOBAL_OFFSET_TABLE_+4), %l7
15871    Several relocations exist to allow the link editor to potentially
15872 optimize GOT data references.  The `R_SPARC_GOTDATA_OP_HIX22'
15873 relocation can obtained by enclosing an operand inside of
15874 `%gdop_hix22'.  The `R_SPARC_GOTDATA_OP_LOX10' relocation can obtained
15875 by enclosing an operand inside of `%gdop_lox10'.  Likewise,
15876 `R_SPARC_GOTDATA_OP' can be obtained by enclosing an operand inside of
15877 `%gdop'.  For example, assuming the GOT base is in register `%l7':
15879      sethi %gdop_hix22(symbol), %l1
15880      xor   %l1, %gdop_lox10(symbol), %l1
15881      ld    [%l7 + %l1], %l2, %gdop(symbol)
15883    There are many relocations that can be requested for access to
15884 thread local storage variables.  All of the Sparc TLS mnemonics are
15885 supported:
15887    * `R_SPARC_TLS_GD_HI22' is requested using `%tgd_hi22'.
15889    * `R_SPARC_TLS_GD_LO10' is requested using `%tgd_lo10'.
15891    * `R_SPARC_TLS_GD_ADD' is requested using `%tgd_add'.
15893    * `R_SPARC_TLS_GD_CALL' is requested using `%tgd_call'.
15895    * `R_SPARC_TLS_LDM_HI22' is requested using `%tldm_hi22'.
15897    * `R_SPARC_TLS_LDM_LO10' is requested using `%tldm_lo10'.
15899    * `R_SPARC_TLS_LDM_ADD' is requested using `%tldm_add'.
15901    * `R_SPARC_TLS_LDM_CALL' is requested using `%tldm_call'.
15903    * `R_SPARC_TLS_LDO_HIX22' is requested using `%tldo_hix22'.
15905    * `R_SPARC_TLS_LDO_LOX10' is requested using `%tldo_lox10'.
15907    * `R_SPARC_TLS_LDO_ADD' is requested using `%tldo_add'.
15909    * `R_SPARC_TLS_IE_HI22' is requested using `%tie_hi22'.
15911    * `R_SPARC_TLS_IE_LO10' is requested using `%tie_lo10'.
15913    * `R_SPARC_TLS_IE_LD' is requested using `%tie_ld'.
15915    * `R_SPARC_TLS_IE_LDX' is requested using `%tie_ldx'.
15917    * `R_SPARC_TLS_IE_ADD' is requested using `%tie_add'.
15919    * `R_SPARC_TLS_LE_HIX22' is requested using `%tle_hix22'.
15921    * `R_SPARC_TLS_LE_LOX10' is requested using `%tle_lox10'.
15923    Here are some example TLS model sequences.
15925    First, General Dynamic:
15927      sethi  %tgd_hi22(symbol), %l1
15928      add    %l1, %tgd_lo10(symbol), %l1
15929      add    %l7, %l1, %o0, %tgd_add(symbol)
15930      call   __tls_get_addr, %tgd_call(symbol)
15931      nop
15933    Local Dynamic:
15935      sethi  %tldm_hi22(symbol), %l1
15936      add    %l1, %tldm_lo10(symbol), %l1
15937      add    %l7, %l1, %o0, %tldm_add(symbol)
15938      call   __tls_get_addr, %tldm_call(symbol)
15939      nop
15941      sethi  %tldo_hix22(symbol), %l1
15942      xor    %l1, %tldo_lox10(symbol), %l1
15943      add    %o0, %l1, %l1, %tldo_add(symbol)
15945    Initial Exec:
15947      sethi  %tie_hi22(symbol), %l1
15948      add    %l1, %tie_lo10(symbol), %l1
15949      ld     [%l7 + %l1], %o0, %tie_ld(symbol)
15950      add    %g7, %o0, %o0, %tie_add(symbol)
15952      sethi  %tie_hi22(symbol), %l1
15953      add    %l1, %tie_lo10(symbol), %l1
15954      ldx    [%l7 + %l1], %o0, %tie_ldx(symbol)
15955      add    %g7, %o0, %o0, %tie_add(symbol)
15957    And finally, Local Exec:
15959      sethi  %tle_hix22(symbol), %l1
15960      add    %l1, %tle_lox10(symbol), %l1
15961      add    %g7, %l1, %l1
15963    When assembling for 64-bit, and a secondary constant addend is
15964 specified in an address expression that would normally generate an
15965 `R_SPARC_LO10' relocation, the assembler will emit an `R_SPARC_OLO10'
15966 instead.
15968 \x1f
15969 File: as.info,  Node: Sparc-Size-Translations,  Prev: Sparc-Relocs,  Up: Sparc-Syntax
15971 9.34.3.5 Size Translations
15972 ..........................
15974 Often it is desirable to write code in an operand size agnostic manner.
15975 `as' provides support for this via operand size opcode translations.
15976 Translations are supported for loads, stores, shifts, compare-and-swap
15977 atomics, and the `clr' synthetic instruction.
15979    If generating 32-bit code, `as' will generate the 32-bit opcode.
15980 Whereas if 64-bit code is being generated, the 64-bit opcode will be
15981 emitted.  For example `ldn' will be transformed into `ld' for 32-bit
15982 code and `ldx' for 64-bit code.
15984    Here is an example meant to demonstrate all the supported opcode
15985 translations:
15987      ldn   [%o0], %o1
15988      ldna  [%o0] %asi, %o2
15989      stn   %o1, [%o0]
15990      stna  %o2, [%o0] %asi
15991      slln  %o3, 3, %o3
15992      srln  %o4, 8, %o4
15993      sran  %o5, 12, %o5
15994      casn  [%o0], %o1, %o2
15995      casna [%o0] %asi, %o1, %o2
15996      clrn  %g1
15998    In 32-bit mode `as' will emit:
16000      ld   [%o0], %o1
16001      lda  [%o0] %asi, %o2
16002      st   %o1, [%o0]
16003      sta  %o2, [%o0] %asi
16004      sll  %o3, 3, %o3
16005      srl  %o4, 8, %o4
16006      sra  %o5, 12, %o5
16007      cas  [%o0], %o1, %o2
16008      casa [%o0] %asi, %o1, %o2
16009      clr  %g1
16011    And in 64-bit mode `as' will emit:
16013      ldx   [%o0], %o1
16014      ldxa  [%o0] %asi, %o2
16015      stx   %o1, [%o0]
16016      stxa  %o2, [%o0] %asi
16017      sllx  %o3, 3, %o3
16018      srlx  %o4, 8, %o4
16019      srax  %o5, 12, %o5
16020      casx  [%o0], %o1, %o2
16021      casxa [%o0] %asi, %o1, %o2
16022      clrx  %g1
16024    Finally, the `.nword' translating directive is supported as well.
16025 It is documented in the section on Sparc machine directives.
16027 \x1f
16028 File: as.info,  Node: Sparc-Float,  Next: Sparc-Directives,  Prev: Sparc-Syntax,  Up: Sparc-Dependent
16030 9.34.4 Floating Point
16031 ---------------------
16033 The Sparc uses IEEE floating-point numbers.
16035 \x1f
16036 File: as.info,  Node: Sparc-Directives,  Prev: Sparc-Float,  Up: Sparc-Dependent
16038 9.34.5 Sparc Machine Directives
16039 -------------------------------
16041 The Sparc version of `as' supports the following additional machine
16042 directives:
16044 `.align'
16045      This must be followed by the desired alignment in bytes.
16047 `.common'
16048      This must be followed by a symbol name, a positive number, and
16049      `"bss"'.  This behaves somewhat like `.comm', but the syntax is
16050      different.
16052 `.half'
16053      This is functionally identical to `.short'.
16055 `.nword'
16056      On the Sparc, the `.nword' directive produces native word sized
16057      value, ie. if assembling with -32 it is equivalent to `.word', if
16058      assembling with -64 it is equivalent to `.xword'.
16060 `.proc'
16061      This directive is ignored.  Any text following it on the same line
16062      is also ignored.
16064 `.register'
16065      This directive declares use of a global application or system
16066      register.  It must be followed by a register name %g2, %g3, %g6 or
16067      %g7, comma and the symbol name for that register.  If symbol name
16068      is `#scratch', it is a scratch register, if it is `#ignore', it
16069      just suppresses any errors about using undeclared global register,
16070      but does not emit any information about it into the object file.
16071      This can be useful e.g. if you save the register before use and
16072      restore it after.
16074 `.reserve'
16075      This must be followed by a symbol name, a positive number, and
16076      `"bss"'.  This behaves somewhat like `.lcomm', but the syntax is
16077      different.
16079 `.seg'
16080      This must be followed by `"text"', `"data"', or `"data1"'.  It
16081      behaves like `.text', `.data', or `.data 1'.
16083 `.skip'
16084      This is functionally identical to the `.space' directive.
16086 `.word'
16087      On the Sparc, the `.word' directive produces 32 bit values,
16088      instead of the 16 bit values it produces on many other machines.
16090 `.xword'
16091      On the Sparc V9 processor, the `.xword' directive produces 64 bit
16092      values.
16094 \x1f
16095 File: as.info,  Node: TIC54X-Dependent,  Next: V850-Dependent,  Prev: Sparc-Dependent,  Up: Machine Dependencies
16097 9.35 TIC54X Dependent Features
16098 ==============================
16100 * Menu:
16102 * TIC54X-Opts::              Command-line Options
16103 * TIC54X-Block::             Blocking
16104 * TIC54X-Env::               Environment Settings
16105 * TIC54X-Constants::         Constants Syntax
16106 * TIC54X-Subsyms::           String Substitution
16107 * TIC54X-Locals::            Local Label Syntax
16108 * TIC54X-Builtins::          Builtin Assembler Math Functions
16109 * TIC54X-Ext::               Extended Addressing Support
16110 * TIC54X-Directives::        Directives
16111 * TIC54X-Macros::            Macro Features
16112 * TIC54X-MMRegs::            Memory-mapped Registers
16114 \x1f
16115 File: as.info,  Node: TIC54X-Opts,  Next: TIC54X-Block,  Up: TIC54X-Dependent
16117 9.35.1 Options
16118 --------------
16120 The TMS320C54X version of `as' has a few machine-dependent options.
16122    You can use the `-mfar-mode' option to enable extended addressing
16123 mode.  All addresses will be assumed to be > 16 bits, and the
16124 appropriate relocation types will be used.  This option is equivalent
16125 to using the `.far_mode' directive in the assembly code.  If you do not
16126 use the `-mfar-mode' option, all references will be assumed to be 16
16127 bits.  This option may be abbreviated to `-mf'.
16129    You can use the `-mcpu' option to specify a particular CPU.  This
16130 option is equivalent to using the `.version' directive in the assembly
16131 code.  For recognized CPU codes, see *Note `.version':
16132 TIC54X-Directives.  The default CPU version is `542'.
16134    You can use the `-merrors-to-file' option to redirect error output
16135 to a file (this provided for those deficient environments which don't
16136 provide adequate output redirection).  This option may be abbreviated to
16137 `-me'.
16139 \x1f
16140 File: as.info,  Node: TIC54X-Block,  Next: TIC54X-Env,  Prev: TIC54X-Opts,  Up: TIC54X-Dependent
16142 9.35.2 Blocking
16143 ---------------
16145 A blocked section or memory block is guaranteed not to cross the
16146 blocking boundary (usually a page, or 128 words) if it is smaller than
16147 the blocking size, or to start on a page boundary if it is larger than
16148 the blocking size.
16150 \x1f
16151 File: as.info,  Node: TIC54X-Env,  Next: TIC54X-Constants,  Prev: TIC54X-Block,  Up: TIC54X-Dependent
16153 9.35.3 Environment Settings
16154 ---------------------------
16156 `C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are added
16157 to the list of directories normally searched for source and include
16158 files.  `C54XDSP_DIR' will override `A_DIR'.
16160 \x1f
16161 File: as.info,  Node: TIC54X-Constants,  Next: TIC54X-Subsyms,  Prev: TIC54X-Env,  Up: TIC54X-Dependent
16163 9.35.4 Constants Syntax
16164 -----------------------
16166 The TIC54X version of `as' allows the following additional constant
16167 formats, using a suffix to indicate the radix:
16169      Binary                  `000000B, 011000b'
16170      Octal                   `10Q, 224q'
16171      Hexadecimal             `45h, 0FH'
16173 \x1f
16174 File: as.info,  Node: TIC54X-Subsyms,  Next: TIC54X-Locals,  Prev: TIC54X-Constants,  Up: TIC54X-Dependent
16176 9.35.5 String Substitution
16177 --------------------------
16179 A subset of allowable symbols (which we'll call subsyms) may be assigned
16180 arbitrary string values.  This is roughly equivalent to C preprocessor
16181 #define macros.  When `as' encounters one of these symbols, the symbol
16182 is replaced in the input stream by its string value.  Subsym names
16183 *must* begin with a letter.
16185    Subsyms may be defined using the `.asg' and `.eval' directives
16186 (*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives.
16188    Expansion is recursive until a previously encountered symbol is
16189 seen, at which point substitution stops.
16191    In this example, x is replaced with SYM2; SYM2 is replaced with
16192 SYM1, and SYM1 is replaced with x.  At this point, x has already been
16193 encountered and the substitution stops.
16195       .asg   "x",SYM1
16196       .asg   "SYM1",SYM2
16197       .asg   "SYM2",x
16198       add    x,a             ; final code assembled is "add  x, a"
16200    Macro parameters are converted to subsyms; a side effect of this is
16201 the normal `as' '\ARG' dereferencing syntax is unnecessary.  Subsyms
16202 defined within a macro will have global scope, unless the `.var'
16203 directive is used to identify the subsym as a local macro variable
16204 *note `.var': TIC54X-Directives.
16206    Substitution may be forced in situations where replacement might be
16207 ambiguous by placing colons on either side of the subsym.  The following
16208 code:
16210       .eval  "10",x
16211      LAB:X:  add     #x, a
16213    When assembled becomes:
16215      LAB10  add     #10, a
16217    Smaller parts of the string assigned to a subsym may be accessed with
16218 the following syntax:
16220 ``:SYMBOL(CHAR_INDEX):''
16221      Evaluates to a single-character string, the character at
16222      CHAR_INDEX.
16224 ``:SYMBOL(START,LENGTH):''
16225      Evaluates to a substring of SYMBOL beginning at START with length
16226      LENGTH.
16228 \x1f
16229 File: as.info,  Node: TIC54X-Locals,  Next: TIC54X-Builtins,  Prev: TIC54X-Subsyms,  Up: TIC54X-Dependent
16231 9.35.6 Local Labels
16232 -------------------
16234 Local labels may be defined in two ways:
16236    * $N, where N is a decimal number between 0 and 9
16238    * LABEL?, where LABEL is any legal symbol name.
16240    Local labels thus defined may be redefined or automatically
16241 generated.  The scope of a local label is based on when it may be
16242 undefined or reset.  This happens when one of the following situations
16243 is encountered:
16245    * .newblock directive *note `.newblock': TIC54X-Directives.
16247    * The current section is changed (.sect, .text, or .data)
16249    * Entering or leaving an included file
16251    * The macro scope where the label was defined is exited
16253 \x1f
16254 File: as.info,  Node: TIC54X-Builtins,  Next: TIC54X-Ext,  Prev: TIC54X-Locals,  Up: TIC54X-Dependent
16256 9.35.7 Math Builtins
16257 --------------------
16259 The following built-in functions may be used to generate a
16260 floating-point value.  All return a floating-point value except `$cvi',
16261 `$int', and `$sgn', which return an integer value.
16263 ``$acos(EXPR)''
16264      Returns the floating point arccosine of EXPR.
16266 ``$asin(EXPR)''
16267      Returns the floating point arcsine of EXPR.
16269 ``$atan(EXPR)''
16270      Returns the floating point arctangent of EXPR.
16272 ``$atan2(EXPR1,EXPR2)''
16273      Returns the floating point arctangent of EXPR1 / EXPR2.
16275 ``$ceil(EXPR)''
16276      Returns the smallest integer not less than EXPR as floating point.
16278 ``$cosh(EXPR)''
16279      Returns the floating point hyperbolic cosine of EXPR.
16281 ``$cos(EXPR)''
16282      Returns the floating point cosine of EXPR.
16284 ``$cvf(EXPR)''
16285      Returns the integer value EXPR converted to floating-point.
16287 ``$cvi(EXPR)''
16288      Returns the floating point value EXPR converted to integer.
16290 ``$exp(EXPR)''
16291      Returns the floating point value e ^ EXPR.
16293 ``$fabs(EXPR)''
16294      Returns the floating point absolute value of EXPR.
16296 ``$floor(EXPR)''
16297      Returns the largest integer that is not greater than EXPR as
16298      floating point.
16300 ``$fmod(EXPR1,EXPR2)''
16301      Returns the floating point remainder of EXPR1 / EXPR2.
16303 ``$int(EXPR)''
16304      Returns 1 if EXPR evaluates to an integer, zero otherwise.
16306 ``$ldexp(EXPR1,EXPR2)''
16307      Returns the floating point value EXPR1 * 2 ^ EXPR2.
16309 ``$log10(EXPR)''
16310      Returns the base 10 logarithm of EXPR.
16312 ``$log(EXPR)''
16313      Returns the natural logarithm of EXPR.
16315 ``$max(EXPR1,EXPR2)''
16316      Returns the floating point maximum of EXPR1 and EXPR2.
16318 ``$min(EXPR1,EXPR2)''
16319      Returns the floating point minimum of EXPR1 and EXPR2.
16321 ``$pow(EXPR1,EXPR2)''
16322      Returns the floating point value EXPR1 ^ EXPR2.
16324 ``$round(EXPR)''
16325      Returns the nearest integer to EXPR as a floating point number.
16327 ``$sgn(EXPR)''
16328      Returns -1, 0, or 1 based on the sign of EXPR.
16330 ``$sin(EXPR)''
16331      Returns the floating point sine of EXPR.
16333 ``$sinh(EXPR)''
16334      Returns the floating point hyperbolic sine of EXPR.
16336 ``$sqrt(EXPR)''
16337      Returns the floating point square root of EXPR.
16339 ``$tan(EXPR)''
16340      Returns the floating point tangent of EXPR.
16342 ``$tanh(EXPR)''
16343      Returns the floating point hyperbolic tangent of EXPR.
16345 ``$trunc(EXPR)''
16346      Returns the integer value of EXPR truncated towards zero as
16347      floating point.
16350 \x1f
16351 File: as.info,  Node: TIC54X-Ext,  Next: TIC54X-Directives,  Prev: TIC54X-Builtins,  Up: TIC54X-Dependent
16353 9.35.8 Extended Addressing
16354 --------------------------
16356 The `LDX' pseudo-op is provided for loading the extended addressing bits
16357 of a label or address.  For example, if an address `_label' resides in
16358 extended program memory, the value of `_label' may be loaded as follows:
16359       ldx     #_label,16,a    ; loads extended bits of _label
16360       or      #_label,a       ; loads lower 16 bits of _label
16361       bacc    a               ; full address is in accumulator A
16363 \x1f
16364 File: as.info,  Node: TIC54X-Directives,  Next: TIC54X-Macros,  Prev: TIC54X-Ext,  Up: TIC54X-Dependent
16366 9.35.9 Directives
16367 -----------------
16369 `.align [SIZE]'
16370 `.even'
16371      Align the section program counter on the next boundary, based on
16372      SIZE.  SIZE may be any power of 2.  `.even' is equivalent to
16373      `.align' with a SIZE of 2.
16374     `1'
16375           Align SPC to word boundary
16377     `2'
16378           Align SPC to longword boundary (same as .even)
16380     `128'
16381           Align SPC to page boundary
16383 `.asg STRING, NAME'
16384      Assign NAME the string STRING.  String replacement is performed on
16385      STRING before assignment.
16387 `.eval STRING, NAME'
16388      Evaluate the contents of string STRING and assign the result as a
16389      string to the subsym NAME.  String replacement is performed on
16390      STRING before assignment.
16392 `.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
16393      Reserve space for SYMBOL in the .bss section.  SIZE is in words.
16394      If present, BLOCKING_FLAG indicates the allocated space should be
16395      aligned on a page boundary if it would otherwise cross a page
16396      boundary.  If present, ALIGNMENT_FLAG causes the assembler to
16397      allocate SIZE on a long word boundary.
16399 `.byte VALUE [,...,VALUE_N]'
16400 `.ubyte VALUE [,...,VALUE_N]'
16401 `.char VALUE [,...,VALUE_N]'
16402 `.uchar VALUE [,...,VALUE_N]'
16403      Place one or more bytes into consecutive words of the current
16404      section.  The upper 8 bits of each word is zero-filled.  If a
16405      label is used, it points to the word allocated for the first byte
16406      encountered.
16408 `.clink ["SECTION_NAME"]'
16409      Set STYP_CLINK flag for this section, which indicates to the
16410      linker that if no symbols from this section are referenced, the
16411      section should not be included in the link.  If SECTION_NAME is
16412      omitted, the current section is used.
16414 `.c_mode'
16415      TBD.
16417 `.copy "FILENAME" | FILENAME'
16418 `.include "FILENAME" | FILENAME'
16419      Read source statements from FILENAME.  The normal include search
16420      path is used.  Normally .copy will cause statements from the
16421      included file to be printed in the assembly listing and .include
16422      will not, but this distinction is not currently implemented.
16424 `.data'
16425      Begin assembling code into the .data section.
16427 `.double VALUE [,...,VALUE_N]'
16428 `.ldouble VALUE [,...,VALUE_N]'
16429 `.float VALUE [,...,VALUE_N]'
16430 `.xfloat VALUE [,...,VALUE_N]'
16431      Place an IEEE single-precision floating-point representation of
16432      one or more floating-point values into the current section.  All
16433      but `.xfloat' align the result on a longword boundary.  Values are
16434      stored most-significant word first.
16436 `.drlist'
16437 `.drnolist'
16438      Control printing of directives to the listing file.  Ignored.
16440 `.emsg STRING'
16441 `.mmsg STRING'
16442 `.wmsg STRING'
16443      Emit a user-defined error, message, or warning, respectively.
16445 `.far_mode'
16446      Use extended addressing when assembling statements.  This should
16447      appear only once per file, and is equivalent to the -mfar-mode
16448      option *note `-mfar-mode': TIC54X-Opts.
16450 `.fclist'
16451 `.fcnolist'
16452      Control printing of false conditional blocks to the listing file.
16454 `.field VALUE [,SIZE]'
16455      Initialize a bitfield of SIZE bits in the current section.  If
16456      VALUE is relocatable, then SIZE must be 16.  SIZE defaults to 16
16457      bits.  If VALUE does not fit into SIZE bits, the value will be
16458      truncated.  Successive `.field' directives will pack starting at
16459      the current word, filling the most significant bits first, and
16460      aligning to the start of the next word if the field size does not
16461      fit into the space remaining in the current word.  A `.align'
16462      directive with an operand of 1 will force the next `.field'
16463      directive to begin packing into a new word.  If a label is used, it
16464      points to the word that contains the specified field.
16466 `.global SYMBOL [,...,SYMBOL_N]'
16467 `.def SYMBOL [,...,SYMBOL_N]'
16468 `.ref SYMBOL [,...,SYMBOL_N]'
16469      `.def' nominally identifies a symbol defined in the current file
16470      and available to other files.  `.ref' identifies a symbol used in
16471      the current file but defined elsewhere.  Both map to the standard
16472      `.global' directive.
16474 `.half VALUE [,...,VALUE_N]'
16475 `.uhalf VALUE [,...,VALUE_N]'
16476 `.short VALUE [,...,VALUE_N]'
16477 `.ushort VALUE [,...,VALUE_N]'
16478 `.int VALUE [,...,VALUE_N]'
16479 `.uint VALUE [,...,VALUE_N]'
16480 `.word VALUE [,...,VALUE_N]'
16481 `.uword VALUE [,...,VALUE_N]'
16482      Place one or more values into consecutive words of the current
16483      section.  If a label is used, it points to the word allocated for
16484      the first value encountered.
16486 `.label SYMBOL'
16487      Define a special SYMBOL to refer to the load time address of the
16488      current section program counter.
16490 `.length'
16491 `.width'
16492      Set the page length and width of the output listing file.  Ignored.
16494 `.list'
16495 `.nolist'
16496      Control whether the source listing is printed.  Ignored.
16498 `.long VALUE [,...,VALUE_N]'
16499 `.ulong VALUE [,...,VALUE_N]'
16500 `.xlong VALUE [,...,VALUE_N]'
16501      Place one or more 32-bit values into consecutive words in the
16502      current section.  The most significant word is stored first.
16503      `.long' and `.ulong' align the result on a longword boundary;
16504      `xlong' does not.
16506 `.loop [COUNT]'
16507 `.break [CONDITION]'
16508 `.endloop'
16509      Repeatedly assemble a block of code.  `.loop' begins the block, and
16510      `.endloop' marks its termination.  COUNT defaults to 1024, and
16511      indicates the number of times the block should be repeated.
16512      `.break' terminates the loop so that assembly begins after the
16513      `.endloop' directive.  The optional CONDITION will cause the loop
16514      to terminate only if it evaluates to zero.
16516 `MACRO_NAME .macro [PARAM1][,...PARAM_N]'
16517 `[.mexit]'
16518 `.endm'
16519      See the section on macros for more explanation (*Note
16520      TIC54X-Macros::.
16522 `.mlib "FILENAME" | FILENAME'
16523      Load the macro library FILENAME.  FILENAME must be an archived
16524      library (BFD ar-compatible) of text files, expected to contain
16525      only macro definitions.   The standard include search path is used.
16527 `.mlist'
16529 `.mnolist'
16530      Control whether to include macro and loop block expansions in the
16531      listing output.  Ignored.
16533 `.mmregs'
16534      Define global symbolic names for the 'c54x registers.  Supposedly
16535      equivalent to executing `.set' directives for each register with
16536      its memory-mapped value, but in reality is provided only for
16537      compatibility and does nothing.
16539 `.newblock'
16540      This directive resets any TIC54X local labels currently defined.
16541      Normal `as' local labels are unaffected.
16543 `.option OPTION_LIST'
16544      Set listing options.  Ignored.
16546 `.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]'
16547      Designate SECTION_NAME for blocking.  Blocking guarantees that a
16548      section will start on a page boundary (128 words) if it would
16549      otherwise cross a page boundary.  Only initialized sections may be
16550      designated with this directive.  See also *Note TIC54X-Block::.
16552 `.sect "SECTION_NAME"'
16553      Define a named initialized section and make it the current section.
16555 `SYMBOL .set "VALUE"'
16556 `SYMBOL .equ "VALUE"'
16557      Equate a constant VALUE to a SYMBOL, which is placed in the symbol
16558      table.  SYMBOL may not be previously defined.
16560 `.space SIZE_IN_BITS'
16561 `.bes SIZE_IN_BITS'
16562      Reserve the given number of bits in the current section and
16563      zero-fill them.  If a label is used with `.space', it points to the
16564      *first* word reserved.  With `.bes', the label points to the
16565      *last* word reserved.
16567 `.sslist'
16568 `.ssnolist'
16569      Controls the inclusion of subsym replacement in the listing
16570      output.  Ignored.
16572 `.string "STRING" [,...,"STRING_N"]'
16573 `.pstring "STRING" [,...,"STRING_N"]'
16574      Place 8-bit characters from STRING into the current section.
16575      `.string' zero-fills the upper 8 bits of each word, while
16576      `.pstring' puts two characters into each word, filling the
16577      most-significant bits first.  Unused space is zero-filled.  If a
16578      label is used, it points to the first word initialized.
16580 `[STAG] .struct [OFFSET]'
16581 `[NAME_1] element [COUNT_1]'
16582 `[NAME_2] element [COUNT_2]'
16583 `[TNAME] .tag STAGX [TCOUNT]'
16584 `...'
16585 `[NAME_N] element [COUNT_N]'
16586 `[SSIZE] .endstruct'
16587 `LABEL .tag [STAG]'
16588      Assign symbolic offsets to the elements of a structure.  STAG
16589      defines a symbol to use to reference the structure.  OFFSET
16590      indicates a starting value to use for the first element
16591      encountered; otherwise it defaults to zero.  Each element can have
16592      a named offset, NAME, which is a symbol assigned the value of the
16593      element's offset into the structure.  If STAG is missing, these
16594      become global symbols.  COUNT adjusts the offset that many times,
16595      as if `element' were an array.  `element' may be one of `.byte',
16596      `.word', `.long', `.float', or any equivalent of those, and the
16597      structure offset is adjusted accordingly.  `.field' and `.string'
16598      are also allowed; the size of `.field' is one bit, and `.string'
16599      is considered to be one word in size.  Only element descriptors,
16600      structure/union tags, `.align' and conditional assembly directives
16601      are allowed within `.struct'/`.endstruct'.  `.align' aligns member
16602      offsets to word boundaries only.  SSIZE, if provided, will always
16603      be assigned the size of the structure.
16605      The `.tag' directive, in addition to being used to define a
16606      structure/union element within a structure, may be used to apply a
16607      structure to a symbol.  Once applied to LABEL, the individual
16608      structure elements may be applied to LABEL to produce the desired
16609      offsets using LABEL as the structure base.
16611 `.tab'
16612      Set the tab size in the output listing.  Ignored.
16614 `[UTAG] .union'
16615 `[NAME_1] element [COUNT_1]'
16616 `[NAME_2] element [COUNT_2]'
16617 `[TNAME] .tag UTAGX[,TCOUNT]'
16618 `...'
16619 `[NAME_N] element [COUNT_N]'
16620 `[USIZE] .endstruct'
16621 `LABEL .tag [UTAG]'
16622      Similar to `.struct', but the offset after each element is reset to
16623      zero, and the USIZE is set to the maximum of all defined elements.
16624      Starting offset for the union is always zero.
16626 `[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
16627      Reserve space for variables in a named, uninitialized section
16628      (similar to .bss).  `.usect' allows definitions sections
16629      independent of .bss.  SYMBOL points to the first location reserved
16630      by this allocation.  The symbol may be used as a variable name.
16631      SIZE is the allocated size in words.  BLOCKING_FLAG indicates
16632      whether to block this section on a page boundary (128 words)
16633      (*note TIC54X-Block::).  ALIGNMENT FLAG indicates whether the
16634      section should be longword-aligned.
16636 `.var SYM[,..., SYM_N]'
16637      Define a subsym to be a local variable within a macro.  See *Note
16638      TIC54X-Macros::.
16640 `.version VERSION'
16641      Set which processor to build instructions for.  Though the
16642      following values are accepted, the op is ignored.
16643     `541'
16644     `542'
16645     `543'
16646     `545'
16647     `545LP'
16648     `546LP'
16649     `548'
16650     `549'
16652 \x1f
16653 File: as.info,  Node: TIC54X-Macros,  Next: TIC54X-MMRegs,  Prev: TIC54X-Directives,  Up: TIC54X-Dependent
16655 9.35.10 Macros
16656 --------------
16658 Macros do not require explicit dereferencing of arguments (i.e., \ARG).
16660    During macro expansion, the macro parameters are converted to
16661 subsyms.  If the number of arguments passed the macro invocation
16662 exceeds the number of parameters defined, the last parameter is
16663 assigned the string equivalent of all remaining arguments.  If fewer
16664 arguments are given than parameters, the missing parameters are
16665 assigned empty strings.  To include a comma in an argument, you must
16666 enclose the argument in quotes.
16668    The following built-in subsym functions allow examination of the
16669 string value of subsyms (or ordinary strings).  The arguments are
16670 strings unless otherwise indicated (subsyms passed as args will be
16671 replaced by the strings they represent).
16672 ``$symlen(STR)''
16673      Returns the length of STR.
16675 ``$symcmp(STR1,STR2)''
16676      Returns 0 if STR1 == STR2, non-zero otherwise.
16678 ``$firstch(STR,CH)''
16679      Returns index of the first occurrence of character constant CH in
16680      STR.
16682 ``$lastch(STR,CH)''
16683      Returns index of the last occurrence of character constant CH in
16684      STR.
16686 ``$isdefed(SYMBOL)''
16687      Returns zero if the symbol SYMBOL is not in the symbol table,
16688      non-zero otherwise.
16690 ``$ismember(SYMBOL,LIST)''
16691      Assign the first member of comma-separated string LIST to SYMBOL;
16692      LIST is reassigned the remainder of the list.  Returns zero if
16693      LIST is a null string.  Both arguments must be subsyms.
16695 ``$iscons(EXPR)''
16696      Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal,
16697      4 if a character, 5 if decimal, and zero if not an integer.
16699 ``$isname(NAME)''
16700      Returns 1 if NAME is a valid symbol name, zero otherwise.
16702 ``$isreg(REG)''
16703      Returns 1 if REG is a valid predefined register name (AR0-AR7
16704      only).
16706 ``$structsz(STAG)''
16707      Returns the size of the structure or union represented by STAG.
16709 ``$structacc(STAG)''
16710      Returns the reference point of the structure or union represented
16711      by STAG.   Always returns zero.
16714 \x1f
16715 File: as.info,  Node: TIC54X-MMRegs,  Prev: TIC54X-Macros,  Up: TIC54X-Dependent
16717 9.35.11 Memory-mapped Registers
16718 -------------------------------
16720 The following symbols are recognized as memory-mapped registers:
16723 \x1f
16724 File: as.info,  Node: Z80-Dependent,  Next: Z8000-Dependent,  Prev: Xtensa-Dependent,  Up: Machine Dependencies
16726 9.36 Z80 Dependent Features
16727 ===========================
16729 * Menu:
16731 * Z80 Options::              Options
16732 * Z80 Syntax::               Syntax
16733 * Z80 Floating Point::       Floating Point
16734 * Z80 Directives::           Z80 Machine Directives
16735 * Z80 Opcodes::              Opcodes
16737 \x1f
16738 File: as.info,  Node: Z80 Options,  Next: Z80 Syntax,  Up: Z80-Dependent
16740 9.36.1 Options
16741 --------------
16743 The Zilog Z80 and Ascii R800 version of `as' have a few machine
16744 dependent options.
16745 `-z80'
16746      Produce code for the Z80 processor. There are additional options to
16747      request warnings and error messages for undocumented instructions.
16749 `-ignore-undocumented-instructions'
16750 `-Wnud'
16751      Silently assemble undocumented Z80-instructions that have been
16752      adopted as documented R800-instructions.
16754 `-ignore-unportable-instructions'
16755 `-Wnup'
16756      Silently assemble all undocumented Z80-instructions.
16758 `-warn-undocumented-instructions'
16759 `-Wud'
16760      Issue warnings for undocumented Z80-instructions that work on
16761      R800, do not assemble other undocumented instructions without
16762      warning.
16764 `-warn-unportable-instructions'
16765 `-Wup'
16766      Issue warnings for other undocumented Z80-instructions, do not
16767      treat any undocumented instructions as errors.
16769 `-forbid-undocumented-instructions'
16770 `-Fud'
16771      Treat all undocumented z80-instructions as errors.
16773 `-forbid-unportable-instructions'
16774 `-Fup'
16775      Treat undocumented z80-instructions that do not work on R800 as
16776      errors.
16778 `-r800'
16779      Produce code for the R800 processor. The assembler does not support
16780      undocumented instructions for the R800.  In line with common
16781      practice, `as' uses Z80 instruction names for the R800 processor,
16782      as far as they exist.
16784 \x1f
16785 File: as.info,  Node: Z80 Syntax,  Next: Z80 Floating Point,  Prev: Z80 Options,  Up: Z80-Dependent
16787 9.36.2 Syntax
16788 -------------
16790 The assembler syntax closely follows the 'Z80 family CPU User Manual' by
16791 Zilog.  In expressions a single `=' may be used as "is equal to"
16792 comparison operator.
16794    Suffices can be used to indicate the radix of integer constants; `H'
16795 or `h' for hexadecimal, `D' or `d' for decimal, `Q', `O', `q' or `o'
16796 for octal, and `B' for binary.
16798    The suffix `b' denotes a backreference to local label.
16800 * Menu:
16802 * Z80-Chars::                Special Characters
16803 * Z80-Regs::                 Register Names
16804 * Z80-Case::                 Case Sensitivity
16806 \x1f
16807 File: as.info,  Node: Z80-Chars,  Next: Z80-Regs,  Up: Z80 Syntax
16809 9.36.2.1 Special Characters
16810 ...........................
16812 The semicolon `;' is the line comment character;
16814    The dollar sign `$' can be used as a prefix for hexadecimal numbers
16815 and as a symbol denoting the current location counter.
16817    A backslash `\' is an ordinary character for the Z80 assembler.
16819    The single quote `'' must be followed by a closing quote. If there
16820 is one character in between, it is a character constant, otherwise it is
16821 a string constant.
16823 \x1f
16824 File: as.info,  Node: Z80-Regs,  Next: Z80-Case,  Prev: Z80-Chars,  Up: Z80 Syntax
16826 9.36.2.2 Register Names
16827 .......................
16829 The registers are referred to with the letters assigned to them by
16830 Zilog. In addition `as' recognizes `ixl' and `ixh' as the least and
16831 most significant octet in `ix', and similarly `iyl' and  `iyh' as parts
16832 of `iy'.
16834 \x1f
16835 File: as.info,  Node: Z80-Case,  Prev: Z80-Regs,  Up: Z80 Syntax
16837 9.36.2.3 Case Sensitivity
16838 .........................
16840 Upper and lower case are equivalent in register names, opcodes,
16841 condition codes  and assembler directives.  The case of letters is
16842 significant in labels and symbol names. The case is also important to
16843 distinguish the suffix `b' for a backward reference to a local label
16844 from the suffix `B' for a number in binary notation.
16846 \x1f
16847 File: as.info,  Node: Z80 Floating Point,  Next: Z80 Directives,  Prev: Z80 Syntax,  Up: Z80-Dependent
16849 9.36.3 Floating Point
16850 ---------------------
16852 Floating-point numbers are not supported.
16854 \x1f
16855 File: as.info,  Node: Z80 Directives,  Next: Z80 Opcodes,  Prev: Z80 Floating Point,  Up: Z80-Dependent
16857 9.36.4 Z80 Assembler Directives
16858 -------------------------------
16860 `as' for the Z80 supports some additional directives for compatibility
16861 with other assemblers.
16863    These are the additional directives in `as' for the Z80:
16865 `db EXPRESSION|STRING[,EXPRESSION|STRING...]'
16866 `defb EXPRESSION|STRING[,EXPRESSION|STRING...]'
16867      For each STRING the characters are copied to the object file, for
16868      each other EXPRESSION the value is stored in one byte.  A warning
16869      is issued in case of an overflow.
16871 `dw EXPRESSION[,EXPRESSION...]'
16872 `defw EXPRESSION[,EXPRESSION...]'
16873      For each EXPRESSION the value is stored in two bytes, ignoring
16874      overflow.
16876 `d24 EXPRESSION[,EXPRESSION...]'
16877 `def24 EXPRESSION[,EXPRESSION...]'
16878      For each EXPRESSION the value is stored in three bytes, ignoring
16879      overflow.
16881 `d32 EXPRESSION[,EXPRESSION...]'
16882 `def32 EXPRESSION[,EXPRESSION...]'
16883      For each EXPRESSION the value is stored in four bytes, ignoring
16884      overflow.
16886 `ds COUNT[, VALUE]'
16887 `defs COUNT[, VALUE]'
16888      Fill COUNT bytes in the object file with VALUE, if VALUE is
16889      omitted it defaults to zero.
16891 `SYMBOL equ EXPRESSION'
16892 `SYMBOL defl EXPRESSION'
16893      These directives set the value of SYMBOL to EXPRESSION. If `equ'
16894      is used, it is an error if SYMBOL is already defined.  Symbols
16895      defined with `equ' are not protected from redefinition.
16897 `set'
16898      This is a normal instruction on Z80, and not an assembler
16899      directive.
16901 `psect NAME'
16902      A synonym for *Note Section::, no second argument should be given.
16905 \x1f
16906 File: as.info,  Node: Z80 Opcodes,  Prev: Z80 Directives,  Up: Z80-Dependent
16908 9.36.5 Opcodes
16909 --------------
16911 In line with common practice, Z80 mnemonics are used for both the Z80
16912 and the R800.
16914    In many instructions it is possible to use one of the half index
16915 registers (`ixl',`ixh',`iyl',`iyh') in stead of an 8-bit general
16916 purpose register. This yields instructions that are documented on the
16917 R800 and undocumented on the Z80.  Similarly `in f,(c)' is documented
16918 on the R800 and undocumented on the Z80.
16920    The assembler also supports the following undocumented
16921 Z80-instructions, that have not been adopted in the R800 instruction
16922 set:
16923 `out (c),0'
16924      Sends zero to the port pointed to by register c.
16926 `sli M'
16927      Equivalent to `M = (M<<1)+1', the operand M can be any operand
16928      that is valid for `sla'. One can use `sll' as a synonym for `sli'.
16930 `OP (ix+D), R'
16931      This is equivalent to
16933           ld R, (ix+D)
16934           OPC R
16935           ld (ix+D), R
16937      The operation `OPC' may be any of `res B,', `set B,', `rl', `rlc',
16938      `rr', `rrc', `sla', `sli', `sra' and `srl', and the register `R'
16939      may be any of `a', `b', `c', `d', `e', `h' and `l'.
16941 `OPC (iy+D), R'
16942      As above, but with `iy' instead of `ix'.
16944    The web site at `http://www.z80.info' is a good starting place to
16945 find more information on programming the Z80.
16947 \x1f
16948 File: as.info,  Node: Z8000-Dependent,  Next: Vax-Dependent,  Prev: Z80-Dependent,  Up: Machine Dependencies
16950 9.37 Z8000 Dependent Features
16951 =============================
16953    The Z8000 as supports both members of the Z8000 family: the
16954 unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with
16955 24 bit addresses.
16957    When the assembler is in unsegmented mode (specified with the
16958 `unsegm' directive), an address takes up one word (16 bit) sized
16959 register.  When the assembler is in segmented mode (specified with the
16960 `segm' directive), a 24-bit address takes up a long (32 bit) register.
16961 *Note Assembler Directives for the Z8000: Z8000 Directives, for a list
16962 of other Z8000 specific assembler directives.
16964 * Menu:
16966 * Z8000 Options::               Command-line options for the Z8000
16967 * Z8000 Syntax::                Assembler syntax for the Z8000
16968 * Z8000 Directives::            Special directives for the Z8000
16969 * Z8000 Opcodes::               Opcodes
16971 \x1f
16972 File: as.info,  Node: Z8000 Options,  Next: Z8000 Syntax,  Up: Z8000-Dependent
16974 9.37.1 Options
16975 --------------
16977 `-z8001'
16978      Generate segmented code by default.
16980 `-z8002'
16981      Generate unsegmented code by default.
16983 \x1f
16984 File: as.info,  Node: Z8000 Syntax,  Next: Z8000 Directives,  Prev: Z8000 Options,  Up: Z8000-Dependent
16986 9.37.2 Syntax
16987 -------------
16989 * Menu:
16991 * Z8000-Chars::                Special Characters
16992 * Z8000-Regs::                 Register Names
16993 * Z8000-Addressing::           Addressing Modes
16995 \x1f
16996 File: as.info,  Node: Z8000-Chars,  Next: Z8000-Regs,  Up: Z8000 Syntax
16998 9.37.2.1 Special Characters
16999 ...........................
17001 `!' is the line comment character.
17003    You can use `;' instead of a newline to separate statements.
17005 \x1f
17006 File: as.info,  Node: Z8000-Regs,  Next: Z8000-Addressing,  Prev: Z8000-Chars,  Up: Z8000 Syntax
17008 9.37.2.2 Register Names
17009 .......................
17011 The Z8000 has sixteen 16 bit registers, numbered 0 to 15.  You can refer
17012 to different sized groups of registers by register number, with the
17013 prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq' for
17014 64 bit registers.  You can also refer to the contents of the first
17015 eight (of the sixteen 16 bit registers) by bytes.  They are named `rlN'
17016 and `rhN'.
17018 _byte registers_
17019      rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3
17020      rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7
17022 _word registers_
17023      r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
17025 _long word registers_
17026      rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
17028 _quad word registers_
17029      rq0 rq4 rq8 rq12
17031 \x1f
17032 File: as.info,  Node: Z8000-Addressing,  Prev: Z8000-Regs,  Up: Z8000 Syntax
17034 9.37.2.3 Addressing Modes
17035 .........................
17037 as understands the following addressing modes for the Z8000:
17039 `rlN'
17040 `rhN'
17041 `rN'
17042 `rrN'
17043 `rqN'
17044      Register direct:  8bit, 16bit, 32bit, and 64bit registers.
17046 `@rN'
17047 `@rrN'
17048      Indirect register:  @rrN in segmented mode, @rN in unsegmented
17049      mode.
17051 `ADDR'
17052      Direct: the 16 bit or 24 bit address (depending on whether the
17053      assembler is in segmented or unsegmented mode) of the operand is
17054      in the instruction.
17056 `address(rN)'
17057      Indexed: the 16 or 24 bit address is added to the 16 bit register
17058      to produce the final address in memory of the operand.
17060 `rN(#IMM)'
17061 `rrN(#IMM)'
17062      Base Address: the 16 or 24 bit register is added to the 16 bit sign
17063      extended immediate displacement to produce the final address in
17064      memory of the operand.
17066 `rN(rM)'
17067 `rrN(rM)'
17068      Base Index: the 16 or 24 bit register rN or rrN is added to the
17069      sign extended 16 bit index register rM to produce the final
17070      address in memory of the operand.
17072 `#XX'
17073      Immediate data XX.
17075 \x1f
17076 File: as.info,  Node: Z8000 Directives,  Next: Z8000 Opcodes,  Prev: Z8000 Syntax,  Up: Z8000-Dependent
17078 9.37.3 Assembler Directives for the Z8000
17079 -----------------------------------------
17081 The Z8000 port of as includes additional assembler directives, for
17082 compatibility with other Z8000 assemblers.  These do not begin with `.'
17083 (unlike the ordinary as directives).
17085 `segm'
17086 `.z8001'
17087      Generate code for the segmented Z8001.
17089 `unsegm'
17090 `.z8002'
17091      Generate code for the unsegmented Z8002.
17093 `name'
17094      Synonym for `.file'
17096 `global'
17097      Synonym for `.global'
17099 `wval'
17100      Synonym for `.word'
17102 `lval'
17103      Synonym for `.long'
17105 `bval'
17106      Synonym for `.byte'
17108 `sval'
17109      Assemble a string.  `sval' expects one string literal, delimited by
17110      single quotes.  It assembles each byte of the string into
17111      consecutive addresses.  You can use the escape sequence `%XX'
17112      (where XX represents a two-digit hexadecimal number) to represent
17113      the character whose ASCII value is XX.  Use this feature to
17114      describe single quote and other characters that may not appear in
17115      string literals as themselves.  For example, the C statement
17116      `char *a = "he said \"it's 50% off\"";' is represented in Z8000
17117      assembly language (shown with the assembler output in hex at the
17118      left) as
17120           68652073    sval    'he said %22it%27s 50%25 off%22%00'
17121           61696420
17122           22697427
17123           73203530
17124           25206F66
17125           662200
17127 `rsect'
17128      synonym for `.section'
17130 `block'
17131      synonym for `.space'
17133 `even'
17134      special case of `.align'; aligns output to even byte boundary.
17136 \x1f
17137 File: as.info,  Node: Z8000 Opcodes,  Prev: Z8000 Directives,  Up: Z8000-Dependent
17139 9.37.4 Opcodes
17140 --------------
17142 For detailed information on the Z8000 machine instruction set, see
17143 `Z8000 Technical Manual'.
17145    The following table summarizes the opcodes and their arguments:
17147                  rs   16 bit source register
17148                  rd   16 bit destination register
17149                  rbs   8 bit source register
17150                  rbd   8 bit destination register
17151                  rrs   32 bit source register
17152                  rrd   32 bit destination register
17153                  rqs   64 bit source register
17154                  rqd   64 bit destination register
17155                  addr 16/24 bit address
17156                  imm  immediate data
17158      adc rd,rs               clrb addr               cpsir @rd,@rs,rr,cc
17159      adcb rbd,rbs            clrb addr(rd)           cpsirb @rd,@rs,rr,cc
17160      add rd,@rs              clrb rbd                dab rbd
17161      add rd,addr             com @rd                 dbjnz rbd,disp7
17162      add rd,addr(rs)         com addr                dec @rd,imm4m1
17163      add rd,imm16            com addr(rd)            dec addr(rd),imm4m1
17164      add rd,rs               com rd                  dec addr,imm4m1
17165      addb rbd,@rs            comb @rd                dec rd,imm4m1
17166      addb rbd,addr           comb addr               decb @rd,imm4m1
17167      addb rbd,addr(rs)       comb addr(rd)           decb addr(rd),imm4m1
17168      addb rbd,imm8           comb rbd                decb addr,imm4m1
17169      addb rbd,rbs            comflg flags            decb rbd,imm4m1
17170      addl rrd,@rs            cp @rd,imm16            di i2
17171      addl rrd,addr           cp addr(rd),imm16       div rrd,@rs
17172      addl rrd,addr(rs)       cp addr,imm16           div rrd,addr
17173      addl rrd,imm32          cp rd,@rs               div rrd,addr(rs)
17174      addl rrd,rrs            cp rd,addr              div rrd,imm16
17175      and rd,@rs              cp rd,addr(rs)          div rrd,rs
17176      and rd,addr             cp rd,imm16             divl rqd,@rs
17177      and rd,addr(rs)         cp rd,rs                divl rqd,addr
17178      and rd,imm16            cpb @rd,imm8            divl rqd,addr(rs)
17179      and rd,rs               cpb addr(rd),imm8       divl rqd,imm32
17180      andb rbd,@rs            cpb addr,imm8           divl rqd,rrs
17181      andb rbd,addr           cpb rbd,@rs             djnz rd,disp7
17182      andb rbd,addr(rs)       cpb rbd,addr            ei i2
17183      andb rbd,imm8           cpb rbd,addr(rs)        ex rd,@rs
17184      andb rbd,rbs            cpb rbd,imm8            ex rd,addr
17185      bit @rd,imm4            cpb rbd,rbs             ex rd,addr(rs)
17186      bit addr(rd),imm4       cpd rd,@rs,rr,cc        ex rd,rs
17187      bit addr,imm4           cpdb rbd,@rs,rr,cc      exb rbd,@rs
17188      bit rd,imm4             cpdr rd,@rs,rr,cc       exb rbd,addr
17189      bit rd,rs               cpdrb rbd,@rs,rr,cc     exb rbd,addr(rs)
17190      bitb @rd,imm4           cpi rd,@rs,rr,cc        exb rbd,rbs
17191      bitb addr(rd),imm4      cpib rbd,@rs,rr,cc      ext0e imm8
17192      bitb addr,imm4          cpir rd,@rs,rr,cc       ext0f imm8
17193      bitb rbd,imm4           cpirb rbd,@rs,rr,cc     ext8e imm8
17194      bitb rbd,rs             cpl rrd,@rs             ext8f imm8
17195      bpt                     cpl rrd,addr            exts rrd
17196      call @rd                cpl rrd,addr(rs)        extsb rd
17197      call addr               cpl rrd,imm32           extsl rqd
17198      call addr(rd)           cpl rrd,rrs             halt
17199      calr disp12             cpsd @rd,@rs,rr,cc      in rd,@rs
17200      clr @rd                 cpsdb @rd,@rs,rr,cc     in rd,imm16
17201      clr addr                cpsdr @rd,@rs,rr,cc     inb rbd,@rs
17202      clr addr(rd)            cpsdrb @rd,@rs,rr,cc    inb rbd,imm16
17203      clr rd                  cpsi @rd,@rs,rr,cc      inc @rd,imm4m1
17204      clrb @rd                cpsib @rd,@rs,rr,cc     inc addr(rd),imm4m1
17205      inc addr,imm4m1         ldb rbd,rs(rx)          mult rrd,addr(rs)
17206      inc rd,imm4m1           ldb rd(imm16),rbs       mult rrd,imm16
17207      incb @rd,imm4m1         ldb rd(rx),rbs          mult rrd,rs
17208      incb addr(rd),imm4m1    ldctl ctrl,rs           multl rqd,@rs
17209      incb addr,imm4m1        ldctl rd,ctrl           multl rqd,addr
17210      incb rbd,imm4m1         ldd @rs,@rd,rr          multl rqd,addr(rs)
17211      ind @rd,@rs,ra          lddb @rs,@rd,rr         multl rqd,imm32
17212      indb @rd,@rs,rba        lddr @rs,@rd,rr         multl rqd,rrs
17213      inib @rd,@rs,ra         lddrb @rs,@rd,rr        neg @rd
17214      inibr @rd,@rs,ra        ldi @rd,@rs,rr          neg addr
17215      iret                    ldib @rd,@rs,rr         neg addr(rd)
17216      jp cc,@rd               ldir @rd,@rs,rr         neg rd
17217      jp cc,addr              ldirb @rd,@rs,rr        negb @rd
17218      jp cc,addr(rd)          ldk rd,imm4             negb addr
17219      jr cc,disp8             ldl @rd,rrs             negb addr(rd)
17220      ld @rd,imm16            ldl addr(rd),rrs        negb rbd
17221      ld @rd,rs               ldl addr,rrs            nop
17222      ld addr(rd),imm16       ldl rd(imm16),rrs       or rd,@rs
17223      ld addr(rd),rs          ldl rd(rx),rrs          or rd,addr
17224      ld addr,imm16           ldl rrd,@rs             or rd,addr(rs)
17225      ld addr,rs              ldl rrd,addr            or rd,imm16
17226      ld rd(imm16),rs         ldl rrd,addr(rs)        or rd,rs
17227      ld rd(rx),rs            ldl rrd,imm32           orb rbd,@rs
17228      ld rd,@rs               ldl rrd,rrs             orb rbd,addr
17229      ld rd,addr              ldl rrd,rs(imm16)       orb rbd,addr(rs)
17230      ld rd,addr(rs)          ldl rrd,rs(rx)          orb rbd,imm8
17231      ld rd,imm16             ldm @rd,rs,n            orb rbd,rbs
17232      ld rd,rs                ldm addr(rd),rs,n       out @rd,rs
17233      ld rd,rs(imm16)         ldm addr,rs,n           out imm16,rs
17234      ld rd,rs(rx)            ldm rd,@rs,n            outb @rd,rbs
17235      lda rd,addr             ldm rd,addr(rs),n       outb imm16,rbs
17236      lda rd,addr(rs)         ldm rd,addr,n           outd @rd,@rs,ra
17237      lda rd,rs(imm16)        ldps @rs                outdb @rd,@rs,rba
17238      lda rd,rs(rx)           ldps addr               outib @rd,@rs,ra
17239      ldar rd,disp16          ldps addr(rs)           outibr @rd,@rs,ra
17240      ldb @rd,imm8            ldr disp16,rs           pop @rd,@rs
17241      ldb @rd,rbs             ldr rd,disp16           pop addr(rd),@rs
17242      ldb addr(rd),imm8       ldrb disp16,rbs         pop addr,@rs
17243      ldb addr(rd),rbs        ldrb rbd,disp16         pop rd,@rs
17244      ldb addr,imm8           ldrl disp16,rrs         popl @rd,@rs
17245      ldb addr,rbs            ldrl rrd,disp16         popl addr(rd),@rs
17246      ldb rbd,@rs             mbit                    popl addr,@rs
17247      ldb rbd,addr            mreq rd                 popl rrd,@rs
17248      ldb rbd,addr(rs)        mres                    push @rd,@rs
17249      ldb rbd,imm8            mset                    push @rd,addr
17250      ldb rbd,rbs             mult rrd,@rs            push @rd,addr(rs)
17251      ldb rbd,rs(imm16)       mult rrd,addr           push @rd,imm16
17252      push @rd,rs             set addr,imm4           subl rrd,imm32
17253      pushl @rd,@rs           set rd,imm4             subl rrd,rrs
17254      pushl @rd,addr          set rd,rs               tcc cc,rd
17255      pushl @rd,addr(rs)      setb @rd,imm4           tccb cc,rbd
17256      pushl @rd,rrs           setb addr(rd),imm4      test @rd
17257      res @rd,imm4            setb addr,imm4          test addr
17258      res addr(rd),imm4       setb rbd,imm4           test addr(rd)
17259      res addr,imm4           setb rbd,rs             test rd
17260      res rd,imm4             setflg imm4             testb @rd
17261      res rd,rs               sinb rbd,imm16          testb addr
17262      resb @rd,imm4           sinb rd,imm16           testb addr(rd)
17263      resb addr(rd),imm4      sind @rd,@rs,ra         testb rbd
17264      resb addr,imm4          sindb @rd,@rs,rba       testl @rd
17265      resb rbd,imm4           sinib @rd,@rs,ra        testl addr
17266      resb rbd,rs             sinibr @rd,@rs,ra       testl addr(rd)
17267      resflg imm4             sla rd,imm8             testl rrd
17268      ret cc                  slab rbd,imm8           trdb @rd,@rs,rba
17269      rl rd,imm1or2           slal rrd,imm8           trdrb @rd,@rs,rba
17270      rlb rbd,imm1or2         sll rd,imm8             trib @rd,@rs,rbr
17271      rlc rd,imm1or2          sllb rbd,imm8           trirb @rd,@rs,rbr
17272      rlcb rbd,imm1or2        slll rrd,imm8           trtdrb @ra,@rb,rbr
17273      rldb rbb,rba            sout imm16,rs           trtib @ra,@rb,rr
17274      rr rd,imm1or2           soutb imm16,rbs         trtirb @ra,@rb,rbr
17275      rrb rbd,imm1or2         soutd @rd,@rs,ra        trtrb @ra,@rb,rbr
17276      rrc rd,imm1or2          soutdb @rd,@rs,rba      tset @rd
17277      rrcb rbd,imm1or2        soutib @rd,@rs,ra       tset addr
17278      rrdb rbb,rba            soutibr @rd,@rs,ra      tset addr(rd)
17279      rsvd36                  sra rd,imm8             tset rd
17280      rsvd38                  srab rbd,imm8           tsetb @rd
17281      rsvd78                  sral rrd,imm8           tsetb addr
17282      rsvd7e                  srl rd,imm8             tsetb addr(rd)
17283      rsvd9d                  srlb rbd,imm8           tsetb rbd
17284      rsvd9f                  srll rrd,imm8           xor rd,@rs
17285      rsvdb9                  sub rd,@rs              xor rd,addr
17286      rsvdbf                  sub rd,addr             xor rd,addr(rs)
17287      sbc rd,rs               sub rd,addr(rs)         xor rd,imm16
17288      sbcb rbd,rbs            sub rd,imm16            xor rd,rs
17289      sc imm8                 sub rd,rs               xorb rbd,@rs
17290      sda rd,rs               subb rbd,@rs            xorb rbd,addr
17291      sdab rbd,rs             subb rbd,addr           xorb rbd,addr(rs)
17292      sdal rrd,rs             subb rbd,addr(rs)       xorb rbd,imm8
17293      sdl rd,rs               subb rbd,imm8           xorb rbd,rbs
17294      sdlb rbd,rs             subb rbd,rbs            xorb rbd,rbs
17295      sdll rrd,rs             subl rrd,@rs
17296      set @rd,imm4            subl rrd,addr
17297      set addr(rd),imm4       subl rrd,addr(rs)
17299 \x1f
17300 File: as.info,  Node: Vax-Dependent,  Prev: Z8000-Dependent,  Up: Machine Dependencies
17302 9.38 VAX Dependent Features
17303 ===========================
17305 * Menu:
17307 * VAX-Opts::                    VAX Command-Line Options
17308 * VAX-float::                   VAX Floating Point
17309 * VAX-directives::              Vax Machine Directives
17310 * VAX-opcodes::                 VAX Opcodes
17311 * VAX-branch::                  VAX Branch Improvement
17312 * VAX-operands::                VAX Operands
17313 * VAX-no::                      Not Supported on VAX
17315 \x1f
17316 File: as.info,  Node: VAX-Opts,  Next: VAX-float,  Up: Vax-Dependent
17318 9.38.1 VAX Command-Line Options
17319 -------------------------------
17321 The Vax version of `as' accepts any of the following options, gives a
17322 warning message that the option was ignored and proceeds.  These
17323 options are for compatibility with scripts designed for other people's
17324 assemblers.
17326 ``-D' (Debug)'
17327 ``-S' (Symbol Table)'
17328 ``-T' (Token Trace)'
17329      These are obsolete options used to debug old assemblers.
17331 ``-d' (Displacement size for JUMPs)'
17332      This option expects a number following the `-d'.  Like options
17333      that expect filenames, the number may immediately follow the `-d'
17334      (old standard) or constitute the whole of the command line
17335      argument that follows `-d' (GNU standard).
17337 ``-V' (Virtualize Interpass Temporary File)'
17338      Some other assemblers use a temporary file.  This option commanded
17339      them to keep the information in active memory rather than in a
17340      disk file.  `as' always does this, so this option is redundant.
17342 ``-J' (JUMPify Longer Branches)'
17343      Many 32-bit computers permit a variety of branch instructions to
17344      do the same job.  Some of these instructions are short (and fast)
17345      but have a limited range; others are long (and slow) but can
17346      branch anywhere in virtual memory.  Often there are 3 flavors of
17347      branch: short, medium and long.  Some other assemblers would emit
17348      short and medium branches, unless told by this option to emit
17349      short and long branches.
17351 ``-t' (Temporary File Directory)'
17352      Some other assemblers may use a temporary file, and this option
17353      takes a filename being the directory to site the temporary file.
17354      Since `as' does not use a temporary disk file, this option makes
17355      no difference.  `-t' needs exactly one filename.
17357    The Vax version of the assembler accepts additional options when
17358 compiled for VMS:
17360 `-h N'
17361      External symbol or section (used for global variables) names are
17362      not case sensitive on VAX/VMS and always mapped to upper case.
17363      This is contrary to the C language definition which explicitly
17364      distinguishes upper and lower case.  To implement a standard
17365      conforming C compiler, names must be changed (mapped) to preserve
17366      the case information.  The default mapping is to convert all lower
17367      case characters to uppercase and adding an underscore followed by
17368      a 6 digit hex value, representing a 24 digit binary value.  The
17369      one digits in the binary value represent which characters are
17370      uppercase in the original symbol name.
17372      The `-h N' option determines how we map names.  This takes several
17373      values.  No `-h' switch at all allows case hacking as described
17374      above.  A value of zero (`-h0') implies names should be upper
17375      case, and inhibits the case hack.  A value of 2 (`-h2') implies
17376      names should be all lower case, with no case hack.  A value of 3
17377      (`-h3') implies that case should be preserved.  The value 1 is
17378      unused.  The `-H' option directs `as' to display every mapped
17379      symbol during assembly.
17381      Symbols whose names include a dollar sign `$' are exceptions to the
17382      general name mapping.  These symbols are normally only used to
17383      reference VMS library names.  Such symbols are always mapped to
17384      upper case.
17386 `-+'
17387      The `-+' option causes `as' to truncate any symbol name larger
17388      than 31 characters.  The `-+' option also prevents some code
17389      following the `_main' symbol normally added to make the object
17390      file compatible with Vax-11 "C".
17392 `-1'
17393      This option is ignored for backward compatibility with `as'
17394      version 1.x.
17396 `-H'
17397      The `-H' option causes `as' to print every symbol which was
17398      changed by case mapping.
17400 \x1f
17401 File: as.info,  Node: VAX-float,  Next: VAX-directives,  Prev: VAX-Opts,  Up: Vax-Dependent
17403 9.38.2 VAX Floating Point
17404 -------------------------
17406 Conversion of flonums to floating point is correct, and compatible with
17407 previous assemblers.  Rounding is towards zero if the remainder is
17408 exactly half the least significant bit.
17410    `D', `F', `G' and `H' floating point formats are understood.
17412    Immediate floating literals (_e.g._ `S`$6.9') are rendered
17413 correctly.  Again, rounding is towards zero in the boundary case.
17415    The `.float' directive produces `f' format numbers.  The `.double'
17416 directive produces `d' format numbers.
17418 \x1f
17419 File: as.info,  Node: VAX-directives,  Next: VAX-opcodes,  Prev: VAX-float,  Up: Vax-Dependent
17421 9.38.3 Vax Machine Directives
17422 -----------------------------
17424 The Vax version of the assembler supports four directives for
17425 generating Vax floating point constants.  They are described in the
17426 table below.
17428 `.dfloat'
17429      This expects zero or more flonums, separated by commas, and
17430      assembles Vax `d' format 64-bit floating point constants.
17432 `.ffloat'
17433      This expects zero or more flonums, separated by commas, and
17434      assembles Vax `f' format 32-bit floating point constants.
17436 `.gfloat'
17437      This expects zero or more flonums, separated by commas, and
17438      assembles Vax `g' format 64-bit floating point constants.
17440 `.hfloat'
17441      This expects zero or more flonums, separated by commas, and
17442      assembles Vax `h' format 128-bit floating point constants.
17445 \x1f
17446 File: as.info,  Node: VAX-opcodes,  Next: VAX-branch,  Prev: VAX-directives,  Up: Vax-Dependent
17448 9.38.4 VAX Opcodes
17449 ------------------
17451 All DEC mnemonics are supported.  Beware that `case...' instructions
17452 have exactly 3 operands.  The dispatch table that follows the `case...'
17453 instruction should be made with `.word' statements.  This is compatible
17454 with all unix assemblers we know of.
17456 \x1f
17457 File: as.info,  Node: VAX-branch,  Next: VAX-operands,  Prev: VAX-opcodes,  Up: Vax-Dependent
17459 9.38.5 VAX Branch Improvement
17460 -----------------------------
17462 Certain pseudo opcodes are permitted.  They are for branch
17463 instructions.  They expand to the shortest branch instruction that
17464 reaches the target.  Generally these mnemonics are made by substituting
17465 `j' for `b' at the start of a DEC mnemonic.  This feature is included
17466 both for compatibility and to help compilers.  If you do not need this
17467 feature, avoid these opcodes.  Here are the mnemonics, and the code
17468 they can expand into.
17470 `jbsb'
17471      `Jsb' is already an instruction mnemonic, so we chose `jbsb'.
17472     (byte displacement)
17473           `bsbb ...'
17475     (word displacement)
17476           `bsbw ...'
17478     (long displacement)
17479           `jsb ...'
17481 `jbr'
17482 `jr'
17483      Unconditional branch.
17484     (byte displacement)
17485           `brb ...'
17487     (word displacement)
17488           `brw ...'
17490     (long displacement)
17491           `jmp ...'
17493 `jCOND'
17494      COND may be any one of the conditional branches `neq', `nequ',
17495      `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs',
17496      `gequ', `cc', `lssu', `cs'.  COND may also be one of the bit tests
17497      `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs',
17498      `lbc'.  NOTCOND is the opposite condition to COND.
17499     (byte displacement)
17500           `bCOND ...'
17502     (word displacement)
17503           `bNOTCOND foo ; brw ... ; foo:'
17505     (long displacement)
17506           `bNOTCOND foo ; jmp ... ; foo:'
17508 `jacbX'
17509      X may be one of `b d f g h l w'.
17510     (word displacement)
17511           `OPCODE ...'
17513     (long displacement)
17514                OPCODE ..., foo ;
17515                brb bar ;
17516                foo: jmp ... ;
17517                bar:
17519 `jaobYYY'
17520      YYY may be one of `lss leq'.
17522 `jsobZZZ'
17523      ZZZ may be one of `geq gtr'.
17524     (byte displacement)
17525           `OPCODE ...'
17527     (word displacement)
17528                OPCODE ..., foo ;
17529                brb bar ;
17530                foo: brw DESTINATION ;
17531                bar:
17533     (long displacement)
17534                OPCODE ..., foo ;
17535                brb bar ;
17536                foo: jmp DESTINATION ;
17537                bar:
17539 `aobleq'
17540 `aoblss'
17541 `sobgeq'
17542 `sobgtr'
17544     (byte displacement)
17545           `OPCODE ...'
17547     (word displacement)
17548                OPCODE ..., foo ;
17549                brb bar ;
17550                foo: brw DESTINATION ;
17551                bar:
17553     (long displacement)
17554                OPCODE ..., foo ;
17555                brb bar ;
17556                foo: jmp DESTINATION ;
17557                bar:
17559 \x1f
17560 File: as.info,  Node: VAX-operands,  Next: VAX-no,  Prev: VAX-branch,  Up: Vax-Dependent
17562 9.38.6 VAX Operands
17563 -------------------
17565 The immediate character is `$' for Unix compatibility, not `#' as DEC
17566 writes it.
17568    The indirect character is `*' for Unix compatibility, not `@' as DEC
17569 writes it.
17571    The displacement sizing character is ``' (an accent grave) for Unix
17572 compatibility, not `^' as DEC writes it.  The letter preceding ``' may
17573 have either case.  `G' is not understood, but all other letters (`b i l
17574 s w') are understood.
17576    Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'.  Upper
17577 and lower case letters are equivalent.
17579    For instance
17580      tstb *w`$4(r5)
17582    Any expression is permitted in an operand.  Operands are comma
17583 separated.
17585 \x1f
17586 File: as.info,  Node: VAX-no,  Prev: VAX-operands,  Up: Vax-Dependent
17588 9.38.7 Not Supported on VAX
17589 ---------------------------
17591 Vax bit fields can not be assembled with `as'.  Someone can add the
17592 required code if they really need it.
17594 \x1f
17595 File: as.info,  Node: V850-Dependent,  Next: Xtensa-Dependent,  Prev: TIC54X-Dependent,  Up: Machine Dependencies
17597 9.39 v850 Dependent Features
17598 ============================
17600 * Menu:
17602 * V850 Options::              Options
17603 * V850 Syntax::               Syntax
17604 * V850 Floating Point::       Floating Point
17605 * V850 Directives::           V850 Machine Directives
17606 * V850 Opcodes::              Opcodes
17608 \x1f
17609 File: as.info,  Node: V850 Options,  Next: V850 Syntax,  Up: V850-Dependent
17611 9.39.1 Options
17612 --------------
17614 `as' supports the following additional command-line options for the
17615 V850 processor family:
17617 `-wsigned_overflow'
17618      Causes warnings to be produced when signed immediate values
17619      overflow the space available for then within their opcodes.  By
17620      default this option is disabled as it is possible to receive
17621      spurious warnings due to using exact bit patterns as immediate
17622      constants.
17624 `-wunsigned_overflow'
17625      Causes warnings to be produced when unsigned immediate values
17626      overflow the space available for then within their opcodes.  By
17627      default this option is disabled as it is possible to receive
17628      spurious warnings due to using exact bit patterns as immediate
17629      constants.
17631 `-mv850'
17632      Specifies that the assembled code should be marked as being
17633      targeted at the V850 processor.  This allows the linker to detect
17634      attempts to link such code with code assembled for other
17635      processors.
17637 `-mv850e'
17638      Specifies that the assembled code should be marked as being
17639      targeted at the V850E processor.  This allows the linker to detect
17640      attempts to link such code with code assembled for other
17641      processors.
17643 `-mv850e1'
17644      Specifies that the assembled code should be marked as being
17645      targeted at the V850E1 processor.  This allows the linker to
17646      detect attempts to link such code with code assembled for other
17647      processors.
17649 `-mv850any'
17650      Specifies that the assembled code should be marked as being
17651      targeted at the V850 processor but support instructions that are
17652      specific to the extended variants of the process.  This allows the
17653      production of binaries that contain target specific code, but
17654      which are also intended to be used in a generic fashion.  For
17655      example libgcc.a contains generic routines used by the code
17656      produced by GCC for all versions of the v850 architecture,
17657      together with support routines only used by the V850E architecture.
17659 `-mrelax'
17660      Enables relaxation.  This allows the .longcall and .longjump pseudo
17661      ops to be used in the assembler source code.  These ops label
17662      sections of code which are either a long function call or a long
17663      branch.  The assembler will then flag these sections of code and
17664      the linker will attempt to relax them.
17667 \x1f
17668 File: as.info,  Node: V850 Syntax,  Next: V850 Floating Point,  Prev: V850 Options,  Up: V850-Dependent
17670 9.39.2 Syntax
17671 -------------
17673 * Menu:
17675 * V850-Chars::                Special Characters
17676 * V850-Regs::                 Register Names
17678 \x1f
17679 File: as.info,  Node: V850-Chars,  Next: V850-Regs,  Up: V850 Syntax
17681 9.39.2.1 Special Characters
17682 ...........................
17684 `#' is the line comment character.
17686 \x1f
17687 File: as.info,  Node: V850-Regs,  Prev: V850-Chars,  Up: V850 Syntax
17689 9.39.2.2 Register Names
17690 .......................
17692 `as' supports the following names for registers:
17693 `general register 0'
17694      r0, zero
17696 `general register 1'
17697      r1
17699 `general register 2'
17700      r2, hp 
17702 `general register 3'
17703      r3, sp 
17705 `general register 4'
17706      r4, gp 
17708 `general register 5'
17709      r5, tp
17711 `general register 6'
17712      r6
17714 `general register 7'
17715      r7
17717 `general register 8'
17718      r8
17720 `general register 9'
17721      r9
17723 `general register 10'
17724      r10
17726 `general register 11'
17727      r11
17729 `general register 12'
17730      r12
17732 `general register 13'
17733      r13
17735 `general register 14'
17736      r14
17738 `general register 15'
17739      r15
17741 `general register 16'
17742      r16
17744 `general register 17'
17745      r17
17747 `general register 18'
17748      r18
17750 `general register 19'
17751      r19
17753 `general register 20'
17754      r20
17756 `general register 21'
17757      r21
17759 `general register 22'
17760      r22
17762 `general register 23'
17763      r23
17765 `general register 24'
17766      r24
17768 `general register 25'
17769      r25
17771 `general register 26'
17772      r26
17774 `general register 27'
17775      r27
17777 `general register 28'
17778      r28
17780 `general register 29'
17781      r29 
17783 `general register 30'
17784      r30, ep 
17786 `general register 31'
17787      r31, lp 
17789 `system register 0'
17790      eipc 
17792 `system register 1'
17793      eipsw 
17795 `system register 2'
17796      fepc 
17798 `system register 3'
17799      fepsw 
17801 `system register 4'
17802      ecr 
17804 `system register 5'
17805      psw 
17807 `system register 16'
17808      ctpc 
17810 `system register 17'
17811      ctpsw 
17813 `system register 18'
17814      dbpc 
17816 `system register 19'
17817      dbpsw 
17819 `system register 20'
17820      ctbp
17822 \x1f
17823 File: as.info,  Node: V850 Floating Point,  Next: V850 Directives,  Prev: V850 Syntax,  Up: V850-Dependent
17825 9.39.3 Floating Point
17826 ---------------------
17828 The V850 family uses IEEE floating-point numbers.
17830 \x1f
17831 File: as.info,  Node: V850 Directives,  Next: V850 Opcodes,  Prev: V850 Floating Point,  Up: V850-Dependent
17833 9.39.4 V850 Machine Directives
17834 ------------------------------
17836 `.offset <EXPRESSION>'
17837      Moves the offset into the current section to the specified amount.
17839 `.section "name", <type>'
17840      This is an extension to the standard .section directive.  It sets
17841      the current section to be <type> and creates an alias for this
17842      section called "name".
17844 `.v850'
17845      Specifies that the assembled code should be marked as being
17846      targeted at the V850 processor.  This allows the linker to detect
17847      attempts to link such code with code assembled for other
17848      processors.
17850 `.v850e'
17851      Specifies that the assembled code should be marked as being
17852      targeted at the V850E processor.  This allows the linker to detect
17853      attempts to link such code with code assembled for other
17854      processors.
17856 `.v850e1'
17857      Specifies that the assembled code should be marked as being
17858      targeted at the V850E1 processor.  This allows the linker to
17859      detect attempts to link such code with code assembled for other
17860      processors.
17863 \x1f
17864 File: as.info,  Node: V850 Opcodes,  Prev: V850 Directives,  Up: V850-Dependent
17866 9.39.5 Opcodes
17867 --------------
17869 `as' implements all the standard V850 opcodes.
17871    `as' also implements the following pseudo ops:
17873 `hi0()'
17874      Computes the higher 16 bits of the given expression and stores it
17875      into the immediate operand field of the given instruction.  For
17876      example:
17878      `mulhi hi0(here - there), r5, r6'
17880      computes the difference between the address of labels 'here' and
17881      'there', takes the upper 16 bits of this difference, shifts it
17882      down 16 bits and then multiplies it by the lower 16 bits in
17883      register 5, putting the result into register 6.
17885 `lo()'
17886      Computes the lower 16 bits of the given expression and stores it
17887      into the immediate operand field of the given instruction.  For
17888      example:
17890      `addi lo(here - there), r5, r6'
17892      computes the difference between the address of labels 'here' and
17893      'there', takes the lower 16 bits of this difference and adds it to
17894      register 5, putting the result into register 6.
17896 `hi()'
17897      Computes the higher 16 bits of the given expression and then adds
17898      the value of the most significant bit of the lower 16 bits of the
17899      expression and stores the result into the immediate operand field
17900      of the given instruction.  For example the following code can be
17901      used to compute the address of the label 'here' and store it into
17902      register 6:
17904      `movhi hi(here), r0, r6'     `movea lo(here), r6, r6'
17906      The reason for this special behaviour is that movea performs a sign
17907      extension on its immediate operand.  So for example if the address
17908      of 'here' was 0xFFFFFFFF then without the special behaviour of the
17909      hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6,
17910      then the movea instruction would takes its immediate operand,
17911      0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it
17912      into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E).
17913      With the hi() pseudo op adding in the top bit of the lo() pseudo
17914      op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 =
17915      0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 -
17916      the right value.
17918 `hilo()'
17919      Computes the 32 bit value of the given expression and stores it
17920      into the immediate operand field of the given instruction (which
17921      must be a mov instruction).  For example:
17923      `mov hilo(here), r6'
17925      computes the absolute address of label 'here' and puts the result
17926      into register 6.
17928 `sdaoff()'
17929      Computes the offset of the named variable from the start of the
17930      Small Data Area (whoes address is held in register 4, the GP
17931      register) and stores the result as a 16 bit signed value in the
17932      immediate operand field of the given instruction.  For example:
17934      `ld.w sdaoff(_a_variable)[gp],r6'
17936      loads the contents of the location pointed to by the label
17937      '_a_variable' into register 6, provided that the label is located
17938      somewhere within +/- 32K of the address held in the GP register.
17939      [Note the linker assumes that the GP register contains a fixed
17940      address set to the address of the label called '__gp'.  This can
17941      either be set up automatically by the linker, or specifically set
17942      by using the `--defsym __gp=<value>' command line option].
17944 `tdaoff()'
17945      Computes the offset of the named variable from the start of the
17946      Tiny Data Area (whoes address is held in register 30, the EP
17947      register) and stores the result as a 4,5, 7 or 8 bit unsigned
17948      value in the immediate operand field of the given instruction.
17949      For example:
17951      `sld.w tdaoff(_a_variable)[ep],r6'
17953      loads the contents of the location pointed to by the label
17954      '_a_variable' into register 6, provided that the label is located
17955      somewhere within +256 bytes of the address held in the EP
17956      register.  [Note the linker assumes that the EP register contains
17957      a fixed address set to the address of the label called '__ep'.
17958      This can either be set up automatically by the linker, or
17959      specifically set by using the `--defsym __ep=<value>' command line
17960      option].
17962 `zdaoff()'
17963      Computes the offset of the named variable from address 0 and
17964      stores the result as a 16 bit signed value in the immediate
17965      operand field of the given instruction.  For example:
17967      `movea zdaoff(_a_variable),zero,r6'
17969      puts the address of the label '_a_variable' into register 6,
17970      assuming that the label is somewhere within the first 32K of
17971      memory.  (Strictly speaking it also possible to access the last
17972      32K of memory as well, as the offsets are signed).
17974 `ctoff()'
17975      Computes the offset of the named variable from the start of the
17976      Call Table Area (whoes address is helg in system register 20, the
17977      CTBP register) and stores the result a 6 or 16 bit unsigned value
17978      in the immediate field of then given instruction or piece of data.
17979      For example:
17981      `callt ctoff(table_func1)'
17983      will put the call the function whoes address is held in the call
17984      table at the location labeled 'table_func1'.
17986 `.longcall `name''
17987      Indicates that the following sequence of instructions is a long
17988      call to function `name'.  The linker will attempt to shorten this
17989      call sequence if `name' is within a 22bit offset of the call.  Only
17990      valid if the `-mrelax' command line switch has been enabled.
17992 `.longjump `name''
17993      Indicates that the following sequence of instructions is a long
17994      jump to label `name'.  The linker will attempt to shorten this code
17995      sequence if `name' is within a 22bit offset of the jump.  Only
17996      valid if the `-mrelax' command line switch has been enabled.
17999    For information on the V850 instruction set, see `V850 Family
18000 32-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC.
18001 Ltd.
18003 \x1f
18004 File: as.info,  Node: Xtensa-Dependent,  Next: Z80-Dependent,  Prev: V850-Dependent,  Up: Machine Dependencies
18006 9.40 Xtensa Dependent Features
18007 ==============================
18009    This chapter covers features of the GNU assembler that are specific
18010 to the Xtensa architecture.  For details about the Xtensa instruction
18011 set, please consult the `Xtensa Instruction Set Architecture (ISA)
18012 Reference Manual'.
18014 * Menu:
18016 * Xtensa Options::              Command-line Options.
18017 * Xtensa Syntax::               Assembler Syntax for Xtensa Processors.
18018 * Xtensa Optimizations::        Assembler Optimizations.
18019 * Xtensa Relaxation::           Other Automatic Transformations.
18020 * Xtensa Directives::           Directives for Xtensa Processors.
18022 \x1f
18023 File: as.info,  Node: Xtensa Options,  Next: Xtensa Syntax,  Up: Xtensa-Dependent
18025 9.40.1 Command Line Options
18026 ---------------------------
18028 The Xtensa version of the GNU assembler supports these special options:
18030 `--text-section-literals | --no-text-section-literals'
18031      Control the treatment of literal pools.  The default is
18032      `--no-text-section-literals', which places literals in separate
18033      sections in the output file.  This allows the literal pool to be
18034      placed in a data RAM/ROM.  With `--text-section-literals', the
18035      literals are interspersed in the text section in order to keep
18036      them as close as possible to their references.  This may be
18037      necessary for large assembly files, where the literals would
18038      otherwise be out of range of the `L32R' instructions in the text
18039      section.  These options only affect literals referenced via
18040      PC-relative `L32R' instructions; literals for absolute mode `L32R'
18041      instructions are handled separately.  *Note literal: Literal
18042      Directive.
18044 `--absolute-literals | --no-absolute-literals'
18045      Indicate to the assembler whether `L32R' instructions use absolute
18046      or PC-relative addressing.  If the processor includes the absolute
18047      addressing option, the default is to use absolute `L32R'
18048      relocations.  Otherwise, only the PC-relative `L32R' relocations
18049      can be used.
18051 `--target-align | --no-target-align'
18052      Enable or disable automatic alignment to reduce branch penalties
18053      at some expense in code size.  *Note Automatic Instruction
18054      Alignment: Xtensa Automatic Alignment.  This optimization is
18055      enabled by default.  Note that the assembler will always align
18056      instructions like `LOOP' that have fixed alignment requirements.
18058 `--longcalls | --no-longcalls'
18059      Enable or disable transformation of call instructions to allow
18060      calls across a greater range of addresses.  *Note Function Call
18061      Relaxation: Xtensa Call Relaxation.  This option should be used
18062      when call targets can potentially be out of range.  It may degrade
18063      both code size and performance, but the linker can generally
18064      optimize away the unnecessary overhead when a call ends up within
18065      range.  The default is `--no-longcalls'.
18067 `--transform | --no-transform'
18068      Enable or disable all assembler transformations of Xtensa
18069      instructions, including both relaxation and optimization.  The
18070      default is `--transform'; `--no-transform' should only be used in
18071      the rare cases when the instructions must be exactly as specified
18072      in the assembly source.  Using `--no-transform' causes out of range
18073      instruction operands to be errors.
18075 `--rename-section OLDNAME=NEWNAME'
18076      Rename the OLDNAME section to NEWNAME.  This option can be used
18077      multiple times to rename multiple sections.
18079 \x1f
18080 File: as.info,  Node: Xtensa Syntax,  Next: Xtensa Optimizations,  Prev: Xtensa Options,  Up: Xtensa-Dependent
18082 9.40.2 Assembler Syntax
18083 -----------------------
18085 Block comments are delimited by `/*' and `*/'.  End of line comments
18086 may be introduced with either `#' or `//'.
18088    Instructions consist of a leading opcode or macro name followed by
18089 whitespace and an optional comma-separated list of operands:
18091      OPCODE [OPERAND, ...]
18093    Instructions must be separated by a newline or semicolon.
18095    FLIX instructions, which bundle multiple opcodes together in a single
18096 instruction, are specified by enclosing the bundled opcodes inside
18097 braces:
18099      {
18100      [FORMAT]
18101      OPCODE0 [OPERANDS]
18102      OPCODE1 [OPERANDS]
18103      OPCODE2 [OPERANDS]
18104      ...
18105      }
18107    The opcodes in a FLIX instruction are listed in the same order as the
18108 corresponding instruction slots in the TIE format declaration.
18109 Directives and labels are not allowed inside the braces of a FLIX
18110 instruction.  A particular TIE format name can optionally be specified
18111 immediately after the opening brace, but this is usually unnecessary.
18112 The assembler will automatically search for a format that can encode the
18113 specified opcodes, so the format name need only be specified in rare
18114 cases where there is more than one applicable format and where it
18115 matters which of those formats is used.  A FLIX instruction can also be
18116 specified on a single line by separating the opcodes with semicolons:
18118      { [FORMAT;] OPCODE0 [OPERANDS]; OPCODE1 [OPERANDS]; OPCODE2 [OPERANDS]; ... }
18120    If an opcode can only be encoded in a FLIX instruction but is not
18121 specified as part of a FLIX bundle, the assembler will choose the
18122 smallest format where the opcode can be encoded and will fill unused
18123 instruction slots with no-ops.
18125 * Menu:
18127 * Xtensa Opcodes::              Opcode Naming Conventions.
18128 * Xtensa Registers::            Register Naming.
18130 \x1f
18131 File: as.info,  Node: Xtensa Opcodes,  Next: Xtensa Registers,  Up: Xtensa Syntax
18133 9.40.2.1 Opcode Names
18134 .....................
18136 See the `Xtensa Instruction Set Architecture (ISA) Reference Manual'
18137 for a complete list of opcodes and descriptions of their semantics.
18139    If an opcode name is prefixed with an underscore character (`_'),
18140 `as' will not transform that instruction in any way.  The underscore
18141 prefix disables both optimization (*note Xtensa Optimizations: Xtensa
18142 Optimizations.) and relaxation (*note Xtensa Relaxation: Xtensa
18143 Relaxation.) for that particular instruction.  Only use the underscore
18144 prefix when it is essential to select the exact opcode produced by the
18145 assembler.  Using this feature unnecessarily makes the code less
18146 efficient by disabling assembler optimization and less flexible by
18147 disabling relaxation.
18149    Note that this special handling of underscore prefixes only applies
18150 to Xtensa opcodes, not to either built-in macros or user-defined macros.
18151 When an underscore prefix is used with a macro (e.g., `_MOV'), it
18152 refers to a different macro.  The assembler generally provides built-in
18153 macros both with and without the underscore prefix, where the underscore
18154 versions behave as if the underscore carries through to the instructions
18155 in the macros.  For example, `_MOV' may expand to `_MOV.N'.
18157    The underscore prefix only applies to individual instructions, not to
18158 series of instructions.  For example, if a series of instructions have
18159 underscore prefixes, the assembler will not transform the individual
18160 instructions, but it may insert other instructions between them (e.g.,
18161 to align a `LOOP' instruction).  To prevent the assembler from
18162 modifying a series of instructions as a whole, use the `no-transform'
18163 directive.  *Note transform: Transform Directive.
18165 \x1f
18166 File: as.info,  Node: Xtensa Registers,  Prev: Xtensa Opcodes,  Up: Xtensa Syntax
18168 9.40.2.2 Register Names
18169 .......................
18171 The assembly syntax for a register file entry is the "short" name for a
18172 TIE register file followed by the index into that register file.  For
18173 example, the general-purpose `AR' register file has a short name of
18174 `a', so these registers are named `a0'...`a15'.  As a special feature,
18175 `sp' is also supported as a synonym for `a1'.  Additional registers may
18176 be added by processor configuration options and by designer-defined TIE
18177 extensions.  An initial `$' character is optional in all register names.
18179 \x1f
18180 File: as.info,  Node: Xtensa Optimizations,  Next: Xtensa Relaxation,  Prev: Xtensa Syntax,  Up: Xtensa-Dependent
18182 9.40.3 Xtensa Optimizations
18183 ---------------------------
18185 The optimizations currently supported by `as' are generation of density
18186 instructions where appropriate and automatic branch target alignment.
18188 * Menu:
18190 * Density Instructions::        Using Density Instructions.
18191 * Xtensa Automatic Alignment::  Automatic Instruction Alignment.
18193 \x1f
18194 File: as.info,  Node: Density Instructions,  Next: Xtensa Automatic Alignment,  Up: Xtensa Optimizations
18196 9.40.3.1 Using Density Instructions
18197 ...................................
18199 The Xtensa instruction set has a code density option that provides
18200 16-bit versions of some of the most commonly used opcodes.  Use of these
18201 opcodes can significantly reduce code size.  When possible, the
18202 assembler automatically translates instructions from the core Xtensa
18203 instruction set into equivalent instructions from the Xtensa code
18204 density option.  This translation can be disabled by using underscore
18205 prefixes (*note Opcode Names: Xtensa Opcodes.), by using the
18206 `--no-transform' command-line option (*note Command Line Options:
18207 Xtensa Options.), or by using the `no-transform' directive (*note
18208 transform: Transform Directive.).
18210    It is a good idea _not_ to use the density instructions directly.
18211 The assembler will automatically select dense instructions where
18212 possible.  If you later need to use an Xtensa processor without the code
18213 density option, the same assembly code will then work without
18214 modification.
18216 \x1f
18217 File: as.info,  Node: Xtensa Automatic Alignment,  Prev: Density Instructions,  Up: Xtensa Optimizations
18219 9.40.3.2 Automatic Instruction Alignment
18220 ........................................
18222 The Xtensa assembler will automatically align certain instructions, both
18223 to optimize performance and to satisfy architectural requirements.
18225    As an optimization to improve performance, the assembler attempts to
18226 align branch targets so they do not cross instruction fetch boundaries.
18227 (Xtensa processors can be configured with either 32-bit or 64-bit
18228 instruction fetch widths.)  An instruction immediately following a call
18229 is treated as a branch target in this context, because it will be the
18230 target of a return from the call.  This alignment has the potential to
18231 reduce branch penalties at some expense in code size.  This
18232 optimization is enabled by default.  You can disable it with the
18233 `--no-target-align' command-line option (*note Command Line Options:
18234 Xtensa Options.).
18236    The target alignment optimization is done without adding instructions
18237 that could increase the execution time of the program.  If there are
18238 density instructions in the code preceding a target, the assembler can
18239 change the target alignment by widening some of those instructions to
18240 the equivalent 24-bit instructions.  Extra bytes of padding can be
18241 inserted immediately following unconditional jump and return
18242 instructions.  This approach is usually successful in aligning many,
18243 but not all, branch targets.
18245    The `LOOP' family of instructions must be aligned such that the
18246 first instruction in the loop body does not cross an instruction fetch
18247 boundary (e.g., with a 32-bit fetch width, a `LOOP' instruction must be
18248 on either a 1 or 2 mod 4 byte boundary).  The assembler knows about
18249 this restriction and inserts the minimal number of 2 or 3 byte no-op
18250 instructions to satisfy it.  When no-op instructions are added, any
18251 label immediately preceding the original loop will be moved in order to
18252 refer to the loop instruction, not the newly generated no-op
18253 instruction.  To preserve binary compatibility across processors with
18254 different fetch widths, the assembler conservatively assumes a 32-bit
18255 fetch width when aligning `LOOP' instructions (except if the first
18256 instruction in the loop is a 64-bit instruction).
18258    Previous versions of the assembler automatically aligned `ENTRY'
18259 instructions to 4-byte boundaries, but that alignment is now the
18260 programmer's responsibility.
18262 \x1f
18263 File: as.info,  Node: Xtensa Relaxation,  Next: Xtensa Directives,  Prev: Xtensa Optimizations,  Up: Xtensa-Dependent
18265 9.40.4 Xtensa Relaxation
18266 ------------------------
18268 When an instruction operand is outside the range allowed for that
18269 particular instruction field, `as' can transform the code to use a
18270 functionally-equivalent instruction or sequence of instructions.  This
18271 process is known as "relaxation".  This is typically done for branch
18272 instructions because the distance of the branch targets is not known
18273 until assembly-time.  The Xtensa assembler offers branch relaxation and
18274 also extends this concept to function calls, `MOVI' instructions and
18275 other instructions with immediate fields.
18277 * Menu:
18279 * Xtensa Branch Relaxation::        Relaxation of Branches.
18280 * Xtensa Call Relaxation::          Relaxation of Function Calls.
18281 * Xtensa Immediate Relaxation::     Relaxation of other Immediate Fields.
18283 \x1f
18284 File: as.info,  Node: Xtensa Branch Relaxation,  Next: Xtensa Call Relaxation,  Up: Xtensa Relaxation
18286 9.40.4.1 Conditional Branch Relaxation
18287 ......................................
18289 When the target of a branch is too far away from the branch itself,
18290 i.e., when the offset from the branch to the target is too large to fit
18291 in the immediate field of the branch instruction, it may be necessary to
18292 replace the branch with a branch around a jump.  For example,
18294          beqz    a2, L
18296    may result in:
18298          bnez.n  a2, M
18299          j L
18300      M:
18302    (The `BNEZ.N' instruction would be used in this example only if the
18303 density option is available.  Otherwise, `BNEZ' would be used.)
18305    This relaxation works well because the unconditional jump instruction
18306 has a much larger offset range than the various conditional branches.
18307 However, an error will occur if a branch target is beyond the range of a
18308 jump instruction.  `as' cannot relax unconditional jumps.  Similarly,
18309 an error will occur if the original input contains an unconditional
18310 jump to a target that is out of range.
18312    Branch relaxation is enabled by default.  It can be disabled by using
18313 underscore prefixes (*note Opcode Names: Xtensa Opcodes.), the
18314 `--no-transform' command-line option (*note Command Line Options:
18315 Xtensa Options.), or the `no-transform' directive (*note transform:
18316 Transform Directive.).
18318 \x1f
18319 File: as.info,  Node: Xtensa Call Relaxation,  Next: Xtensa Immediate Relaxation,  Prev: Xtensa Branch Relaxation,  Up: Xtensa Relaxation
18321 9.40.4.2 Function Call Relaxation
18322 .................................
18324 Function calls may require relaxation because the Xtensa immediate call
18325 instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a
18326 PC-relative offset of only 512 Kbytes in either direction.  For larger
18327 programs, it may be necessary to use indirect calls (`CALLX0',
18328 `CALLX4', `CALLX8' and `CALLX12') where the target address is specified
18329 in a register.  The Xtensa assembler can automatically relax immediate
18330 call instructions into indirect call instructions.  This relaxation is
18331 done by loading the address of the called function into the callee's
18332 return address register and then using a `CALLX' instruction.  So, for
18333 example:
18335          call8 func
18337    might be relaxed to:
18339          .literal .L1, func
18340          l32r    a8, .L1
18341          callx8  a8
18343    Because the addresses of targets of function calls are not generally
18344 known until link-time, the assembler must assume the worst and relax all
18345 the calls to functions in other source files, not just those that really
18346 will be out of range.  The linker can recognize calls that were
18347 unnecessarily relaxed, and it will remove the overhead introduced by the
18348 assembler for those cases where direct calls are sufficient.
18350    Call relaxation is disabled by default because it can have a negative
18351 effect on both code size and performance, although the linker can
18352 usually eliminate the unnecessary overhead.  If a program is too large
18353 and some of the calls are out of range, function call relaxation can be
18354 enabled using the `--longcalls' command-line option or the `longcalls'
18355 directive (*note longcalls: Longcalls Directive.).
18357 \x1f
18358 File: as.info,  Node: Xtensa Immediate Relaxation,  Prev: Xtensa Call Relaxation,  Up: Xtensa Relaxation
18360 9.40.4.3 Other Immediate Field Relaxation
18361 .........................................
18363 The assembler normally performs the following other relaxations.  They
18364 can be disabled by using underscore prefixes (*note Opcode Names:
18365 Xtensa Opcodes.), the `--no-transform' command-line option (*note
18366 Command Line Options: Xtensa Options.), or the `no-transform' directive
18367 (*note transform: Transform Directive.).
18369    The `MOVI' machine instruction can only materialize values in the
18370 range from -2048 to 2047.  Values outside this range are best
18371 materialized with `L32R' instructions.  Thus:
18373          movi a0, 100000
18375    is assembled into the following machine code:
18377          .literal .L1, 100000
18378          l32r a0, .L1
18380    The `L8UI' machine instruction can only be used with immediate
18381 offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine
18382 instructions can only be used with offsets from 0 to 510.  The `L32I'
18383 machine instruction can only be used with offsets from 0 to 1020.  A
18384 load offset outside these ranges can be materialized with an `L32R'
18385 instruction if the destination register of the load is different than
18386 the source address register.  For example:
18388          l32i a1, a0, 2040
18390    is translated to:
18392          .literal .L1, 2040
18393          l32r a1, .L1
18394          add a1, a0, a1
18395          l32i a1, a1, 0
18397 If the load destination and source address register are the same, an
18398 out-of-range offset causes an error.
18400    The Xtensa `ADDI' instruction only allows immediate operands in the
18401 range from -128 to 127.  There are a number of alternate instruction
18402 sequences for the `ADDI' operation.  First, if the immediate is 0, the
18403 `ADDI' will be turned into a `MOV.N' instruction (or the equivalent
18404 `OR' instruction if the code density option is not available).  If the
18405 `ADDI' immediate is outside of the range -128 to 127, but inside the
18406 range -32896 to 32639, an `ADDMI' instruction or `ADDMI'/`ADDI'
18407 sequence will be used.  Finally, if the immediate is outside of this
18408 range and a free register is available, an `L32R'/`ADD' sequence will
18409 be used with a literal allocated from the literal pool.
18411    For example:
18413          addi    a5, a6, 0
18414          addi    a5, a6, 512
18415          addi    a5, a6, 513
18416          addi    a5, a6, 50000
18418    is assembled into the following:
18420          .literal .L1, 50000
18421          mov.n   a5, a6
18422          addmi   a5, a6, 0x200
18423          addmi   a5, a6, 0x200
18424          addi    a5, a5, 1
18425          l32r    a5, .L1
18426          add     a5, a6, a5
18428 \x1f
18429 File: as.info,  Node: Xtensa Directives,  Prev: Xtensa Relaxation,  Up: Xtensa-Dependent
18431 9.40.5 Directives
18432 -----------------
18434 The Xtensa assembler supports a region-based directive syntax:
18436          .begin DIRECTIVE [OPTIONS]
18437          ...
18438          .end DIRECTIVE
18440    All the Xtensa-specific directives that apply to a region of code use
18441 this syntax.
18443    The directive applies to code between the `.begin' and the `.end'.
18444 The state of the option after the `.end' reverts to what it was before
18445 the `.begin'.  A nested `.begin'/`.end' region can further change the
18446 state of the directive without having to be aware of its outer state.
18447 For example, consider:
18449          .begin no-transform
18450      L:  add a0, a1, a2
18451          .begin transform
18452      M:  add a0, a1, a2
18453          .end transform
18454      N:  add a0, a1, a2
18455          .end no-transform
18457    The `ADD' opcodes at `L' and `N' in the outer `no-transform' region
18458 both result in `ADD' machine instructions, but the assembler selects an
18459 `ADD.N' instruction for the `ADD' at `M' in the inner `transform'
18460 region.
18462    The advantage of this style is that it works well inside macros
18463 which can preserve the context of their callers.
18465    The following directives are available:
18467 * Menu:
18469 * Schedule Directive::         Enable instruction scheduling.
18470 * Longcalls Directive::        Use Indirect Calls for Greater Range.
18471 * Transform Directive::        Disable All Assembler Transformations.
18472 * Literal Directive::          Intermix Literals with Instructions.
18473 * Literal Position Directive:: Specify Inline Literal Pool Locations.
18474 * Literal Prefix Directive::   Specify Literal Section Name Prefix.
18475 * Absolute Literals Directive:: Control PC-Relative vs. Absolute Literals.
18477 \x1f
18478 File: as.info,  Node: Schedule Directive,  Next: Longcalls Directive,  Up: Xtensa Directives
18480 9.40.5.1 schedule
18481 .................
18483 The `schedule' directive is recognized only for compatibility with
18484 Tensilica's assembler.
18486          .begin [no-]schedule
18487          .end [no-]schedule
18489    This directive is ignored and has no effect on `as'.
18491 \x1f
18492 File: as.info,  Node: Longcalls Directive,  Next: Transform Directive,  Prev: Schedule Directive,  Up: Xtensa Directives
18494 9.40.5.2 longcalls
18495 ..................
18497 The `longcalls' directive enables or disables function call relaxation.
18498 *Note Function Call Relaxation: Xtensa Call Relaxation.
18500          .begin [no-]longcalls
18501          .end [no-]longcalls
18503    Call relaxation is disabled by default unless the `--longcalls'
18504 command-line option is specified.  The `longcalls' directive overrides
18505 the default determined by the command-line options.
18507 \x1f
18508 File: as.info,  Node: Transform Directive,  Next: Literal Directive,  Prev: Longcalls Directive,  Up: Xtensa Directives
18510 9.40.5.3 transform
18511 ..................
18513 This directive enables or disables all assembler transformation,
18514 including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and
18515 optimization (*note Xtensa Optimizations: Xtensa Optimizations.).
18517          .begin [no-]transform
18518          .end [no-]transform
18520    Transformations are enabled by default unless the `--no-transform'
18521 option is used.  The `transform' directive overrides the default
18522 determined by the command-line options.  An underscore opcode prefix,
18523 disabling transformation of that opcode, always takes precedence over
18524 both directives and command-line flags.
18526 \x1f
18527 File: as.info,  Node: Literal Directive,  Next: Literal Position Directive,  Prev: Transform Directive,  Up: Xtensa Directives
18529 9.40.5.4 literal
18530 ................
18532 The `.literal' directive is used to define literal pool data, i.e.,
18533 read-only 32-bit data accessed via `L32R' instructions.
18535          .literal LABEL, VALUE[, VALUE...]
18537    This directive is similar to the standard `.word' directive, except
18538 that the actual location of the literal data is determined by the
18539 assembler and linker, not by the position of the `.literal' directive.
18540 Using this directive gives the assembler freedom to locate the literal
18541 data in the most appropriate place and possibly to combine identical
18542 literals.  For example, the code:
18544          entry sp, 40
18545          .literal .L1, sym
18546          l32r    a4, .L1
18548    can be used to load a pointer to the symbol `sym' into register
18549 `a4'.  The value of `sym' will not be placed between the `ENTRY' and
18550 `L32R' instructions; instead, the assembler puts the data in a literal
18551 pool.
18553    Literal pools are placed by default in separate literal sections;
18554 however, when using the `--text-section-literals' option (*note Command
18555 Line Options: Xtensa Options.), the literal pools for PC-relative mode
18556 `L32R' instructions are placed in the current section.(1) These text
18557 section literal pools are created automatically before `ENTRY'
18558 instructions and manually after `.literal_position' directives (*note
18559 literal_position: Literal Position Directive.).  If there are no
18560 preceding `ENTRY' instructions, explicit `.literal_position' directives
18561 must be used to place the text section literal pools; otherwise, `as'
18562 will report an error.
18564    When literals are placed in separate sections, the literal section
18565 names are derived from the names of the sections where the literals are
18566 defined.  The base literal section names are `.literal' for PC-relative
18567 mode `L32R' instructions and `.lit4' for absolute mode `L32R'
18568 instructions (*note absolute-literals: Absolute Literals Directive.).
18569 These base names are used for literals defined in the default `.text'
18570 section.  For literals defined in other sections or within the scope of
18571 a `literal_prefix' directive (*note literal_prefix: Literal Prefix
18572 Directive.), the following rules determine the literal section name:
18574   1. If the current section is a member of a section group, the literal
18575      section name includes the group name as a suffix to the base
18576      `.literal' or `.lit4' name, with a period to separate the base
18577      name and group name.  The literal section is also made a member of
18578      the group.
18580   2. If the current section name (or `literal_prefix' value) begins with
18581      "`.gnu.linkonce.KIND.'", the literal section name is formed by
18582      replacing "`.KIND'" with the base `.literal' or `.lit4' name.  For
18583      example, for literals defined in a section named
18584      `.gnu.linkonce.t.func', the literal section will be
18585      `.gnu.linkonce.literal.func' or `.gnu.linkonce.lit4.func'.
18587   3. If the current section name (or `literal_prefix' value) ends with
18588      `.text', the literal section name is formed by replacing that
18589      suffix with the base `.literal' or `.lit4' name.  For example, for
18590      literals defined in a section named `.iram0.text', the literal
18591      section will be `.iram0.literal' or `.iram0.lit4'.
18593   4. If none of the preceding conditions apply, the literal section
18594      name is formed by adding the base `.literal' or `.lit4' name as a
18595      suffix to the current section name (or `literal_prefix' value).
18597    ---------- Footnotes ----------
18599    (1) Literals for the `.init' and `.fini' sections are always placed
18600 in separate sections, even when `--text-section-literals' is enabled.
18602 \x1f
18603 File: as.info,  Node: Literal Position Directive,  Next: Literal Prefix Directive,  Prev: Literal Directive,  Up: Xtensa Directives
18605 9.40.5.5 literal_position
18606 .........................
18608 When using `--text-section-literals' to place literals inline in the
18609 section being assembled, the `.literal_position' directive can be used
18610 to mark a potential location for a literal pool.
18612          .literal_position
18614    The `.literal_position' directive is ignored when the
18615 `--text-section-literals' option is not used or when `L32R'
18616 instructions use the absolute addressing mode.
18618    The assembler will automatically place text section literal pools
18619 before `ENTRY' instructions, so the `.literal_position' directive is
18620 only needed to specify some other location for a literal pool.  You may
18621 need to add an explicit jump instruction to skip over an inline literal
18622 pool.
18624    For example, an interrupt vector does not begin with an `ENTRY'
18625 instruction so the assembler will be unable to automatically find a good
18626 place to put a literal pool.  Moreover, the code for the interrupt
18627 vector must be at a specific starting address, so the literal pool
18628 cannot come before the start of the code.  The literal pool for the
18629 vector must be explicitly positioned in the middle of the vector (before
18630 any uses of the literals, due to the negative offsets used by
18631 PC-relative `L32R' instructions).  The `.literal_position' directive
18632 can be used to do this.  In the following code, the literal for `M'
18633 will automatically be aligned correctly and is placed after the
18634 unconditional jump.
18636          .global M
18637      code_start:
18638          j continue
18639          .literal_position
18640          .align 4
18641      continue:
18642          movi    a4, M
18644 \x1f
18645 File: as.info,  Node: Literal Prefix Directive,  Next: Absolute Literals Directive,  Prev: Literal Position Directive,  Up: Xtensa Directives
18647 9.40.5.6 literal_prefix
18648 .......................
18650 The `literal_prefix' directive allows you to override the default
18651 literal section names, which are derived from the names of the sections
18652 where the literals are defined.
18654          .begin literal_prefix [NAME]
18655          .end literal_prefix
18657    For literals defined within the delimited region, the literal section
18658 names are derived from the NAME argument instead of the name of the
18659 current section.  The rules used to derive the literal section names do
18660 not change.  *Note literal: Literal Directive.  If the NAME argument is
18661 omitted, the literal sections revert to the defaults.  This directive
18662 has no effect when using the `--text-section-literals' option (*note
18663 Command Line Options: Xtensa Options.).
18665 \x1f
18666 File: as.info,  Node: Absolute Literals Directive,  Prev: Literal Prefix Directive,  Up: Xtensa Directives
18668 9.40.5.7 absolute-literals
18669 ..........................
18671 The `absolute-literals' and `no-absolute-literals' directives control
18672 the absolute vs. PC-relative mode for `L32R' instructions.  These are
18673 relevant only for Xtensa configurations that include the absolute
18674 addressing option for `L32R' instructions.
18676          .begin [no-]absolute-literals
18677          .end [no-]absolute-literals
18679    These directives do not change the `L32R' mode--they only cause the
18680 assembler to emit the appropriate kind of relocation for `L32R'
18681 instructions and to place the literal values in the appropriate section.
18682 To change the `L32R' mode, the program must write the `LITBASE' special
18683 register.  It is the programmer's responsibility to keep track of the
18684 mode and indicate to the assembler which mode is used in each region of
18685 code.
18687    If the Xtensa configuration includes the absolute `L32R' addressing
18688 option, the default is to assume absolute `L32R' addressing unless the
18689 `--no-absolute-literals' command-line option is specified.  Otherwise,
18690 the default is to assume PC-relative `L32R' addressing.  The
18691 `absolute-literals' directive can then be used to override the default
18692 determined by the command-line options.
18694 \x1f
18695 File: as.info,  Node: Reporting Bugs,  Next: Acknowledgements,  Prev: Machine Dependencies,  Up: Top
18697 10 Reporting Bugs
18698 *****************
18700 Your bug reports play an essential role in making `as' reliable.
18702    Reporting a bug may help you by bringing a solution to your problem,
18703 or it may not.  But in any case the principal function of a bug report
18704 is to help the entire community by making the next version of `as' work
18705 better.  Bug reports are your contribution to the maintenance of `as'.
18707    In order for a bug report to serve its purpose, you must include the
18708 information that enables us to fix the bug.
18710 * Menu:
18712 * Bug Criteria::                Have you found a bug?
18713 * Bug Reporting::               How to report bugs
18715 \x1f
18716 File: as.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Reporting Bugs
18718 10.1 Have You Found a Bug?
18719 ==========================
18721 If you are not sure whether you have found a bug, here are some
18722 guidelines:
18724    * If the assembler gets a fatal signal, for any input whatever, that
18725      is a `as' bug.  Reliable assemblers never crash.
18727    * If `as' produces an error message for valid input, that is a bug.
18729    * If `as' does not produce an error message for invalid input, that
18730      is a bug.  However, you should note that your idea of "invalid
18731      input" might be our idea of "an extension" or "support for
18732      traditional practice".
18734    * If you are an experienced user of assemblers, your suggestions for
18735      improvement of `as' are welcome in any case.
18737 \x1f
18738 File: as.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Reporting Bugs
18740 10.2 How to Report Bugs
18741 =======================
18743 A number of companies and individuals offer support for GNU products.
18744 If you obtained `as' from a support organization, we recommend you
18745 contact that organization first.
18747    You can find contact information for many support companies and
18748 individuals in the file `etc/SERVICE' in the GNU Emacs distribution.
18750    In any event, we also recommend that you send bug reports for `as'
18751 to `http://www.sourceware.org/bugzilla/'.
18753    The fundamental principle of reporting bugs usefully is this:
18754 *report all the facts*.  If you are not sure whether to state a fact or
18755 leave it out, state it!
18757    Often people omit facts because they think they know what causes the
18758 problem and assume that some details do not matter.  Thus, you might
18759 assume that the name of a symbol you use in an example does not matter.
18760 Well, probably it does not, but one cannot be sure.  Perhaps the bug
18761 is a stray memory reference which happens to fetch from the location
18762 where that name is stored in memory; perhaps, if the name were
18763 different, the contents of that location would fool the assembler into
18764 doing the right thing despite the bug.  Play it safe and give a
18765 specific, complete example.  That is the easiest thing for you to do,
18766 and the most helpful.
18768    Keep in mind that the purpose of a bug report is to enable us to fix
18769 the bug if it is new to us.  Therefore, always write your bug reports
18770 on the assumption that the bug has not been reported previously.
18772    Sometimes people give a few sketchy facts and ask, "Does this ring a
18773 bell?"  This cannot help us fix a bug, so it is basically useless.  We
18774 respond by asking for enough details to enable us to investigate.  You
18775 might as well expedite matters by sending them to begin with.
18777    To enable us to fix the bug, you should include all these things:
18779    * The version of `as'.  `as' announces it if you start it with the
18780      `--version' argument.
18782      Without this, we will not know whether there is any point in
18783      looking for the bug in the current version of `as'.
18785    * Any patches you may have applied to the `as' source.
18787    * The type of machine you are using, and the operating system name
18788      and version number.
18790    * What compiler (and its version) was used to compile `as'--e.g.
18791      "`gcc-2.7'".
18793    * The command arguments you gave the assembler to assemble your
18794      example and observe the bug.  To guarantee you will not omit
18795      something important, list them all.  A copy of the Makefile (or
18796      the output from make) is sufficient.
18798      If we were to try to guess the arguments, we would probably guess
18799      wrong and then we might not encounter the bug.
18801    * A complete input file that will reproduce the bug.  If the bug is
18802      observed when the assembler is invoked via a compiler, send the
18803      assembler source, not the high level language source.  Most
18804      compilers will produce the assembler source when run with the `-S'
18805      option.  If you are using `gcc', use the options `-v
18806      --save-temps'; this will save the assembler source in a file with
18807      an extension of `.s', and also show you exactly how `as' is being
18808      run.
18810    * A description of what behavior you observe that you believe is
18811      incorrect.  For example, "It gets a fatal signal."
18813      Of course, if the bug is that `as' gets a fatal signal, then we
18814      will certainly notice it.  But if the bug is incorrect output, we
18815      might not notice unless it is glaringly wrong.  You might as well
18816      not give us a chance to make a mistake.
18818      Even if the problem you experience is a fatal signal, you should
18819      still say so explicitly.  Suppose something strange is going on,
18820      such as, your copy of `as' is out of sync, or you have encountered
18821      a bug in the C library on your system.  (This has happened!)  Your
18822      copy might crash and ours would not.  If you told us to expect a
18823      crash, then when ours fails to crash, we would know that the bug
18824      was not happening for us.  If you had not told us to expect a
18825      crash, then we would not be able to draw any conclusion from our
18826      observations.
18828    * If you wish to suggest changes to the `as' source, send us context
18829      diffs, as generated by `diff' with the `-u', `-c', or `-p' option.
18830      Always send diffs from the old file to the new file.  If you even
18831      discuss something in the `as' source, refer to it by context, not
18832      by line number.
18834      The line numbers in our development sources will not match those
18835      in your sources.  Your line numbers would convey no useful
18836      information to us.
18838    Here are some things that are not necessary:
18840    * A description of the envelope of the bug.
18842      Often people who encounter a bug spend a lot of time investigating
18843      which changes to the input file will make the bug go away and which
18844      changes will not affect it.
18846      This is often time consuming and not very useful, because the way
18847      we will find the bug is by running a single example under the
18848      debugger with breakpoints, not by pure deduction from a series of
18849      examples.  We recommend that you save your time for something else.
18851      Of course, if you can find a simpler example to report _instead_
18852      of the original one, that is a convenience for us.  Errors in the
18853      output will be easier to spot, running under the debugger will take
18854      less time, and so on.
18856      However, simplification is not vital; if you do not want to do
18857      this, report the bug anyway and send us the entire test case you
18858      used.
18860    * A patch for the bug.
18862      A patch for the bug does help us if it is a good one.  But do not
18863      omit the necessary information, such as the test case, on the
18864      assumption that a patch is all we need.  We might see problems
18865      with your patch and decide to fix the problem another way, or we
18866      might not understand it at all.
18868      Sometimes with a program as complicated as `as' it is very hard to
18869      construct an example that will make the program follow a certain
18870      path through the code.  If you do not send us the example, we will
18871      not be able to construct one, so we will not be able to verify
18872      that the bug is fixed.
18874      And if we cannot understand what bug you are trying to fix, or why
18875      your patch should be an improvement, we will not install it.  A
18876      test case will help us to understand.
18878    * A guess about what the bug is or what it depends on.
18880      Such guesses are usually wrong.  Even we cannot guess right about
18881      such things without first using the debugger to find the facts.
18883 \x1f
18884 File: as.info,  Node: Acknowledgements,  Next: GNU Free Documentation License,  Prev: Reporting Bugs,  Up: Top
18886 11 Acknowledgements
18887 *******************
18889 If you have contributed to GAS and your name isn't listed here, it is
18890 not meant as a slight.  We just don't know about it.  Send mail to the
18891 maintainer, and we'll correct the situation.  Currently the maintainer
18892 is Ken Raeburn (email address `raeburn@cygnus.com').
18894    Dean Elsner wrote the original GNU assembler for the VAX.(1)
18896    Jay Fenlason maintained GAS for a while, adding support for
18897 GDB-specific debug information and the 68k series machines, most of the
18898 preprocessing pass, and extensive changes in `messages.c',
18899 `input-file.c', `write.c'.
18901    K. Richard Pixley maintained GAS for a while, adding various
18902 enhancements and many bug fixes, including merging support for several
18903 processors, breaking GAS up to handle multiple object file format back
18904 ends (including heavy rewrite, testing, an integration of the coff and
18905 b.out back ends), adding configuration including heavy testing and
18906 verification of cross assemblers and file splits and renaming,
18907 converted GAS to strictly ANSI C including full prototypes, added
18908 support for m680[34]0 and cpu32, did considerable work on i960
18909 including a COFF port (including considerable amounts of reverse
18910 engineering), a SPARC opcode file rewrite, DECstation, rs6000, and
18911 hp300hpux host ports, updated "know" assertions and made them work,
18912 much other reorganization, cleanup, and lint.
18914    Ken Raeburn wrote the high-level BFD interface code to replace most
18915 of the code in format-specific I/O modules.
18917    The original VMS support was contributed by David L. Kashtan.  Eric
18918 Youngdale has done much work with it since.
18920    The Intel 80386 machine description was written by Eliot Dresselhaus.
18922    Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
18924    The Motorola 88k machine description was contributed by Devon Bowen
18925 of Buffalo University and Torbjorn Granlund of the Swedish Institute of
18926 Computer Science.
18928    Keith Knowles at the Open Software Foundation wrote the original
18929 MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format
18930 support (which hasn't been merged in yet).  Ralph Campbell worked with
18931 the MIPS code to support a.out format.
18933    Support for the Zilog Z8k and Renesas H8/300 processors (tc-z8k,
18934 tc-h8300), and IEEE 695 object file format (obj-ieee), was written by
18935 Steve Chamberlain of Cygnus Support.  Steve also modified the COFF back
18936 end to use BFD for some low-level operations, for use with the H8/300
18937 and AMD 29k targets.
18939    John Gilmore built the AMD 29000 support, added `.include' support,
18940 and simplified the configuration of which versions accept which
18941 directives.  He updated the 68k machine description so that Motorola's
18942 opcodes always produced fixed-size instructions (e.g., `jsr'), while
18943 synthetic instructions remained shrinkable (`jbsr').  John fixed many
18944 bugs, including true tested cross-compilation support, and one bug in
18945 relaxation that took a week and required the proverbial one-bit fix.
18947    Ian Lance Taylor of Cygnus Support merged the Motorola and MIT
18948 syntax for the 68k, completed support for some COFF targets (68k, i386
18949 SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets,
18950 wrote the initial RS/6000 and PowerPC assembler, and made a few other
18951 minor patches.
18953    Steve Chamberlain made GAS able to generate listings.
18955    Hewlett-Packard contributed support for the HP9000/300.
18957    Jeff Law wrote GAS and BFD support for the native HPPA object format
18958 (SOM) along with a fairly extensive HPPA testsuite (for both SOM and
18959 ELF object formats).  This work was supported by both the Center for
18960 Software Science at the University of Utah and Cygnus Support.
18962    Support for ELF format files has been worked on by Mark Eichin of
18963 Cygnus Support (original, incomplete implementation for SPARC), Pete
18964 Hoogenboom and Jeff Law at the University of Utah (HPPA mainly),
18965 Michael Meissner of the Open Software Foundation (i386 mainly), and Ken
18966 Raeburn of Cygnus Support (sparc, and some initial 64-bit support).
18968    Linas Vepstas added GAS support for the ESA/390 "IBM 370"
18969 architecture.
18971    Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote
18972 GAS and BFD support for openVMS/Alpha.
18974    Timothy Wall, Michael Hayes, and Greg Smart contributed to the
18975 various tic* flavors.
18977    David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from
18978 Tensilica, Inc. added support for Xtensa processors.
18980    Several engineers at Cygnus Support have also provided many small
18981 bug fixes and configuration enhancements.
18983    Jon Beniston added support for the Lattice Mico32 architecture.
18985    Many others have contributed large or small bugfixes and
18986 enhancements.  If you have contributed significant work and are not
18987 mentioned on this list, and want to be, let us know.  Some of the
18988 history has been lost; we are not intentionally leaving anyone out.
18990    ---------- Footnotes ----------
18992    (1) Any more details?
18994 \x1f
18995 File: as.info,  Node: GNU Free Documentation License,  Next: AS Index,  Prev: Acknowledgements,  Up: Top
18997 Appendix A GNU Free Documentation License
18998 *****************************************
19000                      Version 1.3, 3 November 2008
19002      Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
19003      `http://fsf.org/'
19005      Everyone is permitted to copy and distribute verbatim copies
19006      of this license document, but changing it is not allowed.
19008   0. PREAMBLE
19010      The purpose of this License is to make a manual, textbook, or other
19011      functional and useful document "free" in the sense of freedom: to
19012      assure everyone the effective freedom to copy and redistribute it,
19013      with or without modifying it, either commercially or
19014      noncommercially.  Secondarily, this License preserves for the
19015      author and publisher a way to get credit for their work, while not
19016      being considered responsible for modifications made by others.
19018      This License is a kind of "copyleft", which means that derivative
19019      works of the document must themselves be free in the same sense.
19020      It complements the GNU General Public License, which is a copyleft
19021      license designed for free software.
19023      We have designed this License in order to use it for manuals for
19024      free software, because free software needs free documentation: a
19025      free program should come with manuals providing the same freedoms
19026      that the software does.  But this License is not limited to
19027      software manuals; it can be used for any textual work, regardless
19028      of subject matter or whether it is published as a printed book.
19029      We recommend this License principally for works whose purpose is
19030      instruction or reference.
19032   1. APPLICABILITY AND DEFINITIONS
19034      This License applies to any manual or other work, in any medium,
19035      that contains a notice placed by the copyright holder saying it
19036      can be distributed under the terms of this License.  Such a notice
19037      grants a world-wide, royalty-free license, unlimited in duration,
19038      to use that work under the conditions stated herein.  The
19039      "Document", below, refers to any such manual or work.  Any member
19040      of the public is a licensee, and is addressed as "you".  You
19041      accept the license if you copy, modify or distribute the work in a
19042      way requiring permission under copyright law.
19044      A "Modified Version" of the Document means any work containing the
19045      Document or a portion of it, either copied verbatim, or with
19046      modifications and/or translated into another language.
19048      A "Secondary Section" is a named appendix or a front-matter section
19049      of the Document that deals exclusively with the relationship of the
19050      publishers or authors of the Document to the Document's overall
19051      subject (or to related matters) and contains nothing that could
19052      fall directly within that overall subject.  (Thus, if the Document
19053      is in part a textbook of mathematics, a Secondary Section may not
19054      explain any mathematics.)  The relationship could be a matter of
19055      historical connection with the subject or with related matters, or
19056      of legal, commercial, philosophical, ethical or political position
19057      regarding them.
19059      The "Invariant Sections" are certain Secondary Sections whose
19060      titles are designated, as being those of Invariant Sections, in
19061      the notice that says that the Document is released under this
19062      License.  If a section does not fit the above definition of
19063      Secondary then it is not allowed to be designated as Invariant.
19064      The Document may contain zero Invariant Sections.  If the Document
19065      does not identify any Invariant Sections then there are none.
19067      The "Cover Texts" are certain short passages of text that are
19068      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
19069      that says that the Document is released under this License.  A
19070      Front-Cover Text may be at most 5 words, and a Back-Cover Text may
19071      be at most 25 words.
19073      A "Transparent" copy of the Document means a machine-readable copy,
19074      represented in a format whose specification is available to the
19075      general public, that is suitable for revising the document
19076      straightforwardly with generic text editors or (for images
19077      composed of pixels) generic paint programs or (for drawings) some
19078      widely available drawing editor, and that is suitable for input to
19079      text formatters or for automatic translation to a variety of
19080      formats suitable for input to text formatters.  A copy made in an
19081      otherwise Transparent file format whose markup, or absence of
19082      markup, has been arranged to thwart or discourage subsequent
19083      modification by readers is not Transparent.  An image format is
19084      not Transparent if used for any substantial amount of text.  A
19085      copy that is not "Transparent" is called "Opaque".
19087      Examples of suitable formats for Transparent copies include plain
19088      ASCII without markup, Texinfo input format, LaTeX input format,
19089      SGML or XML using a publicly available DTD, and
19090      standard-conforming simple HTML, PostScript or PDF designed for
19091      human modification.  Examples of transparent image formats include
19092      PNG, XCF and JPG.  Opaque formats include proprietary formats that
19093      can be read and edited only by proprietary word processors, SGML or
19094      XML for which the DTD and/or processing tools are not generally
19095      available, and the machine-generated HTML, PostScript or PDF
19096      produced by some word processors for output purposes only.
19098      The "Title Page" means, for a printed book, the title page itself,
19099      plus such following pages as are needed to hold, legibly, the
19100      material this License requires to appear in the title page.  For
19101      works in formats which do not have any title page as such, "Title
19102      Page" means the text near the most prominent appearance of the
19103      work's title, preceding the beginning of the body of the text.
19105      The "publisher" means any person or entity that distributes copies
19106      of the Document to the public.
19108      A section "Entitled XYZ" means a named subunit of the Document
19109      whose title either is precisely XYZ or contains XYZ in parentheses
19110      following text that translates XYZ in another language.  (Here XYZ
19111      stands for a specific section name mentioned below, such as
19112      "Acknowledgements", "Dedications", "Endorsements", or "History".)
19113      To "Preserve the Title" of such a section when you modify the
19114      Document means that it remains a section "Entitled XYZ" according
19115      to this definition.
19117      The Document may include Warranty Disclaimers next to the notice
19118      which states that this License applies to the Document.  These
19119      Warranty Disclaimers are considered to be included by reference in
19120      this License, but only as regards disclaiming warranties: any other
19121      implication that these Warranty Disclaimers may have is void and
19122      has no effect on the meaning of this License.
19124   2. VERBATIM COPYING
19126      You may copy and distribute the Document in any medium, either
19127      commercially or noncommercially, provided that this License, the
19128      copyright notices, and the license notice saying this License
19129      applies to the Document are reproduced in all copies, and that you
19130      add no other conditions whatsoever to those of this License.  You
19131      may not use technical measures to obstruct or control the reading
19132      or further copying of the copies you make or distribute.  However,
19133      you may accept compensation in exchange for copies.  If you
19134      distribute a large enough number of copies you must also follow
19135      the conditions in section 3.
19137      You may also lend copies, under the same conditions stated above,
19138      and you may publicly display copies.
19140   3. COPYING IN QUANTITY
19142      If you publish printed copies (or copies in media that commonly
19143      have printed covers) of the Document, numbering more than 100, and
19144      the Document's license notice requires Cover Texts, you must
19145      enclose the copies in covers that carry, clearly and legibly, all
19146      these Cover Texts: Front-Cover Texts on the front cover, and
19147      Back-Cover Texts on the back cover.  Both covers must also clearly
19148      and legibly identify you as the publisher of these copies.  The
19149      front cover must present the full title with all words of the
19150      title equally prominent and visible.  You may add other material
19151      on the covers in addition.  Copying with changes limited to the
19152      covers, as long as they preserve the title of the Document and
19153      satisfy these conditions, can be treated as verbatim copying in
19154      other respects.
19156      If the required texts for either cover are too voluminous to fit
19157      legibly, you should put the first ones listed (as many as fit
19158      reasonably) on the actual cover, and continue the rest onto
19159      adjacent pages.
19161      If you publish or distribute Opaque copies of the Document
19162      numbering more than 100, you must either include a
19163      machine-readable Transparent copy along with each Opaque copy, or
19164      state in or with each Opaque copy a computer-network location from
19165      which the general network-using public has access to download
19166      using public-standard network protocols a complete Transparent
19167      copy of the Document, free of added material.  If you use the
19168      latter option, you must take reasonably prudent steps, when you
19169      begin distribution of Opaque copies in quantity, to ensure that
19170      this Transparent copy will remain thus accessible at the stated
19171      location until at least one year after the last time you
19172      distribute an Opaque copy (directly or through your agents or
19173      retailers) of that edition to the public.
19175      It is requested, but not required, that you contact the authors of
19176      the Document well before redistributing any large number of
19177      copies, to give them a chance to provide you with an updated
19178      version of the Document.
19180   4. MODIFICATIONS
19182      You may copy and distribute a Modified Version of the Document
19183      under the conditions of sections 2 and 3 above, provided that you
19184      release the Modified Version under precisely this License, with
19185      the Modified Version filling the role of the Document, thus
19186      licensing distribution and modification of the Modified Version to
19187      whoever possesses a copy of it.  In addition, you must do these
19188      things in the Modified Version:
19190        A. Use in the Title Page (and on the covers, if any) a title
19191           distinct from that of the Document, and from those of
19192           previous versions (which should, if there were any, be listed
19193           in the History section of the Document).  You may use the
19194           same title as a previous version if the original publisher of
19195           that version gives permission.
19197        B. List on the Title Page, as authors, one or more persons or
19198           entities responsible for authorship of the modifications in
19199           the Modified Version, together with at least five of the
19200           principal authors of the Document (all of its principal
19201           authors, if it has fewer than five), unless they release you
19202           from this requirement.
19204        C. State on the Title page the name of the publisher of the
19205           Modified Version, as the publisher.
19207        D. Preserve all the copyright notices of the Document.
19209        E. Add an appropriate copyright notice for your modifications
19210           adjacent to the other copyright notices.
19212        F. Include, immediately after the copyright notices, a license
19213           notice giving the public permission to use the Modified
19214           Version under the terms of this License, in the form shown in
19215           the Addendum below.
19217        G. Preserve in that license notice the full lists of Invariant
19218           Sections and required Cover Texts given in the Document's
19219           license notice.
19221        H. Include an unaltered copy of this License.
19223        I. Preserve the section Entitled "History", Preserve its Title,
19224           and add to it an item stating at least the title, year, new
19225           authors, and publisher of the Modified Version as given on
19226           the Title Page.  If there is no section Entitled "History" in
19227           the Document, create one stating the title, year, authors,
19228           and publisher of the Document as given on its Title Page,
19229           then add an item describing the Modified Version as stated in
19230           the previous sentence.
19232        J. Preserve the network location, if any, given in the Document
19233           for public access to a Transparent copy of the Document, and
19234           likewise the network locations given in the Document for
19235           previous versions it was based on.  These may be placed in
19236           the "History" section.  You may omit a network location for a
19237           work that was published at least four years before the
19238           Document itself, or if the original publisher of the version
19239           it refers to gives permission.
19241        K. For any section Entitled "Acknowledgements" or "Dedications",
19242           Preserve the Title of the section, and preserve in the
19243           section all the substance and tone of each of the contributor
19244           acknowledgements and/or dedications given therein.
19246        L. Preserve all the Invariant Sections of the Document,
19247           unaltered in their text and in their titles.  Section numbers
19248           or the equivalent are not considered part of the section
19249           titles.
19251        M. Delete any section Entitled "Endorsements".  Such a section
19252           may not be included in the Modified Version.
19254        N. Do not retitle any existing section to be Entitled
19255           "Endorsements" or to conflict in title with any Invariant
19256           Section.
19258        O. Preserve any Warranty Disclaimers.
19260      If the Modified Version includes new front-matter sections or
19261      appendices that qualify as Secondary Sections and contain no
19262      material copied from the Document, you may at your option
19263      designate some or all of these sections as invariant.  To do this,
19264      add their titles to the list of Invariant Sections in the Modified
19265      Version's license notice.  These titles must be distinct from any
19266      other section titles.
19268      You may add a section Entitled "Endorsements", provided it contains
19269      nothing but endorsements of your Modified Version by various
19270      parties--for example, statements of peer review or that the text
19271      has been approved by an organization as the authoritative
19272      definition of a standard.
19274      You may add a passage of up to five words as a Front-Cover Text,
19275      and a passage of up to 25 words as a Back-Cover Text, to the end
19276      of the list of Cover Texts in the Modified Version.  Only one
19277      passage of Front-Cover Text and one of Back-Cover Text may be
19278      added by (or through arrangements made by) any one entity.  If the
19279      Document already includes a cover text for the same cover,
19280      previously added by you or by arrangement made by the same entity
19281      you are acting on behalf of, you may not add another; but you may
19282      replace the old one, on explicit permission from the previous
19283      publisher that added the old one.
19285      The author(s) and publisher(s) of the Document do not by this
19286      License give permission to use their names for publicity for or to
19287      assert or imply endorsement of any Modified Version.
19289   5. COMBINING DOCUMENTS
19291      You may combine the Document with other documents released under
19292      this License, under the terms defined in section 4 above for
19293      modified versions, provided that you include in the combination
19294      all of the Invariant Sections of all of the original documents,
19295      unmodified, and list them all as Invariant Sections of your
19296      combined work in its license notice, and that you preserve all
19297      their Warranty Disclaimers.
19299      The combined work need only contain one copy of this License, and
19300      multiple identical Invariant Sections may be replaced with a single
19301      copy.  If there are multiple Invariant Sections with the same name
19302      but different contents, make the title of each such section unique
19303      by adding at the end of it, in parentheses, the name of the
19304      original author or publisher of that section if known, or else a
19305      unique number.  Make the same adjustment to the section titles in
19306      the list of Invariant Sections in the license notice of the
19307      combined work.
19309      In the combination, you must combine any sections Entitled
19310      "History" in the various original documents, forming one section
19311      Entitled "History"; likewise combine any sections Entitled
19312      "Acknowledgements", and any sections Entitled "Dedications".  You
19313      must delete all sections Entitled "Endorsements."
19315   6. COLLECTIONS OF DOCUMENTS
19317      You may make a collection consisting of the Document and other
19318      documents released under this License, and replace the individual
19319      copies of this License in the various documents with a single copy
19320      that is included in the collection, provided that you follow the
19321      rules of this License for verbatim copying of each of the
19322      documents in all other respects.
19324      You may extract a single document from such a collection, and
19325      distribute it individually under this License, provided you insert
19326      a copy of this License into the extracted document, and follow
19327      this License in all other respects regarding verbatim copying of
19328      that document.
19330   7. AGGREGATION WITH INDEPENDENT WORKS
19332      A compilation of the Document or its derivatives with other
19333      separate and independent documents or works, in or on a volume of
19334      a storage or distribution medium, is called an "aggregate" if the
19335      copyright resulting from the compilation is not used to limit the
19336      legal rights of the compilation's users beyond what the individual
19337      works permit.  When the Document is included in an aggregate, this
19338      License does not apply to the other works in the aggregate which
19339      are not themselves derivative works of the Document.
19341      If the Cover Text requirement of section 3 is applicable to these
19342      copies of the Document, then if the Document is less than one half
19343      of the entire aggregate, the Document's Cover Texts may be placed
19344      on covers that bracket the Document within the aggregate, or the
19345      electronic equivalent of covers if the Document is in electronic
19346      form.  Otherwise they must appear on printed covers that bracket
19347      the whole aggregate.
19349   8. TRANSLATION
19351      Translation is considered a kind of modification, so you may
19352      distribute translations of the Document under the terms of section
19353      4.  Replacing Invariant Sections with translations requires special
19354      permission from their copyright holders, but you may include
19355      translations of some or all Invariant Sections in addition to the
19356      original versions of these Invariant Sections.  You may include a
19357      translation of this License, and all the license notices in the
19358      Document, and any Warranty Disclaimers, provided that you also
19359      include the original English version of this License and the
19360      original versions of those notices and disclaimers.  In case of a
19361      disagreement between the translation and the original version of
19362      this License or a notice or disclaimer, the original version will
19363      prevail.
19365      If a section in the Document is Entitled "Acknowledgements",
19366      "Dedications", or "History", the requirement (section 4) to
19367      Preserve its Title (section 1) will typically require changing the
19368      actual title.
19370   9. TERMINATION
19372      You may not copy, modify, sublicense, or distribute the Document
19373      except as expressly provided under this License.  Any attempt
19374      otherwise to copy, modify, sublicense, or distribute it is void,
19375      and will automatically terminate your rights under this License.
19377      However, if you cease all violation of this License, then your
19378      license from a particular copyright holder is reinstated (a)
19379      provisionally, unless and until the copyright holder explicitly
19380      and finally terminates your license, and (b) permanently, if the
19381      copyright holder fails to notify you of the violation by some
19382      reasonable means prior to 60 days after the cessation.
19384      Moreover, your license from a particular copyright holder is
19385      reinstated permanently if the copyright holder notifies you of the
19386      violation by some reasonable means, this is the first time you have
19387      received notice of violation of this License (for any work) from
19388      that copyright holder, and you cure the violation prior to 30 days
19389      after your receipt of the notice.
19391      Termination of your rights under this section does not terminate
19392      the licenses of parties who have received copies or rights from
19393      you under this License.  If your rights have been terminated and
19394      not permanently reinstated, receipt of a copy of some or all of
19395      the same material does not give you any rights to use it.
19397  10. FUTURE REVISIONS OF THIS LICENSE
19399      The Free Software Foundation may publish new, revised versions of
19400      the GNU Free Documentation License from time to time.  Such new
19401      versions will be similar in spirit to the present version, but may
19402      differ in detail to address new problems or concerns.  See
19403      `http://www.gnu.org/copyleft/'.
19405      Each version of the License is given a distinguishing version
19406      number.  If the Document specifies that a particular numbered
19407      version of this License "or any later version" applies to it, you
19408      have the option of following the terms and conditions either of
19409      that specified version or of any later version that has been
19410      published (not as a draft) by the Free Software Foundation.  If
19411      the Document does not specify a version number of this License,
19412      you may choose any version ever published (not as a draft) by the
19413      Free Software Foundation.  If the Document specifies that a proxy
19414      can decide which future versions of this License can be used, that
19415      proxy's public statement of acceptance of a version permanently
19416      authorizes you to choose that version for the Document.
19418  11. RELICENSING
19420      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
19421      World Wide Web server that publishes copyrightable works and also
19422      provides prominent facilities for anybody to edit those works.  A
19423      public wiki that anybody can edit is an example of such a server.
19424      A "Massive Multiauthor Collaboration" (or "MMC") contained in the
19425      site means any set of copyrightable works thus published on the MMC
19426      site.
19428      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
19429      license published by Creative Commons Corporation, a not-for-profit
19430      corporation with a principal place of business in San Francisco,
19431      California, as well as future copyleft versions of that license
19432      published by that same organization.
19434      "Incorporate" means to publish or republish a Document, in whole or
19435      in part, as part of another Document.
19437      An MMC is "eligible for relicensing" if it is licensed under this
19438      License, and if all works that were first published under this
19439      License somewhere other than this MMC, and subsequently
19440      incorporated in whole or in part into the MMC, (1) had no cover
19441      texts or invariant sections, and (2) were thus incorporated prior
19442      to November 1, 2008.
19444      The operator of an MMC Site may republish an MMC contained in the
19445      site under CC-BY-SA on the same site at any time before August 1,
19446      2009, provided the MMC is eligible for relicensing.
19449 ADDENDUM: How to use this License for your documents
19450 ====================================================
19452 To use this License in a document you have written, include a copy of
19453 the License in the document and put the following copyright and license
19454 notices just after the title page:
19456        Copyright (C)  YEAR  YOUR NAME.
19457        Permission is granted to copy, distribute and/or modify this document
19458        under the terms of the GNU Free Documentation License, Version 1.3
19459        or any later version published by the Free Software Foundation;
19460        with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
19461        Texts.  A copy of the license is included in the section entitled ``GNU
19462        Free Documentation License''.
19464    If you have Invariant Sections, Front-Cover Texts and Back-Cover
19465 Texts, replace the "with...Texts." line with this:
19467          with the Invariant Sections being LIST THEIR TITLES, with
19468          the Front-Cover Texts being LIST, and with the Back-Cover Texts
19469          being LIST.
19471    If you have Invariant Sections without Cover Texts, or some other
19472 combination of the three, merge those two alternatives to suit the
19473 situation.
19475    If your document contains nontrivial examples of program code, we
19476 recommend releasing these examples in parallel under your choice of
19477 free software license, such as the GNU General Public License, to
19478 permit their use in free software.
19480 \x1f
19481 File: as.info,  Node: AS Index,  Prev: GNU Free Documentation License,  Up: Top
19483 AS Index
19484 ********
19486 \0\b[index\0\b]
19487 * Menu:
19489 * #:                                     Comments.            (line  39)
19490 * #APP:                                  Preprocessing.       (line  27)
19491 * #NO_APP:                               Preprocessing.       (line  27)
19492 * $ in symbol names <1>:                 D30V-Chars.          (line  63)
19493 * $ in symbol names <2>:                 SH64-Chars.          (line  10)
19494 * $ in symbol names <3>:                 D10V-Chars.          (line  46)
19495 * $ in symbol names:                     SH-Chars.            (line  10)
19496 * $a:                                    ARM Mapping Symbols. (line   9)
19497 * $acos math builtin, TIC54X:            TIC54X-Builtins.     (line  10)
19498 * $asin math builtin, TIC54X:            TIC54X-Builtins.     (line  13)
19499 * $atan math builtin, TIC54X:            TIC54X-Builtins.     (line  16)
19500 * $atan2 math builtin, TIC54X:           TIC54X-Builtins.     (line  19)
19501 * $ceil math builtin, TIC54X:            TIC54X-Builtins.     (line  22)
19502 * $cos math builtin, TIC54X:             TIC54X-Builtins.     (line  28)
19503 * $cosh math builtin, TIC54X:            TIC54X-Builtins.     (line  25)
19504 * $cvf math builtin, TIC54X:             TIC54X-Builtins.     (line  31)
19505 * $cvi math builtin, TIC54X:             TIC54X-Builtins.     (line  34)
19506 * $d:                                    ARM Mapping Symbols. (line  15)
19507 * $exp math builtin, TIC54X:             TIC54X-Builtins.     (line  37)
19508 * $fabs math builtin, TIC54X:            TIC54X-Builtins.     (line  40)
19509 * $firstch subsym builtin, TIC54X:       TIC54X-Macros.       (line  26)
19510 * $floor math builtin, TIC54X:           TIC54X-Builtins.     (line  43)
19511 * $fmod math builtin, TIC54X:            TIC54X-Builtins.     (line  47)
19512 * $int math builtin, TIC54X:             TIC54X-Builtins.     (line  50)
19513 * $iscons subsym builtin, TIC54X:        TIC54X-Macros.       (line  43)
19514 * $isdefed subsym builtin, TIC54X:       TIC54X-Macros.       (line  34)
19515 * $ismember subsym builtin, TIC54X:      TIC54X-Macros.       (line  38)
19516 * $isname subsym builtin, TIC54X:        TIC54X-Macros.       (line  47)
19517 * $isreg subsym builtin, TIC54X:         TIC54X-Macros.       (line  50)
19518 * $lastch subsym builtin, TIC54X:        TIC54X-Macros.       (line  30)
19519 * $ldexp math builtin, TIC54X:           TIC54X-Builtins.     (line  53)
19520 * $log math builtin, TIC54X:             TIC54X-Builtins.     (line  59)
19521 * $log10 math builtin, TIC54X:           TIC54X-Builtins.     (line  56)
19522 * $max math builtin, TIC54X:             TIC54X-Builtins.     (line  62)
19523 * $min math builtin, TIC54X:             TIC54X-Builtins.     (line  65)
19524 * $pow math builtin, TIC54X:             TIC54X-Builtins.     (line  68)
19525 * $round math builtin, TIC54X:           TIC54X-Builtins.     (line  71)
19526 * $sgn math builtin, TIC54X:             TIC54X-Builtins.     (line  74)
19527 * $sin math builtin, TIC54X:             TIC54X-Builtins.     (line  77)
19528 * $sinh math builtin, TIC54X:            TIC54X-Builtins.     (line  80)
19529 * $sqrt math builtin, TIC54X:            TIC54X-Builtins.     (line  83)
19530 * $structacc subsym builtin, TIC54X:     TIC54X-Macros.       (line  57)
19531 * $structsz subsym builtin, TIC54X:      TIC54X-Macros.       (line  54)
19532 * $symcmp subsym builtin, TIC54X:        TIC54X-Macros.       (line  23)
19533 * $symlen subsym builtin, TIC54X:        TIC54X-Macros.       (line  20)
19534 * $t:                                    ARM Mapping Symbols. (line  12)
19535 * $tan math builtin, TIC54X:             TIC54X-Builtins.     (line  86)
19536 * $tanh math builtin, TIC54X:            TIC54X-Builtins.     (line  89)
19537 * $trunc math builtin, TIC54X:           TIC54X-Builtins.     (line  92)
19538 * -+ option, VAX/VMS:                    VAX-Opts.            (line  71)
19539 * --:                                    Command Line.        (line  10)
19540 * --32 option, i386:                     i386-Options.        (line   8)
19541 * --32 option, x86-64:                   i386-Options.        (line   8)
19542 * --64 option, i386:                     i386-Options.        (line   8)
19543 * --64 option, x86-64:                   i386-Options.        (line   8)
19544 * --absolute-literals:                   Xtensa Options.      (line  23)
19545 * --allow-reg-prefix:                    SH Options.          (line   9)
19546 * --alternate:                           alternate.           (line   6)
19547 * --base-size-default-16:                M68K-Opts.           (line  71)
19548 * --base-size-default-32:                M68K-Opts.           (line  71)
19549 * --big:                                 SH Options.          (line   9)
19550 * --bitwise-or option, M680x0:           M68K-Opts.           (line  64)
19551 * --disp-size-default-16:                M68K-Opts.           (line  80)
19552 * --disp-size-default-32:                M68K-Opts.           (line  80)
19553 * --divide option, i386:                 i386-Options.        (line  24)
19554 * --dsp:                                 SH Options.          (line   9)
19555 * --emulation=crisaout command line option, CRIS: CRIS-Opts.  (line   9)
19556 * --emulation=criself command line option, CRIS: CRIS-Opts.   (line   9)
19557 * --enforce-aligned-data:                Sparc-Aligned-Data.  (line  11)
19558 * --fatal-warnings:                      W.                   (line  16)
19559 * --fix-v4bx command line option, ARM:   ARM Options.         (line 143)
19560 * --fixed-special-register-names command line option, MMIX: MMIX-Opts.
19561                                                               (line   8)
19562 * --force-long-branches:                 M68HC11-Opts.        (line  69)
19563 * --generate-example:                    M68HC11-Opts.        (line  86)
19564 * --globalize-symbols command line option, MMIX: MMIX-Opts.   (line  12)
19565 * --gnu-syntax command line option, MMIX: MMIX-Opts.          (line  16)
19566 * --hash-size=NUMBER:                    Overview.            (line 326)
19567 * --linker-allocated-gregs command line option, MMIX: MMIX-Opts.
19568                                                               (line  67)
19569 * --listing-cont-lines:                  listing.             (line  34)
19570 * --listing-lhs-width:                   listing.             (line  16)
19571 * --listing-lhs-width2:                  listing.             (line  21)
19572 * --listing-rhs-width:                   listing.             (line  28)
19573 * --little:                              SH Options.          (line   9)
19574 * --longcalls:                           Xtensa Options.      (line  37)
19575 * --march=ARCHITECTURE command line option, CRIS: CRIS-Opts.  (line  33)
19576 * --MD:                                  MD.                  (line   6)
19577 * --mul-bug-abort command line option, CRIS: CRIS-Opts.       (line  61)
19578 * --no-absolute-literals:                Xtensa Options.      (line  23)
19579 * --no-expand command line option, MMIX: MMIX-Opts.           (line  31)
19580 * --no-longcalls:                        Xtensa Options.      (line  37)
19581 * --no-merge-gregs command line option, MMIX: MMIX-Opts.      (line  36)
19582 * --no-mul-bug-abort command line option, CRIS: CRIS-Opts.    (line  61)
19583 * --no-predefined-syms command line option, MMIX: MMIX-Opts.  (line  22)
19584 * --no-pushj-stubs command line option, MMIX: MMIX-Opts.      (line  54)
19585 * --no-stubs command line option, MMIX:  MMIX-Opts.           (line  54)
19586 * --no-target-align:                     Xtensa Options.      (line  30)
19587 * --no-text-section-literals:            Xtensa Options.      (line   9)
19588 * --no-transform:                        Xtensa Options.      (line  46)
19589 * --no-underscore command line option, CRIS: CRIS-Opts.       (line  15)
19590 * --no-warn:                             W.                   (line  11)
19591 * --pcrel:                               M68K-Opts.           (line  92)
19592 * --pic command line option, CRIS:       CRIS-Opts.           (line  27)
19593 * --print-insn-syntax:                   M68HC11-Opts.        (line  75)
19594 * --print-opcodes:                       M68HC11-Opts.        (line  79)
19595 * --register-prefix-optional option, M680x0: M68K-Opts.       (line  51)
19596 * --relax:                               SH Options.          (line   9)
19597 * --relax command line option, MMIX:     MMIX-Opts.           (line  19)
19598 * --rename-section:                      Xtensa Options.      (line  54)
19599 * --renesas:                             SH Options.          (line   9)
19600 * --short-branches:                      M68HC11-Opts.        (line  54)
19601 * --small:                               SH Options.          (line   9)
19602 * --statistics:                          statistics.          (line   6)
19603 * --strict-direct-mode:                  M68HC11-Opts.        (line  44)
19604 * --target-align:                        Xtensa Options.      (line  30)
19605 * --text-section-literals:               Xtensa Options.      (line   9)
19606 * --traditional-format:                  traditional-format.  (line   6)
19607 * --transform:                           Xtensa Options.      (line  46)
19608 * --underscore command line option, CRIS: CRIS-Opts.          (line  15)
19609 * --warn:                                W.                   (line  19)
19610 * -1 option, VAX/VMS:                    VAX-Opts.            (line  77)
19611 * -32addr command line option, Alpha:    Alpha Options.       (line  58)
19612 * -a:                                    a.                   (line   6)
19613 * -A options, i960:                      Options-i960.        (line   6)
19614 * -ac:                                   a.                   (line   6)
19615 * -ad:                                   a.                   (line   6)
19616 * -ag:                                   a.                   (line   6)
19617 * -ah:                                   a.                   (line   6)
19618 * -al:                                   a.                   (line   6)
19619 * -an:                                   a.                   (line   6)
19620 * -as:                                   a.                   (line   6)
19621 * -Asparclet:                            Sparc-Opts.          (line  25)
19622 * -Asparclite:                           Sparc-Opts.          (line  25)
19623 * -Av6:                                  Sparc-Opts.          (line  25)
19624 * -Av8:                                  Sparc-Opts.          (line  25)
19625 * -Av9:                                  Sparc-Opts.          (line  25)
19626 * -Av9a:                                 Sparc-Opts.          (line  25)
19627 * -b option, i960:                       Options-i960.        (line  22)
19628 * -big option, M32R:                     M32R-Opts.           (line  35)
19629 * -D:                                    D.                   (line   6)
19630 * -D, ignored on VAX:                    VAX-Opts.            (line  11)
19631 * -d, VAX option:                        VAX-Opts.            (line  16)
19632 * -eabi= command line option, ARM:       ARM Options.         (line 126)
19633 * -EB command line option, ARC:          ARC Options.         (line  31)
19634 * -EB command line option, ARM:          ARM Options.         (line 131)
19635 * -EB option (MIPS):                     MIPS Opts.           (line  13)
19636 * -EB option, M32R:                      M32R-Opts.           (line  39)
19637 * -EL command line option, ARC:          ARC Options.         (line  35)
19638 * -EL command line option, ARM:          ARM Options.         (line 135)
19639 * -EL option (MIPS):                     MIPS Opts.           (line  13)
19640 * -EL option, M32R:                      M32R-Opts.           (line  32)
19641 * -f:                                    f.                   (line   6)
19642 * -F command line option, Alpha:         Alpha Options.       (line  58)
19643 * -G command line option, Alpha:         Alpha Options.       (line  54)
19644 * -g command line option, Alpha:         Alpha Options.       (line  48)
19645 * -G option (MIPS):                      MIPS Opts.           (line   8)
19646 * -H option, VAX/VMS:                    VAX-Opts.            (line  81)
19647 * -h option, VAX/VMS:                    VAX-Opts.            (line  45)
19648 * -I PATH:                               I.                   (line   6)
19649 * -ignore-parallel-conflicts option, M32RX: M32R-Opts.        (line  87)
19650 * -Ip option, M32RX:                     M32R-Opts.           (line  97)
19651 * -J, ignored on VAX:                    VAX-Opts.            (line  27)
19652 * -K:                                    K.                   (line   6)
19653 * -k command line option, ARM:           ARM Options.         (line 139)
19654 * -KPIC option, M32R:                    M32R-Opts.           (line  42)
19655 * -KPIC option, MIPS:                    MIPS Opts.           (line  21)
19656 * -L:                                    L.                   (line   6)
19657 * -l option, M680x0:                     M68K-Opts.           (line  39)
19658 * -little option, M32R:                  M32R-Opts.           (line  27)
19659 * -M:                                    M.                   (line   6)
19660 * -m11/03:                               PDP-11-Options.      (line 140)
19661 * -m11/04:                               PDP-11-Options.      (line 143)
19662 * -m11/05:                               PDP-11-Options.      (line 146)
19663 * -m11/10:                               PDP-11-Options.      (line 146)
19664 * -m11/15:                               PDP-11-Options.      (line 149)
19665 * -m11/20:                               PDP-11-Options.      (line 149)
19666 * -m11/21:                               PDP-11-Options.      (line 152)
19667 * -m11/23:                               PDP-11-Options.      (line 155)
19668 * -m11/24:                               PDP-11-Options.      (line 155)
19669 * -m11/34:                               PDP-11-Options.      (line 158)
19670 * -m11/34a:                              PDP-11-Options.      (line 161)
19671 * -m11/35:                               PDP-11-Options.      (line 164)
19672 * -m11/40:                               PDP-11-Options.      (line 164)
19673 * -m11/44:                               PDP-11-Options.      (line 167)
19674 * -m11/45:                               PDP-11-Options.      (line 170)
19675 * -m11/50:                               PDP-11-Options.      (line 170)
19676 * -m11/53:                               PDP-11-Options.      (line 173)
19677 * -m11/55:                               PDP-11-Options.      (line 170)
19678 * -m11/60:                               PDP-11-Options.      (line 176)
19679 * -m11/70:                               PDP-11-Options.      (line 170)
19680 * -m11/73:                               PDP-11-Options.      (line 173)
19681 * -m11/83:                               PDP-11-Options.      (line 173)
19682 * -m11/84:                               PDP-11-Options.      (line 173)
19683 * -m11/93:                               PDP-11-Options.      (line 173)
19684 * -m11/94:                               PDP-11-Options.      (line 173)
19685 * -m16c option, M16C:                    M32C-Opts.           (line  12)
19686 * -m31 option, s390:                     s390 Options.        (line   8)
19687 * -m32c option, M32C:                    M32C-Opts.           (line   9)
19688 * -m32r option, M32R:                    M32R-Opts.           (line  21)
19689 * -m32rx option, M32R2:                  M32R-Opts.           (line  17)
19690 * -m32rx option, M32RX:                  M32R-Opts.           (line   9)
19691 * -m64 option, s390:                     s390 Options.        (line   8)
19692 * -m68000 and related options:           M68K-Opts.           (line 104)
19693 * -m68hc11:                              M68HC11-Opts.        (line   9)
19694 * -m68hc12:                              M68HC11-Opts.        (line  14)
19695 * -m68hcs12:                             M68HC11-Opts.        (line  21)
19696 * -m[no-]68851 command line option, M680x0: M68K-Opts.        (line  21)
19697 * -m[no-]68881 command line option, M680x0: M68K-Opts.        (line  21)
19698 * -m[no-]div command line option, M680x0: M68K-Opts.          (line  21)
19699 * -m[no-]emac command line option, M680x0: M68K-Opts.         (line  21)
19700 * -m[no-]float command line option, M680x0: M68K-Opts.        (line  21)
19701 * -m[no-]mac command line option, M680x0: M68K-Opts.          (line  21)
19702 * -m[no-]usp command line option, M680x0: M68K-Opts.          (line  21)
19703 * -mall:                                 PDP-11-Options.      (line  26)
19704 * -mall-enabled command line option, LM32: LM32 Options.      (line  30)
19705 * -mall-extensions:                      PDP-11-Options.      (line  26)
19706 * -mall-opcodes command line option, AVR: AVR Options.        (line  62)
19707 * -mapcs command line option, ARM:       ARM Options.         (line  99)
19708 * -mapcs-float command line option, ARM: ARM Options.         (line 112)
19709 * -mapcs-reentrant command line option, ARM: ARM Options.     (line 117)
19710 * -marc[5|6|7|8] command line option, ARC: ARC Options.       (line   6)
19711 * -march= command line option, ARM:      ARM Options.         (line  40)
19712 * -march= command line option, M680x0:   M68K-Opts.           (line   8)
19713 * -march= option, i386:                  i386-Options.        (line  31)
19714 * -march= option, s390:                  s390 Options.        (line  25)
19715 * -march= option, x86-64:                i386-Options.        (line  31)
19716 * -matpcs command line option, ARM:      ARM Options.         (line 104)
19717 * -mbarrel-shift-enabled command line option, LM32: LM32 Options.
19718                                                               (line  12)
19719 * -mbreak-enabled command line option, LM32: LM32 Options.    (line  27)
19720 * -mcis:                                 PDP-11-Options.      (line  32)
19721 * -mconstant-gp command line option, IA-64: IA-64 Options.    (line   6)
19722 * -mCPU command line option, Alpha:      Alpha Options.       (line   6)
19723 * -mcpu option, cpu:                     TIC54X-Opts.         (line  15)
19724 * -mcpu= command line option, ARM:       ARM Options.         (line   6)
19725 * -mcpu= command line option, Blackfin:  Blackfin Options.    (line   6)
19726 * -mcpu= command line option, M680x0:    M68K-Opts.           (line  14)
19727 * -mcsm:                                 PDP-11-Options.      (line  43)
19728 * -mdcache-enabled command line option, LM32: LM32 Options.   (line  24)
19729 * -mdebug command line option, Alpha:    Alpha Options.       (line  25)
19730 * -mdivide-enabled command line option, LM32: LM32 Options.   (line   9)
19731 * -me option, stderr redirect:           TIC54X-Opts.         (line  20)
19732 * -meis:                                 PDP-11-Options.      (line  46)
19733 * -merrors-to-file option, stderr redirect: TIC54X-Opts.      (line  20)
19734 * -mesa option, s390:                    s390 Options.        (line  17)
19735 * -mf option, far-mode:                  TIC54X-Opts.         (line   8)
19736 * -mf11:                                 PDP-11-Options.      (line 122)
19737 * -mfar-mode option, far-mode:           TIC54X-Opts.         (line   8)
19738 * -mfis:                                 PDP-11-Options.      (line  51)
19739 * -mfloat-abi= command line option, ARM: ARM Options.         (line 121)
19740 * -mfp-11:                               PDP-11-Options.      (line  56)
19741 * -mfpp:                                 PDP-11-Options.      (line  56)
19742 * -mfpu:                                 PDP-11-Options.      (line  56)
19743 * -mfpu= command line option, ARM:       ARM Options.         (line  55)
19744 * -micache-enabled command line option, LM32: LM32 Options.   (line  21)
19745 * -mimplicit-it command line option, ARM: ARM Options.        (line  83)
19746 * -mip2022 option, IP2K:                 IP2K-Opts.           (line  14)
19747 * -mip2022ext option, IP2022:            IP2K-Opts.           (line   9)
19748 * -mj11:                                 PDP-11-Options.      (line 126)
19749 * -mka11:                                PDP-11-Options.      (line  92)
19750 * -mkb11:                                PDP-11-Options.      (line  95)
19751 * -mkd11a:                               PDP-11-Options.      (line  98)
19752 * -mkd11b:                               PDP-11-Options.      (line 101)
19753 * -mkd11d:                               PDP-11-Options.      (line 104)
19754 * -mkd11e:                               PDP-11-Options.      (line 107)
19755 * -mkd11f:                               PDP-11-Options.      (line 110)
19756 * -mkd11h:                               PDP-11-Options.      (line 110)
19757 * -mkd11k:                               PDP-11-Options.      (line 114)
19758 * -mkd11q:                               PDP-11-Options.      (line 110)
19759 * -mkd11z:                               PDP-11-Options.      (line 118)
19760 * -mkev11:                               PDP-11-Options.      (line  51)
19761 * -mlimited-eis:                         PDP-11-Options.      (line  64)
19762 * -mlong:                                M68HC11-Opts.        (line  32)
19763 * -mlong-double:                         M68HC11-Opts.        (line  40)
19764 * -mmcu= command line option, AVR:       AVR Options.         (line   6)
19765 * -mmfpt:                                PDP-11-Options.      (line  70)
19766 * -mmicrocode:                           PDP-11-Options.      (line  83)
19767 * -mmnemonic= option, i386:              i386-Options.        (line  80)
19768 * -mmnemonic= option, x86-64:            i386-Options.        (line  80)
19769 * -mmultiply-enabled command line option, LM32: LM32 Options. (line   6)
19770 * -mmutiproc:                            PDP-11-Options.      (line  73)
19771 * -mmxps:                                PDP-11-Options.      (line  77)
19772 * -mnaked-reg option, i386:              i386-Options.        (line  94)
19773 * -mnaked-reg option, x86-64:            i386-Options.        (line  94)
19774 * -mno-cis:                              PDP-11-Options.      (line  32)
19775 * -mno-csm:                              PDP-11-Options.      (line  43)
19776 * -mno-eis:                              PDP-11-Options.      (line  46)
19777 * -mno-extensions:                       PDP-11-Options.      (line  29)
19778 * -mno-fis:                              PDP-11-Options.      (line  51)
19779 * -mno-fp-11:                            PDP-11-Options.      (line  56)
19780 * -mno-fpp:                              PDP-11-Options.      (line  56)
19781 * -mno-fpu:                              PDP-11-Options.      (line  56)
19782 * -mno-kev11:                            PDP-11-Options.      (line  51)
19783 * -mno-limited-eis:                      PDP-11-Options.      (line  64)
19784 * -mno-mfpt:                             PDP-11-Options.      (line  70)
19785 * -mno-microcode:                        PDP-11-Options.      (line  83)
19786 * -mno-mutiproc:                         PDP-11-Options.      (line  73)
19787 * -mno-mxps:                             PDP-11-Options.      (line  77)
19788 * -mno-pic:                              PDP-11-Options.      (line  11)
19789 * -mno-regnames option, s390:            s390 Options.        (line  35)
19790 * -mno-skip-bug command line option, AVR: AVR Options.        (line  65)
19791 * -mno-spl:                              PDP-11-Options.      (line  80)
19792 * -mno-sym32:                            MIPS Opts.           (line 189)
19793 * -mno-wrap command line option, AVR:    AVR Options.         (line  68)
19794 * -mpic:                                 PDP-11-Options.      (line  11)
19795 * -mregnames option, s390:               s390 Options.        (line  32)
19796 * -mrelax command line option, V850:     V850 Options.        (line  51)
19797 * -mshort:                               M68HC11-Opts.        (line  27)
19798 * -mshort-double:                        M68HC11-Opts.        (line  36)
19799 * -msign-extend-enabled command line option, LM32: LM32 Options.
19800                                                               (line  15)
19801 * -mspl:                                 PDP-11-Options.      (line  80)
19802 * -msse-check= option, i386:             i386-Options.        (line  68)
19803 * -msse-check= option, x86-64:           i386-Options.        (line  68)
19804 * -msse2avx option, i386:                i386-Options.        (line  64)
19805 * -msse2avx option, x86-64:              i386-Options.        (line  64)
19806 * -msym32:                               MIPS Opts.           (line 189)
19807 * -msyntax= option, i386:                i386-Options.        (line  87)
19808 * -msyntax= option, x86-64:              i386-Options.        (line  87)
19809 * -mt11:                                 PDP-11-Options.      (line 130)
19810 * -mthumb command line option, ARM:      ARM Options.         (line  74)
19811 * -mthumb-interwork command line option, ARM: ARM Options.    (line  79)
19812 * -mtune= option, i386:                  i386-Options.        (line  56)
19813 * -mtune= option, x86-64:                i386-Options.        (line  56)
19814 * -muser-enabled command line option, LM32: LM32 Options.     (line  18)
19815 * -mv850 command line option, V850:      V850 Options.        (line  23)
19816 * -mv850any command line option, V850:   V850 Options.        (line  41)
19817 * -mv850e command line option, V850:     V850 Options.        (line  29)
19818 * -mv850e1 command line option, V850:    V850 Options.        (line  35)
19819 * -mvxworks-pic option, MIPS:            MIPS Opts.           (line  26)
19820 * -mwarn-areg-zero option, s390:         s390 Options.        (line  38)
19821 * -mwarn-deprecated command line option, ARM: ARM Options.    (line 147)
19822 * -mzarch option, s390:                  s390 Options.        (line  17)
19823 * -N command line option, CRIS:          CRIS-Opts.           (line  57)
19824 * -nIp option, M32RX:                    M32R-Opts.           (line 101)
19825 * -no-bitinst, M32R2:                    M32R-Opts.           (line  54)
19826 * -no-ignore-parallel-conflicts option, M32RX: M32R-Opts.     (line  93)
19827 * -no-mdebug command line option, Alpha: Alpha Options.       (line  25)
19828 * -no-parallel option, M32RX:            M32R-Opts.           (line  51)
19829 * -no-relax option, i960:                Options-i960.        (line  66)
19830 * -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts.
19831                                                               (line  79)
19832 * -no-warn-unmatched-high option, M32R:  M32R-Opts.           (line 111)
19833 * -nocpp ignored (MIPS):                 MIPS Opts.           (line 192)
19834 * -noreplace command line option, Alpha: Alpha Options.       (line  40)
19835 * -o:                                    o.                   (line   6)
19836 * -O option, M32RX:                      M32R-Opts.           (line  59)
19837 * -parallel option, M32RX:               M32R-Opts.           (line  46)
19838 * -R:                                    R.                   (line   6)
19839 * -r800 command line option, Z80:        Z80 Options.         (line  41)
19840 * -relax command line option, Alpha:     Alpha Options.       (line  32)
19841 * -replace command line option, Alpha:   Alpha Options.       (line  40)
19842 * -S, ignored on VAX:                    VAX-Opts.            (line  11)
19843 * -t, ignored on VAX:                    VAX-Opts.            (line  36)
19844 * -T, ignored on VAX:                    VAX-Opts.            (line  11)
19845 * -v:                                    v.                   (line   6)
19846 * -V, redundant on VAX:                  VAX-Opts.            (line  22)
19847 * -version:                              v.                   (line   6)
19848 * -W:                                    W.                   (line  11)
19849 * -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts. (line  65)
19850 * -warn-unmatched-high option, M32R:     M32R-Opts.           (line 105)
19851 * -Wnp option, M32RX:                    M32R-Opts.           (line  83)
19852 * -Wnuh option, M32RX:                   M32R-Opts.           (line 117)
19853 * -Wp option, M32RX:                     M32R-Opts.           (line  75)
19854 * -wsigned_overflow command line option, V850: V850 Options.  (line   9)
19855 * -Wuh option, M32RX:                    M32R-Opts.           (line 114)
19856 * -wunsigned_overflow command line option, V850: V850 Options.
19857                                                               (line  16)
19858 * -x command line option, MMIX:          MMIX-Opts.           (line  44)
19859 * -z80 command line option, Z80:         Z80 Options.         (line   8)
19860 * -z8001 command line option, Z8000:     Z8000 Options.       (line   6)
19861 * -z8002 command line option, Z8000:     Z8000 Options.       (line   9)
19862 * . (symbol):                            Dot.                 (line   6)
19863 * .2byte directive, ARM:                 ARM Directives.      (line   6)
19864 * .4byte directive, ARM:                 ARM Directives.      (line   6)
19865 * .8byte directive, ARM:                 ARM Directives.      (line   6)
19866 * .align directive, ARM:                 ARM Directives.      (line  11)
19867 * .arch directive, ARM:                  ARM Directives.      (line  18)
19868 * .arm directive, ARM:                   ARM Directives.      (line  22)
19869 * .big directive, M32RX:                 M32R-Directives.     (line  88)
19870 * .bss directive, ARM:                   ARM Directives.      (line  30)
19871 * .cantunwind directive, ARM:            ARM Directives.      (line  33)
19872 * .code directive, ARM:                  ARM Directives.      (line  37)
19873 * .cpu directive, ARM:                   ARM Directives.      (line  41)
19874 * .dn and .qn directives, ARM:           ARM Directives.      (line  45)
19875 * .eabi_attribute directive, ARM:        ARM Directives.      (line  69)
19876 * .even directive, ARM:                  ARM Directives.      (line  93)
19877 * .extend directive, ARM:                ARM Directives.      (line  96)
19878 * .fnend directive, ARM:                 ARM Directives.      (line 102)
19879 * .fnstart directive, ARM:               ARM Directives.      (line 111)
19880 * .force_thumb directive, ARM:           ARM Directives.      (line 114)
19881 * .fpu directive, ARM:                   ARM Directives.      (line 118)
19882 * .global:                               MIPS insn.           (line  12)
19883 * .handlerdata directive, ARM:           ARM Directives.      (line 122)
19884 * .insn:                                 MIPS insn.           (line   6)
19885 * .insn directive, s390:                 s390 Directives.     (line  11)
19886 * .inst directive, ARM:                  ARM Directives.      (line 131)
19887 * .ldouble directive, ARM:               ARM Directives.      (line  96)
19888 * .little directive, M32RX:              M32R-Directives.     (line  82)
19889 * .long directive, s390:                 s390 Directives.     (line  16)
19890 * .ltorg directive, ARM:                 ARM Directives.      (line 143)
19891 * .ltorg directive, s390:                s390 Directives.     (line  88)
19892 * .m32r directive, M32R:                 M32R-Directives.     (line  66)
19893 * .m32r2 directive, M32R2:               M32R-Directives.     (line  77)
19894 * .m32rx directive, M32RX:               M32R-Directives.     (line  72)
19895 * .movsp directive, ARM:                 ARM Directives.      (line 157)
19896 * .o:                                    Object.              (line   6)
19897 * .object_arch directive, ARM:           ARM Directives.      (line 162)
19898 * .packed directive, ARM:                ARM Directives.      (line 168)
19899 * .pad directive, ARM:                   ARM Directives.      (line  25)
19900 * .param on HPPA:                        HPPA Directives.     (line  19)
19901 * .personality directive, ARM:           ARM Directives.      (line 178)
19902 * .personalityindex directive, ARM:      ARM Directives.      (line 181)
19903 * .pool directive, ARM:                  ARM Directives.      (line 185)
19904 * .quad directive, s390:                 s390 Directives.     (line  16)
19905 * .req directive, ARM:                   ARM Directives.      (line 188)
19906 * .save directive, ARM:                  ARM Directives.      (line 193)
19907 * .secrel32 directive, ARM:              ARM Directives.      (line 231)
19908 * .set arch=CPU:                         MIPS ISA.            (line  18)
19909 * .set autoextend:                       MIPS autoextend.     (line   6)
19910 * .set doublefloat:                      MIPS floating-point. (line  12)
19911 * .set dsp:                              MIPS ASE instruction generation overrides.
19912                                                               (line  21)
19913 * .set dspr2:                            MIPS ASE instruction generation overrides.
19914                                                               (line  26)
19915 * .set hardfloat:                        MIPS floating-point. (line   6)
19916 * .set mdmx:                             MIPS ASE instruction generation overrides.
19917                                                               (line  16)
19918 * .set mips3d:                           MIPS ASE instruction generation overrides.
19919                                                               (line   6)
19920 * .set mipsN:                            MIPS ISA.            (line   6)
19921 * .set mt:                               MIPS ASE instruction generation overrides.
19922                                                               (line  32)
19923 * .set noautoextend:                     MIPS autoextend.     (line   6)
19924 * .set nodsp:                            MIPS ASE instruction generation overrides.
19925                                                               (line  21)
19926 * .set nodspr2:                          MIPS ASE instruction generation overrides.
19927                                                               (line  26)
19928 * .set nomdmx:                           MIPS ASE instruction generation overrides.
19929                                                               (line  16)
19930 * .set nomips3d:                         MIPS ASE instruction generation overrides.
19931                                                               (line   6)
19932 * .set nomt:                             MIPS ASE instruction generation overrides.
19933                                                               (line  32)
19934 * .set nosmartmips:                      MIPS ASE instruction generation overrides.
19935                                                               (line  11)
19936 * .set nosym32:                          MIPS symbol sizes.   (line   6)
19937 * .set pop:                              MIPS option stack.   (line   6)
19938 * .set push:                             MIPS option stack.   (line   6)
19939 * .set singlefloat:                      MIPS floating-point. (line  12)
19940 * .set smartmips:                        MIPS ASE instruction generation overrides.
19941                                                               (line  11)
19942 * .set softfloat:                        MIPS floating-point. (line   6)
19943 * .set sym32:                            MIPS symbol sizes.   (line   6)
19944 * .setfp directive, ARM:                 ARM Directives.      (line 217)
19945 * .short directive, s390:                s390 Directives.     (line  16)
19946 * .syntax directive, ARM:                ARM Directives.      (line 236)
19947 * .thumb directive, ARM:                 ARM Directives.      (line 240)
19948 * .thumb_func directive, ARM:            ARM Directives.      (line 243)
19949 * .thumb_set directive, ARM:             ARM Directives.      (line 254)
19950 * .unreq directive, ARM:                 ARM Directives.      (line 261)
19951 * .unwind_raw directive, ARM:            ARM Directives.      (line 272)
19952 * .v850 directive, V850:                 V850 Directives.     (line  14)
19953 * .v850e directive, V850:                V850 Directives.     (line  20)
19954 * .v850e1 directive, V850:               V850 Directives.     (line  26)
19955 * .vsave directive, ARM:                 ARM Directives.      (line 279)
19956 * .z8001:                                Z8000 Directives.    (line  11)
19957 * .z8002:                                Z8000 Directives.    (line  15)
19958 * 16-bit code, i386:                     i386-16bit.          (line   6)
19959 * 2byte directive, ARC:                  ARC Directives.      (line   9)
19960 * 3byte directive, ARC:                  ARC Directives.      (line  12)
19961 * 3DNow!, i386:                          i386-SIMD.           (line   6)
19962 * 3DNow!, x86-64:                        i386-SIMD.           (line   6)
19963 * 430 support:                           MSP430-Dependent.    (line   6)
19964 * 4byte directive, ARC:                  ARC Directives.      (line  15)
19965 * : (label):                             Statements.          (line  30)
19966 * @word modifier, D10V:                  D10V-Word.           (line   6)
19967 * \" (doublequote character):            Strings.             (line  43)
19968 * \\ (\ character):                      Strings.             (line  40)
19969 * \b (backspace character):              Strings.             (line  15)
19970 * \DDD (octal character code):           Strings.             (line  30)
19971 * \f (formfeed character):               Strings.             (line  18)
19972 * \n (newline character):                Strings.             (line  21)
19973 * \r (carriage return character):        Strings.             (line  24)
19974 * \t (tab):                              Strings.             (line  27)
19975 * \XD... (hex character code):           Strings.             (line  36)
19976 * _ opcode prefix:                       Xtensa Opcodes.      (line   9)
19977 * a.out:                                 Object.              (line   6)
19978 * a.out symbol attributes:               a.out Symbols.       (line   6)
19979 * A_DIR environment variable, TIC54X:    TIC54X-Env.          (line   6)
19980 * ABI options, SH64:                     SH64 Options.        (line  29)
19981 * abort directive:                       Abort.               (line   6)
19982 * ABORT directive:                       ABORT (COFF).        (line   6)
19983 * absolute section:                      Ld Sections.         (line  29)
19984 * absolute-literals directive:           Absolute Literals Directive.
19985                                                               (line   6)
19986 * ADDI instructions, relaxation:         Xtensa Immediate Relaxation.
19987                                                               (line  43)
19988 * addition, permitted arguments:         Infix Ops.           (line  44)
19989 * addresses:                             Expressions.         (line   6)
19990 * addresses, format of:                  Secs Background.     (line  68)
19991 * addressing modes, D10V:                D10V-Addressing.     (line   6)
19992 * addressing modes, D30V:                D30V-Addressing.     (line   6)
19993 * addressing modes, H8/300:              H8/300-Addressing.   (line   6)
19994 * addressing modes, M680x0:              M68K-Syntax.         (line  21)
19995 * addressing modes, M68HC11:             M68HC11-Syntax.      (line  17)
19996 * addressing modes, SH:                  SH-Addressing.       (line   6)
19997 * addressing modes, SH64:                SH64-Addressing.     (line   6)
19998 * addressing modes, Z8000:               Z8000-Addressing.    (line   6)
19999 * ADR reg,<label> pseudo op, ARM:        ARM Opcodes.         (line  25)
20000 * ADRL reg,<label> pseudo op, ARM:       ARM Opcodes.         (line  35)
20001 * advancing location counter:            Org.                 (line   6)
20002 * align directive:                       Align.               (line   6)
20003 * align directive, SPARC:                Sparc-Directives.    (line   9)
20004 * align directive, TIC54X:               TIC54X-Directives.   (line   6)
20005 * alignment of branch targets:           Xtensa Automatic Alignment.
20006                                                               (line   6)
20007 * alignment of LOOP instructions:        Xtensa Automatic Alignment.
20008                                                               (line   6)
20009 * Alpha floating point (IEEE):           Alpha Floating Point.
20010                                                               (line   6)
20011 * Alpha line comment character:          Alpha-Chars.         (line   6)
20012 * Alpha line separator:                  Alpha-Chars.         (line   8)
20013 * Alpha notes:                           Alpha Notes.         (line   6)
20014 * Alpha options:                         Alpha Options.       (line   6)
20015 * Alpha registers:                       Alpha-Regs.          (line   6)
20016 * Alpha relocations:                     Alpha-Relocs.        (line   6)
20017 * Alpha support:                         Alpha-Dependent.     (line   6)
20018 * Alpha Syntax:                          Alpha Options.       (line  62)
20019 * Alpha-only directives:                 Alpha Directives.    (line  10)
20020 * altered difference tables:             Word.                (line  12)
20021 * alternate syntax for the 680x0:        M68K-Moto-Syntax.    (line   6)
20022 * ARC floating point (IEEE):             ARC Floating Point.  (line   6)
20023 * ARC machine directives:                ARC Directives.      (line   6)
20024 * ARC opcodes:                           ARC Opcodes.         (line   6)
20025 * ARC options (none):                    ARC Options.         (line   6)
20026 * ARC register names:                    ARC-Regs.            (line   6)
20027 * ARC special characters:                ARC-Chars.           (line   6)
20028 * ARC support:                           ARC-Dependent.       (line   6)
20029 * arc5 arc5, ARC:                        ARC Options.         (line  10)
20030 * arc6 arc6, ARC:                        ARC Options.         (line  13)
20031 * arc7 arc7, ARC:                        ARC Options.         (line  21)
20032 * arc8 arc8, ARC:                        ARC Options.         (line  24)
20033 * arch directive, i386:                  i386-Arch.           (line   6)
20034 * arch directive, M680x0:                M68K-Directives.     (line  22)
20035 * arch directive, x86-64:                i386-Arch.           (line   6)
20036 * architecture options, i960:            Options-i960.        (line   6)
20037 * architecture options, IP2022:          IP2K-Opts.           (line   9)
20038 * architecture options, IP2K:            IP2K-Opts.           (line  14)
20039 * architecture options, M16C:            M32C-Opts.           (line  12)
20040 * architecture options, M32C:            M32C-Opts.           (line   9)
20041 * architecture options, M32R:            M32R-Opts.           (line  21)
20042 * architecture options, M32R2:           M32R-Opts.           (line  17)
20043 * architecture options, M32RX:           M32R-Opts.           (line   9)
20044 * architecture options, M680x0:          M68K-Opts.           (line 104)
20045 * Architecture variant option, CRIS:     CRIS-Opts.           (line  33)
20046 * architectures, PowerPC:                PowerPC-Opts.        (line   6)
20047 * architectures, SCORE:                  SCORE-Opts.          (line   6)
20048 * architectures, SPARC:                  Sparc-Opts.          (line   6)
20049 * arguments for addition:                Infix Ops.           (line  44)
20050 * arguments for subtraction:             Infix Ops.           (line  49)
20051 * arguments in expressions:              Arguments.           (line   6)
20052 * arithmetic functions:                  Operators.           (line   6)
20053 * arithmetic operands:                   Arguments.           (line   6)
20054 * ARM data relocations:                  ARM-Relocations.     (line   6)
20055 * ARM floating point (IEEE):             ARM Floating Point.  (line   6)
20056 * ARM identifiers:                       ARM-Chars.           (line  15)
20057 * ARM immediate character:               ARM-Chars.           (line  13)
20058 * ARM line comment character:            ARM-Chars.           (line   6)
20059 * ARM line separator:                    ARM-Chars.           (line  10)
20060 * ARM machine directives:                ARM Directives.      (line   6)
20061 * ARM opcodes:                           ARM Opcodes.         (line   6)
20062 * ARM options (none):                    ARM Options.         (line   6)
20063 * ARM register names:                    ARM-Regs.            (line   6)
20064 * ARM support:                           ARM-Dependent.       (line   6)
20065 * ascii directive:                       Ascii.               (line   6)
20066 * asciz directive:                       Asciz.               (line   6)
20067 * asg directive, TIC54X:                 TIC54X-Directives.   (line  20)
20068 * assembler bugs, reporting:             Bug Reporting.       (line   6)
20069 * assembler crash:                       Bug Criteria.        (line   9)
20070 * assembler directive .arch, CRIS:       CRIS-Pseudos.        (line  45)
20071 * assembler directive .dword, CRIS:      CRIS-Pseudos.        (line  12)
20072 * assembler directive .far, M68HC11:     M68HC11-Directives.  (line  20)
20073 * assembler directive .interrupt, M68HC11: M68HC11-Directives.
20074                                                               (line  26)
20075 * assembler directive .mode, M68HC11:    M68HC11-Directives.  (line  16)
20076 * assembler directive .relax, M68HC11:   M68HC11-Directives.  (line  10)
20077 * assembler directive .syntax, CRIS:     CRIS-Pseudos.        (line  17)
20078 * assembler directive .xrefb, M68HC11:   M68HC11-Directives.  (line  31)
20079 * assembler directive BSPEC, MMIX:       MMIX-Pseudos.        (line 131)
20080 * assembler directive BYTE, MMIX:        MMIX-Pseudos.        (line  97)
20081 * assembler directive ESPEC, MMIX:       MMIX-Pseudos.        (line 131)
20082 * assembler directive GREG, MMIX:        MMIX-Pseudos.        (line  50)
20083 * assembler directive IS, MMIX:          MMIX-Pseudos.        (line  42)
20084 * assembler directive LOC, MMIX:         MMIX-Pseudos.        (line   7)
20085 * assembler directive LOCAL, MMIX:       MMIX-Pseudos.        (line  28)
20086 * assembler directive OCTA, MMIX:        MMIX-Pseudos.        (line 108)
20087 * assembler directive PREFIX, MMIX:      MMIX-Pseudos.        (line 120)
20088 * assembler directive TETRA, MMIX:       MMIX-Pseudos.        (line 108)
20089 * assembler directive WYDE, MMIX:        MMIX-Pseudos.        (line 108)
20090 * assembler directives, CRIS:            CRIS-Pseudos.        (line   6)
20091 * assembler directives, M68HC11:         M68HC11-Directives.  (line   6)
20092 * assembler directives, M68HC12:         M68HC11-Directives.  (line   6)
20093 * assembler directives, MMIX:            MMIX-Pseudos.        (line   6)
20094 * assembler internal logic error:        As Sections.         (line  13)
20095 * assembler version:                     v.                   (line   6)
20096 * assembler, and linker:                 Secs Background.     (line  10)
20097 * assembly listings, enabling:           a.                   (line   6)
20098 * assigning values to symbols <1>:       Setting Symbols.     (line   6)
20099 * assigning values to symbols:           Equ.                 (line   6)
20100 * atmp directive, i860:                  Directives-i860.     (line  16)
20101 * att_syntax pseudo op, i386:            i386-Syntax.         (line   6)
20102 * att_syntax pseudo op, x86-64:          i386-Syntax.         (line   6)
20103 * attributes, symbol:                    Symbol Attributes.   (line   6)
20104 * auxiliary attributes, COFF symbols:    COFF Symbols.        (line  19)
20105 * auxiliary symbol information, COFF:    Dim.                 (line   6)
20106 * Av7:                                   Sparc-Opts.          (line  25)
20107 * AVR line comment character:            AVR-Chars.           (line   6)
20108 * AVR line separator:                    AVR-Chars.           (line  10)
20109 * AVR modifiers:                         AVR-Modifiers.       (line   6)
20110 * AVR opcode summary:                    AVR Opcodes.         (line   6)
20111 * AVR options (none):                    AVR Options.         (line   6)
20112 * AVR register names:                    AVR-Regs.            (line   6)
20113 * AVR support:                           AVR-Dependent.       (line   6)
20114 * backslash (\\):                        Strings.             (line  40)
20115 * backspace (\b):                        Strings.             (line  15)
20116 * balign directive:                      Balign.              (line   6)
20117 * balignl directive:                     Balign.              (line  27)
20118 * balignw directive:                     Balign.              (line  27)
20119 * bes directive, TIC54X:                 TIC54X-Directives.   (line 197)
20120 * big endian output, MIPS:               Overview.            (line 641)
20121 * big endian output, PJ:                 Overview.            (line 548)
20122 * big-endian output, MIPS:               MIPS Opts.           (line  13)
20123 * bignums:                               Bignums.             (line   6)
20124 * binary constants, TIC54X:              TIC54X-Constants.    (line   8)
20125 * binary files, including:               Incbin.              (line   6)
20126 * binary integers:                       Integers.            (line   6)
20127 * bit names, IA-64:                      IA-64-Bits.          (line   6)
20128 * bitfields, not supported on VAX:       VAX-no.              (line   6)
20129 * Blackfin directives:                   Blackfin Directives. (line   6)
20130 * Blackfin options (none):               Blackfin Options.    (line   6)
20131 * Blackfin support:                      Blackfin-Dependent.  (line   6)
20132 * Blackfin syntax:                       Blackfin Syntax.     (line   6)
20133 * block:                                 Z8000 Directives.    (line  55)
20134 * branch improvement, M680x0:            M68K-Branch.         (line   6)
20135 * branch improvement, M68HC11:           M68HC11-Branch.      (line   6)
20136 * branch improvement, VAX:               VAX-branch.          (line   6)
20137 * branch instructions, relaxation:       Xtensa Branch Relaxation.
20138                                                               (line   6)
20139 * branch recording, i960:                Options-i960.        (line  22)
20140 * branch statistics table, i960:         Options-i960.        (line  40)
20141 * branch target alignment:               Xtensa Automatic Alignment.
20142                                                               (line   6)
20143 * break directive, TIC54X:               TIC54X-Directives.   (line 143)
20144 * BSD syntax:                            PDP-11-Syntax.       (line   6)
20145 * bss directive, i960:                   Directives-i960.     (line   6)
20146 * bss directive, TIC54X:                 TIC54X-Directives.   (line  29)
20147 * bss section <1>:                       bss.                 (line   6)
20148 * bss section:                           Ld Sections.         (line  20)
20149 * bug criteria:                          Bug Criteria.        (line   6)
20150 * bug reports:                           Bug Reporting.       (line   6)
20151 * bugs in assembler:                     Reporting Bugs.      (line   6)
20152 * Built-in symbols, CRIS:                CRIS-Symbols.        (line   6)
20153 * builtin math functions, TIC54X:        TIC54X-Builtins.     (line   6)
20154 * builtin subsym functions, TIC54X:      TIC54X-Macros.       (line  16)
20155 * bus lock prefixes, i386:               i386-Prefixes.       (line  36)
20156 * bval:                                  Z8000 Directives.    (line  30)
20157 * byte directive:                        Byte.                (line   6)
20158 * byte directive, TIC54X:                TIC54X-Directives.   (line  36)
20159 * C54XDSP_DIR environment variable, TIC54X: TIC54X-Env.       (line   6)
20160 * c_mode directive, TIC54X:              TIC54X-Directives.   (line  51)
20161 * call instructions, i386:               i386-Mnemonics.      (line  55)
20162 * call instructions, relaxation:         Xtensa Call Relaxation.
20163                                                               (line   6)
20164 * call instructions, x86-64:             i386-Mnemonics.      (line  55)
20165 * callj, i960 pseudo-opcode:             callj-i960.          (line   6)
20166 * carriage return (\r):                  Strings.             (line  24)
20167 * case sensitivity, Z80:                 Z80-Case.            (line   6)
20168 * cfi_endproc directive:                 CFI directives.      (line  26)
20169 * cfi_sections directive:                CFI directives.      (line  13)
20170 * cfi_startproc directive:               CFI directives.      (line   6)
20171 * char directive, TIC54X:                TIC54X-Directives.   (line  36)
20172 * character constant, Z80:               Z80-Chars.           (line  13)
20173 * character constants:                   Characters.          (line   6)
20174 * character escape codes:                Strings.             (line  15)
20175 * character escapes, Z80:                Z80-Chars.           (line  11)
20176 * character, single:                     Chars.               (line   6)
20177 * characters used in symbols:            Symbol Intro.        (line   6)
20178 * clink directive, TIC54X:               TIC54X-Directives.   (line  45)
20179 * code16 directive, i386:                i386-16bit.          (line   6)
20180 * code16gcc directive, i386:             i386-16bit.          (line   6)
20181 * code32 directive, i386:                i386-16bit.          (line   6)
20182 * code64 directive, i386:                i386-16bit.          (line   6)
20183 * code64 directive, x86-64:              i386-16bit.          (line   6)
20184 * COFF auxiliary symbol information:     Dim.                 (line   6)
20185 * COFF structure debugging:              Tag.                 (line   6)
20186 * COFF symbol attributes:                COFF Symbols.        (line   6)
20187 * COFF symbol descriptor:                Desc.                (line   6)
20188 * COFF symbol storage class:             Scl.                 (line   6)
20189 * COFF symbol type:                      Type.                (line  11)
20190 * COFF symbols, debugging:               Def.                 (line   6)
20191 * COFF value attribute:                  Val.                 (line   6)
20192 * COMDAT:                                Linkonce.            (line   6)
20193 * comm directive:                        Comm.                (line   6)
20194 * command line conventions:              Command Line.        (line   6)
20195 * command line options, V850:            V850 Options.        (line   9)
20196 * command-line options ignored, VAX:     VAX-Opts.            (line   6)
20197 * comments:                              Comments.            (line   6)
20198 * comments, M680x0:                      M68K-Chars.          (line   6)
20199 * comments, removed by preprocessor:     Preprocessing.       (line  11)
20200 * common directive, SPARC:               Sparc-Directives.    (line  12)
20201 * common sections:                       Linkonce.            (line   6)
20202 * common variable storage:               bss.                 (line   6)
20203 * compare and jump expansions, i960:     Compare-and-branch-i960.
20204                                                               (line  13)
20205 * compare/branch instructions, i960:     Compare-and-branch-i960.
20206                                                               (line   6)
20207 * comparison expressions:                Infix Ops.           (line  55)
20208 * conditional assembly:                  If.                  (line   6)
20209 * constant, single character:            Chars.               (line   6)
20210 * constants:                             Constants.           (line   6)
20211 * constants, bignum:                     Bignums.             (line   6)
20212 * constants, character:                  Characters.          (line   6)
20213 * constants, converted by preprocessor:  Preprocessing.       (line  14)
20214 * constants, floating point:             Flonums.             (line   6)
20215 * constants, integer:                    Integers.            (line   6)
20216 * constants, number:                     Numbers.             (line   6)
20217 * constants, Sparc:                      Sparc-Constants.     (line   6)
20218 * constants, string:                     Strings.             (line   6)
20219 * constants, TIC54X:                     TIC54X-Constants.    (line   6)
20220 * conversion instructions, i386:         i386-Mnemonics.      (line  36)
20221 * conversion instructions, x86-64:       i386-Mnemonics.      (line  36)
20222 * coprocessor wait, i386:                i386-Prefixes.       (line  40)
20223 * copy directive, TIC54X:                TIC54X-Directives.   (line  54)
20224 * cpu directive, M680x0:                 M68K-Directives.     (line  30)
20225 * CR16 Operand Qualifiers:               CR16 Operand Qualifiers.
20226                                                               (line   6)
20227 * CR16 support:                          CR16-Dependent.      (line   6)
20228 * crash of assembler:                    Bug Criteria.        (line   9)
20229 * CRIS --emulation=crisaout command line option: CRIS-Opts.   (line   9)
20230 * CRIS --emulation=criself command line option: CRIS-Opts.    (line   9)
20231 * CRIS --march=ARCHITECTURE command line option: CRIS-Opts.   (line  33)
20232 * CRIS --mul-bug-abort command line option: CRIS-Opts.        (line  61)
20233 * CRIS --no-mul-bug-abort command line option: CRIS-Opts.     (line  61)
20234 * CRIS --no-underscore command line option: CRIS-Opts.        (line  15)
20235 * CRIS --pic command line option:        CRIS-Opts.           (line  27)
20236 * CRIS --underscore command line option: CRIS-Opts.           (line  15)
20237 * CRIS -N command line option:           CRIS-Opts.           (line  57)
20238 * CRIS architecture variant option:      CRIS-Opts.           (line  33)
20239 * CRIS assembler directive .arch:        CRIS-Pseudos.        (line  45)
20240 * CRIS assembler directive .dword:       CRIS-Pseudos.        (line  12)
20241 * CRIS assembler directive .syntax:      CRIS-Pseudos.        (line  17)
20242 * CRIS assembler directives:             CRIS-Pseudos.        (line   6)
20243 * CRIS built-in symbols:                 CRIS-Symbols.        (line   6)
20244 * CRIS instruction expansion:            CRIS-Expand.         (line   6)
20245 * CRIS line comment characters:          CRIS-Chars.          (line   6)
20246 * CRIS options:                          CRIS-Opts.           (line   6)
20247 * CRIS position-independent code:        CRIS-Opts.           (line  27)
20248 * CRIS pseudo-op .arch:                  CRIS-Pseudos.        (line  45)
20249 * CRIS pseudo-op .dword:                 CRIS-Pseudos.        (line  12)
20250 * CRIS pseudo-op .syntax:                CRIS-Pseudos.        (line  17)
20251 * CRIS pseudo-ops:                       CRIS-Pseudos.        (line   6)
20252 * CRIS register names:                   CRIS-Regs.           (line   6)
20253 * CRIS support:                          CRIS-Dependent.      (line   6)
20254 * CRIS symbols in position-independent code: CRIS-Pic.        (line   6)
20255 * ctbp register, V850:                   V850-Regs.           (line 131)
20256 * ctoff pseudo-op, V850:                 V850 Opcodes.        (line 111)
20257 * ctpc register, V850:                   V850-Regs.           (line 119)
20258 * ctpsw register, V850:                  V850-Regs.           (line 122)
20259 * current address:                       Dot.                 (line   6)
20260 * current address, advancing:            Org.                 (line   6)
20261 * D10V @word modifier:                   D10V-Word.           (line   6)
20262 * D10V addressing modes:                 D10V-Addressing.     (line   6)
20263 * D10V floating point:                   D10V-Float.          (line   6)
20264 * D10V line comment character:           D10V-Chars.          (line   6)
20265 * D10V opcode summary:                   D10V-Opcodes.        (line   6)
20266 * D10V optimization:                     Overview.            (line 420)
20267 * D10V options:                          D10V-Opts.           (line   6)
20268 * D10V registers:                        D10V-Regs.           (line   6)
20269 * D10V size modifiers:                   D10V-Size.           (line   6)
20270 * D10V sub-instruction ordering:         D10V-Chars.          (line   6)
20271 * D10V sub-instructions:                 D10V-Subs.           (line   6)
20272 * D10V support:                          D10V-Dependent.      (line   6)
20273 * D10V syntax:                           D10V-Syntax.         (line   6)
20274 * D30V addressing modes:                 D30V-Addressing.     (line   6)
20275 * D30V floating point:                   D30V-Float.          (line   6)
20276 * D30V Guarded Execution:                D30V-Guarded.        (line   6)
20277 * D30V line comment character:           D30V-Chars.          (line   6)
20278 * D30V nops:                             Overview.            (line 428)
20279 * D30V nops after 32-bit multiply:       Overview.            (line 431)
20280 * D30V opcode summary:                   D30V-Opcodes.        (line   6)
20281 * D30V optimization:                     Overview.            (line 425)
20282 * D30V options:                          D30V-Opts.           (line   6)
20283 * D30V registers:                        D30V-Regs.           (line   6)
20284 * D30V size modifiers:                   D30V-Size.           (line   6)
20285 * D30V sub-instruction ordering:         D30V-Chars.          (line   6)
20286 * D30V sub-instructions:                 D30V-Subs.           (line   6)
20287 * D30V support:                          D30V-Dependent.      (line   6)
20288 * D30V syntax:                           D30V-Syntax.         (line   6)
20289 * data alignment on SPARC:               Sparc-Aligned-Data.  (line   6)
20290 * data and text sections, joining:       R.                   (line   6)
20291 * data directive:                        Data.                (line   6)
20292 * data directive, TIC54X:                TIC54X-Directives.   (line  61)
20293 * data relocations, ARM:                 ARM-Relocations.     (line   6)
20294 * data section:                          Ld Sections.         (line   9)
20295 * data1 directive, M680x0:               M68K-Directives.     (line   9)
20296 * data2 directive, M680x0:               M68K-Directives.     (line  12)
20297 * datalabel, SH64:                       SH64-Addressing.     (line  16)
20298 * dbpc register, V850:                   V850-Regs.           (line 125)
20299 * dbpsw register, V850:                  V850-Regs.           (line 128)
20300 * debuggers, and symbol order:           Symbols.             (line  10)
20301 * debugging COFF symbols:                Def.                 (line   6)
20302 * DEC syntax:                            PDP-11-Syntax.       (line   6)
20303 * decimal integers:                      Integers.            (line  12)
20304 * def directive:                         Def.                 (line   6)
20305 * def directive, TIC54X:                 TIC54X-Directives.   (line 103)
20306 * density instructions:                  Density Instructions.
20307                                                               (line   6)
20308 * dependency tracking:                   MD.                  (line   6)
20309 * deprecated directives:                 Deprecated.          (line   6)
20310 * desc directive:                        Desc.                (line   6)
20311 * descriptor, of a.out symbol:           Symbol Desc.         (line   6)
20312 * dfloat directive, VAX:                 VAX-directives.      (line  10)
20313 * difference tables altered:             Word.                (line  12)
20314 * difference tables, warning:            K.                   (line   6)
20315 * differences, mmixal:                   MMIX-mmixal.         (line   6)
20316 * dim directive:                         Dim.                 (line   6)
20317 * directives and instructions:           Statements.          (line  19)
20318 * directives for PowerPC:                PowerPC-Pseudo.      (line   6)
20319 * directives for SCORE:                  SCORE-Pseudo.        (line   6)
20320 * directives, Blackfin:                  Blackfin Directives. (line   6)
20321 * directives, M32R:                      M32R-Directives.     (line   6)
20322 * directives, M680x0:                    M68K-Directives.     (line   6)
20323 * directives, machine independent:       Pseudo Ops.          (line   6)
20324 * directives, Xtensa:                    Xtensa Directives.   (line   6)
20325 * directives, Z8000:                     Z8000 Directives.    (line   6)
20326 * Disable floating-point instructions:   MIPS floating-point. (line   6)
20327 * Disable single-precision floating-point operations: MIPS floating-point.
20328                                                               (line  12)
20329 * displacement sizing character, VAX:    VAX-operands.        (line  12)
20330 * dollar local symbols:                  Symbol Names.        (line 105)
20331 * dot (symbol):                          Dot.                 (line   6)
20332 * double directive:                      Double.              (line   6)
20333 * double directive, i386:                i386-Float.          (line  14)
20334 * double directive, M680x0:              M68K-Float.          (line  14)
20335 * double directive, M68HC11:             M68HC11-Float.       (line  14)
20336 * double directive, TIC54X:              TIC54X-Directives.   (line  64)
20337 * double directive, VAX:                 VAX-float.           (line  15)
20338 * double directive, x86-64:              i386-Float.          (line  14)
20339 * doublequote (\"):                      Strings.             (line  43)
20340 * drlist directive, TIC54X:              TIC54X-Directives.   (line  73)
20341 * drnolist directive, TIC54X:            TIC54X-Directives.   (line  73)
20342 * dual directive, i860:                  Directives-i860.     (line   6)
20343 * ECOFF sections:                        MIPS Object.         (line   6)
20344 * ecr register, V850:                    V850-Regs.           (line 113)
20345 * eight-byte integer:                    Quad.                (line   9)
20346 * eipc register, V850:                   V850-Regs.           (line 101)
20347 * eipsw register, V850:                  V850-Regs.           (line 104)
20348 * eject directive:                       Eject.               (line   6)
20349 * ELF symbol type:                       Type.                (line  22)
20350 * else directive:                        Else.                (line   6)
20351 * elseif directive:                      Elseif.              (line   6)
20352 * empty expressions:                     Empty Exprs.         (line   6)
20353 * emsg directive, TIC54X:                TIC54X-Directives.   (line  77)
20354 * emulation:                             Overview.            (line 744)
20355 * encoding options, i386:                i386-Mnemonics.      (line  32)
20356 * encoding options, x86-64:              i386-Mnemonics.      (line  32)
20357 * end directive:                         End.                 (line   6)
20358 * enddual directive, i860:               Directives-i860.     (line  11)
20359 * endef directive:                       Endef.               (line   6)
20360 * endfunc directive:                     Endfunc.             (line   6)
20361 * endianness, MIPS:                      Overview.            (line 641)
20362 * endianness, PJ:                        Overview.            (line 548)
20363 * endif directive:                       Endif.               (line   6)
20364 * endloop directive, TIC54X:             TIC54X-Directives.   (line 143)
20365 * endm directive:                        Macro.               (line 138)
20366 * endm directive, TIC54X:                TIC54X-Directives.   (line 153)
20367 * endstruct directive, TIC54X:           TIC54X-Directives.   (line 217)
20368 * endunion directive, TIC54X:            TIC54X-Directives.   (line 251)
20369 * environment settings, TIC54X:          TIC54X-Env.          (line   6)
20370 * EOF, newline must precede:             Statements.          (line  13)
20371 * ep register, V850:                     V850-Regs.           (line  95)
20372 * equ directive:                         Equ.                 (line   6)
20373 * equ directive, TIC54X:                 TIC54X-Directives.   (line 192)
20374 * equiv directive:                       Equiv.               (line   6)
20375 * eqv directive:                         Eqv.                 (line   6)
20376 * err directive:                         Err.                 (line   6)
20377 * error directive:                       Error.               (line   6)
20378 * error messages:                        Errors.              (line   6)
20379 * error on valid input:                  Bug Criteria.        (line  12)
20380 * errors, caused by warnings:            W.                   (line  16)
20381 * errors, continuing after:              Z.                   (line   6)
20382 * ESA/390 floating point (IEEE):         ESA/390 Floating Point.
20383                                                               (line   6)
20384 * ESA/390 support:                       ESA/390-Dependent.   (line   6)
20385 * ESA/390 Syntax:                        ESA/390 Options.     (line   8)
20386 * ESA/390-only directives:               ESA/390 Directives.  (line  12)
20387 * escape codes, character:               Strings.             (line  15)
20388 * eval directive, TIC54X:                TIC54X-Directives.   (line  24)
20389 * even:                                  Z8000 Directives.    (line  58)
20390 * even directive, M680x0:                M68K-Directives.     (line  15)
20391 * even directive, TIC54X:                TIC54X-Directives.   (line   6)
20392 * exitm directive:                       Macro.               (line 141)
20393 * expr (internal section):               As Sections.         (line  17)
20394 * expression arguments:                  Arguments.           (line   6)
20395 * expressions:                           Expressions.         (line   6)
20396 * expressions, comparison:               Infix Ops.           (line  55)
20397 * expressions, empty:                    Empty Exprs.         (line   6)
20398 * expressions, integer:                  Integer Exprs.       (line   6)
20399 * extAuxRegister directive, ARC:         ARC Directives.      (line  18)
20400 * extCondCode directive, ARC:            ARC Directives.      (line  41)
20401 * extCoreRegister directive, ARC:        ARC Directives.      (line  53)
20402 * extend directive M680x0:               M68K-Float.          (line  17)
20403 * extend directive M68HC11:              M68HC11-Float.       (line  17)
20404 * extended directive, i960:              Directives-i960.     (line  13)
20405 * extern directive:                      Extern.              (line   6)
20406 * extInstruction directive, ARC:         ARC Directives.      (line  78)
20407 * fail directive:                        Fail.                (line   6)
20408 * far_mode directive, TIC54X:            TIC54X-Directives.   (line  82)
20409 * faster processing (-f):                f.                   (line   6)
20410 * fatal signal:                          Bug Criteria.        (line   9)
20411 * fclist directive, TIC54X:              TIC54X-Directives.   (line  87)
20412 * fcnolist directive, TIC54X:            TIC54X-Directives.   (line  87)
20413 * fepc register, V850:                   V850-Regs.           (line 107)
20414 * fepsw register, V850:                  V850-Regs.           (line 110)
20415 * ffloat directive, VAX:                 VAX-directives.      (line  14)
20416 * field directive, TIC54X:               TIC54X-Directives.   (line  91)
20417 * file directive:                        File.                (line   6)
20418 * file directive, MSP 430:               MSP430 Directives.   (line   6)
20419 * file name, logical:                    File.                (line  13)
20420 * files, including:                      Include.             (line   6)
20421 * files, input:                          Input Files.         (line   6)
20422 * fill directive:                        Fill.                (line   6)
20423 * filling memory <1>:                    Skip.                (line   6)
20424 * filling memory:                        Space.               (line   6)
20425 * FLIX syntax:                           Xtensa Syntax.       (line   6)
20426 * float directive:                       Float.               (line   6)
20427 * float directive, i386:                 i386-Float.          (line  14)
20428 * float directive, M680x0:               M68K-Float.          (line  11)
20429 * float directive, M68HC11:              M68HC11-Float.       (line  11)
20430 * float directive, TIC54X:               TIC54X-Directives.   (line  64)
20431 * float directive, VAX:                  VAX-float.           (line  15)
20432 * float directive, x86-64:               i386-Float.          (line  14)
20433 * floating point numbers:                Flonums.             (line   6)
20434 * floating point numbers (double):       Double.              (line   6)
20435 * floating point numbers (single) <1>:   Float.               (line   6)
20436 * floating point numbers (single):       Single.              (line   6)
20437 * floating point, Alpha (IEEE):          Alpha Floating Point.
20438                                                               (line   6)
20439 * floating point, ARC (IEEE):            ARC Floating Point.  (line   6)
20440 * floating point, ARM (IEEE):            ARM Floating Point.  (line   6)
20441 * floating point, D10V:                  D10V-Float.          (line   6)
20442 * floating point, D30V:                  D30V-Float.          (line   6)
20443 * floating point, ESA/390 (IEEE):        ESA/390 Floating Point.
20444                                                               (line   6)
20445 * floating point, H8/300 (IEEE):         H8/300 Floating Point.
20446                                                               (line   6)
20447 * floating point, HPPA (IEEE):           HPPA Floating Point. (line   6)
20448 * floating point, i386:                  i386-Float.          (line   6)
20449 * floating point, i960 (IEEE):           Floating Point-i960. (line   6)
20450 * floating point, M680x0:                M68K-Float.          (line   6)
20451 * floating point, M68HC11:               M68HC11-Float.       (line   6)
20452 * floating point, MSP 430 (IEEE):        MSP430 Floating Point.
20453                                                               (line   6)
20454 * floating point, s390:                  s390 Floating Point. (line   6)
20455 * floating point, SH (IEEE):             SH Floating Point.   (line   6)
20456 * floating point, SPARC (IEEE):          Sparc-Float.         (line   6)
20457 * floating point, V850 (IEEE):           V850 Floating Point. (line   6)
20458 * floating point, VAX:                   VAX-float.           (line   6)
20459 * floating point, x86-64:                i386-Float.          (line   6)
20460 * floating point, Z80:                   Z80 Floating Point.  (line   6)
20461 * flonums:                               Flonums.             (line   6)
20462 * format of error messages:              Errors.              (line  24)
20463 * format of warning messages:            Errors.              (line  12)
20464 * formfeed (\f):                         Strings.             (line  18)
20465 * func directive:                        Func.                (line   6)
20466 * functions, in expressions:             Operators.           (line   6)
20467 * gbr960, i960 postprocessor:            Options-i960.        (line  40)
20468 * gfloat directive, VAX:                 VAX-directives.      (line  18)
20469 * global:                                Z8000 Directives.    (line  21)
20470 * global directive:                      Global.              (line   6)
20471 * global directive, TIC54X:              TIC54X-Directives.   (line 103)
20472 * gp register, MIPS:                     MIPS Object.         (line  11)
20473 * gp register, V850:                     V850-Regs.           (line  17)
20474 * grouping data:                         Sub-Sections.        (line   6)
20475 * H8/300 addressing modes:               H8/300-Addressing.   (line   6)
20476 * H8/300 floating point (IEEE):          H8/300 Floating Point.
20477                                                               (line   6)
20478 * H8/300 line comment character:         H8/300-Chars.        (line   6)
20479 * H8/300 line separator:                 H8/300-Chars.        (line   8)
20480 * H8/300 machine directives (none):      H8/300 Directives.   (line   6)
20481 * H8/300 opcode summary:                 H8/300 Opcodes.      (line   6)
20482 * H8/300 options:                        H8/300 Options.      (line   6)
20483 * H8/300 registers:                      H8/300-Regs.         (line   6)
20484 * H8/300 size suffixes:                  H8/300 Opcodes.      (line 163)
20485 * H8/300 support:                        H8/300-Dependent.    (line   6)
20486 * H8/300H, assembling for:               H8/300 Directives.   (line   8)
20487 * half directive, ARC:                   ARC Directives.      (line 156)
20488 * half directive, SPARC:                 Sparc-Directives.    (line  17)
20489 * half directive, TIC54X:                TIC54X-Directives.   (line 111)
20490 * hex character code (\XD...):           Strings.             (line  36)
20491 * hexadecimal integers:                  Integers.            (line  15)
20492 * hexadecimal prefix, Z80:               Z80-Chars.           (line   8)
20493 * hfloat directive, VAX:                 VAX-directives.      (line  22)
20494 * hi pseudo-op, V850:                    V850 Opcodes.        (line  33)
20495 * hi0 pseudo-op, V850:                   V850 Opcodes.        (line  10)
20496 * hidden directive:                      Hidden.              (line   6)
20497 * high directive, M32R:                  M32R-Directives.     (line  18)
20498 * hilo pseudo-op, V850:                  V850 Opcodes.        (line  55)
20499 * HPPA directives not supported:         HPPA Directives.     (line  11)
20500 * HPPA floating point (IEEE):            HPPA Floating Point. (line   6)
20501 * HPPA Syntax:                           HPPA Options.        (line   8)
20502 * HPPA-only directives:                  HPPA Directives.     (line  24)
20503 * hword directive:                       hword.               (line   6)
20504 * i370 support:                          ESA/390-Dependent.   (line   6)
20505 * i386 16-bit code:                      i386-16bit.          (line   6)
20506 * i386 arch directive:                   i386-Arch.           (line   6)
20507 * i386 att_syntax pseudo op:             i386-Syntax.         (line   6)
20508 * i386 conversion instructions:          i386-Mnemonics.      (line  36)
20509 * i386 floating point:                   i386-Float.          (line   6)
20510 * i386 immediate operands:               i386-Syntax.         (line  15)
20511 * i386 instruction naming:               i386-Mnemonics.      (line   6)
20512 * i386 instruction prefixes:             i386-Prefixes.       (line   6)
20513 * i386 intel_syntax pseudo op:           i386-Syntax.         (line   6)
20514 * i386 jump optimization:                i386-Jumps.          (line   6)
20515 * i386 jump, call, return:               i386-Syntax.         (line  38)
20516 * i386 jump/call operands:               i386-Syntax.         (line  15)
20517 * i386 memory references:                i386-Memory.         (line   6)
20518 * i386 mnemonic compatibility:           i386-Mnemonics.      (line  61)
20519 * i386 mul, imul instructions:           i386-Notes.          (line   6)
20520 * i386 options:                          i386-Options.        (line   6)
20521 * i386 register operands:                i386-Syntax.         (line  15)
20522 * i386 registers:                        i386-Regs.           (line   6)
20523 * i386 sections:                         i386-Syntax.         (line  44)
20524 * i386 size suffixes:                    i386-Syntax.         (line  29)
20525 * i386 source, destination operands:     i386-Syntax.         (line  22)
20526 * i386 support:                          i386-Dependent.      (line   6)
20527 * i386 syntax compatibility:             i386-Syntax.         (line   6)
20528 * i80386 support:                        i386-Dependent.      (line   6)
20529 * i860 machine directives:               Directives-i860.     (line   6)
20530 * i860 opcodes:                          Opcodes for i860.    (line   6)
20531 * i860 support:                          i860-Dependent.      (line   6)
20532 * i960 architecture options:             Options-i960.        (line   6)
20533 * i960 branch recording:                 Options-i960.        (line  22)
20534 * i960 callj pseudo-opcode:              callj-i960.          (line   6)
20535 * i960 compare and jump expansions:      Compare-and-branch-i960.
20536                                                               (line  13)
20537 * i960 compare/branch instructions:      Compare-and-branch-i960.
20538                                                               (line   6)
20539 * i960 floating point (IEEE):            Floating Point-i960. (line   6)
20540 * i960 machine directives:               Directives-i960.     (line   6)
20541 * i960 opcodes:                          Opcodes for i960.    (line   6)
20542 * i960 options:                          Options-i960.        (line   6)
20543 * i960 support:                          i960-Dependent.      (line   6)
20544 * IA-64 line comment character:          IA-64-Chars.         (line   6)
20545 * IA-64 line separator:                  IA-64-Chars.         (line   8)
20546 * IA-64 options:                         IA-64 Options.       (line   6)
20547 * IA-64 Processor-status-Register bit names: IA-64-Bits.      (line   6)
20548 * IA-64 registers:                       IA-64-Regs.          (line   6)
20549 * IA-64 support:                         IA-64-Dependent.     (line   6)
20550 * IA-64 Syntax:                          IA-64 Options.       (line  96)
20551 * ident directive:                       Ident.               (line   6)
20552 * identifiers, ARM:                      ARM-Chars.           (line  15)
20553 * identifiers, MSP 430:                  MSP430-Chars.        (line   8)
20554 * if directive:                          If.                  (line   6)
20555 * ifb directive:                         If.                  (line  21)
20556 * ifc directive:                         If.                  (line  25)
20557 * ifdef directive:                       If.                  (line  16)
20558 * ifeq directive:                        If.                  (line  33)
20559 * ifeqs directive:                       If.                  (line  36)
20560 * ifge directive:                        If.                  (line  40)
20561 * ifgt directive:                        If.                  (line  44)
20562 * ifle directive:                        If.                  (line  48)
20563 * iflt directive:                        If.                  (line  52)
20564 * ifnb directive:                        If.                  (line  56)
20565 * ifnc directive:                        If.                  (line  61)
20566 * ifndef directive:                      If.                  (line  65)
20567 * ifne directive:                        If.                  (line  72)
20568 * ifnes directive:                       If.                  (line  76)
20569 * ifnotdef directive:                    If.                  (line  65)
20570 * immediate character, ARM:              ARM-Chars.           (line  13)
20571 * immediate character, M680x0:           M68K-Chars.          (line   6)
20572 * immediate character, VAX:              VAX-operands.        (line   6)
20573 * immediate fields, relaxation:          Xtensa Immediate Relaxation.
20574                                                               (line   6)
20575 * immediate operands, i386:              i386-Syntax.         (line  15)
20576 * immediate operands, x86-64:            i386-Syntax.         (line  15)
20577 * imul instruction, i386:                i386-Notes.          (line   6)
20578 * imul instruction, x86-64:              i386-Notes.          (line   6)
20579 * incbin directive:                      Incbin.              (line   6)
20580 * include directive:                     Include.             (line   6)
20581 * include directive search path:         I.                   (line   6)
20582 * indirect character, VAX:               VAX-operands.        (line   9)
20583 * infix operators:                       Infix Ops.           (line   6)
20584 * inhibiting interrupts, i386:           i386-Prefixes.       (line  36)
20585 * input:                                 Input Files.         (line   6)
20586 * input file linenumbers:                Input Files.         (line  35)
20587 * instruction aliases, s390:             s390 Aliases.        (line   6)
20588 * instruction expansion, CRIS:           CRIS-Expand.         (line   6)
20589 * instruction expansion, MMIX:           MMIX-Expand.         (line   6)
20590 * instruction formats, s390:             s390 Formats.        (line   6)
20591 * instruction marker, s390:              s390 Instruction Marker.
20592                                                               (line   6)
20593 * instruction mnemonics, s390:           s390 Mnemonics.      (line   6)
20594 * instruction naming, i386:              i386-Mnemonics.      (line   6)
20595 * instruction naming, x86-64:            i386-Mnemonics.      (line   6)
20596 * instruction operand modifier, s390:    s390 Operand Modifier.
20597                                                               (line   6)
20598 * instruction operands, s390:            s390 Operands.       (line   6)
20599 * instruction prefixes, i386:            i386-Prefixes.       (line   6)
20600 * instruction set, M680x0:               M68K-opcodes.        (line   6)
20601 * instruction set, M68HC11:              M68HC11-opcodes.     (line   6)
20602 * instruction summary, AVR:              AVR Opcodes.         (line   6)
20603 * instruction summary, D10V:             D10V-Opcodes.        (line   6)
20604 * instruction summary, D30V:             D30V-Opcodes.        (line   6)
20605 * instruction summary, H8/300:           H8/300 Opcodes.      (line   6)
20606 * instruction summary, LM32:             LM32 Opcodes.        (line   6)
20607 * instruction summary, SH:               SH Opcodes.          (line   6)
20608 * instruction summary, SH64:             SH64 Opcodes.        (line   6)
20609 * instruction summary, Z8000:            Z8000 Opcodes.       (line   6)
20610 * instruction syntax, s390:              s390 Syntax.         (line   6)
20611 * instructions and directives:           Statements.          (line  19)
20612 * int directive:                         Int.                 (line   6)
20613 * int directive, H8/300:                 H8/300 Directives.   (line   6)
20614 * int directive, i386:                   i386-Float.          (line  21)
20615 * int directive, TIC54X:                 TIC54X-Directives.   (line 111)
20616 * int directive, x86-64:                 i386-Float.          (line  21)
20617 * integer expressions:                   Integer Exprs.       (line   6)
20618 * integer, 16-byte:                      Octa.                (line   6)
20619 * integer, 8-byte:                       Quad.                (line   9)
20620 * integers:                              Integers.            (line   6)
20621 * integers, 16-bit:                      hword.               (line   6)
20622 * integers, 32-bit:                      Int.                 (line   6)
20623 * integers, binary:                      Integers.            (line   6)
20624 * integers, decimal:                     Integers.            (line  12)
20625 * integers, hexadecimal:                 Integers.            (line  15)
20626 * integers, octal:                       Integers.            (line   9)
20627 * integers, one byte:                    Byte.                (line   6)
20628 * intel_syntax pseudo op, i386:          i386-Syntax.         (line   6)
20629 * intel_syntax pseudo op, x86-64:        i386-Syntax.         (line   6)
20630 * internal assembler sections:           As Sections.         (line   6)
20631 * internal directive:                    Internal.            (line   6)
20632 * invalid input:                         Bug Criteria.        (line  14)
20633 * invocation summary:                    Overview.            (line   6)
20634 * IP2K architecture options:             IP2K-Opts.           (line  14)
20635 * IP2K options:                          IP2K-Opts.           (line   6)
20636 * IP2K support:                          IP2K-Dependent.      (line   6)
20637 * irp directive:                         Irp.                 (line   6)
20638 * irpc directive:                        Irpc.                (line   6)
20639 * ISA options, SH64:                     SH64 Options.        (line   6)
20640 * joining text and data sections:        R.                   (line   6)
20641 * jump instructions, i386:               i386-Mnemonics.      (line  55)
20642 * jump instructions, x86-64:             i386-Mnemonics.      (line  55)
20643 * jump optimization, i386:               i386-Jumps.          (line   6)
20644 * jump optimization, x86-64:             i386-Jumps.          (line   6)
20645 * jump/call operands, i386:              i386-Syntax.         (line  15)
20646 * jump/call operands, x86-64:            i386-Syntax.         (line  15)
20647 * L16SI instructions, relaxation:        Xtensa Immediate Relaxation.
20648                                                               (line  23)
20649 * L16UI instructions, relaxation:        Xtensa Immediate Relaxation.
20650                                                               (line  23)
20651 * L32I instructions, relaxation:         Xtensa Immediate Relaxation.
20652                                                               (line  23)
20653 * L8UI instructions, relaxation:         Xtensa Immediate Relaxation.
20654                                                               (line  23)
20655 * label (:):                             Statements.          (line  30)
20656 * label directive, TIC54X:               TIC54X-Directives.   (line 123)
20657 * labels:                                Labels.              (line   6)
20658 * lcomm directive:                       Lcomm.               (line   6)
20659 * lcomm directive, COFF:                 i386-Directives.     (line   6)
20660 * ld:                                    Object.              (line  15)
20661 * ldouble directive M680x0:              M68K-Float.          (line  17)
20662 * ldouble directive M68HC11:             M68HC11-Float.       (line  17)
20663 * ldouble directive, TIC54X:             TIC54X-Directives.   (line  64)
20664 * LDR reg,=<label> pseudo op, ARM:       ARM Opcodes.         (line  15)
20665 * leafproc directive, i960:              Directives-i960.     (line  18)
20666 * length directive, TIC54X:              TIC54X-Directives.   (line 127)
20667 * length of symbols:                     Symbol Intro.        (line  14)
20668 * lflags directive (ignored):            Lflags.              (line   6)
20669 * line comment character:                Comments.            (line  19)
20670 * line comment character, Alpha:         Alpha-Chars.         (line   6)
20671 * line comment character, ARM:           ARM-Chars.           (line   6)
20672 * line comment character, AVR:           AVR-Chars.           (line   6)
20673 * line comment character, D10V:          D10V-Chars.          (line   6)
20674 * line comment character, D30V:          D30V-Chars.          (line   6)
20675 * line comment character, H8/300:        H8/300-Chars.        (line   6)
20676 * line comment character, IA-64:         IA-64-Chars.         (line   6)
20677 * line comment character, M680x0:        M68K-Chars.          (line   6)
20678 * line comment character, MSP 430:       MSP430-Chars.        (line   6)
20679 * line comment character, s390:          s390 Characters.     (line   6)
20680 * line comment character, SH:            SH-Chars.            (line   6)
20681 * line comment character, SH64:          SH64-Chars.          (line   6)
20682 * line comment character, Sparc:         Sparc-Chars.         (line   6)
20683 * line comment character, V850:          V850-Chars.          (line   6)
20684 * line comment character, Z80:           Z80-Chars.           (line   6)
20685 * line comment character, Z8000:         Z8000-Chars.         (line   6)
20686 * line comment characters, CRIS:         CRIS-Chars.          (line   6)
20687 * line comment characters, MMIX:         MMIX-Chars.          (line   6)
20688 * line directive:                        Line.                (line   6)
20689 * line directive, MSP 430:               MSP430 Directives.   (line  14)
20690 * line numbers, in input files:          Input Files.         (line  35)
20691 * line numbers, in warnings/errors:      Errors.              (line  16)
20692 * line separator character:              Statements.          (line   6)
20693 * line separator, Alpha:                 Alpha-Chars.         (line   8)
20694 * line separator, ARM:                   ARM-Chars.           (line  10)
20695 * line separator, AVR:                   AVR-Chars.           (line  10)
20696 * line separator, H8/300:                H8/300-Chars.        (line   8)
20697 * line separator, IA-64:                 IA-64-Chars.         (line   8)
20698 * line separator, SH:                    SH-Chars.            (line   8)
20699 * line separator, SH64:                  SH64-Chars.          (line   8)
20700 * line separator, Sparc:                 Sparc-Chars.         (line   8)
20701 * line separator, Z8000:                 Z8000-Chars.         (line   8)
20702 * lines starting with #:                 Comments.            (line  39)
20703 * linker:                                Object.              (line  15)
20704 * linker, and assembler:                 Secs Background.     (line  10)
20705 * linkonce directive:                    Linkonce.            (line   6)
20706 * list directive:                        List.                (line   6)
20707 * list directive, TIC54X:                TIC54X-Directives.   (line 131)
20708 * listing control, turning off:          Nolist.              (line   6)
20709 * listing control, turning on:           List.                (line   6)
20710 * listing control: new page:             Eject.               (line   6)
20711 * listing control: paper size:           Psize.               (line   6)
20712 * listing control: subtitle:             Sbttl.               (line   6)
20713 * listing control: title line:           Title.               (line   6)
20714 * listings, enabling:                    a.                   (line   6)
20715 * literal directive:                     Literal Directive.   (line   6)
20716 * literal pool entries, s390:            s390 Literal Pool Entries.
20717                                                               (line   6)
20718 * literal_position directive:            Literal Position Directive.
20719                                                               (line   6)
20720 * literal_prefix directive:              Literal Prefix Directive.
20721                                                               (line   6)
20722 * little endian output, MIPS:            Overview.            (line 644)
20723 * little endian output, PJ:              Overview.            (line 551)
20724 * little-endian output, MIPS:            MIPS Opts.           (line  13)
20725 * LM32 modifiers:                        LM32-Modifiers.      (line   6)
20726 * LM32 opcode summary:                   LM32 Opcodes.        (line   6)
20727 * LM32 options (none):                   LM32 Options.        (line   6)
20728 * LM32 register names:                   LM32-Regs.           (line   6)
20729 * LM32 support:                          LM32-Dependent.      (line   6)
20730 * ln directive:                          Ln.                  (line   6)
20731 * lo pseudo-op, V850:                    V850 Opcodes.        (line  22)
20732 * loc directive:                         Loc.                 (line   6)
20733 * loc_mark_labels directive:             Loc_mark_labels.     (line   6)
20734 * local common symbols:                  Lcomm.               (line   6)
20735 * local directive:                       Local.               (line   6)
20736 * local labels:                          Symbol Names.        (line  35)
20737 * local symbol names:                    Symbol Names.        (line  22)
20738 * local symbols, retaining in output:    L.                   (line   6)
20739 * location counter:                      Dot.                 (line   6)
20740 * location counter, advancing:           Org.                 (line   6)
20741 * location counter, Z80:                 Z80-Chars.           (line   8)
20742 * logical file name:                     File.                (line  13)
20743 * logical line number:                   Line.                (line   6)
20744 * logical line numbers:                  Comments.            (line  39)
20745 * long directive:                        Long.                (line   6)
20746 * long directive, ARC:                   ARC Directives.      (line 159)
20747 * long directive, i386:                  i386-Float.          (line  21)
20748 * long directive, TIC54X:                TIC54X-Directives.   (line 135)
20749 * long directive, x86-64:                i386-Float.          (line  21)
20750 * longcall pseudo-op, V850:              V850 Opcodes.        (line 123)
20751 * longcalls directive:                   Longcalls Directive. (line   6)
20752 * longjump pseudo-op, V850:              V850 Opcodes.        (line 129)
20753 * loop directive, TIC54X:                TIC54X-Directives.   (line 143)
20754 * LOOP instructions, alignment:          Xtensa Automatic Alignment.
20755                                                               (line   6)
20756 * low directive, M32R:                   M32R-Directives.     (line   9)
20757 * lp register, V850:                     V850-Regs.           (line  98)
20758 * lval:                                  Z8000 Directives.    (line  27)
20759 * M16C architecture option:              M32C-Opts.           (line  12)
20760 * M32C architecture option:              M32C-Opts.           (line   9)
20761 * M32C modifiers:                        M32C-Modifiers.      (line   6)
20762 * M32C options:                          M32C-Opts.           (line   6)
20763 * M32C support:                          M32C-Dependent.      (line   6)
20764 * M32R architecture options:             M32R-Opts.           (line   9)
20765 * M32R directives:                       M32R-Directives.     (line   6)
20766 * M32R options:                          M32R-Opts.           (line   6)
20767 * M32R support:                          M32R-Dependent.      (line   6)
20768 * M32R warnings:                         M32R-Warnings.       (line   6)
20769 * M680x0 addressing modes:               M68K-Syntax.         (line  21)
20770 * M680x0 architecture options:           M68K-Opts.           (line 104)
20771 * M680x0 branch improvement:             M68K-Branch.         (line   6)
20772 * M680x0 directives:                     M68K-Directives.     (line   6)
20773 * M680x0 floating point:                 M68K-Float.          (line   6)
20774 * M680x0 immediate character:            M68K-Chars.          (line   6)
20775 * M680x0 line comment character:         M68K-Chars.          (line   6)
20776 * M680x0 opcodes:                        M68K-opcodes.        (line   6)
20777 * M680x0 options:                        M68K-Opts.           (line   6)
20778 * M680x0 pseudo-opcodes:                 M68K-Branch.         (line   6)
20779 * M680x0 size modifiers:                 M68K-Syntax.         (line   8)
20780 * M680x0 support:                        M68K-Dependent.      (line   6)
20781 * M680x0 syntax:                         M68K-Syntax.         (line   8)
20782 * M68HC11 addressing modes:              M68HC11-Syntax.      (line  17)
20783 * M68HC11 and M68HC12 support:           M68HC11-Dependent.   (line   6)
20784 * M68HC11 assembler directive .far:      M68HC11-Directives.  (line  20)
20785 * M68HC11 assembler directive .interrupt: M68HC11-Directives. (line  26)
20786 * M68HC11 assembler directive .mode:     M68HC11-Directives.  (line  16)
20787 * M68HC11 assembler directive .relax:    M68HC11-Directives.  (line  10)
20788 * M68HC11 assembler directive .xrefb:    M68HC11-Directives.  (line  31)
20789 * M68HC11 assembler directives:          M68HC11-Directives.  (line   6)
20790 * M68HC11 branch improvement:            M68HC11-Branch.      (line   6)
20791 * M68HC11 floating point:                M68HC11-Float.       (line   6)
20792 * M68HC11 modifiers:                     M68HC11-Modifiers.   (line   6)
20793 * M68HC11 opcodes:                       M68HC11-opcodes.     (line   6)
20794 * M68HC11 options:                       M68HC11-Opts.        (line   6)
20795 * M68HC11 pseudo-opcodes:                M68HC11-Branch.      (line   6)
20796 * M68HC11 syntax:                        M68HC11-Syntax.      (line   6)
20797 * M68HC12 assembler directives:          M68HC11-Directives.  (line   6)
20798 * machine dependencies:                  Machine Dependencies.
20799                                                               (line   6)
20800 * machine directives, ARC:               ARC Directives.      (line   6)
20801 * machine directives, ARM:               ARM Directives.      (line   6)
20802 * machine directives, H8/300 (none):     H8/300 Directives.   (line   6)
20803 * machine directives, i860:              Directives-i860.     (line   6)
20804 * machine directives, i960:              Directives-i960.     (line   6)
20805 * machine directives, MSP 430:           MSP430 Directives.   (line   6)
20806 * machine directives, SH:                SH Directives.       (line   6)
20807 * machine directives, SH64:              SH64 Directives.     (line   9)
20808 * machine directives, SPARC:             Sparc-Directives.    (line   6)
20809 * machine directives, TIC54X:            TIC54X-Directives.   (line   6)
20810 * machine directives, V850:              V850 Directives.     (line   6)
20811 * machine directives, VAX:               VAX-directives.      (line   6)
20812 * machine directives, x86:               i386-Directives.     (line   6)
20813 * machine independent directives:        Pseudo Ops.          (line   6)
20814 * machine instructions (not covered):    Manual.              (line  14)
20815 * machine-independent syntax:            Syntax.              (line   6)
20816 * macro directive:                       Macro.               (line  28)
20817 * macro directive, TIC54X:               TIC54X-Directives.   (line 153)
20818 * macros:                                Macro.               (line   6)
20819 * macros, count executed:                Macro.               (line 143)
20820 * Macros, MSP 430:                       MSP430-Macros.       (line   6)
20821 * macros, TIC54X:                        TIC54X-Macros.       (line   6)
20822 * make rules:                            MD.                  (line   6)
20823 * manual, structure and purpose:         Manual.              (line   6)
20824 * math builtins, TIC54X:                 TIC54X-Builtins.     (line   6)
20825 * Maximum number of continuation lines:  listing.             (line  34)
20826 * memory references, i386:               i386-Memory.         (line   6)
20827 * memory references, x86-64:             i386-Memory.         (line   6)
20828 * memory-mapped registers, TIC54X:       TIC54X-MMRegs.       (line   6)
20829 * merging text and data sections:        R.                   (line   6)
20830 * messages from assembler:               Errors.              (line   6)
20831 * MicroBlaze architectures:              MicroBlaze-Dependent.
20832                                                               (line   6)
20833 * MicroBlaze directives:                 MicroBlaze Directives.
20834                                                               (line   6)
20835 * MicroBlaze support:                    MicroBlaze-Dependent.
20836                                                               (line  13)
20837 * minus, permitted arguments:            Infix Ops.           (line  49)
20838 * MIPS architecture options:             MIPS Opts.           (line  29)
20839 * MIPS big-endian output:                MIPS Opts.           (line  13)
20840 * MIPS CPU override:                     MIPS ISA.            (line  18)
20841 * MIPS debugging directives:             MIPS Stabs.          (line   6)
20842 * MIPS DSP Release 1 instruction generation override: MIPS ASE instruction generation overrides.
20843                                                               (line  21)
20844 * MIPS DSP Release 2 instruction generation override: MIPS ASE instruction generation overrides.
20845                                                               (line  26)
20846 * MIPS ECOFF sections:                   MIPS Object.         (line   6)
20847 * MIPS endianness:                       Overview.            (line 641)
20848 * MIPS ISA:                              Overview.            (line 647)
20849 * MIPS ISA override:                     MIPS ISA.            (line   6)
20850 * MIPS little-endian output:             MIPS Opts.           (line  13)
20851 * MIPS MDMX instruction generation override: MIPS ASE instruction generation overrides.
20852                                                               (line  16)
20853 * MIPS MIPS-3D instruction generation override: MIPS ASE instruction generation overrides.
20854                                                               (line   6)
20855 * MIPS MT instruction generation override: MIPS ASE instruction generation overrides.
20856                                                               (line  32)
20857 * MIPS option stack:                     MIPS option stack.   (line   6)
20858 * MIPS processor:                        MIPS-Dependent.      (line   6)
20859 * MIT:                                   M68K-Syntax.         (line   6)
20860 * mlib directive, TIC54X:                TIC54X-Directives.   (line 159)
20861 * mlist directive, TIC54X:               TIC54X-Directives.   (line 164)
20862 * MMIX assembler directive BSPEC:        MMIX-Pseudos.        (line 131)
20863 * MMIX assembler directive BYTE:         MMIX-Pseudos.        (line  97)
20864 * MMIX assembler directive ESPEC:        MMIX-Pseudos.        (line 131)
20865 * MMIX assembler directive GREG:         MMIX-Pseudos.        (line  50)
20866 * MMIX assembler directive IS:           MMIX-Pseudos.        (line  42)
20867 * MMIX assembler directive LOC:          MMIX-Pseudos.        (line   7)
20868 * MMIX assembler directive LOCAL:        MMIX-Pseudos.        (line  28)
20869 * MMIX assembler directive OCTA:         MMIX-Pseudos.        (line 108)
20870 * MMIX assembler directive PREFIX:       MMIX-Pseudos.        (line 120)
20871 * MMIX assembler directive TETRA:        MMIX-Pseudos.        (line 108)
20872 * MMIX assembler directive WYDE:         MMIX-Pseudos.        (line 108)
20873 * MMIX assembler directives:             MMIX-Pseudos.        (line   6)
20874 * MMIX line comment characters:          MMIX-Chars.          (line   6)
20875 * MMIX options:                          MMIX-Opts.           (line   6)
20876 * MMIX pseudo-op BSPEC:                  MMIX-Pseudos.        (line 131)
20877 * MMIX pseudo-op BYTE:                   MMIX-Pseudos.        (line  97)
20878 * MMIX pseudo-op ESPEC:                  MMIX-Pseudos.        (line 131)
20879 * MMIX pseudo-op GREG:                   MMIX-Pseudos.        (line  50)
20880 * MMIX pseudo-op IS:                     MMIX-Pseudos.        (line  42)
20881 * MMIX pseudo-op LOC:                    MMIX-Pseudos.        (line   7)
20882 * MMIX pseudo-op LOCAL:                  MMIX-Pseudos.        (line  28)
20883 * MMIX pseudo-op OCTA:                   MMIX-Pseudos.        (line 108)
20884 * MMIX pseudo-op PREFIX:                 MMIX-Pseudos.        (line 120)
20885 * MMIX pseudo-op TETRA:                  MMIX-Pseudos.        (line 108)
20886 * MMIX pseudo-op WYDE:                   MMIX-Pseudos.        (line 108)
20887 * MMIX pseudo-ops:                       MMIX-Pseudos.        (line   6)
20888 * MMIX register names:                   MMIX-Regs.           (line   6)
20889 * MMIX support:                          MMIX-Dependent.      (line   6)
20890 * mmixal differences:                    MMIX-mmixal.         (line   6)
20891 * mmregs directive, TIC54X:              TIC54X-Directives.   (line 170)
20892 * mmsg directive, TIC54X:                TIC54X-Directives.   (line  77)
20893 * MMX, i386:                             i386-SIMD.           (line   6)
20894 * MMX, x86-64:                           i386-SIMD.           (line   6)
20895 * mnemonic compatibility, i386:          i386-Mnemonics.      (line  61)
20896 * mnemonic suffixes, i386:               i386-Syntax.         (line  29)
20897 * mnemonic suffixes, x86-64:             i386-Syntax.         (line  29)
20898 * mnemonics for opcodes, VAX:            VAX-opcodes.         (line   6)
20899 * mnemonics, AVR:                        AVR Opcodes.         (line   6)
20900 * mnemonics, D10V:                       D10V-Opcodes.        (line   6)
20901 * mnemonics, D30V:                       D30V-Opcodes.        (line   6)
20902 * mnemonics, H8/300:                     H8/300 Opcodes.      (line   6)
20903 * mnemonics, LM32:                       LM32 Opcodes.        (line   6)
20904 * mnemonics, SH:                         SH Opcodes.          (line   6)
20905 * mnemonics, SH64:                       SH64 Opcodes.        (line   6)
20906 * mnemonics, Z8000:                      Z8000 Opcodes.       (line   6)
20907 * mnolist directive, TIC54X:             TIC54X-Directives.   (line 164)
20908 * Motorola syntax for the 680x0:         M68K-Moto-Syntax.    (line   6)
20909 * MOVI instructions, relaxation:         Xtensa Immediate Relaxation.
20910                                                               (line  12)
20911 * MOVW and MOVT relocations, ARM:        ARM-Relocations.     (line  20)
20912 * MRI compatibility mode:                M.                   (line   6)
20913 * mri directive:                         MRI.                 (line   6)
20914 * MRI mode, temporarily:                 MRI.                 (line   6)
20915 * MSP 430 floating point (IEEE):         MSP430 Floating Point.
20916                                                               (line   6)
20917 * MSP 430 identifiers:                   MSP430-Chars.        (line   8)
20918 * MSP 430 line comment character:        MSP430-Chars.        (line   6)
20919 * MSP 430 machine directives:            MSP430 Directives.   (line   6)
20920 * MSP 430 macros:                        MSP430-Macros.       (line   6)
20921 * MSP 430 opcodes:                       MSP430 Opcodes.      (line   6)
20922 * MSP 430 options (none):                MSP430 Options.      (line   6)
20923 * MSP 430 profiling capability:          MSP430 Profiling Capability.
20924                                                               (line   6)
20925 * MSP 430 register names:                MSP430-Regs.         (line   6)
20926 * MSP 430 support:                       MSP430-Dependent.    (line   6)
20927 * MSP430 Assembler Extensions:           MSP430-Ext.          (line   6)
20928 * mul instruction, i386:                 i386-Notes.          (line   6)
20929 * mul instruction, x86-64:               i386-Notes.          (line   6)
20930 * name:                                  Z8000 Directives.    (line  18)
20931 * named section:                         Section.             (line   6)
20932 * named sections:                        Ld Sections.         (line   8)
20933 * names, symbol:                         Symbol Names.        (line   6)
20934 * naming object file:                    o.                   (line   6)
20935 * new page, in listings:                 Eject.               (line   6)
20936 * newblock directive, TIC54X:            TIC54X-Directives.   (line 176)
20937 * newline (\n):                          Strings.             (line  21)
20938 * newline, required at file end:         Statements.          (line  13)
20939 * no-absolute-literals directive:        Absolute Literals Directive.
20940                                                               (line   6)
20941 * no-longcalls directive:                Longcalls Directive. (line   6)
20942 * no-schedule directive:                 Schedule Directive.  (line   6)
20943 * no-transform directive:                Transform Directive. (line   6)
20944 * nolist directive:                      Nolist.              (line   6)
20945 * nolist directive, TIC54X:              TIC54X-Directives.   (line 131)
20946 * NOP pseudo op, ARM:                    ARM Opcodes.         (line   9)
20947 * notes for Alpha:                       Alpha Notes.         (line   6)
20948 * null-terminated strings:               Asciz.               (line   6)
20949 * number constants:                      Numbers.             (line   6)
20950 * number of macros executed:             Macro.               (line 143)
20951 * numbered subsections:                  Sub-Sections.        (line   6)
20952 * numbers, 16-bit:                       hword.               (line   6)
20953 * numeric values:                        Expressions.         (line   6)
20954 * nword directive, SPARC:                Sparc-Directives.    (line  20)
20955 * object attributes:                     Object Attributes.   (line   6)
20956 * object file:                           Object.              (line   6)
20957 * object file format:                    Object Formats.      (line   6)
20958 * object file name:                      o.                   (line   6)
20959 * object file, after errors:             Z.                   (line   6)
20960 * obsolescent directives:                Deprecated.          (line   6)
20961 * octa directive:                        Octa.                (line   6)
20962 * octal character code (\DDD):           Strings.             (line  30)
20963 * octal integers:                        Integers.            (line   9)
20964 * offset directive, V850:                V850 Directives.     (line   6)
20965 * opcode mnemonics, VAX:                 VAX-opcodes.         (line   6)
20966 * opcode names, Xtensa:                  Xtensa Opcodes.      (line   6)
20967 * opcode summary, AVR:                   AVR Opcodes.         (line   6)
20968 * opcode summary, D10V:                  D10V-Opcodes.        (line   6)
20969 * opcode summary, D30V:                  D30V-Opcodes.        (line   6)
20970 * opcode summary, H8/300:                H8/300 Opcodes.      (line   6)
20971 * opcode summary, LM32:                  LM32 Opcodes.        (line   6)
20972 * opcode summary, SH:                    SH Opcodes.          (line   6)
20973 * opcode summary, SH64:                  SH64 Opcodes.        (line   6)
20974 * opcode summary, Z8000:                 Z8000 Opcodes.       (line   6)
20975 * opcodes for ARC:                       ARC Opcodes.         (line   6)
20976 * opcodes for ARM:                       ARM Opcodes.         (line   6)
20977 * opcodes for MSP 430:                   MSP430 Opcodes.      (line   6)
20978 * opcodes for V850:                      V850 Opcodes.        (line   6)
20979 * opcodes, i860:                         Opcodes for i860.    (line   6)
20980 * opcodes, i960:                         Opcodes for i960.    (line   6)
20981 * opcodes, M680x0:                       M68K-opcodes.        (line   6)
20982 * opcodes, M68HC11:                      M68HC11-opcodes.     (line   6)
20983 * operand delimiters, i386:              i386-Syntax.         (line  15)
20984 * operand delimiters, x86-64:            i386-Syntax.         (line  15)
20985 * operand notation, VAX:                 VAX-operands.        (line   6)
20986 * operands in expressions:               Arguments.           (line   6)
20987 * operator precedence:                   Infix Ops.           (line  11)
20988 * operators, in expressions:             Operators.           (line   6)
20989 * operators, permitted arguments:        Infix Ops.           (line   6)
20990 * optimization, D10V:                    Overview.            (line 420)
20991 * optimization, D30V:                    Overview.            (line 425)
20992 * optimizations:                         Xtensa Optimizations.
20993                                                               (line   6)
20994 * option directive, ARC:                 ARC Directives.      (line 162)
20995 * option directive, TIC54X:              TIC54X-Directives.   (line 180)
20996 * option summary:                        Overview.            (line   6)
20997 * options for Alpha:                     Alpha Options.       (line   6)
20998 * options for ARC (none):                ARC Options.         (line   6)
20999 * options for ARM (none):                ARM Options.         (line   6)
21000 * options for AVR (none):                AVR Options.         (line   6)
21001 * options for Blackfin (none):           Blackfin Options.    (line   6)
21002 * options for i386:                      i386-Options.        (line   6)
21003 * options for IA-64:                     IA-64 Options.       (line   6)
21004 * options for LM32 (none):               LM32 Options.        (line   6)
21005 * options for MSP430 (none):             MSP430 Options.      (line   6)
21006 * options for PDP-11:                    PDP-11-Options.      (line   6)
21007 * options for PowerPC:                   PowerPC-Opts.        (line   6)
21008 * options for s390:                      s390 Options.        (line   6)
21009 * options for SCORE:                     SCORE-Opts.          (line   6)
21010 * options for SPARC:                     Sparc-Opts.          (line   6)
21011 * options for V850 (none):               V850 Options.        (line   6)
21012 * options for VAX/VMS:                   VAX-Opts.            (line  42)
21013 * options for x86-64:                    i386-Options.        (line   6)
21014 * options for Z80:                       Z80 Options.         (line   6)
21015 * options, all versions of assembler:    Invoking.            (line   6)
21016 * options, command line:                 Command Line.        (line  13)
21017 * options, CRIS:                         CRIS-Opts.           (line   6)
21018 * options, D10V:                         D10V-Opts.           (line   6)
21019 * options, D30V:                         D30V-Opts.           (line   6)
21020 * options, H8/300:                       H8/300 Options.      (line   6)
21021 * options, i960:                         Options-i960.        (line   6)
21022 * options, IP2K:                         IP2K-Opts.           (line   6)
21023 * options, M32C:                         M32C-Opts.           (line   6)
21024 * options, M32R:                         M32R-Opts.           (line   6)
21025 * options, M680x0:                       M68K-Opts.           (line   6)
21026 * options, M68HC11:                      M68HC11-Opts.        (line   6)
21027 * options, MMIX:                         MMIX-Opts.           (line   6)
21028 * options, PJ:                           PJ Options.          (line   6)
21029 * options, SH:                           SH Options.          (line   6)
21030 * options, SH64:                         SH64 Options.        (line   6)
21031 * options, TIC54X:                       TIC54X-Opts.         (line   6)
21032 * options, Z8000:                        Z8000 Options.       (line   6)
21033 * org directive:                         Org.                 (line   6)
21034 * other attribute, of a.out symbol:      Symbol Other.        (line   6)
21035 * output file:                           Object.              (line   6)
21036 * p2align directive:                     P2align.             (line   6)
21037 * p2alignl directive:                    P2align.             (line  28)
21038 * p2alignw directive:                    P2align.             (line  28)
21039 * padding the location counter:          Align.               (line   6)
21040 * padding the location counter given a power of two: P2align. (line   6)
21041 * padding the location counter given number of bytes: Balign. (line   6)
21042 * page, in listings:                     Eject.               (line   6)
21043 * paper size, for listings:              Psize.               (line   6)
21044 * paths for .include:                    I.                   (line   6)
21045 * patterns, writing in memory:           Fill.                (line   6)
21046 * PDP-11 comments:                       PDP-11-Syntax.       (line  16)
21047 * PDP-11 floating-point register syntax: PDP-11-Syntax.       (line  13)
21048 * PDP-11 general-purpose register syntax: PDP-11-Syntax.      (line  10)
21049 * PDP-11 instruction naming:             PDP-11-Mnemonics.    (line   6)
21050 * PDP-11 support:                        PDP-11-Dependent.    (line   6)
21051 * PDP-11 syntax:                         PDP-11-Syntax.       (line   6)
21052 * PIC code generation for ARM:           ARM Options.         (line 139)
21053 * PIC code generation for M32R:          M32R-Opts.           (line  42)
21054 * PIC selection, MIPS:                   MIPS Opts.           (line  21)
21055 * PJ endianness:                         Overview.            (line 548)
21056 * PJ options:                            PJ Options.          (line   6)
21057 * PJ support:                            PJ-Dependent.        (line   6)
21058 * plus, permitted arguments:             Infix Ops.           (line  44)
21059 * popsection directive:                  PopSection.          (line   6)
21060 * Position-independent code, CRIS:       CRIS-Opts.           (line  27)
21061 * Position-independent code, symbols in, CRIS: CRIS-Pic.      (line   6)
21062 * PowerPC architectures:                 PowerPC-Opts.        (line   6)
21063 * PowerPC directives:                    PowerPC-Pseudo.      (line   6)
21064 * PowerPC options:                       PowerPC-Opts.        (line   6)
21065 * PowerPC support:                       PPC-Dependent.       (line   6)
21066 * precedence of operators:               Infix Ops.           (line  11)
21067 * precision, floating point:             Flonums.             (line   6)
21068 * prefix operators:                      Prefix Ops.          (line   6)
21069 * prefixes, i386:                        i386-Prefixes.       (line   6)
21070 * preprocessing:                         Preprocessing.       (line   6)
21071 * preprocessing, turning on and off:     Preprocessing.       (line  27)
21072 * previous directive:                    Previous.            (line   6)
21073 * primary attributes, COFF symbols:      COFF Symbols.        (line  13)
21074 * print directive:                       Print.               (line   6)
21075 * proc directive, SPARC:                 Sparc-Directives.    (line  25)
21076 * profiler directive, MSP 430:           MSP430 Directives.   (line  22)
21077 * profiling capability for MSP 430:      MSP430 Profiling Capability.
21078                                                               (line   6)
21079 * protected directive:                   Protected.           (line   6)
21080 * pseudo-op .arch, CRIS:                 CRIS-Pseudos.        (line  45)
21081 * pseudo-op .dword, CRIS:                CRIS-Pseudos.        (line  12)
21082 * pseudo-op .syntax, CRIS:               CRIS-Pseudos.        (line  17)
21083 * pseudo-op BSPEC, MMIX:                 MMIX-Pseudos.        (line 131)
21084 * pseudo-op BYTE, MMIX:                  MMIX-Pseudos.        (line  97)
21085 * pseudo-op ESPEC, MMIX:                 MMIX-Pseudos.        (line 131)
21086 * pseudo-op GREG, MMIX:                  MMIX-Pseudos.        (line  50)
21087 * pseudo-op IS, MMIX:                    MMIX-Pseudos.        (line  42)
21088 * pseudo-op LOC, MMIX:                   MMIX-Pseudos.        (line   7)
21089 * pseudo-op LOCAL, MMIX:                 MMIX-Pseudos.        (line  28)
21090 * pseudo-op OCTA, MMIX:                  MMIX-Pseudos.        (line 108)
21091 * pseudo-op PREFIX, MMIX:                MMIX-Pseudos.        (line 120)
21092 * pseudo-op TETRA, MMIX:                 MMIX-Pseudos.        (line 108)
21093 * pseudo-op WYDE, MMIX:                  MMIX-Pseudos.        (line 108)
21094 * pseudo-opcodes, M680x0:                M68K-Branch.         (line   6)
21095 * pseudo-opcodes, M68HC11:               M68HC11-Branch.      (line   6)
21096 * pseudo-ops for branch, VAX:            VAX-branch.          (line   6)
21097 * pseudo-ops, CRIS:                      CRIS-Pseudos.        (line   6)
21098 * pseudo-ops, machine independent:       Pseudo Ops.          (line   6)
21099 * pseudo-ops, MMIX:                      MMIX-Pseudos.        (line   6)
21100 * psize directive:                       Psize.               (line   6)
21101 * PSR bits:                              IA-64-Bits.          (line   6)
21102 * pstring directive, TIC54X:             TIC54X-Directives.   (line 209)
21103 * psw register, V850:                    V850-Regs.           (line 116)
21104 * purgem directive:                      Purgem.              (line   6)
21105 * purpose of GNU assembler:              GNU Assembler.       (line  12)
21106 * pushsection directive:                 PushSection.         (line   6)
21107 * quad directive:                        Quad.                (line   6)
21108 * quad directive, i386:                  i386-Float.          (line  21)
21109 * quad directive, x86-64:                i386-Float.          (line  21)
21110 * real-mode code, i386:                  i386-16bit.          (line   6)
21111 * ref directive, TIC54X:                 TIC54X-Directives.   (line 103)
21112 * register directive, SPARC:             Sparc-Directives.    (line  29)
21113 * register names, Alpha:                 Alpha-Regs.          (line   6)
21114 * register names, ARC:                   ARC-Regs.            (line   6)
21115 * register names, ARM:                   ARM-Regs.            (line   6)
21116 * register names, AVR:                   AVR-Regs.            (line   6)
21117 * register names, CRIS:                  CRIS-Regs.           (line   6)
21118 * register names, H8/300:                H8/300-Regs.         (line   6)
21119 * register names, IA-64:                 IA-64-Regs.          (line   6)
21120 * register names, LM32:                  LM32-Regs.           (line   6)
21121 * register names, MMIX:                  MMIX-Regs.           (line   6)
21122 * register names, MSP 430:               MSP430-Regs.         (line   6)
21123 * register names, Sparc:                 Sparc-Regs.          (line   6)
21124 * register names, V850:                  V850-Regs.           (line   6)
21125 * register names, VAX:                   VAX-operands.        (line  17)
21126 * register names, Xtensa:                Xtensa Registers.    (line   6)
21127 * register names, Z80:                   Z80-Regs.            (line   6)
21128 * register naming, s390:                 s390 Register.       (line   6)
21129 * register operands, i386:               i386-Syntax.         (line  15)
21130 * register operands, x86-64:             i386-Syntax.         (line  15)
21131 * registers, D10V:                       D10V-Regs.           (line   6)
21132 * registers, D30V:                       D30V-Regs.           (line   6)
21133 * registers, i386:                       i386-Regs.           (line   6)
21134 * registers, SH:                         SH-Regs.             (line   6)
21135 * registers, SH64:                       SH64-Regs.           (line   6)
21136 * registers, TIC54X memory-mapped:       TIC54X-MMRegs.       (line   6)
21137 * registers, x86-64:                     i386-Regs.           (line   6)
21138 * registers, Z8000:                      Z8000-Regs.          (line   6)
21139 * relaxation:                            Xtensa Relaxation.   (line   6)
21140 * relaxation of ADDI instructions:       Xtensa Immediate Relaxation.
21141                                                               (line  43)
21142 * relaxation of branch instructions:     Xtensa Branch Relaxation.
21143                                                               (line   6)
21144 * relaxation of call instructions:       Xtensa Call Relaxation.
21145                                                               (line   6)
21146 * relaxation of immediate fields:        Xtensa Immediate Relaxation.
21147                                                               (line   6)
21148 * relaxation of L16SI instructions:      Xtensa Immediate Relaxation.
21149                                                               (line  23)
21150 * relaxation of L16UI instructions:      Xtensa Immediate Relaxation.
21151                                                               (line  23)
21152 * relaxation of L32I instructions:       Xtensa Immediate Relaxation.
21153                                                               (line  23)
21154 * relaxation of L8UI instructions:       Xtensa Immediate Relaxation.
21155                                                               (line  23)
21156 * relaxation of MOVI instructions:       Xtensa Immediate Relaxation.
21157                                                               (line  12)
21158 * reloc directive:                       Reloc.               (line   6)
21159 * relocation:                            Sections.            (line   6)
21160 * relocation example:                    Ld Sections.         (line  40)
21161 * relocations, Alpha:                    Alpha-Relocs.        (line   6)
21162 * relocations, Sparc:                    Sparc-Relocs.        (line   6)
21163 * repeat prefixes, i386:                 i386-Prefixes.       (line  44)
21164 * reporting bugs in assembler:           Reporting Bugs.      (line   6)
21165 * rept directive:                        Rept.                (line   6)
21166 * reserve directive, SPARC:              Sparc-Directives.    (line  39)
21167 * return instructions, i386:             i386-Syntax.         (line  38)
21168 * return instructions, x86-64:           i386-Syntax.         (line  38)
21169 * REX prefixes, i386:                    i386-Prefixes.       (line  46)
21170 * rsect:                                 Z8000 Directives.    (line  52)
21171 * s390 floating point:                   s390 Floating Point. (line   6)
21172 * s390 instruction aliases:              s390 Aliases.        (line   6)
21173 * s390 instruction formats:              s390 Formats.        (line   6)
21174 * s390 instruction marker:               s390 Instruction Marker.
21175                                                               (line   6)
21176 * s390 instruction mnemonics:            s390 Mnemonics.      (line   6)
21177 * s390 instruction operand modifier:     s390 Operand Modifier.
21178                                                               (line   6)
21179 * s390 instruction operands:             s390 Operands.       (line   6)
21180 * s390 instruction syntax:               s390 Syntax.         (line   6)
21181 * s390 line comment character:           s390 Characters.     (line   6)
21182 * s390 literal pool entries:             s390 Literal Pool Entries.
21183                                                               (line   6)
21184 * s390 options:                          s390 Options.        (line   6)
21185 * s390 register naming:                  s390 Register.       (line   6)
21186 * s390 support:                          S/390-Dependent.     (line   6)
21187 * sblock directive, TIC54X:              TIC54X-Directives.   (line 183)
21188 * sbttl directive:                       Sbttl.               (line   6)
21189 * schedule directive:                    Schedule Directive.  (line   6)
21190 * scl directive:                         Scl.                 (line   6)
21191 * SCORE architectures:                   SCORE-Opts.          (line   6)
21192 * SCORE directives:                      SCORE-Pseudo.        (line   6)
21193 * SCORE options:                         SCORE-Opts.          (line   6)
21194 * SCORE processor:                       SCORE-Dependent.     (line   6)
21195 * sdaoff pseudo-op, V850:                V850 Opcodes.        (line  65)
21196 * search path for .include:              I.                   (line   6)
21197 * sect directive, MSP 430:               MSP430 Directives.   (line  18)
21198 * sect directive, TIC54X:                TIC54X-Directives.   (line 189)
21199 * section directive (COFF version):      Section.             (line  16)
21200 * section directive (ELF version):       Section.             (line  70)
21201 * section directive, V850:               V850 Directives.     (line   9)
21202 * section override prefixes, i386:       i386-Prefixes.       (line  23)
21203 * Section Stack <1>:                     Section.             (line  65)
21204 * Section Stack <2>:                     SubSection.          (line   6)
21205 * Section Stack <3>:                     PopSection.          (line   6)
21206 * Section Stack <4>:                     PushSection.         (line   6)
21207 * Section Stack:                         Previous.            (line   6)
21208 * section-relative addressing:           Secs Background.     (line  68)
21209 * sections:                              Sections.            (line   6)
21210 * sections in messages, internal:        As Sections.         (line   6)
21211 * sections, i386:                        i386-Syntax.         (line  44)
21212 * sections, named:                       Ld Sections.         (line   8)
21213 * sections, x86-64:                      i386-Syntax.         (line  44)
21214 * seg directive, SPARC:                  Sparc-Directives.    (line  44)
21215 * segm:                                  Z8000 Directives.    (line  10)
21216 * set directive:                         Set.                 (line   6)
21217 * set directive, TIC54X:                 TIC54X-Directives.   (line 192)
21218 * SH addressing modes:                   SH-Addressing.       (line   6)
21219 * SH floating point (IEEE):              SH Floating Point.   (line   6)
21220 * SH line comment character:             SH-Chars.            (line   6)
21221 * SH line separator:                     SH-Chars.            (line   8)
21222 * SH machine directives:                 SH Directives.       (line   6)
21223 * SH opcode summary:                     SH Opcodes.          (line   6)
21224 * SH options:                            SH Options.          (line   6)
21225 * SH registers:                          SH-Regs.             (line   6)
21226 * SH support:                            SH-Dependent.        (line   6)
21227 * SH64 ABI options:                      SH64 Options.        (line  29)
21228 * SH64 addressing modes:                 SH64-Addressing.     (line   6)
21229 * SH64 ISA options:                      SH64 Options.        (line   6)
21230 * SH64 line comment character:           SH64-Chars.          (line   6)
21231 * SH64 line separator:                   SH64-Chars.          (line   8)
21232 * SH64 machine directives:               SH64 Directives.     (line   9)
21233 * SH64 opcode summary:                   SH64 Opcodes.        (line   6)
21234 * SH64 options:                          SH64 Options.        (line   6)
21235 * SH64 registers:                        SH64-Regs.           (line   6)
21236 * SH64 support:                          SH64-Dependent.      (line   6)
21237 * shigh directive, M32R:                 M32R-Directives.     (line  26)
21238 * short directive:                       Short.               (line   6)
21239 * short directive, ARC:                  ARC Directives.      (line 171)
21240 * short directive, TIC54X:               TIC54X-Directives.   (line 111)
21241 * SIMD, i386:                            i386-SIMD.           (line   6)
21242 * SIMD, x86-64:                          i386-SIMD.           (line   6)
21243 * single character constant:             Chars.               (line   6)
21244 * single directive:                      Single.              (line   6)
21245 * single directive, i386:                i386-Float.          (line  14)
21246 * single directive, x86-64:              i386-Float.          (line  14)
21247 * single quote, Z80:                     Z80-Chars.           (line  13)
21248 * sixteen bit integers:                  hword.               (line   6)
21249 * sixteen byte integer:                  Octa.                (line   6)
21250 * size directive (COFF version):         Size.                (line  11)
21251 * size directive (ELF version):          Size.                (line  19)
21252 * size modifiers, D10V:                  D10V-Size.           (line   6)
21253 * size modifiers, D30V:                  D30V-Size.           (line   6)
21254 * size modifiers, M680x0:                M68K-Syntax.         (line   8)
21255 * size prefixes, i386:                   i386-Prefixes.       (line  27)
21256 * size suffixes, H8/300:                 H8/300 Opcodes.      (line 163)
21257 * size, translations, Sparc:             Sparc-Size-Translations.
21258                                                               (line   6)
21259 * sizes operands, i386:                  i386-Syntax.         (line  29)
21260 * sizes operands, x86-64:                i386-Syntax.         (line  29)
21261 * skip directive:                        Skip.                (line   6)
21262 * skip directive, M680x0:                M68K-Directives.     (line  19)
21263 * skip directive, SPARC:                 Sparc-Directives.    (line  48)
21264 * sleb128 directive:                     Sleb128.             (line   6)
21265 * small objects, MIPS ECOFF:             MIPS Object.         (line  11)
21266 * SmartMIPS instruction generation override: MIPS ASE instruction generation overrides.
21267                                                               (line  11)
21268 * SOM symbol attributes:                 SOM Symbols.         (line   6)
21269 * source program:                        Input Files.         (line   6)
21270 * source, destination operands; i386:    i386-Syntax.         (line  22)
21271 * source, destination operands; x86-64:  i386-Syntax.         (line  22)
21272 * sp register:                           Xtensa Registers.    (line   6)
21273 * sp register, V850:                     V850-Regs.           (line  14)
21274 * space directive:                       Space.               (line   6)
21275 * space directive, TIC54X:               TIC54X-Directives.   (line 197)
21276 * space used, maximum for assembly:      statistics.          (line   6)
21277 * SPARC architectures:                   Sparc-Opts.          (line   6)
21278 * Sparc constants:                       Sparc-Constants.     (line   6)
21279 * SPARC data alignment:                  Sparc-Aligned-Data.  (line   6)
21280 * SPARC floating point (IEEE):           Sparc-Float.         (line   6)
21281 * Sparc line comment character:          Sparc-Chars.         (line   6)
21282 * Sparc line separator:                  Sparc-Chars.         (line   8)
21283 * SPARC machine directives:              Sparc-Directives.    (line   6)
21284 * SPARC options:                         Sparc-Opts.          (line   6)
21285 * Sparc registers:                       Sparc-Regs.          (line   6)
21286 * Sparc relocations:                     Sparc-Relocs.        (line   6)
21287 * Sparc size translations:               Sparc-Size-Translations.
21288                                                               (line   6)
21289 * SPARC support:                         Sparc-Dependent.     (line   6)
21290 * SPARC syntax:                          Sparc-Aligned-Data.  (line  21)
21291 * special characters, ARC:               ARC-Chars.           (line   6)
21292 * special characters, M680x0:            M68K-Chars.          (line   6)
21293 * special purpose registers, MSP 430:    MSP430-Regs.         (line  11)
21294 * sslist directive, TIC54X:              TIC54X-Directives.   (line 204)
21295 * ssnolist directive, TIC54X:            TIC54X-Directives.   (line 204)
21296 * stabd directive:                       Stab.                (line  38)
21297 * stabn directive:                       Stab.                (line  48)
21298 * stabs directive:                       Stab.                (line  51)
21299 * stabX directives:                      Stab.                (line   6)
21300 * standard assembler sections:           Secs Background.     (line  27)
21301 * standard input, as input file:         Command Line.        (line  10)
21302 * statement separator character:         Statements.          (line   6)
21303 * statement separator, Alpha:            Alpha-Chars.         (line   8)
21304 * statement separator, ARM:              ARM-Chars.           (line  10)
21305 * statement separator, AVR:              AVR-Chars.           (line  10)
21306 * statement separator, H8/300:           H8/300-Chars.        (line   8)
21307 * statement separator, IA-64:            IA-64-Chars.         (line   8)
21308 * statement separator, SH:               SH-Chars.            (line   8)
21309 * statement separator, SH64:             SH64-Chars.          (line   8)
21310 * statement separator, Sparc:            Sparc-Chars.         (line   8)
21311 * statement separator, Z8000:            Z8000-Chars.         (line   8)
21312 * statements, structure of:              Statements.          (line   6)
21313 * statistics, about assembly:            statistics.          (line   6)
21314 * stopping the assembly:                 Abort.               (line   6)
21315 * string constants:                      Strings.             (line   6)
21316 * string directive:                      String.              (line   8)
21317 * string directive on HPPA:              HPPA Directives.     (line 137)
21318 * string directive, TIC54X:              TIC54X-Directives.   (line 209)
21319 * string literals:                       Ascii.               (line   6)
21320 * string, copying to object file:        String.              (line   8)
21321 * string16 directive:                    String.              (line   8)
21322 * string16, copying to object file:      String.              (line   8)
21323 * string32 directive:                    String.              (line   8)
21324 * string32, copying to object file:      String.              (line   8)
21325 * string64 directive:                    String.              (line   8)
21326 * string64, copying to object file:      String.              (line   8)
21327 * string8 directive:                     String.              (line   8)
21328 * string8, copying to object file:       String.              (line   8)
21329 * struct directive:                      Struct.              (line   6)
21330 * struct directive, TIC54X:              TIC54X-Directives.   (line 217)
21331 * structure debugging, COFF:             Tag.                 (line   6)
21332 * sub-instruction ordering, D10V:        D10V-Chars.          (line   6)
21333 * sub-instruction ordering, D30V:        D30V-Chars.          (line   6)
21334 * sub-instructions, D10V:                D10V-Subs.           (line   6)
21335 * sub-instructions, D30V:                D30V-Subs.           (line   6)
21336 * subexpressions:                        Arguments.           (line  24)
21337 * subsection directive:                  SubSection.          (line   6)
21338 * subsym builtins, TIC54X:               TIC54X-Macros.       (line  16)
21339 * subtitles for listings:                Sbttl.               (line   6)
21340 * subtraction, permitted arguments:      Infix Ops.           (line  49)
21341 * summary of options:                    Overview.            (line   6)
21342 * support:                               HPPA-Dependent.      (line   6)
21343 * supporting files, including:           Include.             (line   6)
21344 * suppressing warnings:                  W.                   (line  11)
21345 * sval:                                  Z8000 Directives.    (line  33)
21346 * symbol attributes:                     Symbol Attributes.   (line   6)
21347 * symbol attributes, a.out:              a.out Symbols.       (line   6)
21348 * symbol attributes, COFF:               COFF Symbols.        (line   6)
21349 * symbol attributes, SOM:                SOM Symbols.         (line   6)
21350 * symbol descriptor, COFF:               Desc.                (line   6)
21351 * symbol modifiers <1>:                  AVR-Modifiers.       (line  12)
21352 * symbol modifiers <2>:                  LM32-Modifiers.      (line  12)
21353 * symbol modifiers <3>:                  M32C-Modifiers.      (line  11)
21354 * symbol modifiers:                      M68HC11-Modifiers.   (line  12)
21355 * symbol names:                          Symbol Names.        (line   6)
21356 * symbol names, $ in <1>:                SH-Chars.            (line  10)
21357 * symbol names, $ in <2>:                SH64-Chars.          (line  10)
21358 * symbol names, $ in <3>:                D30V-Chars.          (line  63)
21359 * symbol names, $ in:                    D10V-Chars.          (line  46)
21360 * symbol names, local:                   Symbol Names.        (line  22)
21361 * symbol names, temporary:               Symbol Names.        (line  35)
21362 * symbol storage class (COFF):           Scl.                 (line   6)
21363 * symbol type:                           Symbol Type.         (line   6)
21364 * symbol type, COFF:                     Type.                (line  11)
21365 * symbol type, ELF:                      Type.                (line  22)
21366 * symbol value:                          Symbol Value.        (line   6)
21367 * symbol value, setting:                 Set.                 (line   6)
21368 * symbol values, assigning:              Setting Symbols.     (line   6)
21369 * symbol versioning:                     Symver.              (line   6)
21370 * symbol, common:                        Comm.                (line   6)
21371 * symbol, making visible to linker:      Global.              (line   6)
21372 * symbolic debuggers, information for:   Stab.                (line   6)
21373 * symbols:                               Symbols.             (line   6)
21374 * Symbols in position-independent code, CRIS: CRIS-Pic.       (line   6)
21375 * symbols with uppercase, VAX/VMS:       VAX-Opts.            (line  42)
21376 * symbols, assigning values to:          Equ.                 (line   6)
21377 * Symbols, built-in, CRIS:               CRIS-Symbols.        (line   6)
21378 * Symbols, CRIS, built-in:               CRIS-Symbols.        (line   6)
21379 * symbols, local common:                 Lcomm.               (line   6)
21380 * symver directive:                      Symver.              (line   6)
21381 * syntax compatibility, i386:            i386-Syntax.         (line   6)
21382 * syntax compatibility, x86-64:          i386-Syntax.         (line   6)
21383 * syntax, AVR:                           AVR-Modifiers.       (line   6)
21384 * syntax, Blackfin:                      Blackfin Syntax.     (line   6)
21385 * syntax, D10V:                          D10V-Syntax.         (line   6)
21386 * syntax, D30V:                          D30V-Syntax.         (line   6)
21387 * syntax, LM32:                          LM32-Modifiers.      (line   6)
21388 * syntax, M32C:                          M32C-Modifiers.      (line   6)
21389 * syntax, M680x0:                        M68K-Syntax.         (line   8)
21390 * syntax, M68HC11 <1>:                   M68HC11-Modifiers.   (line   6)
21391 * syntax, M68HC11:                       M68HC11-Syntax.      (line   6)
21392 * syntax, machine-independent:           Syntax.              (line   6)
21393 * syntax, SPARC:                         Sparc-Aligned-Data.  (line  21)
21394 * syntax, Xtensa assembler:              Xtensa Syntax.       (line   6)
21395 * sysproc directive, i960:               Directives-i960.     (line  37)
21396 * tab (\t):                              Strings.             (line  27)
21397 * tab directive, TIC54X:                 TIC54X-Directives.   (line 248)
21398 * tag directive:                         Tag.                 (line   6)
21399 * tag directive, TIC54X:                 TIC54X-Directives.   (line 251)
21400 * tdaoff pseudo-op, V850:                V850 Opcodes.        (line  81)
21401 * temporary symbol names:                Symbol Names.        (line  35)
21402 * text and data sections, joining:       R.                   (line   6)
21403 * text directive:                        Text.                (line   6)
21404 * text section:                          Ld Sections.         (line   9)
21405 * tfloat directive, i386:                i386-Float.          (line  14)
21406 * tfloat directive, x86-64:              i386-Float.          (line  14)
21407 * Thumb support:                         ARM-Dependent.       (line   6)
21408 * TIC54X builtin math functions:         TIC54X-Builtins.     (line   6)
21409 * TIC54X machine directives:             TIC54X-Directives.   (line   6)
21410 * TIC54X memory-mapped registers:        TIC54X-MMRegs.       (line   6)
21411 * TIC54X options:                        TIC54X-Opts.         (line   6)
21412 * TIC54X subsym builtins:                TIC54X-Macros.       (line  16)
21413 * TIC54X support:                        TIC54X-Dependent.    (line   6)
21414 * TIC54X-specific macros:                TIC54X-Macros.       (line   6)
21415 * time, total for assembly:              statistics.          (line   6)
21416 * title directive:                       Title.               (line   6)
21417 * tp register, V850:                     V850-Regs.           (line  20)
21418 * transform directive:                   Transform Directive. (line   6)
21419 * trusted compiler:                      f.                   (line   6)
21420 * turning preprocessing on and off:      Preprocessing.       (line  27)
21421 * type directive (COFF version):         Type.                (line  11)
21422 * type directive (ELF version):          Type.                (line  22)
21423 * type of a symbol:                      Symbol Type.         (line   6)
21424 * ualong directive, SH:                  SH Directives.       (line   6)
21425 * uaword directive, SH:                  SH Directives.       (line   6)
21426 * ubyte directive, TIC54X:               TIC54X-Directives.   (line  36)
21427 * uchar directive, TIC54X:               TIC54X-Directives.   (line  36)
21428 * uhalf directive, TIC54X:               TIC54X-Directives.   (line 111)
21429 * uint directive, TIC54X:                TIC54X-Directives.   (line 111)
21430 * uleb128 directive:                     Uleb128.             (line   6)
21431 * ulong directive, TIC54X:               TIC54X-Directives.   (line 135)
21432 * undefined section:                     Ld Sections.         (line  36)
21433 * union directive, TIC54X:               TIC54X-Directives.   (line 251)
21434 * unsegm:                                Z8000 Directives.    (line  14)
21435 * usect directive, TIC54X:               TIC54X-Directives.   (line 263)
21436 * ushort directive, TIC54X:              TIC54X-Directives.   (line 111)
21437 * uword directive, TIC54X:               TIC54X-Directives.   (line 111)
21438 * V850 command line options:             V850 Options.        (line   9)
21439 * V850 floating point (IEEE):            V850 Floating Point. (line   6)
21440 * V850 line comment character:           V850-Chars.          (line   6)
21441 * V850 machine directives:               V850 Directives.     (line   6)
21442 * V850 opcodes:                          V850 Opcodes.        (line   6)
21443 * V850 options (none):                   V850 Options.        (line   6)
21444 * V850 register names:                   V850-Regs.           (line   6)
21445 * V850 support:                          V850-Dependent.      (line   6)
21446 * val directive:                         Val.                 (line   6)
21447 * value attribute, COFF:                 Val.                 (line   6)
21448 * value of a symbol:                     Symbol Value.        (line   6)
21449 * var directive, TIC54X:                 TIC54X-Directives.   (line 273)
21450 * VAX bitfields not supported:           VAX-no.              (line   6)
21451 * VAX branch improvement:                VAX-branch.          (line   6)
21452 * VAX command-line options ignored:      VAX-Opts.            (line   6)
21453 * VAX displacement sizing character:     VAX-operands.        (line  12)
21454 * VAX floating point:                    VAX-float.           (line   6)
21455 * VAX immediate character:               VAX-operands.        (line   6)
21456 * VAX indirect character:                VAX-operands.        (line   9)
21457 * VAX machine directives:                VAX-directives.      (line   6)
21458 * VAX opcode mnemonics:                  VAX-opcodes.         (line   6)
21459 * VAX operand notation:                  VAX-operands.        (line   6)
21460 * VAX register names:                    VAX-operands.        (line  17)
21461 * VAX support:                           Vax-Dependent.       (line   6)
21462 * Vax-11 C compatibility:                VAX-Opts.            (line  42)
21463 * VAX/VMS options:                       VAX-Opts.            (line  42)
21464 * version directive:                     Version.             (line   6)
21465 * version directive, TIC54X:             TIC54X-Directives.   (line 277)
21466 * version of assembler:                  v.                   (line   6)
21467 * versions of symbols:                   Symver.              (line   6)
21468 * visibility <1>:                        Internal.            (line   6)
21469 * visibility <2>:                        Protected.           (line   6)
21470 * visibility:                            Hidden.              (line   6)
21471 * VMS (VAX) options:                     VAX-Opts.            (line  42)
21472 * vtable_entry directive:                VTableEntry.         (line   6)
21473 * vtable_inherit directive:              VTableInherit.       (line   6)
21474 * warning directive:                     Warning.             (line   6)
21475 * warning for altered difference tables: K.                   (line   6)
21476 * warning messages:                      Errors.              (line   6)
21477 * warnings, causing error:               W.                   (line  16)
21478 * warnings, M32R:                        M32R-Warnings.       (line   6)
21479 * warnings, suppressing:                 W.                   (line  11)
21480 * warnings, switching on:                W.                   (line  19)
21481 * weak directive:                        Weak.                (line   6)
21482 * weakref directive:                     Weakref.             (line   6)
21483 * whitespace:                            Whitespace.          (line   6)
21484 * whitespace, removed by preprocessor:   Preprocessing.       (line   7)
21485 * wide floating point directives, VAX:   VAX-directives.      (line  10)
21486 * width directive, TIC54X:               TIC54X-Directives.   (line 127)
21487 * Width of continuation lines of disassembly output: listing. (line  21)
21488 * Width of first line disassembly output: listing.            (line  16)
21489 * Width of source line output:           listing.             (line  28)
21490 * wmsg directive, TIC54X:                TIC54X-Directives.   (line  77)
21491 * word directive:                        Word.                (line   6)
21492 * word directive, ARC:                   ARC Directives.      (line 174)
21493 * word directive, H8/300:                H8/300 Directives.   (line   6)
21494 * word directive, i386:                  i386-Float.          (line  21)
21495 * word directive, SPARC:                 Sparc-Directives.    (line  51)
21496 * word directive, TIC54X:                TIC54X-Directives.   (line 111)
21497 * word directive, x86-64:                i386-Float.          (line  21)
21498 * writing patterns in memory:            Fill.                (line   6)
21499 * wval:                                  Z8000 Directives.    (line  24)
21500 * x86 machine directives:                i386-Directives.     (line   6)
21501 * x86-64 arch directive:                 i386-Arch.           (line   6)
21502 * x86-64 att_syntax pseudo op:           i386-Syntax.         (line   6)
21503 * x86-64 conversion instructions:        i386-Mnemonics.      (line  36)
21504 * x86-64 floating point:                 i386-Float.          (line   6)
21505 * x86-64 immediate operands:             i386-Syntax.         (line  15)
21506 * x86-64 instruction naming:             i386-Mnemonics.      (line   6)
21507 * x86-64 intel_syntax pseudo op:         i386-Syntax.         (line   6)
21508 * x86-64 jump optimization:              i386-Jumps.          (line   6)
21509 * x86-64 jump, call, return:             i386-Syntax.         (line  38)
21510 * x86-64 jump/call operands:             i386-Syntax.         (line  15)
21511 * x86-64 memory references:              i386-Memory.         (line   6)
21512 * x86-64 options:                        i386-Options.        (line   6)
21513 * x86-64 register operands:              i386-Syntax.         (line  15)
21514 * x86-64 registers:                      i386-Regs.           (line   6)
21515 * x86-64 sections:                       i386-Syntax.         (line  44)
21516 * x86-64 size suffixes:                  i386-Syntax.         (line  29)
21517 * x86-64 source, destination operands:   i386-Syntax.         (line  22)
21518 * x86-64 support:                        i386-Dependent.      (line   6)
21519 * x86-64 syntax compatibility:           i386-Syntax.         (line   6)
21520 * xfloat directive, TIC54X:              TIC54X-Directives.   (line  64)
21521 * xlong directive, TIC54X:               TIC54X-Directives.   (line 135)
21522 * Xtensa architecture:                   Xtensa-Dependent.    (line   6)
21523 * Xtensa assembler syntax:               Xtensa Syntax.       (line   6)
21524 * Xtensa directives:                     Xtensa Directives.   (line   6)
21525 * Xtensa opcode names:                   Xtensa Opcodes.      (line   6)
21526 * Xtensa register names:                 Xtensa Registers.    (line   6)
21527 * xword directive, SPARC:                Sparc-Directives.    (line  55)
21528 * Z80 $:                                 Z80-Chars.           (line   8)
21529 * Z80 ':                                 Z80-Chars.           (line  13)
21530 * Z80 floating point:                    Z80 Floating Point.  (line   6)
21531 * Z80 line comment character:            Z80-Chars.           (line   6)
21532 * Z80 options:                           Z80 Options.         (line   6)
21533 * Z80 registers:                         Z80-Regs.            (line   6)
21534 * Z80 support:                           Z80-Dependent.       (line   6)
21535 * Z80 Syntax:                            Z80 Options.         (line  47)
21536 * Z80, \:                                Z80-Chars.           (line  11)
21537 * Z80, case sensitivity:                 Z80-Case.            (line   6)
21538 * Z80-only directives:                   Z80 Directives.      (line   9)
21539 * Z800 addressing modes:                 Z8000-Addressing.    (line   6)
21540 * Z8000 directives:                      Z8000 Directives.    (line   6)
21541 * Z8000 line comment character:          Z8000-Chars.         (line   6)
21542 * Z8000 line separator:                  Z8000-Chars.         (line   8)
21543 * Z8000 opcode summary:                  Z8000 Opcodes.       (line   6)
21544 * Z8000 options:                         Z8000 Options.       (line   6)
21545 * Z8000 registers:                       Z8000-Regs.          (line   6)
21546 * Z8000 support:                         Z8000-Dependent.     (line   6)
21547 * zdaoff pseudo-op, V850:                V850 Opcodes.        (line  99)
21548 * zero register, V850:                   V850-Regs.           (line   7)
21549 * zero-terminated strings:               Asciz.               (line   6)
21552 \x1f
21553 Tag Table:
21554 Node: Top\x7f770
21555 Node: Overview\x7f1756
21556 Node: Manual\x7f30673
21557 Node: GNU Assembler\x7f31617
21558 Node: Object Formats\x7f32788
21559 Node: Command Line\x7f33240
21560 Node: Input Files\x7f34327
21561 Node: Object\x7f36308
21562 Node: Errors\x7f37204
21563 Node: Invoking\x7f38399
21564 Node: a\x7f40354
21565 Node: alternate\x7f42265
21566 Node: D\x7f42437
21567 Node: f\x7f42670
21568 Node: I\x7f43178
21569 Node: K\x7f43722
21570 Node: L\x7f44026
21571 Node: listing\x7f44765
21572 Node: M\x7f46424
21573 Node: MD\x7f50825
21574 Node: o\x7f51251
21575 Node: R\x7f51706
21576 Node: statistics\x7f52736
21577 Node: traditional-format\x7f53143
21578 Node: v\x7f53616
21579 Node: W\x7f53891
21580 Node: Z\x7f54798
21581 Node: Syntax\x7f55320
21582 Node: Preprocessing\x7f55911
21583 Node: Whitespace\x7f57474
21584 Node: Comments\x7f57870
21585 Node: Symbol Intro\x7f60069
21586 Node: Statements\x7f60759
21587 Node: Constants\x7f62680
21588 Node: Characters\x7f63311
21589 Node: Strings\x7f63813
21590 Node: Chars\x7f65979
21591 Node: Numbers\x7f66733
21592 Node: Integers\x7f67273
21593 Node: Bignums\x7f67929
21594 Node: Flonums\x7f68285
21595 Node: Sections\x7f70032
21596 Node: Secs Background\x7f70410
21597 Node: Ld Sections\x7f75449
21598 Node: As Sections\x7f77833
21599 Node: Sub-Sections\x7f78743
21600 Node: bss\x7f81888
21601 Node: Symbols\x7f82838
21602 Node: Labels\x7f83486
21603 Node: Setting Symbols\x7f84217
21604 Node: Symbol Names\x7f84771
21605 Node: Dot\x7f89812
21606 Node: Symbol Attributes\x7f90259
21607 Node: Symbol Value\x7f90996
21608 Node: Symbol Type\x7f92041
21609 Node: a.out Symbols\x7f92429
21610 Node: Symbol Desc\x7f92691
21611 Node: Symbol Other\x7f92986
21612 Node: COFF Symbols\x7f93155
21613 Node: SOM Symbols\x7f93828
21614 Node: Expressions\x7f94270
21615 Node: Empty Exprs\x7f95019
21616 Node: Integer Exprs\x7f95366
21617 Node: Arguments\x7f95761
21618 Node: Operators\x7f96867
21619 Node: Prefix Ops\x7f97202
21620 Node: Infix Ops\x7f97530
21621 Node: Pseudo Ops\x7f99920
21622 Node: Abort\x7f105421
21623 Node: ABORT (COFF)\x7f105833
21624 Node: Align\x7f106041
21625 Node: Altmacro\x7f108323
21626 Node: Ascii\x7f109652
21627 Node: Asciz\x7f109961
21628 Node: Balign\x7f110206
21629 Node: Byte\x7f112069
21630 Node: CFI directives\x7f112317
21631 Node: Comm\x7f117944
21632 Ref: Comm-Footnote-1\x7f119545
21633 Node: Data\x7f119907
21634 Node: Def\x7f120224
21635 Node: Desc\x7f120456
21636 Node: Dim\x7f120956
21637 Node: Double\x7f121213
21638 Node: Eject\x7f121551
21639 Node: Else\x7f121726
21640 Node: Elseif\x7f122026
21641 Node: End\x7f122320
21642 Node: Endef\x7f122535
21643 Node: Endfunc\x7f122712
21644 Node: Endif\x7f122887
21645 Node: Equ\x7f123148
21646 Node: Equiv\x7f123662
21647 Node: Eqv\x7f124218
21648 Node: Err\x7f124582
21649 Node: Error\x7f124893
21650 Node: Exitm\x7f125338
21651 Node: Extern\x7f125507
21652 Node: Fail\x7f125768
21653 Node: File\x7f126213
21654 Node: Fill\x7f127542
21655 Node: Float\x7f128506
21656 Node: Func\x7f128848
21657 Node: Global\x7f129438
21658 Node: Gnu_attribute\x7f130195
21659 Node: Hidden\x7f130420
21660 Node: hword\x7f131006
21661 Node: Ident\x7f131334
21662 Node: If\x7f131908
21663 Node: Incbin\x7f134967
21664 Node: Include\x7f135662
21665 Node: Int\x7f136213
21666 Node: Internal\x7f136594
21667 Node: Irp\x7f137242
21668 Node: Irpc\x7f138121
21669 Node: Lcomm\x7f139038
21670 Node: Lflags\x7f139786
21671 Node: Line\x7f139980
21672 Node: Linkonce\x7f140893
21673 Node: List\x7f142122
21674 Node: Ln\x7f142730
21675 Node: Loc\x7f142880
21676 Node: Loc_mark_labels\x7f144266
21677 Node: Local\x7f144750
21678 Node: Long\x7f145362
21679 Node: Macro\x7f145540
21680 Node: MRI\x7f151462
21681 Node: Noaltmacro\x7f151800
21682 Node: Nolist\x7f151969
21683 Node: Octa\x7f152399
21684 Node: Org\x7f152733
21685 Node: P2align\x7f154016
21686 Node: PopSection\x7f155944
21687 Node: Previous\x7f156452
21688 Node: Print\x7f157865
21689 Node: Protected\x7f158094
21690 Node: Psize\x7f158741
21691 Node: Purgem\x7f159425
21692 Node: PushSection\x7f159646
21693 Node: Quad\x7f160389
21694 Node: Reloc\x7f160845
21695 Node: Rept\x7f161606
21696 Node: Sbttl\x7f162020
21697 Node: Scl\x7f162385
21698 Node: Section\x7f162726
21699 Node: Set\x7f168163
21700 Node: Short\x7f168800
21701 Node: Single\x7f169121
21702 Node: Size\x7f169466
21703 Node: Skip\x7f170140
21704 Node: Sleb128\x7f170464
21705 Node: Space\x7f170788
21706 Node: Stab\x7f171429
21707 Node: String\x7f173433
21708 Node: Struct\x7f174427
21709 Node: SubSection\x7f175152
21710 Node: Symver\x7f175715
21711 Node: Tag\x7f178108
21712 Node: Text\x7f178490
21713 Node: Title\x7f178811
21714 Node: Type\x7f179192
21715 Node: Uleb128\x7f181486
21716 Node: Val\x7f181810
21717 Node: Version\x7f182060
21718 Node: VTableEntry\x7f182335
21719 Node: VTableInherit\x7f182625
21720 Node: Warning\x7f183075
21721 Node: Weak\x7f183309
21722 Node: Weakref\x7f183978
21723 Node: Word\x7f184943
21724 Node: Deprecated\x7f186789
21725 Node: Object Attributes\x7f187024
21726 Node: GNU Object Attributes\x7f188744
21727 Node: Defining New Object Attributes\x7f191297
21728 Node: Machine Dependencies\x7f192094
21729 Node: Alpha-Dependent\x7f195219
21730 Node: Alpha Notes\x7f195633
21731 Node: Alpha Options\x7f195914
21732 Node: Alpha Syntax\x7f198390
21733 Node: Alpha-Chars\x7f198859
21734 Node: Alpha-Regs\x7f199090
21735 Node: Alpha-Relocs\x7f199477
21736 Node: Alpha Floating Point\x7f205735
21737 Node: Alpha Directives\x7f205957
21738 Node: Alpha Opcodes\x7f211480
21739 Node: ARC-Dependent\x7f211775
21740 Node: ARC Options\x7f212158
21741 Node: ARC Syntax\x7f213227
21742 Node: ARC-Chars\x7f213459
21743 Node: ARC-Regs\x7f213591
21744 Node: ARC Floating Point\x7f213715
21745 Node: ARC Directives\x7f214026
21746 Node: ARC Opcodes\x7f219998
21747 Node: ARM-Dependent\x7f220224
21748 Node: ARM Options\x7f220689
21749 Node: ARM Syntax\x7f227822
21750 Node: ARM-Instruction-Set\x7f228136
21751 Node: ARM-Chars\x7f229368
21752 Node: ARM-Regs\x7f229920
21753 Node: ARM Floating Point\x7f230129
21754 Node: ARM-Relocations\x7f230328
21755 Node: ARM Directives\x7f231281
21756 Ref: arm_pad\x7f232145
21757 Ref: arm_fnend\x7f235217
21758 Ref: arm_fnstart\x7f235541
21759 Ref: arm_save\x7f238553
21760 Ref: arm_setfp\x7f239254
21761 Node: ARM Opcodes\x7f242335
21762 Node: ARM Mapping Symbols\x7f244423
21763 Node: ARM Unwinding Tutorial\x7f245233
21764 Node: AVR-Dependent\x7f251435
21765 Node: AVR Options\x7f251725
21766 Node: AVR Syntax\x7f254929
21767 Node: AVR-Chars\x7f255216
21768 Node: AVR-Regs\x7f255622
21769 Node: AVR-Modifiers\x7f256201
21770 Node: AVR Opcodes\x7f258261
21771 Node: Blackfin-Dependent\x7f263507
21772 Node: Blackfin Options\x7f263819
21773 Node: Blackfin Syntax\x7f264677
21774 Node: Blackfin Directives\x7f270410
21775 Node: CR16-Dependent\x7f270829
21776 Node: CR16 Operand Qualifiers\x7f271077
21777 Node: CRIS-Dependent\x7f273718
21778 Node: CRIS-Opts\x7f274064
21779 Ref: march-option\x7f275682
21780 Node: CRIS-Expand\x7f277499
21781 Node: CRIS-Symbols\x7f278682
21782 Node: CRIS-Syntax\x7f279851
21783 Node: CRIS-Chars\x7f280187
21784 Node: CRIS-Pic\x7f280738
21785 Ref: crispic\x7f280934
21786 Node: CRIS-Regs\x7f284474
21787 Node: CRIS-Pseudos\x7f284891
21788 Ref: crisnous\x7f285667
21789 Node: D10V-Dependent\x7f286949
21790 Node: D10V-Opts\x7f287300
21791 Node: D10V-Syntax\x7f288263
21792 Node: D10V-Size\x7f288792
21793 Node: D10V-Subs\x7f289765
21794 Node: D10V-Chars\x7f290800
21795 Node: D10V-Regs\x7f292404
21796 Node: D10V-Addressing\x7f293449
21797 Node: D10V-Word\x7f294135
21798 Node: D10V-Float\x7f294650
21799 Node: D10V-Opcodes\x7f294961
21800 Node: D30V-Dependent\x7f295354
21801 Node: D30V-Opts\x7f295707
21802 Node: D30V-Syntax\x7f296382
21803 Node: D30V-Size\x7f296914
21804 Node: D30V-Subs\x7f297885
21805 Node: D30V-Chars\x7f298920
21806 Node: D30V-Guarded\x7f301218
21807 Node: D30V-Regs\x7f301898
21808 Node: D30V-Addressing\x7f303037
21809 Node: D30V-Float\x7f303705
21810 Node: D30V-Opcodes\x7f304016
21811 Node: H8/300-Dependent\x7f304409
21812 Node: H8/300 Options\x7f304821
21813 Node: H8/300 Syntax\x7f305088
21814 Node: H8/300-Chars\x7f305389
21815 Node: H8/300-Regs\x7f305688
21816 Node: H8/300-Addressing\x7f306607
21817 Node: H8/300 Floating Point\x7f307648
21818 Node: H8/300 Directives\x7f307975
21819 Node: H8/300 Opcodes\x7f309103
21820 Node: HPPA-Dependent\x7f317425
21821 Node: HPPA Notes\x7f317860
21822 Node: HPPA Options\x7f318618
21823 Node: HPPA Syntax\x7f318813
21824 Node: HPPA Floating Point\x7f320083
21825 Node: HPPA Directives\x7f320289
21826 Node: HPPA Opcodes\x7f328975
21827 Node: ESA/390-Dependent\x7f329234
21828 Node: ESA/390 Notes\x7f329694
21829 Node: ESA/390 Options\x7f330485
21830 Node: ESA/390 Syntax\x7f330695
21831 Node: ESA/390 Floating Point\x7f332868
21832 Node: ESA/390 Directives\x7f333147
21833 Node: ESA/390 Opcodes\x7f336436
21834 Node: i386-Dependent\x7f336698
21835 Node: i386-Options\x7f337822
21836 Node: i386-Directives\x7f341789
21837 Node: i386-Syntax\x7f342527
21838 Node: i386-Mnemonics\x7f344960
21839 Node: i386-Regs\x7f348199
21840 Node: i386-Prefixes\x7f350244
21841 Node: i386-Memory\x7f353004
21842 Node: i386-Jumps\x7f355941
21843 Node: i386-Float\x7f357062
21844 Node: i386-SIMD\x7f358893
21845 Node: i386-16bit\x7f360004
21846 Node: i386-Bugs\x7f362044
21847 Node: i386-Arch\x7f362798
21848 Node: i386-Notes\x7f365355
21849 Node: i860-Dependent\x7f366213
21850 Node: Notes-i860\x7f366609
21851 Node: Options-i860\x7f367514
21852 Node: Directives-i860\x7f368877
21853 Node: Opcodes for i860\x7f369946
21854 Node: i960-Dependent\x7f372113
21855 Node: Options-i960\x7f372516
21856 Node: Floating Point-i960\x7f376401
21857 Node: Directives-i960\x7f376669
21858 Node: Opcodes for i960\x7f378703
21859 Node: callj-i960\x7f379320
21860 Node: Compare-and-branch-i960\x7f379809
21861 Node: IA-64-Dependent\x7f381713
21862 Node: IA-64 Options\x7f382014
21863 Node: IA-64 Syntax\x7f385174
21864 Node: IA-64-Chars\x7f385537
21865 Node: IA-64-Regs\x7f385767
21866 Node: IA-64-Bits\x7f386693
21867 Node: IA-64 Opcodes\x7f387202
21868 Node: IP2K-Dependent\x7f387474
21869 Node: IP2K-Opts\x7f387702
21870 Node: LM32-Dependent\x7f388182
21871 Node: LM32 Options\x7f388477
21872 Node: LM32 Syntax\x7f389111
21873 Node: LM32-Regs\x7f389358
21874 Node: LM32-Modifiers\x7f390317
21875 Node: LM32 Opcodes\x7f391673
21876 Node: M32C-Dependent\x7f391977
21877 Node: M32C-Opts\x7f392501
21878 Node: M32C-Modifiers\x7f392924
21879 Node: M32R-Dependent\x7f394711
21880 Node: M32R-Opts\x7f395032
21881 Node: M32R-Directives\x7f399199
21882 Node: M32R-Warnings\x7f403174
21883 Node: M68K-Dependent\x7f406180
21884 Node: M68K-Opts\x7f406647
21885 Node: M68K-Syntax\x7f414039
21886 Node: M68K-Moto-Syntax\x7f415879
21887 Node: M68K-Float\x7f418469
21888 Node: M68K-Directives\x7f418989
21889 Node: M68K-opcodes\x7f420317
21890 Node: M68K-Branch\x7f420543
21891 Node: M68K-Chars\x7f424741
21892 Node: M68HC11-Dependent\x7f425154
21893 Node: M68HC11-Opts\x7f425691
21894 Node: M68HC11-Syntax\x7f429512
21895 Node: M68HC11-Modifiers\x7f431726
21896 Node: M68HC11-Directives\x7f433554
21897 Node: M68HC11-Float\x7f434930
21898 Node: M68HC11-opcodes\x7f435458
21899 Node: M68HC11-Branch\x7f435640
21900 Node: MicroBlaze-Dependent\x7f438089
21901 Node: MicroBlaze Directives\x7f438719
21902 Node: MIPS-Dependent\x7f440076
21903 Node: MIPS Opts\x7f441239
21904 Node: MIPS Object\x7f450983
21905 Node: MIPS Stabs\x7f452549
21906 Node: MIPS symbol sizes\x7f453271
21907 Node: MIPS ISA\x7f454940
21908 Node: MIPS autoextend\x7f456414
21909 Node: MIPS insn\x7f457144
21910 Node: MIPS option stack\x7f458414
21911 Node: MIPS ASE instruction generation overrides\x7f459188
21912 Node: MIPS floating-point\x7f461002
21913 Node: MMIX-Dependent\x7f461888
21914 Node: MMIX-Opts\x7f462268
21915 Node: MMIX-Expand\x7f465872
21916 Node: MMIX-Syntax\x7f467187
21917 Ref: mmixsite\x7f467544
21918 Node: MMIX-Chars\x7f468385
21919 Node: MMIX-Symbols\x7f469039
21920 Node: MMIX-Regs\x7f471107
21921 Node: MMIX-Pseudos\x7f472132
21922 Ref: MMIX-loc\x7f472273
21923 Ref: MMIX-local\x7f473353
21924 Ref: MMIX-is\x7f473885
21925 Ref: MMIX-greg\x7f474156
21926 Ref: GREG-base\x7f475075
21927 Ref: MMIX-byte\x7f476392
21928 Ref: MMIX-constants\x7f476863
21929 Ref: MMIX-prefix\x7f477509
21930 Ref: MMIX-spec\x7f477883
21931 Node: MMIX-mmixal\x7f478217
21932 Node: MSP430-Dependent\x7f481715
21933 Node: MSP430 Options\x7f482181
21934 Node: MSP430 Syntax\x7f482467
21935 Node: MSP430-Macros\x7f482783
21936 Node: MSP430-Chars\x7f483514
21937 Node: MSP430-Regs\x7f483827
21938 Node: MSP430-Ext\x7f484387
21939 Node: MSP430 Floating Point\x7f486208
21940 Node: MSP430 Directives\x7f486432
21941 Node: MSP430 Opcodes\x7f487223
21942 Node: MSP430 Profiling Capability\x7f487618
21943 Node: PDP-11-Dependent\x7f489947
21944 Node: PDP-11-Options\x7f490336
21945 Node: PDP-11-Pseudos\x7f495407
21946 Node: PDP-11-Syntax\x7f495752
21947 Node: PDP-11-Mnemonics\x7f496504
21948 Node: PDP-11-Synthetic\x7f496806
21949 Node: PJ-Dependent\x7f497024
21950 Node: PJ Options\x7f497249
21951 Node: PPC-Dependent\x7f497526
21952 Node: PowerPC-Opts\x7f497813
21953 Node: PowerPC-Pseudo\x7f500365
21954 Node: S/390-Dependent\x7f500964
21955 Node: s390 Options\x7f501667
21956 Node: s390 Characters\x7f503205
21957 Node: s390 Syntax\x7f503398
21958 Node: s390 Register\x7f504299
21959 Node: s390 Mnemonics\x7f505112
21960 Node: s390 Operands\x7f508132
21961 Node: s390 Formats\x7f510751
21962 Node: s390 Aliases\x7f518622
21963 Node: s390 Operand Modifier\x7f522519
21964 Node: s390 Instruction Marker\x7f526320
21965 Node: s390 Literal Pool Entries\x7f527336
21966 Node: s390 Directives\x7f529259
21967 Node: s390 Floating Point\x7f533174
21968 Node: SCORE-Dependent\x7f533620
21969 Node: SCORE-Opts\x7f533894
21970 Node: SCORE-Pseudo\x7f535182
21971 Node: SH-Dependent\x7f537238
21972 Node: SH Options\x7f537650
21973 Node: SH Syntax\x7f538658
21974 Node: SH-Chars\x7f538931
21975 Node: SH-Regs\x7f539225
21976 Node: SH-Addressing\x7f539839
21977 Node: SH Floating Point\x7f540748
21978 Node: SH Directives\x7f541842
21979 Node: SH Opcodes\x7f542212
21980 Node: SH64-Dependent\x7f546534
21981 Node: SH64 Options\x7f546897
21982 Node: SH64 Syntax\x7f548694
21983 Node: SH64-Chars\x7f548977
21984 Node: SH64-Regs\x7f549277
21985 Node: SH64-Addressing\x7f550373
21986 Node: SH64 Directives\x7f551556
21987 Node: SH64 Opcodes\x7f552666
21988 Node: Sparc-Dependent\x7f553382
21989 Node: Sparc-Opts\x7f553794
21990 Node: Sparc-Aligned-Data\x7f556051
21991 Node: Sparc-Syntax\x7f556883
21992 Node: Sparc-Chars\x7f557457
21993 Node: Sparc-Regs\x7f557690
21994 Node: Sparc-Constants\x7f562801
21995 Node: Sparc-Relocs\x7f567561
21996 Node: Sparc-Size-Translations\x7f572241
21997 Node: Sparc-Float\x7f573890
21998 Node: Sparc-Directives\x7f574085
21999 Node: TIC54X-Dependent\x7f576045
22000 Node: TIC54X-Opts\x7f576771
22001 Node: TIC54X-Block\x7f577814
22002 Node: TIC54X-Env\x7f578174
22003 Node: TIC54X-Constants\x7f578522
22004 Node: TIC54X-Subsyms\x7f578924
22005 Node: TIC54X-Locals\x7f580833
22006 Node: TIC54X-Builtins\x7f581577
22007 Node: TIC54X-Ext\x7f584048
22008 Node: TIC54X-Directives\x7f584619
22009 Node: TIC54X-Macros\x7f595521
22010 Node: TIC54X-MMRegs\x7f597632
22011 Node: Z80-Dependent\x7f597848
22012 Node: Z80 Options\x7f598236
22013 Node: Z80 Syntax\x7f599659
22014 Node: Z80-Chars\x7f600331
22015 Node: Z80-Regs\x7f600865
22016 Node: Z80-Case\x7f601217
22017 Node: Z80 Floating Point\x7f601662
22018 Node: Z80 Directives\x7f601856
22019 Node: Z80 Opcodes\x7f603481
22020 Node: Z8000-Dependent\x7f604825
22021 Node: Z8000 Options\x7f605786
22022 Node: Z8000 Syntax\x7f606003
22023 Node: Z8000-Chars\x7f606293
22024 Node: Z8000-Regs\x7f606526
22025 Node: Z8000-Addressing\x7f607316
22026 Node: Z8000 Directives\x7f608433
22027 Node: Z8000 Opcodes\x7f610042
22028 Node: Vax-Dependent\x7f619984
22029 Node: VAX-Opts\x7f620501
22030 Node: VAX-float\x7f624236
22031 Node: VAX-directives\x7f624868
22032 Node: VAX-opcodes\x7f625729
22033 Node: VAX-branch\x7f626118
22034 Node: VAX-operands\x7f628625
22035 Node: VAX-no\x7f629388
22036 Node: V850-Dependent\x7f629625
22037 Node: V850 Options\x7f630023
22038 Node: V850 Syntax\x7f632412
22039 Node: V850-Chars\x7f632652
22040 Node: V850-Regs\x7f632817
22041 Node: V850 Floating Point\x7f634385
22042 Node: V850 Directives\x7f634591
22043 Node: V850 Opcodes\x7f635734
22044 Node: Xtensa-Dependent\x7f641626
22045 Node: Xtensa Options\x7f642355
22046 Node: Xtensa Syntax\x7f645165
22047 Node: Xtensa Opcodes\x7f647054
22048 Node: Xtensa Registers\x7f648848
22049 Node: Xtensa Optimizations\x7f649481
22050 Node: Density Instructions\x7f649933
22051 Node: Xtensa Automatic Alignment\x7f651035
22052 Node: Xtensa Relaxation\x7f653482
22053 Node: Xtensa Branch Relaxation\x7f654390
22054 Node: Xtensa Call Relaxation\x7f655762
22055 Node: Xtensa Immediate Relaxation\x7f657548
22056 Node: Xtensa Directives\x7f660122
22057 Node: Schedule Directive\x7f661831
22058 Node: Longcalls Directive\x7f662171
22059 Node: Transform Directive\x7f662715
22060 Node: Literal Directive\x7f663457
22061 Ref: Literal Directive-Footnote-1\x7f666996
22062 Node: Literal Position Directive\x7f667138
22063 Node: Literal Prefix Directive\x7f668837
22064 Node: Absolute Literals Directive\x7f669735
22065 Node: Reporting Bugs\x7f671042
22066 Node: Bug Criteria\x7f671768
22067 Node: Bug Reporting\x7f672535
22068 Node: Acknowledgements\x7f679184
22069 Ref: Acknowledgements-Footnote-1\x7f684150
22070 Node: GNU Free Documentation License\x7f684176
22071 Node: AS Index\x7f709345
22072 \x1f
22073 End Tag Table