fixed bash/dash/sh issue (Ubuntu)
[zpugcc/jano.git] / toolchain / binutils / gas / doc / as.info-1
bloba33c09991469eec25f803e28b90f203eaa2af4fa
1 This is ../../../../src/binutils-2.15/gas/doc/as.info, produced by
2 makeinfo version 4.3 from
3 ../../../../src/binutils-2.15/gas/doc/as.texinfo.
5 START-INFO-DIR-ENTRY
6 * As: (as).                     The GNU assembler.
7 * Gas: (as).                    The GNU assembler.
8 END-INFO-DIR-ENTRY
10    This file documents the GNU Assembler "as".
12    Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002
13 Free Software Foundation, Inc.
15    Permission is granted to copy, distribute and/or modify this document
16 under the terms of the GNU Free Documentation License, Version 1.1 or
17 any later version published by the Free Software Foundation; with no
18 Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
19 Texts.  A copy of the license is included in the section entitled "GNU
20 Free Documentation License".
22 \x1f
23 File: as.info,  Node: Top,  Next: Overview,  Up: (dir)
25 Using as
26 ********
28    This file is a user guide to the GNU assembler `as' version 2.15.
30    This document is distributed under the terms of the GNU Free
31 Documentation License.  A copy of the license is included in the
32 section entitled "GNU Free Documentation License".
34 * Menu:
36 * Overview::                    Overview
37 * Invoking::                    Command-Line Options
38 * Syntax::                      Syntax
39 * Sections::                    Sections and Relocation
40 * Symbols::                     Symbols
41 * Expressions::                 Expressions
42 * Pseudo Ops::                  Assembler Directives
43 * Machine Dependencies::        Machine Dependent Features
44 * Reporting Bugs::              Reporting Bugs
45 * Acknowledgements::            Who Did What
46 * GNU Free Documentation License::  GNU Free Documentation License
47 * Index::                       Index
49 \x1f
50 File: as.info,  Node: Overview,  Next: Invoking,  Prev: Top,  Up: Top
52 Overview
53 ********
55    Here is a brief summary of how to invoke `as'.  For details, *note
56 Command-Line Options: Invoking..
58      as [-a[cdhlns][=FILE]] [-D] [-defsym SYM=VAL]
59       [-f] [-gstabs] [-gstabs+] [-gdwarf2] [-help]
60       [-I DIR] [-J] [-K] [-L]
61       [-listing-lhs-width=NUM] [-listing-lhs-width2=NUM]
62       [-listing-rhs-width=NUM] [-listing-cont-lines=NUM]
63       [-keep-locals] [-o OBJFILE] [-R] [-statistics] [-v]
64       [-version] [-version] [-W] [-warn] [-fatal-warnings]
65       [-w] [-x] [-Z] [-target-help] [TARGET-OPTIONS]
66       [-|FILES ...]
67      
68      _Target Alpha options:_
69         [-mCPU]
70         [-mdebug | -no-mdebug]
71         [-relax] [-g] [-GSIZE]
72         [-F] [-32addr]
73      
74      _Target ARC options:_
75         [-marc[5|6|7|8]]
76         [-EB|-EL]
77      
78      _Target ARM options:_
79         [-mcpu=PROCESSOR[+EXTENSION...]]
80         [-march=ARCHITECTURE[+EXTENSION...]]
81         [-mfpu=FLOATING-POINT-FORMAT]
82         [-mfloat-abi=ABI]
83         [-mthumb]
84         [-EB|-EL]
85         [-mapcs-32|-mapcs-26|-mapcs-float|
86          -mapcs-reentrant]
87         [-mthumb-interwork] [-moabi] [-k]
88      
89      _Target CRIS options:_
90         [-underscore | -no-underscore]
91         [-pic] [-N]
92         [-emulation=criself | -emulation=crisaout]
93      
94      _Target D10V options:_
95         [-O]
96      
97      _Target D30V options:_
98         [-O|-n|-N]
99      
100      _Target i386 options:_
101         [-32|-64] [-n]
102      
103      _Target i960 options:_
104         [-ACA|-ACA_A|-ACB|-ACC|-AKA|-AKB|
105          -AKC|-AMC]
106         [-b] [-no-relax]
107      
108      _Target IP2K options:_
109         [-mip2022|-mip2022ext]
110      
111      _Target M32R options:_
112         [-m32rx|-[no-]warn-explicit-parallel-conflicts|
113         -W[n]p]
114      
115      _Target M680X0 options:_
116         [-l] [-m68000|-m68010|-m68020|...]
117      
118      _Target M68HC11 options:_
119         [-m68hc11|-m68hc12|-m68hcs12]
120         [-mshort|-mlong]
121         [-mshort-double|-mlong-double]
122         [-force-long-branchs] [-short-branchs]
123         [-strict-direct-mode] [-print-insn-syntax]
124         [-print-opcodes] [-generate-example]
125      
126      _Target MCORE options:_
127         [-jsri2bsr] [-sifilter] [-relax]
128         [-mcpu=[210|340]]
129      
130      _Target MIPS options:_
131         [-nocpp] [-EL] [-EB] [-O[OPTIMIZATION LEVEL]]
132         [-g[DEBUG LEVEL]] [-G NUM] [-KPIC] [-call_shared]
133         [-non_shared] [-xgot] [-membedded-pic]
134         [-mabi=ABI] [-32] [-n32] [-64] [-mfp32] [-mgp32]
135         [-march=CPU] [-mtune=CPU] [-mips1] [-mips2]
136         [-mips3] [-mips4] [-mips5] [-mips32] [-mips32r2]
137         [-mips64] [-mips64r2]
138         [-construct-floats] [-no-construct-floats]
139         [-trap] [-no-break] [-break] [-no-trap]
140         [-mfix7000] [-mno-fix7000]
141         [-mips16] [-no-mips16]
142         [-mips3d] [-no-mips3d]
143         [-mdmx] [-no-mdmx]
144         [-mdebug] [-no-mdebug]
145         [-mpdr] [-mno-pdr]
146      
147      _Target MMIX options:_
148         [-fixed-special-register-names] [-globalize-symbols]
149         [-gnu-syntax] [-relax] [-no-predefined-symbols]
150         [-no-expand] [-no-merge-gregs] [-x]
151         [-linker-allocated-gregs]
152      
153      _Target PDP11 options:_
154         [-mpic|-mno-pic] [-mall] [-mno-extensions]
155         [-mEXTENSION|-mno-EXTENSION]
156         [-mCPU] [-mMACHINE]
157      
158      _Target picoJava options:_
159         [-mb|-me]
160      
161      _Target PowerPC options:_
162         [-mpwrx|-mpwr2|-mpwr|-m601|-mppc|-mppc32|-m603|-m604|
163          -m403|-m405|-mppc64|-m620|-mppc64bridge|-mbooke|
164          -mbooke32|-mbooke64]
165         [-mcom|-many|-maltivec] [-memb]
166         [-mregnames|-mno-regnames]
167         [-mrelocatable|-mrelocatable-lib]
168         [-mlittle|-mlittle-endian|-mbig|-mbig-endian]
169         [-msolaris|-mno-solaris]
170      
171      _Target SPARC options:_
172         [-Av6|-Av7|-Av8|-Asparclet|-Asparclite
173          -Av8plus|-Av8plusa|-Av9|-Av9a]
174         [-xarch=v8plus|-xarch=v8plusa] [-bump]
175         [-32|-64]
176      
177      _Target TIC54X options:_
178       [-mcpu=54[123589]|-mcpu=54[56]lp] [-mfar-mode|-mf]
179       [-merrors-to-file <FILENAME>|-me <FILENAME>]
180      
181      _Target Xtensa options:_
182       [-[no-]density] [-[no-]relax] [-[no-]generics]
183       [-[no-]text-section-literals]
184       [-[no-]target-align] [-[no-]longcalls]
186 `-a[cdhlmns]'
187      Turn on listings, in any of a variety of ways:
189     `-ac'
190           omit false conditionals
192     `-ad'
193           omit debugging directives
195     `-ah'
196           include high-level source
198     `-al'
199           include assembly
201     `-am'
202           include macro expansions
204     `-an'
205           omit forms processing
207     `-as'
208           include symbols
210     `=file'
211           set the name of the listing file
213      You may combine these options; for example, use `-aln' for assembly
214      listing without forms processing.  The `=file' option, if used,
215      must be the last one.  By itself, `-a' defaults to `-ahls'.
217 `-D'
218      Ignored.  This option is accepted for script compatibility with
219      calls to other assemblers.
221 `--defsym SYM=VALUE'
222      Define the symbol SYM to be VALUE before assembling the input file.
223      VALUE must be an integer constant.  As in C, a leading `0x'
224      indicates a hexadecimal value, and a leading `0' indicates an
225      octal value.
227 `-f'
228      "fast"--skip whitespace and comment preprocessing (assume source is
229      compiler output).
231 `--gstabs'
232      Generate stabs debugging information for each assembler line.  This
233      may help debugging assembler code, if the debugger can handle it.
235 `--gstabs+'
236      Generate stabs debugging information for each assembler line, with
237      GNU extensions that probably only gdb can handle, and that could
238      make other debuggers crash or refuse to read your program.  This
239      may help debugging assembler code.  Currently the only GNU
240      extension is the location of the current working directory at
241      assembling time.
243 `--gdwarf2'
244      Generate DWARF2 debugging information for each assembler line.
245      This may help debugging assembler code, if the debugger can handle
246      it.  Note--this option is only supported by some targets, not all
247      of them.
249 `--help'
250      Print a summary of the command line options and exit.
252 `--target-help'
253      Print a summary of all target specific options and exit.
255 `-I DIR'
256      Add directory DIR to the search list for `.include' directives.
258 `-J'
259      Don't warn about signed overflow.
261 `-K'
262      Issue warnings when difference tables altered for long
263      displacements.
265 `-L'
266 `--keep-locals'
267      Keep (in the symbol table) local symbols.  On traditional a.out
268      systems these start with `L', but different systems have different
269      local label prefixes.
271 `--listing-lhs-width=NUMBER'
272      Set the maximum width, in words, of the output data column for an
273      assembler listing to NUMBER.
275 `--listing-lhs-width2=NUMBER'
276      Set the maximum width, in words, of the output data column for
277      continuation lines in an assembler listing to NUMBER.
279 `--listing-rhs-width=NUMBER'
280      Set the maximum width of an input source line, as displayed in a
281      listing, to NUMBER bytes.
283 `--listing-cont-lines=NUMBER'
284      Set the maximum number of lines printed in a listing for a single
285      line of input to NUMBER + 1.
287 `-o OBJFILE'
288      Name the object-file output from `as' OBJFILE.
290 `-R'
291      Fold the data section into the text section.
293 `--statistics'
294      Print the maximum space (in bytes) and total time (in seconds)
295      used by assembly.
297 `--strip-local-absolute'
298      Remove local absolute symbols from the outgoing symbol table.
300 `-v'
301 `-version'
302      Print the `as' version.
304 `--version'
305      Print the `as' version and exit.
307 `-W'
308 `--no-warn'
309      Suppress warning messages.
311 `--fatal-warnings'
312      Treat warnings as errors.
314 `--warn'
315      Don't suppress warning messages or treat them as errors.
317 `-w'
318      Ignored.
320 `-x'
321      Ignored.
323 `-Z'
324      Generate an object file even after errors.
326 `-- | FILES ...'
327      Standard input, or source files to assemble.
329    The following options are available when as is configured for an ARC
330 processor.
332 `-marc[5|6|7|8]'
333      This option selects the core processor variant.
335 `-EB | -EL'
336      Select either big-endian (-EB) or little-endian (-EL) output.
338    The following options are available when as is configured for the ARM
339 processor family.
341 `-mcpu=PROCESSOR[+EXTENSION...]'
342      Specify which ARM processor variant is the target.
344 `-march=ARCHITECTURE[+EXTENSION...]'
345      Specify which ARM architecture variant is used by the target.
347 `-mfpu=FLOATING-POINT-FORMAT'
348      Select which Floating Point architecture is the target.
350 `-mfloat-abi=ABI'
351      Select which floating point ABI is in use.
353 `-mthumb'
354      Enable Thumb only instruction decoding.
356 `-mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant | -moabi'
357      Select which procedure calling convention is in use.
359 `-EB | -EL'
360      Select either big-endian (-EB) or little-endian (-EL) output.
362 `-mthumb-interwork'
363      Specify that the code has been generated with interworking between
364      Thumb and ARM code in mind.
366 `-k'
367      Specify that PIC code has been generated.
369    See the info pages for documentation of the CRIS-specific options.
371    The following options are available when as is configured for a D10V
372 processor.
373 `-O'
374      Optimize output by parallelizing instructions.
376    The following options are available when as is configured for a D30V
377 processor.
378 `-O'
379      Optimize output by parallelizing instructions.
381 `-n'
382      Warn when nops are generated.
384 `-N'
385      Warn when a nop after a 32-bit multiply instruction is generated.
387    The following options are available when as is configured for the
388 Intel 80960 processor.
390 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
391      Specify which variant of the 960 architecture is the target.
393 `-b'
394      Add code to collect statistics about branches taken.
396 `-no-relax'
397      Do not alter compare-and-branch instructions for long
398      displacements; error if necessary.
400    The following options are available when as is configured for the
401 Ubicom IP2K series.
403 `-mip2022ext'
404      Specifies that the extended IP2022 instructions are allowed.
406 `-mip2022'
407      Restores the default behaviour, which restricts the permitted
408      instructions to just the basic IP2022 ones.
410    The following options are available when as is configured for the
411 Renesas M32R (formerly Mitsubishi M32R) series.
413 `--m32rx'
414      Specify which processor in the M32R family is the target.  The
415      default is normally the M32R, but this option changes it to the
416      M32RX.
418 `--warn-explicit-parallel-conflicts or --Wp'
419      Produce warning messages when questionable parallel constructs are
420      encountered.
422 `--no-warn-explicit-parallel-conflicts or --Wnp'
423      Do not produce warning messages when questionable parallel
424      constructs are encountered.
426    The following options are available when as is configured for the
427 Motorola 68000 series.
429 `-l'
430      Shorten references to undefined symbols, to one word instead of
431      two.
433 `-m68000 | -m68008 | -m68010 | -m68020 | -m68030'
434 `| -m68040 | -m68060 | -m68302 | -m68331 | -m68332'
435 `| -m68333 | -m68340 | -mcpu32 | -m5200'
436      Specify what processor in the 68000 family is the target.  The
437      default is normally the 68020, but this can be changed at
438      configuration time.
440 `-m68881 | -m68882 | -mno-68881 | -mno-68882'
441      The target machine does (or does not) have a floating-point
442      coprocessor.  The default is to assume a coprocessor for 68020,
443      68030, and cpu32.  Although the basic 68000 is not compatible with
444      the 68881, a combination of the two can be specified, since it's
445      possible to do emulation of the coprocessor instructions with the
446      main processor.
448 `-m68851 | -mno-68851'
449      The target machine does (or does not) have a memory-management
450      unit coprocessor.  The default is to assume an MMU for 68020 and
451      up.
453    For details about the PDP-11 machine dependent features options, see
454 *Note PDP-11-Options::.
456 `-mpic | -mno-pic'
457      Generate position-independent (or position-dependent) code.  The
458      default is `-mpic'.
460 `-mall'
461 `-mall-extensions'
462      Enable all instruction set extensions.  This is the default.
464 `-mno-extensions'
465      Disable all instruction set extensions.
467 `-mEXTENSION | -mno-EXTENSION'
468      Enable (or disable) a particular instruction set extension.
470 `-mCPU'
471      Enable the instruction set extensions supported by a particular
472      CPU, and disable all other extensions.
474 `-mMACHINE'
475      Enable the instruction set extensions supported by a particular
476      machine model, and disable all other extensions.
478    The following options are available when as is configured for a
479 picoJava processor.
481 `-mb'
482      Generate "big endian" format output.
484 `-ml'
485      Generate "little endian" format output.
487    The following options are available when as is configured for the
488 Motorola 68HC11 or 68HC12 series.
490 `-m68hc11 | -m68hc12 | -m68hcs12'
491      Specify what processor is the target.  The default is defined by
492      the configuration option when building the assembler.
494 `-mshort'
495      Specify to use the 16-bit integer ABI.
497 `-mlong'
498      Specify to use the 32-bit integer ABI.
500 `-mshort-double'
501      Specify to use the 32-bit double ABI.
503 `-mlong-double'
504      Specify to use the 64-bit double ABI.
506 `--force-long-branchs'
507      Relative branches are turned into absolute ones. This concerns
508      conditional branches, unconditional branches and branches to a sub
509      routine.
511 `-S | --short-branchs'
512      Do not turn relative branchs into absolute ones when the offset is
513      out of range.
515 `--strict-direct-mode'
516      Do not turn the direct addressing mode into extended addressing
517      mode when the instruction does not support direct addressing mode.
519 `--print-insn-syntax'
520      Print the syntax of instruction in case of error.
522 `--print-opcodes'
523      print the list of instructions with syntax and then exit.
525 `--generate-example'
526      print an example of instruction for each possible instruction and
527      then exit.  This option is only useful for testing `as'.
529    The following options are available when `as' is configured for the
530 SPARC architecture:
532 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
533 `-Av8plus | -Av8plusa | -Av9 | -Av9a'
534      Explicitly select a variant of the SPARC architecture.
536      `-Av8plus' and `-Av8plusa' select a 32 bit environment.  `-Av9'
537      and `-Av9a' select a 64 bit environment.
539      `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
540      UltraSPARC extensions.
542 `-xarch=v8plus | -xarch=v8plusa'
543      For compatibility with the Solaris v9 assembler.  These options are
544      equivalent to -Av8plus and -Av8plusa, respectively.
546 `-bump'
547      Warn when the assembler switches to another architecture.
549    The following options are available when as is configured for the
550 'c54x architecture.
552 `-mfar-mode'
553      Enable extended addressing mode.  All addresses and relocations
554      will assume extended addressing (usually 23 bits).
556 `-mcpu=CPU_VERSION'
557      Sets the CPU version being compiled for.
559 `-merrors-to-file FILENAME'
560      Redirect error output to a file, for broken systems which don't
561      support such behaviour in the shell.
563    The following options are available when as is configured for a MIPS
564 processor.
566 `-G NUM'
567      This option sets the largest size of an object that can be
568      referenced implicitly with the `gp' register.  It is only accepted
569      for targets that use ECOFF format, such as a DECstation running
570      Ultrix.  The default value is 8.
572 `-EB'
573      Generate "big endian" format output.
575 `-EL'
576      Generate "little endian" format output.
578 `-mips1'
579 `-mips2'
580 `-mips3'
581 `-mips4'
582 `-mips5'
583 `-mips32'
584 `-mips32r2'
585 `-mips64'
586 `-mips64r2'
587      Generate code for a particular MIPS Instruction Set Architecture
588      level.  `-mips1' is an alias for `-march=r3000', `-mips2' is an
589      alias for `-march=r6000', `-mips3' is an alias for `-march=r4000'
590      and `-mips4' is an alias for `-march=r8000'.  `-mips5', `-mips32',
591      `-mips32r2', `-mips64', and `-mips64r2' correspond to generic
592      `MIPS V', `MIPS32', `MIPS32 Release 2', `MIPS64', and `MIPS64
593      Release 2' ISA processors, respectively.
595 `-march=CPU'
596      Generate code for a particular MIPS cpu.
598 `-mtune=CPU'
599      Schedule and tune for a particular MIPS cpu.
601 `-mfix7000'
602 `-mno-fix7000'
603      Cause nops to be inserted if the read of the destination register
604      of an mfhi or mflo instruction occurs in the following two
605      instructions.
607 `-mdebug'
608 `-no-mdebug'
609      Cause stabs-style debugging output to go into an ECOFF-style
610      .mdebug section instead of the standard ELF .stabs sections.
612 `-mpdr'
613 `-mno-pdr'
614      Control generation of `.pdr' sections.
616 `-mgp32'
617 `-mfp32'
618      The register sizes are normally inferred from the ISA and ABI, but
619      these flags force a certain group of registers to be treated as 32
620      bits wide at all times.  `-mgp32' controls the size of
621      general-purpose registers and `-mfp32' controls the size of
622      floating-point registers.
624 `-mips16'
625 `-no-mips16'
626      Generate code for the MIPS 16 processor.  This is equivalent to
627      putting `.set mips16' at the start of the assembly file.
628      `-no-mips16' turns off this option.
630 `-mips3d'
631 `-no-mips3d'
632      Generate code for the MIPS-3D Application Specific Extension.
633      This tells the assembler to accept MIPS-3D instructions.
634      `-no-mips3d' turns off this option.
636 `-mdmx'
637 `-no-mdmx'
638      Generate code for the MDMX Application Specific Extension.  This
639      tells the assembler to accept MDMX instructions.  `-no-mdmx' turns
640      off this option.
642 `--construct-floats'
643 `--no-construct-floats'
644      The `--no-construct-floats' option disables the construction of
645      double width floating point constants by loading the two halves of
646      the value into the two single width floating point registers that
647      make up the double width register.  By default
648      `--construct-floats' is selected, allowing construction of these
649      floating point constants.
651 `--emulation=NAME'
652      This option causes `as' to emulate `as' configured for some other
653      target, in all respects, including output format (choosing between
654      ELF and ECOFF only), handling of pseudo-opcodes which may generate
655      debugging information or store symbol table information, and
656      default endianness.  The available configuration names are:
657      `mipsecoff', `mipself', `mipslecoff', `mipsbecoff', `mipslelf',
658      `mipsbelf'.  The first two do not alter the default endianness
659      from that of the primary target for which the assembler was
660      configured; the others change the default to little- or big-endian
661      as indicated by the `b' or `l' in the name.  Using `-EB' or `-EL'
662      will override the endianness selection in any case.
664      This option is currently supported only when the primary target
665      `as' is configured for is a MIPS ELF or ECOFF target.
666      Furthermore, the primary target or others specified with
667      `--enable-targets=...' at configuration time must include support
668      for the other format, if both are to be available.  For example,
669      the Irix 5 configuration includes support for both.
671      Eventually, this option will support more configurations, with more
672      fine-grained control over the assembler's behavior, and will be
673      supported for more processors.
675 `-nocpp'
676      `as' ignores this option.  It is accepted for compatibility with
677      the native tools.
679 `--trap'
680 `--no-trap'
681 `--break'
682 `--no-break'
683      Control how to deal with multiplication overflow and division by
684      zero.  `--trap' or `--no-break' (which are synonyms) take a trap
685      exception (and only work for Instruction Set Architecture level 2
686      and higher); `--break' or `--no-trap' (also synonyms, and the
687      default) take a break exception.
689 `-n'
690      When this option is used, `as' will issue a warning every time it
691      generates a nop instruction from a macro.
693    The following options are available when as is configured for an
694 MCore processor.
696 `-jsri2bsr'
697 `-nojsri2bsr'
698      Enable or disable the JSRI to BSR transformation.  By default this
699      is enabled.  The command line option `-nojsri2bsr' can be used to
700      disable it.
702 `-sifilter'
703 `-nosifilter'
704      Enable or disable the silicon filter behaviour.  By default this
705      is disabled.  The default can be overridden by the `-sifilter'
706      command line option.
708 `-relax'
709      Alter jump instructions for long displacements.
711 `-mcpu=[210|340]'
712      Select the cpu type on the target hardware.  This controls which
713      instructions can be assembled.
715 `-EB'
716      Assemble for a big endian target.
718 `-EL'
719      Assemble for a little endian target.
721    See the info pages for documentation of the MMIX-specific options.
723    The following options are available when as is configured for an
724 Xtensa processor.
726 `--density | --no-density'
727      Enable or disable use of instructions from the Xtensa code density
728      option.  This is enabled by default when the Xtensa processor
729      supports the code density option.
731 `--relax | --no-relax'
732      Enable or disable instruction relaxation.  This is enabled by
733      default.  Note: In the current implementation, these options also
734      control whether assembler optimizations are performed, making
735      these options equivalent to `--generics' and `--no-generics'.
737 `--generics | --no-generics'
738      Enable or disable all assembler transformations of Xtensa
739      instructions.  The default is `--generics'; `--no-generics' should
740      be used only in the rare cases when the instructions must be
741      exactly as specified in the assembly source.
743 `--text-section-literals | --no-text-section-literals'
744      With `--text-section-literals', literal pools are interspersed in
745      the text section.  The default is `--no-text-section-literals',
746      which places literals in a separate section in the output file.
748 `--target-align | --no-target-align'
749      Enable or disable automatic alignment to reduce branch penalties
750      at the expense of some code density.  The default is
751      `--target-align'.
753 `--longcalls | --no-longcalls'
754      Enable or disable transformation of call instructions to allow
755      calls across a greater range of addresses.  The default is
756      `--no-longcalls'.
758 * Menu:
760 * Manual::                      Structure of this Manual
761 * GNU Assembler::               The GNU Assembler
762 * Object Formats::              Object File Formats
763 * Command Line::                Command Line
764 * Input Files::                 Input Files
765 * Object::                      Output (Object) File
766 * Errors::                      Error and Warning Messages
768 \x1f
769 File: as.info,  Node: Manual,  Next: GNU Assembler,  Up: Overview
771 Structure of this Manual
772 ========================
774    This manual is intended to describe what you need to know to use GNU
775 `as'.  We cover the syntax expected in source files, including notation
776 for symbols, constants, and expressions; the directives that `as'
777 understands; and of course how to invoke `as'.
779    This manual also describes some of the machine-dependent features of
780 various flavors of the assembler.
782    On the other hand, this manual is _not_ intended as an introduction
783 to programming in assembly language--let alone programming in general!
784 In a similar vein, we make no attempt to introduce the machine
785 architecture; we do _not_ describe the instruction set, standard
786 mnemonics, registers or addressing modes that are standard to a
787 particular architecture.  You may want to consult the manufacturer's
788 machine architecture manual for this information.
790 \x1f
791 File: as.info,  Node: GNU Assembler,  Next: Object Formats,  Prev: Manual,  Up: Overview
793 The GNU Assembler
794 =================
796    GNU `as' is really a family of assemblers.  If you use (or have
797 used) the GNU assembler on one architecture, you should find a fairly
798 similar environment when you use it on another architecture.  Each
799 version has much in common with the others, including object file
800 formats, most assembler directives (often called "pseudo-ops") and
801 assembler syntax.
803    `as' is primarily intended to assemble the output of the GNU C
804 compiler `gcc' for use by the linker `ld'.  Nevertheless, we've tried
805 to make `as' assemble correctly everything that other assemblers for
806 the same machine would assemble.  Any exceptions are documented
807 explicitly (*note Machine Dependencies::).  This doesn't mean `as'
808 always uses the same syntax as another assembler for the same
809 architecture; for example, we know of several incompatible versions of
810 680x0 assembly language syntax.
812    Unlike older assemblers, `as' is designed to assemble a source
813 program in one pass of the source file.  This has a subtle impact on the
814 `.org' directive (*note `.org': Org.).
816 \x1f
817 File: as.info,  Node: Object Formats,  Next: Command Line,  Prev: GNU Assembler,  Up: Overview
819 Object File Formats
820 ===================
822    The GNU assembler can be configured to produce several alternative
823 object file formats.  For the most part, this does not affect how you
824 write assembly language programs; but directives for debugging symbols
825 are typically different in different file formats.  *Note Symbol
826 Attributes: Symbol Attributes.
828 \x1f
829 File: as.info,  Node: Command Line,  Next: Input Files,  Prev: Object Formats,  Up: Overview
831 Command Line
832 ============
834    After the program name `as', the command line may contain options
835 and file names.  Options may appear in any order, and may be before,
836 after, or between file names.  The order of file names is significant.
838    `--' (two hyphens) by itself names the standard input file
839 explicitly, as one of the files for `as' to assemble.
841    Except for `--' any command line argument that begins with a hyphen
842 (`-') is an option.  Each option changes the behavior of `as'.  No
843 option changes the way another option works.  An option is a `-'
844 followed by one or more letters; the case of the letter is important.
845 All options are optional.
847    Some options expect exactly one file name to follow them.  The file
848 name may either immediately follow the option's letter (compatible with
849 older assemblers) or it may be the next command argument (GNU
850 standard).  These two command lines are equivalent:
852      as -o my-object-file.o mumble.s
853      as -omy-object-file.o mumble.s
855 \x1f
856 File: as.info,  Node: Input Files,  Next: Object,  Prev: Command Line,  Up: Overview
858 Input Files
859 ===========
861    We use the phrase "source program", abbreviated "source", to
862 describe the program input to one run of `as'.  The program may be in
863 one or more files; how the source is partitioned into files doesn't
864 change the meaning of the source.
866    The source program is a concatenation of the text in all the files,
867 in the order specified.
869    Each time you run `as' it assembles exactly one source program.  The
870 source program is made up of one or more files.  (The standard input is
871 also a file.)
873    You give `as' a command line that has zero or more input file names.
874 The input files are read (from left file name to right).  A command
875 line argument (in any position) that has no special meaning is taken to
876 be an input file name.
878    If you give `as' no file names it attempts to read one input file
879 from the `as' standard input, which is normally your terminal.  You may
880 have to type <ctl-D> to tell `as' there is no more program to assemble.
882    Use `--' if you need to explicitly name the standard input file in
883 your command line.
885    If the source is empty, `as' produces a small, empty object file.
887 Filenames and Line-numbers
888 --------------------------
890    There are two ways of locating a line in the input file (or files)
891 and either may be used in reporting error messages.  One way refers to
892 a line number in a physical file; the other refers to a line number in a
893 "logical" file.  *Note Error and Warning Messages: Errors.
895    "Physical files" are those files named in the command line given to
896 `as'.
898    "Logical files" are simply names declared explicitly by assembler
899 directives; they bear no relation to physical files.  Logical file
900 names help error messages reflect the original source file, when `as'
901 source is itself synthesized from other files.  `as' understands the
902 `#' directives emitted by the `gcc' preprocessor.  See also *Note
903 `.file': File.
905 \x1f
906 File: as.info,  Node: Object,  Next: Errors,  Prev: Input Files,  Up: Overview
908 Output (Object) File
909 ====================
911    Every time you run `as' it produces an output file, which is your
912 assembly language program translated into numbers.  This file is the
913 object file.  Its default name is `a.out', or `b.out' when `as' is
914 configured for the Intel 80960.  You can give it another name by using
915 the `-o' option.  Conventionally, object file names end with `.o'.  The
916 default name is used for historical reasons: older assemblers were
917 capable of assembling self-contained programs directly into a runnable
918 program.  (For some formats, this isn't currently possible, but it can
919 be done for the `a.out' format.)
921    The object file is meant for input to the linker `ld'.  It contains
922 assembled program code, information to help `ld' integrate the
923 assembled program into a runnable file, and (optionally) symbolic
924 information for the debugger.
926 \x1f
927 File: as.info,  Node: Errors,  Prev: Object,  Up: Overview
929 Error and Warning Messages
930 ==========================
932    `as' may write warnings and error messages to the standard error
933 file (usually your terminal).  This should not happen when  a compiler
934 runs `as' automatically.  Warnings report an assumption made so that
935 `as' could keep assembling a flawed program; errors report a grave
936 problem that stops the assembly.
938    Warning messages have the format
940      file_name:NNN:Warning Message Text
942 (where NNN is a line number).  If a logical file name has been given
943 (*note `.file': File.) it is used for the filename, otherwise the name
944 of the current input file is used.  If a logical line number was given
945 (*note `.line': Line.)  then it is used to calculate the number printed,
946 otherwise the actual line in the current source file is printed.  The
947 message text is intended to be self explanatory (in the grand Unix
948 tradition).
950    Error messages have the format
951      file_name:NNN:FATAL:Error Message Text
952    The file name and line number are derived as for warning messages.
953 The actual message text may be rather less explanatory because many of
954 them aren't supposed to happen.
956 \x1f
957 File: as.info,  Node: Invoking,  Next: Syntax,  Prev: Overview,  Up: Top
959 Command-Line Options
960 ********************
962    This chapter describes command-line options available in _all_
963 versions of the GNU assembler; *note Machine Dependencies::, for
964 options specific to particular machine architectures.
966    If you are invoking `as' via the GNU C compiler, you can use the
967 `-Wa' option to pass arguments through to the assembler.  The assembler
968 arguments must be separated from each other (and the `-Wa') by commas.
969 For example:
971      gcc -c -g -O -Wa,-alh,-L file.c
973 This passes two options to the assembler: `-alh' (emit a listing to
974 standard output with high-level and assembly source) and `-L' (retain
975 local symbols in the symbol table).
977    Usually you do not need to use this `-Wa' mechanism, since many
978 compiler command-line options are automatically passed to the assembler
979 by the compiler.  (You can call the GNU compiler driver with the `-v'
980 option to see precisely what options it passes to each compilation
981 pass, including the assembler.)
983 * Menu:
985 * a::             -a[cdhlns] enable listings
986 * D::             -D for compatibility
987 * f::             -f to work faster
988 * I::             -I for .include search path
990 * K::             -K for difference tables
992 * L::             -L to retain local labels
993 * listing::       --listing-XXX to configure listing output
994 * M::             -M or --mri to assemble in MRI compatibility mode
995 * MD::            --MD for dependency tracking
996 * o::             -o to name the object file
997 * R::             -R to join data and text sections
998 * statistics::    --statistics to see statistics about assembly
999 * traditional-format:: --traditional-format for compatible output
1000 * v::             -v to announce version
1001 * W::             -W, --no-warn, --warn, --fatal-warnings to control warnings
1002 * Z::             -Z to make object file even after errors
1004 \x1f
1005 File: as.info,  Node: a,  Next: D,  Up: Invoking
1007 Enable Listings: `-a[cdhlns]'
1008 =============================
1010    These options enable listing output from the assembler.  By itself,
1011 `-a' requests high-level, assembly, and symbols listing.  You can use
1012 other letters to select specific options for the list: `-ah' requests a
1013 high-level language listing, `-al' requests an output-program assembly
1014 listing, and `-as' requests a symbol table listing.  High-level
1015 listings require that a compiler debugging option like `-g' be used,
1016 and that assembly listings (`-al') be requested also.
1018    Use the `-ac' option to omit false conditionals from a listing.  Any
1019 lines which are not assembled because of a false `.if' (or `.ifdef', or
1020 any other conditional), or a true `.if' followed by an `.else', will be
1021 omitted from the listing.
1023    Use the `-ad' option to omit debugging directives from the listing.
1025    Once you have specified one of these options, you can further control
1026 listing output and its appearance using the directives `.list',
1027 `.nolist', `.psize', `.eject', `.title', and `.sbttl'.  The `-an'
1028 option turns off all forms processing.  If you do not request listing
1029 output with one of the `-a' options, the listing-control directives
1030 have no effect.
1032    The letters after `-a' may be combined into one option, _e.g._,
1033 `-aln'.
1035    Note if the assembler source is coming from the standard input (eg
1036 because it is being created by `gcc' and the `-pipe' command line switch
1037 is being used) then the listing will not contain any comments or
1038 preprocessor directives.  This is because the listing code buffers
1039 input source lines from stdin only after they have been preprocessed by
1040 the assembler.  This reduces memory usage and makes the code more
1041 efficient.
1043 \x1f
1044 File: as.info,  Node: D,  Next: f,  Prev: a,  Up: Invoking
1046 `-D'
1047 ====
1049    This option has no effect whatsoever, but it is accepted to make it
1050 more likely that scripts written for other assemblers also work with
1051 `as'.
1053 \x1f
1054 File: as.info,  Node: f,  Next: I,  Prev: D,  Up: Invoking
1056 Work Faster: `-f'
1057 =================
1059    `-f' should only be used when assembling programs written by a
1060 (trusted) compiler.  `-f' stops the assembler from doing whitespace and
1061 comment preprocessing on the input file(s) before assembling them.
1062 *Note Preprocessing: Preprocessing.
1064      _Warning:_ if you use `-f' when the files actually need to be
1065      preprocessed (if they contain comments, for example), `as' does
1066      not work correctly.
1068 \x1f
1069 File: as.info,  Node: I,  Next: K,  Prev: f,  Up: Invoking
1071 `.include' Search Path: `-I' PATH
1072 =================================
1074    Use this option to add a PATH to the list of directories `as'
1075 searches for files specified in `.include' directives (*note
1076 `.include': Include.).  You may use `-I' as many times as necessary to
1077 include a variety of paths.  The current working directory is always
1078 searched first; after that, `as' searches any `-I' directories in the
1079 same order as they were specified (left to right) on the command line.
1081 \x1f
1082 File: as.info,  Node: K,  Next: L,  Prev: I,  Up: Invoking
1084 Difference Tables: `-K'
1085 =======================
1087    `as' sometimes alters the code emitted for directives of the form
1088 `.word SYM1-SYM2'; *note `.word': Word..  You can use the `-K' option
1089 if you want a warning issued when this is done.
1091 \x1f
1092 File: as.info,  Node: L,  Next: listing,  Prev: K,  Up: Invoking
1094 Include Local Labels: `-L'
1095 ==========================
1097    Labels beginning with `L' (upper case only) are called "local
1098 labels". *Note Symbol Names::.  Normally you do not see such labels when
1099 debugging, because they are intended for the use of programs (like
1100 compilers) that compose assembler programs, not for your notice.
1101 Normally both `as' and `ld' discard such labels, so you do not normally
1102 debug with them.
1104    This option tells `as' to retain those `L...' symbols in the object
1105 file.  Usually if you do this you also tell the linker `ld' to preserve
1106 symbols whose names begin with `L'.
1108    By default, a local label is any label beginning with `L', but each
1109 target is allowed to redefine the local label prefix.  On the HPPA
1110 local labels begin with `L$'.
1112 \x1f
1113 File: as.info,  Node: listing,  Next: M,  Prev: L,  Up: Invoking
1115 Configuring listing output: `--listing'
1116 =======================================
1118    The listing feature of the assembler can be enabled via the command
1119 line switch `-a' (*note a::).  This feature combines the input source
1120 file(s) with a hex dump of the corresponding locations in the output
1121 object file, and displays them as a listing file.  The format of this
1122 listing can be controlled by pseudo ops inside the assembler source
1123 (*note List:: *note Title:: *note Sbttl:: *note Psize:: *note Eject::)
1124 and also by the following switches:
1126 `--listing-lhs-width=`number''
1127      Sets the maximum width, in words, of the first line of the hex
1128      byte dump.  This dump appears on the left hand side of the listing
1129      output.
1131 `--listing-lhs-width2=`number''
1132      Sets the maximum width, in words, of any further lines of the hex
1133      byte dump for a given input source line.  If this value is not
1134      specified, it defaults to being the same as the value specified
1135      for `--listing-lhs-width'.  If neither switch is used the default
1136      is to one.
1138 `--listing-rhs-width=`number''
1139      Sets the maximum width, in characters, of the source line that is
1140      displayed alongside the hex dump.  The default value for this
1141      parameter is 100.  The source line is displayed on the right hand
1142      side of the listing output.
1144 `--listing-cont-lines=`number''
1145      Sets the maximum number of continuation lines of hex dump that
1146      will be displayed for a given single line of source input.  The
1147      default value is 4.
1149 \x1f
1150 File: as.info,  Node: M,  Next: MD,  Prev: listing,  Up: Invoking
1152 Assemble in MRI Compatibility Mode: `-M'
1153 ========================================
1155    The `-M' or `--mri' option selects MRI compatibility mode.  This
1156 changes the syntax and pseudo-op handling of `as' to make it compatible
1157 with the `ASM68K' or the `ASM960' (depending upon the configured
1158 target) assembler from Microtec Research.  The exact nature of the MRI
1159 syntax will not be documented here; see the MRI manuals for more
1160 information.  Note in particular that the handling of macros and macro
1161 arguments is somewhat different.  The purpose of this option is to
1162 permit assembling existing MRI assembler code using `as'.
1164    The MRI compatibility is not complete.  Certain operations of the
1165 MRI assembler depend upon its object file format, and can not be
1166 supported using other object file formats.  Supporting these would
1167 require enhancing each object file format individually.  These are:
1169    * global symbols in common section
1171      The m68k MRI assembler supports common sections which are merged
1172      by the linker.  Other object file formats do not support this.
1173      `as' handles common sections by treating them as a single common
1174      symbol.  It permits local symbols to be defined within a common
1175      section, but it can not support global symbols, since it has no
1176      way to describe them.
1178    * complex relocations
1180      The MRI assemblers support relocations against a negated section
1181      address, and relocations which combine the start addresses of two
1182      or more sections.  These are not support by other object file
1183      formats.
1185    * `END' pseudo-op specifying start address
1187      The MRI `END' pseudo-op permits the specification of a start
1188      address.  This is not supported by other object file formats.  The
1189      start address may instead be specified using the `-e' option to
1190      the linker, or in a linker script.
1192    * `IDNT', `.ident' and `NAME' pseudo-ops
1194      The MRI `IDNT', `.ident' and `NAME' pseudo-ops assign a module
1195      name to the output file.  This is not supported by other object
1196      file formats.
1198    * `ORG' pseudo-op
1200      The m68k MRI `ORG' pseudo-op begins an absolute section at a given
1201      address.  This differs from the usual `as' `.org' pseudo-op, which
1202      changes the location within the current section.  Absolute
1203      sections are not supported by other object file formats.  The
1204      address of a section may be assigned within a linker script.
1206    There are some other features of the MRI assembler which are not
1207 supported by `as', typically either because they are difficult or
1208 because they seem of little consequence.  Some of these may be
1209 supported in future releases.
1211    * EBCDIC strings
1213      EBCDIC strings are not supported.
1215    * packed binary coded decimal
1217      Packed binary coded decimal is not supported.  This means that the
1218      `DC.P' and `DCB.P' pseudo-ops are not supported.
1220    * `FEQU' pseudo-op
1222      The m68k `FEQU' pseudo-op is not supported.
1224    * `NOOBJ' pseudo-op
1226      The m68k `NOOBJ' pseudo-op is not supported.
1228    * `OPT' branch control options
1230      The m68k `OPT' branch control options--`B', `BRS', `BRB', `BRL',
1231      and `BRW'--are ignored.  `as' automatically relaxes all branches,
1232      whether forward or backward, to an appropriate size, so these
1233      options serve no purpose.
1235    * `OPT' list control options
1237      The following m68k `OPT' list control options are ignored: `C',
1238      `CEX', `CL', `CRE', `E', `G', `I', `M', `MEX', `MC', `MD', `X'.
1240    * other `OPT' options
1242      The following m68k `OPT' options are ignored: `NEST', `O', `OLD',
1243      `OP', `P', `PCO', `PCR', `PCS', `R'.
1245    * `OPT' `D' option is default
1247      The m68k `OPT' `D' option is the default, unlike the MRI assembler.
1248      `OPT NOD' may be used to turn it off.
1250    * `XREF' pseudo-op.
1252      The m68k `XREF' pseudo-op is ignored.
1254    * `.debug' pseudo-op
1256      The i960 `.debug' pseudo-op is not supported.
1258    * `.extended' pseudo-op
1260      The i960 `.extended' pseudo-op is not supported.
1262    * `.list' pseudo-op.
1264      The various options of the i960 `.list' pseudo-op are not
1265      supported.
1267    * `.optimize' pseudo-op
1269      The i960 `.optimize' pseudo-op is not supported.
1271    * `.output' pseudo-op
1273      The i960 `.output' pseudo-op is not supported.
1275    * `.setreal' pseudo-op
1277      The i960 `.setreal' pseudo-op is not supported.
1280 \x1f
1281 File: as.info,  Node: MD,  Next: o,  Prev: M,  Up: Invoking
1283 Dependency Tracking: `--MD'
1284 ===========================
1286    `as' can generate a dependency file for the file it creates.  This
1287 file consists of a single rule suitable for `make' describing the
1288 dependencies of the main source file.
1290    The rule is written to the file named in its argument.
1292    This feature is used in the automatic updating of makefiles.
1294 \x1f
1295 File: as.info,  Node: o,  Next: R,  Prev: MD,  Up: Invoking
1297 Name the Object File: `-o'
1298 ==========================
1300    There is always one object file output when you run `as'.  By
1301 default it has the name `a.out' (or `b.out', for Intel 960 targets
1302 only).  You use this option (which takes exactly one filename) to give
1303 the object file a different name.
1305    Whatever the object file is called, `as' overwrites any existing
1306 file of the same name.
1308 \x1f
1309 File: as.info,  Node: R,  Next: statistics,  Prev: o,  Up: Invoking
1311 Join Data and Text Sections: `-R'
1312 =================================
1314    `-R' tells `as' to write the object file as if all data-section data
1315 lives in the text section.  This is only done at the very last moment:
1316 your binary data are the same, but data section parts are relocated
1317 differently.  The data section part of your object file is zero bytes
1318 long because all its bytes are appended to the text section.  (*Note
1319 Sections and Relocation: Sections.)
1321    When you specify `-R' it would be possible to generate shorter
1322 address displacements (because we do not have to cross between text and
1323 data section).  We refrain from doing this simply for compatibility with
1324 older versions of `as'.  In future, `-R' may work this way.
1326    When `as' is configured for COFF or ELF output, this option is only
1327 useful if you use sections named `.text' and `.data'.
1329    `-R' is not supported for any of the HPPA targets.  Using `-R'
1330 generates a warning from `as'.
1332 \x1f
1333 File: as.info,  Node: statistics,  Next: traditional-format,  Prev: R,  Up: Invoking
1335 Display Assembly Statistics: `--statistics'
1336 ===========================================
1338    Use `--statistics' to display two statistics about the resources
1339 used by `as': the maximum amount of space allocated during the assembly
1340 (in bytes), and the total execution time taken for the assembly (in CPU
1341 seconds).
1343 \x1f
1344 File: as.info,  Node: traditional-format,  Next: v,  Prev: statistics,  Up: Invoking
1346 Compatible Output: `--traditional-format'
1347 =========================================
1349    For some targets, the output of `as' is different in some ways from
1350 the output of some existing assembler.  This switch requests `as' to
1351 use the traditional format instead.
1353    For example, it disables the exception frame optimizations which
1354 `as' normally does by default on `gcc' output.
1356 \x1f
1357 File: as.info,  Node: v,  Next: W,  Prev: traditional-format,  Up: Invoking
1359 Announce Version: `-v'
1360 ======================
1362    You can find out what version of as is running by including the
1363 option `-v' (which you can also spell as `-version') on the command
1364 line.
1366 \x1f
1367 File: as.info,  Node: W,  Next: Z,  Prev: v,  Up: Invoking
1369 Control Warnings: `-W', `--warn', `--no-warn', `--fatal-warnings'
1370 =================================================================
1372    `as' should never give a warning or error message when assembling
1373 compiler output.  But programs written by people often cause `as' to
1374 give a warning that a particular assumption was made.  All such
1375 warnings are directed to the standard error file.
1377    If you use the `-W' and `--no-warn' options, no warnings are issued.
1378 This only affects the warning messages: it does not change any
1379 particular of how `as' assembles your file.  Errors, which stop the
1380 assembly, are still reported.
1382    If you use the `--fatal-warnings' option, `as' considers files that
1383 generate warnings to be in error.
1385    You can switch these options off again by specifying `--warn', which
1386 causes warnings to be output as usual.
1388 \x1f
1389 File: as.info,  Node: Z,  Prev: W,  Up: Invoking
1391 Generate Object File in Spite of Errors: `-Z'
1392 =============================================
1394    After an error message, `as' normally produces no output.  If for
1395 some reason you are interested in object file output even after `as'
1396 gives an error message on your program, use the `-Z' option.  If there
1397 are any errors, `as' continues anyways, and writes an object file after
1398 a final warning message of the form `N errors, M warnings, generating
1399 bad object file.'
1401 \x1f
1402 File: as.info,  Node: Syntax,  Next: Sections,  Prev: Invoking,  Up: Top
1404 Syntax
1405 ******
1407    This chapter describes the machine-independent syntax allowed in a
1408 source file.  `as' syntax is similar to what many other assemblers use;
1409 it is inspired by the BSD 4.2 assembler, except that `as' does not
1410 assemble Vax bit-fields.
1412 * Menu:
1414 * Preprocessing::              Preprocessing
1415 * Whitespace::                  Whitespace
1416 * Comments::                    Comments
1417 * Symbol Intro::                Symbols
1418 * Statements::                  Statements
1419 * Constants::                   Constants
1421 \x1f
1422 File: as.info,  Node: Preprocessing,  Next: Whitespace,  Up: Syntax
1424 Preprocessing
1425 =============
1427    The `as' internal preprocessor:
1428    * adjusts and removes extra whitespace.  It leaves one space or tab
1429      before the keywords on a line, and turns any other whitespace on
1430      the line into a single space.
1432    * removes all comments, replacing them with a single space, or an
1433      appropriate number of newlines.
1435    * converts character constants into the appropriate numeric values.
1437    It does not do macro processing, include file handling, or anything
1438 else you may get from your C compiler's preprocessor.  You can do
1439 include file processing with the `.include' directive (*note
1440 `.include': Include.).  You can use the GNU C compiler driver to get
1441 other "CPP" style preprocessing by giving the input file a `.S' suffix.
1442 *Note Options Controlling the Kind of Output: (gcc.info)Overall
1443 Options.
1445    Excess whitespace, comments, and character constants cannot be used
1446 in the portions of the input text that are not preprocessed.
1448    If the first line of an input file is `#NO_APP' or if you use the
1449 `-f' option, whitespace and comments are not removed from the input
1450 file.  Within an input file, you can ask for whitespace and comment
1451 removal in specific portions of the by putting a line that says `#APP'
1452 before the text that may contain whitespace or comments, and putting a
1453 line that says `#NO_APP' after this text.  This feature is mainly
1454 intend to support `asm' statements in compilers whose output is
1455 otherwise free of comments and whitespace.
1457 \x1f
1458 File: as.info,  Node: Whitespace,  Next: Comments,  Prev: Preprocessing,  Up: Syntax
1460 Whitespace
1461 ==========
1463    "Whitespace" is one or more blanks or tabs, in any order.
1464 Whitespace is used to separate symbols, and to make programs neater for
1465 people to read.  Unless within character constants (*note Character
1466 Constants: Characters.), any whitespace means the same as exactly one
1467 space.
1469 \x1f
1470 File: as.info,  Node: Comments,  Next: Symbol Intro,  Prev: Whitespace,  Up: Syntax
1472 Comments
1473 ========
1475    There are two ways of rendering comments to `as'.  In both cases the
1476 comment is equivalent to one space.
1478    Anything from `/*' through the next `*/' is a comment.  This means
1479 you may not nest these comments.
1481      /*
1482        The only way to include a newline ('\n') in a comment
1483        is to use this sort of comment.
1484      */
1485      
1486      /* This sort of comment does not nest. */
1488    Anything from the "line comment" character to the next newline is
1489 considered a comment and is ignored.  The line comment character is `;'
1490 for the AMD 29K family; `;' on the ARC; `@' on the ARM; `;' for the
1491 H8/300 family; `!' for the H8/500 family; `;' for the HPPA; `#' on the
1492 i386 and x86-64; `#' on the i960; `;' for the PDP-11; `;' for picoJava;
1493 `#' for Motorola PowerPC; `!' for the Renesas / SuperH SH; `!' on the
1494 SPARC; `#' on the ip2k; `#' on the m32r; `|' on the 680x0; `#' on the
1495 68HC11 and 68HC12; `;' on the M880x0; `#' on the Vax; `!' for the Z8000;
1496 `#' on the V850; `#' for Xtensa systems; see *Note Machine
1497 Dependencies::.
1499    On some machines there are two different line comment characters.
1500 One character only begins a comment if it is the first non-whitespace
1501 character on a line, while the other always begins a comment.
1503    The V850 assembler also supports a double dash as starting a comment
1504 that extends to the end of the line.
1506    `--';
1508    To be compatible with past assemblers, lines that begin with `#'
1509 have a special interpretation.  Following the `#' should be an absolute
1510 expression (*note Expressions::): the logical line number of the _next_
1511 line.  Then a string (*note Strings: Strings.) is allowed: if present
1512 it is a new logical file name.  The rest of the line, if any, should be
1513 whitespace.
1515    If the first non-whitespace characters on the line are not numeric,
1516 the line is ignored.  (Just like a comment.)
1518                                # This is an ordinary comment.
1519      # 42-6 "new_file_name"    # New logical file name
1520                                # This is logical line # 36.
1521    This feature is deprecated, and may disappear from future versions
1522 of `as'.
1524 \x1f
1525 File: as.info,  Node: Symbol Intro,  Next: Statements,  Prev: Comments,  Up: Syntax
1527 Symbols
1528 =======
1530    A "symbol" is one or more characters chosen from the set of all
1531 letters (both upper and lower case), digits and the three characters
1532 `_.$'.  On most machines, you can also use `$' in symbol names;
1533 exceptions are noted in *Note Machine Dependencies::.  No symbol may
1534 begin with a digit.  Case is significant.  There is no length limit:
1535 all characters are significant.  Symbols are delimited by characters
1536 not in that set, or by the beginning of a file (since the source
1537 program must end with a newline, the end of a file is not a possible
1538 symbol delimiter).  *Note Symbols::.
1540 \x1f
1541 File: as.info,  Node: Statements,  Next: Constants,  Prev: Symbol Intro,  Up: Syntax
1543 Statements
1544 ==========
1546    A "statement" ends at a newline character (`\n') or line separator
1547 character.  (The line separator is usually `;', unless this conflicts
1548 with the comment character; *note Machine Dependencies::.)  The newline
1549 or separator character is considered part of the preceding statement.
1550 Newlines and separators within character constants are an exception:
1551 they do not end statements.
1553    It is an error to end any statement with end-of-file:  the last
1554 character of any input file should be a newline.
1556    An empty statement is allowed, and may include whitespace.  It is
1557 ignored.
1559    A statement begins with zero or more labels, optionally followed by a
1560 key symbol which determines what kind of statement it is.  The key
1561 symbol determines the syntax of the rest of the statement.  If the
1562 symbol begins with a dot `.' then the statement is an assembler
1563 directive: typically valid for any computer.  If the symbol begins with
1564 a letter the statement is an assembly language "instruction": it
1565 assembles into a machine language instruction.  Different versions of
1566 `as' for different computers recognize different instructions.  In
1567 fact, the same symbol may represent a different instruction in a
1568 different computer's assembly language.
1570    A label is a symbol immediately followed by a colon (`:').
1571 Whitespace before a label or after a colon is permitted, but you may not
1572 have whitespace between a label's symbol and its colon. *Note Labels::.
1574    For HPPA targets, labels need not be immediately followed by a
1575 colon, but the definition of a label must begin in column zero.  This
1576 also implies that only one label may be defined on each line.
1578      label:     .directive    followed by something
1579      another_label:           # This is an empty statement.
1580                 instruction   operand_1, operand_2, ...
1582 \x1f
1583 File: as.info,  Node: Constants,  Prev: Statements,  Up: Syntax
1585 Constants
1586 =========
1588    A constant is a number, written so that its value is known by
1589 inspection, without knowing any context.  Like this:
1590      .byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
1591      .ascii "Ring the bell\7"                  # A string constant.
1592      .octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
1593      .float 0f-314159265358979323846264338327\
1594      95028841971.693993751E-40                 # - pi, a flonum.
1596 * Menu:
1598 * Characters::                  Character Constants
1599 * Numbers::                     Number Constants
1601 \x1f
1602 File: as.info,  Node: Characters,  Next: Numbers,  Up: Constants
1604 Character Constants
1605 -------------------
1607    There are two kinds of character constants.  A "character" stands
1608 for one character in one byte and its value may be used in numeric
1609 expressions.  String constants (properly called string _literals_) are
1610 potentially many bytes and their values may not be used in arithmetic
1611 expressions.
1613 * Menu:
1615 * Strings::                     Strings
1616 * Chars::                       Characters
1618 \x1f
1619 File: as.info,  Node: Strings,  Next: Chars,  Up: Characters
1621 Strings
1622 .......
1624    A "string" is written between double-quotes.  It may contain
1625 double-quotes or null characters.  The way to get special characters
1626 into a string is to "escape" these characters: precede them with a
1627 backslash `\' character.  For example `\\' represents one backslash:
1628 the first `\' is an escape which tells `as' to interpret the second
1629 character literally as a backslash (which prevents `as' from
1630 recognizing the second `\' as an escape character).  The complete list
1631 of escapes follows.
1633 `\b'
1634      Mnemonic for backspace; for ASCII this is octal code 010.
1636 `\f'
1637      Mnemonic for FormFeed; for ASCII this is octal code 014.
1639 `\n'
1640      Mnemonic for newline; for ASCII this is octal code 012.
1642 `\r'
1643      Mnemonic for carriage-Return; for ASCII this is octal code 015.
1645 `\t'
1646      Mnemonic for horizontal Tab; for ASCII this is octal code 011.
1648 `\ DIGIT DIGIT DIGIT'
1649      An octal character code.  The numeric code is 3 octal digits.  For
1650      compatibility with other Unix systems, 8 and 9 are accepted as
1651      digits: for example, `\008' has the value 010, and `\009' the
1652      value 011.
1654 `\`x' HEX-DIGITS...'
1655      A hex character code.  All trailing hex digits are combined.
1656      Either upper or lower case `x' works.
1658 `\\'
1659      Represents one `\' character.
1661 `\"'
1662      Represents one `"' character.  Needed in strings to represent this
1663      character, because an unescaped `"' would end the string.
1665 `\ ANYTHING-ELSE'
1666      Any other character when escaped by `\' gives a warning, but
1667      assembles as if the `\' was not present.  The idea is that if you
1668      used an escape sequence you clearly didn't want the literal
1669      interpretation of the following character.  However `as' has no
1670      other interpretation, so `as' knows it is giving you the wrong
1671      code and warns you of the fact.
1673    Which characters are escapable, and what those escapes represent,
1674 varies widely among assemblers.  The current set is what we think the
1675 BSD 4.2 assembler recognizes, and is a subset of what most C compilers
1676 recognize.  If you are in doubt, do not use an escape sequence.
1678 \x1f
1679 File: as.info,  Node: Chars,  Prev: Strings,  Up: Characters
1681 Characters
1682 ..........
1684    A single character may be written as a single quote immediately
1685 followed by that character.  The same escapes apply to characters as to
1686 strings.  So if you want to write the character backslash, you must
1687 write `'\\' where the first `\' escapes the second `\'.  As you can
1688 see, the quote is an acute accent, not a grave accent.  A newline
1689 immediately following an acute accent is taken as a literal character
1690 and does not count as the end of a statement.  The value of a character
1691 constant in a numeric expression is the machine's byte-wide code for
1692 that character.  `as' assumes your character code is ASCII: `'A' means
1693 65, `'B' means 66, and so on.
1695 \x1f
1696 File: as.info,  Node: Numbers,  Prev: Characters,  Up: Constants
1698 Number Constants
1699 ----------------
1701    `as' distinguishes three kinds of numbers according to how they are
1702 stored in the target machine.  _Integers_ are numbers that would fit
1703 into an `int' in the C language.  _Bignums_ are integers, but they are
1704 stored in more than 32 bits.  _Flonums_ are floating point numbers,
1705 described below.
1707 * Menu:
1709 * Integers::                    Integers
1710 * Bignums::                     Bignums
1711 * Flonums::                     Flonums
1713 \x1f
1714 File: as.info,  Node: Integers,  Next: Bignums,  Up: Numbers
1716 Integers
1717 ........
1719    A binary integer is `0b' or `0B' followed by zero or more of the
1720 binary digits `01'.
1722    An octal integer is `0' followed by zero or more of the octal digits
1723 (`01234567').
1725    A decimal integer starts with a non-zero digit followed by zero or
1726 more digits (`0123456789').
1728    A hexadecimal integer is `0x' or `0X' followed by one or more
1729 hexadecimal digits chosen from `0123456789abcdefABCDEF'.
1731    Integers have the usual values.  To denote a negative integer, use
1732 the prefix operator `-' discussed under expressions (*note Prefix
1733 Operators: Prefix Ops.).
1735 \x1f
1736 File: as.info,  Node: Bignums,  Next: Flonums,  Prev: Integers,  Up: Numbers
1738 Bignums
1739 .......
1741    A "bignum" has the same syntax and semantics as an integer except
1742 that the number (or its negative) takes more than 32 bits to represent
1743 in binary.  The distinction is made because in some places integers are
1744 permitted while bignums are not.
1746 \x1f
1747 File: as.info,  Node: Flonums,  Prev: Bignums,  Up: Numbers
1749 Flonums
1750 .......
1752    A "flonum" represents a floating point number.  The translation is
1753 indirect: a decimal floating point number from the text is converted by
1754 `as' to a generic binary floating point number of more than sufficient
1755 precision.  This generic floating point number is converted to a
1756 particular computer's floating point format (or formats) by a portion
1757 of `as' specialized to that computer.
1759    A flonum is written by writing (in order)
1760    * The digit `0'.  (`0' is optional on the HPPA.)
1762    * A letter, to tell `as' the rest of the number is a flonum.  `e' is
1763      recommended.  Case is not important.
1765      On the H8/300, H8/500, Renesas / SuperH SH, and AMD 29K
1766      architectures, the letter must be one of the letters `DFPRSX' (in
1767      upper or lower case).
1769      On the ARC, the letter must be one of the letters `DFRS' (in upper
1770      or lower case).
1772      On the Intel 960 architecture, the letter must be one of the
1773      letters `DFT' (in upper or lower case).
1775      On the HPPA architecture, the letter must be `E' (upper case only).
1777    * An optional sign: either `+' or `-'.
1779    * An optional "integer part": zero or more decimal digits.
1781    * An optional "fractional part": `.' followed by zero or more
1782      decimal digits.
1784    * An optional exponent, consisting of:
1786         * An `E' or `e'.
1788         * Optional sign: either `+' or `-'.
1790         * One or more decimal digits.
1793    At least one of the integer part or the fractional part must be
1794 present.  The floating point number has the usual base-10 value.
1796    `as' does all processing using integers.  Flonums are computed
1797 independently of any floating point hardware in the computer running
1798 `as'.
1800 \x1f
1801 File: as.info,  Node: Sections,  Next: Symbols,  Prev: Syntax,  Up: Top
1803 Sections and Relocation
1804 ***********************
1806 * Menu:
1808 * Secs Background::             Background
1809 * Ld Sections::                 Linker Sections
1810 * As Sections::                 Assembler Internal Sections
1811 * Sub-Sections::                Sub-Sections
1812 * bss::                         bss Section
1814 \x1f
1815 File: as.info,  Node: Secs Background,  Next: Ld Sections,  Up: Sections
1817 Background
1818 ==========
1820    Roughly, a section is a range of addresses, with no gaps; all data
1821 "in" those addresses is treated the same for some particular purpose.
1822 For example there may be a "read only" section.
1824    The linker `ld' reads many object files (partial programs) and
1825 combines their contents to form a runnable program.  When `as' emits an
1826 object file, the partial program is assumed to start at address 0.
1827 `ld' assigns the final addresses for the partial program, so that
1828 different partial programs do not overlap.  This is actually an
1829 oversimplification, but it suffices to explain how `as' uses sections.
1831    `ld' moves blocks of bytes of your program to their run-time
1832 addresses.  These blocks slide to their run-time addresses as rigid
1833 units; their length does not change and neither does the order of bytes
1834 within them.  Such a rigid unit is called a _section_.  Assigning
1835 run-time addresses to sections is called "relocation".  It includes the
1836 task of adjusting mentions of object-file addresses so they refer to
1837 the proper run-time addresses.  For the H8/300 and H8/500, and for the
1838 Renesas / SuperH SH, `as' pads sections if needed to ensure they end on
1839 a word (sixteen bit) boundary.
1841    An object file written by `as' has at least three sections, any of
1842 which may be empty.  These are named "text", "data" and "bss" sections.
1844    When it generates COFF or ELF output, `as' can also generate
1845 whatever other named sections you specify using the `.section'
1846 directive (*note `.section': Section.).  If you do not use any
1847 directives that place output in the `.text' or `.data' sections, these
1848 sections still exist, but are empty.
1850    When `as' generates SOM or ELF output for the HPPA, `as' can also
1851 generate whatever other named sections you specify using the `.space'
1852 and `.subspace' directives.  See `HP9000 Series 800 Assembly Language
1853 Reference Manual' (HP 92432-90001) for details on the `.space' and
1854 `.subspace' assembler directives.
1856    Additionally, `as' uses different names for the standard text, data,
1857 and bss sections when generating SOM output.  Program text is placed
1858 into the `$CODE$' section, data into `$DATA$', and BSS into `$BSS$'.
1860    Within the object file, the text section starts at address `0', the
1861 data section follows, and the bss section follows the data section.
1863    When generating either SOM or ELF output files on the HPPA, the text
1864 section starts at address `0', the data section at address `0x4000000',
1865 and the bss section follows the data section.
1867    To let `ld' know which data changes when the sections are relocated,
1868 and how to change that data, `as' also writes to the object file
1869 details of the relocation needed.  To perform relocation `ld' must
1870 know, each time an address in the object file is mentioned:
1871    * Where in the object file is the beginning of this reference to an
1872      address?
1874    * How long (in bytes) is this reference?
1876    * Which section does the address refer to?  What is the numeric
1877      value of
1878           (ADDRESS) - (START-ADDRESS OF SECTION)?
1880    * Is the reference to an address "Program-Counter relative"?
1882    In fact, every address `as' ever uses is expressed as
1883      (SECTION) + (OFFSET INTO SECTION)
1885 Further, most expressions `as' computes have this section-relative
1886 nature.  (For some object formats, such as SOM for the HPPA, some
1887 expressions are symbol-relative instead.)
1889    In this manual we use the notation {SECNAME N} to mean "offset N
1890 into section SECNAME."
1892    Apart from text, data and bss sections you need to know about the
1893 "absolute" section.  When `ld' mixes partial programs, addresses in the
1894 absolute section remain unchanged.  For example, address `{absolute 0}'
1895 is "relocated" to run-time address 0 by `ld'.  Although the linker
1896 never arranges two partial programs' data sections with overlapping
1897 addresses after linking, _by definition_ their absolute sections must
1898 overlap.  Address `{absolute 239}' in one part of a program is always
1899 the same address when the program is running as address `{absolute
1900 239}' in any other part of the program.
1902    The idea of sections is extended to the "undefined" section.  Any
1903 address whose section is unknown at assembly time is by definition
1904 rendered {undefined U}--where U is filled in later.  Since numbers are
1905 always defined, the only way to generate an undefined address is to
1906 mention an undefined symbol.  A reference to a named common block would
1907 be such a symbol: its value is unknown at assembly time so it has
1908 section _undefined_.
1910    By analogy the word _section_ is used to describe groups of sections
1911 in the linked program.  `ld' puts all partial programs' text sections
1912 in contiguous addresses in the linked program.  It is customary to
1913 refer to the _text section_ of a program, meaning all the addresses of
1914 all partial programs' text sections.  Likewise for data and bss
1915 sections.
1917    Some sections are manipulated by `ld'; others are invented for use
1918 of `as' and have no meaning except during assembly.
1920 \x1f
1921 File: as.info,  Node: Ld Sections,  Next: As Sections,  Prev: Secs Background,  Up: Sections
1923 Linker Sections
1924 ===============
1926    `ld' deals with just four kinds of sections, summarized below.
1928 *named sections*
1929 *text section*
1930 *data section*
1931      These sections hold your program.  `as' and `ld' treat them as
1932      separate but equal sections.  Anything you can say of one section
1933      is true of another.  When the program is running, however, it is
1934      customary for the text section to be unalterable.  The text
1935      section is often shared among processes: it contains instructions,
1936      constants and the like.  The data section of a running program is
1937      usually alterable: for example, C variables would be stored in the
1938      data section.
1940 *bss section*
1941      This section contains zeroed bytes when your program begins
1942      running.  It is used to hold uninitialized variables or common
1943      storage.  The length of each partial program's bss section is
1944      important, but because it starts out containing zeroed bytes there
1945      is no need to store explicit zero bytes in the object file.  The
1946      bss section was invented to eliminate those explicit zeros from
1947      object files.
1949 *absolute section*
1950      Address 0 of this section is always "relocated" to runtime address
1951      0.  This is useful if you want to refer to an address that `ld'
1952      must not change when relocating.  In this sense we speak of
1953      absolute addresses being "unrelocatable": they do not change
1954      during relocation.
1956 *undefined section*
1957      This "section" is a catch-all for address references to objects
1958      not in the preceding sections.
1960    An idealized example of three relocatable sections follows.  The
1961 example uses the traditional section names `.text' and `.data'.  Memory
1962 addresses are on the horizontal axis.
1964                            +-----+----+--+
1965      partial program # 1:  |ttttt|dddd|00|
1966                            +-----+----+--+
1967      
1968                            text   data bss
1969                            seg.   seg. seg.
1970      
1971                            +---+---+---+
1972      partial program # 2:  |TTT|DDD|000|
1973                            +---+---+---+
1974      
1975                            +--+---+-----+--+----+---+-----+~~
1976      linked program:       |  |TTT|ttttt|  |dddd|DDD|00000|
1977                            +--+---+-----+--+----+---+-----+~~
1978      
1979          addresses:        0 ...
1981 \x1f
1982 File: as.info,  Node: As Sections,  Next: Sub-Sections,  Prev: Ld Sections,  Up: Sections
1984 Assembler Internal Sections
1985 ===========================
1987    These sections are meant only for the internal use of `as'.  They
1988 have no meaning at run-time.  You do not really need to know about these
1989 sections for most purposes; but they can be mentioned in `as' warning
1990 messages, so it might be helpful to have an idea of their meanings to
1991 `as'.  These sections are used to permit the value of every expression
1992 in your assembly language program to be a section-relative address.
1994 ASSEMBLER-INTERNAL-LOGIC-ERROR!
1995      An internal assembler logic error has been found.  This means
1996      there is a bug in the assembler.
1998 expr section
1999      The assembler stores complex expression internally as combinations
2000      of symbols.  When it needs to represent an expression as a symbol,
2001      it puts it in the expr section.
2003 \x1f
2004 File: as.info,  Node: Sub-Sections,  Next: bss,  Prev: As Sections,  Up: Sections
2006 Sub-Sections
2007 ============
2009    Assembled bytes conventionally fall into two sections: text and data.
2010 You may have separate groups of data in named sections that you want to
2011 end up near to each other in the object file, even though they are not
2012 contiguous in the assembler source.  `as' allows you to use
2013 "subsections" for this purpose.  Within each section, there can be
2014 numbered subsections with values from 0 to 8192.  Objects assembled
2015 into the same subsection go into the object file together with other
2016 objects in the same subsection.  For example, a compiler might want to
2017 store constants in the text section, but might not want to have them
2018 interspersed with the program being assembled.  In this case, the
2019 compiler could issue a `.text 0' before each section of code being
2020 output, and a `.text 1' before each group of constants being output.
2022    Subsections are optional.  If you do not use subsections, everything
2023 goes in subsection number zero.
2025    Each subsection is zero-padded up to a multiple of four bytes.
2026 (Subsections may be padded a different amount on different flavors of
2027 `as'.)
2029    Subsections appear in your object file in numeric order, lowest
2030 numbered to highest.  (All this to be compatible with other people's
2031 assemblers.)  The object file contains no representation of
2032 subsections; `ld' and other programs that manipulate object files see
2033 no trace of them.  They just see all your text subsections as a text
2034 section, and all your data subsections as a data section.
2036    To specify which subsection you want subsequent statements assembled
2037 into, use a numeric argument to specify it, in a `.text EXPRESSION' or
2038 a `.data EXPRESSION' statement.  When generating COFF or ELF output, you
2039 can also use an extra subsection argument with arbitrary named
2040 sections: `.section NAME, EXPRESSION'.  EXPRESSION should be an
2041 absolute expression.  (*Note Expressions::.)  If you just say `.text'
2042 then `.text 0' is assumed.  Likewise `.data' means `.data 0'.  Assembly
2043 begins in `text 0'.  For instance:
2044      .text 0     # The default subsection is text 0 anyway.
2045      .ascii "This lives in the first text subsection. *"
2046      .text 1
2047      .ascii "But this lives in the second text subsection."
2048      .data 0
2049      .ascii "This lives in the data section,"
2050      .ascii "in the first data subsection."
2051      .text 0
2052      .ascii "This lives in the first text section,"
2053      .ascii "immediately following the asterisk (*)."
2055    Each section has a "location counter" incremented by one for every
2056 byte assembled into that section.  Because subsections are merely a
2057 convenience restricted to `as' there is no concept of a subsection
2058 location counter.  There is no way to directly manipulate a location
2059 counter--but the `.align' directive changes it, and any label
2060 definition captures its current value.  The location counter of the
2061 section where statements are being assembled is said to be the "active"
2062 location counter.
2064 \x1f
2065 File: as.info,  Node: bss,  Prev: Sub-Sections,  Up: Sections
2067 bss Section
2068 ===========
2070    The bss section is used for local common variable storage.  You may
2071 allocate address space in the bss section, but you may not dictate data
2072 to load into it before your program executes.  When your program starts
2073 running, all the contents of the bss section are zeroed bytes.
2075    The `.lcomm' pseudo-op defines a symbol in the bss section; see
2076 *Note `.lcomm': Lcomm.
2078    The `.comm' pseudo-op may be used to declare a common symbol, which
2079 is another form of uninitialized symbol; see *Note `.comm': Comm.
2081    When assembling for a target which supports multiple sections, such
2082 as ELF or COFF, you may switch into the `.bss' section and define
2083 symbols as usual; see *Note `.section': Section.  You may only assemble
2084 zero values into the section.  Typically the section will only contain
2085 symbol definitions and `.skip' directives (*note `.skip': Skip.).
2087 \x1f
2088 File: as.info,  Node: Symbols,  Next: Expressions,  Prev: Sections,  Up: Top
2090 Symbols
2091 *******
2093    Symbols are a central concept: the programmer uses symbols to name
2094 things, the linker uses symbols to link, and the debugger uses symbols
2095 to debug.
2097      _Warning:_ `as' does not place symbols in the object file in the
2098      same order they were declared.  This may break some debuggers.
2100 * Menu:
2102 * Labels::                      Labels
2103 * Setting Symbols::             Giving Symbols Other Values
2104 * Symbol Names::                Symbol Names
2105 * Dot::                         The Special Dot Symbol
2106 * Symbol Attributes::           Symbol Attributes
2108 \x1f
2109 File: as.info,  Node: Labels,  Next: Setting Symbols,  Up: Symbols
2111 Labels
2112 ======
2114    A "label" is written as a symbol immediately followed by a colon
2115 `:'.  The symbol then represents the current value of the active
2116 location counter, and is, for example, a suitable instruction operand.
2117 You are warned if you use the same symbol to represent two different
2118 locations: the first definition overrides any other definitions.
2120    On the HPPA, the usual form for a label need not be immediately
2121 followed by a colon, but instead must start in column zero.  Only one
2122 label may be defined on a single line.  To work around this, the HPPA
2123 version of `as' also provides a special directive `.label' for defining
2124 labels more flexibly.
2126 \x1f
2127 File: as.info,  Node: Setting Symbols,  Next: Symbol Names,  Prev: Labels,  Up: Symbols
2129 Giving Symbols Other Values
2130 ===========================
2132    A symbol can be given an arbitrary value by writing a symbol,
2133 followed by an equals sign `=', followed by an expression (*note
2134 Expressions::).  This is equivalent to using the `.set' directive.
2135 *Note `.set': Set.
2137 \x1f
2138 File: as.info,  Node: Symbol Names,  Next: Dot,  Prev: Setting Symbols,  Up: Symbols
2140 Symbol Names
2141 ============
2143    Symbol names begin with a letter or with one of `._'.  On most
2144 machines, you can also use `$' in symbol names; exceptions are noted in
2145 *Note Machine Dependencies::.  That character may be followed by any
2146 string of digits, letters, dollar signs (unless otherwise noted in
2147 *Note Machine Dependencies::), and underscores.  For the AMD 29K
2148 family, `?' is also allowed in the body of a symbol name, though not at
2149 its beginning.
2151    Case of letters is significant: `foo' is a different symbol name
2152 than `Foo'.
2154    Each symbol has exactly one name.  Each name in an assembly language
2155 program refers to exactly one symbol.  You may use that symbol name any
2156 number of times in a program.
2158 Local Symbol Names
2159 ------------------
2161    Local symbols help compilers and programmers use names temporarily.
2162 They create symbols which are guaranteed to be unique over the entire
2163 scope of the input source code and which can be referred to by a simple
2164 notation.  To define a local symbol, write a label of the form `N:'
2165 (where N represents any positive integer).  To refer to the most recent
2166 previous definition of that symbol write `Nb', using the same number as
2167 when you defined the label.  To refer to the next definition of a local
2168 label, write `Nf'-- The `b' stands for"backwards" and the `f' stands
2169 for "forwards".
2171    There is no restriction on how you can use these labels, and you can
2172 reuse them too.  So that it is possible to repeatedly define the same
2173 local label (using the same number `N'), although you can only refer to
2174 the most recently defined local label of that number (for a backwards
2175 reference) or the next definition of a specific local label for a
2176 forward reference.  It is also worth noting that the first 10 local
2177 labels (`0:'...`9:') are implemented in a slightly more efficient
2178 manner than the others.
2180    Here is an example:
2182      1:        branch 1f
2183      2:        branch 1b
2184      1:        branch 2f
2185      2:        branch 1b
2187    Which is the equivalent of:
2189      label_1:  branch label_3
2190      label_2:  branch label_1
2191      label_3:  branch label_4
2192      label_4:  branch label_3
2194    Local symbol names are only a notational device.  They are
2195 immediately transformed into more conventional symbol names before the
2196 assembler uses them.  The symbol names stored in the symbol table,
2197 appearing in error messages and optionally emitted to the object file.
2198 The names are constructed using these parts:
2201      All local labels begin with `L'. Normally both `as' and `ld'
2202      forget symbols that start with `L'. These labels are used for
2203      symbols you are never intended to see.  If you use the `-L' option
2204      then `as' retains these symbols in the object file. If you also
2205      instruct `ld' to retain these symbols, you may use them in
2206      debugging.
2208 `NUMBER'
2209      This is the number that was used in the local label definition.
2210      So if the label is written `55:' then the number is `55'.
2212 `C-B'
2213      This unusual character is included so you do not accidentally
2214      invent a symbol of the same name.  The character has ASCII value
2215      of `\002' (control-B).
2217 `_ordinal number_'
2218      This is a serial number to keep the labels distinct.  The first
2219      definition of `0:' gets the number `1'.  The 15th definition of
2220      `0:' gets the number `15', and so on.  Likewise the first
2221      definition of `1:' gets the number `1' and its 15th defintion gets
2222      `15' as well.
2224    So for example, the first `1:' is named `L1C-B1', the 44th `3:' is
2225 named `L3C-B44'.
2227 Dollar Local Labels
2228 -------------------
2230    `as' also supports an even more local form of local labels called
2231 dollar labels.  These labels go out of scope (ie they become undefined)
2232 as soon as a non-local label is defined.  Thus they remain valid for
2233 only a small region of the input source code.  Normal local labels, by
2234 contrast, remain in scope for the entire file, or until they are
2235 redefined by another occurrence of the same local label.
2237    Dollar labels are defined in exactly the same way as ordinary local
2238 labels, except that instead of being terminated by a colon, they are
2239 terminated by a dollar sign.  eg `55$'.
2241    They can also be distinguished from ordinary local labels by their
2242 transformed name which uses ASCII character `\001' (control-A) as the
2243 magic character to distinguish them from ordinary labels.  Thus the 5th
2244 defintion of `6$' is named `L6C-A5'.
2246 \x1f
2247 File: as.info,  Node: Dot,  Next: Symbol Attributes,  Prev: Symbol Names,  Up: Symbols
2249 The Special Dot Symbol
2250 ======================
2252    The special symbol `.' refers to the current address that `as' is
2253 assembling into.  Thus, the expression `melvin: .long .' defines
2254 `melvin' to contain its own address.  Assigning a value to `.' is
2255 treated the same as a `.org' directive.  Thus, the expression `.=.+4'
2256 is the same as saying `.space 4'.
2258 \x1f
2259 File: as.info,  Node: Symbol Attributes,  Prev: Dot,  Up: Symbols
2261 Symbol Attributes
2262 =================
2264    Every symbol has, as well as its name, the attributes "Value" and
2265 "Type".  Depending on output format, symbols can also have auxiliary
2266 attributes.
2268    If you use a symbol without defining it, `as' assumes zero for all
2269 these attributes, and probably won't warn you.  This makes the symbol
2270 an externally defined symbol, which is generally what you would want.
2272 * Menu:
2274 * Symbol Value::                Value
2275 * Symbol Type::                 Type
2278 * a.out Symbols::               Symbol Attributes: `a.out'
2280 * COFF Symbols::                Symbol Attributes for COFF
2282 * SOM Symbols::                Symbol Attributes for SOM
2284 \x1f
2285 File: as.info,  Node: Symbol Value,  Next: Symbol Type,  Up: Symbol Attributes
2287 Value
2288 -----
2290    The value of a symbol is (usually) 32 bits.  For a symbol which
2291 labels a location in the text, data, bss or absolute sections the value
2292 is the number of addresses from the start of that section to the label.
2293 Naturally for text, data and bss sections the value of a symbol changes
2294 as `ld' changes section base addresses during linking.  Absolute
2295 symbols' values do not change during linking: that is why they are
2296 called absolute.
2298    The value of an undefined symbol is treated in a special way.  If it
2299 is 0 then the symbol is not defined in this assembler source file, and
2300 `ld' tries to determine its value from other files linked into the same
2301 program.  You make this kind of symbol simply by mentioning a symbol
2302 name without defining it.  A non-zero value represents a `.comm' common
2303 declaration.  The value is how much common storage to reserve, in bytes
2304 (addresses).  The symbol refers to the first address of the allocated
2305 storage.
2307 \x1f
2308 File: as.info,  Node: Symbol Type,  Next: a.out Symbols,  Prev: Symbol Value,  Up: Symbol Attributes
2310 Type
2311 ----
2313    The type attribute of a symbol contains relocation (section)
2314 information, any flag settings indicating that a symbol is external, and
2315 (optionally), other information for linkers and debuggers.  The exact
2316 format depends on the object-code output format in use.
2318 \x1f
2319 File: as.info,  Node: a.out Symbols,  Next: COFF Symbols,  Prev: Symbol Type,  Up: Symbol Attributes
2321 Symbol Attributes: `a.out'
2322 --------------------------
2324 * Menu:
2326 * Symbol Desc::                 Descriptor
2327 * Symbol Other::                Other
2329 \x1f
2330 File: as.info,  Node: Symbol Desc,  Next: Symbol Other,  Up: a.out Symbols
2332 Descriptor
2333 ..........
2335    This is an arbitrary 16-bit value.  You may establish a symbol's
2336 descriptor value by using a `.desc' statement (*note `.desc': Desc.).
2337 A descriptor value means nothing to `as'.
2339 \x1f
2340 File: as.info,  Node: Symbol Other,  Prev: Symbol Desc,  Up: a.out Symbols
2342 Other
2343 .....
2345    This is an arbitrary 8-bit value.  It means nothing to `as'.
2347 \x1f
2348 File: as.info,  Node: COFF Symbols,  Next: SOM Symbols,  Prev: a.out Symbols,  Up: Symbol Attributes
2350 Symbol Attributes for COFF
2351 --------------------------
2353    The COFF format supports a multitude of auxiliary symbol attributes;
2354 like the primary symbol attributes, they are set between `.def' and
2355 `.endef' directives.
2357 Primary Attributes
2358 ..................
2360    The symbol name is set with `.def'; the value and type,
2361 respectively, with `.val' and `.type'.
2363 Auxiliary Attributes
2364 ....................
2366    The `as' directives `.dim', `.line', `.scl', `.size', and `.tag' can
2367 generate auxiliary symbol table information for COFF.
2369 \x1f
2370 File: as.info,  Node: SOM Symbols,  Prev: COFF Symbols,  Up: Symbol Attributes
2372 Symbol Attributes for SOM
2373 -------------------------
2375    The SOM format for the HPPA supports a multitude of symbol
2376 attributes set with the `.EXPORT' and `.IMPORT' directives.
2378    The attributes are described in `HP9000 Series 800 Assembly Language
2379 Reference Manual' (HP 92432-90001) under the `IMPORT' and `EXPORT'
2380 assembler directive documentation.
2382 \x1f
2383 File: as.info,  Node: Expressions,  Next: Pseudo Ops,  Prev: Symbols,  Up: Top
2385 Expressions
2386 ***********
2388    An "expression" specifies an address or numeric value.  Whitespace
2389 may precede and/or follow an expression.
2391    The result of an expression must be an absolute number, or else an
2392 offset into a particular section.  If an expression is not absolute,
2393 and there is not enough information when `as' sees the expression to
2394 know its section, a second pass over the source program might be
2395 necessary to interpret the expression--but the second pass is currently
2396 not implemented.  `as' aborts with an error message in this situation.
2398 * Menu:
2400 * Empty Exprs::                 Empty Expressions
2401 * Integer Exprs::               Integer Expressions
2403 \x1f
2404 File: as.info,  Node: Empty Exprs,  Next: Integer Exprs,  Up: Expressions
2406 Empty Expressions
2407 =================
2409    An empty expression has no value: it is just whitespace or null.
2410 Wherever an absolute expression is required, you may omit the
2411 expression, and `as' assumes a value of (absolute) 0.  This is
2412 compatible with other assemblers.
2414 \x1f
2415 File: as.info,  Node: Integer Exprs,  Prev: Empty Exprs,  Up: Expressions
2417 Integer Expressions
2418 ===================
2420    An "integer expression" is one or more _arguments_ delimited by
2421 _operators_.
2423 * Menu:
2425 * Arguments::                   Arguments
2426 * Operators::                   Operators
2427 * Prefix Ops::                  Prefix Operators
2428 * Infix Ops::                   Infix Operators
2430 \x1f
2431 File: as.info,  Node: Arguments,  Next: Operators,  Up: Integer Exprs
2433 Arguments
2434 ---------
2436    "Arguments" are symbols, numbers or subexpressions.  In other
2437 contexts arguments are sometimes called "arithmetic operands".  In this
2438 manual, to avoid confusing them with the "instruction operands" of the
2439 machine language, we use the term "argument" to refer to parts of
2440 expressions only, reserving the word "operand" to refer only to machine
2441 instruction operands.
2443    Symbols are evaluated to yield {SECTION NNN} where SECTION is one of
2444 text, data, bss, absolute, or undefined.  NNN is a signed, 2's
2445 complement 32 bit integer.
2447    Numbers are usually integers.
2449    A number can be a flonum or bignum.  In this case, you are warned
2450 that only the low order 32 bits are used, and `as' pretends these 32
2451 bits are an integer.  You may write integer-manipulating instructions
2452 that act on exotic constants, compatible with other assemblers.
2454    Subexpressions are a left parenthesis `(' followed by an integer
2455 expression, followed by a right parenthesis `)'; or a prefix operator
2456 followed by an argument.
2458 \x1f
2459 File: as.info,  Node: Operators,  Next: Prefix Ops,  Prev: Arguments,  Up: Integer Exprs
2461 Operators
2462 ---------
2464    "Operators" are arithmetic functions, like `+' or `%'.  Prefix
2465 operators are followed by an argument.  Infix operators appear between
2466 their arguments.  Operators may be preceded and/or followed by
2467 whitespace.
2469 \x1f
2470 File: as.info,  Node: Prefix Ops,  Next: Infix Ops,  Prev: Operators,  Up: Integer Exprs
2472 Prefix Operator
2473 ---------------
2475    `as' has the following "prefix operators".  They each take one
2476 argument, which must be absolute.
2479      "Negation".  Two's complement negation.
2482      "Complementation".  Bitwise not.
2484 \x1f
2485 File: as.info,  Node: Infix Ops,  Prev: Prefix Ops,  Up: Integer Exprs
2487 Infix Operators
2488 ---------------
2490    "Infix operators" take two arguments, one on either side.  Operators
2491 have precedence, but operations with equal precedence are performed left
2492 to right.  Apart from `+' or `-', both arguments must be absolute, and
2493 the result is absolute.
2495   1. Highest Precedence
2497     `*'
2498           "Multiplication".
2500     `/'
2501           "Division".  Truncation is the same as the C operator `/'
2503     `%'
2504           "Remainder".
2506     `<'
2507     `<<'
2508           "Shift Left".  Same as the C operator `<<'.
2510     `>'
2511     `>>'
2512           "Shift Right".  Same as the C operator `>>'.
2514   2. Intermediate precedence
2516     `|'
2517           "Bitwise Inclusive Or".
2519     `&'
2520           "Bitwise And".
2522     `^'
2523           "Bitwise Exclusive Or".
2525     `!'
2526           "Bitwise Or Not".
2528   3. Low Precedence
2530     `+'
2531           "Addition".  If either argument is absolute, the result has
2532           the section of the other argument.  You may not add together
2533           arguments from different sections.
2535     `-'
2536           "Subtraction".  If the right argument is absolute, the result
2537           has the section of the left argument.  If both arguments are
2538           in the same section, the result is absolute.  You may not
2539           subtract arguments from different sections.
2541     `=='
2542           "Is Equal To"
2544     `<>'
2545           "Is Not Equal To"
2547     `<'
2548           "Is Less Than"
2550     `>'
2551           "Is Greater Than"
2553     `>='
2554           "Is Greater Than Or Equal To"
2556     `<='
2557           "Is Less Than Or Equal To"
2559           The comparison operators can be used as infix operators.  A
2560           true results has a value of -1 whereas a false result has a
2561           value of 0.   Note, these operators perform signed
2562           comparisons.
2564   4. Lowest Precedence
2566     `&&'
2567           "Logical And".
2569     `||'
2570           "Logical Or".
2572           These two logical operations can be used to combine the
2573           results of sub expressions.  Note, unlike the comparison
2574           operators a true result returns a value of 1 but a false
2575           results does still return 0.  Also note that the logical or
2576           operator has a slightly lower precedence than logical and.
2579    In short, it's only meaningful to add or subtract the _offsets_ in an
2580 address; you can only have a defined section in one of the two
2581 arguments.
2583 \x1f
2584 File: as.info,  Node: Pseudo Ops,  Next: Machine Dependencies,  Prev: Expressions,  Up: Top
2586 Assembler Directives
2587 ********************
2589    All assembler directives have names that begin with a period (`.').
2590 The rest of the name is letters, usually in lower case.
2592    This chapter discusses directives that are available regardless of
2593 the target machine configuration for the GNU assembler.  Some machine
2594 configurations provide additional directives.  *Note Machine
2595 Dependencies::.
2597 * Menu:
2599 * Abort::                       `.abort'
2601 * ABORT::                       `.ABORT'
2603 * Align::                       `.align ABS-EXPR , ABS-EXPR'
2604 * Ascii::                       `.ascii "STRING"'...
2605 * Asciz::                       `.asciz "STRING"'...
2606 * Balign::                      `.balign ABS-EXPR , ABS-EXPR'
2607 * Byte::                        `.byte EXPRESSIONS'
2608 * Comm::                        `.comm SYMBOL , LENGTH '
2610 * CFI directives::              `.cfi_startproc', `.cfi_endproc', etc.
2612 * Data::                        `.data SUBSECTION'
2614 * Def::                         `.def NAME'
2616 * Desc::                        `.desc SYMBOL, ABS-EXPRESSION'
2618 * Dim::                         `.dim'
2620 * Double::                      `.double FLONUMS'
2621 * Eject::                       `.eject'
2622 * Else::                        `.else'
2623 * Elseif::                      `.elseif'
2624 * End::                         `.end'
2626 * Endef::                       `.endef'
2628 * Endfunc::                     `.endfunc'
2629 * Endif::                       `.endif'
2630 * Equ::                         `.equ SYMBOL, EXPRESSION'
2631 * Equiv::                       `.equiv SYMBOL, EXPRESSION'
2632 * Err::                         `.err'
2633 * Exitm::                       `.exitm'
2634 * Extern::                      `.extern'
2635 * Fail::                        `.fail'
2637 * File::                        `.file STRING'
2639 * Fill::                        `.fill REPEAT , SIZE , VALUE'
2640 * Float::                       `.float FLONUMS'
2641 * Func::                        `.func'
2642 * Global::                      `.global SYMBOL', `.globl SYMBOL'
2644 * Hidden::                      `.hidden NAMES'
2646 * hword::                       `.hword EXPRESSIONS'
2647 * Ident::                       `.ident'
2648 * If::                          `.if ABSOLUTE EXPRESSION'
2649 * Incbin::                      `.incbin "FILE"[,SKIP[,COUNT]]'
2650 * Include::                     `.include "FILE"'
2651 * Int::                         `.int EXPRESSIONS'
2653 * Internal::                    `.internal NAMES'
2655 * Irp::                         `.irp SYMBOL,VALUES'...
2656 * Irpc::                        `.irpc SYMBOL,VALUES'...
2657 * Lcomm::                       `.lcomm SYMBOL , LENGTH'
2658 * Lflags::                      `.lflags'
2660 * Line::                        `.line LINE-NUMBER'
2662 * Ln::                          `.ln LINE-NUMBER'
2663 * Linkonce::                    `.linkonce [TYPE]'
2664 * List::                        `.list'
2665 * Long::                        `.long EXPRESSIONS'
2667 * Macro::                       `.macro NAME ARGS'...
2668 * MRI::                         `.mri VAL'
2669 * Nolist::                      `.nolist'
2670 * Octa::                        `.octa BIGNUMS'
2671 * Org::                         `.org NEW-LC , FILL'
2672 * P2align::                     `.p2align ABS-EXPR , ABS-EXPR'
2674 * PopSection::                  `.popsection'
2675 * Previous::                    `.previous'
2677 * Print::                       `.print STRING'
2679 * Protected::                   `.protected NAMES'
2681 * Psize::                       `.psize LINES, COLUMNS'
2682 * Purgem::                      `.purgem NAME'
2684 * PushSection::                 `.pushsection NAME'
2686 * Quad::                        `.quad BIGNUMS'
2687 * Rept::                        `.rept COUNT'
2688 * Sbttl::                       `.sbttl "SUBHEADING"'
2690 * Scl::                         `.scl CLASS'
2692 * Section::                     `.section NAME'
2694 * Set::                         `.set SYMBOL, EXPRESSION'
2695 * Short::                       `.short EXPRESSIONS'
2696 * Single::                      `.single FLONUMS'
2698 * Size::                        `.size [NAME , EXPRESSION]'
2700 * Skip::                        `.skip SIZE , FILL'
2701 * Sleb128::                     `.sleb128 EXPRESSIONS'
2702 * Space::                       `.space SIZE , FILL'
2704 * Stab::                        `.stabd, .stabn, .stabs'
2706 * String::                      `.string "STR"'
2707 * Struct::                      `.struct EXPRESSION'
2709 * SubSection::                  `.subsection'
2710 * Symver::                      `.symver NAME,NAME2@NODENAME'
2713 * Tag::                         `.tag STRUCTNAME'
2715 * Text::                        `.text SUBSECTION'
2716 * Title::                       `.title "HEADING"'
2718 * Type::                        `.type <INT | NAME , TYPE DESCRIPTION>'
2720 * Uleb128::                     `.uleb128 EXPRESSIONS'
2722 * Val::                         `.val ADDR'
2725 * Version::                     `.version "STRING"'
2726 * VTableEntry::                 `.vtable_entry TABLE, OFFSET'
2727 * VTableInherit::               `.vtable_inherit CHILD, PARENT'
2728 * Weak::                        `.weak NAMES'
2730 * Word::                        `.word EXPRESSIONS'
2731 * Deprecated::                  Deprecated Directives
2733 \x1f
2734 File: as.info,  Node: Abort,  Next: ABORT,  Up: Pseudo Ops
2736 `.abort'
2737 ========
2739    This directive stops the assembly immediately.  It is for
2740 compatibility with other assemblers.  The original idea was that the
2741 assembly language source would be piped into the assembler.  If the
2742 sender of the source quit, it could use this directive tells `as' to
2743 quit also.  One day `.abort' will not be supported.
2745 \x1f
2746 File: as.info,  Node: ABORT,  Next: Align,  Prev: Abort,  Up: Pseudo Ops
2748 `.ABORT'
2749 ========
2751    When producing COFF output, `as' accepts this directive as a synonym
2752 for `.abort'.
2754    When producing `b.out' output, `as' accepts this directive, but
2755 ignores it.
2757 \x1f
2758 File: as.info,  Node: Align,  Next: Ascii,  Prev: ABORT,  Up: Pseudo Ops
2760 `.align ABS-EXPR, ABS-EXPR, ABS-EXPR'
2761 =====================================
2763    Pad the location counter (in the current subsection) to a particular
2764 storage boundary.  The first expression (which must be absolute) is the
2765 alignment required, as described below.
2767    The second expression (also absolute) gives the fill value to be
2768 stored in the padding bytes.  It (and the comma) may be omitted.  If it
2769 is omitted, the padding bytes are normally zero.  However, on some
2770 systems, if the section is marked as containing code and the fill value
2771 is omitted, the space is filled with no-op instructions.
2773    The third expression is also absolute, and is also optional.  If it
2774 is present, it is the maximum number of bytes that should be skipped by
2775 this alignment directive.  If doing the alignment would require
2776 skipping more bytes than the specified maximum, then the alignment is
2777 not done at all.  You can omit the fill value (the second argument)
2778 entirely by simply using two commas after the required alignment; this
2779 can be useful if you want the alignment to be filled with no-op
2780 instructions when appropriate.
2782    The way the required alignment is specified varies from system to
2783 system.  For the a29k, arc, hppa, i386 using ELF, i860, iq2000, m68k,
2784 m88k, or32, s390, sparc, tic4x, tic80 and xtensa, the first expression
2785 is the alignment request in bytes.  For example `.align 8' advances the
2786 location counter until it is a multiple of 8.  If the location counter
2787 is already a multiple of 8, no change is needed.  For the tic54x, the
2788 first expression is the alignment request in words.
2790    For other systems, including the i386 using a.out format, and the
2791 arm and strongarm, it is the number of low-order zero bits the location
2792 counter must have after advancement.  For example `.align 3' advances
2793 the location counter until it a multiple of 8.  If the location counter
2794 is already a multiple of 8, no change is needed.
2796    This inconsistency is due to the different behaviors of the various
2797 native assemblers for these systems which GAS must emulate.  GAS also
2798 provides `.balign' and `.p2align' directives, described later, which
2799 have a consistent behavior across all architectures (but are specific
2800 to GAS).
2802 \x1f
2803 File: as.info,  Node: Ascii,  Next: Asciz,  Prev: Align,  Up: Pseudo Ops
2805 `.ascii "STRING"'...
2806 ====================
2808    `.ascii' expects zero or more string literals (*note Strings::)
2809 separated by commas.  It assembles each string (with no automatic
2810 trailing zero byte) into consecutive addresses.
2812 \x1f
2813 File: as.info,  Node: Asciz,  Next: Balign,  Prev: Ascii,  Up: Pseudo Ops
2815 `.asciz "STRING"'...
2816 ====================
2818    `.asciz' is just like `.ascii', but each string is followed by a
2819 zero byte.  The "z" in `.asciz' stands for "zero".
2821 \x1f
2822 File: as.info,  Node: Balign,  Next: Byte,  Prev: Asciz,  Up: Pseudo Ops
2824 `.balign[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR'
2825 ==========================================
2827    Pad the location counter (in the current subsection) to a particular
2828 storage boundary.  The first expression (which must be absolute) is the
2829 alignment request in bytes.  For example `.balign 8' advances the
2830 location counter until it is a multiple of 8.  If the location counter
2831 is already a multiple of 8, no change is needed.
2833    The second expression (also absolute) gives the fill value to be
2834 stored in the padding bytes.  It (and the comma) may be omitted.  If it
2835 is omitted, the padding bytes are normally zero.  However, on some
2836 systems, if the section is marked as containing code and the fill value
2837 is omitted, the space is filled with no-op instructions.
2839    The third expression is also absolute, and is also optional.  If it
2840 is present, it is the maximum number of bytes that should be skipped by
2841 this alignment directive.  If doing the alignment would require
2842 skipping more bytes than the specified maximum, then the alignment is
2843 not done at all.  You can omit the fill value (the second argument)
2844 entirely by simply using two commas after the required alignment; this
2845 can be useful if you want the alignment to be filled with no-op
2846 instructions when appropriate.
2848    The `.balignw' and `.balignl' directives are variants of the
2849 `.balign' directive.  The `.balignw' directive treats the fill pattern
2850 as a two byte word value.  The `.balignl' directives treats the fill
2851 pattern as a four byte longword value.  For example, `.balignw
2852 4,0x368d' will align to a multiple of 4.  If it skips two bytes, they
2853 will be filled in with the value 0x368d (the exact placement of the
2854 bytes depends upon the endianness of the processor).  If it skips 1 or
2855 3 bytes, the fill value is undefined.
2857 \x1f
2858 File: as.info,  Node: Byte,  Next: Comm,  Prev: Balign,  Up: Pseudo Ops
2860 `.byte EXPRESSIONS'
2861 ===================
2863    `.byte' expects zero or more expressions, separated by commas.  Each
2864 expression is assembled into the next byte.
2866 \x1f
2867 File: as.info,  Node: Comm,  Next: CFI directives,  Prev: Byte,  Up: Pseudo Ops
2869 `.comm SYMBOL , LENGTH '
2870 ========================
2872    `.comm' declares a common symbol named SYMBOL.  When linking, a
2873 common symbol in one object file may be merged with a defined or common
2874 symbol of the same name in another object file.  If `ld' does not see a
2875 definition for the symbol-just one or more common symbols-then it will
2876 allocate LENGTH bytes of uninitialized memory.  LENGTH must be an
2877 absolute expression.  If `ld' sees multiple common symbols with the
2878 same name, and they do not all have the same size, it will allocate
2879 space using the largest size.
2881    When using ELF, the `.comm' directive takes an optional third
2882 argument.  This is the desired alignment of the symbol, specified as a
2883 byte boundary (for example, an alignment of 16 means that the least
2884 significant 4 bits of the address should be zero).  The alignment must
2885 be an absolute expression, and it must be a power of two.  If `ld'
2886 allocates uninitialized memory for the common symbol, it will use the
2887 alignment when placing the symbol.  If no alignment is specified, `as'
2888 will set the alignment to the largest power of two less than or equal
2889 to the size of the symbol, up to a maximum of 16.
2891    The syntax for `.comm' differs slightly on the HPPA.  The syntax is
2892 `SYMBOL .comm, LENGTH'; SYMBOL is optional.
2894 \x1f
2895 File: as.info,  Node: CFI directives,  Next: Data,  Prev: Comm,  Up: Pseudo Ops
2897 `.cfi_startproc'
2898 ================
2900    `.cfi_startproc' is used at the beginning of each function that
2901 should have an entry in `.eh_frame'. It initializes some internal data
2902 structures and emits architecture dependent initial CFI instructions.
2903 Don't forget to close the function by `.cfi_endproc'.
2905 `.cfi_endproc'
2906 ==============
2908    `.cfi_endproc' is used at the end of a function where it closes its
2909 unwind entry previously opened by `.cfi_startproc'. and emits it to
2910 `.eh_frame'.
2912 `.cfi_def_cfa REGISTER, OFFSET'
2913 ===============================
2915    `.cfi_def_cfa' defines a rule for computing CFA as: take address
2916 from REGISTER and add OFFSET to it.
2918 `.cfi_def_cfa_register REGISTER'
2919 ================================
2921    `.cfi_def_cfa_register' modifies a rule for computing CFA. From now
2922 on REGISTER will be used instead of the old one. Offset remains the
2923 same.
2925 `.cfi_def_cfa_offset OFFSET'
2926 ============================
2928    `.cfi_def_cfa_offset' modifies a rule for computing CFA. Register
2929 remains the same, but OFFSET is new. Note that it is the absolute
2930 offset that will be added to a defined register to compute CFA address.
2932 `.cfi_adjust_cfa_offset OFFSET'
2933 ===============================
2935    Same as `.cfi_def_cfa_offset' but OFFSET is a relative value that is
2936 added/substracted from the previous offset.
2938 `.cfi_offset REGISTER, OFFSET'
2939 ==============================
2941    Previous value of REGISTER is saved at offset OFFSET from CFA.
2943 `.cfi_rel_offset REGISTER, OFFSET'
2944 ==================================
2946    Previous value of REGISTER is saved at offset OFFSET from the
2947 current CFA register.  This is transformed to `.cfi_offset' using the
2948 known displacement of the CFA register from the CFA.  This is often
2949 easier to use, because the number will match the code it's annotating.
2951 `.cfi_window_save'
2952 ==================
2954    SPARC register window has been saved.
2956 `.cfi_escape' EXPRESSION[, ...]
2957 ===============================
2959    Allows the user to add arbitrary bytes to the unwind info.  One
2960 might use this to add OS-specific CFI opcodes, or generic CFI opcodes
2961 that GAS does not yet support.
2963 \x1f
2964 File: as.info,  Node: Data,  Next: Def,  Prev: CFI directives,  Up: Pseudo Ops
2966 `.data SUBSECTION'
2967 ==================
2969    `.data' tells `as' to assemble the following statements onto the end
2970 of the data subsection numbered SUBSECTION (which is an absolute
2971 expression).  If SUBSECTION is omitted, it defaults to zero.
2973 \x1f
2974 File: as.info,  Node: Def,  Next: Desc,  Prev: Data,  Up: Pseudo Ops
2976 `.def NAME'
2977 ===========
2979    Begin defining debugging information for a symbol NAME; the
2980 definition extends until the `.endef' directive is encountered.
2982    This directive is only observed when `as' is configured for COFF
2983 format output; when producing `b.out', `.def' is recognized, but
2984 ignored.
2986 \x1f
2987 File: as.info,  Node: Desc,  Next: Dim,  Prev: Def,  Up: Pseudo Ops
2989 `.desc SYMBOL, ABS-EXPRESSION'
2990 ==============================
2992    This directive sets the descriptor of the symbol (*note Symbol
2993 Attributes::) to the low 16 bits of an absolute expression.
2995    The `.desc' directive is not available when `as' is configured for
2996 COFF output; it is only for `a.out' or `b.out' object format.  For the
2997 sake of compatibility, `as' accepts it, but produces no output, when
2998 configured for COFF.
3000 \x1f
3001 File: as.info,  Node: Dim,  Next: Double,  Prev: Desc,  Up: Pseudo Ops
3003 `.dim'
3004 ======
3006    This directive is generated by compilers to include auxiliary
3007 debugging information in the symbol table.  It is only permitted inside
3008 `.def'/`.endef' pairs.
3010    `.dim' is only meaningful when generating COFF format output; when
3011 `as' is generating `b.out', it accepts this directive but ignores it.
3013 \x1f
3014 File: as.info,  Node: Double,  Next: Eject,  Prev: Dim,  Up: Pseudo Ops
3016 `.double FLONUMS'
3017 =================
3019    `.double' expects zero or more flonums, separated by commas.  It
3020 assembles floating point numbers.  The exact kind of floating point
3021 numbers emitted depends on how `as' is configured.  *Note Machine
3022 Dependencies::.
3024 \x1f
3025 File: as.info,  Node: Eject,  Next: Else,  Prev: Double,  Up: Pseudo Ops
3027 `.eject'
3028 ========
3030    Force a page break at this point, when generating assembly listings.
3032 \x1f
3033 File: as.info,  Node: Else,  Next: Elseif,  Prev: Eject,  Up: Pseudo Ops
3035 `.else'
3036 =======
3038    `.else' is part of the `as' support for conditional assembly; *note
3039 `.if': If..  It marks the beginning of a section of code to be
3040 assembled if the condition for the preceding `.if' was false.
3042 \x1f
3043 File: as.info,  Node: Elseif,  Next: End,  Prev: Else,  Up: Pseudo Ops
3045 `.elseif'
3046 =========
3048    `.elseif' is part of the `as' support for conditional assembly;
3049 *note `.if': If..  It is shorthand for beginning a new `.if' block that
3050 would otherwise fill the entire `.else' section.
3052 \x1f
3053 File: as.info,  Node: End,  Next: Endef,  Prev: Elseif,  Up: Pseudo Ops
3055 `.end'
3056 ======
3058    `.end' marks the end of the assembly file.  `as' does not process
3059 anything in the file past the `.end' directive.
3061 \x1f
3062 File: as.info,  Node: Endef,  Next: Endfunc,  Prev: End,  Up: Pseudo Ops
3064 `.endef'
3065 ========
3067    This directive flags the end of a symbol definition begun with
3068 `.def'.
3070    `.endef' is only meaningful when generating COFF format output; if
3071 `as' is configured to generate `b.out', it accepts this directive but
3072 ignores it.
3074 \x1f
3075 File: as.info,  Node: Endfunc,  Next: Endif,  Prev: Endef,  Up: Pseudo Ops
3077 `.endfunc'
3078 ==========
3080    `.endfunc' marks the end of a function specified with `.func'.
3082 \x1f
3083 File: as.info,  Node: Endif,  Next: Equ,  Prev: Endfunc,  Up: Pseudo Ops
3085 `.endif'
3086 ========
3088    `.endif' is part of the `as' support for conditional assembly; it
3089 marks the end of a block of code that is only assembled conditionally.
3090 *Note `.if': If.
3092 \x1f
3093 File: as.info,  Node: Equ,  Next: Equiv,  Prev: Endif,  Up: Pseudo Ops
3095 `.equ SYMBOL, EXPRESSION'
3096 =========================
3098    This directive sets the value of SYMBOL to EXPRESSION.  It is
3099 synonymous with `.set'; *note `.set': Set..
3101    The syntax for `equ' on the HPPA is `SYMBOL .equ EXPRESSION'.
3103 \x1f
3104 File: as.info,  Node: Equiv,  Next: Err,  Prev: Equ,  Up: Pseudo Ops
3106 `.equiv SYMBOL, EXPRESSION'
3107 ===========================
3109    The `.equiv' directive is like `.equ' and `.set', except that the
3110 assembler will signal an error if SYMBOL is already defined.  Note a
3111 symbol which has been referenced but not actually defined is considered
3112 to be undefined.
3114    Except for the contents of the error message, this is roughly
3115 equivalent to
3116      .ifdef SYM
3117      .err
3118      .endif
3119      .equ SYM,VAL
3121 \x1f
3122 File: as.info,  Node: Err,  Next: Exitm,  Prev: Equiv,  Up: Pseudo Ops
3124 `.err'
3125 ======
3127    If `as' assembles a `.err' directive, it will print an error message
3128 and, unless the `-Z' option was used, it will not generate an object
3129 file.  This can be used to signal error an conditionally compiled code.
3131 \x1f
3132 File: as.info,  Node: Exitm,  Next: Extern,  Prev: Err,  Up: Pseudo Ops
3134 `.exitm'
3135 ========
3137    Exit early from the current macro definition.  *Note Macro::.
3139 \x1f
3140 File: as.info,  Node: Extern,  Next: Fail,  Prev: Exitm,  Up: Pseudo Ops
3142 `.extern'
3143 =========
3145    `.extern' is accepted in the source program--for compatibility with
3146 other assemblers--but it is ignored.  `as' treats all undefined symbols
3147 as external.
3149 \x1f
3150 File: as.info,  Node: Fail,  Next: File,  Prev: Extern,  Up: Pseudo Ops
3152 `.fail EXPRESSION'
3153 ==================
3155    Generates an error or a warning.  If the value of the EXPRESSION is
3156 500 or more, `as' will print a warning message.  If the value is less
3157 than 500, `as' will print an error message.  The message will include
3158 the value of EXPRESSION.  This can occasionally be useful inside
3159 complex nested macros or conditional assembly.
3161 \x1f
3162 File: as.info,  Node: File,  Next: Fill,  Prev: Fail,  Up: Pseudo Ops
3164 `.file STRING'
3165 ==============
3167    `.file' tells `as' that we are about to start a new logical file.
3168 STRING is the new file name.  In general, the filename is recognized
3169 whether or not it is surrounded by quotes `"'; but if you wish to
3170 specify an empty file name, you must give the quotes-`""'.  This
3171 statement may go away in future: it is only recognized to be compatible
3172 with old `as' programs.  In some configurations of `as', `.file' has
3173 already been removed to avoid conflicts with other assemblers.  *Note
3174 Machine Dependencies::.
3176 \x1f
3177 File: as.info,  Node: Fill,  Next: Float,  Prev: File,  Up: Pseudo Ops
3179 `.fill REPEAT , SIZE , VALUE'
3180 =============================
3182    REPEAT, SIZE and VALUE are absolute expressions.  This emits REPEAT
3183 copies of SIZE bytes.  REPEAT may be zero or more.  SIZE may be zero or
3184 more, but if it is more than 8, then it is deemed to have the value 8,
3185 compatible with other people's assemblers.  The contents of each REPEAT
3186 bytes is taken from an 8-byte number.  The highest order 4 bytes are
3187 zero.  The lowest order 4 bytes are VALUE rendered in the byte-order of
3188 an integer on the computer `as' is assembling for.  Each SIZE bytes in
3189 a repetition is taken from the lowest order SIZE bytes of this number.
3190 Again, this bizarre behavior is compatible with other people's
3191 assemblers.
3193    SIZE and VALUE are optional.  If the second comma and VALUE are
3194 absent, VALUE is assumed zero.  If the first comma and following tokens
3195 are absent, SIZE is assumed to be 1.
3197 \x1f
3198 File: as.info,  Node: Float,  Next: Func,  Prev: Fill,  Up: Pseudo Ops
3200 `.float FLONUMS'
3201 ================
3203    This directive assembles zero or more flonums, separated by commas.
3204 It has the same effect as `.single'.  The exact kind of floating point
3205 numbers emitted depends on how `as' is configured.  *Note Machine
3206 Dependencies::.
3208 \x1f
3209 File: as.info,  Node: Func,  Next: Global,  Prev: Float,  Up: Pseudo Ops
3211 `.func NAME[,LABEL]'
3212 ====================
3214    `.func' emits debugging information to denote function NAME, and is
3215 ignored unless the file is assembled with debugging enabled.  Only
3216 `--gstabs[+]' is currently supported.  LABEL is the entry point of the
3217 function and if omitted NAME prepended with the `leading char' is used.
3218 `leading char' is usually `_' or nothing, depending on the target.  All
3219 functions are currently defined to have `void' return type.  The
3220 function must be terminated with `.endfunc'.
3222 \x1f
3223 File: as.info,  Node: Global,  Next: Hidden,  Prev: Func,  Up: Pseudo Ops
3225 `.global SYMBOL', `.globl SYMBOL'
3226 =================================
3228    `.global' makes the symbol visible to `ld'.  If you define SYMBOL in
3229 your partial program, its value is made available to other partial
3230 programs that are linked with it.  Otherwise, SYMBOL takes its
3231 attributes from a symbol of the same name from another file linked into
3232 the same program.
3234    Both spellings (`.globl' and `.global') are accepted, for
3235 compatibility with other assemblers.
3237    On the HPPA, `.global' is not always enough to make it accessible to
3238 other partial programs.  You may need the HPPA-only `.EXPORT' directive
3239 as well.  *Note HPPA Assembler Directives: HPPA Directives.
3241 \x1f
3242 File: as.info,  Node: Hidden,  Next: hword,  Prev: Global,  Up: Pseudo Ops
3244 `.hidden NAMES'
3245 ===============
3247    This one of the ELF visibility directives.  The other two are
3248 `.internal' (*note `.internal': Internal.) and `.protected' (*note
3249 `.protected': Protected.).
3251    This directive overrides the named symbols default visibility (which
3252 is set by their binding: local, global or weak).  The directive sets
3253 the visibility to `hidden' which means that the symbols are not visible
3254 to other components.  Such symbols are always considered to be
3255 `protected' as well.
3257 \x1f
3258 File: as.info,  Node: hword,  Next: Ident,  Prev: Hidden,  Up: Pseudo Ops
3260 `.hword EXPRESSIONS'
3261 ====================
3263    This expects zero or more EXPRESSIONS, and emits a 16 bit number for
3264 each.
3266    This directive is a synonym for `.short'; depending on the target
3267 architecture, it may also be a synonym for `.word'.
3269 \x1f
3270 File: as.info,  Node: Ident,  Next: If,  Prev: hword,  Up: Pseudo Ops
3272 `.ident'
3273 ========
3275    This directive is used by some assemblers to place tags in object
3276 files.  `as' simply accepts the directive for source-file compatibility
3277 with such assemblers, but does not actually emit anything for it.
3279 \x1f
3280 File: as.info,  Node: If,  Next: Incbin,  Prev: Ident,  Up: Pseudo Ops
3282 `.if ABSOLUTE EXPRESSION'
3283 =========================
3285    `.if' marks the beginning of a section of code which is only
3286 considered part of the source program being assembled if the argument
3287 (which must be an ABSOLUTE EXPRESSION) is non-zero.  The end of the
3288 conditional section of code must be marked by `.endif' (*note `.endif':
3289 Endif.); optionally, you may include code for the alternative
3290 condition, flagged by `.else' (*note `.else': Else.).  If you have
3291 several conditions to check, `.elseif' may be used to avoid nesting
3292 blocks if/else within each subsequent `.else' block.
3294    The following variants of `.if' are also supported:
3295 `.ifdef SYMBOL'
3296      Assembles the following section of code if the specified SYMBOL
3297      has been defined.  Note a symbol which has been referenced but not
3298      yet defined is considered to be undefined.
3300 `.ifc STRING1,STRING2'
3301      Assembles the following section of code if the two strings are the
3302      same.  The strings may be optionally quoted with single quotes.
3303      If they are not quoted, the first string stops at the first comma,
3304      and the second string stops at the end of the line.  Strings which
3305      contain whitespace should be quoted.  The string comparison is
3306      case sensitive.
3308 `.ifeq ABSOLUTE EXPRESSION'
3309      Assembles the following section of code if the argument is zero.
3311 `.ifeqs STRING1,STRING2'
3312      Another form of `.ifc'.  The strings must be quoted using double
3313      quotes.
3315 `.ifge ABSOLUTE EXPRESSION'
3316      Assembles the following section of code if the argument is greater
3317      than or equal to zero.
3319 `.ifgt ABSOLUTE EXPRESSION'
3320      Assembles the following section of code if the argument is greater
3321      than zero.
3323 `.ifle ABSOLUTE EXPRESSION'
3324      Assembles the following section of code if the argument is less
3325      than or equal to zero.
3327 `.iflt ABSOLUTE EXPRESSION'
3328      Assembles the following section of code if the argument is less
3329      than zero.
3331 `.ifnc STRING1,STRING2.'
3332      Like `.ifc', but the sense of the test is reversed: this assembles
3333      the following section of code if the two strings are not the same.
3335 `.ifndef SYMBOL'
3336 `.ifnotdef SYMBOL'
3337      Assembles the following section of code if the specified SYMBOL
3338      has not been defined.  Both spelling variants are equivalent.
3339      Note a symbol which has been referenced but not yet defined is
3340      considered to be undefined.
3342 `.ifne ABSOLUTE EXPRESSION'
3343      Assembles the following section of code if the argument is not
3344      equal to zero (in other words, this is equivalent to `.if').
3346 `.ifnes STRING1,STRING2'
3347      Like `.ifeqs', but the sense of the test is reversed: this
3348      assembles the following section of code if the two strings are not
3349      the same.
3351 \x1f
3352 File: as.info,  Node: Incbin,  Next: Include,  Prev: If,  Up: Pseudo Ops
3354 `.incbin "FILE"[,SKIP[,COUNT]]'
3355 ===============================
3357    The `incbin' directive includes FILE verbatim at the current
3358 location. You can control the search paths used with the `-I'
3359 command-line option (*note Command-Line Options: Invoking.).  Quotation
3360 marks are required around FILE.
3362    The SKIP argument skips a number of bytes from the start of the
3363 FILE.  The COUNT argument indicates the maximum number of bytes to
3364 read.  Note that the data is not aligned in any way, so it is the user's
3365 responsibility to make sure that proper alignment is provided both
3366 before and after the `incbin' directive.
3368 \x1f
3369 File: as.info,  Node: Include,  Next: Int,  Prev: Incbin,  Up: Pseudo Ops
3371 `.include "FILE"'
3372 =================
3374    This directive provides a way to include supporting files at
3375 specified points in your source program.  The code from FILE is
3376 assembled as if it followed the point of the `.include'; when the end
3377 of the included file is reached, assembly of the original file
3378 continues.  You can control the search paths used with the `-I'
3379 command-line option (*note Command-Line Options: Invoking.).  Quotation
3380 marks are required around FILE.
3382 \x1f
3383 File: as.info,  Node: Int,  Next: Internal,  Prev: Include,  Up: Pseudo Ops
3385 `.int EXPRESSIONS'
3386 ==================
3388    Expect zero or more EXPRESSIONS, of any section, separated by commas.
3389 For each expression, emit a number that, at run time, is the value of
3390 that expression.  The byte order and bit size of the number depends on
3391 what kind of target the assembly is for.
3393 \x1f
3394 File: as.info,  Node: Internal,  Next: Irp,  Prev: Int,  Up: Pseudo Ops
3396 `.internal NAMES'
3397 =================
3399    This one of the ELF visibility directives.  The other two are
3400 `.hidden' (*note `.hidden': Hidden.) and `.protected' (*note
3401 `.protected': Protected.).
3403    This directive overrides the named symbols default visibility (which
3404 is set by their binding: local, global or weak).  The directive sets
3405 the visibility to `internal' which means that the symbols are
3406 considered to be `hidden' (i.e., not visible to other components), and
3407 that some extra, processor specific processing must also be performed
3408 upon the  symbols as well.
3410 \x1f
3411 File: as.info,  Node: Irp,  Next: Irpc,  Prev: Internal,  Up: Pseudo Ops
3413 `.irp SYMBOL,VALUES'...
3414 =======================
3416    Evaluate a sequence of statements assigning different values to
3417 SYMBOL.  The sequence of statements starts at the `.irp' directive, and
3418 is terminated by an `.endr' directive.  For each VALUE, SYMBOL is set
3419 to VALUE, and the sequence of statements is assembled.  If no VALUE is
3420 listed, the sequence of statements is assembled once, with SYMBOL set
3421 to the null string.  To refer to SYMBOL within the sequence of
3422 statements, use \SYMBOL.
3424    For example, assembling
3426              .irp    param,1,2,3
3427              move    d\param,sp@-
3428              .endr
3430    is equivalent to assembling
3432              move    d1,sp@-
3433              move    d2,sp@-
3434              move    d3,sp@-
3436 \x1f
3437 File: as.info,  Node: Irpc,  Next: Lcomm,  Prev: Irp,  Up: Pseudo Ops
3439 `.irpc SYMBOL,VALUES'...
3440 ========================
3442    Evaluate a sequence of statements assigning different values to
3443 SYMBOL.  The sequence of statements starts at the `.irpc' directive,
3444 and is terminated by an `.endr' directive.  For each character in VALUE,
3445 SYMBOL is set to the character, and the sequence of statements is
3446 assembled.  If no VALUE is listed, the sequence of statements is
3447 assembled once, with SYMBOL set to the null string.  To refer to SYMBOL
3448 within the sequence of statements, use \SYMBOL.
3450    For example, assembling
3452              .irpc    param,123
3453              move    d\param,sp@-
3454              .endr
3456    is equivalent to assembling
3458              move    d1,sp@-
3459              move    d2,sp@-
3460              move    d3,sp@-
3462 \x1f
3463 File: as.info,  Node: Lcomm,  Next: Lflags,  Prev: Irpc,  Up: Pseudo Ops
3465 `.lcomm SYMBOL , LENGTH'
3466 ========================
3468    Reserve LENGTH (an absolute expression) bytes for a local common
3469 denoted by SYMBOL.  The section and value of SYMBOL are those of the
3470 new local common.  The addresses are allocated in the bss section, so
3471 that at run-time the bytes start off zeroed.  SYMBOL is not declared
3472 global (*note `.global': Global.), so is normally not visible to `ld'.
3474    Some targets permit a third argument to be used with `.lcomm'.  This
3475 argument specifies the desired alignment of the symbol in the bss
3476 section.
3478    The syntax for `.lcomm' differs slightly on the HPPA.  The syntax is
3479 `SYMBOL .lcomm, LENGTH'; SYMBOL is optional.
3481 \x1f
3482 File: as.info,  Node: Lflags,  Next: Line,  Prev: Lcomm,  Up: Pseudo Ops
3484 `.lflags'
3485 =========
3487    `as' accepts this directive, for compatibility with other
3488 assemblers, but ignores it.
3490 \x1f
3491 File: as.info,  Node: Line,  Next: Ln,  Prev: Lflags,  Up: Pseudo Ops
3493 `.line LINE-NUMBER'
3494 ===================
3496    Change the logical line number.  LINE-NUMBER must be an absolute
3497 expression.  The next line has that logical line number.  Therefore any
3498 other statements on the current line (after a statement separator
3499 character) are reported as on logical line number LINE-NUMBER - 1.  One
3500 day `as' will no longer support this directive: it is recognized only
3501 for compatibility with existing assembler programs.
3503    _Warning:_ In the AMD29K configuration of as, this command is not
3504 available; use the synonym `.ln' in that context.
3506    Even though this is a directive associated with the `a.out' or
3507 `b.out' object-code formats, `as' still recognizes it when producing
3508 COFF output, and treats `.line' as though it were the COFF `.ln' _if_
3509 it is found outside a `.def'/`.endef' pair.
3511    Inside a `.def', `.line' is, instead, one of the directives used by
3512 compilers to generate auxiliary symbol information for debugging.
3514 \x1f
3515 File: as.info,  Node: Linkonce,  Next: List,  Prev: Ln,  Up: Pseudo Ops
3517 `.linkonce [TYPE]'
3518 ==================
3520    Mark the current section so that the linker only includes a single
3521 copy of it.  This may be used to include the same section in several
3522 different object files, but ensure that the linker will only include it
3523 once in the final output file.  The `.linkonce' pseudo-op must be used
3524 for each instance of the section.  Duplicate sections are detected
3525 based on the section name, so it should be unique.
3527    This directive is only supported by a few object file formats; as of
3528 this writing, the only object file format which supports it is the
3529 Portable Executable format used on Windows NT.
3531    The TYPE argument is optional.  If specified, it must be one of the
3532 following strings.  For example:
3533      .linkonce same_size
3534    Not all types may be supported on all object file formats.
3536 `discard'
3537      Silently discard duplicate sections.  This is the default.
3539 `one_only'
3540      Warn if there are duplicate sections, but still keep only one copy.
3542 `same_size'
3543      Warn if any of the duplicates have different sizes.
3545 `same_contents'
3546      Warn if any of the duplicates do not have exactly the same
3547      contents.
3549 \x1f
3550 File: as.info,  Node: Ln,  Next: Linkonce,  Prev: Line,  Up: Pseudo Ops
3552 `.ln LINE-NUMBER'
3553 =================
3555    `.ln' is a synonym for `.line'.
3557 \x1f
3558 File: as.info,  Node: MRI,  Next: Nolist,  Prev: Macro,  Up: Pseudo Ops
3560 `.mri VAL'
3561 ==========
3563    If VAL is non-zero, this tells `as' to enter MRI mode.  If VAL is
3564 zero, this tells `as' to exit MRI mode.  This change affects code
3565 assembled until the next `.mri' directive, or until the end of the
3566 file.  *Note MRI mode: M.
3568 \x1f
3569 File: as.info,  Node: List,  Next: Long,  Prev: Linkonce,  Up: Pseudo Ops
3571 `.list'
3572 =======
3574    Control (in conjunction with the `.nolist' directive) whether or not
3575 assembly listings are generated.  These two directives maintain an
3576 internal counter (which is zero initially).   `.list' increments the
3577 counter, and `.nolist' decrements it.  Assembly listings are generated
3578 whenever the counter is greater than zero.
3580    By default, listings are disabled.  When you enable them (with the
3581 `-a' command line option; *note Command-Line Options: Invoking.), the
3582 initial value of the listing counter is one.
3584 \x1f
3585 File: as.info,  Node: Long,  Next: Macro,  Prev: List,  Up: Pseudo Ops
3587 `.long EXPRESSIONS'
3588 ===================
3590    `.long' is the same as `.int', *note `.int': Int..
3592 \x1f
3593 File: as.info,  Node: Macro,  Next: MRI,  Prev: Long,  Up: Pseudo Ops
3595 `.macro'
3596 ========
3598    The commands `.macro' and `.endm' allow you to define macros that
3599 generate assembly output.  For example, this definition specifies a
3600 macro `sum' that puts a sequence of numbers into memory:
3602              .macro  sum from=0, to=5
3603              .long   \from
3604              .if     \to-\from
3605              sum     "(\from+1)",\to
3606              .endif
3607              .endm
3609 With that definition, `SUM 0,5' is equivalent to this assembly input:
3611              .long   0
3612              .long   1
3613              .long   2
3614              .long   3
3615              .long   4
3616              .long   5
3618 `.macro MACNAME'
3619 `.macro MACNAME MACARGS ...'
3620      Begin the definition of a macro called MACNAME.  If your macro
3621      definition requires arguments, specify their names after the macro
3622      name, separated by commas or spaces.  You can supply a default
3623      value for any macro argument by following the name with `=DEFLT'.
3624      For example, these are all valid `.macro' statements:
3626     `.macro comm'
3627           Begin the definition of a macro called `comm', which takes no
3628           arguments.
3630     `.macro plus1 p, p1'
3631     `.macro plus1 p p1'
3632           Either statement begins the definition of a macro called
3633           `plus1', which takes two arguments; within the macro
3634           definition, write `\p' or `\p1' to evaluate the arguments.
3636     `.macro reserve_str p1=0 p2'
3637           Begin the definition of a macro called `reserve_str', with two
3638           arguments.  The first argument has a default value, but not
3639           the second.  After the definition is complete, you can call
3640           the macro either as `reserve_str A,B' (with `\p1' evaluating
3641           to A and `\p2' evaluating to B), or as `reserve_str ,B' (with
3642           `\p1' evaluating as the default, in this case `0', and `\p2'
3643           evaluating to B).
3645      When you call a macro, you can specify the argument values either
3646      by position, or by keyword.  For example, `sum 9,17' is equivalent
3647      to `sum to=17, from=9'.
3649 `.endm'
3650      Mark the end of a macro definition.
3652 `.exitm'
3653      Exit early from the current macro definition.
3655 `\@'
3656      `as' maintains a counter of how many macros it has executed in
3657      this pseudo-variable; you can copy that number to your output with
3658      `\@', but _only within a macro definition_.
3660 \x1f
3661 File: as.info,  Node: Nolist,  Next: Octa,  Prev: MRI,  Up: Pseudo Ops
3663 `.nolist'
3664 =========
3666    Control (in conjunction with the `.list' directive) whether or not
3667 assembly listings are generated.  These two directives maintain an
3668 internal counter (which is zero initially).   `.list' increments the
3669 counter, and `.nolist' decrements it.  Assembly listings are generated
3670 whenever the counter is greater than zero.
3672 \x1f
3673 File: as.info,  Node: Octa,  Next: Org,  Prev: Nolist,  Up: Pseudo Ops
3675 `.octa BIGNUMS'
3676 ===============
3678    This directive expects zero or more bignums, separated by commas.
3679 For each bignum, it emits a 16-byte integer.
3681    The term "octa" comes from contexts in which a "word" is two bytes;
3682 hence _octa_-word for 16 bytes.
3684 \x1f
3685 File: as.info,  Node: Org,  Next: P2align,  Prev: Octa,  Up: Pseudo Ops
3687 `.org NEW-LC , FILL'
3688 ====================
3690    Advance the location counter of the current section to NEW-LC.
3691 NEW-LC is either an absolute expression or an expression with the same
3692 section as the current subsection.  That is, you can't use `.org' to
3693 cross sections: if NEW-LC has the wrong section, the `.org' directive
3694 is ignored.  To be compatible with former assemblers, if the section of
3695 NEW-LC is absolute, `as' issues a warning, then pretends the section of
3696 NEW-LC is the same as the current subsection.
3698    `.org' may only increase the location counter, or leave it
3699 unchanged; you cannot use `.org' to move the location counter backwards.
3701    Because `as' tries to assemble programs in one pass, NEW-LC may not
3702 be undefined.  If you really detest this restriction we eagerly await a
3703 chance to share your improved assembler.
3705    Beware that the origin is relative to the start of the section, not
3706 to the start of the subsection.  This is compatible with other people's
3707 assemblers.
3709    When the location counter (of the current subsection) is advanced,
3710 the intervening bytes are filled with FILL which should be an absolute
3711 expression.  If the comma and FILL are omitted, FILL defaults to zero.
3713 \x1f
3714 File: as.info,  Node: P2align,  Next: PopSection,  Prev: Org,  Up: Pseudo Ops
3716 `.p2align[wl] ABS-EXPR, ABS-EXPR, ABS-EXPR'
3717 ===========================================
3719    Pad the location counter (in the current subsection) to a particular
3720 storage boundary.  The first expression (which must be absolute) is the
3721 number of low-order zero bits the location counter must have after
3722 advancement.  For example `.p2align 3' advances the location counter
3723 until it a multiple of 8.  If the location counter is already a
3724 multiple of 8, no change is needed.
3726    The second expression (also absolute) gives the fill value to be
3727 stored in the padding bytes.  It (and the comma) may be omitted.  If it
3728 is omitted, the padding bytes are normally zero.  However, on some
3729 systems, if the section is marked as containing code and the fill value
3730 is omitted, the space is filled with no-op instructions.
3732    The third expression is also absolute, and is also optional.  If it
3733 is present, it is the maximum number of bytes that should be skipped by
3734 this alignment directive.  If doing the alignment would require
3735 skipping more bytes than the specified maximum, then the alignment is
3736 not done at all.  You can omit the fill value (the second argument)
3737 entirely by simply using two commas after the required alignment; this
3738 can be useful if you want the alignment to be filled with no-op
3739 instructions when appropriate.
3741    The `.p2alignw' and `.p2alignl' directives are variants of the
3742 `.p2align' directive.  The `.p2alignw' directive treats the fill
3743 pattern as a two byte word value.  The `.p2alignl' directives treats the
3744 fill pattern as a four byte longword value.  For example, `.p2alignw
3745 2,0x368d' will align to a multiple of 4.  If it skips two bytes, they
3746 will be filled in with the value 0x368d (the exact placement of the
3747 bytes depends upon the endianness of the processor).  If it skips 1 or
3748 3 bytes, the fill value is undefined.
3750 \x1f
3751 File: as.info,  Node: Previous,  Next: Print,  Prev: PopSection,  Up: Pseudo Ops
3753 `.previous'
3754 ===========
3756    This is one of the ELF section stack manipulation directives.  The
3757 others are `.section' (*note Section::), `.subsection' (*note
3758 SubSection::), `.pushsection' (*note PushSection::), and `.popsection'
3759 (*note PopSection::).
3761    This directive swaps the current section (and subsection) with most
3762 recently referenced section (and subsection) prior to this one.
3763 Multiple `.previous' directives in a row will flip between two sections
3764 (and their subsections).
3766    In terms of the section stack, this directive swaps the current
3767 section with the top section on the section stack.
3769 \x1f
3770 File: as.info,  Node: PopSection,  Next: Previous,  Prev: P2align,  Up: Pseudo Ops
3772 `.popsection'
3773 =============
3775    This is one of the ELF section stack manipulation directives.  The
3776 others are `.section' (*note Section::), `.subsection' (*note
3777 SubSection::), `.pushsection' (*note PushSection::), and `.previous'
3778 (*note Previous::).
3780    This directive replaces the current section (and subsection) with
3781 the top section (and subsection) on the section stack.  This section is
3782 popped off the stack.
3784 \x1f
3785 File: as.info,  Node: Print,  Next: Protected,  Prev: Previous,  Up: Pseudo Ops
3787 `.print STRING'
3788 ===============
3790    `as' will print STRING on the standard output during assembly.  You
3791 must put STRING in double quotes.
3793 \x1f
3794 File: as.info,  Node: Protected,  Next: Psize,  Prev: Print,  Up: Pseudo Ops
3796 `.protected NAMES'
3797 ==================
3799    This one of the ELF visibility directives.  The other two are
3800 `.hidden' (*note Hidden::) and `.internal' (*note Internal::).
3802    This directive overrides the named symbols default visibility (which
3803 is set by their binding: local, global or weak).  The directive sets
3804 the visibility to `protected' which means that any references to the
3805 symbols from within the components that defines them must be resolved
3806 to the definition in that component, even if a definition in another
3807 component would normally preempt this.
3809 \x1f
3810 File: as.info,  Node: Psize,  Next: Purgem,  Prev: Protected,  Up: Pseudo Ops
3812 `.psize LINES , COLUMNS'
3813 ========================
3815    Use this directive to declare the number of lines--and, optionally,
3816 the number of columns--to use for each page, when generating listings.
3818    If you do not use `.psize', listings use a default line-count of 60.
3819 You may omit the comma and COLUMNS specification; the default width is
3820 200 columns.
3822    `as' generates formfeeds whenever the specified number of lines is
3823 exceeded (or whenever you explicitly request one, using `.eject').
3825    If you specify LINES as `0', no formfeeds are generated save those
3826 explicitly specified with `.eject'.
3828 \x1f
3829 File: as.info,  Node: Purgem,  Next: PushSection,  Prev: Psize,  Up: Pseudo Ops
3831 `.purgem NAME'
3832 ==============
3834    Undefine the macro NAME, so that later uses of the string will not be
3835 expanded.  *Note Macro::.
3837 \x1f
3838 File: as.info,  Node: PushSection,  Next: Quad,  Prev: Purgem,  Up: Pseudo Ops
3840 `.pushsection NAME , SUBSECTION'
3841 ================================
3843    This is one of the ELF section stack manipulation directives.  The
3844 others are `.section' (*note Section::), `.subsection' (*note
3845 SubSection::), `.popsection' (*note PopSection::), and `.previous'
3846 (*note Previous::).
3848    This directive is a synonym for `.section'.  It pushes the current
3849 section (and subsection) onto the top of the section stack, and then
3850 replaces the current section and subsection with `name' and
3851 `subsection'.
3853 \x1f
3854 File: as.info,  Node: Quad,  Next: Rept,  Prev: PushSection,  Up: Pseudo Ops
3856 `.quad BIGNUMS'
3857 ===============
3859    `.quad' expects zero or more bignums, separated by commas.  For each
3860 bignum, it emits an 8-byte integer.  If the bignum won't fit in 8
3861 bytes, it prints a warning message; and just takes the lowest order 8
3862 bytes of the bignum.
3864    The term "quad" comes from contexts in which a "word" is two bytes;
3865 hence _quad_-word for 8 bytes.
3867 \x1f
3868 File: as.info,  Node: Rept,  Next: Sbttl,  Prev: Quad,  Up: Pseudo Ops
3870 `.rept COUNT'
3871 =============
3873    Repeat the sequence of lines between the `.rept' directive and the
3874 next `.endr' directive COUNT times.
3876    For example, assembling
3878              .rept   3
3879              .long   0
3880              .endr
3882    is equivalent to assembling
3884              .long   0
3885              .long   0
3886              .long   0
3888 \x1f
3889 File: as.info,  Node: Sbttl,  Next: Scl,  Prev: Rept,  Up: Pseudo Ops
3891 `.sbttl "SUBHEADING"'
3892 =====================
3894    Use SUBHEADING as the title (third line, immediately after the title
3895 line) when generating assembly listings.
3897    This directive affects subsequent pages, as well as the current page
3898 if it appears within ten lines of the top of a page.
3900 \x1f
3901 File: as.info,  Node: Scl,  Next: Section,  Prev: Sbttl,  Up: Pseudo Ops
3903 `.scl CLASS'
3904 ============
3906    Set the storage-class value for a symbol.  This directive may only be
3907 used inside a `.def'/`.endef' pair.  Storage class may flag whether a
3908 symbol is static or external, or it may record further symbolic
3909 debugging information.
3911    The `.scl' directive is primarily associated with COFF output; when
3912 configured to generate `b.out' output format, `as' accepts this
3913 directive but ignores it.
3915 \x1f
3916 File: as.info,  Node: Section,  Next: Set,  Prev: Scl,  Up: Pseudo Ops
3918 `.section NAME'
3919 ===============
3921    Use the `.section' directive to assemble the following code into a
3922 section named NAME.
3924    This directive is only supported for targets that actually support
3925 arbitrarily named sections; on `a.out' targets, for example, it is not
3926 accepted, even with a standard `a.out' section name.
3928 COFF Version
3929 ------------
3931    For COFF targets, the `.section' directive is used in one of the
3932 following ways:
3934      .section NAME[, "FLAGS"]
3935      .section NAME[, SUBSEGMENT]
3937    If the optional argument is quoted, it is taken as flags to use for
3938 the section.  Each flag is a single character.  The following flags are
3939 recognized:
3941      bss section (uninitialized data)
3944      section is not loaded
3947      writable section
3950      data section
3953      read-only section
3956      executable section
3959      shared section (meaningful for PE targets)
3962      ignored.  (For compatibility with the ELF version)
3964    If no flags are specified, the default flags depend upon the section
3965 name.  If the section name is not recognized, the default will be for
3966 the section to be loaded and writable.  Note the `n' and `w' flags
3967 remove attributes from the section, rather than adding them, so if they
3968 are used on their own it will be as if no flags had been specified at
3969 all.
3971    If the optional argument to the `.section' directive is not quoted,
3972 it is taken as a subsegment number (*note Sub-Sections::).
3974 ELF Version
3975 -----------
3977    This is one of the ELF section stack manipulation directives.  The
3978 others are `.subsection' (*note SubSection::), `.pushsection' (*note
3979 PushSection::), `.popsection' (*note PopSection::), and `.previous'
3980 (*note Previous::).
3982    For ELF targets, the `.section' directive is used like this:
3984      .section NAME [, "FLAGS"[, @TYPE[, @ENTSIZE]]]
3986    The optional FLAGS argument is a quoted string which may contain any
3987 combination of the following characters:
3989      section is allocatable
3992      section is writable
3995      section is executable
3998      section is mergeable
4001      section contains zero terminated strings
4003    The optional TYPE argument may contain one of the following
4004 constants:
4005 `@progbits'
4006      section contains data
4008 `@nobits'
4009      section does not contain data (i.e., section only occupies space)
4011    Note on targets where the `@' character is the start of a comment (eg
4012 ARM) then another character is used instead.  For example the ARM port
4013 uses the `%' character.
4015    If FLAGS contains `M' flag, TYPE argument must be specified as well
4016 as ENTSIZE argument. Sections with `M' flag but not `S' flag must
4017 contain fixed size constants, each ENTSIZE octets long. Sections with
4018 both `M' and `S' must contain zero terminated strings where each
4019 character is ENTSIZE bytes long. The linker may remove duplicates
4020 within sections with the same name, same entity size and same flags.
4022    If no flags are specified, the default flags depend upon the section
4023 name.  If the section name is not recognized, the default will be for
4024 the section to have none of the above flags: it will not be allocated
4025 in memory, nor writable, nor executable.  The section will contain data.
4027    For ELF targets, the assembler supports another type of `.section'
4028 directive for compatibility with the Solaris assembler:
4030      .section "NAME"[, FLAGS...]
4032    Note that the section name is quoted.  There may be a sequence of
4033 comma separated flags:
4034 `#alloc'
4035      section is allocatable
4037 `#write'
4038      section is writable
4040 `#execinstr'
4041      section is executable
4043    This directive replaces the current section and subsection.  The
4044 replaced section and subsection are pushed onto the section stack.  See
4045 the contents of the gas testsuite directory `gas/testsuite/gas/elf' for
4046 some examples of how this directive and the other section stack
4047 directives work.
4049 \x1f
4050 File: as.info,  Node: Set,  Next: Short,  Prev: Section,  Up: Pseudo Ops
4052 `.set SYMBOL, EXPRESSION'
4053 =========================
4055    Set the value of SYMBOL to EXPRESSION.  This changes SYMBOL's value
4056 and type to conform to EXPRESSION.  If SYMBOL was flagged as external,
4057 it remains flagged (*note Symbol Attributes::).
4059    You may `.set' a symbol many times in the same assembly.
4061    If you `.set' a global symbol, the value stored in the object file
4062 is the last value stored into it.
4064    The syntax for `set' on the HPPA is `SYMBOL .set EXPRESSION'.
4066 \x1f
4067 File: as.info,  Node: Short,  Next: Single,  Prev: Set,  Up: Pseudo Ops
4069 `.short EXPRESSIONS'
4070 ====================
4072    `.short' is normally the same as `.word'.  *Note `.word': Word.
4074    In some configurations, however, `.short' and `.word' generate
4075 numbers of different lengths; *note Machine Dependencies::.
4077 \x1f
4078 File: as.info,  Node: Single,  Next: Size,  Prev: Short,  Up: Pseudo Ops
4080 `.single FLONUMS'
4081 =================
4083    This directive assembles zero or more flonums, separated by commas.
4084 It has the same effect as `.float'.  The exact kind of floating point
4085 numbers emitted depends on how `as' is configured.  *Note Machine
4086 Dependencies::.
4088 \x1f
4089 File: as.info,  Node: Size,  Next: Skip,  Prev: Single,  Up: Pseudo Ops
4091 `.size'
4092 =======
4094    This directive is used to set the size associated with a symbol.
4096 COFF Version
4097 ------------
4099    For COFF targets, the `.size' directive is only permitted inside
4100 `.def'/`.endef' pairs.  It is used like this:
4102      .size EXPRESSION
4104    `.size' is only meaningful when generating COFF format output; when
4105 `as' is generating `b.out', it accepts this directive but ignores it.
4107 ELF Version
4108 -----------
4110    For ELF targets, the `.size' directive is used like this:
4112      .size NAME , EXPRESSION
4114    This directive sets the size associated with a symbol NAME.  The
4115 size in bytes is computed from EXPRESSION which can make use of label
4116 arithmetic.  This directive is typically used to set the size of
4117 function symbols.
4119 \x1f
4120 File: as.info,  Node: Sleb128,  Next: Space,  Prev: Skip,  Up: Pseudo Ops
4122 `.sleb128 EXPRESSIONS'
4123 ======================
4125    SLEB128 stands for "signed little endian base 128."  This is a
4126 compact, variable length representation of numbers used by the DWARF
4127 symbolic debugging format.  *Note `.uleb128': Uleb128.
4129 \x1f
4130 File: as.info,  Node: Skip,  Next: Sleb128,  Prev: Size,  Up: Pseudo Ops
4132 `.skip SIZE , FILL'
4133 ===================
4135    This directive emits SIZE bytes, each of value FILL.  Both SIZE and
4136 FILL are absolute expressions.  If the comma and FILL are omitted, FILL
4137 is assumed to be zero.  This is the same as `.space'.
4139 \x1f
4140 File: as.info,  Node: Space,  Next: Stab,  Prev: Sleb128,  Up: Pseudo Ops
4142 `.space SIZE , FILL'
4143 ====================
4145    This directive emits SIZE bytes, each of value FILL.  Both SIZE and
4146 FILL are absolute expressions.  If the comma and FILL are omitted, FILL
4147 is assumed to be zero.  This is the same as `.skip'.
4149      _Warning:_ `.space' has a completely different meaning for HPPA
4150      targets; use `.block' as a substitute.  See `HP9000 Series 800
4151      Assembly Language Reference Manual' (HP 92432-90001) for the
4152      meaning of the `.space' directive.  *Note HPPA Assembler
4153      Directives: HPPA Directives, for a summary.
4155    On the AMD 29K, this directive is ignored; it is accepted for
4156 compatibility with other AMD 29K assemblers.
4158      _Warning:_ In most versions of the GNU assembler, the directive
4159      `.space' has the effect of `.block'  *Note Machine Dependencies::.
4161 \x1f
4162 File: as.info,  Node: Stab,  Next: String,  Prev: Space,  Up: Pseudo Ops
4164 `.stabd, .stabn, .stabs'
4165 ========================
4167    There are three directives that begin `.stab'.  All emit symbols
4168 (*note Symbols::), for use by symbolic debuggers.  The symbols are not
4169 entered in the `as' hash table: they cannot be referenced elsewhere in
4170 the source file.  Up to five fields are required:
4172 STRING
4173      This is the symbol's name.  It may contain any character except
4174      `\000', so is more general than ordinary symbol names.  Some
4175      debuggers used to code arbitrarily complex structures into symbol
4176      names using this field.
4178 TYPE
4179      An absolute expression.  The symbol's type is set to the low 8
4180      bits of this expression.  Any bit pattern is permitted, but `ld'
4181      and debuggers choke on silly bit patterns.
4183 OTHER
4184      An absolute expression.  The symbol's "other" attribute is set to
4185      the low 8 bits of this expression.
4187 DESC
4188      An absolute expression.  The symbol's descriptor is set to the low
4189      16 bits of this expression.
4191 VALUE
4192      An absolute expression which becomes the symbol's value.
4194    If a warning is detected while reading a `.stabd', `.stabn', or
4195 `.stabs' statement, the symbol has probably already been created; you
4196 get a half-formed symbol in your object file.  This is compatible with
4197 earlier assemblers!
4199 `.stabd TYPE , OTHER , DESC'
4200      The "name" of the symbol generated is not even an empty string.
4201      It is a null pointer, for compatibility.  Older assemblers used a
4202      null pointer so they didn't waste space in object files with empty
4203      strings.
4205      The symbol's value is set to the location counter, relocatably.
4206      When your program is linked, the value of this symbol is the
4207      address of the location counter when the `.stabd' was assembled.
4209 `.stabn TYPE , OTHER , DESC , VALUE'
4210      The name of the symbol is set to the empty string `""'.
4212 `.stabs STRING ,  TYPE , OTHER , DESC , VALUE'
4213      All five fields are specified.
4215 \x1f
4216 File: as.info,  Node: String,  Next: Struct,  Prev: Stab,  Up: Pseudo Ops
4218 `.string' "STR"
4219 ===============
4221    Copy the characters in STR to the object file.  You may specify more
4222 than one string to copy, separated by commas.  Unless otherwise
4223 specified for a particular machine, the assembler marks the end of each
4224 string with a 0 byte.  You can use any of the escape sequences
4225 described in *Note Strings: Strings.
4227 \x1f
4228 File: as.info,  Node: Struct,  Next: SubSection,  Prev: String,  Up: Pseudo Ops
4230 `.struct EXPRESSION'
4231 ====================
4233    Switch to the absolute section, and set the section offset to
4234 EXPRESSION, which must be an absolute expression.  You might use this
4235 as follows:
4236              .struct 0
4237      field1:
4238              .struct field1 + 4
4239      field2:
4240              .struct field2 + 4
4241      field3:
4242    This would define the symbol `field1' to have the value 0, the symbol
4243 `field2' to have the value 4, and the symbol `field3' to have the value
4244 8.  Assembly would be left in the absolute section, and you would need
4245 to use a `.section' directive of some sort to change to some other
4246 section before further assembly.
4248 \x1f
4249 File: as.info,  Node: SubSection,  Next: Symver,  Prev: Struct,  Up: Pseudo Ops
4251 `.subsection NAME'
4252 ==================
4254    This is one of the ELF section stack manipulation directives.  The
4255 others are `.section' (*note Section::), `.pushsection' (*note
4256 PushSection::), `.popsection' (*note PopSection::), and `.previous'
4257 (*note Previous::).
4259    This directive replaces the current subsection with `name'.  The
4260 current section is not changed.  The replaced subsection is put onto
4261 the section stack in place of the then current top of stack subsection.
4263 \x1f
4264 File: as.info,  Node: Symver,  Next: Tag,  Prev: SubSection,  Up: Pseudo Ops
4266 `.symver'
4267 =========
4269    Use the `.symver' directive to bind symbols to specific version nodes
4270 within a source file.  This is only supported on ELF platforms, and is
4271 typically used when assembling files to be linked into a shared library.
4272 There are cases where it may make sense to use this in objects to be
4273 bound into an application itself so as to override a versioned symbol
4274 from a shared library.
4276    For ELF targets, the `.symver' directive can be used like this:
4277      .symver NAME, NAME2@NODENAME
4278    If the symbol NAME is defined within the file being assembled, the
4279 `.symver' directive effectively creates a symbol alias with the name
4280 NAME2@NODENAME, and in fact the main reason that we just don't try and
4281 create a regular alias is that the @ character isn't permitted in
4282 symbol names.  The NAME2 part of the name is the actual name of the
4283 symbol by which it will be externally referenced.  The name NAME itself
4284 is merely a name of convenience that is used so that it is possible to
4285 have definitions for multiple versions of a function within a single
4286 source file, and so that the compiler can unambiguously know which
4287 version of a function is being mentioned.  The NODENAME portion of the
4288 alias should be the name of a node specified in the version script
4289 supplied to the linker when building a shared library.  If you are
4290 attempting to override a versioned symbol from a shared library, then
4291 NODENAME should correspond to the nodename of the symbol you are trying
4292 to override.
4294    If the symbol NAME is not defined within the file being assembled,
4295 all references to NAME will be changed to NAME2@NODENAME.  If no
4296 reference to NAME is made, NAME2@NODENAME will be removed from the
4297 symbol table.
4299    Another usage of the `.symver' directive is:
4300      .symver NAME, NAME2@@NODENAME
4301    In this case, the symbol NAME must exist and be defined within the
4302 file being assembled. It is similar to NAME2@NODENAME. The difference
4303 is NAME2@@NODENAME will also be used to resolve references to NAME2 by
4304 the linker.
4306    The third usage of the `.symver' directive is:
4307      .symver NAME, NAME2@@@NODENAME
4308    When NAME is not defined within the file being assembled, it is
4309 treated as NAME2@NODENAME. When NAME is defined within the file being
4310 assembled, the symbol name, NAME, will be changed to NAME2@@NODENAME.
4312 \x1f
4313 File: as.info,  Node: Tag,  Next: Text,  Prev: Symver,  Up: Pseudo Ops
4315 `.tag STRUCTNAME'
4316 =================
4318    This directive is generated by compilers to include auxiliary
4319 debugging information in the symbol table.  It is only permitted inside
4320 `.def'/`.endef' pairs.  Tags are used to link structure definitions in
4321 the symbol table with instances of those structures.
4323    `.tag' is only used when generating COFF format output; when `as' is
4324 generating `b.out', it accepts this directive but ignores it.
4326 \x1f
4327 File: as.info,  Node: Text,  Next: Title,  Prev: Tag,  Up: Pseudo Ops
4329 `.text SUBSECTION'
4330 ==================
4332    Tells `as' to assemble the following statements onto the end of the
4333 text subsection numbered SUBSECTION, which is an absolute expression.
4334 If SUBSECTION is omitted, subsection number zero is used.
4336 \x1f
4337 File: as.info,  Node: Title,  Next: Type,  Prev: Text,  Up: Pseudo Ops
4339 `.title "HEADING"'
4340 ==================
4342    Use HEADING as the title (second line, immediately after the source
4343 file name and pagenumber) when generating assembly listings.
4345    This directive affects subsequent pages, as well as the current page
4346 if it appears within ten lines of the top of a page.
4348 \x1f
4349 File: as.info,  Node: Type,  Next: Uleb128,  Prev: Title,  Up: Pseudo Ops
4351 `.type'
4352 =======
4354    This directive is used to set the type of a symbol.
4356 COFF Version
4357 ------------
4359    For COFF targets, this directive is permitted only within
4360 `.def'/`.endef' pairs.  It is used like this:
4362      .type INT
4364    This records the integer INT as the type attribute of a symbol table
4365 entry.
4367    `.type' is associated only with COFF format output; when `as' is
4368 configured for `b.out' output, it accepts this directive but ignores it.
4370 ELF Version
4371 -----------
4373    For ELF targets, the `.type' directive is used like this:
4375      .type NAME , TYPE DESCRIPTION
4377    This sets the type of symbol NAME to be either a function symbol or
4378 an object symbol.  There are five different syntaxes supported for the
4379 TYPE DESCRIPTION field, in order to provide compatibility with various
4380 other assemblers.  The syntaxes supported are:
4382        .type <name>,#function
4383        .type <name>,#object
4384      
4385        .type <name>,@function
4386        .type <name>,@object
4387      
4388        .type <name>,%function
4389        .type <name>,%object
4390      
4391        .type <name>,"function"
4392        .type <name>,"object"
4393      
4394        .type <name> STT_FUNCTION
4395        .type <name> STT_OBJECT
4397 \x1f
4398 File: as.info,  Node: Uleb128,  Next: Val,  Prev: Type,  Up: Pseudo Ops
4400 `.uleb128 EXPRESSIONS'
4401 ======================
4403    ULEB128 stands for "unsigned little endian base 128."  This is a
4404 compact, variable length representation of numbers used by the DWARF
4405 symbolic debugging format.  *Note `.sleb128': Sleb128.
4407 \x1f
4408 File: as.info,  Node: Val,  Next: Version,  Prev: Uleb128,  Up: Pseudo Ops
4410 `.val ADDR'
4411 ===========
4413    This directive, permitted only within `.def'/`.endef' pairs, records
4414 the address ADDR as the value attribute of a symbol table entry.
4416    `.val' is used only for COFF output; when `as' is configured for
4417 `b.out', it accepts this directive but ignores it.
4419 \x1f
4420 File: as.info,  Node: Version,  Next: VTableEntry,  Prev: Val,  Up: Pseudo Ops
4422 `.version "STRING"'
4423 ===================
4425    This directive creates a `.note' section and places into it an ELF
4426 formatted note of type NT_VERSION.  The note's name is set to `string'.
4428 \x1f
4429 File: as.info,  Node: VTableEntry,  Next: VTableInherit,  Prev: Version,  Up: Pseudo Ops
4431 `.vtable_entry TABLE, OFFSET'
4432 =============================
4434    This directive finds or creates a symbol `table' and creates a
4435 `VTABLE_ENTRY' relocation for it with an addend of `offset'.
4437 \x1f
4438 File: as.info,  Node: VTableInherit,  Next: Weak,  Prev: VTableEntry,  Up: Pseudo Ops
4440 `.vtable_inherit CHILD, PARENT'
4441 ===============================
4443    This directive finds the symbol `child' and finds or creates the
4444 symbol `parent' and then creates a `VTABLE_INHERIT' relocation for the
4445 parent whose addend is the value of the child symbol.  As a special
4446 case the parent name of `0' is treated as refering the `*ABS*' section.
4448 \x1f
4449 File: as.info,  Node: Weak,  Next: Word,  Prev: VTableInherit,  Up: Pseudo Ops
4451 `.weak NAMES'
4452 =============
4454    This directive sets the weak attribute on the comma separated list
4455 of symbol `names'.  If the symbols do not already exist, they will be
4456 created.
4458 \x1f
4459 File: as.info,  Node: Word,  Next: Deprecated,  Prev: Weak,  Up: Pseudo Ops
4461 `.word EXPRESSIONS'
4462 ===================
4464    This directive expects zero or more EXPRESSIONS, of any section,
4465 separated by commas.
4467    The size of the number emitted, and its byte order, depend on what
4468 target computer the assembly is for.
4470      _Warning: Special Treatment to support Compilers_
4472    Machines with a 32-bit address space, but that do less than 32-bit
4473 addressing, require the following special treatment.  If the machine of
4474 interest to you does 32-bit addressing (or doesn't require it; *note
4475 Machine Dependencies::), you can ignore this issue.
4477    In order to assemble compiler output into something that works, `as'
4478 occasionally does strange things to `.word' directives.  Directives of
4479 the form `.word sym1-sym2' are often emitted by compilers as part of
4480 jump tables.  Therefore, when `as' assembles a directive of the form
4481 `.word sym1-sym2', and the difference between `sym1' and `sym2' does
4482 not fit in 16 bits, `as' creates a "secondary jump table", immediately
4483 before the next label.  This secondary jump table is preceded by a
4484 short-jump to the first byte after the secondary table.  This
4485 short-jump prevents the flow of control from accidentally falling into
4486 the new table.  Inside the table is a long-jump to `sym2'.  The
4487 original `.word' contains `sym1' minus the address of the long-jump to
4488 `sym2'.
4490    If there were several occurrences of `.word sym1-sym2' before the
4491 secondary jump table, all of them are adjusted.  If there was a `.word
4492 sym3-sym4', that also did not fit in sixteen bits, a long-jump to
4493 `sym4' is included in the secondary jump table, and the `.word'
4494 directives are adjusted to contain `sym3' minus the address of the
4495 long-jump to `sym4'; and so on, for as many entries in the original
4496 jump table as necessary.
4498 \x1f
4499 File: as.info,  Node: Deprecated,  Prev: Word,  Up: Pseudo Ops
4501 Deprecated Directives
4502 =====================
4504    One day these directives won't work.  They are included for
4505 compatibility with older assemblers.
4506 .abort
4508 .line
4509 \x1f
4510 File: as.info,  Node: Machine Dependencies,  Next: Reporting Bugs,  Prev: Pseudo Ops,  Up: Top
4512 Machine Dependent Features
4513 **************************
4515    The machine instruction sets are (almost by definition) different on
4516 each machine where `as' runs.  Floating point representations vary as
4517 well, and `as' often supports a few additional directives or
4518 command-line options for compatibility with other assemblers on a
4519 particular platform.  Finally, some versions of `as' support special
4520 pseudo-instructions for branch optimization.
4522    This chapter discusses most of these differences, though it does not
4523 include details on any machine's instruction set.  For details on that
4524 subject, see the hardware manufacturer's manual.
4526 * Menu:
4529 * AMD29K-Dependent::            AMD 29K Dependent Features
4531 * Alpha-Dependent::             Alpha Dependent Features
4533 * ARC-Dependent::               ARC Dependent Features
4535 * ARM-Dependent::               ARM Dependent Features
4537 * CRIS-Dependent::              CRIS Dependent Features
4539 * D10V-Dependent::              D10V Dependent Features
4541 * D30V-Dependent::              D30V Dependent Features
4543 * H8/300-Dependent::            Renesas H8/300 Dependent Features
4545 * H8/500-Dependent::            Renesas H8/500 Dependent Features
4547 * HPPA-Dependent::              HPPA Dependent Features
4549 * ESA/390-Dependent::           IBM ESA/390 Dependent Features
4551 * i386-Dependent::              Intel 80386 and AMD x86-64 Dependent Features
4553 * i860-Dependent::              Intel 80860 Dependent Features
4555 * i960-Dependent::              Intel 80960 Dependent Features
4557 * IP2K-Dependent::              IP2K Dependent Features
4559 * M32R-Dependent::              M32R Dependent Features
4561 * M68K-Dependent::              M680x0 Dependent Features
4563 * M68HC11-Dependent::           M68HC11 and 68HC12 Dependent Features
4565 * M88K-Dependent::              M880x0 Dependent Features
4567 * MIPS-Dependent::              MIPS Dependent Features
4569 * MMIX-Dependent::              MMIX Dependent Features
4571 * MSP430-Dependent::            MSP430 Dependent Features
4573 * SH-Dependent::                Renesas / SuperH SH Dependent Features
4574 * SH64-Dependent::              SuperH SH64 Dependent Features
4576 * PDP-11-Dependent::            PDP-11 Dependent Features
4578 * PJ-Dependent::                picoJava Dependent Features
4580 * PPC-Dependent::               PowerPC Dependent Features
4582 * Sparc-Dependent::             SPARC Dependent Features
4584 * TIC54X-Dependent::            TI TMS320C54x Dependent Features
4586 * V850-Dependent::              V850 Dependent Features
4588 * Xtensa-Dependent::            Xtensa Dependent Features
4590 * Z8000-Dependent::             Z8000 Dependent Features
4592 * Vax-Dependent::               VAX Dependent Features
4594 \x1f
4595 File: as.info,  Node: AMD29K-Dependent,  Next: Alpha-Dependent,  Up: Machine Dependencies
4597 AMD 29K Dependent Features
4598 ==========================
4600 * Menu:
4602 * AMD29K Options::              Options
4603 * AMD29K Syntax::               Syntax
4604 * AMD29K Floating Point::       Floating Point
4605 * AMD29K Directives::           AMD 29K Machine Directives
4606 * AMD29K Opcodes::              Opcodes
4608 \x1f
4609 File: as.info,  Node: AMD29K Options,  Next: AMD29K Syntax,  Up: AMD29K-Dependent
4611 Options
4612 -------
4614    `as' has no additional command-line options for the AMD 29K family.
4616 \x1f
4617 File: as.info,  Node: AMD29K Syntax,  Next: AMD29K Floating Point,  Prev: AMD29K Options,  Up: AMD29K-Dependent
4619 Syntax
4620 ------
4622 * Menu:
4624 * AMD29K-Macros::               Macros
4625 * AMD29K-Chars::                Special Characters
4626 * AMD29K-Regs::                 Register Names
4628 \x1f
4629 File: as.info,  Node: AMD29K-Macros,  Next: AMD29K-Chars,  Up: AMD29K Syntax
4631 Macros
4632 ......
4634    The macro syntax used on the AMD 29K is like that described in the
4635 AMD 29K Family Macro Assembler Specification.  Normal `as' macros
4636 should still work.
4638 \x1f
4639 File: as.info,  Node: AMD29K-Chars,  Next: AMD29K-Regs,  Prev: AMD29K-Macros,  Up: AMD29K Syntax
4641 Special Characters
4642 ..................
4644    `;' is the line comment character.
4646    The character `?' is permitted in identifiers (but may not begin an
4647 identifier).
4649 \x1f
4650 File: as.info,  Node: AMD29K-Regs,  Prev: AMD29K-Chars,  Up: AMD29K Syntax
4652 Register Names
4653 ..............
4655    General-purpose registers are represented by predefined symbols of
4656 the form `GRNNN' (for global registers) or `LRNNN' (for local
4657 registers), where NNN represents a number between `0' and `127',
4658 written with no leading zeros.  The leading letters may be in either
4659 upper or lower case; for example, `gr13' and `LR7' are both valid
4660 register names.
4662    You may also refer to general-purpose registers by specifying the
4663 register number as the result of an expression (prefixed with `%%' to
4664 flag the expression as a register number):
4665      %%EXPRESSION
4667 --where EXPRESSION must be an absolute expression evaluating to a
4668 number between `0' and `255'.  The range [0, 127] refers to global
4669 registers, and the range [128, 255] to local registers.
4671    In addition, `as' understands the following protected
4672 special-purpose register names for the AMD 29K family:
4674        vab    chd    pc0
4675        ops    chc    pc1
4676        cps    rbp    pc2
4677        cfg    tmc    mmu
4678        cha    tmr    lru
4680    These unprotected special-purpose register names are also recognized:
4681        ipc    alu    fpe
4682        ipa    bp     inte
4683        ipb    fc     fps
4684        q      cr     exop
4686 \x1f
4687 File: as.info,  Node: AMD29K Floating Point,  Next: AMD29K Directives,  Prev: AMD29K Syntax,  Up: AMD29K-Dependent
4689 Floating Point
4690 --------------
4692    The AMD 29K family uses IEEE floating-point numbers.
4694 \x1f
4695 File: as.info,  Node: AMD29K Directives,  Next: AMD29K Opcodes,  Prev: AMD29K Floating Point,  Up: AMD29K-Dependent
4697 AMD 29K Machine Directives
4698 --------------------------
4700 `.block SIZE , FILL'
4701      This directive emits SIZE bytes, each of value FILL.  Both SIZE
4702      and FILL are absolute expressions.  If the comma and FILL are
4703      omitted, FILL is assumed to be zero.
4705      In other versions of the GNU assembler, this directive is called
4706      `.space'.
4708 `.cputype'
4709      This directive is ignored; it is accepted for compatibility with
4710      other AMD 29K assemblers.
4712 `.file'
4713      This directive is ignored; it is accepted for compatibility with
4714      other AMD 29K assemblers.
4716           _Warning:_ in other versions of the GNU assembler, `.file' is
4717           used for the directive called `.app-file' in the AMD 29K
4718           support.
4720 `.line'
4721      This directive is ignored; it is accepted for compatibility with
4722      other AMD 29K assemblers.
4724 `.sect'
4725      This directive is ignored; it is accepted for compatibility with
4726      other AMD 29K assemblers.
4728 `.use SECTION NAME'
4729      Establishes the section and subsection for the following code;
4730      SECTION NAME may be one of `.text', `.data', `.data1', or `.lit'.
4731      With one of the first three SECTION NAME options, `.use' is
4732      equivalent to the machine directive SECTION NAME; the remaining
4733      case, `.use .lit', is the same as `.data 200'.
4735 \x1f
4736 File: as.info,  Node: AMD29K Opcodes,  Prev: AMD29K Directives,  Up: AMD29K-Dependent
4738 Opcodes
4739 -------
4741    `as' implements all the standard AMD 29K opcodes.  No additional
4742 pseudo-instructions are needed on this family.
4744    For information on the 29K machine instruction set, see `Am29000
4745 User's Manual', Advanced Micro Devices, Inc.
4747 \x1f
4748 File: as.info,  Node: Alpha-Dependent,  Next: ARC-Dependent,  Prev: AMD29K-Dependent,  Up: Machine Dependencies
4750 Alpha Dependent Features
4751 ========================
4753 * Menu:
4755 * Alpha Notes::                Notes
4756 * Alpha Options::              Options
4757 * Alpha Syntax::               Syntax
4758 * Alpha Floating Point::       Floating Point
4759 * Alpha Directives::           Alpha Machine Directives
4760 * Alpha Opcodes::              Opcodes
4762 \x1f
4763 File: as.info,  Node: Alpha Notes,  Next: Alpha Options,  Up: Alpha-Dependent
4765 Notes
4766 -----
4768    The documentation here is primarily for the ELF object format.  `as'
4769 also supports the ECOFF and EVAX formats, but features specific to
4770 these formats are not yet documented.
4772 \x1f
4773 File: as.info,  Node: Alpha Options,  Next: Alpha Syntax,  Prev: Alpha Notes,  Up: Alpha-Dependent
4775 Options
4776 -------
4778 `-mCPU'
4779      This option specifies the target processor.  If an attempt is made
4780      to assemble an instruction which will not execute on the target
4781      processor, the assembler may either expand the instruction as a
4782      macro or issue an error message.  This option is equivalent to the
4783      `.arch' directive.
4785      The following processor names are recognized: `21064', `21064a',
4786      `21066', `21068', `21164', `21164a', `21164pc', `21264', `21264a',
4787      `21264b', `ev4', `ev5', `lca45', `ev5', `ev56', `pca56', `ev6',
4788      `ev67', `ev68'.  The special name `all' may be used to allow the
4789      assembler to accept instructions valid for any Alpha processor.
4791      In order to support existing practice in OSF/1 with respect to
4792      `.arch', and existing practice within `MILO' (the Linux ARC
4793      bootloader), the numbered processor names (e.g. 21064) enable the
4794      processor-specific PALcode instructions, while the
4795      "electro-vlasic" names (e.g. `ev4') do not.
4797 `-mdebug'
4798 `-no-mdebug'
4799      Enables or disables the generation of `.mdebug' encapsulation for
4800      stabs directives and procedure descriptors.  The default is to
4801      automatically enable `.mdebug' when the first stabs directive is
4802      seen.
4804 `-relax'
4805      This option forces all relocations to be put into the object file,
4806      instead of saving space and resolving some relocations at assembly
4807      time.  Note that this option does not propagate all symbol
4808      arithmetic into the object file, because not all symbol arithmetic
4809      can be represented.  However, the option can still be useful in
4810      specific applications.
4812 `-g'
4813      This option is used when the compiler generates debug information.
4814      When `gcc' is using `mips-tfile' to generate debug information
4815      for ECOFF, local labels must be passed through to the object file.
4816      Otherwise this option has no effect.
4818 `-GSIZE'
4819      A local common symbol larger than SIZE is placed in `.bss', while
4820      smaller symbols are placed in `.sbss'.
4822 `-F'
4823 `-32addr'
4824      These options are ignored for backward compatibility.
4826 \x1f
4827 File: as.info,  Node: Alpha Syntax,  Next: Alpha Floating Point,  Prev: Alpha Options,  Up: Alpha-Dependent
4829 Syntax
4830 ------
4832    The assembler syntax closely follow the Alpha Reference Manual;
4833 assembler directives and general syntax closely follow the OSF/1 and
4834 OpenVMS syntax, with a few differences for ELF.
4836 * Menu:
4838 * Alpha-Chars::                Special Characters
4839 * Alpha-Regs::                 Register Names
4840 * Alpha-Relocs::               Relocations
4842 \x1f
4843 File: as.info,  Node: Alpha-Chars,  Next: Alpha-Regs,  Up: Alpha Syntax
4845 Special Characters
4846 ..................
4848    `#' is the line comment character.
4850    `;' can be used instead of a newline to separate statements.
4852 \x1f
4853 File: as.info,  Node: Alpha-Regs,  Next: Alpha-Relocs,  Prev: Alpha-Chars,  Up: Alpha Syntax
4855 Register Names
4856 ..............
4858    The 32 integer registers are referred to as `$N' or `$rN'.  In
4859 addition, registers 15, 28, 29, and 30 may be referred to by the
4860 symbols `$fp', `$at', `$gp', and `$sp' respectively.
4862    The 32 floating-point registers are referred to as `$fN'.
4864 \x1f
4865 File: as.info,  Node: Alpha-Relocs,  Prev: Alpha-Regs,  Up: Alpha Syntax
4867 Relocations
4868 ...........
4870    Some of these relocations are available for ECOFF, but mostly only
4871 for ELF.  They are modeled after the relocation format introduced in
4872 Digital Unix 4.0, but there are additions.
4874    The format is `!TAG' or `!TAG!NUMBER' where TAG is the name of the
4875 relocation.  In some cases NUMBER is used to relate specific
4876 instructions.
4878    The relocation is placed at the end of the instruction like so:
4880      ldah  $0,a($29)    !gprelhigh
4881      lda   $0,a($0)     !gprellow
4882      ldq   $1,b($29)    !literal!100
4883      ldl   $2,0($1)     !lituse_base!100
4885 `!literal'
4886 `!literal!N'
4887      Used with an `ldq' instruction to load the address of a symbol
4888      from the GOT.
4890      A sequence number N is optional, and if present is used to pair
4891      `lituse' relocations with this `literal' relocation.  The `lituse'
4892      relocations are used by the linker to optimize the code based on
4893      the final location of the symbol.
4895      Note that these optimizations are dependent on the data flow of the
4896      program.  Therefore, if _any_ `lituse' is paired with a `literal'
4897      relocation, then _all_ uses of the register set by the `literal'
4898      instruction must also be marked with `lituse' relocations.  This
4899      is because the original `literal' instruction may be deleted or
4900      transformed into another instruction.
4902      Also note that there may be a one-to-many relationship between
4903      `literal' and `lituse', but not a many-to-one.  That is, if there
4904      are two code paths that load up the same address and feed the
4905      value to a single use, then the use may not use a `lituse'
4906      relocation.
4908 `!lituse_base!N'
4909      Used with any memory format instruction (e.g. `ldl') to indicate
4910      that the literal is used for an address load.  The offset field of
4911      the instruction must be zero.  During relaxation, the code may be
4912      altered to use a gp-relative load.
4914 `!lituse_jsr!N'
4915      Used with a register branch format instruction (e.g. `jsr') to
4916      indicate that the literal is used for a call.  During relaxation,
4917      the code may be altered to use a direct branch (e.g. `bsr').
4919 `!lituse_bytoff!N'
4920      Used with a byte mask instruction (e.g. `extbl') to indicate that
4921      only the low 3 bits of the address are relevant.  During
4922      relaxation, the code may be altered to use an immediate instead of
4923      a register shift.
4925 `!lituse_addr!N'
4926      Used with any other instruction to indicate that the original
4927      address is in fact used, and the original `ldq' instruction may
4928      not be altered or deleted.  This is useful in conjunction with
4929      `lituse_jsr' to test whether a weak symbol is defined.
4931           ldq  $27,foo($29)   !literal!1
4932           beq  $27,is_undef   !lituse_addr!1
4933           jsr  $26,($27),foo  !lituse_jsr!1
4935 `!lituse_tlsgd!N'
4936      Used with a register branch format instruction to indicate that the
4937      literal is the call to `__tls_get_addr' used to compute the
4938      address of the thread-local storage variable whose descriptor was
4939      loaded with `!tlsgd!N'.
4941 `!lituse_tlsldm!N'
4942      Used with a register branch format instruction to indicate that the
4943      literal is the call to `__tls_get_addr' used to compute the
4944      address of the base of the thread-local storage block for the
4945      current module.  The descriptor for the module must have been
4946      loaded with `!tlsldm!N'.
4948 `!gpdisp!N'
4949      Used with `ldah' and `lda' to load the GP from the current
4950      address, a-la the `ldgp' macro.  The source register for the
4951      `ldah' instruction must contain the address of the `ldah'
4952      instruction.  There must be exactly one `lda' instruction paired
4953      with the `ldah' instruction, though it may appear anywhere in the
4954      instruction stream.  The immediate operands must be zero.
4956           bsr  $26,foo
4957           ldah $29,0($26)     !gpdisp!1
4958           lda  $29,0($29)     !gpdisp!1
4960 `!gprelhigh'
4961      Used with an `ldah' instruction to add the high 16 bits of a
4962      32-bit displacement from the GP.
4964 `!gprellow'
4965      Used with any memory format instruction to add the low 16 bits of a
4966      32-bit displacement from the GP.
4968 `!gprel'
4969      Used with any memory format instruction to add a 16-bit
4970      displacement from the GP.
4972 `!samegp'
4973      Used with any branch format instruction to skip the GP load at the
4974      target address.  The referenced symbol must have the same GP as the
4975      source object file, and it must be declared to either not use `$27'
4976      or perform a standard GP load in the first two instructions via the
4977      `.prologue' directive.
4979 `!tlsgd'
4980 `!tlsgd!N'
4981      Used with an `lda' instruction to load the address of a TLS
4982      descriptor for a symbol in the GOT.
4984      The sequence number N is optional, and if present it used to pair
4985      the descriptor load with both the `literal' loading the address of
4986      the `__tls_get_addr' function and the `lituse_tlsgd' marking the
4987      call to that function.
4989      For proper relaxation, both the `tlsgd', `literal' and `lituse'
4990      relocations must be in the same extended basic block.  That is,
4991      the relocation with the lowest address must be executed first at
4992      runtime.
4994 `!tlsldm'
4995 `!tlsldm!N'
4996      Used with an `lda' instruction to load the address of a TLS
4997      descriptor for the current module in the GOT.
4999      Similar in other respects to `tlsgd'.
5001 `!gotdtprel'
5002      Used with an `ldq' instruction to load the offset of the TLS
5003      symbol within its module's thread-local storage block.  Also known
5004      as the dynamic thread pointer offset or dtp-relative offset.
5006 `!dtprelhi'
5007 `!dtprello'
5008 `!dtprel'
5009      Like `gprel' relocations except they compute dtp-relative offsets.
5011 `!gottprel'
5012      Used with an `ldq' instruction to load the offset of the TLS
5013      symbol from the thread pointer.  Also known as the tp-relative
5014      offset.
5016 `!tprelhi'
5017 `!tprello'
5018 `!tprel'
5019      Like `gprel' relocations except they compute tp-relative offsets.
5021 \x1f
5022 File: as.info,  Node: Alpha Floating Point,  Next: Alpha Directives,  Prev: Alpha Syntax,  Up: Alpha-Dependent
5024 Floating Point
5025 --------------
5027    The Alpha family uses both IEEE and VAX floating-point numbers.
5029 \x1f
5030 File: as.info,  Node: Alpha Directives,  Next: Alpha Opcodes,  Prev: Alpha Floating Point,  Up: Alpha-Dependent
5032 Alpha Assembler Directives
5033 --------------------------
5035    `as' for the Alpha supports many additional directives for
5036 compatibility with the native assembler.  This section describes them
5037 only briefly.
5039    These are the additional directives in `as' for the Alpha:
5041 `.arch CPU'
5042      Specifies the target processor.  This is equivalent to the `-mCPU'
5043      command-line option.  *Note Options: Alpha Options, for a list of
5044      values for CPU.
5046 `.ent FUNCTION[, N]'
5047      Mark the beginning of FUNCTION.  An optional number may follow for
5048      compatibility with the OSF/1 assembler, but is ignored.  When
5049      generating `.mdebug' information, this will create a procedure
5050      descriptor for the function.  In ELF, it will mark the symbol as a
5051      function a-la the generic `.type' directive.
5053 `.end FUNCTION'
5054      Mark the end of FUNCTION.  In ELF, it will set the size of the
5055      symbol a-la the generic `.size' directive.
5057 `.mask MASK, OFFSET'
5058      Indicate which of the integer registers are saved in the current
5059      function's stack frame.  MASK is interpreted a bit mask in which
5060      bit N set indicates that register N is saved.  The registers are
5061      saved in a block located OFFSET bytes from the "canonical frame
5062      address" (CFA) which is the value of the stack pointer on entry to
5063      the function.  The registers are saved sequentially, except that
5064      the return address register (normally `$26') is saved first.
5066      This and the other directives that describe the stack frame are
5067      currently only used when generating `.mdebug' information.  They
5068      may in the future be used to generate DWARF2 `.debug_frame' unwind
5069      information for hand written assembly.
5071 `.fmask MASK, OFFSET'
5072      Indicate which of the floating-point registers are saved in the
5073      current stack frame.  The MASK and OFFSET parameters are
5074      interpreted as with `.mask'.
5076 `.frame FRAMEREG, FRAMEOFFSET, RETREG[, ARGOFFSET]'
5077      Describes the shape of the stack frame.  The frame pointer in use
5078      is FRAMEREG; normally this is either `$fp' or `$sp'.  The frame
5079      pointer is FRAMEOFFSET bytes below the CFA.  The return address is
5080      initially located in RETREG until it is saved as indicated in
5081      `.mask'.  For compatibility with OSF/1 an optional ARGOFFSET
5082      parameter is accepted and ignored.  It is believed to indicate the
5083      offset from the CFA to the saved argument registers.
5085 `.prologue N'
5086      Indicate that the stack frame is set up and all registers have been
5087      spilled.  The argument N indicates whether and how the function
5088      uses the incoming "procedure vector" (the address of the called
5089      function) in `$27'.  0 indicates that `$27' is not used; 1
5090      indicates that the first two instructions of the function use `$27'
5091      to perform a load of the GP register; 2 indicates that `$27' is
5092      used in some non-standard way and so the linker cannot elide the
5093      load of the procedure vector during relaxation.
5095 `.usepv FUNCTION, WHICH'
5096      Used to indicate the use of the `$27' register, similar to
5097      `.prologue', but without the other semantics of needing to be
5098      inside an open `.ent'/`.end' block.
5100      The WHICH argument should be either `no', indicating that `$27' is
5101      not used, or `std', indicating that the first two instructions of
5102      the function perform a GP load.
5104      One might use this directive instead of `.prologue' if you are
5105      also using dwarf2 CFI directives.
5107 `.gprel32 EXPRESSION'
5108      Computes the difference between the address in EXPRESSION and the
5109      GP for the current object file, and stores it in 4 bytes.  In
5110      addition to being smaller than a full 8 byte address, this also
5111      does not require a dynamic relocation when used in a shared
5112      library.
5114 `.t_floating EXPRESSION'
5115      Stores EXPRESSION as an IEEE double precision value.
5117 `.s_floating EXPRESSION'
5118      Stores EXPRESSION as an IEEE single precision value.
5120 `.f_floating EXPRESSION'
5121      Stores EXPRESSION as a VAX F format value.
5123 `.g_floating EXPRESSION'
5124      Stores EXPRESSION as a VAX G format value.
5126 `.d_floating EXPRESSION'
5127      Stores EXPRESSION as a VAX D format value.
5129 `.set FEATURE'
5130      Enables or disables various assembler features.  Using the positive
5131      name of the feature enables while using `noFEATURE' disables.
5133     `at'
5134           Indicates that macro expansions may clobber the "assembler
5135           temporary" (`$at' or `$28') register.  Some macros may not be
5136           expanded without this and will generate an error message if
5137           `noat' is in effect.  When `at' is in effect, a warning will
5138           be generated if `$at' is used by the programmer.
5140     `macro'
5141           Enables the expansion of macro instructions.  Note that
5142           variants of real instructions, such as `br label' vs `br
5143           $31,label' are considered alternate forms and not macros.
5145     `move'
5146     `reorder'
5147     `volatile'
5148           These control whether and how the assembler may re-order
5149           instructions.  Accepted for compatibility with the OSF/1
5150           assembler, but `as' does not do instruction scheduling, so
5151           these features are ignored.
5153    The following directives are recognized for compatibility with the
5154 OSF/1 assembler but are ignored.
5156      .proc           .aproc
5157      .reguse         .livereg
5158      .option         .aent
5159      .ugen           .eflag
5160      .alias          .noalias
5162 \x1f
5163 File: as.info,  Node: Alpha Opcodes,  Prev: Alpha Directives,  Up: Alpha-Dependent
5165 Opcodes
5166 -------
5168    For detailed information on the Alpha machine instruction set, see
5169 the Alpha Architecture Handbook
5170 (ftp://ftp.digital.com/pub/Digital/info/semiconductor/literature/alphaahb.pdf).
5172 \x1f
5173 File: as.info,  Node: ARC-Dependent,  Next: ARM-Dependent,  Prev: Alpha-Dependent,  Up: Machine Dependencies
5175 ARC Dependent Features
5176 ======================
5178 * Menu:
5180 * ARC Options::              Options
5181 * ARC Syntax::               Syntax
5182 * ARC Floating Point::       Floating Point
5183 * ARC Directives::           ARC Machine Directives
5184 * ARC Opcodes::              Opcodes
5186 \x1f
5187 File: as.info,  Node: ARC Options,  Next: ARC Syntax,  Up: ARC-Dependent
5189 Options
5190 -------
5192 `-marc[5|6|7|8]'
5193      This option selects the core processor variant. Using `-marc' is
5194      the same as `-marc6', which is also the default.
5196     `arc5'
5197           Base instruction set.
5199     `arc6'
5200           Jump-and-link (jl) instruction. No requirement of an
5201           instruction between setting flags and conditional jump. For
5202           example:
5204                  mov.f r0,r1
5205                  beq   foo
5207     `arc7'
5208           Break (brk) and sleep (sleep) instructions.
5210     `arc8'
5211           Software interrupt (swi) instruction.
5213      Note: the `.option' directive can to be used to select a core
5214      variant from within assembly code.
5216 `-EB'
5217      This option specifies that the output generated by the assembler
5218      should be marked as being encoded for a big-endian processor.
5220 `-EL'
5221      This option specifies that the output generated by the assembler
5222      should be marked as being encoded for a little-endian processor -
5223      this is the default.
5225 \x1f
5226 File: as.info,  Node: ARC Syntax,  Next: ARC Floating Point,  Prev: ARC Options,  Up: ARC-Dependent
5228 Syntax
5229 ------
5231 * Menu:
5233 * ARC-Chars::                Special Characters
5234 * ARC-Regs::                 Register Names
5236 \x1f
5237 File: as.info,  Node: ARC-Chars,  Next: ARC-Regs,  Up: ARC Syntax
5239 Special Characters
5240 ..................
5242    *TODO*
5244 \x1f
5245 File: as.info,  Node: ARC-Regs,  Prev: ARC-Chars,  Up: ARC Syntax
5247 Register Names
5248 ..............
5250    *TODO*
5252 \x1f
5253 File: as.info,  Node: ARC Floating Point,  Next: ARC Directives,  Prev: ARC Syntax,  Up: ARC-Dependent
5255 Floating Point
5256 --------------
5258    The ARC core does not currently have hardware floating point
5259 support. Software floating point support is provided by `GCC' and uses
5260 IEEE floating-point numbers.
5262 \x1f
5263 File: as.info,  Node: ARC Directives,  Next: ARC Opcodes,  Prev: ARC Floating Point,  Up: ARC-Dependent
5265 ARC Machine Directives
5266 ----------------------
5268    The ARC version of `as' supports the following additional machine
5269 directives:
5271 `.2byte EXPRESSIONS'
5272      *TODO*
5274 `.3byte EXPRESSIONS'
5275      *TODO*
5277 `.4byte EXPRESSIONS'
5278      *TODO*
5280 `.extAuxRegister NAME,ADDRESS,MODE'
5281      *TODO*
5283             .extAuxRegister mulhi,0x12,w
5285 `.extCondCode SUFFIX,VALUE'
5286      *TODO*
5288             .extCondCode is_busy,0x14
5290 `.extCoreRegister NAME,REGNUM,MODE,SHORTCUT'
5291      *TODO*
5293             .extCoreRegister mlo,57,r,can_shortcut
5295 `.extInstruction NAME,OPCODE,SUBOPCODE,SUFFIXCLASS,SYNTAXCLASS'
5296      *TODO*
5298             .extInstruction mul64,0x14,0x0,SUFFIX_COND,SYNTAX_3OP|OP1_MUST_BE_IMM
5300 `.half EXPRESSIONS'
5301      *TODO*
5303 `.long EXPRESSIONS'
5304      *TODO*
5306 `.option ARC|ARC5|ARC6|ARC7|ARC8'
5307      The `.option' directive must be followed by the desired core
5308      version. Again `arc' is an alias for `arc6'.
5310      Note: the `.option' directive overrides the command line option
5311      `-marc'; a warning is emitted when the version is not consistent
5312      between the two - even for the implicit default core version
5313      (arc6).
5315 `.short EXPRESSIONS'
5316      *TODO*
5318 `.word EXPRESSIONS'
5319      *TODO*
5321 \x1f
5322 File: as.info,  Node: ARC Opcodes,  Prev: ARC Directives,  Up: ARC-Dependent
5324 Opcodes
5325 -------
5327    For information on the ARC instruction set, see `ARC Programmers
5328 Reference Manual', ARC Cores Ltd.
5330 \x1f
5331 File: as.info,  Node: ARM-Dependent,  Next: CRIS-Dependent,  Prev: ARC-Dependent,  Up: Machine Dependencies
5333 ARM Dependent Features
5334 ======================
5336 * Menu:
5338 * ARM Options::              Options
5339 * ARM Syntax::               Syntax
5340 * ARM Floating Point::       Floating Point
5341 * ARM Directives::           ARM Machine Directives
5342 * ARM Opcodes::              Opcodes
5343 * ARM Mapping Symbols::      Mapping Symbols
5345 \x1f
5346 File: as.info,  Node: ARM Options,  Next: ARM Syntax,  Up: ARM-Dependent
5348 Options
5349 -------
5351 `-mcpu=PROCESSOR[+EXTENSION...]'
5352      This option specifies the target processor.  The assembler will
5353      issue an error message if an attempt is made to assemble an
5354      instruction which will not execute on the target processor.  The
5355      following processor names are recognized: `arm1', `arm2', `arm250',
5356      `arm3', `arm6', `arm60', `arm600', `arm610', `arm620', `arm7',
5357      `arm7m', `arm7d', `arm7dm', `arm7di', `arm7dmi', `arm70', `arm700',
5358      `arm700i', `arm710', `arm710t', `arm720', `arm720t', `arm740t',
5359      `arm710c', `arm7100', `arm7500', `arm7500fe', `arm7t', `arm7tdmi',
5360      `arm8', `arm810', `strongarm', `strongarm1', `strongarm110',
5361      `strongarm1100', `strongarm1110', `arm9', `arm920', `arm920t',
5362      `arm922t', `arm940t', `arm9tdmi', `arm9e', `arm926e', `arm926ejs',
5363      `arm946e-r0', `arm946e', `arm966e-r0', `arm966e', `arm10t',
5364      `arm10e', `arm1020', `arm1020t', `arm1020e', `arm1026ejs',
5365      `arm1136js', `arm1136jfs', `ep9312' (ARM920 with Cirrus Maverick
5366      coprocessor), `i80200' (Intel XScale processor) `iwmmxt' (Intel(r)
5367      XScale processor with Wireless MMX(tm) technology coprocessor) and
5368      `xscale'.  The special name `all' may be used to allow the
5369      assembler to accept instructions valid for any ARM processor.
5371      In addition to the basic instruction set, the assembler can be
5372      told to accept various extension mnemonics that extend the
5373      processor using the co-processor instruction space.  For example,
5374      `-mcpu=arm920+maverick' is equivalent to specifying
5375      `-mcpu=ep9312'.  The following extensions are currently supported:
5376      `+maverick' `+iwmmxt' and `+xscale'.
5378 `-march=ARCHITECTURE[+EXTENSION...]'
5379      This option specifies the target architecture.  The assembler will
5380      issue an error message if an attempt is made to assemble an
5381      instruction which will not execute on the target architecture.
5382      The following architecture names are recognized: `armv1', `armv2',
5383      `armv2a', `armv2s', `armv3', `armv3m', `armv4', `armv4xm',
5384      `armv4t', `armv4txm', `armv5', `armv5t', `armv5txm', `armv5te',
5385      `armv5texp', `armv6', `armv6j', `iwmmxt' and `xscale'.  If both
5386      `-mcpu' and `-march' are specified, the assembler will use the
5387      setting for `-mcpu'.
5389      The architecture option can be extended with the same instruction
5390      set extension options as the `-mcpu' option.
5392 `-mfpu=FLOATING-POINT-FORMAT'
5393      This option specifies the floating point format to assemble for.
5394      The assembler will issue an error message if an attempt is made to
5395      assemble an instruction which will not execute on the target
5396      floating point unit.  The following format options are recognized:
5397      `softfpa', `fpe', `fpe2', `fpe3', `fpa', `fpa10', `fpa11',
5398      `arm7500fe', `softvfp', `softvfp+vfp', `vfp', `vfp10', `vfp10-r0',
5399      `vfp9', `vfpxd', `arm1020t', `arm1020e', `arm1136jfs' and
5400      `maverick'.
5402      In addition to determining which instructions are assembled, this
5403      option also affects the way in which the `.double' assembler
5404      directive behaves when assembling little-endian code.
5406      The default is dependent on the processor selected.  For
5407      Architecture 5 or later, the default is to assembler for VFP
5408      instructions; for earlier architectures the default is to assemble
5409      for FPA instructions.
5411 `-mthumb'
5412      This option specifies that the assembler should start assembling
5413      Thumb instructions; that is, it should behave as though the file
5414      starts with a `.code 16' directive.
5416 `-mthumb-interwork'
5417      This option specifies that the output generated by the assembler
5418      should be marked as supporting interworking.
5420 `-mapcs `[26|32]''
5421      This option specifies that the output generated by the assembler
5422      should be marked as supporting the indicated version of the Arm
5423      Procedure.  Calling Standard.
5425 `-matpcs'
5426      This option specifies that the output generated by the assembler
5427      should be marked as supporting the Arm/Thumb Procedure Calling
5428      Standard.  If enabled this option will cause the assembler to
5429      create an empty debugging section in the object file called
5430      .arm.atpcs.  Debuggers can use this to determine the ABI being
5431      used by.
5433 `-mapcs-float'
5434      This indicates the floating point variant of the APCS should be
5435      used.  In this variant floating point arguments are passed in FP
5436      registers rather than integer registers.
5438 `-mapcs-reentrant'
5439      This indicates that the reentrant variant of the APCS should be
5440      used.  This variant supports position independent code.
5442 `-mfloat-abi=ABI'
5443      This option specifies that the output generated by the assembler
5444      should be marked as using specified floating point ABI.  The
5445      following values are recognized: `soft', `softfp' and `hard'.
5447 `-EB'
5448      This option specifies that the output generated by the assembler
5449      should be marked as being encoded for a big-endian processor.
5451 `-EL'
5452      This option specifies that the output generated by the assembler
5453      should be marked as being encoded for a little-endian processor.
5455 `-k'
5456      This option specifies that the output of the assembler should be
5457      marked as position-independent code (PIC).
5459 `-moabi'
5460      This indicates that the code should be assembled using the old ARM
5461      ELF conventions, based on a beta release release of the ARM-ELF
5462      specifications, rather than the default conventions which are
5463      based on the final release of the ARM-ELF specifications.
5465 \x1f
5466 File: as.info,  Node: ARM Syntax,  Next: ARM Floating Point,  Prev: ARM Options,  Up: ARM-Dependent
5468 Syntax
5469 ------
5471 * Menu:
5473 * ARM-Chars::                Special Characters
5474 * ARM-Regs::                 Register Names
5476 \x1f
5477 File: as.info,  Node: ARM-Chars,  Next: ARM-Regs,  Up: ARM Syntax
5479 Special Characters
5480 ..................
5482    The presence of a `@' on a line indicates the start of a comment
5483 that extends to the end of the current line.  If a `#' appears as the
5484 first character of a line, the whole line is treated as a comment.
5486    The `;' character can be used instead of a newline to separate
5487 statements.
5489    Either `#' or `$' can be used to indicate immediate operands.
5491    *TODO* Explain about /data modifier on symbols.
5493 \x1f
5494 File: as.info,  Node: ARM-Regs,  Prev: ARM-Chars,  Up: ARM Syntax
5496 Register Names
5497 ..............
5499    *TODO* Explain about ARM register naming, and the predefined names.
5501 \x1f
5502 File: as.info,  Node: ARM Floating Point,  Next: ARM Directives,  Prev: ARM Syntax,  Up: ARM-Dependent
5504 Floating Point
5505 --------------
5507    The ARM family uses IEEE floating-point numbers.
5509 \x1f
5510 File: as.info,  Node: ARM Directives,  Next: ARM Opcodes,  Prev: ARM Floating Point,  Up: ARM-Dependent
5512 ARM Machine Directives
5513 ----------------------
5515 `.align EXPRESSION [, EXPRESSION]'
5516      This is the generic .ALIGN directive.  For the ARM however if the
5517      first argument is zero (ie no alignment is needed) the assembler
5518      will behave as if the argument had been 2 (ie pad to the next four
5519      byte boundary).  This is for compatibility with ARM's own
5520      assembler.
5522 `NAME .req REGISTER NAME'
5523      This creates an alias for REGISTER NAME called NAME.  For example:
5525                   foo .req r0
5527 `.unreq ALIAS-NAME'
5528      This undefines a register alias which was previously defined using
5529      the `req' directive.  For example:
5531                   foo .req r0
5532                   .unreq foo
5534      An error occurs if the name is undefined.  Note - this pseudo op
5535      can be used to delete builtin in register name aliases (eg 'r0').
5536      This should only be done if it is really necessary.
5538 `.code `[16|32]''
5539      This directive selects the instruction set being generated. The
5540      value 16 selects Thumb, with the value 32 selecting ARM.
5542 `.thumb'
5543      This performs the same action as .CODE 16.
5545 `.arm'
5546      This performs the same action as .CODE 32.
5548 `.force_thumb'
5549      This directive forces the selection of Thumb instructions, even if
5550      the target processor does not support those instructions
5552 `.thumb_func'
5553      This directive specifies that the following symbol is the name of a
5554      Thumb encoded function.  This information is necessary in order to
5555      allow the assembler and linker to generate correct code for
5556      interworking between Arm and Thumb instructions and should be used
5557      even if interworking is not going to be performed.  The presence
5558      of this directive also implies `.thumb'
5560 `.thumb_set'
5561      This performs the equivalent of a `.set' directive in that it
5562      creates a symbol which is an alias for another symbol (possibly
5563      not yet defined).  This directive also has the added property in
5564      that it marks the aliased symbol as being a thumb function entry
5565      point, in the same way that the `.thumb_func' directive does.
5567 `.ltorg'
5568      This directive causes the current contents of the literal pool to
5569      be dumped into the current section (which is assumed to be the
5570      .text section) at the current location (aligned to a word
5571      boundary).  `GAS' maintains a separate literal pool for each
5572      section and each sub-section.  The `.ltorg' directive will only
5573      affect the literal pool of the current section and sub-section.
5574      At the end of assembly all remaining, un-empty literal pools will
5575      automatically be dumped.
5577      Note - older versions of `GAS' would dump the current literal pool
5578      any time a section change occurred.  This is no longer done, since
5579      it prevents accurate control of the placement of literal pools.
5581 `.pool'
5582      This is a synonym for .ltorg.
5584 \x1f
5585 File: as.info,  Node: ARM Opcodes,  Next: ARM Mapping Symbols,  Prev: ARM Directives,  Up: ARM-Dependent
5587 Opcodes
5588 -------
5590    `as' implements all the standard ARM opcodes.  It also implements
5591 several pseudo opcodes, including several synthetic load instructions.
5593 `NOP'
5594             nop
5596      This pseudo op will always evaluate to a legal ARM instruction
5597      that does nothing.  Currently it will evaluate to MOV r0, r0.
5599 `LDR'
5600             ldr <register> , = <expression>
5602      If expression evaluates to a numeric constant then a MOV or MVN
5603      instruction will be used in place of the LDR instruction, if the
5604      constant can be generated by either of these instructions.
5605      Otherwise the constant will be placed into the nearest literal
5606      pool (if it not already there) and a PC relative LDR instruction
5607      will be generated.
5609 `ADR'
5610             adr <register> <label>
5612      This instruction will load the address of LABEL into the indicated
5613      register.  The instruction will evaluate to a PC relative ADD or
5614      SUB instruction depending upon where the label is located.  If the
5615      label is out of range, or if it is not defined in the same file
5616      (and section) as the ADR instruction, then an error will be
5617      generated.  This instruction will not make use of the literal pool.
5619 `ADRL'
5620             adrl <register> <label>
5622      This instruction will load the address of LABEL into the indicated
5623      register.  The instruction will evaluate to one or two PC relative
5624      ADD or SUB instructions depending upon where the label is located.
5625      If a second instruction is not needed a NOP instruction will be
5626      generated in its place, so that this instruction is always 8 bytes
5627      long.
5629      If the label is out of range, or if it is not defined in the same
5630      file (and section) as the ADRL instruction, then an error will be
5631      generated.  This instruction will not make use of the literal pool.
5633    For information on the ARM or Thumb instruction sets, see `ARM
5634 Software Development Toolkit Reference Manual', Advanced RISC Machines
5635 Ltd.
5637 \x1f
5638 File: as.info,  Node: ARM Mapping Symbols,  Prev: ARM Opcodes,  Up: ARM-Dependent
5640 Mapping Symbols
5641 ---------------
5643    The ARM ELF specification requires that special symbols be inserted
5644 into object files to mark certain features:
5646 `$a'
5647      At the start of a region of code containing ARM instructions.
5649 `$t'
5650      At the start of a region of code containing THUMB instructions.
5652 `$d'
5653      At the start of a region of data.
5655    The assembler will automatically insert these symbols for you - there
5656 is no need to code them yourself.  Support for tagging symbols ($b, $f,
5657 $p and $m) which is also mentioned in the current ARM ELF specification
5658 is not implemented.  This is because they have been dropped from the
5659 new EABI and so tools cannot rely upon their presence.
5661 \x1f
5662 File: as.info,  Node: CRIS-Dependent,  Next: D10V-Dependent,  Prev: ARM-Dependent,  Up: Machine Dependencies
5664 CRIS Dependent Features
5665 =======================
5667 * Menu:
5669 * CRIS-Opts::              Command-line Options
5670 * CRIS-Expand::            Instruction expansion
5671 * CRIS-Syntax::            Syntax
5673 \x1f
5674 File: as.info,  Node: CRIS-Opts,  Next: CRIS-Expand,  Up: CRIS-Dependent
5676 Command-line Options
5677 --------------------
5679    The CRIS version of `as' has these machine-dependent command-line
5680 options.
5682    The format of the generated object files can be either ELF or a.out,
5683 specified by the command-line options `--emulation=crisaout' and
5684 `--emulation=criself'.  The default is ELF (criself), unless `as' has
5685 been configured specifically for a.out by using the configuration name
5686 `cris-axis-aout'.
5688    There are two different link-incompatible ELF object file variants
5689 for CRIS, for use in environments where symbols are expected to be
5690 prefixed by a leading `_' character and for environments without such a
5691 symbol prefix.  The variant used for GNU/Linux port has no symbol
5692 prefix.  Which variant to produce is specified by either of the options
5693 `--underscore' and `--no-underscore'.  The default is `--underscore'.
5694 Since symbols in CRIS a.out objects are expected to have a `_' prefix,
5695 specifying `--no-underscore' when generating a.out objects is an error.
5696 Besides the object format difference, the effect of this option is to
5697 parse register names differently (*note crisnous::).  The
5698 `--no-underscore' option makes a `$' register prefix mandatory.
5700    The option `--pic' must be passed to `as' in order to recognize the
5701 symbol syntax used for ELF (SVR4 PIC) position-independent-code (*note
5702 crispic::).  This will also affect expansion of instructions.  The
5703 expansion with `--pic' will use PC-relative rather than (slightly
5704 faster) absolute addresses in those expansions.
5706    When `-N' is specified, `as' will emit a warning when a 16-bit
5707 branch instruction is expanded into a 32-bit multiple-instruction
5708 construct (*note CRIS-Expand::).
5710    Some versions of the CRIS v10, for example in the Etrax 100 LX,
5711 contain a bug that causes destabilizing memory accesses when a multiply
5712 instruction is executed with certain values in the first operand just
5713 before a cache-miss.  When the `--mul-bug-abort' command line option is
5714 active (the default value), `as' will refuse to assemble a file
5715 containing a multiply instruction at a dangerous offset, one that could
5716 be the last on a cache-line, or is in a section with insufficient
5717 alignment.  This placement checking does not catch any case where the
5718 multiply instruction is dangerously placed because it is located in a
5719 delay-slot.  The `--mul-bug-abort' command line option turns off the
5720 checking.
5722 \x1f
5723 File: as.info,  Node: CRIS-Expand,  Next: CRIS-Syntax,  Prev: CRIS-Opts,  Up: CRIS-Dependent
5725 Instruction expansion
5726 ---------------------
5728    `as' will silently choose an instruction that fits the operand size
5729 for `[register+constant]' operands.  For example, the offset `127' in
5730 `move.d [r3+127],r4' fits in an instruction using a signed-byte offset.
5731 Similarly, `move.d [r2+32767],r1' will generate an instruction using a
5732 16-bit offset.  For symbolic expressions and constants that do not fit
5733 in 16 bits including the sign bit, a 32-bit offset is generated.
5735    For branches, `as' will expand from a 16-bit branch instruction into
5736 a sequence of instructions that can reach a full 32-bit address.  Since
5737 this does not correspond to a single instruction, such expansions can
5738 optionally be warned about.  *Note CRIS-Opts::.
5740 \x1f
5741 File: as.info,  Node: CRIS-Syntax,  Prev: CRIS-Expand,  Up: CRIS-Dependent
5743 Syntax
5744 ------
5746    There are different aspects of the CRIS assembly syntax.
5748 * Menu:
5750 * CRIS-Chars::                  Special Characters
5751 * CRIS-Pic::                    Position-Independent Code Symbols
5752 * CRIS-Regs::                   Register Names
5753 * CRIS-Pseudos::                Assembler Directives
5755 \x1f
5756 File: as.info,  Node: CRIS-Chars,  Next: CRIS-Pic,  Up: CRIS-Syntax
5758 Special Characters
5759 ..................
5761    The character `#' is a line comment character.  It starts a comment
5762 if and only if it is placed at the beginning of a line.
5764    A `;' character starts a comment anywhere on the line, causing all
5765 characters up to the end of the line to be ignored.
5767    A `@' character is handled as a line separator equivalent to a
5768 logical new-line character (except in a comment), so separate
5769 instructions can be specified on a single line.
5771 \x1f
5772 File: as.info,  Node: CRIS-Pic,  Next: CRIS-Regs,  Prev: CRIS-Chars,  Up: CRIS-Syntax
5774 Symbols in position-independent code
5775 ....................................
5777    When generating position-independent code (SVR4 PIC) for use in
5778 cris-axis-linux-gnu shared libraries, symbol suffixes are used to
5779 specify what kind of run-time symbol lookup will be used, expressed in
5780 the object as different _relocation types_.  Usually, all absolute
5781 symbol values must be located in a table, the _global offset table_,
5782 leaving the code position-independent; independent of values of global
5783 symbols and independent of the address of the code.  The suffix
5784 modifies the value of the symbol, into for example an index into the
5785 global offset table where the real symbol value is entered, or a
5786 PC-relative value, or a value relative to the start of the global
5787 offset table.  All symbol suffixes start with the character `:'
5788 (omitted in the list below).  Every symbol use in code or a read-only
5789 section must therefore have a PIC suffix to enable a useful shared
5790 library to be created.  Usually, these constructs must not be used with
5791 an additive constant offset as is usually allowed, i.e. no 4 as in
5792 `symbol + 4' is allowed.  This restriction is checked at link-time, not
5793 at assembly-time.
5795 `GOT'
5796      Attaching this suffix to a symbol in an instruction causes the
5797      symbol to be entered into the global offset table.  The value is a
5798      32-bit index for that symbol into the global offset table.  The
5799      name of the corresponding relocation is `R_CRIS_32_GOT'.  Example:
5800      `move.d [$r0+extsym:GOT],$r9'
5802 `GOT16'
5803      Same as for `GOT', but the value is a 16-bit index into the global
5804      offset table.  The corresponding relocation is `R_CRIS_16_GOT'.
5805      Example: `move.d [$r0+asymbol:GOT16],$r10'
5807 `PLT'
5808      This suffix is used for function symbols.  It causes a _procedure
5809      linkage table_, an array of code stubs, to be created at the time
5810      the shared object is created or linked against, together with a
5811      global offset table entry.  The value is a pc-relative offset to
5812      the corresponding stub code in the procedure linkage table.  This
5813      arrangement causes the run-time symbol resolver to be called to
5814      look up and set the value of the symbol the first time the
5815      function is called (at latest; depending environment variables).
5816      It is only safe to leave the symbol unresolved this way if all
5817      references are function calls.  The name of the relocation is
5818      `R_CRIS_32_PLT_PCREL'.  Example: `add.d fnname:PLT,$pc'
5820 `PLTG'
5821      Like PLT, but the value is relative to the beginning of the global
5822      offset table.  The relocation is `R_CRIS_32_PLT_GOTREL'.  Example:
5823      `move.d fnname:PLTG,$r3'
5825 `GOTPLT'
5826      Similar to `PLT', but the value of the symbol is a 32-bit index
5827      into the global offset table.  This is somewhat of a mix between
5828      the effect of the `GOT' and the `PLT' suffix; the difference to
5829      `GOT' is that there will be a procedure linkage table entry
5830      created, and that the symbol is assumed to be a function entry and
5831      will be resolved by the run-time resolver as with `PLT'.  The
5832      relocation is `R_CRIS_32_GOTPLT'.  Example: `jsr
5833      [$r0+fnname:GOTPLT]'
5835 `GOTPLT16'
5836      A variant of `GOTPLT' giving a 16-bit value.  Its relocation name
5837      is `R_CRIS_16_GOTPLT'.  Example: `jsr [$r0+fnname:GOTPLT16]'
5839 `GOTOFF'
5840      This suffix must only be attached to a local symbol, but may be
5841      used in an expression adding an offset.  The value is the address
5842      of the symbol relative to the start of the global offset table.
5843      The relocation name is `R_CRIS_32_GOTREL'.  Example: `move.d
5844      [$r0+localsym:GOTOFF],r3'
5846 \x1f
5847 File: as.info,  Node: CRIS-Regs,  Next: CRIS-Pseudos,  Prev: CRIS-Pic,  Up: CRIS-Syntax
5849 Register names
5850 ..............
5852    A `$' character may always prefix a general or special register name
5853 in an instruction operand but is mandatory when the option
5854 `--no-underscore' is specified or when the `.syntax register_prefix'
5855 directive is in effect (*note crisnous::).  Register names are
5856 case-insensitive.
5858 \x1f
5859 File: as.info,  Node: CRIS-Pseudos,  Prev: CRIS-Regs,  Up: CRIS-Syntax
5861 Assembler Directives
5862 ....................
5864    There are a few CRIS-specific pseudo-directives in addition to the
5865 generic ones.  *Note Pseudo Ops::.  Constants emitted by
5866 pseudo-directives are in little-endian order for CRIS.  There is no
5867 support for floating-point-specific directives for CRIS.
5869 `.dword EXPRESSIONS'
5870      The `.dword' directive is a synonym for `.int', expecting zero or
5871      more EXPRESSIONS, separated by commas.  For each expression, a
5872      32-bit little-endian constant is emitted.
5874 `.syntax ARGUMENT'
5875      The `.syntax' directive takes as ARGUMENT one of the following
5876      case-sensitive choices.
5878     `no_register_prefix'
5879           The `.syntax no_register_prefix' directive makes a `$'
5880           character prefix on all registers optional.  It overrides a
5881           previous setting, including the corresponding effect of the
5882           option `--no-underscore'.  If this directive is used when
5883           ordinary symbols do not have a `_' character prefix, care
5884           must be taken to avoid ambiguities whether an operand is a
5885           register or a symbol; using symbols with names the same as
5886           general or special registers then invoke undefined behavior.
5888     `register_prefix'
5889           This directive makes a `$' character prefix on all registers
5890           mandatory.  It overrides a previous setting, including the
5891           corresponding effect of the option `--underscore'.
5893     `leading_underscore'
5894           This is an assertion directive, emitting an error if the
5895           `--no-underscore' option is in effect.
5897     `no_leading_underscore'
5898           This is the opposite of the `.syntax leading_underscore'
5899           directive and emits an error if the option `--underscore' is
5900           in effect.
5902 \x1f
5903 File: as.info,  Node: D10V-Dependent,  Next: D30V-Dependent,  Prev: CRIS-Dependent,  Up: Machine Dependencies
5905 D10V Dependent Features
5906 =======================
5908 * Menu:
5910 * D10V-Opts::                   D10V Options
5911 * D10V-Syntax::                 Syntax
5912 * D10V-Float::                  Floating Point
5913 * D10V-Opcodes::                Opcodes
5915 \x1f
5916 File: as.info,  Node: D10V-Opts,  Next: D10V-Syntax,  Up: D10V-Dependent
5918 D10V Options
5919 ------------
5921    The Mitsubishi D10V version of `as' has a few machine dependent
5922 options.
5924 `-O'
5925      The D10V can often execute two sub-instructions in parallel. When
5926      this option is used, `as' will attempt to optimize its output by
5927      detecting when instructions can be executed in parallel.
5929 `--nowarnswap'
5930      To optimize execution performance, `as' will sometimes swap the
5931      order of instructions. Normally this generates a warning. When
5932      this option is used, no warning will be generated when
5933      instructions are swapped.
5935 `--gstabs-packing'
5937 `--no-gstabs-packing'
5938      `as' packs adjacent short instructions into a single packed
5939      instruction. `--no-gstabs-packing' turns instruction packing off if
5940      `--gstabs' is specified as well; `--gstabs-packing' (the default)
5941      turns instruction packing on even when `--gstabs' is specified.
5943 \x1f
5944 File: as.info,  Node: D10V-Syntax,  Next: D10V-Float,  Prev: D10V-Opts,  Up: D10V-Dependent
5946 Syntax
5947 ------
5949    The D10V syntax is based on the syntax in Mitsubishi's D10V
5950 architecture manual.  The differences are detailed below.
5952 * Menu:
5954 * D10V-Size::                 Size Modifiers
5955 * D10V-Subs::                 Sub-Instructions
5956 * D10V-Chars::                Special Characters
5957 * D10V-Regs::                 Register Names
5958 * D10V-Addressing::           Addressing Modes
5959 * D10V-Word::                 @WORD Modifier
5961 \x1f
5962 File: as.info,  Node: D10V-Size,  Next: D10V-Subs,  Up: D10V-Syntax
5964 Size Modifiers
5965 ..............
5967    The D10V version of `as' uses the instruction names in the D10V
5968 Architecture Manual.  However, the names in the manual are sometimes
5969 ambiguous.  There are instruction names that can assemble to a short or
5970 long form opcode.  How does the assembler pick the correct form?  `as'
5971 will always pick the smallest form if it can.  When dealing with a
5972 symbol that is not defined yet when a line is being assembled, it will
5973 always use the long form.  If you need to force the assembler to use
5974 either the short or long form of the instruction, you can append either
5975 `.s' (short) or `.l' (long) to it.  For example, if you are writing an
5976 assembly program and you want to do a branch to a symbol that is
5977 defined later in your program, you can write `bra.s   foo'.  Objdump
5978 and GDB will always append `.s' or `.l' to instructions which have both
5979 short and long forms.
5981 \x1f
5982 File: as.info,  Node: D10V-Subs,  Next: D10V-Chars,  Prev: D10V-Size,  Up: D10V-Syntax
5984 Sub-Instructions
5985 ................
5987    The D10V assembler takes as input a series of instructions, either
5988 one-per-line, or in the special two-per-line format described in the
5989 next section.  Some of these instructions will be short-form or
5990 sub-instructions.  These sub-instructions can be packed into a single
5991 instruction.  The assembler will do this automatically.  It will also
5992 detect when it should not pack instructions.  For example, when a label
5993 is defined, the next instruction will never be packaged with the
5994 previous one.  Whenever a branch and link instruction is called, it
5995 will not be packaged with the next instruction so the return address
5996 will be valid.  Nops are automatically inserted when necessary.
5998    If you do not want the assembler automatically making these
5999 decisions, you can control the packaging and execution type (parallel
6000 or sequential) with the special execution symbols described in the next
6001 section.
6003 \x1f
6004 File: as.info,  Node: D10V-Chars,  Next: D10V-Regs,  Prev: D10V-Subs,  Up: D10V-Syntax
6006 Special Characters
6007 ..................
6009    `;' and `#' are the line comment characters.  Sub-instructions may
6010 be executed in order, in reverse-order, or in parallel.  Instructions
6011 listed in the standard one-per-line format will be executed
6012 sequentially.  To specify the executing order, use the following
6013 symbols:
6014 `->'
6015      Sequential with instruction on the left first.
6017 `<-'
6018      Sequential with instruction on the right first.
6020 `||'
6021      Parallel The D10V syntax allows either one instruction per line,
6022 one instruction per line with the execution symbol, or two instructions
6023 per line.  For example
6024 `abs       a1      ->      abs     r0'
6025      Execute these sequentially.  The instruction on the right is in
6026      the right container and is executed second.
6028 `abs       r0      <-      abs     a1'
6029      Execute these reverse-sequentially.  The instruction on the right
6030      is in the right container, and is executed first.
6032 `ld2w    r2,@r8+         ||      mac     a0,r0,r7'
6033      Execute these in parallel.
6035 `ld2w    r2,@r8+         ||'
6036 `mac     a0,r0,r7'
6037      Two-line format. Execute these in parallel.
6039 `ld2w    r2,@r8+'
6040 `mac     a0,r0,r7'
6041      Two-line format. Execute these sequentially.  Assembler will put
6042      them in the proper containers.
6044 `ld2w    r2,@r8+         ->'
6045 `mac     a0,r0,r7'
6046      Two-line format. Execute these sequentially.  Same as above but
6047      second instruction will always go into right container.  Since `$'
6048 has no special meaning, you may use it in symbol names.
6050 \x1f
6051 File: as.info,  Node: D10V-Regs,  Next: D10V-Addressing,  Prev: D10V-Chars,  Up: D10V-Syntax
6053 Register Names
6054 ..............
6056    You can use the predefined symbols `r0' through `r15' to refer to
6057 the D10V registers.  You can also use `sp' as an alias for `r15'.  The
6058 accumulators are `a0' and `a1'.  There are special register-pair names
6059 that may optionally be used in opcodes that require even-numbered
6060 registers. Register names are not case sensitive.
6062    Register Pairs
6063 `r0-r1'
6065 `r2-r3'
6067 `r4-r5'
6069 `r6-r7'
6071 `r8-r9'
6073 `r10-r11'
6075 `r12-r13'
6077 `r14-r15'
6078    The D10V also has predefined symbols for these control registers and
6079 status bits:
6080 `psw'
6081      Processor Status Word
6083 `bpsw'
6084      Backup Processor Status Word
6086 `pc'
6087      Program Counter
6089 `bpc'
6090      Backup Program Counter
6092 `rpt_c'
6093      Repeat Count
6095 `rpt_s'
6096      Repeat Start address
6098 `rpt_e'
6099      Repeat End address
6101 `mod_s'
6102      Modulo Start address
6104 `mod_e'
6105      Modulo End address
6107 `iba'
6108      Instruction Break Address
6110 `f0'
6111      Flag 0
6113 `f1'
6114      Flag 1
6117      Carry flag
6119 \x1f
6120 File: as.info,  Node: D10V-Addressing,  Next: D10V-Word,  Prev: D10V-Regs,  Up: D10V-Syntax
6122 Addressing Modes
6123 ................
6125    `as' understands the following addressing modes for the D10V.  `RN'
6126 in the following refers to any of the numbered registers, but _not_ the
6127 control registers.
6128 `RN'
6129      Register direct
6131 `@RN'
6132      Register indirect
6134 `@RN+'
6135      Register indirect with post-increment
6137 `@RN-'
6138      Register indirect with post-decrement
6140 `@-SP'
6141      Register indirect with pre-decrement
6143 `@(DISP, RN)'
6144      Register indirect with displacement
6146 `ADDR'
6147      PC relative address (for branch or rep).
6149 `#IMM'
6150      Immediate data (the `#' is optional and ignored)
6152 \x1f
6153 File: as.info,  Node: D10V-Word,  Prev: D10V-Addressing,  Up: D10V-Syntax
6155 @WORD Modifier
6156 ..............
6158    Any symbol followed by `@word' will be replaced by the symbol's value
6159 shifted right by 2.  This is used in situations such as loading a
6160 register with the address of a function (or any other code fragment).
6161 For example, if you want to load a register with the location of the
6162 function `main' then jump to that function, you could do it as follows:
6163      ldi     r2, main@word
6164      jmp     r2
6166 \x1f
6167 File: as.info,  Node: D10V-Float,  Next: D10V-Opcodes,  Prev: D10V-Syntax,  Up: D10V-Dependent
6169 Floating Point
6170 --------------
6172    The D10V has no hardware floating point, but the `.float' and
6173 `.double' directives generates IEEE floating-point numbers for
6174 compatibility with other development tools.
6176 \x1f
6177 File: as.info,  Node: D10V-Opcodes,  Prev: D10V-Float,  Up: D10V-Dependent
6179 Opcodes
6180 -------
6182    For detailed information on the D10V machine instruction set, see
6183 `D10V Architecture: A VLIW Microprocessor for Multimedia Applications'
6184 (Mitsubishi Electric Corp.).  `as' implements all the standard D10V
6185 opcodes.  The only changes are those described in the section on size
6186 modifiers
6188 \x1f
6189 File: as.info,  Node: D30V-Dependent,  Next: H8/300-Dependent,  Prev: D10V-Dependent,  Up: Machine Dependencies
6191 D30V Dependent Features
6192 =======================
6194 * Menu:
6196 * D30V-Opts::                   D30V Options
6197 * D30V-Syntax::                 Syntax
6198 * D30V-Float::                  Floating Point
6199 * D30V-Opcodes::                Opcodes
6201 \x1f
6202 File: as.info,  Node: D30V-Opts,  Next: D30V-Syntax,  Up: D30V-Dependent
6204 D30V Options
6205 ------------
6207    The Mitsubishi D30V version of `as' has a few machine dependent
6208 options.
6210 `-O'
6211      The D30V can often execute two sub-instructions in parallel. When
6212      this option is used, `as' will attempt to optimize its output by
6213      detecting when instructions can be executed in parallel.
6215 `-n'
6216      When this option is used, `as' will issue a warning every time it
6217      adds a nop instruction.
6219 `-N'
6220      When this option is used, `as' will issue a warning if it needs to
6221      insert a nop after a 32-bit multiply before a load or 16-bit
6222      multiply instruction.
6224 \x1f
6225 File: as.info,  Node: D30V-Syntax,  Next: D30V-Float,  Prev: D30V-Opts,  Up: D30V-Dependent
6227 Syntax
6228 ------
6230    The D30V syntax is based on the syntax in Mitsubishi's D30V
6231 architecture manual.  The differences are detailed below.
6233 * Menu:
6235 * D30V-Size::                 Size Modifiers
6236 * D30V-Subs::                 Sub-Instructions
6237 * D30V-Chars::                Special Characters
6238 * D30V-Guarded::              Guarded Execution
6239 * D30V-Regs::                 Register Names
6240 * D30V-Addressing::           Addressing Modes
6242 \x1f
6243 File: as.info,  Node: D30V-Size,  Next: D30V-Subs,  Up: D30V-Syntax
6245 Size Modifiers
6246 ..............
6248    The D30V version of `as' uses the instruction names in the D30V
6249 Architecture Manual.  However, the names in the manual are sometimes
6250 ambiguous.  There are instruction names that can assemble to a short or
6251 long form opcode.  How does the assembler pick the correct form?  `as'
6252 will always pick the smallest form if it can.  When dealing with a
6253 symbol that is not defined yet when a line is being assembled, it will
6254 always use the long form.  If you need to force the assembler to use
6255 either the short or long form of the instruction, you can append either
6256 `.s' (short) or `.l' (long) to it.  For example, if you are writing an
6257 assembly program and you want to do a branch to a symbol that is
6258 defined later in your program, you can write `bra.s foo'.  Objdump and
6259 GDB will always append `.s' or `.l' to instructions which have both
6260 short and long forms.
6262 \x1f
6263 File: as.info,  Node: D30V-Subs,  Next: D30V-Chars,  Prev: D30V-Size,  Up: D30V-Syntax
6265 Sub-Instructions
6266 ................
6268    The D30V assembler takes as input a series of instructions, either
6269 one-per-line, or in the special two-per-line format described in the
6270 next section.  Some of these instructions will be short-form or
6271 sub-instructions.  These sub-instructions can be packed into a single
6272 instruction.  The assembler will do this automatically.  It will also
6273 detect when it should not pack instructions.  For example, when a label
6274 is defined, the next instruction will never be packaged with the
6275 previous one.  Whenever a branch and link instruction is called, it
6276 will not be packaged with the next instruction so the return address
6277 will be valid.  Nops are automatically inserted when necessary.
6279    If you do not want the assembler automatically making these
6280 decisions, you can control the packaging and execution type (parallel
6281 or sequential) with the special execution symbols described in the next
6282 section.
6284 \x1f
6285 File: as.info,  Node: D30V-Chars,  Next: D30V-Guarded,  Prev: D30V-Subs,  Up: D30V-Syntax
6287 Special Characters
6288 ..................
6290    `;' and `#' are the line comment characters.  Sub-instructions may
6291 be executed in order, in reverse-order, or in parallel.  Instructions
6292 listed in the standard one-per-line format will be executed
6293 sequentially unless you use the `-O' option.
6295    To specify the executing order, use the following symbols:
6296 `->'
6297      Sequential with instruction on the left first.
6299 `<-'
6300      Sequential with instruction on the right first.
6302 `||'
6303      Parallel
6305    The D30V syntax allows either one instruction per line, one
6306 instruction per line with the execution symbol, or two instructions per
6307 line.  For example
6308 `abs r2,r3 -> abs r4,r5'
6309      Execute these sequentially.  The instruction on the right is in
6310      the right container and is executed second.
6312 `abs r2,r3 <- abs r4,r5'
6313      Execute these reverse-sequentially.  The instruction on the right
6314      is in the right container, and is executed first.
6316 `abs r2,r3 || abs r4,r5'
6317      Execute these in parallel.
6319 `ldw r2,@(r3,r4) ||'
6320 `mulx r6,r8,r9'
6321      Two-line format. Execute these in parallel.
6323 `mulx a0,r8,r9'
6324 `stw r2,@(r3,r4)'
6325      Two-line format. Execute these sequentially unless `-O' option is
6326      used.  If the `-O' option is used, the assembler will determine if
6327      the instructions could be done in parallel (the above two
6328      instructions can be done in parallel), and if so, emit them as
6329      parallel instructions.  The assembler will put them in the proper
6330      containers.  In the above example, the assembler will put the
6331      `stw' instruction in left container and the `mulx' instruction in
6332      the right container.
6334 `stw r2,@(r3,r4) ->'
6335 `mulx a0,r8,r9'
6336      Two-line format.  Execute the `stw' instruction followed by the
6337      `mulx' instruction sequentially.  The first instruction goes in the
6338      left container and the second instruction goes into right
6339      container.  The assembler will give an error if the machine
6340      ordering constraints are violated.
6342 `stw r2,@(r3,r4) <-'
6343 `mulx a0,r8,r9'
6344      Same as previous example, except that the `mulx' instruction is
6345      executed before the `stw' instruction.
6347    Since `$' has no special meaning, you may use it in symbol names.
6349 \x1f
6350 File: as.info,  Node: D30V-Guarded,  Next: D30V-Regs,  Prev: D30V-Chars,  Up: D30V-Syntax
6352 Guarded Execution
6353 .................
6355    `as' supports the full range of guarded execution directives for
6356 each instruction.  Just append the directive after the instruction
6357 proper.  The directives are:
6359 `/tx'
6360      Execute the instruction if flag f0 is true.
6362 `/fx'
6363      Execute the instruction if flag f0 is false.
6365 `/xt'
6366      Execute the instruction if flag f1 is true.
6368 `/xf'
6369      Execute the instruction if flag f1 is false.
6371 `/tt'
6372      Execute the instruction if both flags f0 and f1 are true.
6374 `/tf'
6375      Execute the instruction if flag f0 is true and flag f1 is false.
6377 \x1f
6378 File: as.info,  Node: D30V-Regs,  Next: D30V-Addressing,  Prev: D30V-Guarded,  Up: D30V-Syntax
6380 Register Names
6381 ..............
6383    You can use the predefined symbols `r0' through `r63' to refer to
6384 the D30V registers.  You can also use `sp' as an alias for `r63' and
6385 `link' as an alias for `r62'.  The accumulators are `a0' and `a1'.
6387    The D30V also has predefined symbols for these control registers and
6388 status bits:
6389 `psw'
6390      Processor Status Word
6392 `bpsw'
6393      Backup Processor Status Word
6395 `pc'
6396      Program Counter
6398 `bpc'
6399      Backup Program Counter
6401 `rpt_c'
6402      Repeat Count
6404 `rpt_s'
6405      Repeat Start address
6407 `rpt_e'
6408      Repeat End address
6410 `mod_s'
6411      Modulo Start address
6413 `mod_e'
6414      Modulo End address
6416 `iba'
6417      Instruction Break Address
6419 `f0'
6420      Flag 0
6422 `f1'
6423      Flag 1
6425 `f2'
6426      Flag 2
6428 `f3'
6429      Flag 3
6431 `f4'
6432      Flag 4
6434 `f5'
6435      Flag 5
6437 `f6'
6438      Flag 6
6440 `f7'
6441      Flag 7
6444      Same as flag 4 (saturation flag)
6447      Same as flag 5 (overflow flag)
6449 `va'
6450      Same as flag 6 (sticky overflow flag)
6453      Same as flag 7 (carry/borrow flag)
6456      Same as flag 7 (carry/borrow flag)
6458 \x1f
6459 File: as.info,  Node: D30V-Addressing,  Prev: D30V-Regs,  Up: D30V-Syntax
6461 Addressing Modes
6462 ................
6464    `as' understands the following addressing modes for the D30V.  `RN'
6465 in the following refers to any of the numbered registers, but _not_ the
6466 control registers.
6467 `RN'
6468      Register direct
6470 `@RN'
6471      Register indirect
6473 `@RN+'
6474      Register indirect with post-increment
6476 `@RN-'
6477      Register indirect with post-decrement
6479 `@-SP'
6480      Register indirect with pre-decrement
6482 `@(DISP, RN)'
6483      Register indirect with displacement
6485 `ADDR'
6486      PC relative address (for branch or rep).
6488 `#IMM'
6489      Immediate data (the `#' is optional and ignored)
6491 \x1f
6492 File: as.info,  Node: D30V-Float,  Next: D30V-Opcodes,  Prev: D30V-Syntax,  Up: D30V-Dependent
6494 Floating Point
6495 --------------
6497    The D30V has no hardware floating point, but the `.float' and
6498 `.double' directives generates IEEE floating-point numbers for
6499 compatibility with other development tools.
6501 \x1f
6502 File: as.info,  Node: D30V-Opcodes,  Prev: D30V-Float,  Up: D30V-Dependent
6504 Opcodes
6505 -------
6507    For detailed information on the D30V machine instruction set, see
6508 `D30V Architecture: A VLIW Microprocessor for Multimedia Applications'
6509 (Mitsubishi Electric Corp.).  `as' implements all the standard D30V
6510 opcodes.  The only changes are those described in the section on size
6511 modifiers
6513 \x1f
6514 File: as.info,  Node: H8/300-Dependent,  Next: H8/500-Dependent,  Prev: D30V-Dependent,  Up: Machine Dependencies
6516 H8/300 Dependent Features
6517 =========================
6519 * Menu:
6521 * H8/300 Options::              Options
6522 * H8/300 Syntax::               Syntax
6523 * H8/300 Floating Point::       Floating Point
6524 * H8/300 Directives::           H8/300 Machine Directives
6525 * H8/300 Opcodes::              Opcodes
6527 \x1f
6528 File: as.info,  Node: H8/300 Options,  Next: H8/300 Syntax,  Up: H8/300-Dependent
6530 Options
6531 -------
6533    `as' has no additional command-line options for the Renesas
6534 (formerly Hitachi) H8/300 family.
6536 \x1f
6537 File: as.info,  Node: H8/300 Syntax,  Next: H8/300 Floating Point,  Prev: H8/300 Options,  Up: H8/300-Dependent
6539 Syntax
6540 ------
6542 * Menu:
6544 * H8/300-Chars::                Special Characters
6545 * H8/300-Regs::                 Register Names
6546 * H8/300-Addressing::           Addressing Modes
6548 \x1f
6549 File: as.info,  Node: H8/300-Chars,  Next: H8/300-Regs,  Up: H8/300 Syntax
6551 Special Characters
6552 ..................
6554    `;' is the line comment character.
6556    `$' can be used instead of a newline to separate statements.
6557 Therefore _you may not use `$' in symbol names_ on the H8/300.
6559 \x1f
6560 File: as.info,  Node: H8/300-Regs,  Next: H8/300-Addressing,  Prev: H8/300-Chars,  Up: H8/300 Syntax
6562 Register Names
6563 ..............
6565    You can use predefined symbols of the form `rNh' and `rNl' to refer
6566 to the H8/300 registers as sixteen 8-bit general-purpose registers.  N
6567 is a digit from `0' to `7'); for instance, both `r0h' and `r7l' are
6568 valid register names.
6570    You can also use the eight predefined symbols `rN' to refer to the
6571 H8/300 registers as 16-bit registers (you must use this form for
6572 addressing).
6574    On the H8/300H, you can also use the eight predefined symbols `erN'
6575 (`er0' ... `er7') to refer to the 32-bit general purpose registers.
6577    The two control registers are called `pc' (program counter; a 16-bit
6578 register, except on the H8/300H where it is 24 bits) and `ccr'
6579 (condition code register; an 8-bit register).  `r7' is used as the
6580 stack pointer, and can also be called `sp'.
6582 \x1f
6583 File: as.info,  Node: H8/300-Addressing,  Prev: H8/300-Regs,  Up: H8/300 Syntax
6585 Addressing Modes
6586 ................
6588    as understands the following addressing modes for the H8/300:
6589 `rN'
6590      Register direct
6592 `@rN'
6593      Register indirect
6595 `@(D, rN)'
6596 `@(D:16, rN)'
6597 `@(D:24, rN)'
6598      Register indirect: 16-bit or 24-bit displacement D from register
6599      N.  (24-bit displacements are only meaningful on the H8/300H.)
6601 `@rN+'
6602      Register indirect with post-increment
6604 `@-rN'
6605      Register indirect with pre-decrement
6607 ``@'AA'
6608 ``@'AA:8'
6609 ``@'AA:16'
6610 ``@'AA:24'
6611      Absolute address `aa'.  (The address size `:24' only makes sense
6612      on the H8/300H.)
6614 `#XX'
6615 `#XX:8'
6616 `#XX:16'
6617 `#XX:32'
6618      Immediate data XX.  You may specify the `:8', `:16', or `:32' for
6619      clarity, if you wish; but `as' neither requires this nor uses
6620      it--the data size required is taken from context.
6622 ``@'`@'AA'
6623 ``@'`@'AA:8'
6624      Memory indirect.  You may specify the `:8' for clarity, if you
6625      wish; but `as' neither requires this nor uses it.
6627 \x1f
6628 File: as.info,  Node: H8/300 Floating Point,  Next: H8/300 Directives,  Prev: H8/300 Syntax,  Up: H8/300-Dependent
6630 Floating Point
6631 --------------
6633    The H8/300 family has no hardware floating point, but the `.float'
6634 directive generates IEEE floating-point numbers for compatibility with
6635 other development tools.
6637 \x1f
6638 File: as.info,  Node: H8/300 Directives,  Next: H8/300 Opcodes,  Prev: H8/300 Floating Point,  Up: H8/300-Dependent
6640 H8/300 Machine Directives
6641 -------------------------
6643    `as' has the following machine-dependent directives for the H8/300:
6645 `.h8300h'
6646      Recognize and emit additional instructions for the H8/300H
6647      variant, and also make `.int' emit 32-bit numbers rather than the
6648      usual (16-bit) for the H8/300 family.
6650 `.h8300s'
6651      Recognize and emit additional instructions for the H8S variant, and
6652      also make `.int' emit 32-bit numbers rather than the usual (16-bit)
6653      for the H8/300 family.
6655 `.h8300hn'
6656      Recognize and emit additional instructions for the H8/300H variant
6657      in normal mode, and also make `.int' emit 32-bit numbers rather
6658      than the usual (16-bit) for the H8/300 family.
6660 `.h8300sn'
6661      Recognize and emit additional instructions for the H8S variant in
6662      normal mode, and also make `.int' emit 32-bit numbers rather than
6663      the usual (16-bit) for the H8/300 family.
6665    On the H8/300 family (including the H8/300H) `.word' directives
6666 generate 16-bit numbers.
6668 \x1f
6669 File: as.info,  Node: H8/300 Opcodes,  Prev: H8/300 Directives,  Up: H8/300-Dependent
6671 Opcodes
6672 -------
6674    For detailed information on the H8/300 machine instruction set, see
6675 `H8/300 Series Programming Manual'.  For information specific to the
6676 H8/300H, see `H8/300H Series Programming Manual' (Renesas).
6678    `as' implements all the standard H8/300 opcodes.  No additional
6679 pseudo-instructions are needed on this family.
6681    The following table summarizes the H8/300 opcodes, and their
6682 arguments.  Entries marked `*' are opcodes used only on the H8/300H.
6684               Legend:
6685                  Rs   source register
6686                  Rd   destination register
6687                  abs  absolute address
6688                  imm  immediate data
6689               disp:N  N-bit displacement from a register
6690              pcrel:N  N-bit displacement relative to program counter
6691      
6692         add.b #imm,rd              *  andc #imm,ccr
6693         add.b rs,rd                   band #imm,rd
6694         add.w rs,rd                   band #imm,@rd
6695      *  add.w #imm,rd                 band #imm,@abs:8
6696      *  add.l rs,rd                   bra  pcrel:8
6697      *  add.l #imm,rd              *  bra  pcrel:16
6698         adds #imm,rd                  bt   pcrel:8
6699         addx #imm,rd               *  bt   pcrel:16
6700         addx rs,rd                    brn  pcrel:8
6701         and.b #imm,rd              *  brn  pcrel:16
6702         and.b rs,rd                   bf   pcrel:8
6703      *  and.w rs,rd                *  bf   pcrel:16
6704      *  and.w #imm,rd                 bhi  pcrel:8
6705      *  and.l #imm,rd              *  bhi  pcrel:16
6706      *  and.l rs,rd                   bls  pcrel:8
6707      
6708      *  bls  pcrel:16                 bld  #imm,rd
6709         bcc  pcrel:8                  bld  #imm,@rd
6710      *  bcc  pcrel:16                 bld  #imm,@abs:8
6711         bhs  pcrel:8                  bnot #imm,rd
6712      *  bhs  pcrel:16                 bnot #imm,@rd
6713         bcs  pcrel:8                  bnot #imm,@abs:8
6714      *  bcs  pcrel:16                 bnot rs,rd
6715         blo  pcrel:8                  bnot rs,@rd
6716      *  blo  pcrel:16                 bnot rs,@abs:8
6717         bne  pcrel:8                  bor  #imm,rd
6718      *  bne  pcrel:16                 bor  #imm,@rd
6719         beq  pcrel:8                  bor  #imm,@abs:8
6720      *  beq  pcrel:16                 bset #imm,rd
6721         bvc  pcrel:8                  bset #imm,@rd
6722      *  bvc  pcrel:16                 bset #imm,@abs:8
6723         bvs  pcrel:8                  bset rs,rd
6724      *  bvs  pcrel:16                 bset rs,@rd
6725         bpl  pcrel:8                  bset rs,@abs:8
6726      *  bpl  pcrel:16                 bsr  pcrel:8
6727         bmi  pcrel:8                  bsr  pcrel:16
6728      *  bmi  pcrel:16                 bst  #imm,rd
6729         bge  pcrel:8                  bst  #imm,@rd
6730      *  bge  pcrel:16                 bst  #imm,@abs:8
6731         blt  pcrel:8                  btst #imm,rd
6732      *  blt  pcrel:16                 btst #imm,@rd
6733         bgt  pcrel:8                  btst #imm,@abs:8
6734      *  bgt  pcrel:16                 btst rs,rd
6735         ble  pcrel:8                  btst rs,@rd
6736      *  ble  pcrel:16                 btst rs,@abs:8
6737         bclr #imm,rd                  bxor #imm,rd
6738         bclr #imm,@rd                 bxor #imm,@rd
6739         bclr #imm,@abs:8              bxor #imm,@abs:8
6740         bclr rs,rd                    cmp.b #imm,rd
6741         bclr rs,@rd                   cmp.b rs,rd
6742         bclr rs,@abs:8                cmp.w rs,rd
6743         biand #imm,rd                 cmp.w rs,rd
6744         biand #imm,@rd             *  cmp.w #imm,rd
6745         biand #imm,@abs:8          *  cmp.l #imm,rd
6746         bild #imm,rd               *  cmp.l rs,rd
6747         bild #imm,@rd                 daa  rs
6748         bild #imm,@abs:8              das  rs
6749         bior #imm,rd                  dec.b rs
6750         bior #imm,@rd              *  dec.w #imm,rd
6751         bior #imm,@abs:8           *  dec.l #imm,rd
6752         bist #imm,rd                  divxu.b rs,rd
6753         bist #imm,@rd              *  divxu.w rs,rd
6754         bist #imm,@abs:8           *  divxs.b rs,rd
6755         bixor #imm,rd              *  divxs.w rs,rd
6756         bixor #imm,@rd                eepmov
6757         bixor #imm,@abs:8          *  eepmovw
6758      
6759      *  exts.w rd                     mov.w rs,@abs:16
6760      *  exts.l rd                  *  mov.l #imm,rd
6761      *  extu.w rd                  *  mov.l rs,rd
6762      *  extu.l rd                  *  mov.l @rs,rd
6763         inc  rs                    *  mov.l @(disp:16,rs),rd
6764      *  inc.w #imm,rd              *  mov.l @(disp:24,rs),rd
6765      *  inc.l #imm,rd              *  mov.l @rs+,rd
6766         jmp  @rs                   *  mov.l @abs:16,rd
6767         jmp  abs                   *  mov.l @abs:24,rd
6768         jmp  @@abs:8               *  mov.l rs,@rd
6769         jsr  @rs                   *  mov.l rs,@(disp:16,rd)
6770         jsr  abs                   *  mov.l rs,@(disp:24,rd)
6771         jsr  @@abs:8               *  mov.l rs,@-rd
6772         ldc  #imm,ccr              *  mov.l rs,@abs:16
6773         ldc  rs,ccr                *  mov.l rs,@abs:24
6774      *  ldc  @abs:16,ccr              movfpe @abs:16,rd
6775      *  ldc  @abs:24,ccr              movtpe rs,@abs:16
6776      *  ldc  @(disp:16,rs),ccr        mulxu.b rs,rd
6777      *  ldc  @(disp:24,rs),ccr     *  mulxu.w rs,rd
6778      *  ldc  @rs+,ccr              *  mulxs.b rs,rd
6779      *  ldc  @rs,ccr               *  mulxs.w rs,rd
6780      *  mov.b @(disp:24,rs),rd        neg.b rs
6781      *  mov.b rs,@(disp:24,rd)     *  neg.w rs
6782         mov.b @abs:16,rd           *  neg.l rs
6783         mov.b rs,rd                   nop
6784         mov.b @abs:8,rd               not.b rs
6785         mov.b rs,@abs:8            *  not.w rs
6786         mov.b rs,rd                *  not.l rs
6787         mov.b #imm,rd                 or.b #imm,rd
6788         mov.b @rs,rd                  or.b rs,rd
6789         mov.b @(disp:16,rs),rd     *  or.w #imm,rd
6790         mov.b @rs+,rd              *  or.w rs,rd
6791         mov.b @abs:8,rd            *  or.l #imm,rd
6792         mov.b rs,@rd               *  or.l rs,rd
6793         mov.b rs,@(disp:16,rd)        orc  #imm,ccr
6794         mov.b rs,@-rd                 pop.w rs
6795         mov.b rs,@abs:8            *  pop.l rs
6796         mov.w rs,@rd                  push.w rs
6797      *  mov.w @(disp:24,rs),rd     *  push.l rs
6798      *  mov.w rs,@(disp:24,rd)        rotl.b rs
6799      *  mov.w @abs:24,rd           *  rotl.w rs
6800      *  mov.w rs,@abs:24           *  rotl.l rs
6801         mov.w rs,rd                   rotr.b rs
6802         mov.w #imm,rd              *  rotr.w rs
6803         mov.w @rs,rd               *  rotr.l rs
6804         mov.w @(disp:16,rs),rd        rotxl.b rs
6805         mov.w @rs+,rd              *  rotxl.w rs
6806         mov.w @abs:16,rd           *  rotxl.l rs
6807         mov.w rs,@(disp:16,rd)        rotxr.b rs
6808         mov.w rs,@-rd              *  rotxr.w rs
6809      
6810      *  rotxr.l rs                 *  stc  ccr,@(disp:24,rd)
6811         bpt                        *  stc  ccr,@-rd
6812         rte                        *  stc  ccr,@abs:16
6813         rts                        *  stc  ccr,@abs:24
6814         shal.b rs                     sub.b rs,rd
6815      *  shal.w rs                     sub.w rs,rd
6816      *  shal.l rs                  *  sub.w #imm,rd
6817         shar.b rs                  *  sub.l rs,rd
6818      *  shar.w rs                  *  sub.l #imm,rd
6819      *  shar.l rs                     subs #imm,rd
6820         shll.b rs                     subx #imm,rd
6821      *  shll.w rs                     subx rs,rd
6822      *  shll.l rs                  *  trapa #imm
6823         shlr.b rs                     xor  #imm,rd
6824      *  shlr.w rs                     xor  rs,rd
6825      *  shlr.l rs                  *  xor.w #imm,rd
6826         sleep                      *  xor.w rs,rd
6827         stc  ccr,rd                *  xor.l #imm,rd
6828      *  stc  ccr,@rs               *  xor.l rs,rd
6829      *  stc  ccr,@(disp:16,rd)        xorc #imm,ccr
6831    Four H8/300 instructions (`add', `cmp', `mov', `sub') are defined
6832 with variants using the suffixes `.b', `.w', and `.l' to specify the
6833 size of a memory operand.  `as' supports these suffixes, but does not
6834 require them; since one of the operands is always a register, `as' can
6835 deduce the correct size.
6837    For example, since `r0' refers to a 16-bit register,
6838      mov    r0,@foo
6839 is equivalent to
6840      mov.w  r0,@foo
6842    If you use the size suffixes, `as' issues a warning when the suffix
6843 and the register size do not match.
6845 \x1f
6846 File: as.info,  Node: H8/500-Dependent,  Next: HPPA-Dependent,  Prev: H8/300-Dependent,  Up: Machine Dependencies
6848 H8/500 Dependent Features
6849 =========================
6851 * Menu:
6853 * H8/500 Options::              Options
6854 * H8/500 Syntax::               Syntax
6855 * H8/500 Floating Point::       Floating Point
6856 * H8/500 Directives::           H8/500 Machine Directives
6857 * H8/500 Opcodes::              Opcodes
6859 \x1f
6860 File: as.info,  Node: H8/500 Options,  Next: H8/500 Syntax,  Up: H8/500-Dependent
6862 Options
6863 -------
6865    `as' has no additional command-line options for the Renesas
6866 (formerly Hitachi) H8/500 family.
6868 \x1f
6869 File: as.info,  Node: H8/500 Syntax,  Next: H8/500 Floating Point,  Prev: H8/500 Options,  Up: H8/500-Dependent
6871 Syntax
6872 ------
6874 * Menu:
6876 * H8/500-Chars::                Special Characters
6877 * H8/500-Regs::                 Register Names
6878 * H8/500-Addressing::           Addressing Modes
6880 \x1f
6881 File: as.info,  Node: H8/500-Chars,  Next: H8/500-Regs,  Up: H8/500 Syntax
6883 Special Characters
6884 ..................
6886    `!' is the line comment character.
6888    `;' can be used instead of a newline to separate statements.
6890    Since `$' has no special meaning, you may use it in symbol names.
6892 \x1f
6893 File: as.info,  Node: H8/500-Regs,  Next: H8/500-Addressing,  Prev: H8/500-Chars,  Up: H8/500 Syntax
6895 Register Names
6896 ..............
6898    You can use the predefined symbols `r0', `r1', `r2', `r3', `r4',
6899 `r5', `r6', and `r7' to refer to the H8/500 registers.
6901    The H8/500 also has these control registers:
6903 `cp'
6904      code pointer
6906 `dp'
6907      data pointer
6909 `bp'
6910      base pointer
6912 `tp'
6913      stack top pointer
6915 `ep'
6916      extra pointer
6918 `sr'
6919      status register
6921 `ccr'
6922      condition code register
6924    All registers are 16 bits long.  To represent 32 bit numbers, use two
6925 adjacent registers; for distant memory addresses, use one of the segment
6926 pointers (`cp' for the program counter; `dp' for `r0'-`r3'; `ep' for
6927 `r4' and `r5'; and `tp' for `r6' and `r7'.
6929 \x1f
6930 File: as.info,  Node: H8/500-Addressing,  Prev: H8/500-Regs,  Up: H8/500 Syntax
6932 Addressing Modes
6933 ................
6935    as understands the following addressing modes for the H8/500:
6936 `RN'
6937      Register direct
6939 `@RN'
6940      Register indirect
6942 `@(d:8, RN)'
6943      Register indirect with 8 bit signed displacement
6945 `@(d:16, RN)'
6946      Register indirect with 16 bit signed displacement
6948 `@-RN'
6949      Register indirect with pre-decrement
6951 `@RN+'
6952      Register indirect with post-increment
6954 `@AA:8'
6955      8 bit absolute address
6957 `@AA:16'
6958      16 bit absolute address
6960 `#XX:8'
6961      8 bit immediate
6963 `#XX:16'
6964      16 bit immediate
6966 \x1f
6967 File: as.info,  Node: H8/500 Floating Point,  Next: H8/500 Directives,  Prev: H8/500 Syntax,  Up: H8/500-Dependent
6969 Floating Point
6970 --------------
6972    The H8/500 family has no hardware floating point, but the `.float'
6973 directive generates IEEE floating-point numbers for compatibility with
6974 other development tools.
6976 \x1f
6977 File: as.info,  Node: H8/500 Directives,  Next: H8/500 Opcodes,  Prev: H8/500 Floating Point,  Up: H8/500-Dependent
6979 H8/500 Machine Directives
6980 -------------------------
6982    `as' has no machine-dependent directives for the H8/500.  However,
6983 on this platform the `.int' and `.word' directives generate 16-bit
6984 numbers.
6986 \x1f
6987 File: as.info,  Node: H8/500 Opcodes,  Prev: H8/500 Directives,  Up: H8/500-Dependent
6989 Opcodes
6990 -------
6992    For detailed information on the H8/500 machine instruction set, see
6993 `H8/500 Series Programming Manual' (Renesas M21T001).
6995    `as' implements all the standard H8/500 opcodes.  No additional
6996 pseudo-instructions are needed on this family.
6998    The following table summarizes H8/500 opcodes and their operands:
7000      Legend:
7001      abs8      8-bit absolute address
7002      abs16     16-bit absolute address
7003      abs24     24-bit absolute address
7004      crb       `ccr', `br', `ep', `dp', `tp', `dp'
7005      disp8     8-bit displacement
7006      ea        `rn', `@rn', `@(d:8, rn)', `@(d:16, rn)',
7007                `@-rn', `@rn+', `@aa:8', `@aa:16',
7008                `#xx:8', `#xx:16'
7009      ea_mem    `@rn', `@(d:8, rn)', `@(d:16, rn)',
7010                `@-rn', `@rn+', `@aa:8', `@aa:16'
7011      ea_noimm  `rn', `@rn', `@(d:8, rn)', `@(d:16, rn)',
7012                `@-rn', `@rn+', `@aa:8', `@aa:16'
7013      fp        r6
7014      imm4      4-bit immediate data
7015      imm8      8-bit immediate data
7016      imm16     16-bit immediate data
7017      pcrel8    8-bit offset from program counter
7018      pcrel16   16-bit offset from program counter
7019      qim       `-2', `-1', `1', `2'
7020      rd        any register
7021      rs        a register distinct from rd
7022      rlist     comma-separated list of registers in parentheses;
7023                register ranges `rd-rs' are allowed
7024      sp        stack pointer (`r7')
7025      sr        status register
7026      sz        size; `.b' or `.w'.  If omitted, default `.w'
7027      
7028      ldc[.b] ea,crb                 bcc[.w] pcrel16
7029      ldc[.w] ea,sr                  bcc[.b] pcrel8
7030      add[:q] sz qim,ea_noimm        bhs[.w] pcrel16
7031      add[:g] sz ea,rd               bhs[.b] pcrel8
7032      adds sz ea,rd                  bcs[.w] pcrel16
7033      addx sz ea,rd                  bcs[.b] pcrel8
7034      and sz ea,rd                   blo[.w] pcrel16
7035      andc[.b] imm8,crb              blo[.b] pcrel8
7036      andc[.w] imm16,sr              bne[.w] pcrel16
7037      bpt                            bne[.b] pcrel8
7038      bra[.w] pcrel16                beq[.w] pcrel16
7039      bra[.b] pcrel8                 beq[.b] pcrel8
7040      bt[.w] pcrel16                 bvc[.w] pcrel16
7041      bt[.b] pcrel8                  bvc[.b] pcrel8
7042      brn[.w] pcrel16                bvs[.w] pcrel16
7043      brn[.b] pcrel8                 bvs[.b] pcrel8
7044      bf[.w] pcrel16                 bpl[.w] pcrel16
7045      bf[.b] pcrel8                  bpl[.b] pcrel8
7046      bhi[.w] pcrel16                bmi[.w] pcrel16
7047      bhi[.b] pcrel8                 bmi[.b] pcrel8
7048      bls[.w] pcrel16                bge[.w] pcrel16
7049      bls[.b] pcrel8                 bge[.b] pcrel8
7050      
7051      blt[.w] pcrel16                mov[:g][.b] imm8,ea_mem
7052      blt[.b] pcrel8                 mov[:g][.w] imm16,ea_mem
7053      bgt[.w] pcrel16                movfpe[.b] ea,rd
7054      bgt[.b] pcrel8                 movtpe[.b] rs,ea_noimm
7055      ble[.w] pcrel16                mulxu sz ea,rd
7056      ble[.b] pcrel8                 neg sz ea
7057      bclr sz imm4,ea_noimm          nop
7058      bclr sz rs,ea_noimm            not sz ea
7059      bnot sz imm4,ea_noimm          or sz ea,rd
7060      bnot sz rs,ea_noimm            orc[.b] imm8,crb
7061      bset sz imm4,ea_noimm          orc[.w] imm16,sr
7062      bset sz rs,ea_noimm            pjmp abs24
7063      bsr[.b] pcrel8                 pjmp @rd
7064      bsr[.w] pcrel16                pjsr abs24
7065      btst sz imm4,ea_noimm          pjsr @rd
7066      btst sz rs,ea_noimm            prtd imm8
7067      clr sz ea                      prtd imm16
7068      cmp[:e][.b] imm8,rd            prts
7069      cmp[:i][.w] imm16,rd           rotl sz ea
7070      cmp[:g].b imm8,ea_noimm        rotr sz ea
7071      cmp[:g][.w] imm16,ea_noimm     rotxl sz ea
7072      Cmp[:g] sz ea,rd               rotxr sz ea
7073      dadd rs,rd                     rtd imm8
7074      divxu sz ea,rd                 rtd imm16
7075      dsub rs,rd                     rts
7076      exts[.b] rd                    scb/f rs,pcrel8
7077      extu[.b] rd                    scb/ne rs,pcrel8
7078      jmp @rd                        scb/eq rs,pcrel8
7079      jmp @(imm8,rd)                 shal sz ea
7080      jmp @(imm16,rd)                shar sz ea
7081      jmp abs16                      shll sz ea
7082      jsr @rd                        shlr sz ea
7083      jsr @(imm8,rd)                 sleep
7084      jsr @(imm16,rd)                stc[.b] crb,ea_noimm
7085      jsr abs16                      stc[.w] sr,ea_noimm
7086      ldm @sp+,(rlist)               stm (rlist),@-sp
7087      link fp,imm8                   sub sz ea,rd
7088      link fp,imm16                  subs sz ea,rd
7089      mov[:e][.b] imm8,rd            subx sz ea,rd
7090      mov[:i][.w] imm16,rd           swap[.b] rd
7091      mov[:l][.w] abs8,rd            tas[.b] ea
7092      mov[:l].b abs8,rd              trapa imm4
7093      mov[:s][.w] rs,abs8            trap/vs
7094      mov[:s].b rs,abs8              tst sz ea
7095      mov[:f][.w] @(disp8,fp),rd     unlk fp
7096      mov[:f][.w] rs,@(disp8,fp)     xch[.w] rs,rd
7097      mov[:f].b @(disp8,fp),rd       xor sz ea,rd
7098      mov[:f].b rs,@(disp8,fp)       xorc.b imm8,crb
7099      mov[:g] sz rs,ea_mem           xorc.w imm16,sr
7100      mov[:g] sz ea,rd
7102 \x1f
7103 File: as.info,  Node: HPPA-Dependent,  Next: ESA/390-Dependent,  Prev: H8/500-Dependent,  Up: Machine Dependencies
7105 HPPA Dependent Features
7106 =======================
7108 * Menu:
7110 * HPPA Notes::                Notes
7111 * HPPA Options::              Options
7112 * HPPA Syntax::               Syntax
7113 * HPPA Floating Point::       Floating Point
7114 * HPPA Directives::           HPPA Machine Directives
7115 * HPPA Opcodes::              Opcodes
7117 \x1f
7118 File: as.info,  Node: HPPA Notes,  Next: HPPA Options,  Up: HPPA-Dependent
7120 Notes
7121 -----
7123    As a back end for GNU CC `as' has been throughly tested and should
7124 work extremely well.  We have tested it only minimally on hand written
7125 assembly code and no one has tested it much on the assembly output from
7126 the HP compilers.
7128    The format of the debugging sections has changed since the original
7129 `as' port (version 1.3X) was released; therefore, you must rebuild all
7130 HPPA objects and libraries with the new assembler so that you can debug
7131 the final executable.
7133    The HPPA `as' port generates a small subset of the relocations
7134 available in the SOM and ELF object file formats.  Additional relocation
7135 support will be added as it becomes necessary.
7137 \x1f
7138 File: as.info,  Node: HPPA Options,  Next: HPPA Syntax,  Prev: HPPA Notes,  Up: HPPA-Dependent
7140 Options
7141 -------
7143    `as' has no machine-dependent command-line options for the HPPA.
7145 \x1f
7146 File: as.info,  Node: HPPA Syntax,  Next: HPPA Floating Point,  Prev: HPPA Options,  Up: HPPA-Dependent
7148 Syntax
7149 ------
7151    The assembler syntax closely follows the HPPA instruction set
7152 reference manual; assembler directives and general syntax closely
7153 follow the HPPA assembly language reference manual, with a few
7154 noteworthy differences.
7156    First, a colon may immediately follow a label definition.  This is
7157 simply for compatibility with how most assembly language programmers
7158 write code.
7160    Some obscure expression parsing problems may affect hand written
7161 code which uses the `spop' instructions, or code which makes significant
7162 use of the `!' line separator.
7164    `as' is much less forgiving about missing arguments and other
7165 similar oversights than the HP assembler.  `as' notifies you of missing
7166 arguments as syntax errors; this is regarded as a feature, not a bug.
7168    Finally, `as' allows you to use an external symbol without
7169 explicitly importing the symbol.  _Warning:_ in the future this will be
7170 an error for HPPA targets.
7172    Special characters for HPPA targets include:
7174    `;' is the line comment character.
7176    `!' can be used instead of a newline to separate statements.
7178    Since `$' has no special meaning, you may use it in symbol names.
7180 \x1f
7181 File: as.info,  Node: HPPA Floating Point,  Next: HPPA Directives,  Prev: HPPA Syntax,  Up: HPPA-Dependent
7183 Floating Point
7184 --------------
7186    The HPPA family uses IEEE floating-point numbers.
7188 \x1f
7189 File: as.info,  Node: HPPA Directives,  Next: HPPA Opcodes,  Prev: HPPA Floating Point,  Up: HPPA-Dependent
7191 HPPA Assembler Directives
7192 -------------------------
7194    `as' for the HPPA supports many additional directives for
7195 compatibility with the native assembler.  This section describes them
7196 only briefly.  For detailed information on HPPA-specific assembler
7197 directives, see `HP9000 Series 800 Assembly Language Reference Manual'
7198 (HP 92432-90001).
7200    `as' does _not_ support the following assembler directives described
7201 in the HP manual:
7203      .endm           .liston
7204      .enter          .locct
7205      .leave          .macro
7206      .listoff
7208    Beyond those implemented for compatibility, `as' supports one
7209 additional assembler directive for the HPPA: `.param'.  It conveys
7210 register argument locations for static functions.  Its syntax closely
7211 follows the `.export' directive.
7213    These are the additional directives in `as' for the HPPA:
7215 `.block N'
7216 `.blockz N'
7217      Reserve N bytes of storage, and initialize them to zero.
7219 `.call'
7220      Mark the beginning of a procedure call.  Only the special case
7221      with _no arguments_ is allowed.
7223 `.callinfo [ PARAM=VALUE, ... ]  [ FLAG, ... ]'
7224      Specify a number of parameters and flags that define the
7225      environment for a procedure.
7227      PARAM may be any of `frame' (frame size), `entry_gr' (end of
7228      general register range), `entry_fr' (end of float register range),
7229      `entry_sr' (end of space register range).
7231      The values for FLAG are `calls' or `caller' (proc has
7232      subroutines), `no_calls' (proc does not call subroutines),
7233      `save_rp' (preserve return pointer), `save_sp' (proc preserves
7234      stack pointer), `no_unwind' (do not unwind this proc), `hpux_int'
7235      (proc is interrupt routine).
7237 `.code'
7238      Assemble into the standard section called `$TEXT$', subsection
7239      `$CODE$'.
7241 `.copyright "STRING"'
7242      In the SOM object format, insert STRING into the object code,
7243      marked as a copyright string.
7245 `.copyright "STRING"'
7246      In the ELF object format, insert STRING into the object code,
7247      marked as a version string.
7249 `.enter'
7250      Not yet supported; the assembler rejects programs containing this
7251      directive.
7253 `.entry'
7254      Mark the beginning of a procedure.
7256 `.exit'
7257      Mark the end of a procedure.
7259 `.export NAME [ ,TYP ]  [ ,PARAM=R ]'
7260      Make a procedure NAME available to callers.  TYP, if present, must
7261      be one of `absolute', `code' (ELF only, not SOM), `data', `entry',
7262      `data', `entry', `millicode', `plabel', `pri_prog', or `sec_prog'.
7264      PARAM, if present, provides either relocation information for the
7265      procedure arguments and result, or a privilege level.  PARAM may be
7266      `argwN' (where N ranges from `0' to `3', and indicates one of four
7267      one-word arguments); `rtnval' (the procedure's result); or
7268      `priv_lev' (privilege level).  For arguments or the result, R
7269      specifies how to relocate, and must be one of `no' (not
7270      relocatable), `gr' (argument is in general register), `fr' (in
7271      floating point register), or `fu' (upper half of float register).
7272      For `priv_lev', R is an integer.
7274 `.half N'
7275      Define a two-byte integer constant N; synonym for the portable
7276      `as' directive `.short'.
7278 `.import NAME [ ,TYP ]'
7279      Converse of `.export'; make a procedure available to call.  The
7280      arguments use the same conventions as the first two arguments for
7281      `.export'.
7283 `.label NAME'
7284      Define NAME as a label for the current assembly location.
7286 `.leave'
7287      Not yet supported; the assembler rejects programs containing this
7288      directive.
7290 `.origin LC'
7291      Advance location counter to LC. Synonym for the `as' portable
7292      directive `.org'.
7294 `.param NAME [ ,TYP ]  [ ,PARAM=R ]'
7295      Similar to `.export', but used for static procedures.
7297 `.proc'
7298      Use preceding the first statement of a procedure.
7300 `.procend'
7301      Use following the last statement of a procedure.
7303 `LABEL .reg EXPR'
7304      Synonym for `.equ'; define LABEL with the absolute expression EXPR
7305      as its value.
7307 `.space SECNAME [ ,PARAMS ]'
7308      Switch to section SECNAME, creating a new section by that name if
7309      necessary.  You may only use PARAMS when creating a new section,
7310      not when switching to an existing one.  SECNAME may identify a
7311      section by number rather than by name.
7313      If specified, the list PARAMS declares attributes of the section,
7314      identified by keywords.  The keywords recognized are `spnum=EXP'
7315      (identify this section by the number EXP, an absolute expression),
7316      `sort=EXP' (order sections according to this sort key when linking;
7317      EXP is an absolute expression), `unloadable' (section contains no
7318      loadable data), `notdefined' (this section defined elsewhere), and
7319      `private' (data in this section not available to other programs).
7321 `.spnum SECNAM'
7322      Allocate four bytes of storage, and initialize them with the
7323      section number of the section named SECNAM.  (You can define the
7324      section number with the HPPA `.space' directive.)
7326 `.string "STR"'
7327      Copy the characters in the string STR to the object file.  *Note
7328      Strings: Strings, for information on escape sequences you can use
7329      in `as' strings.
7331      _Warning!_ The HPPA version of `.string' differs from the usual
7332      `as' definition: it does _not_ write a zero byte after copying STR.
7334 `.stringz "STR"'
7335      Like `.string', but appends a zero byte after copying STR to object
7336      file.
7338 `.subspa NAME [ ,PARAMS ]'
7339 `.nsubspa NAME [ ,PARAMS ]'
7340      Similar to `.space', but selects a subsection NAME within the
7341      current section.  You may only specify PARAMS when you create a
7342      subsection (in the first instance of `.subspa' for this NAME).
7344      If specified, the list PARAMS declares attributes of the
7345      subsection, identified by keywords.  The keywords recognized are
7346      `quad=EXPR' ("quadrant" for this subsection), `align=EXPR'
7347      (alignment for beginning of this subsection; a power of two),
7348      `access=EXPR' (value for "access rights" field), `sort=EXPR'
7349      (sorting order for this subspace in link), `code_only' (subsection
7350      contains only code), `unloadable' (subsection cannot be loaded
7351      into memory), `common' (subsection is common block), `dup_comm'
7352      (initialized data may have duplicate names), or `zero' (subsection
7353      is all zeros, do not write in object file).
7355      `.nsubspa' always creates a new subspace with the given name, even
7356      if one with the same name already exists.
7358 `.version "STR"'
7359      Write STR as version identifier in object code.
7361 \x1f
7362 File: as.info,  Node: HPPA Opcodes,  Prev: HPPA Directives,  Up: HPPA-Dependent
7364 Opcodes
7365 -------
7367    For detailed information on the HPPA machine instruction set, see
7368 `PA-RISC Architecture and Instruction Set Reference Manual' (HP
7369 09740-90039).
7371 \x1f
7372 File: as.info,  Node: ESA/390-Dependent,  Next: i386-Dependent,  Prev: HPPA-Dependent,  Up: Machine Dependencies
7374 ESA/390 Dependent Features
7375 ==========================
7377 * Menu:
7379 * ESA/390 Notes::                Notes
7380 * ESA/390 Options::              Options
7381 * ESA/390 Syntax::               Syntax
7382 * ESA/390 Floating Point::       Floating Point
7383 * ESA/390 Directives::           ESA/390 Machine Directives
7384 * ESA/390 Opcodes::              Opcodes
7386 \x1f
7387 File: as.info,  Node: ESA/390 Notes,  Next: ESA/390 Options,  Up: ESA/390-Dependent
7389 Notes
7390 -----
7392    The ESA/390 `as' port is currently intended to be a back-end for the
7393 GNU CC compiler.  It is not HLASM compatible, although it does support
7394 a subset of some of the HLASM directives.  The only supported binary
7395 file format is ELF; none of the usual MVS/VM/OE/USS object file
7396 formats, such as ESD or XSD, are supported.
7398    When used with the GNU CC compiler, the ESA/390 `as' will produce
7399 correct, fully relocated, functional binaries, and has been used to
7400 compile and execute large projects.  However, many aspects should still
7401 be considered experimental; these include shared library support,
7402 dynamically loadable objects, and any relocation other than the 31-bit
7403 relocation.
7405 \x1f
7406 File: as.info,  Node: ESA/390 Options,  Next: ESA/390 Syntax,  Prev: ESA/390 Notes,  Up: ESA/390-Dependent
7408 Options
7409 -------
7411    `as' has no machine-dependent command-line options for the ESA/390.
7413 \x1f
7414 File: as.info,  Node: ESA/390 Syntax,  Next: ESA/390 Floating Point,  Prev: ESA/390 Options,  Up: ESA/390-Dependent
7416 Syntax
7417 ------
7419    The opcode/operand syntax follows the ESA/390 Principles of Operation
7420 manual; assembler directives and general syntax are loosely based on the
7421 prevailing AT&T/SVR4/ELF/Solaris style notation.  HLASM-style directives
7422 are _not_ supported for the most part, with the exception of those
7423 described herein.
7425    A leading dot in front of directives is optional, and the case of
7426 directives is ignored; thus for example, .using and USING have the same
7427 effect.
7429    A colon may immediately follow a label definition.  This is simply
7430 for compatibility with how most assembly language programmers write
7431 code.
7433    `#' is the line comment character.
7435    `;' can be used instead of a newline to separate statements.
7437    Since `$' has no special meaning, you may use it in symbol names.
7439    Registers can be given the symbolic names r0..r15, fp0, fp2, fp4,
7440 fp6.  By using thesse symbolic names, `as' can detect simple syntax
7441 errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca for
7442 r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base
7443 for r3 and rpgt or r.pgt for r4.
7445    `*' is the current location counter.  Unlike `.' it is always
7446 relative to the last USING directive.  Note that this means that
7447 expressions cannot use multiplication, as any occurrence of `*' will be
7448 interpreted as a location counter.
7450    All labels are relative to the last USING.  Thus, branches to a label
7451 always imply the use of base+displacement.
7453    Many of the usual forms of address constants / address literals are
7454 supported.  Thus,
7455         .using  *,r3
7456         L       r15,=A(some_routine)
7457         LM      r6,r7,=V(some_longlong_extern)
7458         A       r1,=F'12'
7459         AH      r0,=H'42'
7460         ME      r6,=E'3.1416'
7461         MD      r6,=D'3.14159265358979'
7462         O       r6,=XL4'cacad0d0'
7463         .ltorg
7464    should all behave as expected: that is, an entry in the literal pool
7465 will be created (or reused if it already exists), and the instruction
7466 operands will be the displacement into the literal pool using the
7467 current base register (as last declared with the `.using' directive).
7469 \x1f
7470 File: as.info,  Node: ESA/390 Floating Point,  Next: ESA/390 Directives,  Prev: ESA/390 Syntax,  Up: ESA/390-Dependent
7472 Floating Point
7473 --------------
7475    The assembler generates only IEEE floating-point numbers.  The older
7476 floating point formats are not supported.
7478 \x1f
7479 File: as.info,  Node: ESA/390 Directives,  Next: ESA/390 Opcodes,  Prev: ESA/390 Floating Point,  Up: ESA/390-Dependent
7481 ESA/390 Assembler Directives
7482 ----------------------------
7484    `as' for the ESA/390 supports all of the standard ELF/SVR4 assembler
7485 directives that are documented in the main part of this documentation.
7486 Several additional directives are supported in order to implement the
7487 ESA/390 addressing model.  The most important of these are `.using' and
7488 `.ltorg'
7490    These are the additional directives in `as' for the ESA/390:
7492 `.dc'
7493      A small subset of the usual DC directive is supported.
7495 `.drop REGNO'
7496      Stop using REGNO as the base register.  The REGNO must have been
7497      previously declared with a `.using' directive in the same section
7498      as the current section.
7500 `.ebcdic STRING'
7501      Emit the EBCDIC equivalent of the indicated string.  The emitted
7502      string will be null terminated.  Note that the directives
7503      `.string' etc. emit ascii strings by default.
7505 `EQU'
7506      The standard HLASM-style EQU directive is not supported; however,
7507      the standard `as' directive .equ can be used to the same effect.
7509 `.ltorg'
7510      Dump the literal pool accumulated so far; begin a new literal pool.
7511      The literal pool will be written in the current section; in order
7512      to generate correct assembly, a `.using' must have been previously
7513      specified in the same section.
7515 `.using EXPR,REGNO'
7516      Use REGNO as the base register for all subsequent RX, RS, and SS
7517      form instructions. The EXPR will be evaluated to obtain the base
7518      address; usually, EXPR will merely be `*'.
7520      This assembler allows two `.using' directives to be simultaneously
7521      outstanding, one in the `.text' section, and one in another section
7522      (typically, the `.data' section).  This feature allows dynamically
7523      loaded objects to be implemented in a relatively straightforward
7524      way.  A `.using' directive must always be specified in the `.text'
7525      section; this will specify the base register that will be used for
7526      branches in the `.text' section.  A second `.using' may be
7527      specified in another section; this will specify the base register
7528      that is used for non-label address literals.  When a second
7529      `.using' is specified, then the subsequent `.ltorg' must be put in
7530      the same section; otherwise an error will result.
7532      Thus, for example, the following code uses `r3' to address branch
7533      targets and `r4' to address the literal pool, which has been
7534      written to the `.data' section.  The is, the constants
7535      `=A(some_routine)', `=H'42'' and `=E'3.1416'' will all appear in
7536      the `.data' section.
7538           .data
7539                 .using  LITPOOL,r4
7540           .text
7541                 BASR    r3,0
7542                 .using  *,r3
7543                   B       START
7544                 .long   LITPOOL
7545           START:
7546                 L       r4,4(,r3)
7547                 L       r15,=A(some_routine)
7548                 LTR     r15,r15
7549                 BNE     LABEL
7550                 AH      r0,=H'42'
7551           LABEL:
7552                 ME      r6,=E'3.1416'
7553           .data
7554           LITPOOL:
7555                 .ltorg
7557      Note that this dual-`.using' directive semantics extends and is
7558      not compatible with HLASM semantics.  Note that this assembler
7559      directive does not support the full range of HLASM semantics.
7561 \x1f
7562 File: as.info,  Node: ESA/390 Opcodes,  Prev: ESA/390 Directives,  Up: ESA/390-Dependent
7564 Opcodes
7565 -------
7567    For detailed information on the ESA/390 machine instruction set, see
7568 `ESA/390 Principles of Operation' (IBM Publication Number DZ9AR004).
7570 \x1f
7571 File: as.info,  Node: i386-Dependent,  Next: i860-Dependent,  Prev: ESA/390-Dependent,  Up: Machine Dependencies
7573 80386 Dependent Features
7574 ========================
7576    The i386 version `as' supports both the original Intel 386
7577 architecture in both 16 and 32-bit mode as well as AMD x86-64
7578 architecture extending the Intel architecture to 64-bits.
7580 * Menu:
7582 * i386-Options::                Options
7583 * i386-Syntax::                 AT&T Syntax versus Intel Syntax
7584 * i386-Mnemonics::              Instruction Naming
7585 * i386-Regs::                   Register Naming
7586 * i386-Prefixes::               Instruction Prefixes
7587 * i386-Memory::                 Memory References
7588 * i386-Jumps::                  Handling of Jump Instructions
7589 * i386-Float::                  Floating Point
7590 * i386-SIMD::                   Intel's MMX and AMD's 3DNow! SIMD Operations
7591 * i386-16bit::                  Writing 16-bit Code
7592 * i386-Arch::                   Specifying an x86 CPU architecture
7593 * i386-Bugs::                   AT&T Syntax bugs
7594 * i386-Notes::                  Notes
7596 \x1f
7597 File: as.info,  Node: i386-Options,  Next: i386-Syntax,  Up: i386-Dependent
7599 Options
7600 -------
7602    The i386 version of `as' has a few machine dependent options:
7604 `--32 | --64'
7605      Select the word size, either 32 bits or 64 bits. Selecting 32-bit
7606      implies Intel i386 architecture, while 64-bit implies AMD x86-64
7607      architecture.
7609      These options are only available with the ELF object file format,
7610      and require that the necessary BFD support has been included (on a
7611      32-bit platform you have to add -enable-64-bit-bfd to configure
7612      enable 64-bit usage and use x86-64 as target platform).
7614 `-n'
7615      By default, x86 GAS replaces multiple nop instructions used for
7616      alignment within code sections with multi-byte nop instructions
7617      such as leal 0(%esi,1),%esi.  This switch disables the
7618      optimization.
7620 \x1f
7621 File: as.info,  Node: i386-Syntax,  Next: i386-Mnemonics,  Prev: i386-Options,  Up: i386-Dependent
7623 AT&T Syntax versus Intel Syntax
7624 -------------------------------
7626    `as' now supports assembly using Intel assembler syntax.
7627 `.intel_syntax' selects Intel mode, and `.att_syntax' switches back to
7628 the usual AT&T mode for compatibility with the output of `gcc'.  Either
7629 of these directives may have an optional argument, `prefix', or
7630 `noprefix' specifying whether registers require a `%' prefix.  AT&T
7631 System V/386 assembler syntax is quite different from Intel syntax.  We
7632 mention these differences because almost all 80386 documents use Intel
7633 syntax.  Notable differences between the two syntaxes are:
7635    * AT&T immediate operands are preceded by `$'; Intel immediate
7636      operands are undelimited (Intel `push 4' is AT&T `pushl $4').
7637      AT&T register operands are preceded by `%'; Intel register operands
7638      are undelimited.  AT&T absolute (as opposed to PC relative)
7639      jump/call operands are prefixed by `*'; they are undelimited in
7640      Intel syntax.
7642    * AT&T and Intel syntax use the opposite order for source and
7643      destination operands.  Intel `add eax, 4' is `addl $4, %eax'.  The
7644      `source, dest' convention is maintained for compatibility with
7645      previous Unix assemblers.  Note that instructions with more than
7646      one source operand, such as the `enter' instruction, do _not_ have
7647      reversed order.  *Note i386-Bugs::.
7649    * In AT&T syntax the size of memory operands is determined from the
7650      last character of the instruction mnemonic.  Mnemonic suffixes of
7651      `b', `w', `l' and `q' specify byte (8-bit), word (16-bit), long
7652      (32-bit) and quadruple word (64-bit) memory references.  Intel
7653      syntax accomplishes this by prefixing memory operands (_not_ the
7654      instruction mnemonics) with `byte ptr', `word ptr', `dword ptr'
7655      and `qword ptr'.  Thus, Intel `mov al, byte ptr FOO' is `movb FOO,
7656      %al' in AT&T syntax.
7658    * Immediate form long jumps and calls are `lcall/ljmp $SECTION,
7659      $OFFSET' in AT&T syntax; the Intel syntax is `call/jmp far
7660      SECTION:OFFSET'.  Also, the far return instruction is `lret
7661      $STACK-ADJUST' in AT&T syntax; Intel syntax is `ret far
7662      STACK-ADJUST'.
7664    * The AT&T assembler does not provide support for multiple section
7665      programs.  Unix style systems expect all programs to be single
7666      sections.
7668 \x1f
7669 File: as.info,  Node: i386-Mnemonics,  Next: i386-Regs,  Prev: i386-Syntax,  Up: i386-Dependent
7671 Instruction Naming
7672 ------------------
7674    Instruction mnemonics are suffixed with one character modifiers which
7675 specify the size of operands.  The letters `b', `w', `l' and `q'
7676 specify byte, word, long and quadruple word operands.  If no suffix is
7677 specified by an instruction then `as' tries to fill in the missing
7678 suffix based on the destination register operand (the last one by
7679 convention).  Thus, `mov %ax, %bx' is equivalent to `movw %ax, %bx';
7680 also, `mov $1, %bx' is equivalent to `movw $1, bx'.  Note that this is
7681 incompatible with the AT&T Unix assembler which assumes that a missing
7682 mnemonic suffix implies long operand size.  (This incompatibility does
7683 not affect compiler output since compilers always explicitly specify
7684 the mnemonic suffix.)
7686    Almost all instructions have the same names in AT&T and Intel format.
7687 There are a few exceptions.  The sign extend and zero extend
7688 instructions need two sizes to specify them.  They need a size to
7689 sign/zero extend _from_ and a size to zero extend _to_.  This is
7690 accomplished by using two instruction mnemonic suffixes in AT&T syntax.
7691 Base names for sign extend and zero extend are `movs...' and `movz...'
7692 in AT&T syntax (`movsx' and `movzx' in Intel syntax).  The instruction
7693 mnemonic suffixes are tacked on to this base name, the _from_ suffix
7694 before the _to_ suffix.  Thus, `movsbl %al, %edx' is AT&T syntax for
7695 "move sign extend _from_ %al _to_ %edx."  Possible suffixes, thus, are
7696 `bl' (from byte to long), `bw' (from byte to word), `wl' (from word to
7697 long), `bq' (from byte to quadruple word), `wq' (from word to quadruple
7698 word), and `lq' (from long to quadruple word).
7700    The Intel-syntax conversion instructions
7702    * `cbw' -- sign-extend byte in `%al' to word in `%ax',
7704    * `cwde' -- sign-extend word in `%ax' to long in `%eax',
7706    * `cwd' -- sign-extend word in `%ax' to long in `%dx:%ax',
7708    * `cdq' -- sign-extend dword in `%eax' to quad in `%edx:%eax',
7710    * `cdqe' -- sign-extend dword in `%eax' to quad in `%rax' (x86-64
7711      only),
7713    * `cdo' -- sign-extend quad in `%rax' to octuple in `%rdx:%rax'
7714      (x86-64 only),
7716 are called `cbtw', `cwtl', `cwtd', `cltd', `cltq', and `cqto' in AT&T
7717 naming.  `as' accepts either naming for these instructions.
7719    Far call/jump instructions are `lcall' and `ljmp' in AT&T syntax,
7720 but are `call far' and `jump far' in Intel convention.
7722 \x1f
7723 File: as.info,  Node: i386-Regs,  Next: i386-Prefixes,  Prev: i386-Mnemonics,  Up: i386-Dependent
7725 Register Naming
7726 ---------------
7728    Register operands are always prefixed with `%'.  The 80386 registers
7729 consist of
7731    * the 8 32-bit registers `%eax' (the accumulator), `%ebx', `%ecx',
7732      `%edx', `%edi', `%esi', `%ebp' (the frame pointer), and `%esp'
7733      (the stack pointer).
7735    * the 8 16-bit low-ends of these: `%ax', `%bx', `%cx', `%dx', `%di',
7736      `%si', `%bp', and `%sp'.
7738    * the 8 8-bit registers: `%ah', `%al', `%bh', `%bl', `%ch', `%cl',
7739      `%dh', and `%dl' (These are the high-bytes and low-bytes of `%ax',
7740      `%bx', `%cx', and `%dx')
7742    * the 6 section registers `%cs' (code section), `%ds' (data
7743      section), `%ss' (stack section), `%es', `%fs', and `%gs'.
7745    * the 3 processor control registers `%cr0', `%cr2', and `%cr3'.
7747    * the 6 debug registers `%db0', `%db1', `%db2', `%db3', `%db6', and
7748      `%db7'.
7750    * the 2 test registers `%tr6' and `%tr7'.
7752    * the 8 floating point register stack `%st' or equivalently
7753      `%st(0)', `%st(1)', `%st(2)', `%st(3)', `%st(4)', `%st(5)',
7754      `%st(6)', and `%st(7)'.  These registers are overloaded by 8 MMX
7755      registers `%mm0', `%mm1', `%mm2', `%mm3', `%mm4', `%mm5', `%mm6'
7756      and `%mm7'.
7758    * the 8 SSE registers registers `%xmm0', `%xmm1', `%xmm2', `%xmm3',
7759      `%xmm4', `%xmm5', `%xmm6' and `%xmm7'.
7761    The AMD x86-64 architecture extends the register set by:
7763    * enhancing the 8 32-bit registers to 64-bit: `%rax' (the
7764      accumulator), `%rbx', `%rcx', `%rdx', `%rdi', `%rsi', `%rbp' (the
7765      frame pointer), `%rsp' (the stack pointer)
7767    * the 8 extended registers `%r8'-`%r15'.
7769    * the 8 32-bit low ends of the extended registers: `%r8d'-`%r15d'
7771    * the 8 16-bit low ends of the extended registers: `%r8w'-`%r15w'
7773    * the 8 8-bit low ends of the extended registers: `%r8b'-`%r15b'
7775    * the 4 8-bit registers: `%sil', `%dil', `%bpl', `%spl'.
7777    * the 8 debug registers: `%db8'-`%db15'.
7779    * the 8 SSE registers: `%xmm8'-`%xmm15'.
7781 \x1f
7782 File: as.info,  Node: i386-Prefixes,  Next: i386-Memory,  Prev: i386-Regs,  Up: i386-Dependent
7784 Instruction Prefixes
7785 --------------------
7787    Instruction prefixes are used to modify the following instruction.
7788 They are used to repeat string instructions, to provide section
7789 overrides, to perform bus lock operations, and to change operand and
7790 address sizes.  (Most instructions that normally operate on 32-bit
7791 operands will use 16-bit operands if the instruction has an "operand
7792 size" prefix.)  Instruction prefixes are best written on the same line
7793 as the instruction they act upon. For example, the `scas' (scan string)
7794 instruction is repeated with:
7796              repne scas %es:(%edi),%al
7798    You may also place prefixes on the lines immediately preceding the
7799 instruction, but this circumvents checks that `as' does with prefixes,
7800 and will not work with all prefixes.
7802    Here is a list of instruction prefixes:
7804    * Section override prefixes `cs', `ds', `ss', `es', `fs', `gs'.
7805      These are automatically added by specifying using the
7806      SECTION:MEMORY-OPERAND form for memory references.
7808    * Operand/Address size prefixes `data16' and `addr16' change 32-bit
7809      operands/addresses into 16-bit operands/addresses, while `data32'
7810      and `addr32' change 16-bit ones (in a `.code16' section) into
7811      32-bit operands/addresses.  These prefixes _must_ appear on the
7812      same line of code as the instruction they modify. For example, in
7813      a 16-bit `.code16' section, you might write:
7815                   addr32 jmpl *(%ebx)
7817    * The bus lock prefix `lock' inhibits interrupts during execution of
7818      the instruction it precedes.  (This is only valid with certain
7819      instructions; see a 80386 manual for details).
7821    * The wait for coprocessor prefix `wait' waits for the coprocessor to
7822      complete the current instruction.  This should never be needed for
7823      the 80386/80387 combination.
7825    * The `rep', `repe', and `repne' prefixes are added to string
7826      instructions to make them repeat `%ecx' times (`%cx' times if the
7827      current address size is 16-bits).
7829    * The `rex' family of prefixes is used by x86-64 to encode
7830      extensions to i386 instruction set.  The `rex' prefix has four
7831      bits -- an operand size overwrite (`64') used to change operand
7832      size from 32-bit to 64-bit and X, Y and Z extensions bits used to
7833      extend the register set.
7835      You may write the `rex' prefixes directly. The `rex64xyz'
7836      instruction emits `rex' prefix with all the bits set.  By omitting
7837      the `64', `x', `y' or `z' you may write other prefixes as well.
7838      Normally, there is no need to write the prefixes explicitly, since
7839      gas will automatically generate them based on the instruction
7840      operands.
7842 \x1f
7843 File: as.info,  Node: i386-Memory,  Next: i386-Jumps,  Prev: i386-Prefixes,  Up: i386-Dependent
7845 Memory References
7846 -----------------
7848    An Intel syntax indirect memory reference of the form
7850      SECTION:[BASE + INDEX*SCALE + DISP]
7852 is translated into the AT&T syntax
7854      SECTION:DISP(BASE, INDEX, SCALE)
7856 where BASE and INDEX are the optional 32-bit base and index registers,
7857 DISP is the optional displacement, and SCALE, taking the values 1, 2,
7858 4, and 8, multiplies INDEX to calculate the address of the operand.  If
7859 no SCALE is specified, SCALE is taken to be 1.  SECTION specifies the
7860 optional section register for the memory operand, and may override the
7861 default section register (see a 80386 manual for section register
7862 defaults). Note that section overrides in AT&T syntax _must_ be
7863 preceded by a `%'.  If you specify a section override which coincides
7864 with the default section register, `as' does _not_ output any section
7865 register override prefixes to assemble the given instruction.  Thus,
7866 section overrides can be specified to emphasize which section register
7867 is used for a given memory operand.
7869    Here are some examples of Intel and AT&T style memory references:
7871 AT&T: `-4(%ebp)', Intel:  `[ebp - 4]'
7872      BASE is `%ebp'; DISP is `-4'. SECTION is missing, and the default
7873      section is used (`%ss' for addressing with `%ebp' as the base
7874      register).  INDEX, SCALE are both missing.
7876 AT&T: `foo(,%eax,4)', Intel: `[foo + eax*4]'
7877      INDEX is `%eax' (scaled by a SCALE 4); DISP is `foo'.  All other
7878      fields are missing.  The section register here defaults to `%ds'.
7880 AT&T: `foo(,1)'; Intel `[foo]'
7881      This uses the value pointed to by `foo' as a memory operand.  Note
7882      that BASE and INDEX are both missing, but there is only _one_ `,'.
7883      This is a syntactic exception.
7885 AT&T: `%gs:foo'; Intel `gs:foo'
7886      This selects the contents of the variable `foo' with section
7887      register SECTION being `%gs'.
7889    Absolute (as opposed to PC relative) call and jump operands must be
7890 prefixed with `*'.  If no `*' is specified, `as' always chooses PC
7891 relative addressing for jump/call labels.
7893    Any instruction that has a memory operand, but no register operand,
7894 _must_ specify its size (byte, word, long, or quadruple) with an
7895 instruction mnemonic suffix (`b', `w', `l' or `q', respectively).
7897    The x86-64 architecture adds an RIP (instruction pointer relative)
7898 addressing.  This addressing mode is specified by using `rip' as a base
7899 register.  Only constant offsets are valid. For example:
7901 AT&T: `1234(%rip)', Intel: `[rip + 1234]'
7902      Points to the address 1234 bytes past the end of the current
7903      instruction.
7905 AT&T: `symbol(%rip)', Intel: `[rip + symbol]'
7906      Points to the `symbol' in RIP relative way, this is shorter than
7907      the default absolute addressing.
7909    Other addressing modes remain unchanged in x86-64 architecture,
7910 except registers used are 64-bit instead of 32-bit.
7912 \x1f
7913 File: as.info,  Node: i386-Jumps,  Next: i386-Float,  Prev: i386-Memory,  Up: i386-Dependent
7915 Handling of Jump Instructions
7916 -----------------------------
7918    Jump instructions are always optimized to use the smallest possible
7919 displacements.  This is accomplished by using byte (8-bit) displacement
7920 jumps whenever the target is sufficiently close.  If a byte displacement
7921 is insufficient a long displacement is used.  We do not support word
7922 (16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump
7923 instruction with the `data16' instruction prefix), since the 80386
7924 insists upon masking `%eip' to 16 bits after the word displacement is
7925 added. (See also *note i386-Arch::)
7927    Note that the `jcxz', `jecxz', `loop', `loopz', `loope', `loopnz'
7928 and `loopne' instructions only come in byte displacements, so that if
7929 you use these instructions (`gcc' does not use them) you may get an
7930 error message (and incorrect code).  The AT&T 80386 assembler tries to
7931 get around this problem by expanding `jcxz foo' to
7933               jcxz cx_zero
7934               jmp cx_nonzero
7935      cx_zero: jmp foo
7936      cx_nonzero:
7938 \x1f
7939 File: as.info,  Node: i386-Float,  Next: i386-SIMD,  Prev: i386-Jumps,  Up: i386-Dependent
7941 Floating Point
7942 --------------
7944    All 80387 floating point types except packed BCD are supported.
7945 (BCD support may be added without much difficulty).  These data types
7946 are 16-, 32-, and 64- bit integers, and single (32-bit), double
7947 (64-bit), and extended (80-bit) precision floating point.  Each
7948 supported type has an instruction mnemonic suffix and a constructor
7949 associated with it.  Instruction mnemonic suffixes specify the operand's
7950 data type.  Constructors build these data types into memory.
7952    * Floating point constructors are `.float' or `.single', `.double',
7953      and `.tfloat' for 32-, 64-, and 80-bit formats.  These correspond
7954      to instruction mnemonic suffixes `s', `l', and `t'. `t' stands for
7955      80-bit (ten byte) real.  The 80387 only supports this format via
7956      the `fldt' (load 80-bit real to stack top) and `fstpt' (store
7957      80-bit real and pop stack) instructions.
7959    * Integer constructors are `.word', `.long' or `.int', and `.quad'
7960      for the 16-, 32-, and 64-bit integer formats.  The corresponding
7961      instruction mnemonic suffixes are `s' (single), `l' (long), and
7962      `q' (quad).  As with the 80-bit real format, the 64-bit `q' format
7963      is only present in the `fildq' (load quad integer to stack top)
7964      and `fistpq' (store quad integer and pop stack) instructions.
7966    Register to register operations should not use instruction mnemonic
7967 suffixes.  `fstl %st, %st(1)' will give a warning, and be assembled as
7968 if you wrote `fst %st, %st(1)', since all register to register
7969 operations use 80-bit floating point operands. (Contrast this with
7970 `fstl %st, mem', which converts `%st' from 80-bit to 64-bit floating
7971 point format, then stores the result in the 4 byte location `mem')
7973 \x1f
7974 File: as.info,  Node: i386-SIMD,  Next: i386-16bit,  Prev: i386-Float,  Up: i386-Dependent
7976 Intel's MMX and AMD's 3DNow! SIMD Operations
7977 --------------------------------------------
7979    `as' supports Intel's MMX instruction set (SIMD instructions for
7980 integer data), available on Intel's Pentium MMX processors and Pentium
7981 II processors, AMD's K6 and K6-2 processors, Cyrix' M2 processor, and
7982 probably others.  It also supports AMD's 3DNow!  instruction set (SIMD
7983 instructions for 32-bit floating point data) available on AMD's K6-2
7984 processor and possibly others in the future.
7986    Currently, `as' does not support Intel's floating point SIMD, Katmai
7987 (KNI).
7989    The eight 64-bit MMX operands, also used by 3DNow!, are called
7990 `%mm0', `%mm1', ... `%mm7'.  They contain eight 8-bit integers, four
7991 16-bit integers, two 32-bit integers, one 64-bit integer, or two 32-bit
7992 floating point values.  The MMX registers cannot be used at the same
7993 time as the floating point stack.
7995    See Intel and AMD documentation, keeping in mind that the operand
7996 order in instructions is reversed from the Intel syntax.
7998 \x1f
7999 File: as.info,  Node: i386-16bit,  Next: i386-Arch,  Prev: i386-SIMD,  Up: i386-Dependent
8001 Writing 16-bit Code
8002 -------------------
8004    While `as' normally writes only "pure" 32-bit i386 code or 64-bit
8005 x86-64 code depending on the default configuration, it also supports
8006 writing code to run in real mode or in 16-bit protected mode code
8007 segments.  To do this, put a `.code16' or `.code16gcc' directive before
8008 the assembly language instructions to be run in 16-bit mode.  You can
8009 switch `as' back to writing normal 32-bit code with the `.code32'
8010 directive.
8012    `.code16gcc' provides experimental support for generating 16-bit
8013 code from gcc, and differs from `.code16' in that `call', `ret',
8014 `enter', `leave', `push', `pop', `pusha', `popa', `pushf', and `popf'
8015 instructions default to 32-bit size.  This is so that the stack pointer
8016 is manipulated in the same way over function calls, allowing access to
8017 function parameters at the same stack offsets as in 32-bit mode.
8018 `.code16gcc' also automatically adds address size prefixes where
8019 necessary to use the 32-bit addressing modes that gcc generates.
8021    The code which `as' generates in 16-bit mode will not necessarily
8022 run on a 16-bit pre-80386 processor.  To write code that runs on such a
8023 processor, you must refrain from using _any_ 32-bit constructs which
8024 require `as' to output address or operand size prefixes.
8026    Note that writing 16-bit code instructions by explicitly specifying a
8027 prefix or an instruction mnemonic suffix within a 32-bit code section
8028 generates different machine instructions than those generated for a
8029 16-bit code segment.  In a 32-bit code section, the following code
8030 generates the machine opcode bytes `66 6a 04', which pushes the value
8031 `4' onto the stack, decrementing `%esp' by 2.
8033              pushw $4
8035    The same code in a 16-bit code section would generate the machine
8036 opcode bytes `6a 04' (ie. without the operand size prefix), which is
8037 correct since the processor default operand size is assumed to be 16
8038 bits in a 16-bit code section.
8040 \x1f
8041 File: as.info,  Node: i386-Bugs,  Next: i386-Notes,  Prev: i386-Arch,  Up: i386-Dependent
8043 AT&T Syntax bugs
8044 ----------------
8046    The UnixWare assembler, and probably other AT&T derived ix86 Unix
8047 assemblers, generate floating point instructions with reversed source
8048 and destination registers in certain cases.  Unfortunately, gcc and
8049 possibly many other programs use this reversed syntax, so we're stuck
8050 with it.
8052    For example
8054              fsub %st,%st(3)
8056 results in `%st(3)' being updated to `%st - %st(3)' rather than the
8057 expected `%st(3) - %st'.  This happens with all the non-commutative
8058 arithmetic floating point operations with two register operands where
8059 the source register is `%st' and the destination register is `%st(i)'.
8061 \x1f
8062 File: as.info,  Node: i386-Arch,  Next: i386-Bugs,  Prev: i386-16bit,  Up: i386-Dependent
8064 Specifying CPU Architecture
8065 ---------------------------
8067    `as' may be told to assemble for a particular CPU architecture with
8068 the `.arch CPU_TYPE' directive.  This directive enables a warning when
8069 gas detects an instruction that is not supported on the CPU specified.
8070 The choices for CPU_TYPE are:
8072 `i8086'        `i186'         `i286'         `i386'
8073 `i486'         `i586'         `i686'         `pentium'
8074 `pentiumpro'   `pentium4'     `k6'           `athlon'
8075 `sledgehammer'                               
8077    Apart from the warning, there are only two other effects on `as'
8078 operation;  Firstly, if you specify a CPU other than `i486', then shift
8079 by one instructions such as `sarl $1, %eax' will automatically use a
8080 two byte opcode sequence.  The larger three byte opcode sequence is
8081 used on the 486 (and when no architecture is specified) because it
8082 executes faster on the 486.  Note that you can explicitly request the
8083 two byte opcode by writing `sarl %eax'.  Secondly, if you specify
8084 `i8086', `i186', or `i286', _and_ `.code16' or `.code16gcc' then byte
8085 offset conditional jumps will be promoted when necessary to a two
8086 instruction sequence consisting of a conditional jump of the opposite
8087 sense around an unconditional jump to the target.
8089    Following the CPU architecture, you may specify `jumps' or `nojumps'
8090 to control automatic promotion of conditional jumps.  `jumps' is the
8091 default, and enables jump promotion;  All external jumps will be of the
8092 long variety, and file-local jumps will be promoted as necessary.
8093 (*note i386-Jumps::)  `nojumps' leaves external conditional jumps as
8094 byte offset jumps, and warns about file-local conditional jumps that
8095 `as' promotes.  Unconditional jumps are treated as for `jumps'.
8097    For example
8099       .arch i8086,nojumps
8101 \x1f
8102 File: as.info,  Node: i386-Notes,  Prev: i386-Bugs,  Up: i386-Dependent
8104 Notes
8105 -----
8107    There is some trickery concerning the `mul' and `imul' instructions
8108 that deserves mention.  The 16-, 32-, 64- and 128-bit expanding
8109 multiplies (base opcode `0xf6'; extension 4 for `mul' and 5 for `imul')
8110 can be output only in the one operand form.  Thus, `imul %ebx, %eax'
8111 does _not_ select the expanding multiply; the expanding multiply would
8112 clobber the `%edx' register, and this would confuse `gcc' output.  Use
8113 `imul %ebx' to get the 64-bit product in `%edx:%eax'.
8115    We have added a two operand form of `imul' when the first operand is
8116 an immediate mode expression and the second operand is a register.
8117 This is just a shorthand, so that, multiplying `%eax' by 69, for
8118 example, can be done with `imul $69, %eax' rather than `imul $69, %eax,
8119 %eax'.
8121 \x1f
8122 File: as.info,  Node: i860-Dependent,  Next: i960-Dependent,  Prev: i386-Dependent,  Up: Machine Dependencies
8124 Intel i860 Dependent Features
8125 =============================
8127 * Menu:
8129 * Notes-i860::                  i860 Notes
8130 * Options-i860::                i860 Command-line Options
8131 * Directives-i860::             i860 Machine Directives
8132 * Opcodes for i860::            i860 Opcodes
8134 \x1f
8135 File: as.info,  Node: Notes-i860,  Next: Options-i860,  Up: i860-Dependent
8137 i860 Notes
8138 ----------
8140    This is a fairly complete i860 assembler which is compatible with the
8141 UNIX System V/860 Release 4 assembler. However, it does not currently
8142 support SVR4 PIC (i.e., `@GOT, @GOTOFF, @PLT').
8144    Like the SVR4/860 assembler, the output object format is ELF32.
8145 Currently, this is the only supported object format. If there is
8146 sufficient interest, other formats such as COFF may be implemented.
8148    Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter
8149 being the default.  One difference is that AT&T syntax requires the '%'
8150 prefix on register names while Intel syntax does not.  Another
8151 difference is in the specification of relocatable expressions.  The
8152 Intel syntax is `ha%expression' whereas the SVR4 syntax is
8153 `[expression]@ha' (and similarly for the "l" and "h" selectors).
8155 \x1f
8156 File: as.info,  Node: Options-i860,  Next: Directives-i860,  Prev: Notes-i860,  Up: i860-Dependent
8158 i860 Command-line Options
8159 -------------------------
8161 SVR4 compatibility options
8162 ..........................
8164 `-V'
8165      Print assembler version.
8167 `-Qy'
8168      Ignored.
8170 `-Qn'
8171      Ignored.
8173 Other options
8174 .............
8176 `-EL'
8177      Select little endian output (this is the default).
8179 `-EB'
8180      Select big endian output. Note that the i860 always reads
8181      instructions as little endian data, so this option only effects
8182      data and not instructions.
8184 `-mwarn-expand'
8185      Emit a warning message if any pseudo-instruction expansions
8186      occurred.  For example, a `or' instruction with an immediate
8187      larger than 16-bits will be expanded into two instructions. This
8188      is a very undesirable feature to rely on, so this flag can help
8189      detect any code where it happens. One use of it, for instance, has
8190      been to find and eliminate any place where `gcc' may emit these
8191      pseudo-instructions.
8193 `-mxp'
8194      Enable support for the i860XP instructions and control registers.
8195      By default, this option is disabled so that only the base
8196      instruction set (i.e., i860XR) is supported.
8198 `-mintel-syntax'
8199      The i860 assembler defaults to AT&T/SVR4 syntax.  This option
8200      enables the Intel syntax.
8202 \x1f
8203 File: as.info,  Node: Directives-i860,  Next: Opcodes for i860,  Prev: Options-i860,  Up: i860-Dependent
8205 i860 Machine Directives
8206 -----------------------
8208 `.dual'
8209      Enter dual instruction mode. While this directive is supported, the
8210      preferred way to use dual instruction mode is to explicitly code
8211      the dual bit with the `d.' prefix.
8213 `.enddual'
8214      Exit dual instruction mode. While this directive is supported, the
8215      preferred way to use dual instruction mode is to explicitly code
8216      the dual bit with the `d.' prefix.
8218 `.atmp'
8219      Change the temporary register used when expanding pseudo
8220      operations. The default register is `r31'.
8222    The `.dual', `.enddual', and `.atmp' directives are available only
8223 in the Intel syntax mode.
8225    Both syntaxes allow for the standard `.align' directive.  However,
8226 the Intel syntax additionally allows keywords for the alignment
8227 parameter: "`.align type'", where `type' is one of `.short', `.long',
8228 `.quad', `.single', `.double' representing alignments of 2, 4, 16, 4,
8229 and 8, respectively.
8231 \x1f
8232 File: as.info,  Node: Opcodes for i860,  Prev: Directives-i860,  Up: i860-Dependent
8234 i860 Opcodes
8235 ------------
8237    All of the Intel i860XR and i860XP machine instructions are
8238 supported. Please see either _i860 Microprocessor Programmer's
8239 Reference Manual_ or _i860 Microprocessor Architecture_ for more
8240 information.
8242 Other instruction support (pseudo-instructions)
8243 ...............................................
8245    For compatibility with some other i860 assemblers, a number of
8246 pseudo-instructions are supported. While these are supported, they are
8247 a very undesirable feature that should be avoided - in particular, when
8248 they result in an expansion to multiple actual i860 instructions. Below
8249 are the pseudo-instructions that result in expansions.
8250    * Load large immediate into general register:
8252      The pseudo-instruction `mov imm,%rn' (where the immediate does not
8253      fit within a signed 16-bit field) will be expanded into:
8254           orh large_imm@h,%r0,%rn
8255           or large_imm@l,%rn,%rn
8257    * Load/store with relocatable address expression:
8259      For example, the pseudo-instruction `ld.b addr_exp(%rx),%rn' will
8260      be expanded into:
8261           orh addr_exp@ha,%rx,%r31
8262           ld.l addr_exp@l(%r31),%rn
8264      The analogous expansions apply to `ld.x, st.x, fld.x, pfld.x,
8265      fst.x', and `pst.x' as well.
8267    * Signed large immediate with add/subtract:
8269      If any of the arithmetic operations `adds, addu, subs, subu' are
8270      used with an immediate larger than 16-bits (signed), then they
8271      will be expanded.  For instance, the pseudo-instruction `adds
8272      large_imm,%rx,%rn' expands to:
8273           orh large_imm@h,%r0,%r31
8274           or large_imm@l,%r31,%r31
8275           adds %r31,%rx,%rn
8277    * Unsigned large immediate with logical operations:
8279      Logical operations (`or, andnot, or, xor') also result in
8280      expansions.  The pseudo-instruction `or large_imm,%rx,%rn' results
8281      in:
8282           orh large_imm@h,%rx,%r31
8283           or large_imm@l,%r31,%rn
8285      Similarly for the others, except for `and' which expands to:
8286           andnot (-1 - large_imm)@h,%rx,%r31
8287           andnot (-1 - large_imm)@l,%r31,%rn
8289 \x1f
8290 File: as.info,  Node: i960-Dependent,  Next: IP2K-Dependent,  Prev: i860-Dependent,  Up: Machine Dependencies
8292 Intel 80960 Dependent Features
8293 ==============================
8295 * Menu:
8297 * Options-i960::                i960 Command-line Options
8298 * Floating Point-i960::         Floating Point
8299 * Directives-i960::             i960 Machine Directives
8300 * Opcodes for i960::            i960 Opcodes
8302 \x1f
8303 File: as.info,  Node: Options-i960,  Next: Floating Point-i960,  Up: i960-Dependent
8305 i960 Command-line Options
8306 -------------------------
8308 `-ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC'
8309      Select the 80960 architecture.  Instructions or features not
8310      supported by the selected architecture cause fatal errors.
8312      `-ACA' is equivalent to `-ACA_A'; `-AKC' is equivalent to `-AMC'.
8313      Synonyms are provided for compatibility with other tools.
8315      If you do not specify any of these options, `as' generates code
8316      for any instruction or feature that is supported by _some_ version
8317      of the 960 (even if this means mixing architectures!).  In
8318      principle, `as' attempts to deduce the minimal sufficient
8319      processor type if none is specified; depending on the object code
8320      format, the processor type may be recorded in the object file.  If
8321      it is critical that the `as' output match a specific architecture,
8322      specify that architecture explicitly.
8324 `-b'
8325      Add code to collect information about conditional branches taken,
8326      for later optimization using branch prediction bits.  (The
8327      conditional branch instructions have branch prediction bits in the
8328      CA, CB, and CC architectures.)  If BR represents a conditional
8329      branch instruction, the following represents the code generated by
8330      the assembler when `-b' is specified:
8332                   call    INCREMENT ROUTINE
8333                   .word   0       # pre-counter
8334           Label:  BR
8335                   call    INCREMENT ROUTINE
8336                   .word   0       # post-counter
8338      The counter following a branch records the number of times that
8339      branch was _not_ taken; the differenc between the two counters is
8340      the number of times the branch _was_ taken.
8342      A table of every such `Label' is also generated, so that the
8343      external postprocessor `gbr960' (supplied by Intel) can locate all
8344      the counters.  This table is always labeled `__BRANCH_TABLE__';
8345      this is a local symbol to permit collecting statistics for many
8346      separate object files.  The table is word aligned, and begins with
8347      a two-word header.  The first word, initialized to 0, is used in
8348      maintaining linked lists of branch tables.  The second word is a
8349      count of the number of entries in the table, which follow
8350      immediately: each is a word, pointing to one of the labels
8351      illustrated above.
8353            +------------+------------+------------+ ... +------------+
8354            |            |            |            |     |            |
8355            |  *NEXT     |  COUNT: N  | *BRLAB 1   |     | *BRLAB N   |
8356            |            |            |            |     |            |
8357            +------------+------------+------------+ ... +------------+
8358           
8359                          __BRANCH_TABLE__ layout
8361      The first word of the header is used to locate multiple branch
8362      tables, since each object file may contain one. Normally the links
8363      are maintained with a call to an initialization routine, placed at
8364      the beginning of each function in the file.  The GNU C compiler
8365      generates these calls automatically when you give it a `-b' option.
8366      For further details, see the documentation of `gbr960'.
8368 `-no-relax'
8369      Normally, Compare-and-Branch instructions with targets that require
8370      displacements greater than 13 bits (or that have external targets)
8371      are replaced with the corresponding compare (or `chkbit') and
8372      branch instructions.  You can use the `-no-relax' option to
8373      specify that `as' should generate errors instead, if the target
8374      displacement is larger than 13 bits.
8376      This option does not affect the Compare-and-Jump instructions; the
8377      code emitted for them is _always_ adjusted when necessary
8378      (depending on displacement size), regardless of whether you use
8379      `-no-relax'.
8381 \x1f
8382 File: as.info,  Node: Floating Point-i960,  Next: Directives-i960,  Prev: Options-i960,  Up: i960-Dependent
8384 Floating Point
8385 --------------
8387    `as' generates IEEE floating-point numbers for the directives
8388 `.float', `.double', `.extended', and `.single'.
8390 \x1f
8391 File: as.info,  Node: Directives-i960,  Next: Opcodes for i960,  Prev: Floating Point-i960,  Up: i960-Dependent
8393 i960 Machine Directives
8394 -----------------------
8396 `.bss SYMBOL, LENGTH, ALIGN'
8397      Reserve LENGTH bytes in the bss section for a local SYMBOL,
8398      aligned to the power of two specified by ALIGN.  LENGTH and ALIGN
8399      must be positive absolute expressions.  This directive differs
8400      from `.lcomm' only in that it permits you to specify an alignment.
8401      *Note `.lcomm': Lcomm.
8403 `.extended FLONUMS'
8404      `.extended' expects zero or more flonums, separated by commas; for
8405      each flonum, `.extended' emits an IEEE extended-format (80-bit)
8406      floating-point number.
8408 `.leafproc CALL-LAB, BAL-LAB'
8409      You can use the `.leafproc' directive in conjunction with the
8410      optimized `callj' instruction to enable faster calls of leaf
8411      procedures.  If a procedure is known to call no other procedures,
8412      you may define an entry point that skips procedure prolog code
8413      (and that does not depend on system-supplied saved context), and
8414      declare it as the BAL-LAB using `.leafproc'.  If the procedure
8415      also has an entry point that goes through the normal prolog, you
8416      can specify that entry point as CALL-LAB.
8418      A `.leafproc' declaration is meant for use in conjunction with the
8419      optimized call instruction `callj'; the directive records the data
8420      needed later to choose between converting the `callj' into a `bal'
8421      or a `call'.
8423      CALL-LAB is optional; if only one argument is present, or if the
8424      two arguments are identical, the single argument is assumed to be
8425      the `bal' entry point.
8427 `.sysproc NAME, INDEX'
8428      The `.sysproc' directive defines a name for a system procedure.
8429      After you define it using `.sysproc', you can use NAME to refer to
8430      the system procedure identified by INDEX when calling procedures
8431      with the optimized call instruction `callj'.
8433      Both arguments are required; INDEX must be between 0 and 31
8434      (inclusive).
8436 \x1f
8437 File: as.info,  Node: Opcodes for i960,  Prev: Directives-i960,  Up: i960-Dependent
8439 i960 Opcodes
8440 ------------
8442    All Intel 960 machine instructions are supported; *note i960
8443 Command-line Options: Options-i960. for a discussion of selecting the
8444 instruction subset for a particular 960 architecture.
8446    Some opcodes are processed beyond simply emitting a single
8447 corresponding instruction: `callj', and Compare-and-Branch or
8448 Compare-and-Jump instructions with target displacements larger than 13
8449 bits.
8451 * Menu:
8453 * callj-i960::                  `callj'
8454 * Compare-and-branch-i960::     Compare-and-Branch
8456 \x1f
8457 File: as.info,  Node: callj-i960,  Next: Compare-and-branch-i960,  Up: Opcodes for i960
8459 `callj'
8460 .......
8462    You can write `callj' to have the assembler or the linker determine
8463 the most appropriate form of subroutine call: `call', `bal', or
8464 `calls'.  If the assembly source contains enough information--a
8465 `.leafproc' or `.sysproc' directive defining the operand--then `as'
8466 translates the `callj'; if not, it simply emits the `callj', leaving it
8467 for the linker to resolve.
8469 \x1f
8470 File: as.info,  Node: Compare-and-branch-i960,  Prev: callj-i960,  Up: Opcodes for i960
8472 Compare-and-Branch
8473 ..................
8475    The 960 architectures provide combined Compare-and-Branch
8476 instructions that permit you to store the branch target in the lower 13
8477 bits of the instruction word itself.  However, if you specify a branch
8478 target far enough away that its address won't fit in 13 bits, the
8479 assembler can either issue an error, or convert your Compare-and-Branch
8480 instruction into separate instructions to do the compare and the branch.
8482    Whether `as' gives an error or expands the instruction depends on
8483 two choices you can make: whether you use the `-no-relax' option, and
8484 whether you use a "Compare and Branch" instruction or a "Compare and
8485 Jump" instruction.  The "Jump" instructions are _always_ expanded if
8486 necessary; the "Branch" instructions are expanded when necessary
8487 _unless_ you specify `-no-relax'--in which case `as' gives an error
8488 instead.
8490    These are the Compare-and-Branch instructions, their "Jump" variants,
8491 and the instruction pairs they may expand into:
8493              Compare and
8494           Branch      Jump       Expanded to
8495           ------    ------       ------------
8496              bbc                 chkbit; bno
8497              bbs                 chkbit; bo
8498           cmpibe    cmpije       cmpi; be
8499           cmpibg    cmpijg       cmpi; bg
8500          cmpibge   cmpijge       cmpi; bge
8501           cmpibl    cmpijl       cmpi; bl
8502          cmpible   cmpijle       cmpi; ble
8503          cmpibno   cmpijno       cmpi; bno
8504          cmpibne   cmpijne       cmpi; bne
8505           cmpibo    cmpijo       cmpi; bo
8506           cmpobe    cmpoje       cmpo; be
8507           cmpobg    cmpojg       cmpo; bg
8508          cmpobge   cmpojge       cmpo; bge
8509           cmpobl    cmpojl       cmpo; bl
8510          cmpoble   cmpojle       cmpo; ble
8511          cmpobne   cmpojne       cmpo; bne
8513 \x1f
8514 File: as.info,  Node: IP2K-Dependent,  Next: M32R-Dependent,  Prev: i960-Dependent,  Up: Machine Dependencies
8516 IP2K Dependent Features
8517 =======================
8519 * Menu:
8521 * IP2K-Opts::                   IP2K Options
8523 \x1f
8524 File: as.info,  Node: IP2K-Opts,  Up: IP2K-Dependent
8526 IP2K Options
8527 ------------
8529    The Ubicom IP2K version of `as' has a few machine dependent options:
8531 `-mip2022ext'
8532      `as' can assemble the extended IP2022 instructions, but it will
8533      only do so if this is specifically allowed via this command line
8534      option.
8536 `-mip2022'
8537      This option restores the assembler's default behaviour of not
8538      permitting the extended IP2022 instructions to be assembled.
8540 \x1f
8541 File: as.info,  Node: M32R-Dependent,  Next: M68K-Dependent,  Prev: IP2K-Dependent,  Up: Machine Dependencies
8543 M32R Dependent Features
8544 =======================
8546 * Menu:
8548 * M32R-Opts::                   M32R Options
8549 * M32R-Directives::             M32R Directives
8550 * M32R-Warnings::               M32R Warnings
8552 \x1f
8553 File: as.info,  Node: M32R-Opts,  Next: M32R-Directives,  Up: M32R-Dependent
8555 M32R Options
8556 ------------
8558    The Renease M32R version of `as' has a few machine dependent options:
8560 `-m32rx'
8561      `as' can assemble code for several different members of the
8562      Renesas M32R family.  Normally the default is to assemble code for
8563      the M32R microprocessor.  This option may be used to change the
8564      default to the M32RX microprocessor, which adds some more
8565      instructions to the basic M32R instruction set, and some
8566      additional parameters to some of the original instructions.
8568 `-m32r2'
8569      This option changes the target processor to the the M32R2
8570      microprocessor.
8572 `-m32r'
8573      This option can be used to restore the assembler's default
8574      behaviour of assembling for the M32R microprocessor.  This can be
8575      useful if the default has been changed by a previous command line
8576      option.
8578 `-little'
8579      This option tells the assembler to produce little-endian code and
8580      data.  The default is dependent upon how the toolchain was
8581      configured.
8583 `-EL'
8584      This is a synonum for _-little_.
8586 `-big'
8587      This option tells the assembler to produce big-endian code and
8588      data.
8590 `-EB'
8591      This is a synonum for _-big_.
8593 `-KPIC'
8594      This option specifies that the output of the assembler should be
8595      marked as position-independent code (PIC).
8597 `-parallel'
8598      This option tells the assembler to attempts to combine two
8599      sequential instructions into a single, parallel instruction, where
8600      it is legal to do so.
8602 `-no-parallel'
8603      This option disables a previously enabled _-parallel_ option.
8605 `-O'
8606      This option tells the assembler to attempt to optimize the
8607      instructions that it produces.  This includes filling delay slots
8608      and converting sequential instructions into parallel ones.  This
8609      option implies _-parallel_.
8611 `-warn-explicit-parallel-conflicts'
8612      Instructs `as' to produce warning messages when questionable
8613      parallel instructions are encountered.  This option is enabled by
8614      default, but `gcc' disables it when it invokes `as' directly.
8615      Questionable instructions are those whoes behaviour would be
8616      different if they were executed sequentially.  For example the
8617      code fragment `mv r1, r2 || mv r3, r1' produces a different result
8618      from `mv r1, r2 \n mv r3, r1' since the former moves r1 into r3
8619      and then r2 into r1, whereas the later moves r2 into r1 and r3.
8621 `-Wp'
8622      This is a shorter synonym for the
8623      _-warn-explicit-parallel-conflicts_ option.
8625 `-no-warn-explicit-parallel-conflicts'
8626      Instructs `as' not to produce warning messages when questionable
8627      parallel instructions are encountered.
8629 `-Wnp'
8630      This is a shorter synonym for the
8631      _-no-warn-explicit-parallel-conflicts_ option.
8633 `-ignore-parallel-conflicts'
8634      This option tells the assembler's to stop checking parallel
8635      instructions for contraint violations.  This ability is provided
8636      for hardware vendors testing chip designs and should not be used
8637      under normal circumstances.
8639 `-no-ignore-parallel-conflicts'
8640      This option restores the assembler's default behaviour of checking
8641      parallel instructions to detect constraint violations.
8643 `-Ip'
8644      This is a shorter synonym for the _-ignore-parallel-conflicts_
8645      option.
8647 `-nIp'
8648      This is a shorter synonym for the _-no-ignore-parallel-conflicts_
8649      option.
8651 `-warn-unmatched-high'
8652      This option tells the assembler to produce a warning message if a
8653      `.high' pseudo op is encountered without a mathcing `.low' pseudo
8654      op.  The presence of such an unmatches pseudo op usually indicates
8655      a programming error.
8657 `-no-warn-unmatched-high'
8658      Disables a previously enabled _-warn-unmatched-high_ option.
8660 `-Wuh'
8661      This is a shorter synonym for the _-warn-unmatched-high_ option.
8663 `-Wnuh'
8664      This is a shorter synonym for the _-no-warn-unmatched-high_ option.
8666 \x1f
8667 File: as.info,  Node: M32R-Directives,  Next: M32R-Warnings,  Prev: M32R-Opts,  Up: M32R-Dependent
8669 M32R Directives
8670 ---------------
8672    The Renease M32R version of `as' has a few architecture specific
8673 directives:
8675 `low EXPRESSION'
8676      The `low' directive computes the value of its expression and
8677      places the lower 16-bits of the result into the immediate-field of
8678      the instruction.  For example:
8680              or3   r0, r0, #low(0x12345678) ; compute r0 = r0 | 0x5678
8681              add3, r0, r0, #low(fred)   ; compute r0 = r0 + low 16-bits of address of fred
8683 `high EXPRESSION'
8684      The `high' directive computes the value of its expression and
8685      places the upper 16-bits of the result into the immediate-field of
8686      the instruction.  For example:
8688              seth  r0, #high(0x12345678) ; compute r0 = 0x12340000
8689              seth, r0, #high(fred)       ; compute r0 = upper 16-bits of address of fred
8691 `shigh EXPRESSION'
8692      The `shigh' directive is very similar to the `high' directive.  It
8693      also computes the value of its expression and places the upper
8694      16-bits of the result into the immediate-field of the instruction.
8695      The difference is that `shigh' also checks to see if the lower
8696      16-bits could be interpreted as a signed number, and if so it
8697      assumes that a borrow will occur from the upper-16 bits.  To
8698      compensate for this the `shigh' directive pre-biases the upper 16
8699      bit value by adding one to it.  For example:
8701      For example:
8703              seth  r0, #shigh(0x12345678) ; compute r0 = 0x12340000
8704              seth  r0, #shigh(0x00008000) ; compute r0 = 0x00010000
8706      In the second example the lower 16-bits are 0x8000.  If these are
8707      treated as a signed value and sign extended to 32-bits then the
8708      value becomes 0xffff8000.  If this value is then added to
8709      0x00010000 then the result is 0x00008000.
8711      This behaviour is to allow for the different semantics of the
8712      `or3' and `add3' instructions.  The `or3' instruction treats its
8713      16-bit immediate argument as unsigned whereas the `add3' treats
8714      its 16-bit immediate as a signed value.  So for example:
8716              seth  r0, #shigh(0x00008000)
8717              add3  r0, r0, #low(0x00008000)
8719      Produces the correct result in r0, whereas:
8721              seth  r0, #shigh(0x00008000)
8722              or3   r0, r0, #low(0x00008000)
8724      Stores 0xffff8000 into r0.
8726      Note - the `shigh' directive does not know where in the assembly
8727      source code the lower 16-bits of the value are going set, so it
8728      cannot check to make sure that an `or3' instruction is being used
8729      rather than an `add3' instruction.  It is up to the programmer to
8730      make sure that correct directives are used.
8732 `.m32r'
8733      The directive performs a similar thing as the _-m32r_ command line
8734      option.  It tells the assembler to only accept M32R instructions
8735      from now on.  An instructions from later M32R architectures are
8736      refused.
8738 `.m32rx'
8739      The directive performs a similar thing as the _-m32rx_ command
8740      line option.  It tells the assembler to start accepting the extra
8741      instructions in the M32RX ISA as well as the ordinary M32R ISA.
8743 `.m32r2'
8744      The directive performs a similar thing as the _-m32r2_ command
8745      line option.  It tells the assembler to start accepting the extra
8746      instructions in the M32R2 ISA as well as the ordinary M32R ISA.
8748 `.little'
8749      The directive performs a similar thing as the _-little_ command
8750      line option.  It tells the assembler to start producing
8751      little-endian code and data.  This option should be used with care
8752      as producing mixed-endian binary files is frought with danger.
8754 `.big'
8755      The directive performs a similar thing as the _-big_ command line
8756      option.  It tells the assembler to start producing big-endian code
8757      and data.  This option should be used with care as producing
8758      mixed-endian binary files is frought with danger.
8760 \x1f
8761 File: as.info,  Node: M32R-Warnings,  Prev: M32R-Directives,  Up: M32R-Dependent
8763 M32R Warnings
8764 -------------
8766    There are several warning and error messages that can be produced by
8767 `as' which are specific to the M32R:
8769 `output of 1st instruction is the same as an input to 2nd instruction - is this intentional ?'
8770      This message is only produced if warnings for explicit parallel
8771      conflicts have been enabled.  It indicates that the assembler has
8772      encountered a parallel instruction in which the destination
8773      register of the left hand instruction is used as an input register
8774      in the right hand instruction.  For example in this code fragment
8775      `mv r1, r2 || neg r3, r1' register r1 is the destination of the
8776      move instruction and the input to the neg instruction.
8778 `output of 2nd instruction is the same as an input to 1st instruction - is this intentional ?'
8779      This message is only produced if warnings for explicit parallel
8780      conflicts have been enabled.  It indicates that the assembler has
8781      encountered a parallel instruction in which the destination
8782      register of the right hand instruction is used as an input
8783      register in the left hand instruction.  For example in this code
8784      fragment `mv r1, r2 || neg r2, r3' register r2 is the destination
8785      of the neg instruction and the input to the move instruction.
8787 `instruction `...' is for the M32RX only'
8788      This message is produced when the assembler encounters an
8789      instruction which is only supported by the M32Rx processor, and
8790      the `-m32rx' command line flag has not been specified to allow
8791      assembly of such instructions.
8793 `unknown instruction `...''
8794      This message is produced when the assembler encounters an
8795      instruction which it does not recognise.
8797 `only the NOP instruction can be issued in parallel on the m32r'
8798      This message is produced when the assembler encounters a parallel
8799      instruction which does not involve a NOP instruction and the
8800      `-m32rx' command line flag has not been specified.  Only the M32Rx
8801      processor is able to execute two instructions in parallel.
8803 `instruction `...' cannot be executed in parallel.'
8804      This message is produced when the assembler encounters a parallel
8805      instruction which is made up of one or two instructions which
8806      cannot be executed in parallel.
8808 `Instructions share the same execution pipeline'
8809      This message is produced when the assembler encounters a parallel
8810      instruction whoes components both use the same execution pipeline.
8812 `Instructions write to the same destination register.'
8813      This message is produced when the assembler encounters a parallel
8814      instruction where both components attempt to modify the same
8815      register.  For example these code fragments will produce this
8816      message: `mv r1, r2 || neg r1, r3' `jl r0 || mv r14, r1' `st r2,
8817      @-r1 || mv r1, r3' `mv r1, r2 || ld r0, @r1+' `cmp r1, r2 || addx
8818      r3, r4' (Both write to the condition bit)
8820 \x1f
8821 File: as.info,  Node: M68K-Dependent,  Next: M68HC11-Dependent,  Prev: M32R-Dependent,  Up: Machine Dependencies
8823 M680x0 Dependent Features
8824 =========================
8826 * Menu:
8828 * M68K-Opts::                   M680x0 Options
8829 * M68K-Syntax::                 Syntax
8830 * M68K-Moto-Syntax::            Motorola Syntax
8831 * M68K-Float::                  Floating Point
8832 * M68K-Directives::             680x0 Machine Directives
8833 * M68K-opcodes::                Opcodes
8835 \x1f
8836 File: as.info,  Node: M68K-Opts,  Next: M68K-Syntax,  Up: M68K-Dependent
8838 M680x0 Options
8839 --------------
8841    The Motorola 680x0 version of `as' has a few machine dependent
8842 options:
8844 `-l'
8845      You can use the `-l' option to shorten the size of references to
8846      undefined symbols.  If you do not use the `-l' option, references
8847      to undefined symbols are wide enough for a full `long' (32 bits).
8848      (Since `as' cannot know where these symbols end up, `as' can only
8849      allocate space for the linker to fill in later.  Since `as' does
8850      not know how far away these symbols are, it allocates as much
8851      space as it can.)  If you use this option, the references are only
8852      one word wide (16 bits).  This may be useful if you want the
8853      object file to be as small as possible, and you know that the
8854      relevant symbols are always less than 17 bits away.
8856 `--register-prefix-optional'
8857      For some configurations, especially those where the compiler
8858      normally does not prepend an underscore to the names of user
8859      variables, the assembler requires a `%' before any use of a
8860      register name.  This is intended to let the assembler distinguish
8861      between C variables and functions named `a0' through `a7', and so
8862      on.  The `%' is always accepted, but is not required for certain
8863      configurations, notably `sun3'.  The `--register-prefix-optional'
8864      option may be used to permit omitting the `%' even for
8865      configurations for which it is normally required.  If this is
8866      done, it will generally be impossible to refer to C variables and
8867      functions with the same names as register names.
8869 `--bitwise-or'
8870      Normally the character `|' is treated as a comment character, which
8871      means that it can not be used in expressions.  The `--bitwise-or'
8872      option turns `|' into a normal character.  In this mode, you must
8873      either use C style comments, or start comments with a `#' character
8874      at the beginning of a line.
8876 `--base-size-default-16  --base-size-default-32'
8877      If you use an addressing mode with a base register without
8878      specifying the size, `as' will normally use the full 32 bit value.
8879      For example, the addressing mode `%a0@(%d0)' is equivalent to
8880      `%a0@(%d0:l)'.  You may use the `--base-size-default-16' option to
8881      tell `as' to default to using the 16 bit value.  In this case,
8882      `%a0@(%d0)' is equivalent to `%a0@(%d0:w)'.  You may use the
8883      `--base-size-default-32' option to restore the default behaviour.
8885 `--disp-size-default-16  --disp-size-default-32'
8886      If you use an addressing mode with a displacement, and the value
8887      of the displacement is not known, `as' will normally assume that
8888      the value is 32 bits.  For example, if the symbol `disp' has not
8889      been defined, `as' will assemble the addressing mode
8890      `%a0@(disp,%d0)' as though `disp' is a 32 bit value.  You may use
8891      the `--disp-size-default-16' option to tell `as' to instead assume
8892      that the displacement is 16 bits.  In this case, `as' will
8893      assemble `%a0@(disp,%d0)' as though `disp' is a 16 bit value.  You
8894      may use the `--disp-size-default-32' option to restore the default
8895      behaviour.
8897 `--pcrel'
8898      Always keep branches PC-relative.  In the M680x0 architecture all
8899      branches are defined as PC-relative.  However, on some processors
8900      they are limited to word displacements maximum.  When `as' needs a
8901      long branch that is not available, it normally emits an absolute
8902      jump instead.  This option disables this substitution.  When this
8903      option is given and no long branches are available, only word
8904      branches will be emitted.  An error message will be generated if a
8905      word branch cannot reach its target.  This option has no effect on
8906      68020 and other processors that have long branches.  *note Branch
8907      Improvement: M68K-Branch..
8909 `-m68000'
8910      `as' can assemble code for several different members of the
8911      Motorola 680x0 family.  The default depends upon how `as' was
8912      configured when it was built; normally, the default is to assemble
8913      code for the 68020 microprocessor.  The following options may be
8914      used to change the default.  These options control which
8915      instructions and addressing modes are permitted.  The members of
8916      the 680x0 family are very similar.  For detailed information about
8917      the differences, see the Motorola manuals.
8919     `-m68000'
8920     `-m68ec000'
8921     `-m68hc000'
8922     `-m68hc001'
8923     `-m68008'
8924     `-m68302'
8925     `-m68306'
8926     `-m68307'
8927     `-m68322'
8928     `-m68356'
8929           Assemble for the 68000. `-m68008', `-m68302', and so on are
8930           synonyms for `-m68000', since the chips are the same from the
8931           point of view of the assembler.
8933     `-m68010'
8934           Assemble for the 68010.
8936     `-m68020'
8937     `-m68ec020'
8938           Assemble for the 68020.  This is normally the default.
8940     `-m68030'
8941     `-m68ec030'
8942           Assemble for the 68030.
8944     `-m68040'
8945     `-m68ec040'
8946           Assemble for the 68040.
8948     `-m68060'
8949     `-m68ec060'
8950           Assemble for the 68060.
8952     `-mcpu32'
8953     `-m68330'
8954     `-m68331'
8955     `-m68332'
8956     `-m68333'
8957     `-m68334'
8958     `-m68336'
8959     `-m68340'
8960     `-m68341'
8961     `-m68349'
8962     `-m68360'
8963           Assemble for the CPU32 family of chips.
8965     `-m5200'
8967     `-m5202'
8969     `-m5204'
8971     `-m5206'
8973     `-m5206e'
8975     `-m528x'
8977     `-m5307'
8979     `-m5407'
8981     `-mcfv4'
8983     `-mcfv4e'
8984           Assemble for the ColdFire family of chips.
8986     `-m68881'
8987     `-m68882'
8988           Assemble 68881 floating point instructions.  This is the
8989           default for the 68020, 68030, and the CPU32.  The 68040 and
8990           68060 always support floating point instructions.
8992     `-mno-68881'
8993           Do not assemble 68881 floating point instructions.  This is
8994           the default for 68000 and the 68010.  The 68040 and 68060
8995           always support floating point instructions, even if this
8996           option is used.
8998     `-m68851'
8999           Assemble 68851 MMU instructions.  This is the default for the
9000           68020, 68030, and 68060.  The 68040 accepts a somewhat
9001           different set of MMU instructions; `-m68851' and `-m68040'
9002           should not be used together.
9004     `-mno-68851'
9005           Do not assemble 68851 MMU instructions.  This is the default
9006           for the 68000, 68010, and the CPU32.  The 68040 accepts a
9007           somewhat different set of MMU instructions.
9009 \x1f
9010 File: as.info,  Node: M68K-Syntax,  Next: M68K-Moto-Syntax,  Prev: M68K-Opts,  Up: M68K-Dependent
9012 Syntax
9013 ------
9015    This syntax for the Motorola 680x0 was developed at MIT.
9017    The 680x0 version of `as' uses instructions names and syntax
9018 compatible with the Sun assembler.  Intervening periods are ignored;
9019 for example, `movl' is equivalent to `mov.l'.
9021    In the following table APC stands for any of the address registers
9022 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address
9023 relative to the program counter (`%zpc'), a suppressed address register
9024 (`%za0' through `%za7'), or it may be omitted entirely.  The use of
9025 SIZE means one of `w' or `l', and it may be omitted, along with the
9026 leading colon, unless a scale is also specified.  The use of SCALE
9027 means one of `1', `2', `4', or `8', and it may always be omitted along
9028 with the leading colon.
9030    The following addressing modes are understood:
9031 "Immediate"
9032      `#NUMBER'
9034 "Data Register"
9035      `%d0' through `%d7'
9037 "Address Register"
9038      `%a0' through `%a7'
9039      `%a7' is also known as `%sp', i.e. the Stack Pointer.  `%a6' is
9040      also known as `%fp', the Frame Pointer.
9042 "Address Register Indirect"
9043      `%a0@' through `%a7@'
9045 "Address Register Postincrement"
9046      `%a0@+' through `%a7@+'
9048 "Address Register Predecrement"
9049      `%a0@-' through `%a7@-'
9051 "Indirect Plus Offset"
9052      `APC@(NUMBER)'
9054 "Index"
9055      `APC@(NUMBER,REGISTER:SIZE:SCALE)'
9057      The NUMBER may be omitted.
9059 "Postindex"
9060      `APC@(NUMBER)@(ONUMBER,REGISTER:SIZE:SCALE)'
9062      The ONUMBER or the REGISTER, but not both, may be omitted.
9064 "Preindex"
9065      `APC@(NUMBER,REGISTER:SIZE:SCALE)@(ONUMBER)'
9067      The NUMBER may be omitted.  Omitting the REGISTER produces the
9068      Postindex addressing mode.
9070 "Absolute"
9071      `SYMBOL', or `DIGITS', optionally followed by `:b', `:w', or `:l'.
9073 \x1f
9074 File: as.info,  Node: M68K-Moto-Syntax,  Next: M68K-Float,  Prev: M68K-Syntax,  Up: M68K-Dependent
9076 Motorola Syntax
9077 ---------------
9079    The standard Motorola syntax for this chip differs from the syntax
9080 already discussed (*note Syntax: M68K-Syntax.).  `as' can accept
9081 Motorola syntax for operands, even if MIT syntax is used for other
9082 operands in the same instruction.  The two kinds of syntax are fully
9083 compatible.
9085    In the following table APC stands for any of the address registers
9086 (`%a0' through `%a7'), the program counter (`%pc'), the zero-address
9087 relative to the program counter (`%zpc'), or a suppressed address
9088 register (`%za0' through `%za7').  The use of SIZE means one of `w' or
9089 `l', and it may always be omitted along with the leading dot.  The use
9090 of SCALE means one of `1', `2', `4', or `8', and it may always be
9091 omitted along with the leading asterisk.
9093    The following additional addressing modes are understood:
9095 "Address Register Indirect"
9096      `(%a0)' through `(%a7)'
9097      `%a7' is also known as `%sp', i.e. the Stack Pointer.  `%a6' is
9098      also known as `%fp', the Frame Pointer.
9100 "Address Register Postincrement"
9101      `(%a0)+' through `(%a7)+'
9103 "Address Register Predecrement"
9104      `-(%a0)' through `-(%a7)'
9106 "Indirect Plus Offset"
9107      `NUMBER(%A0)' through `NUMBER(%A7)', or `NUMBER(%PC)'.
9109      The NUMBER may also appear within the parentheses, as in
9110      `(NUMBER,%A0)'.  When used with the PC, the NUMBER may be omitted
9111      (with an address register, omitting the NUMBER produces Address
9112      Register Indirect mode).
9114 "Index"
9115      `NUMBER(APC,REGISTER.SIZE*SCALE)'
9117      The NUMBER may be omitted, or it may appear within the
9118      parentheses.  The APC may be omitted.  The REGISTER and the APC
9119      may appear in either order.  If both APC and REGISTER are address
9120      registers, and the SIZE and SCALE are omitted, then the first
9121      register is taken as the base register, and the second as the
9122      index register.
9124 "Postindex"
9125      `([NUMBER,APC],REGISTER.SIZE*SCALE,ONUMBER)'
9127      The ONUMBER, or the REGISTER, or both, may be omitted.  Either the
9128      NUMBER or the APC may be omitted, but not both.
9130 "Preindex"
9131      `([NUMBER,APC,REGISTER.SIZE*SCALE],ONUMBER)'
9133      The NUMBER, or the APC, or the REGISTER, or any two of them, may
9134      be omitted.  The ONUMBER may be omitted.  The REGISTER and the APC
9135      may appear in either order.  If both APC and REGISTER are address
9136      registers, and the SIZE and SCALE are omitted, then the first
9137      register is taken as the base register, and the second as the
9138      index register.
9140 \x1f
9141 File: as.info,  Node: M68K-Float,  Next: M68K-Directives,  Prev: M68K-Moto-Syntax,  Up: M68K-Dependent
9143 Floating Point
9144 --------------
9146    Packed decimal (P) format floating literals are not supported.  Feel
9147 free to add the code!
9149    The floating point formats generated by directives are these.
9151 `.float'
9152      `Single' precision floating point constants.
9154 `.double'
9155      `Double' precision floating point constants.
9157 `.extend'
9158 `.ldouble'
9159      `Extended' precision (`long double') floating point constants.
9161 \x1f
9162 File: as.info,  Node: M68K-Directives,  Next: M68K-opcodes,  Prev: M68K-Float,  Up: M68K-Dependent
9164 680x0 Machine Directives
9165 ------------------------
9167    In order to be compatible with the Sun assembler the 680x0 assembler
9168 understands the following directives.
9170 `.data1'
9171      This directive is identical to a `.data 1' directive.
9173 `.data2'
9174      This directive is identical to a `.data 2' directive.
9176 `.even'
9177      This directive is a special case of the `.align' directive; it
9178      aligns the output to an even byte boundary.
9180 `.skip'
9181      This directive is identical to a `.space' directive.
9183 \x1f
9184 File: as.info,  Node: M68K-opcodes,  Prev: M68K-Directives,  Up: M68K-Dependent
9186 Opcodes
9187 -------
9189 * Menu:
9191 * M68K-Branch::                 Branch Improvement
9192 * M68K-Chars::                  Special Characters
9194 \x1f
9195 File: as.info,  Node: M68K-Branch,  Next: M68K-Chars,  Up: M68K-opcodes
9197 Branch Improvement
9198 ..................
9200    Certain pseudo opcodes are permitted for branch instructions.  They
9201 expand to the shortest branch instruction that reach the target.
9202 Generally these mnemonics are made by substituting `j' for `b' at the
9203 start of a Motorola mnemonic.
9205    The following table summarizes the pseudo-operations.  A `*' flags
9206 cases that are more fully described after the table:
9208                Displacement
9209                +------------------------------------------------------------
9210                |                68020           68000/10, not PC-relative OK
9211      Pseudo-Op |BYTE    WORD    LONG            ABSOLUTE LONG JUMP    **
9212                +------------------------------------------------------------
9213           jbsr |bsrs    bsrw    bsrl            jsr
9214            jra |bras    braw    bral            jmp
9215      *     jXX |bXXs    bXXw    bXXl            bNXs;jmp
9216      *    dbXX | N/A    dbXXw   dbXX;bras;bral  dbXX;bras;jmp
9217           fjXX | N/A    fbXXw   fbXXl            N/A
9218      
9219      XX: condition
9220      NX: negative of condition XX
9221                        `*'--see full description below
9222          `**'--this expansion mode is disallowed by `--pcrel'
9223 `jbsr'
9224 `jra'
9225      These are the simplest jump pseudo-operations; they always map to
9226      one particular machine instruction, depending on the displacement
9227      to the branch target.  This instruction will be a byte or word
9228      branch is that is sufficient.  Otherwise, a long branch will be
9229      emitted if available.  If no long branches are available and the
9230      `--pcrel' option is not given, an absolute long jump will be
9231      emitted instead.  If no long branches are available, the `--pcrel'
9232      option is given, and a word branch cannot reach the target, an
9233      error message is generated.
9235      In addition to standard branch operands, `as' allows these
9236      pseudo-operations to have all operands that are allowed for jsr
9237      and jmp, substituting these instructions if the operand given is
9238      not valid for a branch instruction.
9240 `jXX'
9241      Here, `jXX' stands for an entire family of pseudo-operations,
9242      where XX is a conditional branch or condition-code test.  The full
9243      list of pseudo-ops in this family is:
9244            jhi   jls   jcc   jcs   jne   jeq   jvc
9245            jvs   jpl   jmi   jge   jlt   jgt   jle
9247      Usually, each of these pseudo-operations expands to a single branch
9248      instruction.  However, if a word branch is not sufficient, no long
9249      branches are available, and the `--pcrel' option is not given, `as'
9250      issues a longer code fragment in terms of NX, the opposite
9251      condition to XX.  For example, under these conditions:
9252               jXX foo
9253      gives
9254                bNXs oof
9255                jmp foo
9256            oof:
9258 `dbXX'
9259      The full family of pseudo-operations covered here is
9260            dbhi   dbls   dbcc   dbcs   dbne   dbeq   dbvc
9261            dbvs   dbpl   dbmi   dbge   dblt   dbgt   dble
9262            dbf    dbra   dbt
9264      Motorola `dbXX' instructions allow word displacements only.  When
9265      a word displacement is sufficient, each of these pseudo-operations
9266      expands to the corresponding Motorola instruction.  When a word
9267      displacement is not sufficient and long branches are available,
9268      when the source reads `dbXX foo', `as' emits
9269                dbXX oo1
9270                bras oo2
9271            oo1:bral foo
9272            oo2:
9274      If, however, long branches are not available and the `--pcrel'
9275      option is not given, `as' emits
9276                dbXX oo1
9277                bras oo2
9278            oo1:jmp foo
9279            oo2:
9281 `fjXX'
9282      This family includes
9283            fjne   fjeq   fjge   fjlt   fjgt   fjle   fjf
9284            fjt    fjgl   fjgle  fjnge  fjngl  fjngle fjngt
9285            fjnle  fjnlt  fjoge  fjogl  fjogt  fjole  fjolt
9286            fjor   fjseq  fjsf   fjsne  fjst   fjueq  fjuge
9287            fjugt  fjule  fjult  fjun
9289      Each of these pseudo-operations always expands to a single Motorola
9290      coprocessor branch instruction, word or long.  All Motorola
9291      coprocessor branch instructions allow both word and long
9292      displacements.
9294 \x1f
9295 File: as.info,  Node: M68K-Chars,  Prev: M68K-Branch,  Up: M68K-opcodes
9297 Special Characters
9298 ..................
9300 The immediate character is `#' for Sun compatibility.  The line-comment
9301 character is `|' (unless the `--bitwise-or' option is used).  If a `#'
9302 appears at the beginning of a line, it is treated as a comment unless
9303 it looks like `# line file', in which case it is treated normally.
9305 \x1f
9306 File: as.info,  Node: M68HC11-Dependent,  Next: M88K-Dependent,  Prev: M68K-Dependent,  Up: Machine Dependencies
9308 M68HC11 and M68HC12 Dependent Features
9309 ======================================
9311 * Menu:
9313 * M68HC11-Opts::                   M68HC11 and M68HC12 Options
9314 * M68HC11-Syntax::                 Syntax
9315 * M68HC11-Modifiers::              Symbolic Operand Modifiers
9316 * M68HC11-Directives::             Assembler Directives
9317 * M68HC11-Float::                  Floating Point
9318 * M68HC11-opcodes::                Opcodes
9320 \x1f
9321 File: as.info,  Node: M68HC11-Opts,  Next: M68HC11-Syntax,  Up: M68HC11-Dependent
9323 M68HC11 and M68HC12 Options
9324 ---------------------------
9326    The Motorola 68HC11 and 68HC12 version of `as' have a few machine
9327 dependent options.
9329 `-m68hc11'
9330      This option switches the assembler in the M68HC11 mode. In this
9331      mode, the assembler only accepts 68HC11 operands and mnemonics. It
9332      produces code for the 68HC11.
9334 `-m68hc12'
9335      This option switches the assembler in the M68HC12 mode. In this
9336      mode, the assembler also accepts 68HC12 operands and mnemonics. It
9337      produces code for the 68HC12. A few 68HC11 instructions are
9338      replaced by some 68HC12 instructions as recommended by Motorola
9339      specifications.
9341 `-m68hcs12'
9342      This option switches the assembler in the M68HCS12 mode.  This
9343      mode is similar to `-m68hc12' but specifies to assemble for the
9344      68HCS12 series.  The only difference is on the assembling of the
9345      `movb' and `movw' instruction when a PC-relative operand is used.
9347 `-mshort'
9348      This option controls the ABI and indicates to use a 16-bit integer
9349      ABI.  It has no effect on the assembled instructions.  This is the
9350      default.
9352 `-mlong'
9353      This option controls the ABI and indicates to use a 32-bit integer
9354      ABI.
9356 `-mshort-double'
9357      This option controls the ABI and indicates to use a 32-bit float
9358      ABI.  This is the default.
9360 `-mlong-double'
9361      This option controls the ABI and indicates to use a 64-bit float
9362      ABI.
9364 `--strict-direct-mode'
9365      You can use the `--strict-direct-mode' option to disable the
9366      automatic translation of direct page mode addressing into extended
9367      mode when the instruction does not support direct mode.  For
9368      example, the `clr' instruction does not support direct page mode
9369      addressing. When it is used with the direct page mode, `as' will
9370      ignore it and generate an absolute addressing.  This option
9371      prevents `as' from doing this, and the wrong usage of the direct
9372      page mode will raise an error.
9374 `--short-branchs'
9375      The `--short-branchs' option turns off the translation of relative
9376      branches into absolute branches when the branch offset is out of
9377      range. By default `as' transforms the relative branch (`bsr',
9378      `bgt', `bge', `beq', `bne', `ble', `blt', `bhi', `bcc', `bls',
9379      `bcs', `bmi', `bvs', `bvs', `bra') into an absolute branch when
9380      the offset is out of the -128 .. 127 range.  In that case, the
9381      `bsr' instruction is translated into a `jsr', the `bra'
9382      instruction is translated into a `jmp' and the conditional branchs
9383      instructions are inverted and followed by a `jmp'. This option
9384      disables these translations and `as' will generate an error if a
9385      relative branch is out of range. This option does not affect the
9386      optimization associated to the `jbra', `jbsr' and `jbXX' pseudo
9387      opcodes.
9389 `--force-long-branchs'
9390      The `--force-long-branchs' option forces the translation of
9391      relative branches into absolute branches. This option does not
9392      affect the optimization associated to the `jbra', `jbsr' and
9393      `jbXX' pseudo opcodes.
9395 `--print-insn-syntax'
9396      You can use the `--print-insn-syntax' option to obtain the syntax
9397      description of the instruction when an error is detected.
9399 `--print-opcodes'
9400      The `--print-opcodes' option prints the list of all the
9401      instructions with their syntax. The first item of each line
9402      represents the instruction name and the rest of the line indicates
9403      the possible operands for that instruction. The list is printed in
9404      alphabetical order. Once the list is printed `as' exits.
9406 `--generate-example'
9407      The `--generate-example' option is similar to `--print-opcodes'
9408      but it generates an example for each instruction instead.
9410 \x1f
9411 File: as.info,  Node: M68HC11-Syntax,  Next: M68HC11-Modifiers,  Prev: M68HC11-Opts,  Up: M68HC11-Dependent
9413 Syntax
9414 ------
9416    In the M68HC11 syntax, the instruction name comes first and it may
9417 be followed by one or several operands (up to three). Operands are
9418 separated by comma (`,'). In the normal mode, `as' will complain if too
9419 many operands are specified for a given instruction. In the MRI mode
9420 (turned on with `-M' option), it will treat them as comments. Example:
9422      inx
9423      lda  #23
9424      bset 2,x #4
9425      brclr *bot #8 foo
9427    The following addressing modes are understood for 68HC11 and 68HC12:
9428 "Immediate"
9429      `#NUMBER'
9431 "Address Register"
9432      `NUMBER,X', `NUMBER,Y'
9434      The NUMBER may be omitted in which case 0 is assumed.
9436 "Direct Addressing mode"
9437      `*SYMBOL', or `*DIGITS'
9439 "Absolute"
9440      `SYMBOL', or `DIGITS'
9442    The M68HC12 has other more complex addressing modes. All of them are
9443 supported and they are represented below:
9445 "Constant Offset Indexed Addressing Mode"
9446      `NUMBER,REG'
9448      The NUMBER may be omitted in which case 0 is assumed.  The
9449      register can be either `X', `Y', `SP' or `PC'.  The assembler will
9450      use the smaller post-byte definition according to the constant
9451      value (5-bit constant offset, 9-bit constant offset or 16-bit
9452      constant offset).  If the constant is not known by the assembler
9453      it will use the 16-bit constant offset post-byte and the value
9454      will be resolved at link time.
9456 "Offset Indexed Indirect"
9457      `[NUMBER,REG]'
9459      The register can be either `X', `Y', `SP' or `PC'.
9461 "Auto Pre-Increment/Pre-Decrement/Post-Increment/Post-Decrement"
9462      `NUMBER,-REG' `NUMBER,+REG' `NUMBER,REG-' `NUMBER,REG+'
9464      The number must be in the range `-8'..`+8' and must not be 0.  The
9465      register can be either `X', `Y', `SP' or `PC'.
9467 "Accumulator Offset"
9468      `ACC,REG'
9470      The accumulator register can be either `A', `B' or `D'.  The
9471      register can be either `X', `Y', `SP' or `PC'.
9473 "Accumulator D offset indexed-indirect"
9474      `[D,REG]'
9476      The register can be either `X', `Y', `SP' or `PC'.
9478    For example:
9480      ldab 1024,sp
9481      ldd [10,x]
9482      orab 3,+x
9483      stab -2,y-
9484      ldx a,pc
9485      sty [d,sp]
9487 \x1f
9488 File: as.info,  Node: M68HC11-Modifiers,  Next: M68HC11-Directives,  Prev: M68HC11-Syntax,  Up: M68HC11-Dependent
9490 Symbolic Operand Modifiers
9491 --------------------------
9493    The assembler supports several modifiers when using symbol addresses
9494 in 68HC11 and 68HC12 instruction operands.  The general syntax is the
9495 following:
9497      %modifier(symbol)
9499 `%addr'
9500      This modifier indicates to the assembler and linker to use the
9501      16-bit physical address corresponding to the symbol.  This is
9502      intended to be used on memory window systems to map a symbol in
9503      the memory bank window.  If the symbol is in a memory expansion
9504      part, the physical address corresponds to the symbol address
9505      within the memory bank window.  If the symbol is not in a memory
9506      expansion part, this is the symbol address (using or not using the
9507      %addr modifier has no effect in that case).
9509 `%page'
9510      This modifier indicates to use the memory page number corresponding
9511      to the symbol.  If the symbol is in a memory expansion part, its
9512      page number is computed by the linker as a number used to map the
9513      page containing the symbol in the memory bank window.  If the
9514      symbol is not in a memory expansion part, the page number is 0.
9516 `%hi'
9517      This modifier indicates to use the 8-bit high part of the physical
9518      address of the symbol.
9520 `%lo'
9521      This modifier indicates to use the 8-bit low part of the physical
9522      address of the symbol.
9524    For example a 68HC12 call to a function `foo_example' stored in
9525 memory expansion part could be written as follows:
9527      call %addr(foo_example),%page(foo_example)
9529    and this is equivalent to
9531      call foo_example
9533    And for 68HC11 it could be written as follows:
9535      ldab #%page(foo_example)
9536      stab _page_switch
9537      jsr  %addr(foo_example)
9539 \x1f
9540 File: as.info,  Node: M68HC11-Directives,  Next: M68HC11-Float,  Prev: M68HC11-Modifiers,  Up: M68HC11-Dependent
9542 Assembler Directives
9543 --------------------
9545    The 68HC11 and 68HC12 version of `as' have the following specific
9546 assembler directives:
9548 `.relax'
9549      The relax directive is used by the `GNU Compiler' to emit a
9550      specific relocation to mark a group of instructions for linker
9551      relaxation.  The sequence of instructions within the group must be
9552      known to the linker so that relaxation can be performed.
9554 `.mode [mshort|mlong|mshort-double|mlong-double]'
9555      This directive specifies the ABI.  It overrides the `-mshort',
9556      `-mlong', `-mshort-double' and `-mlong-double' options.
9558 `.far SYMBOL'
9559      This directive marks the symbol as a `far' symbol meaning that it
9560      uses a `call/rtc' calling convention as opposed to `jsr/rts'.
9561      During a final link, the linker will identify references to the
9562      `far' symbol and will verify the proper calling convention.
9564 `.interrupt SYMBOL'
9565      This directive marks the symbol as an interrupt entry point.  This
9566      information is then used by the debugger to correctly unwind the
9567      frame across interrupts.
9569 `.xrefb SYMBOL'
9570      This directive is defined for compatibility with the
9571      `Specification for Motorola 8 and 16-Bit Assembly Language Input
9572      Standard' and is ignored.
9574 \x1f
9575 File: as.info,  Node: M68HC11-Float,  Next: M68HC11-opcodes,  Prev: M68HC11-Directives,  Up: M68HC11-Dependent
9577 Floating Point
9578 --------------
9580    Packed decimal (P) format floating literals are not supported.  Feel
9581 free to add the code!
9583    The floating point formats generated by directives are these.
9585 `.float'
9586      `Single' precision floating point constants.
9588 `.double'
9589      `Double' precision floating point constants.
9591 `.extend'
9592 `.ldouble'
9593      `Extended' precision (`long double') floating point constants.
9595 \x1f
9596 File: as.info,  Node: M68HC11-opcodes,  Prev: M68HC11-Float,  Up: M68HC11-Dependent
9598 Opcodes
9599 -------
9601 * Menu:
9603 * M68HC11-Branch::                 Branch Improvement
9605 \x1f
9606 File: as.info,  Node: M68HC11-Branch,  Up: M68HC11-opcodes
9608 Branch Improvement
9609 ..................
9611    Certain pseudo opcodes are permitted for branch instructions.  They
9612 expand to the shortest branch instruction that reach the target.
9613 Generally these mnemonics are made by prepending `j' to the start of
9614 Motorola mnemonic. These pseudo opcodes are not affected by the
9615 `--short-branchs' or `--force-long-branchs' options.
9617    The following table summarizes the pseudo-operations.
9619                              Displacement Width
9620           +-------------------------------------------------------------+
9621           |                     Options                                 |
9622           |    --short-branchs            --force-long-branchs          |
9623           +--------------------------+----------------------------------+
9624        Op |BYTE             WORD     | BYTE          WORD               |
9625           +--------------------------+----------------------------------+
9626       bsr | bsr <pc-rel>    <error>  |               jsr <abs>          |
9627       bra | bra <pc-rel>    <error>  |               jmp <abs>          |
9628      jbsr | bsr <pc-rel>   jsr <abs> | bsr <pc-rel>  jsr <abs>          |
9629      jbra | bra <pc-rel>   jmp <abs> | bra <pc-rel>  jmp <abs>          |
9630       bXX | bXX <pc-rel>    <error>  |               bNX +3; jmp <abs>  |
9631      jbXX | bXX <pc-rel>   bNX +3;   | bXX <pc-rel>  bNX +3; jmp <abs>  |
9632           |                jmp <abs> |                                  |
9633           +--------------------------+----------------------------------+
9634      XX: condition
9635      NX: negative of condition XX
9637 `jbsr'
9638 `jbra'
9639      These are the simplest jump pseudo-operations; they always map to
9640      one particular machine instruction, depending on the displacement
9641      to the branch target.
9643 `jbXX'
9644      Here, `jbXX' stands for an entire family of pseudo-operations,
9645      where XX is a conditional branch or condition-code test.  The full
9646      list of pseudo-ops in this family is:
9647            jbcc   jbeq   jbge   jbgt   jbhi   jbvs   jbpl  jblo
9648            jbcs   jbne   jblt   jble   jbls   jbvc   jbmi
9650      For the cases of non-PC relative displacements and long
9651      displacements, `as' issues a longer code fragment in terms of NX,
9652      the opposite condition to XX.  For example, for the non-PC
9653      relative case:
9654               jbXX foo
9655      gives
9656                bNXs oof
9657                jmp foo
9658            oof:
9660 \x1f
9661 File: as.info,  Node: M88K-Dependent,  Next: MIPS-Dependent,  Prev: M68HC11-Dependent,  Up: Machine Dependencies
9663 Motorola M88K Dependent Features
9664 ================================
9666 * Menu:
9668 * M88K Directives::     M88K Machine Directives
9670 \x1f
9671 File: as.info,  Node: M88K Directives,  Up: M88K-Dependent
9673 M88K Machine Directives
9674 -----------------------
9676    The M88K version of the assembler supports the following machine
9677 directives:
9679 `.align'
9680      This directive aligns the section program counter on the next
9681      4-byte boundary.
9683 `.dfloat EXPR'
9684      This assembles a double precision (64-bit) floating point constant.
9686 `.ffloat EXPR'
9687      This assembles a single precision (32-bit) floating point constant.
9689 `.half EXPR'
9690      This directive assembles a half-word (16-bit) constant.
9692 `.word EXPR'
9693      This assembles a word (32-bit) constant.
9695 `.string "STR"'
9696      This directive behaves like the standard `.ascii' directive for
9697      copying STR into the object file.  The string is not terminated
9698      with a null byte.
9700 `.set SYMBOL, VALUE'
9701      This directive creates a symbol named SYMBOL which is an alias for
9702      another symbol (possibly not yet defined).  This should not be
9703      confused with the mnemonic `set', which is a legitimate M88K
9704      instruction.
9706 `.def SYMBOL, VALUE'
9707      This directive is synonymous with `.set' and is presumably provided
9708      for compatibility with other M88K assemblers.
9710 `.bss SYMBOL, LENGTH, ALIGN'
9711      Reserve LENGTH bytes in the bss section for a local SYMBOL,
9712      aligned to the power of two specified by ALIGN.  LENGTH and ALIGN
9713      must be positive absolute expressions.  This directive differs
9714      from `.lcomm' only in that it permits you to specify an alignment.
9715      *Note `.lcomm': Lcomm.
9717 \x1f
9718 File: as.info,  Node: MIPS-Dependent,  Next: MMIX-Dependent,  Prev: M88K-Dependent,  Up: Machine Dependencies
9720 MIPS Dependent Features
9721 =======================
9723    GNU `as' for MIPS architectures supports several different MIPS
9724 processors, and MIPS ISA levels I through V, MIPS32, and MIPS64.  For
9725 information about the MIPS instruction set, see `MIPS RISC
9726 Architecture', by Kane and Heindrich (Prentice-Hall).  For an overview
9727 of MIPS assembly conventions, see "Appendix D: Assembly Language
9728 Programming" in the same work.
9730 * Menu:
9732 * MIPS Opts::           Assembler options
9733 * MIPS Object::         ECOFF object code
9734 * MIPS Stabs::          Directives for debugging information
9735 * MIPS ISA::            Directives to override the ISA level
9736 * MIPS autoextend::     Directives for extending MIPS 16 bit instructions
9737 * MIPS insn::           Directive to mark data as an instruction
9738 * MIPS option stack::   Directives to save and restore options
9739 * MIPS ASE instruction generation overrides:: Directives to control
9740                         generation of MIPS ASE instructions
9742 \x1f
9743 File: as.info,  Node: MIPS Opts,  Next: MIPS Object,  Up: MIPS-Dependent
9745 Assembler options
9746 -----------------
9748    The MIPS configurations of GNU `as' support these special options:
9750 `-G NUM'
9751      This option sets the largest size of an object that can be
9752      referenced implicitly with the `gp' register.  It is only accepted
9753      for targets that use ECOFF format.  The default value is 8.
9755 `-EB'
9756 `-EL'
9757      Any MIPS configuration of `as' can select big-endian or
9758      little-endian output at run time (unlike the other GNU development
9759      tools, which must be configured for one or the other).  Use `-EB'
9760      to select big-endian output, and `-EL' for little-endian.
9762 `-mips1'
9763 `-mips2'
9764 `-mips3'
9765 `-mips4'
9766 `-mips5'
9767 `-mips32'
9768 `-mips32r2'
9769 `-mips64'
9770 `-mips64r2'
9771      Generate code for a particular MIPS Instruction Set Architecture
9772      level.  `-mips1' corresponds to the R2000 and R3000 processors,
9773      `-mips2' to the R6000 processor, `-mips3' to the R4000 processor,
9774      and `-mips4' to the R8000 and R10000 processors.  `-mips5',
9775      `-mips32', `-mips32r2', `-mips64', and `-mips64r2' correspond to
9776      generic MIPS V, MIPS32, MIPS32 RELEASE 2, MIPS64, and MIPS64
9777      RELEASE 2 ISA processors, respectively.  You can also switch
9778      instruction sets during the assembly; see *Note Directives to
9779      override the ISA level: MIPS ISA.
9781 `-mgp32'
9782 `-mfp32'
9783      Some macros have different expansions for 32-bit and 64-bit
9784      registers.  The register sizes are normally inferred from the ISA
9785      and ABI, but these flags force a certain group of registers to be
9786      treated as 32 bits wide at all times.  `-mgp32' controls the size
9787      of general-purpose registers and `-mfp32' controls the size of
9788      floating-point registers.
9790      On some MIPS variants there is a 32-bit mode flag; when this flag
9791      is set, 64-bit instructions generate a trap.  Also, some 32-bit
9792      OSes only save the 32-bit registers on a context switch, so it is
9793      essential never to use the 64-bit registers.
9795 `-mgp64'
9796      Assume that 64-bit general purpose registers are available.  This
9797      is provided in the interests of symmetry with -gp32.
9799 `-mips16'
9800 `-no-mips16'
9801      Generate code for the MIPS 16 processor.  This is equivalent to
9802      putting `.set mips16' at the start of the assembly file.
9803      `-no-mips16' turns off this option.
9805 `-mips3d'
9806 `-no-mips3d'
9807      Generate code for the MIPS-3D Application Specific Extension.
9808      This tells the assembler to accept MIPS-3D instructions.
9809      `-no-mips3d' turns off this option.
9811 `-mdmx'
9812 `-no-mdmx'
9813      Generate code for the MDMX Application Specific Extension.  This
9814      tells the assembler to accept MDMX instructions.  `-no-mdmx' turns
9815      off this option.
9817 `-mfix7000'
9818 `-mno-fix7000'
9819      Cause nops to be inserted if the read of the destination register
9820      of an mfhi or mflo instruction occurs in the following two
9821      instructions.
9823 `-mfix-vr4120'
9824 `-no-mfix-vr4120'
9825      Insert nops to work around certain VR4120 errata.  This option is
9826      intended to be used on GCC-generated code: it is not designed to
9827      catch all problems in hand-written assembler code.
9829 `-m4010'
9830 `-no-m4010'
9831      Generate code for the LSI R4010 chip.  This tells the assembler to
9832      accept the R4010 specific instructions (`addciu', `ffc', etc.),
9833      and to not schedule `nop' instructions around accesses to the `HI'
9834      and `LO' registers.  `-no-m4010' turns off this option.
9836 `-m4650'
9837 `-no-m4650'
9838      Generate code for the MIPS R4650 chip.  This tells the assembler
9839      to accept the `mad' and `madu' instruction, and to not schedule
9840      `nop' instructions around accesses to the `HI' and `LO' registers.
9841      `-no-m4650' turns off this option.
9843 `-m3900'
9844 `-no-m3900'
9845 `-m4100'
9846 `-no-m4100'
9847      For each option `-mNNNN', generate code for the MIPS RNNNN chip.
9848      This tells the assembler to accept instructions specific to that
9849      chip, and to schedule for that chip's hazards.
9851 `-march=CPU'
9852      Generate code for a particular MIPS cpu.  It is exactly equivalent
9853      to `-mCPU', except that there are more value of CPU understood.
9854      Valid CPU value are:
9856           2000, 3000, 3900, 4000, 4010, 4100, 4111, vr4120, vr4130,
9857           vr4181, 4300, 4400, 4600, 4650, 5000, rm5200, rm5230, rm5231,
9858           rm5261, rm5721, vr5400, vr5500, 6000, rm7000, 8000, rm9000,
9859           10000, 12000, mips32-4k, sb1
9861 `-mtune=CPU'
9862      Schedule and tune for a particular MIPS cpu.  Valid CPU values are
9863      identical to `-march=CPU'.
9865 `-mabi=ABI'
9866      Record which ABI the source code uses.  The recognized arguments
9867      are: `32', `n32', `o64', `64' and `eabi'.
9869 `-nocpp'
9870      This option is ignored.  It is accepted for command-line
9871      compatibility with other assemblers, which use it to turn off C
9872      style preprocessing.  With GNU `as', there is no need for
9873      `-nocpp', because the GNU assembler itself never runs the C
9874      preprocessor.
9876 `--construct-floats'
9877 `--no-construct-floats'
9878      The `--no-construct-floats' option disables the construction of
9879      double width floating point constants by loading the two halves of
9880      the value into the two single width floating point registers that
9881      make up the double width register.  This feature is useful if the
9882      processor support the FR bit in its status  register, and this bit
9883      is known (by the programmer) to be set.  This bit prevents the
9884      aliasing of the double width register by the single width
9885      registers.
9887      By default `--construct-floats' is selected, allowing construction
9888      of these floating point constants.
9890 `--trap'
9891 `--no-break'
9892      `as' automatically macro expands certain division and
9893      multiplication instructions to check for overflow and division by
9894      zero.  This option causes `as' to generate code to take a trap
9895      exception rather than a break exception when an error is detected.
9896      The trap instructions are only supported at Instruction Set
9897      Architecture level 2 and higher.
9899 `--break'
9900 `--no-trap'
9901      Generate code to take a break exception rather than a trap
9902      exception when an error is detected.  This is the default.
9904 `-mpdr'
9905 `-mno-pdr'
9906      Control generation of `.pdr' sections.  Off by default on IRIX, on
9907      elsewhere.
9909 \x1f
9910 File: as.info,  Node: MIPS Object,  Next: MIPS Stabs,  Prev: MIPS Opts,  Up: MIPS-Dependent
9912 MIPS ECOFF object code
9913 ----------------------
9915    Assembling for a MIPS ECOFF target supports some additional sections
9916 besides the usual `.text', `.data' and `.bss'.  The additional sections
9917 are `.rdata', used for read-only data, `.sdata', used for small data,
9918 and `.sbss', used for small common objects.
9920    When assembling for ECOFF, the assembler uses the `$gp' (`$28')
9921 register to form the address of a "small object".  Any object in the
9922 `.sdata' or `.sbss' sections is considered "small" in this sense.  For
9923 external objects, or for objects in the `.bss' section, you can use the
9924 `gcc' `-G' option to control the size of objects addressed via `$gp';
9925 the default value is 8, meaning that a reference to any object eight
9926 bytes or smaller uses `$gp'.  Passing `-G 0' to `as' prevents it from
9927 using the `$gp' register on the basis of object size (but the assembler
9928 uses `$gp' for objects in `.sdata' or `sbss' in any case).  The size of
9929 an object in the `.bss' section is set by the `.comm' or `.lcomm'
9930 directive that defines it.  The size of an external object may be set
9931 with the `.extern' directive.  For example, `.extern sym,4' declares
9932 that the object at `sym' is 4 bytes in length, whie leaving `sym'
9933 otherwise undefined.
9935    Using small ECOFF objects requires linker support, and assumes that
9936 the `$gp' register is correctly initialized (normally done
9937 automatically by the startup code).  MIPS ECOFF assembly code must not
9938 modify the `$gp' register.
9940 \x1f
9941 File: as.info,  Node: MIPS Stabs,  Next: MIPS ISA,  Prev: MIPS Object,  Up: MIPS-Dependent
9943 Directives for debugging information
9944 ------------------------------------
9946    MIPS ECOFF `as' supports several directives used for generating
9947 debugging information which are not support by traditional MIPS
9948 assemblers.  These are `.def', `.endef', `.dim', `.file', `.scl',
9949 `.size', `.tag', `.type', `.val', `.stabd', `.stabn', and `.stabs'.
9950 The debugging information generated by the three `.stab' directives can
9951 only be read by GDB, not by traditional MIPS debuggers (this
9952 enhancement is required to fully support C++ debugging).  These
9953 directives are primarily used by compilers, not assembly language
9954 programmers!
9956 \x1f
9957 File: as.info,  Node: MIPS ISA,  Next: MIPS autoextend,  Prev: MIPS Stabs,  Up: MIPS-Dependent
9959 Directives to override the ISA level
9960 ------------------------------------
9962    GNU `as' supports an additional directive to change the MIPS
9963 Instruction Set Architecture level on the fly: `.set mipsN'.  N should
9964 be a number from 0 to 5, or 32, 32r2, 64 or 64r2.  The values other
9965 than 0 make the assembler accept instructions for the corresponding ISA
9966 level, from that point on in the assembly.  `.set mipsN' affects not
9967 only which instructions are permitted, but also how certain macros are
9968 expanded.  `.set mips0' restores the ISA level to its original level:
9969 either the level you selected with command line options, or the default
9970 for your configuration.  You can use this feature to permit specific
9971 R4000 instructions while assembling in 32 bit mode.  Use this directive
9972 with care!
9974    The directive `.set mips16' puts the assembler into MIPS 16 mode, in
9975 which it will assemble instructions for the MIPS 16 processor.  Use
9976 `.set nomips16' to return to normal 32 bit mode.
9978    Traditional MIPS assemblers do not support this directive.
9980 \x1f
9981 File: as.info,  Node: MIPS autoextend,  Next: MIPS insn,  Prev: MIPS ISA,  Up: MIPS-Dependent
9983 Directives for extending MIPS 16 bit instructions
9984 -------------------------------------------------
9986    By default, MIPS 16 instructions are automatically extended to 32
9987 bits when necessary.  The directive `.set noautoextend' will turn this
9988 off.  When `.set noautoextend' is in effect, any 32 bit instruction
9989 must be explicitly extended with the `.e' modifier (e.g., `li.e
9990 $4,1000').  The directive `.set autoextend' may be used to once again
9991 automatically extend instructions when necessary.
9993    This directive is only meaningful when in MIPS 16 mode.  Traditional
9994 MIPS assemblers do not support this directive.
9996 \x1f
9997 File: as.info,  Node: MIPS insn,  Next: MIPS option stack,  Prev: MIPS autoextend,  Up: MIPS-Dependent
9999 Directive to mark data as an instruction
10000 ----------------------------------------
10002    The `.insn' directive tells `as' that the following data is actually
10003 instructions.  This makes a difference in MIPS 16 mode: when loading
10004 the address of a label which precedes instructions, `as' automatically
10005 adds 1 to the value, so that jumping to the loaded address will do the
10006 right thing.
10008 \x1f
10009 File: as.info,  Node: MIPS option stack,  Next: MIPS ASE instruction generation overrides,  Prev: MIPS insn,  Up: MIPS-Dependent
10011 Directives to save and restore options
10012 --------------------------------------
10014    The directives `.set push' and `.set pop' may be used to save and
10015 restore the current settings for all the options which are controlled
10016 by `.set'.  The `.set push' directive saves the current settings on a
10017 stack.  The `.set pop' directive pops the stack and restores the
10018 settings.
10020    These directives can be useful inside an macro which must change an
10021 option such as the ISA level or instruction reordering but does not want
10022 to change the state of the code which invoked the macro.
10024    Traditional MIPS assemblers do not support these directives.
10026 \x1f
10027 File: as.info,  Node: MIPS ASE instruction generation overrides,  Prev: MIPS option stack,  Up: MIPS-Dependent
10029 Directives to control generation of MIPS ASE instructions
10030 ---------------------------------------------------------
10032    The directive `.set mips3d' makes the assembler accept instructions
10033 from the MIPS-3D Application Specific Extension from that point on in
10034 the assembly.  The `.set nomips3d' directive prevents MIPS-3D
10035 instructions from being accepted.
10037    The directive `.set mdmx' makes the assembler accept instructions
10038 from the MDMX Application Specific Extension from that point on in the
10039 assembly.  The `.set nomdmx' directive prevents MDMX instructions from
10040 being accepted.
10042    Traditional MIPS assemblers do not support these directives.
10044 \x1f
10045 File: as.info,  Node: MMIX-Dependent,  Next: MSP430-Dependent,  Prev: MIPS-Dependent,  Up: Machine Dependencies
10047 MMIX Dependent Features
10048 =======================
10050 * Menu:
10052 * MMIX-Opts::              Command-line Options
10053 * MMIX-Expand::            Instruction expansion
10054 * MMIX-Syntax::            Syntax
10055 * MMIX-mmixal::            Differences to `mmixal' syntax and semantics
10057 \x1f
10058 File: as.info,  Node: MMIX-Opts,  Next: MMIX-Expand,  Up: MMIX-Dependent
10060 Command-line Options
10061 --------------------
10063    The MMIX version of `as' has some machine-dependent options.
10065    When `--fixed-special-register-names' is specified, only the register
10066 names specified in *Note MMIX-Regs:: are recognized in the instructions
10067 `PUT' and `GET'.
10069    You can use the `--globalize-symbols' to make all symbols global.
10070 This option is useful when splitting up a `mmixal' program into several
10071 files.
10073    The `--gnu-syntax' turns off most syntax compatibility with
10074 `mmixal'.  Its usability is currently doubtful.
10076    The `--relax' option is not fully supported, but will eventually make
10077 the object file prepared for linker relaxation.
10079    If you want to avoid inadvertently calling a predefined symbol and
10080 would rather get an error, for example when using `as' with a compiler
10081 or other machine-generated code, specify `--no-predefined-syms'.  This
10082 turns off built-in predefined definitions of all such symbols,
10083 including rounding-mode symbols, segment symbols, `BIT' symbols, and
10084 `TRAP' symbols used in `mmix' "system calls".  It also turns off
10085 predefined special-register names, except when used in `PUT' and `GET'
10086 instructions.
10088    By default, some instructions are expanded to fit the size of the
10089 operand or an external symbol (*note MMIX-Expand::).  By passing
10090 `--no-expand', no such expansion will be done, instead causing errors
10091 at link time if the operand does not fit.
10093    The `mmixal' documentation (*note mmixsite::) specifies that global
10094 registers allocated with the `GREG' directive (*note MMIX-greg::) and
10095 initialized to the same non-zero value, will refer to the same global
10096 register.  This isn't strictly enforceable in `as' since the final
10097 addresses aren't known until link-time, but it will do an effort unless
10098 the `--no-merge-gregs' option is specified.  (Register merging isn't
10099 yet implemented in `ld'.)
10101    `as' will warn every time it expands an instruction to fit an
10102 operand unless the option `-x' is specified.  It is believed that this
10103 behaviour is more useful than just mimicking `mmixal''s behaviour, in
10104 which instructions are only expanded if the `-x' option is specified,
10105 and assembly fails otherwise, when an instruction needs to be expanded.
10106 It needs to be kept in mind that `mmixal' is both an assembler and
10107 linker, while `as' will expand instructions that at link stage can be
10108 contracted.  (Though linker relaxation isn't yet implemented in `ld'.)
10109 The option `-x' also imples `--linker-allocated-gregs'.
10111    If instruction expansion is enabled, `as' can expand a `PUSHJ'
10112 instruction into a series of instructions.  The shortest expansion is
10113 to not expand it, but just mark the call as redirectable to a stub,
10114 which `ld' creates at link-time, but only if the original `PUSHJ'
10115 instruction is found not to reach the target.  The stub consists of the
10116 necessary instructions to form a jump to the target.  This happens if
10117 `as' can assert that the `PUSHJ' instruction can reach such a stub.
10118 The option `--no-pushj-stubs' disables this shorter expansion, and the
10119 longer series of instructions is then created at assembly-time.  The
10120 option `--no-stubs' is a synonym, intended for compatibility with
10121 future releases, where generation of stubs for other instructions may
10122 be implemented.
10124    Usually a two-operand-expression (*note GREG-base::) without a
10125 matching `GREG' directive is treated as an error by `as'.  When the
10126 option `--linker-allocated-gregs' is in effect, they are instead passed
10127 through to the linker, which will allocate as many global registers as
10128 is needed.
10130 \x1f
10131 File: as.info,  Node: MMIX-Expand,  Next: MMIX-Syntax,  Prev: MMIX-Opts,  Up: MMIX-Dependent
10133 Instruction expansion
10134 ---------------------
10136    When `as' encounters an instruction with an operand that is either
10137 not known or does not fit the operand size of the instruction, `as'
10138 (and `ld') will expand the instruction into a sequence of instructions
10139 semantically equivalent to the operand fitting the instruction.
10140 Expansion will take place for the following instructions:
10142 `GETA'
10143      Expands to a sequence of four instructions: `SETL', `INCML',
10144      `INCMH' and `INCH'.  The operand must be a multiple of four.
10146 Conditional branches
10147      A branch instruction is turned into a branch with the complemented
10148      condition and prediction bit over five instructions; four
10149      instructions setting `$255' to the operand value, which like with
10150      `GETA' must be a multiple of four, and a final `GO $255,$255,0'.
10152 `PUSHJ'
10153      Similar to expansion for conditional branches; four instructions
10154      set `$255' to the operand value, followed by a `PUSHGO
10155      $255,$255,0'.
10157 `JMP'
10158      Similar to conditional branches and `PUSHJ'.  The final instruction
10159      is `GO $255,$255,0'.
10161    The linker `ld' is expected to shrink these expansions for code
10162 assembled with `--relax' (though not currently implemented).
10164 \x1f
10165 File: as.info,  Node: MMIX-Syntax,  Next: MMIX-mmixal,  Prev: MMIX-Expand,  Up: MMIX-Dependent
10167 Syntax
10168 ------
10170    The assembly syntax is supposed to be upward compatible with that
10171 described in Sections 1.3 and 1.4 of `The Art of Computer Programming,
10172 Volume 1'.  Draft versions of those chapters as well as other MMIX
10173 information is located at
10174 <http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html>.  Most code
10175 examples from the mmixal package located there should work unmodified
10176 when assembled and linked as single files, with a few noteworthy
10177 exceptions (*note MMIX-mmixal::).
10179    Before an instruction is emitted, the current location is aligned to
10180 the next four-byte boundary.  If a label is defined at the beginning of
10181 the line, its value will be the aligned value.
10183    In addition to the traditional hex-prefix `0x', a hexadecimal number
10184 can also be specified by the prefix character `#'.
10186    After all operands to an MMIX instruction or directive have been
10187 specified, the rest of the line is ignored, treated as a comment.
10189 * Menu:
10191 * MMIX-Chars::                  Special Characters
10192 * MMIX-Symbols::                Symbols
10193 * MMIX-Regs::                   Register Names
10194 * MMIX-Pseudos::                Assembler Directives
10196 \x1f
10197 File: as.info,  Node: MMIX-Chars,  Next: MMIX-Symbols,  Up: MMIX-Syntax
10199 Special Characters
10200 ..................
10202    The characters `*' and `#' are line comment characters; each start a
10203 comment at the beginning of a line, but only at the beginning of a
10204 line.  A `#' prefixes a hexadecimal number if found elsewhere on a line.
10206    Two other characters, `%' and `!', each start a comment anywhere on
10207 the line.  Thus you can't use the `modulus' and `not' operators in
10208 expressions normally associated with these two characters.
10210    A `;' is a line separator, treated as a new-line, so separate
10211 instructions can be specified on a single line.
10213 \x1f
10214 File: as.info,  Node: MMIX-Symbols,  Next: MMIX-Regs,  Prev: MMIX-Chars,  Up: MMIX-Syntax
10216 Symbols
10217 .......
10219    The character `:' is permitted in identifiers.  There are two
10220 exceptions to it being treated as any other symbol character: if a
10221 symbol begins with `:', it means that the symbol is in the global
10222 namespace and that the current prefix should not be prepended to that
10223 symbol (*note MMIX-prefix::).  The `:' is then not considered part of
10224 the symbol.  For a symbol in the label position (first on a line), a `:'
10225 at the end of a symbol is silently stripped off.  A label is permitted,
10226 but not required, to be followed by a `:', as with many other assembly
10227 formats.
10229    The character `@' in an expression, is a synonym for `.', the
10230 current location.
10232    In addition to the common forward and backward local symbol formats
10233 (*note Symbol Names::), they can be specified with upper-case `B' and
10234 `F', as in `8B' and `9F'.  A local label defined for the current
10235 position is written with a `H' appended to the number:
10236      3H LDB $0,$1,2
10237    This and traditional local-label formats cannot be mixed: a label
10238 must be defined and referred to using the same format.
10240    There's a minor caveat: just as for the ordinary local symbols, the
10241 local symbols are translated into ordinary symbols using control
10242 characters are to hide the ordinal number of the symbol.
10243 Unfortunately, these symbols are not translated back in error messages.
10244 Thus you may see confusing error messages when local symbols are used.
10245 Control characters `\003' (control-C) and `\004' (control-D) are used
10246 for the MMIX-specific local-symbol syntax.
10248    The symbol `Main' is handled specially; it is always global.
10250    By defining the symbols `__.MMIX.start..text' and
10251 `__.MMIX.start..data', the address of respectively the `.text' and
10252 `.data' segments of the final program can be defined, though when
10253 linking more than one object file, the code or data in the object file
10254 containing the symbol is not guaranteed to be start at that position;
10255 just the final executable.  *Note MMIX-loc::.
10257 \x1f
10258 File: as.info,  Node: MMIX-Regs,  Next: MMIX-Pseudos,  Prev: MMIX-Symbols,  Up: MMIX-Syntax
10260 Register names
10261 ..............
10263    Local and global registers are specified as `$0' to `$255'.  The
10264 recognized special register names are `rJ', `rA', `rB', `rC', `rD',
10265 `rE', `rF', `rG', `rH', `rI', `rK', `rL', `rM', `rN', `rO', `rP', `rQ',
10266 `rR', `rS', `rT', `rU', `rV', `rW', `rX', `rY', `rZ', `rBB', `rTT',
10267 `rWW', `rXX', `rYY' and `rZZ'.  A leading `:' is optional for special
10268 register names.
10270    Local and global symbols can be equated to register names and used in
10271 place of ordinary registers.
10273    Similarly for special registers, local and global symbols can be
10274 used.  Also, symbols equated from numbers and constant expressions are
10275 allowed in place of a special register, except when either of the
10276 options `--no-predefined-syms' and `--fixed-special-register-names' are
10277 specified.  Then only the special register names above are allowed for
10278 the instructions having a special register operand; `GET' and `PUT'.
10280 \x1f
10281 File: as.info,  Node: MMIX-Pseudos,  Prev: MMIX-Regs,  Up: MMIX-Syntax
10283 Assembler Directives
10284 ....................
10286 `LOC'
10287      The `LOC' directive sets the current location to the value of the
10288      operand field, which may include changing sections.  If the
10289      operand is a constant, the section is set to either `.data' if the
10290      value is `0x2000000000000000' or larger, else it is set to `.text'.
10291      Within a section, the current location may only be changed to
10292      monotonically higher addresses.  A LOC expression must be a
10293      previously defined symbol or a "pure" constant.
10295      An example, which sets the label PREV to the current location, and
10296      updates the current location to eight bytes forward:
10297           prev LOC @+8
10299      When a LOC has a constant as its operand, a symbol
10300      `__.MMIX.start..text' or `__.MMIX.start..data' is defined
10301      depending on the address as mentioned above.  Each such symbol is
10302      interpreted as special by the linker, locating the section at that
10303      address.  Note that if multiple files are linked, the first object
10304      file with that section will be mapped to that address (not
10305      necessarily the file with the LOC definition).
10307 `LOCAL'
10308      Example:
10309            LOCAL external_symbol
10310            LOCAL 42
10311            .local asymbol
10313      This directive-operation generates a link-time assertion that the
10314      operand does not correspond to a global register.  The operand is
10315      an expression that at link-time resolves to a register symbol or a
10316      number.  A number is treated as the register having that number.
10317      There is one restriction on the use of this directive: the
10318      pseudo-directive must be placed in a section with contents, code
10319      or data.
10321 `IS'
10322      The `IS' directive:
10323           asymbol IS an_expression
10324      sets the symbol `asymbol' to `an_expression'.  A symbol may not be
10325      set more than once using this directive.  Local labels may be set
10326      using this directive, for example:
10327           5H IS @+4
10329 `GREG'
10330      This directive reserves a global register, gives it an initial
10331      value and optionally gives it a symbolic name.  Some examples:
10333           areg GREG
10334           breg GREG data_value
10335                GREG data_buffer
10336                .greg creg, another_data_value
10338      The symbolic register name can be used in place of a (non-special)
10339      register.  If a value isn't provided, it defaults to zero.  Unless
10340      the option `--no-merge-gregs' is specified, non-zero registers
10341      allocated with this directive may be eliminated by `as'; another
10342      register with the same value used in its place.  Any of the
10343      instructions `CSWAP', `GO', `LDA', `LDBU', `LDB', `LDHT', `LDOU',
10344      `LDO', `LDSF', `LDTU', `LDT', `LDUNC', `LDVTS', `LDWU', `LDW',
10345      `PREGO', `PRELD', `PREST', `PUSHGO', `STBU', `STB', `STCO', `STHT',
10346      `STOU', `STSF', `STTU', `STT', `STUNC', `SYNCD', `SYNCID', can
10347      have a value nearby an initial value in place of its second and
10348      third operands.  Here, "nearby" is defined as within the range
10349      0...255 from the initial value of such an allocated register.
10351           buffer1 BYTE 0,0,0,0,0
10352           buffer2 BYTE 0,0,0,0,0
10353            ...
10354            GREG buffer1
10355            LDOU $42,buffer2
10356      In the example above, the `Y' field of the `LDOUI' instruction
10357      (LDOU with a constant Z) will be replaced with the global register
10358      allocated for `buffer1', and the `Z' field will have the value 5,
10359      the offset from `buffer1' to `buffer2'.  The result is equivalent
10360      to this code:
10361           buffer1 BYTE 0,0,0,0,0
10362           buffer2 BYTE 0,0,0,0,0
10363            ...
10364           tmpreg GREG buffer1
10365            LDOU $42,tmpreg,(buffer2-buffer1)
10367      Global registers allocated with this directive are allocated in
10368      order higher-to-lower within a file.  Other than that, the exact
10369      order of register allocation and elimination is undefined.  For
10370      example, the order is undefined when more than one file with such
10371      directives are linked together.  With the options `-x' and
10372      `--linker-allocated-gregs', `GREG' directives for two-operand
10373      cases like the one mentioned above can be omitted.  Sufficient
10374      global registers will then be allocated by the linker.
10376 `BYTE'
10377      The `BYTE' directive takes a series of operands separated by a
10378      comma.  If an operand is a string (*note Strings::), each
10379      character of that string is emitted as a byte.  Other operands
10380      must be constant expressions without forward references, in the
10381      range 0...255.  If you need operands having expressions with
10382      forward references, use `.byte' (*note Byte::).  An operand can be
10383      omitted, defaulting to a zero value.
10385 `WYDE'
10386 `TETRA'
10387 `OCTA'
10388      The directives `WYDE', `TETRA' and `OCTA' emit constants of two,
10389      four and eight bytes size respectively.  Before anything else
10390      happens for the directive, the current location is aligned to the
10391      respective constant-size boundary.  If a label is defined at the
10392      beginning of the line, its value will be that after the alignment.
10393      A single operand can be omitted, defaulting to a zero value
10394      emitted for the directive.  Operands can be expressed as strings
10395      (*note Strings::), in which case each character in the string is
10396      emitted as a separate constant of the size indicated by the
10397      directive.
10399 `PREFIX'
10400      The `PREFIX' directive sets a symbol name prefix to be prepended to
10401      all symbols (except local symbols, *note MMIX-Symbols::), that are
10402      not prefixed with `:', until the next `PREFIX' directive.  Such
10403      prefixes accumulate.  For example,
10404            PREFIX a
10405            PREFIX b
10406           c IS 0
10407      defines a symbol `abc' with the value 0.
10409 `BSPEC'
10410 `ESPEC'
10411      A pair of `BSPEC' and `ESPEC' directives delimit a section of
10412      special contents (without specified semantics).  Example:
10413            BSPEC 42
10414            TETRA 1,2,3
10415            ESPEC
10416      The single operand to `BSPEC' must be number in the range 0...255.
10417      The `BSPEC' number 80 is used by the GNU binutils implementation.
10419 \x1f
10420 File: as.info,  Node: MMIX-mmixal,  Prev: MMIX-Syntax,  Up: MMIX-Dependent
10422 Differences to `mmixal'
10423 -----------------------
10425    The binutils `as' and `ld' combination has a few differences in
10426 function compared to `mmixal' (*note mmixsite::).
10428    The replacement of a symbol with a GREG-allocated register (*note
10429 GREG-base::) is not handled the exactly same way in `as' as in
10430 `mmixal'.  This is apparent in the `mmixal' example file `inout.mms',
10431 where different registers with different offsets, eventually yielding
10432 the same address, are used in the first instruction.  This type of
10433 difference should however not affect the function of any program unless
10434 it has specific assumptions about the allocated register number.
10436    Line numbers (in the `mmo' object format) are currently not
10437 supported.
10439    Expression operator precedence is not that of mmixal: operator
10440 precedence is that of the C programming language.  It's recommended to
10441 use parentheses to explicitly specify wanted operator precedence
10442 whenever more than one type of operators are used.
10444    The serialize unary operator `&', the fractional division operator
10445 `//', the logical not operator `!' and the modulus operator `%' are not
10446 available.
10448    Symbols are not global by default, unless the option
10449 `--globalize-symbols' is passed.  Use the `.global' directive to
10450 globalize symbols (*note Global::).
10452    Operand syntax is a bit stricter with `as' than `mmixal'.  For
10453 example, you can't say `addu 1,2,3', instead you must write `addu
10454 $1,$2,3'.
10456    You can't LOC to a lower address than those already visited (i.e.
10457 "backwards").
10459    A LOC directive must come before any emitted code.
10461    Predefined symbols are visible as file-local symbols after use.  (In
10462 the ELF file, that is--the linked mmo file has no notion of a file-local
10463 symbol.)
10465    Some mapping of constant expressions to sections in LOC expressions
10466 is attempted, but that functionality is easily confused and should be
10467 avoided unless compatibility with `mmixal' is required.  A LOC
10468 expression to `0x2000000000000000' or higher, maps to the `.data'
10469 section and lower addresses map to the `.text' section (*note
10470 MMIX-loc::).
10472    The code and data areas are each contiguous.  Sparse programs with
10473 far-away LOC directives will take up the same amount of space as a
10474 contiguous program with zeros filled in the gaps between the LOC
10475 directives.  If you need sparse programs, you might try and get the
10476 wanted effect with a linker script and splitting up the code parts into
10477 sections (*note Section::).  Assembly code for this, to be compatible
10478 with `mmixal', would look something like:
10479       .if 0
10480       LOC away_expression
10481       .else
10482       .section away,"ax"
10483       .fi
10484    `as' will not execute the LOC directive and `mmixal' ignores the
10485 lines with `.'.  This construct can be used generally to help
10486 compatibility.
10488    Symbols can't be defined twice-not even to the same value.
10490    Instruction mnemonics are recognized case-insensitive, though the
10491 `IS' and `GREG' pseudo-operations must be specified in upper-case
10492 characters.
10494    There's no unicode support.
10496    The following is a list of programs in `mmix.tar.gz', available at
10497 <http://www-cs-faculty.stanford.edu/~knuth/mmix-news.html>, last
10498 checked with the version dated 2001-08-25 (md5sum
10499 c393470cfc86fac040487d22d2bf0172) that assemble with `mmixal' but do
10500 not assemble with `as':
10502 `silly.mms'
10503      LOC to a previous address.
10505 `sim.mms'
10506      Redefines symbol `Done'.
10508 `test.mms'
10509      Uses the serial operator `&'.
10511 \x1f
10512 File: as.info,  Node: MSP430-Dependent,  Next: SH-Dependent,  Prev: MMIX-Dependent,  Up: Machine Dependencies
10514 MSP 430 Dependent Features
10515 ==========================
10517 * Menu:
10519 * MSP430 Options::              Options
10520 * MSP430 Syntax::               Syntax
10521 * MSP430 Floating Point::       Floating Point
10522 * MSP430 Directives::           MSP 430 Machine Directives
10523 * MSP430 Opcodes::              Opcodes
10525 \x1f
10526 File: as.info,  Node: MSP430 Options,  Next: MSP430 Syntax,  Up: MSP430-Dependent
10528 Options
10529 -------
10531    `as' has only -m flag which selects the mpu arch. Currently has no
10532 effect.
10534 \x1f
10535 File: as.info,  Node: MSP430 Syntax,  Next: MSP430 Floating Point,  Prev: MSP430 Options,  Up: MSP430-Dependent
10537 Syntax
10538 ------
10540 * Menu:
10542 * MSP430-Macros::               Macros
10543 * MSP430-Chars::                Special Characters
10544 * MSP430-Regs::                 Register Names
10545 * MSP430-Ext::                  Assembler Extensions
10547 \x1f
10548 File: as.info,  Node: MSP430-Macros,  Next: MSP430-Chars,  Up: MSP430 Syntax
10550 Macros
10551 ......
10553    The macro syntax used on the MSP 430 is like that described in the
10554 MSP 430 Family Assembler Specification.  Normal `as' macros should
10555 still work.
10557    Additional built-in macros are:
10559 `llo(exp)'
10560      Extracts least significant word from 32-bit expression 'exp'.
10562 `lhi(exp)'
10563      Extracts most significant word from 32-bit expression 'exp'.
10565 `hlo(exp)'
10566      Extracts 3rd word from 64-bit expression 'exp'.
10568 `hhi(exp)'
10569      Extracts 4rd word from 64-bit expression 'exp'.
10571    They normally being used as an immediate source operand.
10572          mov    #llo(1), r10    ;       == mov  #1, r10
10573          mov    #lhi(1), r10    ;       == mov  #0, r10
10575 \x1f
10576 File: as.info,  Node: MSP430-Chars,  Next: MSP430-Regs,  Prev: MSP430-Macros,  Up: MSP430 Syntax
10578 Special Characters
10579 ..................
10581    `;' is the line comment character.
10583    The character `$' in jump instructions indicates current location and
10584 implemented only for TI syntax compatibility.
10586 \x1f
10587 File: as.info,  Node: MSP430-Regs,  Next: MSP430-Ext,  Prev: MSP430-Chars,  Up: MSP430 Syntax
10589 Register Names
10590 ..............
10592    General-purpose registers are represented by predefined symbols of
10593 the form `rN' (for global registers), where N represents a number
10594 between `0' and `15'.  The leading letters may be in either upper or
10595 lower case; for example, `r13' and `R7' are both valid register names.
10597    Register names `PC', `SP' and `SR' cannot be used as register names
10598 and will be treated as variables. Use `r0', `r1', and `r2' instead.
10600 \x1f
10601 File: as.info,  Node: MSP430-Ext,  Prev: MSP430-Regs,  Up: MSP430 Syntax
10603 Assembler Extensions
10604 ....................
10606 `@rN'
10607      As destination operand being treated as `0(rn)'
10609 `0(rN)'
10610      As source operand being treated as `@rn'
10612 `jCOND +N'
10613      Skips next N bytes followed by jump instruction and equivalent to
10614      `jCOND $+N+2'
10616 \x1f
10617 File: as.info,  Node: MSP430 Floating Point,  Next: MSP430 Directives,  Prev: MSP430 Syntax,  Up: MSP430-Dependent
10619 Floating Point
10620 --------------
10622    The MSP 430 family uses IEEE 32-bit floating-point numbers.
10624 \x1f
10625 File: as.info,  Node: MSP430 Directives,  Next: MSP430 Opcodes,  Prev: MSP430 Floating Point,  Up: MSP430-Dependent
10627 MSP 430 Machine Directives
10628 --------------------------
10630 `.file'
10631      This directive is ignored; it is accepted for compatibility with
10632      other MSP 430 assemblers.
10634           _Warning:_ in other versions of the GNU assembler, `.file' is
10635           used for the directive called `.app-file' in the MSP 430
10636           support.
10638 `.line'
10639      This directive is ignored; it is accepted for compatibility with
10640      other MSP 430 assemblers.
10642 `.arch'
10643      Currently this directive is ignored; it is accepted for
10644      compatibility with other MSP 430 assemblers.
10646 \x1f
10647 File: as.info,  Node: MSP430 Opcodes,  Prev: MSP430 Directives,  Up: MSP430-Dependent
10649 Opcodes
10650 -------
10652    `as' implements all the standard MSP 430 opcodes.  No additional
10653 pseudo-instructions are needed on this family.
10655    For information on the 430 machine instruction set, see `MSP430
10656 User's Manual, document slau049b', Texas Instrument, Inc.
10658 \x1f
10659 File: as.info,  Node: PDP-11-Dependent,  Next: PJ-Dependent,  Prev: SH64-Dependent,  Up: Machine Dependencies
10661 PDP-11 Dependent Features
10662 =========================
10664 * Menu:
10666 * PDP-11-Options::              Options
10667 * PDP-11-Pseudos::              Assembler Directives
10668 * PDP-11-Syntax::               DEC Syntax versus BSD Syntax
10669 * PDP-11-Mnemonics::            Instruction Naming
10670 * PDP-11-Synthetic::            Synthetic Instructions
10672 \x1f
10673 File: as.info,  Node: PDP-11-Options,  Next: PDP-11-Pseudos,  Up: PDP-11-Dependent
10675 Options
10676 -------
10678    The PDP-11 version of `as' has a rich set of machine dependent
10679 options.
10681 Code Generation Options
10682 .......................
10684 `-mpic | -mno-pic'
10685      Generate position-independent (or position-dependent) code.
10687      The default is to generate position-independent code.
10689 Instruction Set Extension Options
10690 .................................
10692    These options enables or disables the use of extensions over the base
10693 line instruction set as introduced by the first PDP-11 CPU: the KA11.
10694 Most options come in two variants: a `-m'EXTENSION that enables
10695 EXTENSION, and a `-mno-'EXTENSION that disables EXTENSION.
10697    The default is to enable all extensions.
10699 `-mall | -mall-extensions'
10700      Enable all instruction set extensions.
10702 `-mno-extensions'
10703      Disable all instruction set extensions.
10705 `-mcis | -mno-cis'
10706      Enable (or disable) the use of the commercial instruction set,
10707      which consists of these instructions: `ADDNI', `ADDN', `ADDPI',
10708      `ADDP', `ASHNI', `ASHN', `ASHPI', `ASHP', `CMPCI', `CMPC',
10709      `CMPNI', `CMPN', `CMPPI', `CMPP', `CVTLNI', `CVTLN', `CVTLPI',
10710      `CVTLP', `CVTNLI', `CVTNL', `CVTNPI', `CVTNP', `CVTPLI', `CVTPL',
10711      `CVTPNI', `CVTPN', `DIVPI', `DIVP', `L2DR', `L3DR', `LOCCI',
10712      `LOCC', `MATCI', `MATC', `MOVCI', `MOVC', `MOVRCI', `MOVRC',
10713      `MOVTCI', `MOVTC', `MULPI', `MULP', `SCANCI', `SCANC', `SKPCI',
10714      `SKPC', `SPANCI', `SPANC', `SUBNI', `SUBN', `SUBPI', and `SUBP'.
10716 `-mcsm | -mno-csm'
10717      Enable (or disable) the use of the `CSM' instruction.
10719 `-meis | -mno-eis'
10720      Enable (or disable) the use of the extended instruction set, which
10721      consists of these instructions: `ASHC', `ASH', `DIV', `MARK',
10722      `MUL', `RTT', `SOB' `SXT', and `XOR'.
10724 `-mfis | -mkev11'
10725 `-mno-fis | -mno-kev11'
10726      Enable (or disable) the use of the KEV11 floating-point
10727      instructions: `FADD', `FDIV', `FMUL', and `FSUB'.
10729 `-mfpp | -mfpu | -mfp-11'
10730 `-mno-fpp | -mno-fpu | -mno-fp-11'
10731      Enable (or disable) the use of FP-11 floating-point instructions:
10732      `ABSF', `ADDF', `CFCC', `CLRF', `CMPF', `DIVF', `LDCFF', `LDCIF',
10733      `LDEXP', `LDF', `LDFPS', `MODF', `MULF', `NEGF', `SETD', `SETF',
10734      `SETI', `SETL', `STCFF', `STCFI', `STEXP', `STF', `STFPS', `STST',
10735      `SUBF', and `TSTF'.
10737 `-mlimited-eis | -mno-limited-eis'
10738      Enable (or disable) the use of the limited extended instruction
10739      set: `MARK', `RTT', `SOB', `SXT', and `XOR'.
10741      The -mno-limited-eis options also implies -mno-eis.
10743 `-mmfpt | -mno-mfpt'
10744      Enable (or disable) the use of the `MFPT' instruction.
10746 `-mmultiproc | -mno-multiproc'
10747      Enable (or disable) the use of multiprocessor instructions:
10748      `TSTSET' and `WRTLCK'.
10750 `-mmxps | -mno-mxps'
10751      Enable (or disable) the use of the `MFPS' and `MTPS' instructions.
10753 `-mspl | -mno-spl'
10754      Enable (or disable) the use of the `SPL' instruction.
10756      Enable (or disable) the use of the microcode instructions: `LDUB',
10757      `MED', and `XFC'.
10759 CPU Model Options
10760 .................
10762    These options enable the instruction set extensions supported by a
10763 particular CPU, and disables all other extensions.
10765 `-mka11'
10766      KA11 CPU.  Base line instruction set only.
10768 `-mkb11'
10769      KB11 CPU.  Enable extended instruction set and `SPL'.
10771 `-mkd11a'
10772      KD11-A CPU.  Enable limited extended instruction set.
10774 `-mkd11b'
10775      KD11-B CPU.  Base line instruction set only.
10777 `-mkd11d'
10778      KD11-D CPU.  Base line instruction set only.
10780 `-mkd11e'
10781      KD11-E CPU.  Enable extended instruction set, `MFPS', and `MTPS'.
10783 `-mkd11f | -mkd11h | -mkd11q'
10784      KD11-F, KD11-H, or KD11-Q CPU.  Enable limited extended
10785      instruction set, `MFPS', and `MTPS'.
10787 `-mkd11k'
10788      KD11-K CPU.  Enable extended instruction set, `LDUB', `MED',
10789      `MFPS', `MFPT', `MTPS', and `XFC'.
10791 `-mkd11z'
10792      KD11-Z CPU.  Enable extended instruction set, `CSM', `MFPS',
10793      `MFPT', `MTPS', and `SPL'.
10795 `-mf11'
10796      F11 CPU.  Enable extended instruction set, `MFPS', `MFPT', and
10797      `MTPS'.
10799 `-mj11'
10800      J11 CPU.  Enable extended instruction set, `CSM', `MFPS', `MFPT',
10801      `MTPS', `SPL', `TSTSET', and `WRTLCK'.
10803 `-mt11'
10804      T11 CPU.  Enable limited extended instruction set, `MFPS', and
10805      `MTPS'.
10807 Machine Model Options
10808 .....................
10810    These options enable the instruction set extensions supported by a
10811 particular machine model, and disables all other extensions.
10813 `-m11/03'
10814      Same as `-mkd11f'.
10816 `-m11/04'
10817      Same as `-mkd11d'.
10819 `-m11/05 | -m11/10'
10820      Same as `-mkd11b'.
10822 `-m11/15 | -m11/20'
10823      Same as `-mka11'.
10825 `-m11/21'
10826      Same as `-mt11'.
10828 `-m11/23 | -m11/24'
10829      Same as `-mf11'.
10831 `-m11/34'
10832      Same as `-mkd11e'.
10834 `-m11/34a'
10835      Ame as `-mkd11e' `-mfpp'.
10837 `-m11/35 | -m11/40'
10838      Same as `-mkd11a'.
10840 `-m11/44'
10841      Same as `-mkd11z'.
10843 `-m11/45 | -m11/50 | -m11/55 | -m11/70'
10844      Same as `-mkb11'.
10846 `-m11/53 | -m11/73 | -m11/83 | -m11/84 | -m11/93 | -m11/94'
10847      Same as `-mj11'.
10849 `-m11/60'
10850      Same as `-mkd11k'.
10852 \x1f
10853 File: as.info,  Node: PDP-11-Pseudos,  Next: PDP-11-Syntax,  Prev: PDP-11-Options,  Up: PDP-11-Dependent
10855 Assembler Directives
10856 --------------------
10858    The PDP-11 version of `as' has a few machine dependent assembler
10859 directives.
10861 `.bss'
10862      Switch to the `bss' section.
10864 `.even'
10865      Align the location counter to an even number.
10867 \x1f
10868 File: as.info,  Node: PDP-11-Syntax,  Next: PDP-11-Mnemonics,  Prev: PDP-11-Pseudos,  Up: PDP-11-Dependent
10870 PDP-11 Assembly Language Syntax
10871 -------------------------------
10873    `as' supports both DEC syntax and BSD syntax.  The only difference
10874 is that in DEC syntax, a `#' character is used to denote an immediate
10875 constants, while in BSD syntax the character for this purpose is `$'.
10877    eneral-purpose registers are named `r0' through `r7'.  Mnemonic
10878 alternatives for `r6' and `r7' are `sp' and `pc', respectively.
10880    Floating-point registers are named `ac0' through `ac3', or
10881 alternatively `fr0' through `fr3'.
10883    Comments are started with a `#' or a `/' character, and extend to
10884 the end of the line.  (FIXME: clash with immediates?)
10886 \x1f
10887 File: as.info,  Node: PDP-11-Mnemonics,  Next: PDP-11-Synthetic,  Prev: PDP-11-Syntax,  Up: PDP-11-Dependent
10889 Instruction Naming
10890 ------------------
10892    Some instructions have alternative names.
10894 `BCC'
10895      `BHIS'
10897 `BCS'
10898      `BLO'
10900 `L2DR'
10901      `L2D'
10903 `L3DR'
10904      `L3D'
10906 `SYS'
10907      `TRAP'
10909 \x1f
10910 File: as.info,  Node: PDP-11-Synthetic,  Prev: PDP-11-Mnemonics,  Up: PDP-11-Dependent
10912 Synthetic Instructions
10913 ----------------------
10915    The `JBR' and `J'CC synthetic instructions are not supported yet.
10917 \x1f
10918 File: as.info,  Node: PJ-Dependent,  Next: PPC-Dependent,  Prev: PDP-11-Dependent,  Up: Machine Dependencies
10920 picoJava Dependent Features
10921 ===========================
10923 * Menu:
10925 * PJ Options::              Options
10927 \x1f
10928 File: as.info,  Node: PJ Options,  Up: PJ-Dependent
10930 Options
10931 -------
10933    `as' has two additional command-line options for the picoJava
10934 architecture.
10935 `-ml'
10936      This option selects little endian data output.
10938 `-mb'
10939      This option selects big endian data output.
10941 \x1f
10942 File: as.info,  Node: PPC-Dependent,  Next: Sparc-Dependent,  Prev: PJ-Dependent,  Up: Machine Dependencies
10944 PowerPC Dependent Features
10945 ==========================
10947 * Menu:
10949 * PowerPC-Opts::                Options
10950 * PowerPC-Pseudo::              PowerPC Assembler Directives
10952 \x1f
10953 File: as.info,  Node: PowerPC-Opts,  Next: PowerPC-Pseudo,  Up: PPC-Dependent
10955 Options
10956 -------
10958    The PowerPC chip family includes several successive levels, using
10959 the same core instruction set, but including a few additional
10960 instructions at each level.  There are exceptions to this however.  For
10961 details on what instructions each variant supports, please see the
10962 chip's architecture reference manual.
10964    The following table lists all available PowerPC options.
10966 `-mpwrx | -mpwr2'
10967      Generate code for POWER/2 (RIOS2).
10969 `-mpwr'
10970      Generate code for POWER (RIOS1)
10972 `-m601'
10973      Generate code for PowerPC 601.
10975 `-mppc, -mppc32, -m603, -m604'
10976      Generate code for PowerPC 603/604.
10978 `-m403, -m405'
10979      Generate code for PowerPC 403/405.
10981 `-m440'
10982      Generate code for PowerPC 440.  BookE and some 405 instructions.
10984 `-m7400, -m7410, -m7450, -m7455'
10985      Generate code for PowerPC 7400/7410/7450/7455.
10987 `-mppc64, -m620'
10988      Generate code for PowerPC 620/625/630.
10990 `-mppc64bridge'
10991      Generate code for PowerPC 64, including bridge insns.
10993 `-mbooke64'
10994      Generate code for 64-bit BookE.
10996 `-mbooke, mbooke32'
10997      Generate code for 32-bit BookE.
10999 `-maltivec'
11000      Generate code for processors with AltiVec instructions.
11002 `-mpower4'
11003      Generate code for Power4 architecture.
11005 `-mcom'
11006      Generate code Power/PowerPC common instructions.
11008 `-many'
11009      Generate code for any architecture (PWR/PWRX/PPC).
11011 `-mregnames'
11012      Allow symbolic names for registers.
11014 `-mno-regnames'
11015      Do not allow symbolic names for registers.
11017 `-mrelocatable'
11018      Support for GCC's -mrelocatble option.
11020 `-mrelocatable-lib'
11021      Support for GCC's -mrelocatble-lib option.
11023 `-memb'
11024      Set PPC_EMB bit in ELF flags.
11026 `-mlittle, -mlittle-endian'
11027      Generate code for a little endian machine.
11029 `-mbig, -mbig-endian'
11030      Generate code for a big endian machine.
11032 `-msolaris'
11033      Generate code for Solaris.
11035 `-mno-solaris'
11036      Do not generate code for Solaris.
11038 \x1f
11039 File: as.info,  Node: PowerPC-Pseudo,  Prev: PowerPC-Opts,  Up: PPC-Dependent
11041 PowerPC Assembler Directives
11042 ----------------------------
11044    A number of assembler directives are available for PowerPC.  The
11045 following table is far from complete.
11047 `.machine "string"'
11048      This directive allows you to change the machine for which code is
11049      generated.  `"string"' may be any of the -m cpu selection options
11050      (without the -m) enclosed in double quotes, `"push"', or `"pop"'.
11051      `.machine "push"' saves the currently selected cpu, which may be
11052      restored with `.machine "pop"'.
11054 \x1f
11055 File: as.info,  Node: SH-Dependent,  Next: SH64-Dependent,  Prev: MSP430-Dependent,  Up: Machine Dependencies
11057 Renesas / SuperH SH Dependent Features
11058 ======================================
11060 * Menu:
11062 * SH Options::              Options
11063 * SH Syntax::               Syntax
11064 * SH Floating Point::       Floating Point
11065 * SH Directives::           SH Machine Directives
11066 * SH Opcodes::              Opcodes
11068 \x1f
11069 File: as.info,  Node: SH Options,  Next: SH Syntax,  Up: SH-Dependent
11071 Options
11072 -------
11074    `as' has following command-line options for the Renesas (formerly
11075 Hitachi) / SuperH SH family.
11077 `-little'
11078      Generate little endian code.
11080 `-big'
11081      Generate big endian code.
11083 `-relax'
11084      Alter jump instructions for long displacements.
11086 `-small'
11087      Align sections to 4 byte boundaries, not 16.
11089 `-dsp'
11090      Enable sh-dsp insns, and disable sh3e / sh4 insns.
11092 `-renesas'
11093      Disable optimization with section symbol for compatibility with
11094      Renesas assembler.
11096 `-isa=sh4 | sh4a'
11097      Specify the sh4 or sh4a instruction set.
11099 `-isa=dsp'
11100      Enable sh-dsp insns, and disable sh3e / sh4 insns.
11102 `-isa=fp'
11103      Enable sh2e, sh3e, sh4, and sh4a insn sets.
11105 `-isa=all'
11106      Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
11108 \x1f
11109 File: as.info,  Node: SH Syntax,  Next: SH Floating Point,  Prev: SH Options,  Up: SH-Dependent
11111 Syntax
11112 ------
11114 * Menu:
11116 * SH-Chars::                Special Characters
11117 * SH-Regs::                 Register Names
11118 * SH-Addressing::           Addressing Modes
11120 \x1f
11121 File: as.info,  Node: SH-Chars,  Next: SH-Regs,  Up: SH Syntax
11123 Special Characters
11124 ..................
11126    `!' is the line comment character.
11128    You can use `;' instead of a newline to separate statements.
11130    Since `$' has no special meaning, you may use it in symbol names.
11132 \x1f
11133 File: as.info,  Node: SH-Regs,  Next: SH-Addressing,  Prev: SH-Chars,  Up: SH Syntax
11135 Register Names
11136 ..............
11138    You can use the predefined symbols `r0', `r1', `r2', `r3', `r4',
11139 `r5', `r6', `r7', `r8', `r9', `r10', `r11', `r12', `r13', `r14', and
11140 `r15' to refer to the SH registers.
11142    The SH also has these control registers:
11144 `pr'
11145      procedure register (holds return address)
11147 `pc'
11148      program counter
11150 `mach'
11151 `macl'
11152      high and low multiply accumulator registers
11154 `sr'
11155      status register
11157 `gbr'
11158      global base register
11160 `vbr'
11161      vector base register (for interrupt vectors)
11163 \x1f
11164 File: as.info,  Node: SH-Addressing,  Prev: SH-Regs,  Up: SH Syntax
11166 Addressing Modes
11167 ................
11169    `as' understands the following addressing modes for the SH.  `RN' in
11170 the following refers to any of the numbered registers, but _not_ the
11171 control registers.
11173 `RN'
11174      Register direct
11176 `@RN'
11177      Register indirect
11179 `@-RN'
11180      Register indirect with pre-decrement
11182 `@RN+'
11183      Register indirect with post-increment
11185 `@(DISP, RN)'
11186      Register indirect with displacement
11188 `@(R0, RN)'
11189      Register indexed
11191 `@(DISP, GBR)'
11192      `GBR' offset
11194 `@(R0, GBR)'
11195      GBR indexed
11197 `ADDR'
11198 `@(DISP, PC)'
11199      PC relative address (for branch or for addressing memory).  The
11200      `as' implementation allows you to use the simpler form ADDR
11201      anywhere a PC relative address is called for; the alternate form
11202      is supported for compatibility with other assemblers.
11204 `#IMM'
11205      Immediate data
11207 \x1f
11208 File: as.info,  Node: SH Floating Point,  Next: SH Directives,  Prev: SH Syntax,  Up: SH-Dependent
11210 Floating Point
11211 --------------
11213    SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU).
11214 Other SH groups can use `.float' directive to generate IEEE
11215 floating-point numbers.
11217    SH2E and SH3E support single-precision floating point calculations as
11218 well as entirely PCAPI compatible emulation of double-precision
11219 floating point calculations. SH2E and SH3E instructions are a subset of
11220 the floating point calculations conforming to the IEEE754 standard.
11222    In addition to single-precision and double-precision floating-point
11223 operation capability, the on-chip FPU of SH4 has a 128-bit graphic
11224 engine that enables 32-bit floating-point data to be processed 128 bits
11225 at a time. It also supports 4 * 4 array operations and inner product
11226 operations. Also, a superscalar architecture is employed that enables
11227 simultaneous execution of two instructions (including FPU
11228 instructions), providing performance of up to twice that of
11229 conventional architectures at the same frequency.
11231 \x1f
11232 File: as.info,  Node: SH Directives,  Next: SH Opcodes,  Prev: SH Floating Point,  Up: SH-Dependent
11234 SH Machine Directives
11235 ---------------------
11237 `uaword'
11238 `ualong'
11239      `as' will issue a warning when a misaligned `.word' or `.long'
11240      directive is used.  You may use `.uaword' or `.ualong' to indicate
11241      that the value is intentionally misaligned.
11243 \x1f
11244 File: as.info,  Node: SH Opcodes,  Prev: SH Directives,  Up: SH-Dependent
11246 Opcodes
11247 -------
11249    For detailed information on the SH machine instruction set, see
11250 `SH-Microcomputer User's Manual' (Renesas) or `SH-4 32-bit CPU Core
11251 Architecture' (SuperH) and `SuperH (SH) 64-Bit RISC Series' (SuperH).
11253    `as' implements all the standard SH opcodes.  No additional
11254 pseudo-instructions are needed on this family.  Note, however, that
11255 because `as' supports a simpler form of PC-relative addressing, you may
11256 simply write (for example)
11258      mov.l  bar,r0
11260 where other assemblers might require an explicit displacement to `bar'
11261 from the program counter:
11263      mov.l  @(DISP, PC)
11265    Here is a summary of SH opcodes:
11267      Legend:
11268      Rn        a numbered register
11269      Rm        another numbered register
11270      #imm      immediate data
11271      disp      displacement
11272      disp8     8-bit displacement
11273      disp12    12-bit displacement
11274      
11275      add #imm,Rn                    lds.l @Rn+,PR
11276      add Rm,Rn                      mac.w @Rm+,@Rn+
11277      addc Rm,Rn                     mov #imm,Rn
11278      addv Rm,Rn                     mov Rm,Rn
11279      and #imm,R0                    mov.b Rm,@(R0,Rn)
11280      and Rm,Rn                      mov.b Rm,@-Rn
11281      and.b #imm,@(R0,GBR)           mov.b Rm,@Rn
11282      bf disp8                       mov.b @(disp,Rm),R0
11283      bra disp12                     mov.b @(disp,GBR),R0
11284      bsr disp12                     mov.b @(R0,Rm),Rn
11285      bt disp8                       mov.b @Rm+,Rn
11286      clrmac                         mov.b @Rm,Rn
11287      clrt                           mov.b R0,@(disp,Rm)
11288      cmp/eq #imm,R0                 mov.b R0,@(disp,GBR)
11289      cmp/eq Rm,Rn                   mov.l Rm,@(disp,Rn)
11290      cmp/ge Rm,Rn                   mov.l Rm,@(R0,Rn)
11291      cmp/gt Rm,Rn                   mov.l Rm,@-Rn
11292      cmp/hi Rm,Rn                   mov.l Rm,@Rn
11293      cmp/hs Rm,Rn                   mov.l @(disp,Rn),Rm
11294      cmp/pl Rn                      mov.l @(disp,GBR),R0
11295      cmp/pz Rn                      mov.l @(disp,PC),Rn
11296      cmp/str Rm,Rn                  mov.l @(R0,Rm),Rn
11297      div0s Rm,Rn                    mov.l @Rm+,Rn
11298      div0u                          mov.l @Rm,Rn
11299      div1 Rm,Rn                     mov.l R0,@(disp,GBR)
11300      exts.b Rm,Rn                   mov.w Rm,@(R0,Rn)
11301      exts.w Rm,Rn                   mov.w Rm,@-Rn
11302      extu.b Rm,Rn                   mov.w Rm,@Rn
11303      extu.w Rm,Rn                   mov.w @(disp,Rm),R0
11304      jmp @Rn                        mov.w @(disp,GBR),R0
11305      jsr @Rn                        mov.w @(disp,PC),Rn
11306      ldc Rn,GBR                     mov.w @(R0,Rm),Rn
11307      ldc Rn,SR                      mov.w @Rm+,Rn
11308      ldc Rn,VBR                     mov.w @Rm,Rn
11309      ldc.l @Rn+,GBR                 mov.w R0,@(disp,Rm)
11310      ldc.l @Rn+,SR                  mov.w R0,@(disp,GBR)
11311      ldc.l @Rn+,VBR                 mova @(disp,PC),R0
11312      lds Rn,MACH                    movt Rn
11313      lds Rn,MACL                    muls Rm,Rn
11314      lds Rn,PR                      mulu Rm,Rn
11315      lds.l @Rn+,MACH                neg Rm,Rn
11316      lds.l @Rn+,MACL                negc Rm,Rn
11317      
11318      nop                            stc VBR,Rn
11319      not Rm,Rn                      stc.l GBR,@-Rn
11320      or #imm,R0                     stc.l SR,@-Rn
11321      or Rm,Rn                       stc.l VBR,@-Rn
11322      or.b #imm,@(R0,GBR)            sts MACH,Rn
11323      rotcl Rn                       sts MACL,Rn
11324      rotcr Rn                       sts PR,Rn
11325      rotl Rn                        sts.l MACH,@-Rn
11326      rotr Rn                        sts.l MACL,@-Rn
11327      rte                            sts.l PR,@-Rn
11328      rts                            sub Rm,Rn
11329      sett                           subc Rm,Rn
11330      shal Rn                        subv Rm,Rn
11331      shar Rn                        swap.b Rm,Rn
11332      shll Rn                        swap.w Rm,Rn
11333      shll16 Rn                      tas.b @Rn
11334      shll2 Rn                       trapa #imm
11335      shll8 Rn                       tst #imm,R0
11336      shlr Rn                        tst Rm,Rn
11337      shlr16 Rn                      tst.b #imm,@(R0,GBR)
11338      shlr2 Rn                       xor #imm,R0
11339      shlr8 Rn                       xor Rm,Rn
11340      sleep                          xor.b #imm,@(R0,GBR)
11341      stc GBR,Rn                     xtrct Rm,Rn
11342      stc SR,Rn
11344 \x1f
11345 File: as.info,  Node: SH64-Dependent,  Next: PDP-11-Dependent,  Prev: SH-Dependent,  Up: Machine Dependencies
11347 SuperH SH64 Dependent Features
11348 ==============================
11350 * Menu:
11352 * SH64 Options::              Options
11353 * SH64 Syntax::               Syntax
11354 * SH64 Directives::           SH64 Machine Directives
11355 * SH64 Opcodes::              Opcodes
11357 \x1f
11358 File: as.info,  Node: SH64 Options,  Next: SH64 Syntax,  Up: SH64-Dependent
11360 Options
11361 -------
11363 `-isa=sh4 | sh4a'
11364      Specify the sh4 or sh4a instruction set.
11366 `-isa=dsp'
11367      Enable sh-dsp insns, and disable sh3e / sh4 insns.
11369 `-isa=fp'
11370      Enable sh2e, sh3e, sh4, and sh4a insn sets.
11372 `-isa=all'
11373      Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
11375 `-isa=shmedia | -isa=shcompact'
11376      Specify the default instruction set.  `SHmedia' specifies the
11377      32-bit opcodes, and `SHcompact' specifies the 16-bit opcodes
11378      compatible with previous SH families.  The default depends on the
11379      ABI selected; the default for the 64-bit ABI is SHmedia, and the
11380      default for the 32-bit ABI is SHcompact.  If neither the ABI nor
11381      the ISA is specified, the default is 32-bit SHcompact.
11383      Note that the `.mode' pseudo-op is not permitted if the ISA is not
11384      specified on the command line.
11386 `-abi=32 | -abi=64'
11387      Specify the default ABI.  If the ISA is specified and the ABI is
11388      not, the default ABI depends on the ISA, with SHmedia defaulting
11389      to 64-bit and SHcompact defaulting to 32-bit.
11391      Note that the `.abi' pseudo-op is not permitted if the ABI is not
11392      specified on the command line.  When the ABI is specified on the
11393      command line, any `.abi' pseudo-ops in the source must match it.
11395 `-shcompact-const-crange'
11396      Emit code-range descriptors for constants in SHcompact code
11397      sections.
11399 `-no-mix'
11400      Disallow SHmedia code in the same section as constants and
11401      SHcompact code.
11403 `-no-expand'
11404      Do not expand MOVI, PT, PTA or PTB instructions.
11406 `-expand-pt32'
11407      With -abi=64, expand PT, PTA and PTB instructions to 32 bits only.
11409 \x1f
11410 File: as.info,  Node: SH64 Syntax,  Next: SH64 Directives,  Prev: SH64 Options,  Up: SH64-Dependent
11412 Syntax
11413 ------
11415 * Menu:
11417 * SH64-Chars::                Special Characters
11418 * SH64-Regs::                 Register Names
11419 * SH64-Addressing::           Addressing Modes
11421 \x1f
11422 File: as.info,  Node: SH64-Chars,  Next: SH64-Regs,  Up: SH64 Syntax
11424 Special Characters
11425 ..................
11427    `!' is the line comment character.
11429    You can use `;' instead of a newline to separate statements.
11431    Since `$' has no special meaning, you may use it in symbol names.
11433 \x1f
11434 File: as.info,  Node: SH64-Regs,  Next: SH64-Addressing,  Prev: SH64-Chars,  Up: SH64 Syntax
11436 Register Names
11437 ..............
11439    You can use the predefined symbols `r0' through `r63' to refer to
11440 the SH64 general registers, `cr0' through `cr63' for control registers,
11441 `tr0' through `tr7' for target address registers, `fr0' through `fr63'
11442 for single-precision floating point registers, `dr0' through `dr62'
11443 (even numbered registers only) for double-precision floating point
11444 registers, `fv0' through `fv60' (multiples of four only) for
11445 single-precision floating point vectors, `fp0' through `fp62' (even
11446 numbered registers only) for single-precision floating point pairs,
11447 `mtrx0' through `mtrx48' (multiples of 16 only) for 4x4 matrices of
11448 single-precision floating point registers, `pc' for the program
11449 counter, and `fpscr' for the floating point status and control register.
11451    You can also refer to the control registers by the mnemonics `sr',
11452 `ssr', `pssr', `intevt', `expevt', `pexpevt', `tra', `spc', `pspc',
11453 `resvec', `vbr', `tea', `dcr', `kcr0', `kcr1', `ctc', and `usr'.
11455 \x1f
11456 File: as.info,  Node: SH64-Addressing,  Prev: SH64-Regs,  Up: SH64 Syntax
11458 Addressing Modes
11459 ................
11461    SH64 operands consist of either a register or immediate value.  The
11462 immediate value can be a constant or label reference (or portion of a
11463 label reference), as in this example:
11465         movi    4,r2
11466         pt      function, tr4
11467         movi    (function >> 16) & 65535,r0
11468         shori   function & 65535, r0
11469         ld.l    r0,4,r0
11471    Instruction label references can reference labels in either SHmedia
11472 or SHcompact.  To differentiate between the two, labels in SHmedia
11473 sections will always have the least significant bit set (i.e. they will
11474 be odd), which SHcompact labels will have the least significant bit
11475 reset (i.e. they will be even).  If you need to reference the actual
11476 address of a label, you can use the `datalabel' modifier, as in this
11477 example:
11479         .long   function
11480         .long   datalabel function
11482    In that example, the first longword may or may not have the least
11483 significant bit set depending on whether the label is an SHmedia label
11484 or an SHcompact label.  The second longword will be the actual address
11485 of the label, regardless of what type of label it is.
11487 \x1f
11488 File: as.info,  Node: SH64 Directives,  Next: SH64 Opcodes,  Prev: SH64 Syntax,  Up: SH64-Dependent
11490 SH64 Machine Directives
11491 -----------------------
11493    In addition to the SH directives, the SH64 provides the following
11494 directives:
11496 `.mode [shmedia|shcompact]'
11497 `.isa [shmedia|shcompact]'
11498      Specify the ISA for the following instructions (the two directives
11499      are equivalent).  Note that programs such as `objdump' rely on
11500      symbolic labels to determine when such mode switches occur (by
11501      checking the least significant bit of the label's address), so
11502      such mode/isa changes should always be followed by a label (in
11503      practice, this is true anyway).  Note that you cannot use these
11504      directives if you didn't specify an ISA on the command line.
11506 `.abi [32|64]'
11507      Specify the ABI for the following instructions.  Note that you
11508      cannot use this directive unless you specified an ABI on the
11509      command line, and the ABIs specified must match.
11511 `.uaquad'
11512      Like .uaword and .ualong, this allows you to specify an
11513      intentionally unaligned quadword (64 bit word).
11515 \x1f
11516 File: as.info,  Node: SH64 Opcodes,  Prev: SH64 Directives,  Up: SH64-Dependent
11518 Opcodes
11519 -------
11521    For detailed information on the SH64 machine instruction set, see
11522 `SuperH 64 bit RISC Series Architecture Manual' (SuperH, Inc.).
11524    `as' implements all the standard SH64 opcodes.  In addition, the
11525 following pseudo-opcodes may be expanded into one or more alternate
11526 opcodes:
11528 `movi'
11529      If the value doesn't fit into a standard `movi' opcode, `as' will
11530      replace the `movi' with a sequence of `movi' and `shori' opcodes.
11532 `pt'
11533      This expands to a sequence of `movi' and `shori' opcode, followed
11534      by a `ptrel' opcode, or to a `pta' or `ptb' opcode, depending on
11535      the label referenced.
11537 \x1f
11538 File: as.info,  Node: Sparc-Dependent,  Next: TIC54X-Dependent,  Prev: PPC-Dependent,  Up: Machine Dependencies
11540 SPARC Dependent Features
11541 ========================
11543 * Menu:
11545 * Sparc-Opts::                  Options
11546 * Sparc-Aligned-Data::          Option to enforce aligned data
11547 * Sparc-Float::                 Floating Point
11548 * Sparc-Directives::            Sparc Machine Directives
11550 \x1f
11551 File: as.info,  Node: Sparc-Opts,  Next: Sparc-Aligned-Data,  Up: Sparc-Dependent
11553 Options
11554 -------
11556    The SPARC chip family includes several successive levels, using the
11557 same core instruction set, but including a few additional instructions
11558 at each level.  There are exceptions to this however.  For details on
11559 what instructions each variant supports, please see the chip's
11560 architecture reference manual.
11562    By default, `as' assumes the core instruction set (SPARC v6), but
11563 "bumps" the architecture level as needed: it switches to successively
11564 higher architectures as it encounters instructions that only exist in
11565 the higher levels.
11567    If not configured for SPARC v9 (`sparc64-*-*') GAS will not bump
11568 passed sparclite by default, an option must be passed to enable the v9
11569 instructions.
11571    GAS treats sparclite as being compatible with v8, unless an
11572 architecture is explicitly requested.  SPARC v9 is always incompatible
11573 with sparclite.
11575 `-Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite'
11576 `-Av8plus | -Av8plusa | -Av9 | -Av9a'
11577      Use one of the `-A' options to select one of the SPARC
11578      architectures explicitly.  If you select an architecture
11579      explicitly, `as' reports a fatal error if it encounters an
11580      instruction or feature requiring an incompatible or higher level.
11582      `-Av8plus' and `-Av8plusa' select a 32 bit environment.
11584      `-Av9' and `-Av9a' select a 64 bit environment and are not
11585      available unless GAS is explicitly configured with 64 bit
11586      environment support.
11588      `-Av8plusa' and `-Av9a' enable the SPARC V9 instruction set with
11589      UltraSPARC extensions.
11591 `-xarch=v8plus | -xarch=v8plusa'
11592      For compatibility with the Solaris v9 assembler.  These options are
11593      equivalent to -Av8plus and -Av8plusa, respectively.
11595 `-bump'
11596      Warn whenever it is necessary to switch to another level.  If an
11597      architecture level is explicitly requested, GAS will not issue
11598      warnings until that level is reached, and will then bump the level
11599      as required (except between incompatible levels).
11601 `-32 | -64'
11602      Select the word size, either 32 bits or 64 bits.  These options
11603      are only available with the ELF object file format, and require
11604      that the necessary BFD support has been included.
11606 \x1f
11607 File: as.info,  Node: Sparc-Aligned-Data,  Next: Sparc-Float,  Prev: Sparc-Opts,  Up: Sparc-Dependent
11609 Enforcing aligned data
11610 ----------------------
11612    SPARC GAS normally permits data to be misaligned.  For example, it
11613 permits the `.long' pseudo-op to be used on a byte boundary.  However,
11614 the native SunOS and Solaris assemblers issue an error when they see
11615 misaligned data.
11617    You can use the `--enforce-aligned-data' option to make SPARC GAS
11618 also issue an error about misaligned data, just as the SunOS and Solaris
11619 assemblers do.
11621    The `--enforce-aligned-data' option is not the default because gcc
11622 issues misaligned data pseudo-ops when it initializes certain packed
11623 data structures (structures defined using the `packed' attribute).  You
11624 may have to assemble with GAS in order to initialize packed data
11625 structures in your own code.
11627 \x1f
11628 File: as.info,  Node: Sparc-Float,  Next: Sparc-Directives,  Prev: Sparc-Aligned-Data,  Up: Sparc-Dependent
11630 Floating Point
11631 --------------
11633    The Sparc uses IEEE floating-point numbers.
11635 \x1f
11636 File: as.info,  Node: Sparc-Directives,  Prev: Sparc-Float,  Up: Sparc-Dependent
11638 Sparc Machine Directives
11639 ------------------------
11641    The Sparc version of `as' supports the following additional machine
11642 directives:
11644 `.align'
11645      This must be followed by the desired alignment in bytes.
11647 `.common'
11648      This must be followed by a symbol name, a positive number, and
11649      `"bss"'.  This behaves somewhat like `.comm', but the syntax is
11650      different.
11652 `.half'
11653      This is functionally identical to `.short'.
11655 `.nword'
11656      On the Sparc, the `.nword' directive produces native word sized
11657      value, ie. if assembling with -32 it is equivalent to `.word', if
11658      assembling with -64 it is equivalent to `.xword'.
11660 `.proc'
11661      This directive is ignored.  Any text following it on the same line
11662      is also ignored.
11664 `.register'
11665      This directive declares use of a global application or system
11666      register.  It must be followed by a register name %g2, %g3, %g6 or
11667      %g7, comma and the symbol name for that register.  If symbol name
11668      is `#scratch', it is a scratch register, if it is `#ignore', it
11669      just suppresses any errors about using undeclared global register,
11670      but does not emit any information about it into the object file.
11671      This can be useful e.g. if you save the register before use and
11672      restore it after.
11674 `.reserve'
11675      This must be followed by a symbol name, a positive number, and
11676      `"bss"'.  This behaves somewhat like `.lcomm', but the syntax is
11677      different.
11679 `.seg'
11680      This must be followed by `"text"', `"data"', or `"data1"'.  It
11681      behaves like `.text', `.data', or `.data 1'.
11683 `.skip'
11684      This is functionally identical to the `.space' directive.
11686 `.word'
11687      On the Sparc, the `.word' directive produces 32 bit values,
11688      instead of the 16 bit values it produces on many other machines.
11690 `.xword'
11691      On the Sparc V9 processor, the `.xword' directive produces 64 bit
11692      values.
11694 \x1f
11695 File: as.info,  Node: TIC54X-Dependent,  Next: V850-Dependent,  Prev: Sparc-Dependent,  Up: Machine Dependencies
11697 TIC54X Dependent Features
11698 =========================
11700 * Menu:
11702 * TIC54X-Opts::              Command-line Options
11703 * TIC54X-Block::             Blocking
11704 * TIC54X-Env::               Environment Settings
11705 * TIC54X-Constants::         Constants Syntax
11706 * TIC54X-Subsyms::           String Substitution
11707 * TIC54X-Locals::            Local Label Syntax
11708 * TIC54X-Builtins::          Builtin Assembler Math Functions
11709 * TIC54X-Ext::               Extended Addressing Support
11710 * TIC54X-Directives::        Directives
11711 * TIC54X-Macros::            Macro Features
11712 * TIC54X-MMRegs::            Memory-mapped Registers
11714 \x1f
11715 File: as.info,  Node: TIC54X-Opts,  Next: TIC54X-Block,  Up: TIC54X-Dependent
11717 Options
11718 -------
11720    The TMS320C54x version of `as' has a few machine-dependent options.
11722    You can use the `-mfar-mode' option to enable extended addressing
11723 mode.  All addresses will be assumed to be > 16 bits, and the
11724 appropriate relocation types will be used.  This option is equivalent
11725 to using the `.far_mode' directive in the assembly code.  If you do not
11726 use the `-mfar-mode' option, all references will be assumed to be 16
11727 bits.  This option may be abbreviated to `-mf'.
11729    You can use the `-mcpu' option to specify a particular CPU.  This
11730 option is equivalent to using the `.version' directive in the assembly
11731 code.  For recognized CPU codes, see *Note `.version':
11732 TIC54X-Directives.  The default CPU version is `542'.
11734    You can use the `-merrors-to-file' option to redirect error output
11735 to a file (this provided for those deficient environments which don't
11736 provide adequate output redirection).  This option may be abbreviated to
11737 `-me'.
11739 \x1f
11740 File: as.info,  Node: TIC54X-Block,  Next: TIC54X-Env,  Prev: TIC54X-Opts,  Up: TIC54X-Dependent
11742 Blocking
11743 --------
11745    A blocked section or memory block is guaranteed not to cross the
11746 blocking boundary (usually a page, or 128 words) if it is smaller than
11747 the blocking size, or to start on a page boundary if it is larger than
11748 the blocking size.
11750 \x1f
11751 File: as.info,  Node: TIC54X-Env,  Next: TIC54X-Constants,  Prev: TIC54X-Block,  Up: TIC54X-Dependent
11753 Environment Settings
11754 --------------------
11756    `C54XDSP_DIR' and `A_DIR' are semicolon-separated paths which are
11757 added to the list of directories normally searched for source and
11758 include files.  `C54XDSP_DIR' will override `A_DIR'.
11760 \x1f
11761 File: as.info,  Node: TIC54X-Constants,  Next: TIC54X-Subsyms,  Prev: TIC54X-Env,  Up: TIC54X-Dependent
11763 Constants Syntax
11764 ----------------
11766    The TIC54X version of `as' allows the following additional constant
11767 formats, using a suffix to indicate the radix:
11769      Binary                  `000000B, 011000b'
11770      Octal                   `10Q, 224q'
11771      Hexadecimal             `45h, 0FH'
11773 \x1f
11774 File: as.info,  Node: TIC54X-Subsyms,  Next: TIC54X-Locals,  Prev: TIC54X-Constants,  Up: TIC54X-Dependent
11776 String Substitution
11777 -------------------
11779    A subset of allowable symbols (which we'll call subsyms) may be
11780 assigned arbitrary string values.  This is roughly equivalent to C
11781 preprocessor #define macros.  When `as' encounters one of these
11782 symbols, the symbol is replaced in the input stream by its string value.
11783 Subsym names *must* begin with a letter.
11785    Subsyms may be defined using the `.asg' and `.eval' directives
11786 (*Note `.asg': TIC54X-Directives, *Note `.eval': TIC54X-Directives.
11788    Expansion is recursive until a previously encountered symbol is
11789 seen, at which point substitution stops.
11791    In this example, x is replaced with SYM2; SYM2 is replaced with
11792 SYM1, and SYM1 is replaced with x.  At this point, x has already been
11793 encountered and the substitution stops.
11795       .asg   "x",SYM1
11796       .asg   "SYM1",SYM2
11797       .asg   "SYM2",x
11798       add    x,a             ; final code assembled is "add  x, a"
11800    Macro parameters are converted to subsyms; a side effect of this is
11801 the normal `as' '\ARG' dereferencing syntax is unnecessary.  Subsyms
11802 defined within a macro will have global scope, unless the `.var'
11803 directive is used to identify the subsym as a local macro variable
11804 *note `.var': TIC54X-Directives..
11806    Substitution may be forced in situations where replacement might be
11807 ambiguous by placing colons on either side of the subsym.  The following
11808 code:
11810       .eval  "10",x
11811      LAB:X:  add     #x, a
11813    When assembled becomes:
11815      LAB10  add     #10, a
11817    Smaller parts of the string assigned to a subsym may be accessed with
11818 the following syntax:
11820 ``:SYMBOL(CHAR_INDEX):''
11821      Evaluates to a single-character string, the character at
11822      CHAR_INDEX.
11824 ``:SYMBOL(START,LENGTH):''
11825      Evaluates to a substring of SYMBOL beginning at START with length
11826      LENGTH.
11828 \x1f
11829 File: as.info,  Node: TIC54X-Locals,  Next: TIC54X-Builtins,  Prev: TIC54X-Subsyms,  Up: TIC54X-Dependent
11831 Local Labels
11832 ------------
11834    Local labels may be defined in two ways:
11836    * $N, where N is a decimal number between 0 and 9
11838    * LABEL?, where LABEL is any legal symbol name.
11840    Local labels thus defined may be redefined or automatically
11841 generated.  The scope of a local label is based on when it may be
11842 undefined or reset.  This happens when one of the following situations
11843 is encountered:
11845    * .newblock directive *note `.newblock': TIC54X-Directives.
11847    * The current section is changed (.sect, .text, or .data)
11849    * Entering or leaving an included file
11851    * The macro scope where the label was defined is exited
11853 \x1f
11854 File: as.info,  Node: TIC54X-Builtins,  Next: TIC54X-Ext,  Prev: TIC54X-Locals,  Up: TIC54X-Dependent
11856 Math Builtins
11857 -------------
11859    The following built-in functions may be used to generate a
11860 floating-point value.  All return a floating-point value except `$cvi',
11861 `$int', and `$sgn', which return an integer value.
11863 ``$acos(EXPR)''
11864      Returns the floating point arccosine of EXPR.
11866 ``$asin(EXPR)''
11867      Returns the floating point arcsine of EXPR.
11869 ``$atan(EXPR)''
11870      Returns the floating point arctangent of EXPR.
11872 ``$atan2(EXPR1,EXPR2)''
11873      Returns the floating point arctangent of EXPR1 / EXPR2.
11875 ``$ceil(EXPR)''
11876      Returns the smallest integer not less than EXPR as floating point.
11878 ``$cosh(EXPR)''
11879      Returns the floating point hyperbolic cosine of EXPR.
11881 ``$cos(EXPR)''
11882      Returns the floating point cosine of EXPR.
11884 ``$cvf(EXPR)''
11885      Returns the integer value EXPR converted to floating-point.
11887 ``$cvi(EXPR)''
11888      Returns the floating point value EXPR converted to integer.
11890 ``$exp(EXPR)''
11891      Returns the floating point value e ^ EXPR.
11893 ``$fabs(EXPR)''
11894      Returns the floating point absolute value of EXPR.
11896 ``$floor(EXPR)''
11897      Returns the largest integer that is not greater than EXPR as
11898      floating point.
11900 ``$fmod(EXPR1,EXPR2)''
11901      Returns the floating point remainder of EXPR1 / EXPR2.
11903 ``$int(EXPR)''
11904      Returns 1 if EXPR evaluates to an integer, zero otherwise.
11906 ``$ldexp(EXPR1,EXPR2)''
11907      Returns the floating point value EXPR1 * 2 ^ EXPR2.
11909 ``$log10(EXPR)''
11910      Returns the base 10 logarithm of EXPR.
11912 ``$log(EXPR)''
11913      Returns the natural logarithm of EXPR.
11915 ``$max(EXPR1,EXPR2)''
11916      Returns the floating point maximum of EXPR1 and EXPR2.
11918 ``$min(EXPR1,EXPR2)''
11919      Returns the floating point minimum of EXPR1 and EXPR2.
11921 ``$pow(EXPR1,EXPR2)''
11922      Returns the floating point value EXPR1 ^ EXPR2.
11924 ``$round(EXPR)''
11925      Returns the nearest integer to EXPR as a floating point number.
11927 ``$sgn(EXPR)''
11928      Returns -1, 0, or 1 based on the sign of EXPR.
11930 ``$sin(EXPR)''
11931      Returns the floating point sine of EXPR.
11933 ``$sinh(EXPR)''
11934      Returns the floating point hyperbolic sine of EXPR.
11936 ``$sqrt(EXPR)''
11937      Returns the floating point square root of EXPR.
11939 ``$tan(EXPR)''
11940      Returns the floating point tangent of EXPR.
11942 ``$tanh(EXPR)''
11943      Returns the floating point hyperbolic tangent of EXPR.
11945 ``$trunc(EXPR)''
11946      Returns the integer value of EXPR truncated towards zero as
11947      floating point.
11949 \x1f
11950 File: as.info,  Node: TIC54X-Ext,  Next: TIC54X-Directives,  Prev: TIC54X-Builtins,  Up: TIC54X-Dependent
11952 Extended Addressing
11953 -------------------
11955    The `LDX' pseudo-op is provided for loading the extended addressing
11956 bits of a label or address.  For example, if an address `_label' resides
11957 in extended program memory, the value of `_label' may be loaded as
11958 follows:
11959       ldx     #_label,16,a    ; loads extended bits of _label
11960       or      #_label,a       ; loads lower 16 bits of _label
11961       bacc    a               ; full address is in accumulator A
11963 \x1f
11964 File: as.info,  Node: TIC54X-Directives,  Next: TIC54X-Macros,  Prev: TIC54X-Ext,  Up: TIC54X-Dependent
11966 Directives
11967 ----------
11969 `.align [SIZE]'
11970 `.even'
11971      Align the section program counter on the next boundary, based on
11972      SIZE.  SIZE may be any power of 2.  `.even' is equivalent to
11973      `.align' with a SIZE of 2.
11974     `1'
11975           Align SPC to word boundary
11977     `2'
11978           Align SPC to longword boundary (same as .even)
11980     `128'
11981           Align SPC to page boundary
11983 `.asg STRING, NAME'
11984      Assign NAME the string STRING.  String replacement is performed on
11985      STRING before assignment.
11987 `.eval STRING, NAME'
11988      Evaluate the contents of string STRING and assign the result as a
11989      string to the subsym NAME.  String replacement is performed on
11990      STRING before assignment.
11992 `.bss SYMBOL, SIZE [, [BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
11993      Reserve space for SYMBOL in the .bss section.  SIZE is in words.
11994      If present, BLOCKING_FLAG indicates the allocated space should be
11995      aligned on a page boundary if it would otherwise cross a page
11996      boundary.  If present, ALIGNMENT_FLAG causes the assembler to
11997      allocate SIZE on a long word boundary.
11999 `.byte VALUE [,...,VALUE_N]'
12000 `.ubyte VALUE [,...,VALUE_N]'
12001 `.char VALUE [,...,VALUE_N]'
12002 `.uchar VALUE [,...,VALUE_N]'
12003      Place one or more bytes into consecutive words of the current
12004      section.  The upper 8 bits of each word is zero-filled.  If a
12005      label is used, it points to the word allocated for the first byte
12006      encountered.
12008 `.clink ["SECTION_NAME"]'
12009      Set STYP_CLINK flag for this section, which indicates to the
12010      linker that if no symbols from this section are referenced, the
12011      section should not be included in the link.  If SECTION_NAME is
12012      omitted, the current section is used.
12014 `.c_mode'
12015      TBD.
12017 `.copy "FILENAME" | FILENAME'
12018 `.include "FILENAME" | FILENAME'
12019      Read source statements from FILENAME.  The normal include search
12020      path is used.  Normally .copy will cause statements from the
12021      included file to be printed in the assembly listing and .include
12022      will not, but this distinction is not currently implemented.
12024 `.data'
12025      Begin assembling code into the .data section.
12027 `.double VALUE [,...,VALUE_N]'
12028 `.ldouble VALUE [,...,VALUE_N]'
12029 `.float VALUE [,...,VALUE_N]'
12030 `.xfloat VALUE [,...,VALUE_N]'
12031      Place an IEEE single-precision floating-point representation of
12032      one or more floating-point values into the current section.  All
12033      but `.xfloat' align the result on a longword boundary.  Values are
12034      stored most-significant word first.
12036 `.drlist'
12037 `.drnolist'
12038      Control printing of directives to the listing file.  Ignored.
12040 `.emsg STRING'
12041 `.mmsg STRING'
12042 `.wmsg STRING'
12043      Emit a user-defined error, message, or warning, respectively.
12045 `.far_mode'
12046      Use extended addressing when assembling statements.  This should
12047      appear only once per file, and is equivalent to the -mfar-mode
12048      option *note `-mfar-mode': TIC54X-Opts..
12050 `.fclist'
12051 `.fcnolist'
12052      Control printing of false conditional blocks to the listing file.
12054 `.field VALUE [,SIZE]'
12055      Initialize a bitfield of SIZE bits in the current section.  If
12056      VALUE is relocatable, then SIZE must be 16.  SIZE defaults to 16
12057      bits.  If VALUE does not fit into SIZE bits, the value will be
12058      truncated.  Successive `.field' directives will pack starting at
12059      the current word, filling the most significant bits first, and
12060      aligning to the start of the next word if the field size does not
12061      fit into the space remaining in the current word.  A `.align'
12062      directive with an operand of 1 will force the next `.field'
12063      directive to begin packing into a new word.  If a label is used, it
12064      points to the word that contains the specified field.
12066 `.global SYMBOL [,...,SYMBOL_N]'
12067 `.def SYMBOL [,...,SYMBOL_N]'
12068 `.ref SYMBOL [,...,SYMBOL_N]'
12069      `.def' nominally identifies a symbol defined in the current file
12070      and availalbe to other files.  `.ref' identifies a symbol used in
12071      the current file but defined elsewhere.  Both map to the standard
12072      `.global' directive.
12074 `.half VALUE [,...,VALUE_N]'
12075 `.uhalf VALUE [,...,VALUE_N]'
12076 `.short VALUE [,...,VALUE_N]'
12077 `.ushort VALUE [,...,VALUE_N]'
12078 `.int VALUE [,...,VALUE_N]'
12079 `.uint VALUE [,...,VALUE_N]'
12080 `.word VALUE [,...,VALUE_N]'
12081 `.uword VALUE [,...,VALUE_N]'
12082      Place one or more values into consecutive words of the current
12083      section.  If a label is used, it points to the word allocated for
12084      the first value encountered.
12086 `.label SYMBOL'
12087      Define a special SYMBOL to refer to the load time address of the
12088      current section program counter.
12090 `.length'
12091 `.width'
12092      Set the page length and width of the output listing file.  Ignored.
12094 `.list'
12095 `.nolist'
12096      Control whether the source listing is printed.  Ignored.
12098 `.long VALUE [,...,VALUE_N]'
12099 `.ulong VALUE [,...,VALUE_N]'
12100 `.xlong VALUE [,...,VALUE_N]'
12101      Place one or more 32-bit values into consecutive words in the
12102      current section.  The most significant word is stored first.
12103      `.long' and `.ulong' align the result on a longword boundary;
12104      `xlong' does not.
12106 `.loop [COUNT]'
12107 `.break [CONDITION]'
12108 `.endloop'
12109      Repeatedly assemble a block of code.  `.loop' begins the block, and
12110      `.endloop' marks its termination.  COUNT defaults to 1024, and
12111      indicates the number of times the block should be repeated.
12112      `.break' terminates the loop so that assembly begins after the
12113      `.endloop' directive.  The optional CONDITION will cause the loop
12114      to terminate only if it evaluates to zero.
12116 `MACRO_NAME .macro [PARAM1][,...PARAM_N]'
12117 `[.mexit]'
12118 `.endm'
12119      See the section on macros for more explanation (*Note
12120      TIC54X-Macros::.
12122 `.mlib "FILENAME" | FILENAME'
12123      Load the macro library FILENAME.  FILENAME must be an archived
12124      library (BFD ar-compatible) of text files, expected to contain
12125      only macro definitions.   The standard include search path is used.
12127 `.mlist'
12129 `.mnolist'
12130      Control whether to include macro and loop block expansions in the
12131      listing output.  Ignored.
12133 `.mmregs'
12134      Define global symbolic names for the 'c54x registers.  Supposedly
12135      equivalent to executing `.set' directives for each register with
12136      its memory-mapped value, but in reality is provided only for
12137      compatibility and does nothing.
12139 `.newblock'
12140      This directive resets any TIC54X local labels currently defined.
12141      Normal `as' local labels are unaffected.
12143 `.option OPTION_LIST'
12144      Set listing options.  Ignored.
12146 `.sblock "SECTION_NAME" | SECTION_NAME [,"NAME_N" | NAME_N]'
12147      Designate SECTION_NAME for blocking.  Blocking guarantees that a
12148      section will start on a page boundary (128 words) if it would
12149      otherwise cross a page boundary.  Only initialized sections may be
12150      designated with this directive.  See also *Note TIC54X-Block::.
12152 `.sect "SECTION_NAME"'
12153      Define a named initialized section and make it the current section.
12155 `SYMBOL .set "VALUE"'
12156 `SYMBOL .equ "VALUE"'
12157      Equate a constant VALUE to a SYMBOL, which is placed in the symbol
12158      table.  SYMBOL may not be previously defined.
12160 `.space SIZE_IN_BITS'
12161 `.bes SIZE_IN_BITS'
12162      Reserve the given number of bits in the current section and
12163      zero-fill them.  If a label is used with `.space', it points to the
12164      *first* word reserved.  With `.bes', the label points to the
12165      *last* word reserved.
12167 `.sslist'
12168 `.ssnolist'
12169      Controls the inclusion of subsym replacement in the listing
12170      output.  Ignored.
12172 `.string "STRING" [,...,"STRING_N"]'
12173 `.pstring "STRING" [,...,"STRING_N"]'
12174      Place 8-bit characters from STRING into the current section.
12175      `.string' zero-fills the upper 8 bits of each word, while
12176      `.pstring' puts two characters into each word, filling the
12177      most-significant bits first.  Unused space is zero-filled.  If a
12178      label is used, it points to the first word initialized.
12180 `[STAG] .struct [OFFSET]'
12181 `[NAME_1] element [COUNT_1]'
12182 `[NAME_2] element [COUNT_2]'
12183 `[TNAME] .tag STAGX [TCOUNT]'
12184 `...'
12185 `[NAME_N] element [COUNT_N]'
12186 `[SSIZE] .endstruct'
12187 `LABEL .tag [STAG]'
12188      Assign symbolic offsets to the elements of a structure.  STAG
12189      defines a symbol to use to reference the structure.  OFFSET
12190      indicates a starting value to use for the first element
12191      encountered; otherwise it defaults to zero.  Each element can have
12192      a named offset, NAME, which is a symbol assigned the value of the
12193      element's offset into the structure.  If STAG is missing, these
12194      become global symbols.  COUNT adjusts the offset that many times,
12195      as if `element' were an array.  `element' may be one of `.byte',
12196      `.word', `.long', `.float', or any equivalent of those, and the
12197      structure offset is adjusted accordingly.  `.field' and `.string'
12198      are also allowed; the size of `.field' is one bit, and `.string'
12199      is considered to be one word in size.  Only element descriptors,
12200      structure/union tags, `.align' and conditional assembly directives
12201      are allowed within `.struct'/`.endstruct'.  `.align' aligns member
12202      offsets to word boundaries only.  SSIZE, if provided, will always
12203      be assigned the size of the structure.
12205      The `.tag' directive, in addition to being used to define a
12206      structure/union element within a structure, may be used to apply a
12207      structure to a symbol.  Once applied to LABEL, the individual
12208      structure elements may be applied to LABEL to produce the desired
12209      offsets using LABEL as the structure base.
12211 `.tab'
12212      Set the tab size in the output listing.  Ignored.
12214 `[UTAG] .union'
12215 `[NAME_1] element [COUNT_1]'
12216 `[NAME_2] element [COUNT_2]'
12217 `[TNAME] .tag UTAGX[,TCOUNT]'
12218 `...'
12219 `[NAME_N] element [COUNT_N]'
12220 `[USIZE] .endstruct'
12221 `LABEL .tag [UTAG]'
12222      Similar to `.struct', but the offset after each element is reset to
12223      zero, and the USIZE is set to the maximum of all defined elements.
12224      Starting offset for the union is always zero.
12226 `[SYMBOL] .usect "SECTION_NAME", SIZE, [,[BLOCKING_FLAG] [,ALIGNMENT_FLAG]]'
12227      Reserve space for variables in a named, uninitialized section
12228      (similar to .bss).  `.usect' allows definitions sections
12229      independent of .bss.  SYMBOL points to the first location reserved
12230      by this allocation.  The symbol may be used as a variable name.
12231      SIZE is the allocated size in words.  BLOCKING_FLAG indicates
12232      whether to block this section on a page boundary (128 words)
12233      (*note TIC54X-Block::).  ALIGNMENT FLAG indicates whether the
12234      section should be longword-aligned.
12236 `.var SYM[,..., SYM_N]'
12237      Define a subsym to be a local variable within a macro.  See *Note
12238      TIC54X-Macros::.
12240 `.version VERSION'
12241      Set which processor to build instructions for.  Though the
12242      following values are accepted, the op is ignored.
12243     `541'
12244     `542'
12245     `543'
12246     `545'
12247     `545LP'
12248     `546LP'
12249     `548'
12250     `549'
12251 \x1f
12252 File: as.info,  Node: TIC54X-Macros,  Next: TIC54X-MMRegs,  Prev: TIC54X-Directives,  Up: TIC54X-Dependent
12254 Macros
12255 ------
12257    Macros do not require explicit dereferencing of arguments (i.e.
12258 \ARG).
12260    During macro expansion, the macro parameters are converted to
12261 subsyms.  If the number of arguments passed the macro invocation
12262 exceeds the number of parameters defined, the last parameter is
12263 assigned the string equivalent of all remaining arguments.  If fewer
12264 arguments are given than parameters, the missing parameters are
12265 assigned empty strings.  To include a comma in an argument, you must
12266 enclose the argument in quotes.
12268    The following built-in subsym functions allow examination of the
12269 string value of subsyms (or ordinary strings).  The arguments are
12270 strings unless otherwise indicated (subsyms passed as args will be
12271 replaced by the strings they represent).
12272 ``$symlen(STR)''
12273      Returns the length of STR.
12275 ``$symcmp(STR1,STR2)''
12276      Returns 0 if STR1 == STR2, non-zero otherwise.
12278 ``$firstch(STR,CH)''
12279      Returns index of the first occurrence of character constant CH in
12280      STR.
12282 ``$lastch(STR,CH)''
12283      Returns index of the last occurrence of character constant CH in
12284      STR.
12286 ``$isdefed(SYMBOL)''
12287      Returns zero if the symbol SYMBOL is not in the symbol table,
12288      non-zero otherwise.
12290 ``$ismember(SYMBOL,LIST)''
12291      Assign the first member of comma-separated string LIST to SYMBOL;
12292      LIST is reassigned the remainder of the list.  Returns zero if
12293      LIST is a null string.  Both arguments must be subsyms.
12295 ``$iscons(EXPR)''
12296      Returns 1 if string EXPR is binary, 2 if octal, 3 if hexadecimal,
12297      4 if a character, 5 if decimal, and zero if not an integer.
12299 ``$isname(NAME)''
12300      Returns 1 if NAME is a valid symbol name, zero otherwise.
12302 ``$isreg(REG)''
12303      Returns 1 if REG is a valid predefined register name (AR0-AR7
12304      only).
12306 ``$structsz(STAG)''
12307      Returns the size of the structure or union represented by STAG.
12309 ``$structacc(STAG)''
12310      Returns the reference point of the structure or union represented
12311      by STAG.   Always returns zero.
12313 \x1f
12314 File: as.info,  Node: TIC54X-MMRegs,  Prev: TIC54X-Macros,  Up: TIC54X-Dependent
12316 Memory-mapped Registers
12317 -----------------------
12319    The following symbols are recognized as memory-mapped registers:
12321 \x1f
12322 File: as.info,  Node: Z8000-Dependent,  Next: Vax-Dependent,  Prev: Xtensa-Dependent,  Up: Machine Dependencies
12324 Z8000 Dependent Features
12325 ========================
12327    The Z8000 as supports both members of the Z8000 family: the
12328 unsegmented Z8002, with 16 bit addresses, and the segmented Z8001 with
12329 24 bit addresses.
12331    When the assembler is in unsegmented mode (specified with the
12332 `unsegm' directive), an address takes up one word (16 bit) sized
12333 register.  When the assembler is in segmented mode (specified with the
12334 `segm' directive), a 24-bit address takes up a long (32 bit) register.
12335 *Note Assembler Directives for the Z8000: Z8000 Directives, for a list
12336 of other Z8000 specific assembler directives.
12338 * Menu:
12340 * Z8000 Options::               Command-line options for the Z8000
12341 * Z8000 Syntax::                Assembler syntax for the Z8000
12342 * Z8000 Directives::            Special directives for the Z8000
12343 * Z8000 Opcodes::               Opcodes
12345 \x1f
12346 File: as.info,  Node: Z8000 Options,  Next: Z8000 Syntax,  Up: Z8000-Dependent
12348 Options
12349 -------
12351 `-z8001'
12352      Generate segmented code by default.
12354 `-z8002'
12355      Generate unsegmented code by default.
12357 \x1f
12358 File: as.info,  Node: Z8000 Syntax,  Next: Z8000 Directives,  Prev: Z8000 Options,  Up: Z8000-Dependent
12360 Syntax
12361 ------
12363 * Menu:
12365 * Z8000-Chars::                Special Characters
12366 * Z8000-Regs::                 Register Names
12367 * Z8000-Addressing::           Addressing Modes
12369 \x1f
12370 File: as.info,  Node: Z8000-Chars,  Next: Z8000-Regs,  Up: Z8000 Syntax
12372 Special Characters
12373 ..................
12375    `!' is the line comment character.
12377    You can use `;' instead of a newline to separate statements.
12379 \x1f
12380 File: as.info,  Node: Z8000-Regs,  Next: Z8000-Addressing,  Prev: Z8000-Chars,  Up: Z8000 Syntax
12382 Register Names
12383 ..............
12385    The Z8000 has sixteen 16 bit registers, numbered 0 to 15.  You can
12386 refer to different sized groups of registers by register number, with
12387 the prefix `r' for 16 bit registers, `rr' for 32 bit registers and `rq'
12388 for 64 bit registers.  You can also refer to the contents of the first
12389 eight (of the sixteen 16 bit registers) by bytes.  They are named `rlN'
12390 and `rhN'.
12392 _byte registers_
12393      rl0 rh0 rl1 rh1 rl2 rh2 rl3 rh3
12394      rl4 rh4 rl5 rh5 rl6 rh6 rl7 rh7
12395      
12396 _word registers_
12397      r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r11 r12 r13 r14 r15
12398      
12399 _long word registers_
12400      rr0 rr2 rr4 rr6 rr8 rr10 rr12 rr14
12401      
12402 _quad word registers_
12403      rq0 rq4 rq8 rq12
12405 \x1f
12406 File: as.info,  Node: Z8000-Addressing,  Prev: Z8000-Regs,  Up: Z8000 Syntax
12408 Addressing Modes
12409 ................
12411    as understands the following addressing modes for the Z8000:
12413 `rlN'
12414 `rhN'
12415 `rN'
12416 `rrN'
12417 `rqN'
12418      Register direct:  8bit, 16bit, 32bit, and 64bit registers.
12420 `@rN'
12421 `@rrN'
12422      Indirect register:  @rrN in segmented mode, @rN in unsegmented
12423      mode.
12425 `ADDR'
12426      Direct: the 16 bit or 24 bit address (depending on whether the
12427      assembler is in segmented or unsegmented mode) of the operand is
12428      in the instruction.
12430 `address(rN)'
12431      Indexed: the 16 or 24 bit address is added to the 16 bit register
12432      to produce the final address in memory of the operand.
12434 `rN(#IMM)'
12435 `rrN(#IMM)'
12436      Base Address: the 16 or 24 bit register is added to the 16 bit sign
12437      extended immediate displacement to produce the final address in
12438      memory of the operand.
12440 `rN(rM)'
12441 `rrN(rM)'
12442      Base Index: the 16 or 24 bit register rN or rrN is added to the
12443      sign extended 16 bit index register rM to produce the final
12444      address in memory of the operand.
12446 `#XX'
12447      Immediate data XX.
12449 \x1f
12450 File: as.info,  Node: Z8000 Directives,  Next: Z8000 Opcodes,  Prev: Z8000 Syntax,  Up: Z8000-Dependent
12452 Assembler Directives for the Z8000
12453 ----------------------------------
12455    The Z8000 port of as includes additional assembler directives, for
12456 compatibility with other Z8000 assemblers.  These do not begin with `.'
12457 (unlike the ordinary as directives).
12459 `segm'
12460 `.z8001'
12461      Generate code for the segmented Z8001.
12463 `unsegm'
12464 `.z8002'
12465      Generate code for the unsegmented Z8002.
12467 `name'
12468      Synonym for `.file'
12470 `global'
12471      Synonym for `.global'
12473 `wval'
12474      Synonym for `.word'
12476 `lval'
12477      Synonym for `.long'
12479 `bval'
12480      Synonym for `.byte'
12482 `sval'
12483      Assemble a string.  `sval' expects one string literal, delimited by
12484      single quotes.  It assembles each byte of the string into
12485      consecutive addresses.  You can use the escape sequence `%XX'
12486      (where XX represents a two-digit hexadecimal number) to represent
12487      the character whose ASCII value is XX.  Use this feature to
12488      describe single quote and other characters that may not appear in
12489      string literals as themselves.  For example, the C statement
12490      `char *a = "he said \"it's 50% off\"";' is represented in Z8000
12491      assembly language (shown with the assembler output in hex at the
12492      left) as
12494           68652073    sval    'he said %22it%27s 50%25 off%22%00'
12495           61696420
12496           22697427
12497           73203530
12498           25206F66
12499           662200
12501 `rsect'
12502      synonym for `.section'
12504 `block'
12505      synonym for `.space'
12507 `even'
12508      special case of `.align'; aligns output to even byte boundary.
12510 \x1f
12511 File: as.info,  Node: Z8000 Opcodes,  Prev: Z8000 Directives,  Up: Z8000-Dependent
12513 Opcodes
12514 -------
12516    For detailed information on the Z8000 machine instruction set, see
12517 `Z8000 Technical Manual'.
12519    The following table summarizes the opcodes and their arguments:
12521                  rs   16 bit source register
12522                  rd   16 bit destination register
12523                  rbs   8 bit source register
12524                  rbd   8 bit destination register
12525                  rrs   32 bit source register
12526                  rrd   32 bit destination register
12527                  rqs   64 bit source register
12528                  rqd   64 bit destination register
12529                  addr 16/24 bit address
12530                  imm  immediate data
12531      
12532      adc rd,rs               clrb addr               cpsir @rd,@rs,rr,cc
12533      adcb rbd,rbs            clrb addr(rd)           cpsirb @rd,@rs,rr,cc
12534      add rd,@rs              clrb rbd                dab rbd
12535      add rd,addr             com @rd                 dbjnz rbd,disp7
12536      add rd,addr(rs)         com addr                dec @rd,imm4m1
12537      add rd,imm16            com addr(rd)            dec addr(rd),imm4m1
12538      add rd,rs               com rd                  dec addr,imm4m1
12539      addb rbd,@rs            comb @rd                dec rd,imm4m1
12540      addb rbd,addr           comb addr               decb @rd,imm4m1
12541      addb rbd,addr(rs)       comb addr(rd)           decb addr(rd),imm4m1
12542      addb rbd,imm8           comb rbd                decb addr,imm4m1
12543      addb rbd,rbs            comflg flags            decb rbd,imm4m1
12544      addl rrd,@rs            cp @rd,imm16            di i2
12545      addl rrd,addr           cp addr(rd),imm16       div rrd,@rs
12546      addl rrd,addr(rs)       cp addr,imm16           div rrd,addr
12547      addl rrd,imm32          cp rd,@rs               div rrd,addr(rs)
12548      addl rrd,rrs            cp rd,addr              div rrd,imm16
12549      and rd,@rs              cp rd,addr(rs)          div rrd,rs
12550      and rd,addr             cp rd,imm16             divl rqd,@rs
12551      and rd,addr(rs)         cp rd,rs                divl rqd,addr
12552      and rd,imm16            cpb @rd,imm8            divl rqd,addr(rs)
12553      and rd,rs               cpb addr(rd),imm8       divl rqd,imm32
12554      andb rbd,@rs            cpb addr,imm8           divl rqd,rrs
12555      andb rbd,addr           cpb rbd,@rs             djnz rd,disp7
12556      andb rbd,addr(rs)       cpb rbd,addr            ei i2
12557      andb rbd,imm8           cpb rbd,addr(rs)        ex rd,@rs
12558      andb rbd,rbs            cpb rbd,imm8            ex rd,addr
12559      bit @rd,imm4            cpb rbd,rbs             ex rd,addr(rs)
12560      bit addr(rd),imm4       cpd rd,@rs,rr,cc        ex rd,rs
12561      bit addr,imm4           cpdb rbd,@rs,rr,cc      exb rbd,@rs
12562      bit rd,imm4             cpdr rd,@rs,rr,cc       exb rbd,addr
12563      bit rd,rs               cpdrb rbd,@rs,rr,cc     exb rbd,addr(rs)
12564      bitb @rd,imm4           cpi rd,@rs,rr,cc        exb rbd,rbs
12565      bitb addr(rd),imm4      cpib rbd,@rs,rr,cc      ext0e imm8
12566      bitb addr,imm4          cpir rd,@rs,rr,cc       ext0f imm8
12567      bitb rbd,imm4           cpirb rbd,@rs,rr,cc     ext8e imm8
12568      bitb rbd,rs             cpl rrd,@rs             ext8f imm8
12569      bpt                     cpl rrd,addr            exts rrd
12570      call @rd                cpl rrd,addr(rs)        extsb rd
12571      call addr               cpl rrd,imm32           extsl rqd
12572      call addr(rd)           cpl rrd,rrs             halt
12573      calr disp12             cpsd @rd,@rs,rr,cc      in rd,@rs
12574      clr @rd                 cpsdb @rd,@rs,rr,cc     in rd,imm16
12575      clr addr                cpsdr @rd,@rs,rr,cc     inb rbd,@rs
12576      clr addr(rd)            cpsdrb @rd,@rs,rr,cc    inb rbd,imm16
12577      clr rd                  cpsi @rd,@rs,rr,cc      inc @rd,imm4m1
12578      clrb @rd                cpsib @rd,@rs,rr,cc     inc addr(rd),imm4m1
12579      inc addr,imm4m1         ldb rbd,rs(rx)          mult rrd,addr(rs)
12580      inc rd,imm4m1           ldb rd(imm16),rbs       mult rrd,imm16
12581      incb @rd,imm4m1         ldb rd(rx),rbs          mult rrd,rs
12582      incb addr(rd),imm4m1    ldctl ctrl,rs           multl rqd,@rs
12583      incb addr,imm4m1        ldctl rd,ctrl           multl rqd,addr
12584      incb rbd,imm4m1         ldd @rs,@rd,rr          multl rqd,addr(rs)
12585      ind @rd,@rs,ra          lddb @rs,@rd,rr         multl rqd,imm32
12586      indb @rd,@rs,rba        lddr @rs,@rd,rr         multl rqd,rrs
12587      inib @rd,@rs,ra         lddrb @rs,@rd,rr        neg @rd
12588      inibr @rd,@rs,ra        ldi @rd,@rs,rr          neg addr
12589      iret                    ldib @rd,@rs,rr         neg addr(rd)
12590      jp cc,@rd               ldir @rd,@rs,rr         neg rd
12591      jp cc,addr              ldirb @rd,@rs,rr        negb @rd
12592      jp cc,addr(rd)          ldk rd,imm4             negb addr
12593      jr cc,disp8             ldl @rd,rrs             negb addr(rd)
12594      ld @rd,imm16            ldl addr(rd),rrs        negb rbd
12595      ld @rd,rs               ldl addr,rrs            nop
12596      ld addr(rd),imm16       ldl rd(imm16),rrs       or rd,@rs
12597      ld addr(rd),rs          ldl rd(rx),rrs          or rd,addr
12598      ld addr,imm16           ldl rrd,@rs             or rd,addr(rs)
12599      ld addr,rs              ldl rrd,addr            or rd,imm16
12600      ld rd(imm16),rs         ldl rrd,addr(rs)        or rd,rs
12601      ld rd(rx),rs            ldl rrd,imm32           orb rbd,@rs
12602      ld rd,@rs               ldl rrd,rrs             orb rbd,addr
12603      ld rd,addr              ldl rrd,rs(imm16)       orb rbd,addr(rs)
12604      ld rd,addr(rs)          ldl rrd,rs(rx)          orb rbd,imm8
12605      ld rd,imm16             ldm @rd,rs,n            orb rbd,rbs
12606      ld rd,rs                ldm addr(rd),rs,n       out @rd,rs
12607      ld rd,rs(imm16)         ldm addr,rs,n           out imm16,rs
12608      ld rd,rs(rx)            ldm rd,@rs,n            outb @rd,rbs
12609      lda rd,addr             ldm rd,addr(rs),n       outb imm16,rbs
12610      lda rd,addr(rs)         ldm rd,addr,n           outd @rd,@rs,ra
12611      lda rd,rs(imm16)        ldps @rs                outdb @rd,@rs,rba
12612      lda rd,rs(rx)           ldps addr               outib @rd,@rs,ra
12613      ldar rd,disp16          ldps addr(rs)           outibr @rd,@rs,ra
12614      ldb @rd,imm8            ldr disp16,rs           pop @rd,@rs
12615      ldb @rd,rbs             ldr rd,disp16           pop addr(rd),@rs
12616      ldb addr(rd),imm8       ldrb disp16,rbs         pop addr,@rs
12617      ldb addr(rd),rbs        ldrb rbd,disp16         pop rd,@rs
12618      ldb addr,imm8           ldrl disp16,rrs         popl @rd,@rs
12619      ldb addr,rbs            ldrl rrd,disp16         popl addr(rd),@rs
12620      ldb rbd,@rs             mbit                    popl addr,@rs
12621      ldb rbd,addr            mreq rd                 popl rrd,@rs
12622      ldb rbd,addr(rs)        mres                    push @rd,@rs
12623      ldb rbd,imm8            mset                    push @rd,addr
12624      ldb rbd,rbs             mult rrd,@rs            push @rd,addr(rs)
12625      ldb rbd,rs(imm16)       mult rrd,addr           push @rd,imm16
12626      push @rd,rs             set addr,imm4           subl rrd,imm32
12627      pushl @rd,@rs           set rd,imm4             subl rrd,rrs
12628      pushl @rd,addr          set rd,rs               tcc cc,rd
12629      pushl @rd,addr(rs)      setb @rd,imm4           tccb cc,rbd
12630      pushl @rd,rrs           setb addr(rd),imm4      test @rd
12631      res @rd,imm4            setb addr,imm4          test addr
12632      res addr(rd),imm4       setb rbd,imm4           test addr(rd)
12633      res addr,imm4           setb rbd,rs             test rd
12634      res rd,imm4             setflg imm4             testb @rd
12635      res rd,rs               sinb rbd,imm16          testb addr
12636      resb @rd,imm4           sinb rd,imm16           testb addr(rd)
12637      resb addr(rd),imm4      sind @rd,@rs,ra         testb rbd
12638      resb addr,imm4          sindb @rd,@rs,rba       testl @rd
12639      resb rbd,imm4           sinib @rd,@rs,ra        testl addr
12640      resb rbd,rs             sinibr @rd,@rs,ra       testl addr(rd)
12641      resflg imm4             sla rd,imm8             testl rrd
12642      ret cc                  slab rbd,imm8           trdb @rd,@rs,rba
12643      rl rd,imm1or2           slal rrd,imm8           trdrb @rd,@rs,rba
12644      rlb rbd,imm1or2         sll rd,imm8             trib @rd,@rs,rbr
12645      rlc rd,imm1or2          sllb rbd,imm8           trirb @rd,@rs,rbr
12646      rlcb rbd,imm1or2        slll rrd,imm8           trtdrb @ra,@rb,rbr
12647      rldb rbb,rba            sout imm16,rs           trtib @ra,@rb,rr
12648      rr rd,imm1or2           soutb imm16,rbs         trtirb @ra,@rb,rbr
12649      rrb rbd,imm1or2         soutd @rd,@rs,ra        trtrb @ra,@rb,rbr
12650      rrc rd,imm1or2          soutdb @rd,@rs,rba      tset @rd
12651      rrcb rbd,imm1or2        soutib @rd,@rs,ra       tset addr
12652      rrdb rbb,rba            soutibr @rd,@rs,ra      tset addr(rd)
12653      rsvd36                  sra rd,imm8             tset rd
12654      rsvd38                  srab rbd,imm8           tsetb @rd
12655      rsvd78                  sral rrd,imm8           tsetb addr
12656      rsvd7e                  srl rd,imm8             tsetb addr(rd)
12657      rsvd9d                  srlb rbd,imm8           tsetb rbd
12658      rsvd9f                  srll rrd,imm8           xor rd,@rs
12659      rsvdb9                  sub rd,@rs              xor rd,addr
12660      rsvdbf                  sub rd,addr             xor rd,addr(rs)
12661      sbc rd,rs               sub rd,addr(rs)         xor rd,imm16
12662      sbcb rbd,rbs            sub rd,imm16            xor rd,rs
12663      sc imm8                 sub rd,rs               xorb rbd,@rs
12664      sda rd,rs               subb rbd,@rs            xorb rbd,addr
12665      sdab rbd,rs             subb rbd,addr           xorb rbd,addr(rs)
12666      sdal rrd,rs             subb rbd,addr(rs)       xorb rbd,imm8
12667      sdl rd,rs               subb rbd,imm8           xorb rbd,rbs
12668      sdlb rbd,rs             subb rbd,rbs            xorb rbd,rbs
12669      sdll rrd,rs             subl rrd,@rs
12670      set @rd,imm4            subl rrd,addr
12671      set addr(rd),imm4       subl rrd,addr(rs)
12673 \x1f
12674 File: as.info,  Node: Vax-Dependent,  Prev: Z8000-Dependent,  Up: Machine Dependencies
12676 VAX Dependent Features
12677 ======================
12679 * Menu:
12681 * VAX-Opts::                    VAX Command-Line Options
12682 * VAX-float::                   VAX Floating Point
12683 * VAX-directives::              Vax Machine Directives
12684 * VAX-opcodes::                 VAX Opcodes
12685 * VAX-branch::                  VAX Branch Improvement
12686 * VAX-operands::                VAX Operands
12687 * VAX-no::                      Not Supported on VAX
12689 \x1f
12690 File: as.info,  Node: VAX-Opts,  Next: VAX-float,  Up: Vax-Dependent
12692 VAX Command-Line Options
12693 ------------------------
12695    The Vax version of `as' accepts any of the following options, gives
12696 a warning message that the option was ignored and proceeds.  These
12697 options are for compatibility with scripts designed for other people's
12698 assemblers.
12700 ``-D' (Debug)'
12701 ``-S' (Symbol Table)'
12702 ``-T' (Token Trace)'
12703      These are obsolete options used to debug old assemblers.
12705 ``-d' (Displacement size for JUMPs)'
12706      This option expects a number following the `-d'.  Like options
12707      that expect filenames, the number may immediately follow the `-d'
12708      (old standard) or constitute the whole of the command line
12709      argument that follows `-d' (GNU standard).
12711 ``-V' (Virtualize Interpass Temporary File)'
12712      Some other assemblers use a temporary file.  This option commanded
12713      them to keep the information in active memory rather than in a
12714      disk file.  `as' always does this, so this option is redundant.
12716 ``-J' (JUMPify Longer Branches)'
12717      Many 32-bit computers permit a variety of branch instructions to
12718      do the same job.  Some of these instructions are short (and fast)
12719      but have a limited range; others are long (and slow) but can
12720      branch anywhere in virtual memory.  Often there are 3 flavors of
12721      branch: short, medium and long.  Some other assemblers would emit
12722      short and medium branches, unless told by this option to emit
12723      short and long branches.
12725 ``-t' (Temporary File Directory)'
12726      Some other assemblers may use a temporary file, and this option
12727      takes a filename being the directory to site the temporary file.
12728      Since `as' does not use a temporary disk file, this option makes
12729      no difference.  `-t' needs exactly one filename.
12731    The Vax version of the assembler accepts additional options when
12732 compiled for VMS:
12734 `-h N'
12735      External symbol or section (used for global variables) names are
12736      not case sensitive on VAX/VMS and always mapped to upper case.
12737      This is contrary to the C language definition which explicitly
12738      distinguishes upper and lower case.  To implement a standard
12739      conforming C compiler, names must be changed (mapped) to preserve
12740      the case information.  The default mapping is to convert all lower
12741      case characters to uppercase and adding an underscore followed by
12742      a 6 digit hex value, representing a 24 digit binary value.  The
12743      one digits in the binary value represent which characters are
12744      uppercase in the original symbol name.
12746      The `-h N' option determines how we map names.  This takes several
12747      values.  No `-h' switch at all allows case hacking as described
12748      above.  A value of zero (`-h0') implies names should be upper
12749      case, and inhibits the case hack.  A value of 2 (`-h2') implies
12750      names should be all lower case, with no case hack.  A value of 3
12751      (`-h3') implies that case should be preserved.  The value 1 is
12752      unused.  The `-H' option directs `as' to display every mapped
12753      symbol during assembly.
12755      Symbols whose names include a dollar sign `$' are exceptions to the
12756      general name mapping.  These symbols are normally only used to
12757      reference VMS library names.  Such symbols are always mapped to
12758      upper case.
12760 `-+'
12761      The `-+' option causes `as' to truncate any symbol name larger
12762      than 31 characters.  The `-+' option also prevents some code
12763      following the `_main' symbol normally added to make the object
12764      file compatible with Vax-11 "C".
12766 `-1'
12767      This option is ignored for backward compatibility with `as'
12768      version 1.x.
12770 `-H'
12771      The `-H' option causes `as' to print every symbol which was
12772      changed by case mapping.
12774 \x1f
12775 File: as.info,  Node: VAX-float,  Next: VAX-directives,  Prev: VAX-Opts,  Up: Vax-Dependent
12777 VAX Floating Point
12778 ------------------
12780    Conversion of flonums to floating point is correct, and compatible
12781 with previous assemblers.  Rounding is towards zero if the remainder is
12782 exactly half the least significant bit.
12784    `D', `F', `G' and `H' floating point formats are understood.
12786    Immediate floating literals (_e.g._ `S`$6.9') are rendered
12787 correctly.  Again, rounding is towards zero in the boundary case.
12789    The `.float' directive produces `f' format numbers.  The `.double'
12790 directive produces `d' format numbers.
12792 \x1f
12793 File: as.info,  Node: VAX-directives,  Next: VAX-opcodes,  Prev: VAX-float,  Up: Vax-Dependent
12795 Vax Machine Directives
12796 ----------------------
12798    The Vax version of the assembler supports four directives for
12799 generating Vax floating point constants.  They are described in the
12800 table below.
12802 `.dfloat'
12803      This expects zero or more flonums, separated by commas, and
12804      assembles Vax `d' format 64-bit floating point constants.
12806 `.ffloat'
12807      This expects zero or more flonums, separated by commas, and
12808      assembles Vax `f' format 32-bit floating point constants.
12810 `.gfloat'
12811      This expects zero or more flonums, separated by commas, and
12812      assembles Vax `g' format 64-bit floating point constants.
12814 `.hfloat'
12815      This expects zero or more flonums, separated by commas, and
12816      assembles Vax `h' format 128-bit floating point constants.
12818 \x1f
12819 File: as.info,  Node: VAX-opcodes,  Next: VAX-branch,  Prev: VAX-directives,  Up: Vax-Dependent
12821 VAX Opcodes
12822 -----------
12824    All DEC mnemonics are supported.  Beware that `case...' instructions
12825 have exactly 3 operands.  The dispatch table that follows the `case...'
12826 instruction should be made with `.word' statements.  This is compatible
12827 with all unix assemblers we know of.
12829 \x1f
12830 File: as.info,  Node: VAX-branch,  Next: VAX-operands,  Prev: VAX-opcodes,  Up: Vax-Dependent
12832 VAX Branch Improvement
12833 ----------------------
12835    Certain pseudo opcodes are permitted.  They are for branch
12836 instructions.  They expand to the shortest branch instruction that
12837 reaches the target.  Generally these mnemonics are made by substituting
12838 `j' for `b' at the start of a DEC mnemonic.  This feature is included
12839 both for compatibility and to help compilers.  If you do not need this
12840 feature, avoid these opcodes.  Here are the mnemonics, and the code
12841 they can expand into.
12843 `jbsb'
12844      `Jsb' is already an instruction mnemonic, so we chose `jbsb'.
12845     (byte displacement)
12846           `bsbb ...'
12848     (word displacement)
12849           `bsbw ...'
12851     (long displacement)
12852           `jsb ...'
12854 `jbr'
12855 `jr'
12856      Unconditional branch.
12857     (byte displacement)
12858           `brb ...'
12860     (word displacement)
12861           `brw ...'
12863     (long displacement)
12864           `jmp ...'
12866 `jCOND'
12867      COND may be any one of the conditional branches `neq', `nequ',
12868      `eql', `eqlu', `gtr', `geq', `lss', `gtru', `lequ', `vc', `vs',
12869      `gequ', `cc', `lssu', `cs'.  COND may also be one of the bit tests
12870      `bs', `bc', `bss', `bcs', `bsc', `bcc', `bssi', `bcci', `lbs',
12871      `lbc'.  NOTCOND is the opposite condition to COND.
12872     (byte displacement)
12873           `bCOND ...'
12875     (word displacement)
12876           `bNOTCOND foo ; brw ... ; foo:'
12878     (long displacement)
12879           `bNOTCOND foo ; jmp ... ; foo:'
12881 `jacbX'
12882      X may be one of `b d f g h l w'.
12883     (word displacement)
12884           `OPCODE ...'
12886     (long displacement)
12887                OPCODE ..., foo ;
12888                brb bar ;
12889                foo: jmp ... ;
12890                bar:
12892 `jaobYYY'
12893      YYY may be one of `lss leq'.
12895 `jsobZZZ'
12896      ZZZ may be one of `geq gtr'.
12897     (byte displacement)
12898           `OPCODE ...'
12900     (word displacement)
12901                OPCODE ..., foo ;
12902                brb bar ;
12903                foo: brw DESTINATION ;
12904                bar:
12906     (long displacement)
12907                OPCODE ..., foo ;
12908                brb bar ;
12909                foo: jmp DESTINATION ;
12910                bar:
12912 `aobleq'
12913 `aoblss'
12914 `sobgeq'
12915 `sobgtr'
12917     (byte displacement)
12918           `OPCODE ...'
12920     (word displacement)
12921                OPCODE ..., foo ;
12922                brb bar ;
12923                foo: brw DESTINATION ;
12924                bar:
12926     (long displacement)
12927                OPCODE ..., foo ;
12928                brb bar ;
12929                foo: jmp DESTINATION ;
12930                bar:
12932 \x1f
12933 File: as.info,  Node: VAX-operands,  Next: VAX-no,  Prev: VAX-branch,  Up: Vax-Dependent
12935 VAX Operands
12936 ------------
12938    The immediate character is `$' for Unix compatibility, not `#' as
12939 DEC writes it.
12941    The indirect character is `*' for Unix compatibility, not `@' as DEC
12942 writes it.
12944    The displacement sizing character is ``' (an accent grave) for Unix
12945 compatibility, not `^' as DEC writes it.  The letter preceding ``' may
12946 have either case.  `G' is not understood, but all other letters (`b i l
12947 s w') are understood.
12949    Register names understood are `r0 r1 r2 ... r15 ap fp sp pc'.  Upper
12950 and lower case letters are equivalent.
12952    For instance
12953      tstb *w`$4(r5)
12955    Any expression is permitted in an operand.  Operands are comma
12956 separated.
12958 \x1f
12959 File: as.info,  Node: VAX-no,  Prev: VAX-operands,  Up: Vax-Dependent
12961 Not Supported on VAX
12962 --------------------
12964    Vax bit fields can not be assembled with `as'.  Someone can add the
12965 required code if they really need it.
12967 \x1f
12968 File: as.info,  Node: V850-Dependent,  Next: Xtensa-Dependent,  Prev: TIC54X-Dependent,  Up: Machine Dependencies
12970 v850 Dependent Features
12971 =======================
12973 * Menu:
12975 * V850 Options::              Options
12976 * V850 Syntax::               Syntax
12977 * V850 Floating Point::       Floating Point
12978 * V850 Directives::           V850 Machine Directives
12979 * V850 Opcodes::              Opcodes
12981 \x1f
12982 File: as.info,  Node: V850 Options,  Next: V850 Syntax,  Up: V850-Dependent
12984 Options
12985 -------
12987    `as' supports the following additional command-line options for the
12988 V850 processor family:
12990 `-wsigned_overflow'
12991      Causes warnings to be produced when signed immediate values
12992      overflow the space available for then within their opcodes.  By
12993      default this option is disabled as it is possible to receive
12994      spurious warnings due to using exact bit patterns as immediate
12995      constants.
12997 `-wunsigned_overflow'
12998      Causes warnings to be produced when unsigned immediate values
12999      overflow the space available for then within their opcodes.  By
13000      default this option is disabled as it is possible to receive
13001      spurious warnings due to using exact bit patterns as immediate
13002      constants.
13004 `-mv850'
13005      Specifies that the assembled code should be marked as being
13006      targeted at the V850 processor.  This allows the linker to detect
13007      attempts to link such code with code assembled for other
13008      processors.
13010 `-mv850e'
13011      Specifies that the assembled code should be marked as being
13012      targeted at the V850E processor.  This allows the linker to detect
13013      attempts to link such code with code assembled for other
13014      processors.
13016 `-mv850e1'
13017      Specifies that the assembled code should be marked as being
13018      targeted at the V850E1 processor.  This allows the linker to
13019      detect attempts to link such code with code assembled for other
13020      processors.
13022 `-mv850any'
13023      Specifies that the assembled code should be marked as being
13024      targeted at the V850 processor but support instructions that are
13025      specific to the extended variants of the process.  This allows the
13026      production of binaries that contain target specific code, but
13027      which are also intended to be used in a generic fashion.  For
13028      example libgcc.a contains generic routines used by the code
13029      produced by GCC for all versions of the v850 architecture,
13030      together with support routines only used by the V850E architecture.
13032 `-mrelax'
13033      Enables relaxation.  This allows the .longcall and .longjump pseudo
13034      ops to be used in the assembler source code.  These ops label
13035      sections of code which are either a long function call or a long
13036      branch.  The assembler will then flag these sections of code and
13037      the linker will attempt to relax them.
13039 \x1f
13040 File: as.info,  Node: V850 Syntax,  Next: V850 Floating Point,  Prev: V850 Options,  Up: V850-Dependent
13042 Syntax
13043 ------
13045 * Menu:
13047 * V850-Chars::                Special Characters
13048 * V850-Regs::                 Register Names
13050 \x1f
13051 File: as.info,  Node: V850-Chars,  Next: V850-Regs,  Up: V850 Syntax
13053 Special Characters
13054 ..................
13056    `#' is the line comment character.
13058 \x1f
13059 File: as.info,  Node: V850-Regs,  Prev: V850-Chars,  Up: V850 Syntax
13061 Register Names
13062 ..............
13064    `as' supports the following names for registers:
13065 `general register 0'
13066      r0, zero
13068 `general register 1'
13069      r1
13071 `general register 2'
13072      r2, hp
13074 `general register 3'
13075      r3, sp
13077 `general register 4'
13078      r4, gp
13080 `general register 5'
13081      r5, tp
13083 `general register 6'
13084      r6
13086 `general register 7'
13087      r7
13089 `general register 8'
13090      r8
13092 `general register 9'
13093      r9
13095 `general register 10'
13096      r10
13098 `general register 11'
13099      r11
13101 `general register 12'
13102      r12
13104 `general register 13'
13105      r13
13107 `general register 14'
13108      r14
13110 `general register 15'
13111      r15
13113 `general register 16'
13114      r16
13116 `general register 17'
13117      r17
13119 `general register 18'
13120      r18
13122 `general register 19'
13123      r19
13125 `general register 20'
13126      r20
13128 `general register 21'
13129      r21
13131 `general register 22'
13132      r22
13134 `general register 23'
13135      r23
13137 `general register 24'
13138      r24
13140 `general register 25'
13141      r25
13143 `general register 26'
13144      r26
13146 `general register 27'
13147      r27
13149 `general register 28'
13150      r28
13152 `general register 29'
13153      r29
13155 `general register 30'
13156      r30, ep
13158 `general register 31'
13159      r31, lp
13161 `system register 0'
13162      eipc
13164 `system register 1'
13165      eipsw
13167 `system register 2'
13168      fepc
13170 `system register 3'
13171      fepsw
13173 `system register 4'
13174      ecr
13176 `system register 5'
13177      psw
13179 `system register 16'
13180      ctpc
13182 `system register 17'
13183      ctpsw
13185 `system register 18'
13186      dbpc
13188 `system register 19'
13189      dbpsw
13191 `system register 20'
13192      ctbp
13194 \x1f
13195 File: as.info,  Node: V850 Floating Point,  Next: V850 Directives,  Prev: V850 Syntax,  Up: V850-Dependent
13197 Floating Point
13198 --------------
13200    The V850 family uses IEEE floating-point numbers.
13202 \x1f
13203 File: as.info,  Node: V850 Directives,  Next: V850 Opcodes,  Prev: V850 Floating Point,  Up: V850-Dependent
13205 V850 Machine Directives
13206 -----------------------
13208 `.offset <EXPRESSION>'
13209      Moves the offset into the current section to the specified amount.
13211 `.section "name", <type>'
13212      This is an extension to the standard .section directive.  It sets
13213      the current section to be <type> and creates an alias for this
13214      section called "name".
13216 `.v850'
13217      Specifies that the assembled code should be marked as being
13218      targeted at the V850 processor.  This allows the linker to detect
13219      attempts to link such code with code assembled for other
13220      processors.
13222 `.v850e'
13223      Specifies that the assembled code should be marked as being
13224      targeted at the V850E processor.  This allows the linker to detect
13225      attempts to link such code with code assembled for other
13226      processors.
13228 `.v850e1'
13229      Specifies that the assembled code should be marked as being
13230      targeted at the V850E1 processor.  This allows the linker to
13231      detect attempts to link such code with code assembled for other
13232      processors.
13234 \x1f
13235 File: as.info,  Node: V850 Opcodes,  Prev: V850 Directives,  Up: V850-Dependent
13237 Opcodes
13238 -------
13240    `as' implements all the standard V850 opcodes.
13242    `as' also implements the following pseudo ops:
13244 `hi0()'
13245      Computes the higher 16 bits of the given expression and stores it
13246      into the immediate operand field of the given instruction.  For
13247      example:
13249      `mulhi hi0(here - there), r5, r6'
13251      computes the difference between the address of labels 'here' and
13252      'there', takes the upper 16 bits of this difference, shifts it
13253      down 16 bits and then mutliplies it by the lower 16 bits in
13254      register 5, putting the result into register 6.
13256 `lo()'
13257      Computes the lower 16 bits of the given expression and stores it
13258      into the immediate operand field of the given instruction.  For
13259      example:
13261      `addi lo(here - there), r5, r6'
13263      computes the difference between the address of labels 'here' and
13264      'there', takes the lower 16 bits of this difference and adds it to
13265      register 5, putting the result into register 6.
13267 `hi()'
13268      Computes the higher 16 bits of the given expression and then adds
13269      the value of the most significant bit of the lower 16 bits of the
13270      expression and stores the result into the immediate operand field
13271      of the given instruction.  For example the following code can be
13272      used to compute the address of the label 'here' and store it into
13273      register 6:
13275      `movhi hi(here), r0, r6'     `movea lo(here), r6, r6'
13277      The reason for this special behaviour is that movea performs a sign
13278      extension on its immediate operand.  So for example if the address
13279      of 'here' was 0xFFFFFFFF then without the special behaviour of the
13280      hi() pseudo-op the movhi instruction would put 0xFFFF0000 into r6,
13281      then the movea instruction would takes its immediate operand,
13282      0xFFFF, sign extend it to 32 bits, 0xFFFFFFFF, and then add it
13283      into r6 giving 0xFFFEFFFF which is wrong (the fifth nibble is E).
13284      With the hi() pseudo op adding in the top bit of the lo() pseudo
13285      op, the movhi instruction actually stores 0 into r6 (0xFFFF + 1 =
13286      0x0000), so that the movea instruction stores 0xFFFFFFFF into r6 -
13287      the right value.
13289 `hilo()'
13290      Computes the 32 bit value of the given expression and stores it
13291      into the immediate operand field of the given instruction (which
13292      must be a mov instruction).  For example:
13294      `mov hilo(here), r6'
13296      computes the absolute address of label 'here' and puts the result
13297      into register 6.
13299 `sdaoff()'
13300      Computes the offset of the named variable from the start of the
13301      Small Data Area (whoes address is held in register 4, the GP
13302      register) and stores the result as a 16 bit signed value in the
13303      immediate operand field of the given instruction.  For example:
13305      `ld.w sdaoff(_a_variable)[gp],r6'
13307      loads the contents of the location pointed to by the label
13308      '_a_variable' into register 6, provided that the label is located
13309      somewhere within +/- 32K of the address held in the GP register.
13310      [Note the linker assumes that the GP register contains a fixed
13311      address set to the address of the label called '__gp'.  This can
13312      either be set up automatically by the linker, or specifically set
13313      by using the `--defsym __gp=<value>' command line option].
13315 `tdaoff()'
13316      Computes the offset of the named variable from the start of the
13317      Tiny Data Area (whoes address is held in register 30, the EP
13318      register) and stores the result as a 4,5, 7 or 8 bit unsigned
13319      value in the immediate operand field of the given instruction.
13320      For example:
13322      `sld.w tdaoff(_a_variable)[ep],r6'
13324      loads the contents of the location pointed to by the label
13325      '_a_variable' into register 6, provided that the label is located
13326      somewhere within +256 bytes of the address held in the EP
13327      register.  [Note the linker assumes that the EP register contains
13328      a fixed address set to the address of the label called '__ep'.
13329      This can either be set up automatically by the linker, or
13330      specifically set by using the `--defsym __ep=<value>' command line
13331      option].
13333 `zdaoff()'
13334      Computes the offset of the named variable from address 0 and
13335      stores the result as a 16 bit signed value in the immediate
13336      operand field of the given instruction.  For example:
13338      `movea zdaoff(_a_variable),zero,r6'
13340      puts the address of the label '_a_variable' into register 6,
13341      assuming that the label is somewhere within the first 32K of
13342      memory.  (Strictly speaking it also possible to access the last
13343      32K of memory as well, as the offsets are signed).
13345 `ctoff()'
13346      Computes the offset of the named variable from the start of the
13347      Call Table Area (whoes address is helg in system register 20, the
13348      CTBP register) and stores the result a 6 or 16 bit unsigned value
13349      in the immediate field of then given instruction or piece of data.
13350      For example:
13352      `callt ctoff(table_func1)'
13354      will put the call the function whoes address is held in the call
13355      table at the location labeled 'table_func1'.
13357 `.longcall `name''
13358      Indicates that the following sequence of instructions is a long
13359      call to function `name'.  The linker will attempt to shorten this
13360      call sequence if `name' is within a 22bit offset of the call.  Only
13361      valid if the `-mrelax' command line switch has been enabled.
13363 `.longjump `name''
13364      Indicates that the following sequence of instructions is a long
13365      jump to label `name'.  The linker will attempt to shorten this code
13366      sequence if `name' is within a 22bit offset of the jump.  Only
13367      valid if the `-mrelax' command line switch has been enabled.
13369    For information on the V850 instruction set, see `V850 Family
13370 32-/16-Bit single-Chip Microcontroller Architecture Manual' from NEC.
13371 Ltd.
13373 \x1f
13374 File: as.info,  Node: Xtensa-Dependent,  Next: Z8000-Dependent,  Prev: V850-Dependent,  Up: Machine Dependencies
13376 Xtensa Dependent Features
13377 =========================
13379    This chapter covers features of the GNU assembler that are specific
13380 to the Xtensa architecture.  For details about the Xtensa instruction
13381 set, please consult the `Xtensa Instruction Set Architecture (ISA)
13382 Reference Manual'.
13384 * Menu:
13386 * Xtensa Options::              Command-line Options.
13387 * Xtensa Syntax::               Assembler Syntax for Xtensa Processors.
13388 * Xtensa Optimizations::        Assembler Optimizations.
13389 * Xtensa Relaxation::           Other Automatic Transformations.
13390 * Xtensa Directives::           Directives for Xtensa Processors.
13392 \x1f
13393 File: as.info,  Node: Xtensa Options,  Next: Xtensa Syntax,  Up: Xtensa-Dependent
13395 Command Line Options
13396 --------------------
13398    The Xtensa version of the GNU assembler supports these special
13399 options:
13401 `--density | --no-density'
13402      Enable or disable use of the Xtensa code density option (16-bit
13403      instructions).  *Note Using Density Instructions: Density
13404      Instructions.  If the processor is configured with the density
13405      option, this is enabled by default; otherwise, it is always
13406      disabled.
13408 `--relax | --no-relax'
13409      Enable or disable relaxation of instructions with immediate
13410      operands that are outside the legal range for the instructions.
13411      *Note Xtensa Relaxation: Xtensa Relaxation.  The default is
13412      `--relax' and this default should almost always be used.  If
13413      relaxation is disabled with `--no-relax', instruction operands
13414      that are out of range will cause errors.  Note: In the current
13415      implementation, these options also control whether assembler
13416      optimizations are performed, making these options equivalent to
13417      `--generics' and `--no-generics'.
13419 `--generics | --no-generics'
13420      Enable or disable all assembler transformations of Xtensa
13421      instructions, including both relaxation and optimization.  The
13422      default is `--generics'; `--no-generics' should only be used in
13423      the rare cases when the instructions must be exactly as specified
13424      in the assembly source.  As with `--no-relax', using
13425      `--no-generics' causes out of range instruction operands to be
13426      errors.
13428 `--text-section-literals | --no-text-section-literals'
13429      Control the treatment of literal pools.  The default is
13430      `--no-text-section-literals', which places literals in a separate
13431      section in the output file.  This allows the literal pool to be
13432      placed in a data RAM/ROM, and it also allows the linker to combine
13433      literal pools from separate object files to remove redundant
13434      literals and improve code size.  With `--text-section-literals',
13435      the literals are interspersed in the text section in order to keep
13436      them as close as possible to their references.  This may be
13437      necessary for large assembly files.
13439 `--target-align | --no-target-align'
13440      Enable or disable automatic alignment to reduce branch penalties
13441      at some expense in code size.  *Note Automatic Instruction
13442      Alignment: Xtensa Automatic Alignment.  This optimization is
13443      enabled by default.  Note that the assembler will always align
13444      instructions like `LOOP' that have fixed alignment requirements.
13446 `--longcalls | --no-longcalls'
13447      Enable or disable transformation of call instructions to allow
13448      calls across a greater range of addresses.  *Note Function Call
13449      Relaxation: Xtensa Call Relaxation.  This option should be used
13450      when call targets can potentially be out of range, but it degrades
13451      both code size and performance.  The default is `--no-longcalls'.
13453 \x1f
13454 File: as.info,  Node: Xtensa Syntax,  Next: Xtensa Optimizations,  Prev: Xtensa Options,  Up: Xtensa-Dependent
13456 Assembler Syntax
13457 ----------------
13459    Block comments are delimited by `/*' and `*/'.  End of line comments
13460 may be introduced with either `#' or `//'.
13462    Instructions consist of a leading opcode or macro name followed by
13463 whitespace and an optional comma-separated list of operands:
13465      OPCODE [OPERAND,...]
13467    Instructions must be separated by a newline or semicolon.
13469 * Menu:
13471 * Xtensa Opcodes::              Opcode Naming Conventions.
13472 * Xtensa Registers::            Register Naming.
13474 \x1f
13475 File: as.info,  Node: Xtensa Opcodes,  Next: Xtensa Registers,  Up: Xtensa Syntax
13477 Opcode Names
13478 ............
13480    See the `Xtensa Instruction Set Architecture (ISA) Reference Manual'
13481 for a complete list of opcodes and descriptions of their semantics.
13483    The Xtensa assembler distinguishes between "generic" and "specific"
13484 opcodes.  Specific opcodes correspond directly to Xtensa machine
13485 instructions.  Prefixing an opcode with an underscore character (`_')
13486 identifies it as a specific opcode.  Opcodes without a leading
13487 underscore are generic, which means the assembler is required to
13488 preserve their semantics but may not translate them directly to the
13489 specific opcodes with the same names.  Instead, the assembler may
13490 optimize a generic opcode and select a better instruction to use in its
13491 place (*note Xtensa Optimizations: Xtensa Optimizations.), or the
13492 assembler may relax the instruction to handle operands that are out of
13493 range for the corresponding specific opcode (*note Xtensa Relaxation:
13494 Xtensa Relaxation.).
13496    Only use specific opcodes when it is essential to select the exact
13497 machine instructions produced by the assembler.  Using specific opcodes
13498 unnecessarily only makes the code less efficient, by disabling
13499 assembler optimization, and less flexible, by disabling relaxation.
13501    Note that this special handling of underscore prefixes only applies
13502 to Xtensa opcodes, not to either built-in macros or user-defined macros.
13503 When an underscore prefix is used with a macro (e.g., `_NOP'), it
13504 refers to a different macro.  The assembler generally provides built-in
13505 macros both with and without the underscore prefix, where the underscore
13506 versions behave as if the underscore carries through to the instructions
13507 in the macros.  For example, `_NOP' expands to `_OR a1,a1,a1'.
13509    The underscore prefix only applies to individual instructions, not to
13510 series of instructions.  For example, if a series of instructions have
13511 underscore prefixes, the assembler will not transform the individual
13512 instructions, but it may insert other instructions between them (e.g.,
13513 to align a `LOOP' instruction).  To prevent the assembler from
13514 modifying a series of instructions as a whole, use the `no-generics'
13515 directive.  *Note generics: Generics Directive.
13517 \x1f
13518 File: as.info,  Node: Xtensa Registers,  Prev: Xtensa Opcodes,  Up: Xtensa Syntax
13520 Register Names
13521 ..............
13523    An initial `$' character is optional in all register names.  General
13524 purpose registers are named `a0'...`a15'.  Additional registers may be
13525 added by processor configuration options.  In particular, the MAC16
13526 option adds a MR register bank.  Its registers are named `m0'...`m3'.
13528    As a special feature, `sp' is also supported as a synonym for `a1'.
13530 \x1f
13531 File: as.info,  Node: Xtensa Optimizations,  Next: Xtensa Relaxation,  Prev: Xtensa Syntax,  Up: Xtensa-Dependent
13533 Xtensa Optimizations
13534 --------------------
13536    The optimizations currently supported by `as' are generation of
13537 density instructions where appropriate and automatic branch target
13538 alignment.
13540 * Menu:
13542 * Density Instructions::        Using Density Instructions.
13543 * Xtensa Automatic Alignment::  Automatic Instruction Alignment.
13545 \x1f
13546 File: as.info,  Node: Density Instructions,  Next: Xtensa Automatic Alignment,  Up: Xtensa Optimizations
13548 Using Density Instructions
13549 ..........................
13551    The Xtensa instruction set has a code density option that provides
13552 16-bit versions of some of the most commonly used opcodes.  Use of these
13553 opcodes can significantly reduce code size.  When possible, the
13554 assembler automatically translates generic instructions from the core
13555 Xtensa instruction set into equivalent instructions from the Xtensa code
13556 density option.  This translation can be disabled by using specific
13557 opcodes (*note Opcode Names: Xtensa Opcodes.), by using the
13558 `--no-density' command-line option (*note Command Line Options: Xtensa
13559 Options.), or by using the `no-density' directive (*note density:
13560 Density Directive.).
13562    It is a good idea _not_ to use the density instructions directly.
13563 The assembler will automatically select dense instructions where
13564 possible.  If you later need to avoid using the code density option, you
13565 can disable it in the assembler without having to modify the code.
13567 \x1f
13568 File: as.info,  Node: Xtensa Automatic Alignment,  Prev: Density Instructions,  Up: Xtensa Optimizations
13570 Automatic Instruction Alignment
13571 ...............................
13573    The Xtensa assembler will automatically align certain instructions,
13574 both to optimize performance and to satisfy architectural requirements.
13576    When the `--target-align' command-line option is enabled (*note
13577 Command Line Options: Xtensa Options.), the assembler attempts to widen
13578 density instructions preceding a branch target so that the target
13579 instruction does not cross a 4-byte boundary.  Similarly, the assembler
13580 also attempts to align each instruction following a call instruction.
13581 If there are not enough preceding safe density instructions to align a
13582 target, no widening will be performed.  This alignment has the
13583 potential to reduce branch penalties at some expense in code size.  The
13584 assembler will not attempt to align labels with the prefixes `.Ln' and
13585 `.LM', since these labels are used for debugging information and are
13586 not typically branch targets.
13588    The `LOOP' family of instructions must be aligned on either a 1 or 2
13589 mod 4 byte boundary.  The assembler knows about this restriction and
13590 inserts the minimal number of 2 or 3 byte no-op instructions to satisfy
13591 it.  When no-op instructions are added, any label immediately preceding
13592 the original loop will be moved in order to refer to the loop
13593 instruction, not the newly generated no-op instruction.
13595    Similarly, the `ENTRY' instruction must be aligned on a 0 mod 4 byte
13596 boundary.  The assembler satisfies this requirement by inserting zero
13597 bytes when required.  In addition, labels immediately preceding the
13598 `ENTRY' instruction will be moved to the newly aligned instruction
13599 location.
13601 \x1f
13602 File: as.info,  Node: Xtensa Relaxation,  Next: Xtensa Directives,  Prev: Xtensa Optimizations,  Up: Xtensa-Dependent
13604 Xtensa Relaxation
13605 -----------------
13607    When an instruction operand is outside the range allowed for that
13608 particular instruction field, `as' can transform the code to use a
13609 functionally-equivalent instruction or sequence of instructions.  This
13610 process is known as "relaxation".  This is typically done for branch
13611 instructions because the distance of the branch targets is not known
13612 until assembly-time.  The Xtensa assembler offers branch relaxation and
13613 also extends this concept to function calls, `MOVI' instructions and
13614 other instructions with immediate fields.
13616 * Menu:
13618 * Xtensa Branch Relaxation::        Relaxation of Branches.
13619 * Xtensa Call Relaxation::          Relaxation of Function Calls.
13620 * Xtensa Immediate Relaxation::     Relaxation of other Immediate Fields.
13622 \x1f
13623 File: as.info,  Node: Xtensa Branch Relaxation,  Next: Xtensa Call Relaxation,  Up: Xtensa Relaxation
13625 Conditional Branch Relaxation
13626 .............................
13628    When the target of a branch is too far away from the branch itself,
13629 i.e., when the offset from the branch to the target is too large to fit
13630 in the immediate field of the branch instruction, it may be necessary to
13631 replace the branch with a branch around a jump.  For example,
13633          beqz    a2, L
13635    may result in:
13637          bnez.n  a2, M
13638          j L
13639      M:
13641    (The `BNEZ.N' instruction would be used in this example only if the
13642 density option is available.  Otherwise, `BNEZ' would be used.)
13644 \x1f
13645 File: as.info,  Node: Xtensa Call Relaxation,  Next: Xtensa Immediate Relaxation,  Prev: Xtensa Branch Relaxation,  Up: Xtensa Relaxation
13647 Function Call Relaxation
13648 ........................
13650    Function calls may require relaxation because the Xtensa immediate
13651 call instructions (`CALL0', `CALL4', `CALL8' and `CALL12') provide a
13652 PC-relative offset of only 512 Kbytes in either direction.  For larger
13653 programs, it may be necessary to use indirect calls (`CALLX0',
13654 `CALLX4', `CALLX8' and `CALLX12') where the target address is specified
13655 in a register.  The Xtensa assembler can automatically relax immediate
13656 call instructions into indirect call instructions.  This relaxation is
13657 done by loading the address of the called function into the callee's
13658 return address register and then using a `CALLX' instruction.  So, for
13659 example:
13661          call8 func
13663    might be relaxed to:
13665          .literal .L1, func
13666          l32r    a8, .L1
13667          callx8  a8
13669    Because the addresses of targets of function calls are not generally
13670 known until link-time, the assembler must assume the worst and relax all
13671 the calls to functions in other source files, not just those that really
13672 will be out of range.  The linker can recognize calls that were
13673 unnecessarily relaxed, but it can only partially remove the overhead
13674 introduced by the assembler.
13676    Call relaxation has a negative effect on both code size and
13677 performance, so this relaxation is disabled by default.  If a program
13678 is too large and some of the calls are out of range, function call
13679 relaxation can be enabled using the `--longcalls' command-line option
13680 or the `longcalls' directive (*note longcalls: Longcalls Directive.).
13682 \x1f
13683 File: as.info,  Node: Xtensa Immediate Relaxation,  Prev: Xtensa Call Relaxation,  Up: Xtensa Relaxation
13685 Other Immediate Field Relaxation
13686 ................................
13688    The `MOVI' machine instruction can only materialize values in the
13689 range from -2048 to 2047.  Values outside this range are best
13690 materialized with `L32R' instructions.  Thus:
13692          movi a0, 100000
13694    is assembled into the following machine code:
13696          .literal .L1, 100000
13697          l32r a0, .L1
13699    The `L8UI' machine instruction can only be used with immediate
13700 offsets in the range from 0 to 255. The `L16SI' and `L16UI' machine
13701 instructions can only be used with offsets from 0 to 510.  The `L32I'
13702 machine instruction can only be used with offsets from 0 to 1020.  A
13703 load offset outside these ranges can be materalized with an `L32R'
13704 instruction if the destination register of the load is different than
13705 the source address register.  For example:
13707          l32i a1, a0, 2040
13709    is translated to:
13711          .literal .L1, 2040
13712          l32r a1, .L1
13713          addi a1, a0, a1
13714          l32i a1, a1, 0
13716 If the load destination and source address register are the same, an
13717 out-of-range offset causes an error.
13719    The Xtensa `ADDI' instruction only allows immediate operands in the
13720 range from -128 to 127.  There are a number of alternate instruction
13721 sequences for the generic `ADDI' operation.  First, if the immediate is
13722 0, the `ADDI' will be turned into a `MOV.N' instruction (or the
13723 equivalent `OR' instruction if the code density option is not
13724 available).  If the `ADDI' immediate is outside of the range -128 to
13725 127, but inside the range -32896 to 32639, an `ADDMI' instruction or
13726 `ADDMI'/`ADDI' sequence will be used.  Finally, if the immediate is
13727 outside of this range and a free register is available, an `L32R'/`ADD'
13728 sequence will be used with a literal allocated from the literal pool.
13730    For example:
13732          addi    a5, a6, 0
13733          addi    a5, a6, 512
13734          addi    a5, a6, 513
13735          addi    a5, a6, 50000
13737    is assembled into the following:
13739          .literal .L1, 50000
13740          mov.n   a5, a6
13741          addmi   a5, a6, 0x200
13742          addmi   a5, a6, 0x200
13743          addi    a5, a5, 1
13744          l32r    a5, .L1
13745          add     a5, a6, a5
13747 \x1f
13748 File: as.info,  Node: Xtensa Directives,  Prev: Xtensa Relaxation,  Up: Xtensa-Dependent
13750 Directives
13751 ----------
13753    The Xtensa assember supports a region-based directive syntax:
13755          .begin DIRECTIVE [OPTIONS]
13756          ...
13757          .end DIRECTIVE
13759    All the Xtensa-specific directives that apply to a region of code use
13760 this syntax.
13762    The directive applies to code between the `.begin' and the `.end'.
13763 The state of the option after the `.end' reverts to what it was before
13764 the `.begin'.  A nested `.begin'/`.end' region can further change the
13765 state of the directive without having to be aware of its outer state.
13766 For example, consider:
13768          .begin no-density
13769      L:  add a0, a1, a2
13770          .begin density
13771      M:  add a0, a1, a2
13772          .end density
13773      N:  add a0, a1, a2
13774          .end no-density
13776    The generic `ADD' opcodes at `L' and `N' in the outer `no-density'
13777 region both result in `ADD' machine instructions, but the assembler
13778 selects an `ADD.N' instruction for the generic `ADD' at `M' in the
13779 inner `density' region.
13781    The advantage of this style is that it works well inside macros
13782 which can preserve the context of their callers.
13784    When command-line options and assembler directives are used at the
13785 same time and conflict, the one that overrides a default behavior takes
13786 precedence over one that is the same as the default.  For example, if
13787 the code density option is available, the default is to select density
13788 instructions whenever possible.  So, if the above is assembled with the
13789 `--no-density' flag, which overrides the default, all the generic `ADD'
13790 instructions result in `ADD' machine instructions.  If assembled with
13791 the `--density' flag, which is already the default, the `no-density'
13792 directive takes precedence and only one of the generic `ADD'
13793 instructions is optimized to be a `ADD.N' machine instruction.  An
13794 underscore prefix identifying a specific opcode always takes precedence
13795 over directives and command-line flags.
13797    The following directives are available:
13799 * Menu:
13801 * Density Directive::          Disable Use of Density Instructions.
13802 * Relax Directive::            Disable Assembler Relaxation.
13803 * Longcalls Directive::        Use Indirect Calls for Greater Range.
13804 * Generics Directive::         Disable All Assembler Transformations.
13805 * Literal Directive::          Intermix Literals with Instructions.
13806 * Literal Position Directive:: Specify Inline Literal Pool Locations.
13807 * Literal Prefix Directive::   Specify Literal Section Name Prefix.
13808 * Freeregs Directive::         List Registers Available for Assembler Use.
13809 * Frame Directive::            Describe a stack frame.
13811 \x1f
13812 File: as.info,  Node: Density Directive,  Next: Relax Directive,  Up: Xtensa Directives
13814 density
13815 .......
13817    The `density' and `no-density' directives enable or disable
13818 optimization of generic instructions into density instructions within
13819 the region.  *Note Using Density Instructions: Density Instructions.
13821          .begin [no-]density
13822          .end [no-]density
13824    This optimization is enabled by default unless the Xtensa
13825 configuration does not support the code density option or the
13826 `--no-density' command-line option was specified.
13828 \x1f
13829 File: as.info,  Node: Relax Directive,  Next: Longcalls Directive,  Prev: Density Directive,  Up: Xtensa Directives
13831 relax
13832 .....
13834    The `relax' directive enables or disables relaxation within the
13835 region.  *Note Xtensa Relaxation: Xtensa Relaxation.  Note: In the
13836 current implementation, these directives also control whether assembler
13837 optimizations are performed, making them equivalent to the `generics'
13838 and `no-generics' directives.
13840          .begin [no-]relax
13841          .end [no-]relax
13843    Relaxation is enabled by default unless the `--no-relax'
13844 command-line option was specified.
13846 \x1f
13847 File: as.info,  Node: Longcalls Directive,  Next: Generics Directive,  Prev: Relax Directive,  Up: Xtensa Directives
13849 longcalls
13850 .........
13852    The `longcalls' directive enables or disables function call
13853 relaxation.  *Note Function Call Relaxation: Xtensa Call Relaxation.
13855          .begin [no-]longcalls
13856          .end [no-]longcalls
13858    Call relaxation is disabled by default unless the `--longcalls'
13859 command-line option is specified.
13861 \x1f
13862 File: as.info,  Node: Generics Directive,  Next: Literal Directive,  Prev: Longcalls Directive,  Up: Xtensa Directives
13864 generics
13865 ........
13867    This directive enables or disables all assembler transformation,
13868 including relaxation (*note Xtensa Relaxation: Xtensa Relaxation.) and
13869 optimization (*note Xtensa Optimizations: Xtensa Optimizations.).
13871          .begin [no-]generics
13872          .end [no-]generics
13874    Disabling generics is roughly equivalent to adding an underscore
13875 prefix to every opcode within the region, so that every opcode is
13876 treated as a specific opcode.  *Note Opcode Names: Xtensa Opcodes.  In
13877 the current implementation of `as', built-in macros are also disabled
13878 within a `no-generics' region.
13880 \x1f
13881 File: as.info,  Node: Literal Directive,  Next: Literal Position Directive,  Prev: Generics Directive,  Up: Xtensa Directives
13883 literal
13884 .......
13886    The `.literal' directive is used to define literal pool data, i.e.,
13887 read-only 32-bit data accessed via `L32R' instructions.
13889          .literal LABEL, VALUE[, VALUE...]
13891    This directive is similar to the standard `.word' directive, except
13892 that the actual location of the literal data is determined by the
13893 assembler and linker, not by the position of the `.literal' directive.
13894 Using this directive gives the assembler freedom to locate the literal
13895 data in the most appropriate place and possibly to combine identical
13896 literals.  For example, the code:
13898          entry sp, 40
13899          .literal .L1, sym
13900          l32r    a4, .L1
13902    can be used to load a pointer to the symbol `sym' into register
13903 `a4'.  The value of `sym' will not be placed between the `ENTRY' and
13904 `L32R' instructions; instead, the assembler puts the data in a literal
13905 pool.
13907    By default literal pools are placed in a separate section; however,
13908 when using the `--text-section-literals' option (*note Command Line
13909 Options: Xtensa Options.), the literal pools are placed in the current
13910 section.  These text section literal pools are created automatically
13911 before `ENTRY' instructions and manually after `.literal_position'
13912 directives (*note literal_position: Literal Position Directive.).  If
13913 there are no preceding `ENTRY' instructions or `.literal_position'
13914 directives, the assembler will print a warning and place the literal
13915 pool at the beginning of the current section.  In such cases, explicit
13916 `.literal_position' directives should be used to place the literal
13917 pools.
13919 \x1f
13920 File: as.info,  Node: Literal Position Directive,  Next: Literal Prefix Directive,  Prev: Literal Directive,  Up: Xtensa Directives
13922 literal_position
13923 ................
13925    When using `--text-section-literals' to place literals inline in the
13926 section being assembled, the `.literal_position' directive can be used
13927 to mark a potential location for a literal pool.
13929          .literal_position
13931    The `.literal_position' directive is ignored when the
13932 `--text-section-literals' option is not used.
13934    The assembler will automatically place text section literal pools
13935 before `ENTRY' instructions, so the `.literal_position' directive is
13936 only needed to specify some other location for a literal pool.  You may
13937 need to add an explicit jump instruction to skip over an inline literal
13938 pool.
13940    For example, an interrupt vector does not begin with an `ENTRY'
13941 instruction so the assembler will be unable to automatically find a good
13942 place to put a literal pool.  Moreover, the code for the interrupt
13943 vector must be at a specific starting address, so the literal pool
13944 cannot come before the start of the code.  The literal pool for the
13945 vector must be explicitly positioned in the middle of the vector (before
13946 any uses of the literals, of course).  The `.literal_position'
13947 directive can be used to do this.  In the following code, the literal
13948 for `M' will automatically be aligned correctly and is placed after the
13949 unconditional jump.
13951          .global M
13952      code_start:
13953          j continue
13954          .literal_position
13955          .align 4
13956      continue:
13957          movi    a4, M
13959 \x1f
13960 File: as.info,  Node: Literal Prefix Directive,  Next: Freeregs Directive,  Prev: Literal Position Directive,  Up: Xtensa Directives
13962 literal_prefix
13963 ..............
13965    The `literal_prefix' directive allows you to specify different
13966 sections to hold literals from different portions of an assembly file.
13967 With this directive, a single assembly file can be used to generate code
13968 into multiple sections, including literals generated by the assembler.
13970          .begin literal_prefix [NAME]
13971          .end literal_prefix
13973    For the code inside the delimited region, the assembler puts
13974 literals in the section `NAME.literal'. If this section does not yet
13975 exist, the assembler creates it.  The NAME parameter is optional. If
13976 NAME is not specified, the literal prefix is set to the "default" for
13977 the file.  This default is usually `.literal' but can be changed with
13978 the `--rename-section' command-line argument.
13980 \x1f
13981 File: as.info,  Node: Freeregs Directive,  Next: Frame Directive,  Prev: Literal Prefix Directive,  Up: Xtensa Directives
13983 freeregs
13984 ........
13986    This directive tells the assembler that the given registers are
13987 unused in the region.
13989          .begin freeregs RI[,RI...]
13990          .end freeregs
13992    This allows the assembler to use these registers for relaxations or
13993 optimizations.  (They are actually only for relaxations at present, but
13994 the possibility of optimizations exists in the future.)
13996    Nested `freeregs' directives can be used to add additional registers
13997 to the list of those available to the assembler.  For example:
13999          .begin freeregs a3, a4
14000          .begin freeregs a5
14002    has the effect of declaring `a3', `a4', and `a5' all free.
14004 \x1f
14005 File: as.info,  Node: Frame Directive,  Prev: Freeregs Directive,  Up: Xtensa Directives
14007 frame
14008 .....
14010    This directive tells the assembler to emit information to allow the
14011 debugger to locate a function's stack frame.  The syntax is:
14013          .frame REG, SIZE
14015    where REG is the register used to hold the frame pointer (usually
14016 the same as the stack pointer) and SIZE is the size in bytes of the
14017 stack frame.  The `.frame' directive is typically placed immediately
14018 after the `ENTRY' instruction for a function.
14020    In almost all circumstances, this information just duplicates the
14021 information given in the function's `ENTRY' instruction; however, there
14022 are two cases where this is not true:
14024   1. The size of the stack frame is too big to fit in the immediate
14025      field of the `ENTRY' instruction.
14027   2. The frame pointer is different than the stack pointer, as with
14028      functions that call `alloca'.
14030 \x1f
14031 File: as.info,  Node: Reporting Bugs,  Next: Acknowledgements,  Prev: Machine Dependencies,  Up: Top
14033 Reporting Bugs
14034 **************
14036    Your bug reports play an essential role in making `as' reliable.
14038    Reporting a bug may help you by bringing a solution to your problem,
14039 or it may not.  But in any case the principal function of a bug report
14040 is to help the entire community by making the next version of `as' work
14041 better.  Bug reports are your contribution to the maintenance of `as'.
14043    In order for a bug report to serve its purpose, you must include the
14044 information that enables us to fix the bug.
14046 * Menu:
14048 * Bug Criteria::                Have you found a bug?
14049 * Bug Reporting::               How to report bugs
14051 \x1f
14052 File: as.info,  Node: Bug Criteria,  Next: Bug Reporting,  Up: Reporting Bugs
14054 Have You Found a Bug?
14055 =====================
14057    If you are not sure whether you have found a bug, here are some
14058 guidelines:
14060    * If the assembler gets a fatal signal, for any input whatever, that
14061      is a `as' bug.  Reliable assemblers never crash.
14063    * If `as' produces an error message for valid input, that is a bug.
14065    * If `as' does not produce an error message for invalid input, that
14066      is a bug.  However, you should note that your idea of "invalid
14067      input" might be our idea of "an extension" or "support for
14068      traditional practice".
14070    * If you are an experienced user of assemblers, your suggestions for
14071      improvement of `as' are welcome in any case.
14073 \x1f
14074 File: as.info,  Node: Bug Reporting,  Prev: Bug Criteria,  Up: Reporting Bugs
14076 How to Report Bugs
14077 ==================
14079    A number of companies and individuals offer support for GNU
14080 products.  If you obtained `as' from a support organization, we
14081 recommend you contact that organization first.
14083    You can find contact information for many support companies and
14084 individuals in the file `etc/SERVICE' in the GNU Emacs distribution.
14086    In any event, we also recommend that you send bug reports for `as'
14087 to `bug-binutils@gnu.org'.
14089    The fundamental principle of reporting bugs usefully is this:
14090 *report all the facts*.  If you are not sure whether to state a fact or
14091 leave it out, state it!
14093    Often people omit facts because they think they know what causes the
14094 problem and assume that some details do not matter.  Thus, you might
14095 assume that the name of a symbol you use in an example does not matter.
14096 Well, probably it does not, but one cannot be sure.  Perhaps the bug
14097 is a stray memory reference which happens to fetch from the location
14098 where that name is stored in memory; perhaps, if the name were
14099 different, the contents of that location would fool the assembler into
14100 doing the right thing despite the bug.  Play it safe and give a
14101 specific, complete example.  That is the easiest thing for you to do,
14102 and the most helpful.
14104    Keep in mind that the purpose of a bug report is to enable us to fix
14105 the bug if it is new to us.  Therefore, always write your bug reports
14106 on the assumption that the bug has not been reported previously.
14108    Sometimes people give a few sketchy facts and ask, "Does this ring a
14109 bell?"  This cannot help us fix a bug, so it is basically useless.  We
14110 respond by asking for enough details to enable us to investigate.  You
14111 might as well expedite matters by sending them to begin with.
14113    To enable us to fix the bug, you should include all these things:
14115    * The version of `as'.  `as' announces it if you start it with the
14116      `--version' argument.
14118      Without this, we will not know whether there is any point in
14119      looking for the bug in the current version of `as'.
14121    * Any patches you may have applied to the `as' source.
14123    * The type of machine you are using, and the operating system name
14124      and version number.
14126    * What compiler (and its version) was used to compile `as'--e.g.
14127      "`gcc-2.7'".
14129    * The command arguments you gave the assembler to assemble your
14130      example and observe the bug.  To guarantee you will not omit
14131      something important, list them all.  A copy of the Makefile (or
14132      the output from make) is sufficient.
14134      If we were to try to guess the arguments, we would probably guess
14135      wrong and then we might not encounter the bug.
14137    * A complete input file that will reproduce the bug.  If the bug is
14138      observed when the assembler is invoked via a compiler, send the
14139      assembler source, not the high level language source.  Most
14140      compilers will produce the assembler source when run with the `-S'
14141      option.  If you are using `gcc', use the options `-v
14142      --save-temps'; this will save the assembler source in a file with
14143      an extension of `.s', and also show you exactly how `as' is being
14144      run.
14146    * A description of what behavior you observe that you believe is
14147      incorrect.  For example, "It gets a fatal signal."
14149      Of course, if the bug is that `as' gets a fatal signal, then we
14150      will certainly notice it.  But if the bug is incorrect output, we
14151      might not notice unless it is glaringly wrong.  You might as well
14152      not give us a chance to make a mistake.
14154      Even if the problem you experience is a fatal signal, you should
14155      still say so explicitly.  Suppose something strange is going on,
14156      such as, your copy of `as' is out of synch, or you have
14157      encountered a bug in the C library on your system.  (This has
14158      happened!)  Your copy might crash and ours would not.  If you told
14159      us to expect a crash, then when ours fails to crash, we would know
14160      that the bug was not happening for us.  If you had not told us to
14161      expect a crash, then we would not be able to draw any conclusion
14162      from our observations.
14164    * If you wish to suggest changes to the `as' source, send us context
14165      diffs, as generated by `diff' with the `-u', `-c', or `-p' option.
14166      Always send diffs from the old file to the new file.  If you even
14167      discuss something in the `as' source, refer to it by context, not
14168      by line number.
14170      The line numbers in our development sources will not match those
14171      in your sources.  Your line numbers would convey no useful
14172      information to us.
14174    Here are some things that are not necessary:
14176    * A description of the envelope of the bug.
14178      Often people who encounter a bug spend a lot of time investigating
14179      which changes to the input file will make the bug go away and which
14180      changes will not affect it.
14182      This is often time consuming and not very useful, because the way
14183      we will find the bug is by running a single example under the
14184      debugger with breakpoints, not by pure deduction from a series of
14185      examples.  We recommend that you save your time for something else.
14187      Of course, if you can find a simpler example to report _instead_
14188      of the original one, that is a convenience for us.  Errors in the
14189      output will be easier to spot, running under the debugger will take
14190      less time, and so on.
14192      However, simplification is not vital; if you do not want to do
14193      this, report the bug anyway and send us the entire test case you
14194      used.
14196    * A patch for the bug.
14198      A patch for the bug does help us if it is a good one.  But do not
14199      omit the necessary information, such as the test case, on the
14200      assumption that a patch is all we need.  We might see problems
14201      with your patch and decide to fix the problem another way, or we
14202      might not understand it at all.
14204      Sometimes with a program as complicated as `as' it is very hard to
14205      construct an example that will make the program follow a certain
14206      path through the code.  If you do not send us the example, we will
14207      not be able to construct one, so we will not be able to verify
14208      that the bug is fixed.
14210      And if we cannot understand what bug you are trying to fix, or why
14211      your patch should be an improvement, we will not install it.  A
14212      test case will help us to understand.
14214    * A guess about what the bug is or what it depends on.
14216      Such guesses are usually wrong.  Even we cannot guess right about
14217      such things without first using the debugger to find the facts.
14219 \x1f
14220 File: as.info,  Node: Acknowledgements,  Next: GNU Free Documentation License,  Prev: Reporting Bugs,  Up: Top
14222 Acknowledgements
14223 ****************
14225    If you have contributed to `as' and your name isn't listed here, it
14226 is not meant as a slight.  We just don't know about it.  Send mail to
14227 the maintainer, and we'll correct the situation.  Currently the
14228 maintainer is Ken Raeburn (email address `raeburn@cygnus.com').
14230    Dean Elsner wrote the original GNU assembler for the VAX.(1)
14232    Jay Fenlason maintained GAS for a while, adding support for
14233 GDB-specific debug information and the 68k series machines, most of the
14234 preprocessing pass, and extensive changes in `messages.c',
14235 `input-file.c', `write.c'.
14237    K. Richard Pixley maintained GAS for a while, adding various
14238 enhancements and many bug fixes, including merging support for several
14239 processors, breaking GAS up to handle multiple object file format back
14240 ends (including heavy rewrite, testing, an integration of the coff and
14241 b.out back ends), adding configuration including heavy testing and
14242 verification of cross assemblers and file splits and renaming,
14243 converted GAS to strictly ANSI C including full prototypes, added
14244 support for m680[34]0 and cpu32, did considerable work on i960
14245 including a COFF port (including considerable amounts of reverse
14246 engineering), a SPARC opcode file rewrite, DECstation, rs6000, and
14247 hp300hpux host ports, updated "know" assertions and made them work,
14248 much other reorganization, cleanup, and lint.
14250    Ken Raeburn wrote the high-level BFD interface code to replace most
14251 of the code in format-specific I/O modules.
14253    The original VMS support was contributed by David L. Kashtan.  Eric
14254 Youngdale has done much work with it since.
14256    The Intel 80386 machine description was written by Eliot Dresselhaus.
14258    Minh Tran-Le at IntelliCorp contributed some AIX 386 support.
14260    The Motorola 88k machine description was contributed by Devon Bowen
14261 of Buffalo University and Torbjorn Granlund of the Swedish Institute of
14262 Computer Science.
14264    Keith Knowles at the Open Software Foundation wrote the original
14265 MIPS back end (`tc-mips.c', `tc-mips.h'), and contributed Rose format
14266 support (which hasn't been merged in yet).  Ralph Campbell worked with
14267 the MIPS code to support a.out format.
14269    Support for the Zilog Z8k and Renesas H8/300 and H8/500 processors
14270 (tc-z8k, tc-h8300, tc-h8500), and IEEE 695 object file format
14271 (obj-ieee), was written by Steve Chamberlain of Cygnus Support.  Steve
14272 also modified the COFF back end to use BFD for some low-level
14273 operations, for use with the H8/300 and AMD 29k targets.
14275    John Gilmore built the AMD 29000 support, added `.include' support,
14276 and simplified the configuration of which versions accept which
14277 directives.  He updated the 68k machine description so that Motorola's
14278 opcodes always produced fixed-size instructions (e.g., `jsr'), while
14279 synthetic instructions remained shrinkable (`jbsr').  John fixed many
14280 bugs, including true tested cross-compilation support, and one bug in
14281 relaxation that took a week and required the proverbial one-bit fix.
14283    Ian Lance Taylor of Cygnus Support merged the Motorola and MIT
14284 syntax for the 68k, completed support for some COFF targets (68k, i386
14285 SVR3, and SCO Unix), added support for MIPS ECOFF and ELF targets,
14286 wrote the initial RS/6000 and PowerPC assembler, and made a few other
14287 minor patches.
14289    Steve Chamberlain made `as' able to generate listings.
14291    Hewlett-Packard contributed support for the HP9000/300.
14293    Jeff Law wrote GAS and BFD support for the native HPPA object format
14294 (SOM) along with a fairly extensive HPPA testsuite (for both SOM and
14295 ELF object formats).  This work was supported by both the Center for
14296 Software Science at the University of Utah and Cygnus Support.
14298    Support for ELF format files has been worked on by Mark Eichin of
14299 Cygnus Support (original, incomplete implementation for SPARC), Pete
14300 Hoogenboom and Jeff Law at the University of Utah (HPPA mainly),
14301 Michael Meissner of the Open Software Foundation (i386 mainly), and Ken
14302 Raeburn of Cygnus Support (sparc, and some initial 64-bit support).
14304    Linas Vepstas added GAS support for the ESA/390 "IBM 370"
14305 architecture.
14307    Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote
14308 GAS and BFD support for openVMS/Alpha.
14310    Timothy Wall, Michael Hayes, and Greg Smart contributed to the
14311 various tic* flavors.
14313    David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from
14314 Tensilica, Inc. added support for Xtensa processors.
14316    Several engineers at Cygnus Support have also provided many small
14317 bug fixes and configuration enhancements.
14319    Many others have contributed large or small bugfixes and
14320 enhancements.  If you have contributed significant work and are not
14321 mentioned on this list, and want to be, let us know.  Some of the
14322 history has been lost; we are not intentionally leaving anyone out.
14324    ---------- Footnotes ----------
14326    (1) Any more details?
14328 \x1f
14329 File: as.info,  Node: GNU Free Documentation License,  Next: Index,  Prev: Acknowledgements,  Up: Top
14331 GNU Free Documentation License
14332 ******************************
14334                         Version 1.1, March 2000
14335      Copyright (C) 2000, Free Software Foundation, Inc.
14336      59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
14337      
14338      Everyone is permitted to copy and distribute verbatim copies
14339      of this license document, but changing it is not allowed.
14342   0. PREAMBLE
14344      The purpose of this License is to make a manual, textbook, or other
14345      written document "free" in the sense of freedom: to assure everyone
14346      the effective freedom to copy and redistribute it, with or without
14347      modifying it, either commercially or noncommercially.  Secondarily,
14348      this License preserves for the author and publisher a way to get
14349      credit for their work, while not being considered responsible for
14350      modifications made by others.
14352      This License is a kind of "copyleft", which means that derivative
14353      works of the document must themselves be free in the same sense.
14354      It complements the GNU General Public License, which is a copyleft
14355      license designed for free software.
14357      We have designed this License in order to use it for manuals for
14358      free software, because free software needs free documentation: a
14359      free program should come with manuals providing the same freedoms
14360      that the software does.  But this License is not limited to
14361      software manuals; it can be used for any textual work, regardless
14362      of subject matter or whether it is published as a printed book.
14363      We recommend this License principally for works whose purpose is
14364      instruction or reference.
14367   1. APPLICABILITY AND DEFINITIONS
14369      This License applies to any manual or other work that contains a
14370      notice placed by the copyright holder saying it can be distributed
14371      under the terms of this License.  The "Document", below, refers to
14372      any such manual or work.  Any member of the public is a licensee,
14373      and is addressed as "you."
14375      A "Modified Version" of the Document means any work containing the
14376      Document or a portion of it, either copied verbatim, or with
14377      modifications and/or translated into another language.
14379      A "Secondary Section" is a named appendix or a front-matter
14380      section of the Document that deals exclusively with the
14381      relationship of the publishers or authors of the Document to the
14382      Document's overall subject (or to related matters) and contains
14383      nothing that could fall directly within that overall subject.
14384      (For example, if the Document is in part a textbook of
14385      mathematics, a Secondary Section may not explain any mathematics.)
14386      The relationship could be a matter of historical connection with
14387      the subject or with related matters, or of legal, commercial,
14388      philosophical, ethical or political position regarding them.
14390      The "Invariant Sections" are certain Secondary Sections whose
14391      titles are designated, as being those of Invariant Sections, in
14392      the notice that says that the Document is released under this
14393      License.
14395      The "Cover Texts" are certain short passages of text that are
14396      listed, as Front-Cover Texts or Back-Cover Texts, in the notice
14397      that says that the Document is released under this License.
14399      A "Transparent" copy of the Document means a machine-readable copy,
14400      represented in a format whose specification is available to the
14401      general public, whose contents can be viewed and edited directly
14402      and straightforwardly with generic text editors or (for images
14403      composed of pixels) generic paint programs or (for drawings) some
14404      widely available drawing editor, and that is suitable for input to
14405      text formatters or for automatic translation to a variety of
14406      formats suitable for input to text formatters.  A copy made in an
14407      otherwise Transparent file format whose markup has been designed
14408      to thwart or discourage subsequent modification by readers is not
14409      Transparent.  A copy that is not "Transparent" is called "Opaque."
14411      Examples of suitable formats for Transparent copies include plain
14412      ASCII without markup, Texinfo input format, LaTeX input format,
14413      SGML or XML using a publicly available DTD, and
14414      standard-conforming simple HTML designed for human modification.
14415      Opaque formats include PostScript, PDF, proprietary formats that
14416      can be read and edited only by proprietary word processors, SGML
14417      or XML for which the DTD and/or processing tools are not generally
14418      available, and the machine-generated HTML produced by some word
14419      processors for output purposes only.
14421      The "Title Page" means, for a printed book, the title page itself,
14422      plus such following pages as are needed to hold, legibly, the
14423      material this License requires to appear in the title page.  For
14424      works in formats which do not have any title page as such, "Title
14425      Page" means the text near the most prominent appearance of the
14426      work's title, preceding the beginning of the body of the text.
14428   2. VERBATIM COPYING
14430      You may copy and distribute the Document in any medium, either
14431      commercially or noncommercially, provided that this License, the
14432      copyright notices, and the license notice saying this License
14433      applies to the Document are reproduced in all copies, and that you
14434      add no other conditions whatsoever to those of this License.  You
14435      may not use technical measures to obstruct or control the reading
14436      or further copying of the copies you make or distribute.  However,
14437      you may accept compensation in exchange for copies.  If you
14438      distribute a large enough number of copies you must also follow
14439      the conditions in section 3.
14441      You may also lend copies, under the same conditions stated above,
14442      and you may publicly display copies.
14444   3. COPYING IN QUANTITY
14446      If you publish printed copies of the Document numbering more than
14447      100, and the Document's license notice requires Cover Texts, you
14448      must enclose the copies in covers that carry, clearly and legibly,
14449      all these Cover Texts: Front-Cover Texts on the front cover, and
14450      Back-Cover Texts on the back cover.  Both covers must also clearly
14451      and legibly identify you as the publisher of these copies.  The
14452      front cover must present the full title with all words of the
14453      title equally prominent and visible.  You may add other material
14454      on the covers in addition.  Copying with changes limited to the
14455      covers, as long as they preserve the title of the Document and
14456      satisfy these conditions, can be treated as verbatim copying in
14457      other respects.
14459      If the required texts for either cover are too voluminous to fit
14460      legibly, you should put the first ones listed (as many as fit
14461      reasonably) on the actual cover, and continue the rest onto
14462      adjacent pages.
14464      If you publish or distribute Opaque copies of the Document
14465      numbering more than 100, you must either include a
14466      machine-readable Transparent copy along with each Opaque copy, or
14467      state in or with each Opaque copy a publicly-accessible
14468      computer-network location containing a complete Transparent copy
14469      of the Document, free of added material, which the general
14470      network-using public has access to download anonymously at no
14471      charge using public-standard network protocols.  If you use the
14472      latter option, you must take reasonably prudent steps, when you
14473      begin distribution of Opaque copies in quantity, to ensure that
14474      this Transparent copy will remain thus accessible at the stated
14475      location until at least one year after the last time you
14476      distribute an Opaque copy (directly or through your agents or
14477      retailers) of that edition to the public.
14479      It is requested, but not required, that you contact the authors of
14480      the Document well before redistributing any large number of
14481      copies, to give them a chance to provide you with an updated
14482      version of the Document.
14484   4. MODIFICATIONS
14486      You may copy and distribute a Modified Version of the Document
14487      under the conditions of sections 2 and 3 above, provided that you
14488      release the Modified Version under precisely this License, with
14489      the Modified Version filling the role of the Document, thus
14490      licensing distribution and modification of the Modified Version to
14491      whoever possesses a copy of it.  In addition, you must do these
14492      things in the Modified Version:
14494      A. Use in the Title Page (and on the covers, if any) a title
14495      distinct    from that of the Document, and from those of previous
14496      versions    (which should, if there were any, be listed in the
14497      History section    of the Document).  You may use the same title
14498      as a previous version    if the original publisher of that version
14499      gives permission.
14500      B. List on the Title Page, as authors, one or more persons or
14501      entities    responsible for authorship of the modifications in the
14502      Modified    Version, together with at least five of the principal
14503      authors of the    Document (all of its principal authors, if it
14504      has less than five).
14505      C. State on the Title page the name of the publisher of the
14506      Modified Version, as the publisher.
14507      D. Preserve all the copyright notices of the Document.
14508      E. Add an appropriate copyright notice for your modifications
14509      adjacent to the other copyright notices.
14510      F. Include, immediately after the copyright notices, a license
14511      notice    giving the public permission to use the Modified Version
14512      under the    terms of this License, in the form shown in the
14513      Addendum below.
14514      G. Preserve in that license notice the full lists of Invariant
14515      Sections    and required Cover Texts given in the Document's
14516      license notice.
14517      H. Include an unaltered copy of this License.
14518      I. Preserve the section entitled "History", and its title, and add
14519      to    it an item stating at least the title, year, new authors, and
14520        publisher of the Modified Version as given on the Title Page.
14521      If    there is no section entitled "History" in the Document,
14522      create one    stating the title, year, authors, and publisher of
14523      the Document as    given on its Title Page, then add an item
14524      describing the Modified    Version as stated in the previous
14525      sentence.
14526      J. Preserve the network location, if any, given in the Document for
14527        public access to a Transparent copy of the Document, and
14528      likewise    the network locations given in the Document for
14529      previous versions    it was based on.  These may be placed in the
14530      "History" section.     You may omit a network location for a work
14531      that was published at    least four years before the Document
14532      itself, or if the original    publisher of the version it refers
14533      to gives permission.
14534      K. In any section entitled "Acknowledgements" or "Dedications",
14535      preserve the section's title, and preserve in the section all the
14536       substance and tone of each of the contributor acknowledgements
14537      and/or dedications given therein.
14538      L. Preserve all the Invariant Sections of the Document,
14539      unaltered in their text and in their titles.  Section numbers
14540      or the equivalent are not considered part of the section titles.
14541      M. Delete any section entitled "Endorsements."  Such a section
14542      may not be included in the Modified Version.
14543      N. Do not retitle any existing section as "Endorsements"    or to
14544      conflict in title with any Invariant Section.
14546      If the Modified Version includes new front-matter sections or
14547      appendices that qualify as Secondary Sections and contain no
14548      material copied from the Document, you may at your option
14549      designate some or all of these sections as invariant.  To do this,
14550      add their titles to the list of Invariant Sections in the Modified
14551      Version's license notice.  These titles must be distinct from any
14552      other section titles.
14554      You may add a section entitled "Endorsements", provided it contains
14555      nothing but endorsements of your Modified Version by various
14556      parties-for example, statements of peer review or that the text has
14557      been approved by an organization as the authoritative definition
14558      of a standard.
14560      You may add a passage of up to five words as a Front-Cover Text,
14561      and a passage of up to 25 words as a Back-Cover Text, to the end
14562      of the list of Cover Texts in the Modified Version.  Only one
14563      passage of Front-Cover Text and one of Back-Cover Text may be
14564      added by (or through arrangements made by) any one entity.  If the
14565      Document already includes a cover text for the same cover,
14566      previously added by you or by arrangement made by the same entity
14567      you are acting on behalf of, you may not add another; but you may
14568      replace the old one, on explicit permission from the previous
14569      publisher that added the old one.
14571      The author(s) and publisher(s) of the Document do not by this
14572      License give permission to use their names for publicity for or to
14573      assert or imply endorsement of any Modified Version.
14575   5. COMBINING DOCUMENTS
14577      You may combine the Document with other documents released under
14578      this License, under the terms defined in section 4 above for
14579      modified versions, provided that you include in the combination
14580      all of the Invariant Sections of all of the original documents,
14581      unmodified, and list them all as Invariant Sections of your
14582      combined work in its license notice.
14584      The combined work need only contain one copy of this License, and
14585      multiple identical Invariant Sections may be replaced with a single
14586      copy.  If there are multiple Invariant Sections with the same name
14587      but different contents, make the title of each such section unique
14588      by adding at the end of it, in parentheses, the name of the
14589      original author or publisher of that section if known, or else a
14590      unique number.  Make the same adjustment to the section titles in
14591      the list of Invariant Sections in the license notice of the
14592      combined work.
14594      In the combination, you must combine any sections entitled
14595      "History" in the various original documents, forming one section
14596      entitled "History"; likewise combine any sections entitled
14597      "Acknowledgements", and any sections entitled "Dedications."  You
14598      must delete all sections entitled "Endorsements."
14600   6. COLLECTIONS OF DOCUMENTS
14602      You may make a collection consisting of the Document and other
14603      documents released under this License, and replace the individual
14604      copies of this License in the various documents with a single copy
14605      that is included in the collection, provided that you follow the
14606      rules of this License for verbatim copying of each of the
14607      documents in all other respects.
14609      You may extract a single document from such a collection, and
14610      distribute it individually under this License, provided you insert
14611      a copy of this License into the extracted document, and follow
14612      this License in all other respects regarding verbatim copying of
14613      that document.
14615   7. AGGREGATION WITH INDEPENDENT WORKS
14617      A compilation of the Document or its derivatives with other
14618      separate and independent documents or works, in or on a volume of
14619      a storage or distribution medium, does not as a whole count as a
14620      Modified Version of the Document, provided no compilation
14621      copyright is claimed for the compilation.  Such a compilation is
14622      called an "aggregate", and this License does not apply to the
14623      other self-contained works thus compiled with the Document, on
14624      account of their being thus compiled, if they are not themselves
14625      derivative works of the Document.
14627      If the Cover Text requirement of section 3 is applicable to these
14628      copies of the Document, then if the Document is less than one
14629      quarter of the entire aggregate, the Document's Cover Texts may be
14630      placed on covers that surround only the Document within the
14631      aggregate.  Otherwise they must appear on covers around the whole
14632      aggregate.
14634   8. TRANSLATION
14636      Translation is considered a kind of modification, so you may
14637      distribute translations of the Document under the terms of section
14638      4.  Replacing Invariant Sections with translations requires special
14639      permission from their copyright holders, but you may include
14640      translations of some or all Invariant Sections in addition to the
14641      original versions of these Invariant Sections.  You may include a
14642      translation of this License provided that you also include the
14643      original English version of this License.  In case of a
14644      disagreement between the translation and the original English
14645      version of this License, the original English version will prevail.
14647   9. TERMINATION
14649      You may not copy, modify, sublicense, or distribute the Document
14650      except as expressly provided for under this License.  Any other
14651      attempt to copy, modify, sublicense or distribute the Document is
14652      void, and will automatically terminate your rights under this
14653      License.  However, parties who have received copies, or rights,
14654      from you under this License will not have their licenses
14655      terminated so long as such parties remain in full compliance.
14657  10. FUTURE REVISIONS OF THIS LICENSE
14659      The Free Software Foundation may publish new, revised versions of
14660      the GNU Free Documentation License from time to time.  Such new
14661      versions will be similar in spirit to the present version, but may
14662      differ in detail to address new problems or concerns.  See
14663      http://www.gnu.org/copyleft/.
14665      Each version of the License is given a distinguishing version
14666      number.  If the Document specifies that a particular numbered
14667      version of this License "or any later version" applies to it, you
14668      have the option of following the terms and conditions either of
14669      that specified version or of any later version that has been
14670      published (not as a draft) by the Free Software Foundation.  If
14671      the Document does not specify a version number of this License,
14672      you may choose any version ever published (not as a draft) by the
14673      Free Software Foundation.
14676 ADDENDUM: How to use this License for your documents
14677 ====================================================
14679    To use this License in a document you have written, include a copy of
14680 the License in the document and put the following copyright and license
14681 notices just after the title page:
14683      Copyright (C)  YEAR  YOUR NAME.
14684      Permission is granted to copy, distribute and/or modify this document
14685      under the terms of the GNU Free Documentation License, Version 1.1
14686      or any later version published by the Free Software Foundation;
14687      with the Invariant Sections being LIST THEIR TITLES, with the
14688      Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
14689      A copy of the license is included in the section entitled "GNU
14690      Free Documentation License."
14692    If you have no Invariant Sections, write "with no Invariant Sections"
14693 instead of saying which ones are invariant.  If you have no Front-Cover
14694 Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being
14695 LIST"; likewise for Back-Cover Texts.
14697    If your document contains nontrivial examples of program code, we
14698 recommend releasing these examples in parallel under your choice of
14699 free software license, such as the GNU General Public License, to
14700 permit their use in free software.
14702 \x1f
14703 File: as.info,  Node: Index,  Prev: GNU Free Documentation License,  Up: Top
14705 Index
14706 *****
14708 * Menu:
14710 * #:                                     Comments.
14711 * #APP:                                  Preprocessing.
14712 * #NO_APP:                               Preprocessing.
14713 * $ in symbol names <1>:                 SH64-Chars.
14714 * $ in symbol names <2>:                 SH-Chars.
14715 * $ in symbol names <3>:                 H8/500-Chars.
14716 * $ in symbol names <4>:                 D30V-Chars.
14717 * $ in symbol names:                     D10V-Chars.
14718 * $a:                                    ARM Mapping Symbols.
14719 * $acos math builtin, TIC54X:            TIC54X-Builtins.
14720 * $asin math builtin, TIC54X:            TIC54X-Builtins.
14721 * $atan math builtin, TIC54X:            TIC54X-Builtins.
14722 * $atan2 math builtin, TIC54X:           TIC54X-Builtins.
14723 * $ceil math builtin, TIC54X:            TIC54X-Builtins.
14724 * $cos math builtin, TIC54X:             TIC54X-Builtins.
14725 * $cosh math builtin, TIC54X:            TIC54X-Builtins.
14726 * $cvf math builtin, TIC54X:             TIC54X-Builtins.
14727 * $cvi math builtin, TIC54X:             TIC54X-Builtins.
14728 * $d:                                    ARM Mapping Symbols.
14729 * $exp math builtin, TIC54X:             TIC54X-Builtins.
14730 * $fabs math builtin, TIC54X:            TIC54X-Builtins.
14731 * $firstch subsym builtin, TIC54X:       TIC54X-Macros.
14732 * $floor math builtin, TIC54X:           TIC54X-Builtins.
14733 * $fmod math builtin, TIC54X:            TIC54X-Builtins.
14734 * $int math builtin, TIC54X:             TIC54X-Builtins.
14735 * $iscons subsym builtin, TIC54X:        TIC54X-Macros.
14736 * $isdefed subsym builtin, TIC54X:       TIC54X-Macros.
14737 * $ismember subsym builtin, TIC54X:      TIC54X-Macros.
14738 * $isname subsym builtin, TIC54X:        TIC54X-Macros.
14739 * $isreg subsym builtin, TIC54X:         TIC54X-Macros.
14740 * $lastch subsym builtin, TIC54X:        TIC54X-Macros.
14741 * $ldexp math builtin, TIC54X:           TIC54X-Builtins.
14742 * $log math builtin, TIC54X:             TIC54X-Builtins.
14743 * $log10 math builtin, TIC54X:           TIC54X-Builtins.
14744 * $max math builtin, TIC54X:             TIC54X-Builtins.
14745 * $min math builtin, TIC54X:             TIC54X-Builtins.
14746 * $pow math builtin, TIC54X:             TIC54X-Builtins.
14747 * $round math builtin, TIC54X:           TIC54X-Builtins.
14748 * $sgn math builtin, TIC54X:             TIC54X-Builtins.
14749 * $sin math builtin, TIC54X:             TIC54X-Builtins.
14750 * $sinh math builtin, TIC54X:            TIC54X-Builtins.
14751 * $sqrt math builtin, TIC54X:            TIC54X-Builtins.
14752 * $structacc subsym builtin, TIC54X:     TIC54X-Macros.
14753 * $structsz subsym builtin, TIC54X:      TIC54X-Macros.
14754 * $symcmp subsym builtin, TIC54X:        TIC54X-Macros.
14755 * $symlen subsym builtin, TIC54X:        TIC54X-Macros.
14756 * $t:                                    ARM Mapping Symbols.
14757 * $tan math builtin, TIC54X:             TIC54X-Builtins.
14758 * $tanh math builtin, TIC54X:            TIC54X-Builtins.
14759 * $trunc math builtin, TIC54X:           TIC54X-Builtins.
14760 * -+ option, VAX/VMS:                    VAX-Opts.
14761 * --:                                    Command Line.
14762 * --32 option, i386:                     i386-Options.
14763 * --32 option, x86-64:                   i386-Options.
14764 * --64 option, i386:                     i386-Options.
14765 * --64 option, x86-64:                   i386-Options.
14766 * --base-size-default-16:                M68K-Opts.
14767 * --base-size-default-32:                M68K-Opts.
14768 * --bitwise-or option, M680x0:           M68K-Opts.
14769 * --density:                             Xtensa Options.
14770 * --disp-size-default-16:                M68K-Opts.
14771 * --disp-size-default-32:                M68K-Opts.
14772 * --emulation=crisaout command line option, CRIS: CRIS-Opts.
14773 * --emulation=criself command line option, CRIS: CRIS-Opts.
14774 * --enforce-aligned-data:                Sparc-Aligned-Data.
14775 * --fatal-warnings:                      W.
14776 * --fixed-special-register-names command line option, MMIX: MMIX-Opts.
14777 * --force-long-branchs:                  M68HC11-Opts.
14778 * --generate-example:                    M68HC11-Opts.
14779 * --generics:                            Xtensa Options.
14780 * --globalize-symbols command line option, MMIX: MMIX-Opts.
14781 * --gnu-syntax command line option, MMIX: MMIX-Opts.
14782 * --linker-allocated-gregs command line option, MMIX: MMIX-Opts.
14783 * --listing-cont-lines:                  listing.
14784 * --listing-lhs-width:                   listing.
14785 * --listing-lhs-width2:                  listing.
14786 * --listing-rhs-width:                   listing.
14787 * --longcalls:                           Xtensa Options.
14788 * --MD:                                  MD.
14789 * --mul-bug-abort command line option, CRIS: CRIS-Opts.
14790 * --no-density:                          Xtensa Options.
14791 * --no-expand command line option, MMIX: MMIX-Opts.
14792 * --no-generics:                         Xtensa Options.
14793 * --no-longcalls:                        Xtensa Options.
14794 * --no-merge-gregs command line option, MMIX: MMIX-Opts.
14795 * --no-mul-bug-abort command line option, CRIS: CRIS-Opts.
14796 * --no-predefined-syms command line option, MMIX: MMIX-Opts.
14797 * --no-pushj-stubs command line option, MMIX: MMIX-Opts.
14798 * --no-relax:                            Xtensa Options.
14799 * --no-stubs command line option, MMIX:  MMIX-Opts.
14800 * --no-target-align:                     Xtensa Options.
14801 * --no-text-section-literals:            Xtensa Options.
14802 * --no-underscore command line option, CRIS: CRIS-Opts.
14803 * --no-warn:                             W.
14804 * --pcrel:                               M68K-Opts.
14805 * --pic command line option, CRIS:       CRIS-Opts.
14806 * --print-insn-syntax:                   M68HC11-Opts.
14807 * --print-opcodes:                       M68HC11-Opts.
14808 * --register-prefix-optional option, M680x0: M68K-Opts.
14809 * --relax:                               Xtensa Options.
14810 * --relax command line option, MMIX:     MMIX-Opts.
14811 * --short-branchs:                       M68HC11-Opts.
14812 * --statistics:                          statistics.
14813 * --strict-direct-mode:                  M68HC11-Opts.
14814 * --target-align:                        Xtensa Options.
14815 * --text-section-literals:               Xtensa Options.
14816 * --traditional-format:                  traditional-format.
14817 * --underscore command line option, CRIS: CRIS-Opts.
14818 * --warn:                                W.
14819 * -1 option, VAX/VMS:                    VAX-Opts.
14820 * -32addr command line option, Alpha:    Alpha Options.
14821 * -a:                                    a.
14822 * -A options, i960:                      Options-i960.
14823 * -ac:                                   a.
14824 * -ad:                                   a.
14825 * -ah:                                   a.
14826 * -al:                                   a.
14827 * -an:                                   a.
14828 * -as:                                   a.
14829 * -Asparclet:                            Sparc-Opts.
14830 * -Asparclite:                           Sparc-Opts.
14831 * -Av6:                                  Sparc-Opts.
14832 * -Av8:                                  Sparc-Opts.
14833 * -Av9:                                  Sparc-Opts.
14834 * -Av9a:                                 Sparc-Opts.
14835 * -b option, i960:                       Options-i960.
14836 * -big:                                  SH Options.
14837 * -big option, M32R:                     M32R-Opts.
14838 * -construct-floats:                     MIPS Opts.
14839 * -D:                                    D.
14840 * -D, ignored on VAX:                    VAX-Opts.
14841 * -d, VAX option:                        VAX-Opts.
14842 * -dsp:                                  SH Options.
14843 * -EB command line option, ARC:          ARC Options.
14844 * -EB command line option, ARM:          ARM Options.
14845 * -EB option (MIPS):                     MIPS Opts.
14846 * -EB option, M32R:                      M32R-Opts.
14847 * -EL command line option, ARC:          ARC Options.
14848 * -EL command line option, ARM:          ARM Options.
14849 * -EL option (MIPS):                     MIPS Opts.
14850 * -EL option, M32R:                      M32R-Opts.
14851 * -f:                                    f.
14852 * -F command line option, Alpha:         Alpha Options.
14853 * -G command line option, Alpha:         Alpha Options.
14854 * -g command line option, Alpha:         Alpha Options.
14855 * -G option (MIPS):                      MIPS Opts.
14856 * -H option, VAX/VMS:                    VAX-Opts.
14857 * -h option, VAX/VMS:                    VAX-Opts.
14858 * -I PATH:                               I.
14859 * -ignore-parallel-conflicts option, M32RX: M32R-Opts.
14860 * -Ip option, M32RX:                     M32R-Opts.
14861 * -J, ignored on VAX:                    VAX-Opts.
14862 * -K:                                    K.
14863 * -k command line option, ARM:           ARM Options.
14864 * -KPIC option, M32R:                    M32R-Opts.
14865 * -L:                                    L.
14866 * -l option, M680x0:                     M68K-Opts.
14867 * -little:                               SH Options.
14868 * -little option, M32R:                  M32R-Opts.
14869 * -M:                                    M.
14870 * -m11/03:                               PDP-11-Options.
14871 * -m11/04:                               PDP-11-Options.
14872 * -m11/05:                               PDP-11-Options.
14873 * -m11/10:                               PDP-11-Options.
14874 * -m11/15:                               PDP-11-Options.
14875 * -m11/20:                               PDP-11-Options.
14876 * -m11/21:                               PDP-11-Options.
14877 * -m11/23:                               PDP-11-Options.
14878 * -m11/24:                               PDP-11-Options.
14879 * -m11/34:                               PDP-11-Options.
14880 * -m11/34a:                              PDP-11-Options.
14881 * -m11/35:                               PDP-11-Options.
14882 * -m11/40:                               PDP-11-Options.
14883 * -m11/44:                               PDP-11-Options.
14884 * -m11/45:                               PDP-11-Options.
14885 * -m11/50:                               PDP-11-Options.
14886 * -m11/53:                               PDP-11-Options.
14887 * -m11/55:                               PDP-11-Options.
14888 * -m11/60:                               PDP-11-Options.
14889 * -m11/70:                               PDP-11-Options.
14890 * -m11/73:                               PDP-11-Options.
14891 * -m11/83:                               PDP-11-Options.
14892 * -m11/84:                               PDP-11-Options.
14893 * -m11/93:                               PDP-11-Options.
14894 * -m11/94:                               PDP-11-Options.
14895 * -m32r option, M32R:                    M32R-Opts.
14896 * -m32rx option, M32R2:                  M32R-Opts.
14897 * -m32rx option, M32RX:                  M32R-Opts.
14898 * -m68000 and related options:           M68K-Opts.
14899 * -m68hc11:                              M68HC11-Opts.
14900 * -m68hc12:                              M68HC11-Opts.
14901 * -m68hcs12:                             M68HC11-Opts.
14902 * -mall:                                 PDP-11-Options.
14903 * -mall-extensions:                      PDP-11-Options.
14904 * -mapcs command line option, ARM:       ARM Options.
14905 * -mapcs-float command line option, ARM: ARM Options.
14906 * -mapcs-reentrant command line option, ARM: ARM Options.
14907 * -marc[5|6|7|8] command line option, ARC: ARC Options.
14908 * -march= command line option, ARM:      ARM Options.
14909 * -matpcs command line option, ARM:      ARM Options.
14910 * -mcis:                                 PDP-11-Options.
14911 * -mCPU command line option, Alpha:      Alpha Options.
14912 * -mcpu option, cpu:                     TIC54X-Opts.
14913 * -mcpu= command line option, ARM:       ARM Options.
14914 * -mcsm:                                 PDP-11-Options.
14915 * -mdebug command line option, Alpha:    Alpha Options.
14916 * -me option, stderr redirect:           TIC54X-Opts.
14917 * -meis:                                 PDP-11-Options.
14918 * -merrors-to-file option, stderr redirect: TIC54X-Opts.
14919 * -mf option, far-mode:                  TIC54X-Opts.
14920 * -mf11:                                 PDP-11-Options.
14921 * -mfar-mode option, far-mode:           TIC54X-Opts.
14922 * -mfis:                                 PDP-11-Options.
14923 * -mfloat-abi= command line option, ARM: ARM Options.
14924 * -mfp-11:                               PDP-11-Options.
14925 * -mfpp:                                 PDP-11-Options.
14926 * -mfpu:                                 PDP-11-Options.
14927 * -mfpu= command line option, ARM:       ARM Options.
14928 * -mip2022 option, IP2K:                 IP2K-Opts.
14929 * -mip2022ext option, IP2022:            IP2K-Opts.
14930 * -mj11:                                 PDP-11-Options.
14931 * -mka11:                                PDP-11-Options.
14932 * -mkb11:                                PDP-11-Options.
14933 * -mkd11a:                               PDP-11-Options.
14934 * -mkd11b:                               PDP-11-Options.
14935 * -mkd11d:                               PDP-11-Options.
14936 * -mkd11e:                               PDP-11-Options.
14937 * -mkd11f:                               PDP-11-Options.
14938 * -mkd11h:                               PDP-11-Options.
14939 * -mkd11k:                               PDP-11-Options.
14940 * -mkd11q:                               PDP-11-Options.
14941 * -mkd11z:                               PDP-11-Options.
14942 * -mkev11:                               PDP-11-Options.
14943 * -mlimited-eis:                         PDP-11-Options.
14944 * -mlong:                                M68HC11-Opts.
14945 * -mlong-double:                         M68HC11-Opts.
14946 * -mmfpt:                                PDP-11-Options.
14947 * -mmicrocode:                           PDP-11-Options.
14948 * -mmutiproc:                            PDP-11-Options.
14949 * -mmxps:                                PDP-11-Options.
14950 * -mno-cis:                              PDP-11-Options.
14951 * -mno-csm:                              PDP-11-Options.
14952 * -mno-eis:                              PDP-11-Options.
14953 * -mno-extensions:                       PDP-11-Options.
14954 * -mno-fis:                              PDP-11-Options.
14955 * -mno-fp-11:                            PDP-11-Options.
14956 * -mno-fpp:                              PDP-11-Options.
14957 * -mno-fpu:                              PDP-11-Options.
14958 * -mno-kev11:                            PDP-11-Options.
14959 * -mno-limited-eis:                      PDP-11-Options.
14960 * -mno-mfpt:                             PDP-11-Options.
14961 * -mno-microcode:                        PDP-11-Options.
14962 * -mno-mutiproc:                         PDP-11-Options.
14963 * -mno-mxps:                             PDP-11-Options.
14964 * -mno-pic:                              PDP-11-Options.
14965 * -mno-spl:                              PDP-11-Options.
14966 * -moabi command line option, ARM:       ARM Options.
14967 * -mpic:                                 PDP-11-Options.
14968 * -mrelax command line option, V850:     V850 Options.
14969 * -mshort:                               M68HC11-Opts.
14970 * -mshort-double:                        M68HC11-Opts.
14971 * -mspl:                                 PDP-11-Options.
14972 * -mt11:                                 PDP-11-Options.
14973 * -mthumb command line option, ARM:      ARM Options.
14974 * -mthumb-interwork command line option, ARM: ARM Options.
14975 * -mv850 command line option, V850:      V850 Options.
14976 * -mv850any command line option, V850:   V850 Options.
14977 * -mv850e command line option, V850:     V850 Options.
14978 * -mv850e1 command line option, V850:    V850 Options.
14979 * -N command line option, CRIS:          CRIS-Opts.
14980 * -nIp option, M32RX:                    M32R-Opts.
14981 * -no-construct-floats:                  MIPS Opts.
14982 * -no-ignore-parallel-conflicts option, M32RX: M32R-Opts.
14983 * -no-mdebug command line option, Alpha: Alpha Options.
14984 * -no-parallel option, M32RX:            M32R-Opts.
14985 * -no-relax option, i960:                Options-i960.
14986 * -no-warn-explicit-parallel-conflicts option, M32RX: M32R-Opts.
14987 * -no-warn-unmatched-high option, M32R:  M32R-Opts.
14988 * -nocpp ignored (MIPS):                 MIPS Opts.
14989 * -o:                                    o.
14990 * -O option, M32RX:                      M32R-Opts.
14991 * -parallel option, M32RX:               M32R-Opts.
14992 * -R:                                    R.
14993 * -relax:                                SH Options.
14994 * -relax command line option, Alpha:     Alpha Options.
14995 * -renesas:                              SH Options.
14996 * -S, ignored on VAX:                    VAX-Opts.
14997 * -small:                                SH Options.
14998 * -t, ignored on VAX:                    VAX-Opts.
14999 * -T, ignored on VAX:                    VAX-Opts.
15000 * -v:                                    v.
15001 * -V, redundant on VAX:                  VAX-Opts.
15002 * -version:                              v.
15003 * -W:                                    W.
15004 * -warn-explicit-parallel-conflicts option, M32RX: M32R-Opts.
15005 * -warn-unmatched-high option, M32R:     M32R-Opts.
15006 * -Wnp option, M32RX:                    M32R-Opts.
15007 * -Wnuh option, M32RX:                   M32R-Opts.
15008 * -Wp option, M32RX:                     M32R-Opts.
15009 * -wsigned_overflow command line option, V850: V850 Options.
15010 * -Wuh option, M32RX:                    M32R-Opts.
15011 * -wunsigned_overflow command line option, V850: V850 Options.
15012 * -x command line option, MMIX:          MMIX-Opts.
15013 * -z8001 command line option, Z8000:     Z8000 Options.
15014 * -z8002 command line option, Z8000:     Z8000 Options.
15015 * . (symbol):                            Dot.
15016 * .big directive, M32RX:                 M32R-Directives.
15017 * .insn:                                 MIPS insn.
15018 * .little directive, M32RX:              M32R-Directives.
15019 * .ltorg directive, ARM:                 ARM Directives.
15020 * .m32r directive, M32R:                 M32R-Directives.
15021 * .m32r2 directive, M32R2:               M32R-Directives.
15022 * .m32rx directive, M32RX:               M32R-Directives.
15023 * .o:                                    Object.
15024 * .param on HPPA:                        HPPA Directives.
15025 * .pool directive, ARM:                  ARM Directives.
15026 * .set autoextend:                       MIPS autoextend.
15027 * .set mdmx:                             MIPS ASE instruction generation overrides.
15028 * .set mips3d:                           MIPS ASE instruction generation overrides.
15029 * .set mipsN:                            MIPS ISA.
15030 * .set noautoextend:                     MIPS autoextend.
15031 * .set nomdmx:                           MIPS ASE instruction generation overrides.
15032 * .set nomips3d:                         MIPS ASE instruction generation overrides.
15033 * .set pop:                              MIPS option stack.
15034 * .set push:                             MIPS option stack.
15035 * .v850 directive, V850:                 V850 Directives.
15036 * .v850e directive, V850:                V850 Directives.
15037 * .v850e1 directive, V850:               V850 Directives.
15038 * .z8001:                                Z8000 Directives.
15039 * .z8002:                                Z8000 Directives.
15040 * 16-bit code, i386:                     i386-16bit.
15041 * 29K support:                           AMD29K-Dependent.
15042 * 2byte directive, ARC:                  ARC Directives.
15043 * 3byte directive, ARC:                  ARC Directives.
15044 * 3DNow!, i386:                          i386-SIMD.
15045 * 3DNow!, x86-64:                        i386-SIMD.
15046 * 430 support:                           MSP430-Dependent.
15047 * 4byte directive, ARC:                  ARC Directives.
15048 * : (label):                             Statements.
15049 * @word modifier, D10V:                  D10V-Word.
15050 * \" (doublequote character):            Strings.
15051 * \\ (\ character):                      Strings.
15052 * \b (backspace character):              Strings.
15053 * \DDD (octal character code):           Strings.
15054 * \f (formfeed character):               Strings.
15055 * \n (newline character):                Strings.
15056 * \r (carriage return character):        Strings.
15057 * \t (tab):                              Strings.
15058 * \XD... (hex character code):           Strings.
15059 * _ opcode prefix:                       Xtensa Opcodes.
15060 * a.out:                                 Object.
15061 * a.out symbol attributes:               a.out Symbols.
15062 * A_DIR environment variable, TIC54X:    TIC54X-Env.
15063 * ABI options, SH64:                     SH64 Options.
15064 * ABORT directive:                       ABORT.
15065 * abort directive:                       Abort.
15066 * absolute section:                      Ld Sections.
15067 * ADDI instructions, relaxation:         Xtensa Immediate Relaxation.
15068 * addition, permitted arguments:         Infix Ops.
15069 * addresses:                             Expressions.
15070 * addresses, format of:                  Secs Background.
15071 * addressing modes, D10V:                D10V-Addressing.
15072 * addressing modes, D30V:                D30V-Addressing.
15073 * addressing modes, H8/300:              H8/300-Addressing.
15074 * addressing modes, H8/500:              H8/500-Addressing.
15075 * addressing modes, M680x0:              M68K-Syntax.
15076 * addressing modes, M68HC11:             M68HC11-Syntax.
15077 * addressing modes, SH:                  SH-Addressing.
15078 * addressing modes, SH64:                SH64-Addressing.
15079 * addressing modes, Z8000:               Z8000-Addressing.
15080 * ADR reg,<label> pseudo op, ARM:        ARM Opcodes.
15081 * ADRL reg,<label> pseudo op, ARM:       ARM Opcodes.
15082 * advancing location counter:            Org.
15083 * align directive:                       Align.
15084 * align directive, ARM:                  ARM Directives.
15085 * align directive, M88K:                 M88K Directives.
15086 * align directive, SPARC:                Sparc-Directives.
15087 * align directive, TIC54X:               TIC54X-Directives.
15088 * alignment of branch targets:           Xtensa Automatic Alignment.
15089 * alignment of ENTRY instructions:       Xtensa Automatic Alignment.
15090 * alignment of LOOP instructions:        Xtensa Automatic Alignment.
15091 * Alpha floating point (IEEE):           Alpha Floating Point.
15092 * Alpha line comment character:          Alpha-Chars.
15093 * Alpha line separator:                  Alpha-Chars.
15094 * Alpha notes:                           Alpha Notes.
15095 * Alpha options:                         Alpha Options.
15096 * Alpha registers:                       Alpha-Regs.
15097 * Alpha relocations:                     Alpha-Relocs.
15098 * Alpha support:                         Alpha-Dependent.
15099 * Alpha Syntax:                          Alpha Options.
15100 * Alpha-only directives:                 Alpha Directives.
15101 * altered difference tables:             Word.
15102 * alternate syntax for the 680x0:        M68K-Moto-Syntax.
15103 * AMD 29K floating point (IEEE):         AMD29K Floating Point.
15104 * AMD 29K identifiers:                   AMD29K-Chars.
15105 * AMD 29K line comment character:        AMD29K-Chars.
15106 * AMD 29K machine directives:            AMD29K Directives.
15107 * AMD 29K macros:                        AMD29K-Macros.
15108 * AMD 29K opcodes:                       AMD29K Opcodes.
15109 * AMD 29K options (none):                AMD29K Options.
15110 * AMD 29K protected registers:           AMD29K-Regs.
15111 * AMD 29K register names:                AMD29K-Regs.
15112 * AMD 29K special purpose registers:     AMD29K-Regs.
15113 * AMD 29K support:                       AMD29K-Dependent.
15114 * ARC floating point (IEEE):             ARC Floating Point.
15115 * ARC machine directives:                ARC Directives.
15116 * ARC opcodes:                           ARC Opcodes.
15117 * ARC options (none):                    ARC Options.
15118 * ARC register names:                    ARC-Regs.
15119 * ARC special characters:                ARC-Chars.
15120 * ARC support:                           ARC-Dependent.
15121 * arc5 arc5, ARC:                        ARC Options.
15122 * arc6 arc6, ARC:                        ARC Options.
15123 * arc7 arc7, ARC:                        ARC Options.
15124 * arc8 arc8, ARC:                        ARC Options.
15125 * arch directive, i386:                  i386-Arch.
15126 * arch directive, x86-64:                i386-Arch.
15127 * architecture options, i960:            Options-i960.
15128 * architecture options, IP2022:          IP2K-Opts.
15129 * architecture options, IP2K:            IP2K-Opts.
15130 * architecture options, M32R:            M32R-Opts.
15131 * architecture options, M32R2:           M32R-Opts.
15132 * architecture options, M32RX:           M32R-Opts.
15133 * architecture options, M680x0:          M68K-Opts.
15134 * architectures, PowerPC:                PowerPC-Opts.
15135 * architectures, SPARC:                  Sparc-Opts.
15136 * arguments for addition:                Infix Ops.
15137 * arguments for subtraction:             Infix Ops.
15138 * arguments in expressions:              Arguments.
15139 * arithmetic functions:                  Operators.
15140 * arithmetic operands:                   Arguments.
15141 * arm directive, ARM:                    ARM Directives.
15142 * ARM floating point (IEEE):             ARM Floating Point.
15143 * ARM identifiers:                       ARM-Chars.
15144 * ARM immediate character:               ARM-Chars.
15145 * ARM line comment character:            ARM-Chars.
15146 * ARM line separator:                    ARM-Chars.
15147 * ARM machine directives:                ARM Directives.
15148 * ARM opcodes:                           ARM Opcodes.
15149 * ARM options (none):                    ARM Options.
15150 * ARM register names:                    ARM-Regs.
15151 * ARM support:                           ARM-Dependent.
15152 * ascii directive:                       Ascii.
15153 * asciz directive:                       Asciz.
15154 * asg directive, TIC54X:                 TIC54X-Directives.
15155 * assembler bugs, reporting:             Bug Reporting.
15156 * assembler crash:                       Bug Criteria.
15157 * assembler directive .dword, CRIS:      CRIS-Pseudos.
15158 * assembler directive .far, M68HC11:     M68HC11-Directives.
15159 * assembler directive .interrupt, M68HC11: M68HC11-Directives.
15160 * assembler directive .mode, M68HC11:    M68HC11-Directives.
15161 * assembler directive .relax, M68HC11:   M68HC11-Directives.
15162 * assembler directive .syntax, CRIS:     CRIS-Pseudos.
15163 * assembler directive .xrefb, M68HC11:   M68HC11-Directives.
15164 * assembler directive BSPEC, MMIX:       MMIX-Pseudos.
15165 * assembler directive BYTE, MMIX:        MMIX-Pseudos.
15166 * assembler directive ESPEC, MMIX:       MMIX-Pseudos.
15167 * assembler directive GREG, MMIX:        MMIX-Pseudos.
15168 * assembler directive IS, MMIX:          MMIX-Pseudos.
15169 * assembler directive LOC, MMIX:         MMIX-Pseudos.
15170 * assembler directive LOCAL, MMIX:       MMIX-Pseudos.
15171 * assembler directive OCTA, MMIX:        MMIX-Pseudos.
15172 * assembler directive PREFIX, MMIX:      MMIX-Pseudos.
15173 * assembler directive TETRA, MMIX:       MMIX-Pseudos.
15174 * assembler directive WYDE, MMIX:        MMIX-Pseudos.
15175 * assembler directives, CRIS:            CRIS-Pseudos.
15176 * assembler directives, M68HC11:         M68HC11-Directives.
15177 * assembler directives, M68HC12:         M68HC11-Directives.
15178 * assembler directives, MMIX:            MMIX-Pseudos.
15179 * assembler internal logic error:        As Sections.
15180 * assembler version:                     v.
15181 * assembler, and linker:                 Secs Background.
15182 * assembly listings, enabling:           a.
15183 * assigning values to symbols <1>:       Equ.
15184 * assigning values to symbols:           Setting Symbols.
15185 * atmp directive, i860:                  Directives-i860.
15186 * att_syntax pseudo op, i386:            i386-Syntax.
15187 * att_syntax pseudo op, x86-64:          i386-Syntax.
15188 * attributes, symbol:                    Symbol Attributes.
15189 * auxiliary attributes, COFF symbols:    COFF Symbols.
15190 * auxiliary symbol information, COFF:    Dim.
15191 * Av7:                                   Sparc-Opts.
15192 * backslash (\\):                        Strings.
15193 * backspace (\b):                        Strings.
15194 * balign directive:                      Balign.
15195 * balignl directive:                     Balign.
15196 * balignw directive:                     Balign.
15197 * bes directive, TIC54X:                 TIC54X-Directives.
15198 * big endian output, MIPS:               Overview.
15199 * big endian output, PJ:                 Overview.
15200 * big-endian output, MIPS:               MIPS Opts.
15201 * bignums:                               Bignums.
15202 * binary constants, TIC54X:              TIC54X-Constants.
15203 * binary files, including:               Incbin.
15204 * binary integers:                       Integers.
15205 * bitfields, not supported on VAX:       VAX-no.
15206 * block:                                 Z8000 Directives.
15207 * block directive, AMD 29K:              AMD29K Directives.
15208 * branch improvement, M680x0:            M68K-Branch.
15209 * branch improvement, M68HC11:           M68HC11-Branch.
15210 * branch improvement, VAX:               VAX-branch.
15211 * branch instructions, relaxation:       Xtensa Branch Relaxation.
15212 * branch recording, i960:                Options-i960.
15213 * branch statistics table, i960:         Options-i960.
15214 * branch target alignment:               Xtensa Automatic Alignment.
15215 * break directive, TIC54X:               TIC54X-Directives.
15216 * BSD syntax:                            PDP-11-Syntax.
15217 * bss directive, i960:                   Directives-i960.
15218 * bss directive, M88K:                   M88K Directives.
15219 * bss directive, TIC54X:                 TIC54X-Directives.
15220 * bss section <1>:                       bss.
15221 * bss section:                           Ld Sections.
15222 * bug criteria:                          Bug Criteria.
15223 * bug reports:                           Bug Reporting.
15224 * bugs in assembler:                     Reporting Bugs.
15225 * builtin math functions, TIC54X:        TIC54X-Builtins.
15226 * builtin subsym functions, TIC54X:      TIC54X-Macros.
15227 * bus lock prefixes, i386:               i386-Prefixes.
15228 * bval:                                  Z8000 Directives.
15229 * byte directive:                        Byte.
15230 * byte directive, TIC54X:                TIC54X-Directives.
15231 * C54XDSP_DIR environment variable, TIC54X: TIC54X-Env.
15232 * c_mode directive, TIC54X:              TIC54X-Directives.
15233 * call instructions, i386:               i386-Mnemonics.
15234 * call instructions, relaxation:         Xtensa Call Relaxation.
15235 * call instructions, x86-64:             i386-Mnemonics.
15236 * callj, i960 pseudo-opcode:             callj-i960.
15237 * carriage return (\r):                  Strings.
15238 * cfi_endproc directive:                 CFI directives.
15239 * cfi_startproc directive:               CFI directives.
15240 * char directive, TIC54X:                TIC54X-Directives.
15241 * character constants:                   Characters.
15242 * character escape codes:                Strings.
15243 * character, single:                     Chars.
15244 * characters used in symbols:            Symbol Intro.
15245 * clink directive, TIC54X:               TIC54X-Directives.
15246 * code directive, ARM:                   ARM Directives.
15247 * code16 directive, i386:                i386-16bit.
15248 * code16gcc directive, i386:             i386-16bit.
15249 * code32 directive, i386:                i386-16bit.
15250 * code64 directive, i386:                i386-16bit.
15251 * code64 directive, x86-64:              i386-16bit.
15252 * COFF auxiliary symbol information:     Dim.
15253 * COFF structure debugging:              Tag.
15254 * COFF symbol attributes:                COFF Symbols.
15255 * COFF symbol descriptor:                Desc.
15256 * COFF symbol storage class:             Scl.
15257 * COFF symbol type:                      Type.
15258 * COFF symbols, debugging:               Def.
15259 * COFF value attribute:                  Val.
15260 * COMDAT:                                Linkonce.
15261 * comm directive:                        Comm.
15262 * command line conventions:              Command Line.
15263 * command line options, V850:            V850 Options.
15264 * command-line options ignored, VAX:     VAX-Opts.
15265 * comments:                              Comments.
15266 * comments, M680x0:                      M68K-Chars.
15267 * comments, removed by preprocessor:     Preprocessing.
15268 * common directive, SPARC:               Sparc-Directives.
15269 * common sections:                       Linkonce.
15270 * common variable storage:               bss.
15271 * compare and jump expansions, i960:     Compare-and-branch-i960.
15272 * compare/branch instructions, i960:     Compare-and-branch-i960.
15273 * comparison expressions:                Infix Ops.
15274 * conditional assembly:                  If.
15275 * constant, single character:            Chars.
15276 * constants:                             Constants.
15277 * constants, bignum:                     Bignums.
15278 * constants, character:                  Characters.
15279 * constants, converted by preprocessor:  Preprocessing.
15280 * constants, floating point:             Flonums.
15281 * constants, integer:                    Integers.
15282 * constants, number:                     Numbers.
15283 * constants, string:                     Strings.
15284 * constants, TIC54X:                     TIC54X-Constants.
15285 * conversion instructions, i386:         i386-Mnemonics.
15286 * conversion instructions, x86-64:       i386-Mnemonics.
15287 * coprocessor wait, i386:                i386-Prefixes.
15288 * copy directive, TIC54X:                TIC54X-Directives.
15289 * cputype directive, AMD 29K:            AMD29K Directives.
15290 * crash of assembler:                    Bug Criteria.
15291 * CRIS --emulation=crisaout command line option: CRIS-Opts.
15292 * CRIS --emulation=criself command line option: CRIS-Opts.
15293 * CRIS --mul-bug-abort command line option: CRIS-Opts.
15294 * CRIS --no-mul-bug-abort command line option: CRIS-Opts.
15295 * CRIS --no-underscore command line option: CRIS-Opts.
15296 * CRIS --pic command line option:        CRIS-Opts.
15297 * CRIS --underscore command line option: CRIS-Opts.
15298 * CRIS -N command line option:           CRIS-Opts.
15299 * CRIS assembler directive .dword:       CRIS-Pseudos.
15300 * CRIS assembler directive .syntax:      CRIS-Pseudos.
15301 * CRIS assembler directives:             CRIS-Pseudos.
15302 * CRIS instruction expansion:            CRIS-Expand.
15303 * CRIS line comment characters:          CRIS-Chars.
15304 * CRIS options:                          CRIS-Opts.
15305 * CRIS position-independent code:        CRIS-Opts.
15306 * CRIS pseudo-op .dword:                 CRIS-Pseudos.
15307 * CRIS pseudo-op .syntax:                CRIS-Pseudos.
15308 * CRIS pseudo-ops:                       CRIS-Pseudos.
15309 * CRIS register names:                   CRIS-Regs.
15310 * CRIS support:                          CRIS-Dependent.
15311 * CRIS symbols in position-independent code: CRIS-Pic.
15312 * ctbp register, V850:                   V850-Regs.
15313 * ctoff pseudo-op, V850:                 V850 Opcodes.
15314 * ctpc register, V850:                   V850-Regs.
15315 * ctpsw register, V850:                  V850-Regs.
15316 * current address:                       Dot.
15317 * current address, advancing:            Org.
15318 * D10V @word modifier:                   D10V-Word.
15319 * D10V addressing modes:                 D10V-Addressing.
15320 * D10V floating point:                   D10V-Float.
15321 * D10V line comment character:           D10V-Chars.
15322 * D10V opcode summary:                   D10V-Opcodes.
15323 * D10V optimization:                     Overview.
15324 * D10V options:                          D10V-Opts.
15325 * D10V registers:                        D10V-Regs.
15326 * D10V size modifiers:                   D10V-Size.
15327 * D10V sub-instruction ordering:         D10V-Chars.
15328 * D10V sub-instructions:                 D10V-Subs.
15329 * D10V support:                          D10V-Dependent.
15330 * D10V syntax:                           D10V-Syntax.
15331 * D30V addressing modes:                 D30V-Addressing.
15332 * D30V floating point:                   D30V-Float.
15333 * D30V Guarded Execution:                D30V-Guarded.
15334 * D30V line comment character:           D30V-Chars.
15335 * D30V nops:                             Overview.
15336 * D30V nops after 32-bit multiply:       Overview.
15337 * D30V opcode summary:                   D30V-Opcodes.
15338 * D30V optimization:                     Overview.
15339 * D30V options:                          D30V-Opts.
15340 * D30V registers:                        D30V-Regs.
15341 * D30V size modifiers:                   D30V-Size.
15342 * D30V sub-instruction ordering:         D30V-Chars.
15343 * D30V sub-instructions:                 D30V-Subs.
15344 * D30V support:                          D30V-Dependent.
15345 * D30V syntax:                           D30V-Syntax.
15346 * data alignment on SPARC:               Sparc-Aligned-Data.
15347 * data and text sections, joining:       R.
15348 * data directive:                        Data.
15349 * data directive, TIC54X:                TIC54X-Directives.
15350 * data section:                          Ld Sections.
15351 * data1 directive, M680x0:               M68K-Directives.
15352 * data2 directive, M680x0:               M68K-Directives.
15353 * datalabel, SH64:                       SH64-Addressing.
15354 * dbpc register, V850:                   V850-Regs.
15355 * dbpsw register, V850:                  V850-Regs.
15356 * debuggers, and symbol order:           Symbols.
15357 * debugging COFF symbols:                Def.
15358 * DEC syntax:                            PDP-11-Syntax.
15359 * decimal integers:                      Integers.
15360 * def directive:                         Def.
15361 * def directive, M88K:                   M88K Directives.
15362 * def directive, TIC54X:                 TIC54X-Directives.
15363 * density directive:                     Density Directive.
15364 * density instructions:                  Density Instructions.
15365 * density option, Xtensa:                Xtensa Options.
15366 * dependency tracking:                   MD.
15367 * deprecated directives:                 Deprecated.
15368 * desc directive:                        Desc.
15369 * descriptor, of a.out symbol:           Symbol Desc.
15370 * dfloat directive, M88K:                M88K Directives.
15371 * dfloat directive, VAX:                 VAX-directives.
15372 * difference tables altered:             Word.
15373 * difference tables, warning:            K.
15374 * differences, mmixal:                   MMIX-mmixal.
15375 * dim directive:                         Dim.
15376 * directives and instructions:           Statements.
15377 * directives for PowerPC:                PowerPC-Pseudo.
15378 * directives, M32R:                      M32R-Directives.
15379 * directives, M680x0:                    M68K-Directives.
15380 * directives, machine independent:       Pseudo Ops.
15381 * directives, precedence:                Xtensa Directives.
15382 * directives, Xtensa:                    Xtensa Directives.
15383 * directives, Z8000:                     Z8000 Directives.
15384 * displacement sizing character, VAX:    VAX-operands.
15385 * dollar local symbols:                  Symbol Names.
15386 * dot (symbol):                          Dot.
15387 * double directive:                      Double.
15388 * double directive, i386:                i386-Float.
15389 * double directive, M680x0:              M68K-Float.
15390 * double directive, M68HC11:             M68HC11-Float.
15391 * double directive, TIC54X:              TIC54X-Directives.
15392 * double directive, VAX:                 VAX-float.
15393 * double directive, x86-64:              i386-Float.
15394 * doublequote (\"):                      Strings.
15395 * drlist directive, TIC54X:              TIC54X-Directives.
15396 * drnolist directive, TIC54X:            TIC54X-Directives.
15397 * dual directive, i860:                  Directives-i860.
15398 * ECOFF sections:                        MIPS Object.
15399 * ecr register, V850:                    V850-Regs.
15400 * eight-byte integer:                    Quad.
15401 * eipc register, V850:                   V850-Regs.
15402 * eipsw register, V850:                  V850-Regs.
15403 * eject directive:                       Eject.
15404 * ELF symbol type:                       Type.
15405 * else directive:                        Else.
15406 * elseif directive:                      Elseif.
15407 * empty expressions:                     Empty Exprs.
15408 * emsg directive, TIC54X:                TIC54X-Directives.
15409 * emulation:                             Overview.
15410 * end directive:                         End.
15411 * enddual directive, i860:               Directives-i860.
15412 * endef directive:                       Endef.
15413 * endfunc directive:                     Endfunc.
15414 * endianness, MIPS:                      Overview.
15415 * endianness, PJ:                        Overview.
15416 * endif directive:                       Endif.
15417 * endloop directive, TIC54X:             TIC54X-Directives.
15418 * endm directive:                        Macro.
15419 * endm directive, TIC54X:                TIC54X-Directives.
15420 * endstruct directive, TIC54X:           TIC54X-Directives.
15421 * endunion directive, TIC54X:            TIC54X-Directives.
15422 * ENTRY instructions, alignment:         Xtensa Automatic Alignment.
15423 * environment settings, TIC54X:          TIC54X-Env.
15424 * EOF, newline must precede:             Statements.
15425 * ep register, V850:                     V850-Regs.
15426 * equ directive:                         Equ.
15427 * equ directive, TIC54X:                 TIC54X-Directives.
15428 * equiv directive:                       Equiv.
15429 * err directive:                         Err.
15430 * error messages:                        Errors.
15431 * error on valid input:                  Bug Criteria.
15432 * errors, caused by warnings:            W.
15433 * errors, continuing after:              Z.
15434 * ESA/390 floating point (IEEE):         ESA/390 Floating Point.
15435 * ESA/390 support:                       ESA/390-Dependent.
15436 * ESA/390 Syntax:                        ESA/390 Options.
15437 * ESA/390-only directives:               ESA/390 Directives.
15438 * escape codes, character:               Strings.
15439 * eval directive, TIC54X:                TIC54X-Directives.
15440 * even:                                  Z8000 Directives.
15441 * even directive, M680x0:                M68K-Directives.
15442 * even directive, TIC54X:                TIC54X-Directives.
15443 * exitm directive:                       Macro.
15444 * expr (internal section):               As Sections.
15445 * expression arguments:                  Arguments.
15446 * expressions:                           Expressions.
15447 * expressions, comparison:               Infix Ops.
15448 * expressions, empty:                    Empty Exprs.
15449 * expressions, integer:                  Integer Exprs.
15450 * extAuxRegister directive, ARC:         ARC Directives.
15451 * extCondCode directive, ARC:            ARC Directives.
15452 * extCoreRegister directive, ARC:        ARC Directives.
15453 * extend directive M680x0:               M68K-Float.
15454 * extend directive M68HC11:              M68HC11-Float.
15455 * extended directive, i960:              Directives-i960.
15456 * extern directive:                      Extern.
15457 * extInstruction directive, ARC:         ARC Directives.
15458 * fail directive:                        Fail.
15459 * far_mode directive, TIC54X:            TIC54X-Directives.
15460 * faster processing (-f):                f.
15461 * fatal signal:                          Bug Criteria.
15462 * fclist directive, TIC54X:              TIC54X-Directives.
15463 * fcnolist directive, TIC54X:            TIC54X-Directives.
15464 * fepc register, V850:                   V850-Regs.
15465 * fepsw register, V850:                  V850-Regs.
15466 * ffloat directive, M88K:                M88K Directives.
15467 * ffloat directive, VAX:                 VAX-directives.
15468 * field directive, TIC54X:               TIC54X-Directives.
15469 * file directive:                        File.
15470 * file directive, AMD 29K:               AMD29K Directives.
15471 * file directive, MSP 430:               MSP430 Directives.
15472 * file name, logical:                    File.
15473 * files, including:                      Include.
15474 * files, input:                          Input Files.
15475 * fill directive:                        Fill.
15476 * filling memory <1>:                    Space.
15477 * filling memory:                        Skip.
15478 * float directive:                       Float.
15479 * float directive, i386:                 i386-Float.
15480 * float directive, M680x0:               M68K-Float.
15481 * float directive, M68HC11:              M68HC11-Float.
15482 * float directive, TIC54X:               TIC54X-Directives.
15483 * float directive, VAX:                  VAX-float.
15484 * float directive, x86-64:               i386-Float.
15485 * floating point numbers:                Flonums.
15486 * floating point numbers (double):       Double.
15487 * floating point numbers (single) <1>:   Single.
15488 * floating point numbers (single):       Float.
15489 * floating point, Alpha (IEEE):          Alpha Floating Point.
15490 * floating point, AMD 29K (IEEE):        AMD29K Floating Point.
15491 * floating point, ARC (IEEE):            ARC Floating Point.
15492 * floating point, ARM (IEEE):            ARM Floating Point.
15493 * floating point, D10V:                  D10V-Float.
15494 * floating point, D30V:                  D30V-Float.
15495 * floating point, ESA/390 (IEEE):        ESA/390 Floating Point.
15496 * floating point, H8/300 (IEEE):         H8/300 Floating Point.
15497 * floating point, H8/500 (IEEE):         H8/500 Floating Point.
15498 * floating point, HPPA (IEEE):           HPPA Floating Point.
15499 * floating point, i386:                  i386-Float.
15500 * floating point, i960 (IEEE):           Floating Point-i960.
15501 * floating point, M680x0:                M68K-Float.
15502 * floating point, M68HC11:               M68HC11-Float.
15503 * floating point, MSP 430 (IEEE):        MSP430 Floating Point.
15504 * floating point, SH (IEEE):             SH Floating Point.
15505 * floating point, SPARC (IEEE):          Sparc-Float.
15506 * floating point, V850 (IEEE):           V850 Floating Point.
15507 * floating point, VAX:                   VAX-float.
15508 * floating point, x86-64:                i386-Float.
15509 * flonums:                               Flonums.
15510 * force_thumb directive, ARM:            ARM Directives.
15511 * format of error messages:              Errors.
15512 * format of warning messages:            Errors.
15513 * formfeed (\f):                         Strings.
15514 * frame directive:                       Frame Directive.
15515 * freeregs directive:                    Freeregs Directive.
15516 * func directive:                        Func.
15517 * functions, in expressions:             Operators.
15518 * gbr960, i960 postprocessor:            Options-i960.
15519 * generic opcodes:                       Xtensa Opcodes.
15520 * generics directive:                    Generics Directive.
15521 * gfloat directive, VAX:                 VAX-directives.
15522 * global:                                Z8000 Directives.
15523 * global directive:                      Global.
15524 * global directive, TIC54X:              TIC54X-Directives.
15525 * gp register, MIPS:                     MIPS Object.
15526 * gp register, V850:                     V850-Regs.
15527 * grouping data:                         Sub-Sections.
15528 * H8/300 addressing modes:               H8/300-Addressing.
15529 * H8/300 floating point (IEEE):          H8/300 Floating Point.
15530 * H8/300 line comment character:         H8/300-Chars.
15531 * H8/300 line separator:                 H8/300-Chars.
15532 * H8/300 machine directives (none):      H8/300 Directives.
15533 * H8/300 opcode summary:                 H8/300 Opcodes.
15534 * H8/300 options (none):                 H8/300 Options.
15535 * H8/300 registers:                      H8/300-Regs.
15536 * H8/300 size suffixes:                  H8/300 Opcodes.
15537 * H8/300 support:                        H8/300-Dependent.
15538 * H8/300H, assembling for:               H8/300 Directives.
15539 * H8/500 addressing modes:               H8/500-Addressing.
15540 * H8/500 floating point (IEEE):          H8/500 Floating Point.
15541 * H8/500 line comment character:         H8/500-Chars.
15542 * H8/500 line separator:                 H8/500-Chars.
15543 * H8/500 machine directives (none):      H8/500 Directives.
15544 * H8/500 opcode summary:                 H8/500 Opcodes.
15545 * H8/500 options (none):                 H8/500 Options.
15546 * H8/500 registers:                      H8/500-Regs.
15547 * H8/500 support:                        H8/500-Dependent.
15548 * half directive, ARC:                   ARC Directives.
15549 * half directive, M88K:                  M88K Directives.
15550 * half directive, SPARC:                 Sparc-Directives.
15551 * half directive, TIC54X:                TIC54X-Directives.
15552 * hex character code (\XD...):           Strings.
15553 * hexadecimal integers:                  Integers.
15554 * hfloat directive, VAX:                 VAX-directives.
15555 * hi pseudo-op, V850:                    V850 Opcodes.
15556 * hi0 pseudo-op, V850:                   V850 Opcodes.
15557 * hidden directive:                      Hidden.
15558 * high directive, M32R:                  M32R-Directives.
15559 * hilo pseudo-op, V850:                  V850 Opcodes.
15560 * HPPA directives not supported:         HPPA Directives.
15561 * HPPA floating point (IEEE):            HPPA Floating Point.
15562 * HPPA Syntax:                           HPPA Options.
15563 * HPPA-only directives:                  HPPA Directives.
15564 * hword directive:                       hword.
15565 * i370 support:                          ESA/390-Dependent.
15566 * i386 16-bit code:                      i386-16bit.
15567 * i386 arch directive:                   i386-Arch.
15568 * i386 att_syntax pseudo op:             i386-Syntax.
15569 * i386 conversion instructions:          i386-Mnemonics.
15570 * i386 floating point:                   i386-Float.
15571 * i386 immediate operands:               i386-Syntax.
15572 * i386 instruction naming:               i386-Mnemonics.
15573 * i386 instruction prefixes:             i386-Prefixes.
15574 * i386 intel_syntax pseudo op:           i386-Syntax.
15575 * i386 jump optimization:                i386-Jumps.
15576 * i386 jump, call, return:               i386-Syntax.
15577 * i386 jump/call operands:               i386-Syntax.
15578 * i386 memory references:                i386-Memory.
15579 * i386 mul, imul instructions:           i386-Notes.
15580 * i386 options:                          i386-Options.
15581 * i386 register operands:                i386-Syntax.
15582 * i386 registers:                        i386-Regs.
15583 * i386 sections:                         i386-Syntax.
15584 * i386 size suffixes:                    i386-Syntax.
15585 * i386 source, destination operands:     i386-Syntax.
15586 * i386 support:                          i386-Dependent.
15587 * i386 syntax compatibility:             i386-Syntax.
15588 * i80306 support:                        i386-Dependent.
15589 * i860 machine directives:               Directives-i860.
15590 * i860 opcodes:                          Opcodes for i860.
15591 * i860 support:                          i860-Dependent.
15592 * i960 architecture options:             Options-i960.
15593 * i960 branch recording:                 Options-i960.
15594 * i960 callj pseudo-opcode:              callj-i960.
15595 * i960 compare and jump expansions:      Compare-and-branch-i960.
15596 * i960 compare/branch instructions:      Compare-and-branch-i960.
15597 * i960 floating point (IEEE):            Floating Point-i960.
15598 * i960 machine directives:               Directives-i960.
15599 * i960 opcodes:                          Opcodes for i960.
15600 * i960 options:                          Options-i960.
15601 * i960 support:                          i960-Dependent.
15602 * ident directive:                       Ident.
15603 * identifiers, AMD 29K:                  AMD29K-Chars.
15604 * identifiers, ARM:                      ARM-Chars.
15605 * identifiers, MSP 430:                  MSP430-Chars.
15606 * if directive:                          If.
15607 * ifc directive:                         If.
15608 * ifdef directive:                       If.
15609 * ifeq directive:                        If.
15610 * ifeqs directive:                       If.
15611 * ifge directive:                        If.
15612 * ifgt directive:                        If.
15613 * ifle directive:                        If.
15614 * iflt directive:                        If.
15615 * ifnc directive:                        If.
15616 * ifndef directive:                      If.
15617 * ifne directive:                        If.
15618 * ifnes directive:                       If.
15619 * ifnotdef directive:                    If.
15620 * immediate character, ARM:              ARM-Chars.
15621 * immediate character, M680x0:           M68K-Chars.
15622 * immediate character, VAX:              VAX-operands.
15623 * immediate fields, relaxation:          Xtensa Immediate Relaxation.
15624 * immediate operands, i386:              i386-Syntax.
15625 * immediate operands, x86-64:            i386-Syntax.
15626 * imul instruction, i386:                i386-Notes.
15627 * imul instruction, x86-64:              i386-Notes.
15628 * incbin directive:                      Incbin.
15629 * include directive:                     Include.
15630 * include directive search path:         I.
15631 * indirect character, VAX:               VAX-operands.
15632 * infix operators:                       Infix Ops.
15633 * inhibiting interrupts, i386:           i386-Prefixes.
15634 * input:                                 Input Files.
15635 * input file linenumbers:                Input Files.
15636 * instruction expansion, CRIS:           CRIS-Expand.
15637 * instruction expansion, MMIX:           MMIX-Expand.
15638 * instruction naming, i386:              i386-Mnemonics.
15639 * instruction naming, x86-64:            i386-Mnemonics.
15640 * instruction prefixes, i386:            i386-Prefixes.
15641 * instruction set, M680x0:               M68K-opcodes.
15642 * instruction set, M68HC11:              M68HC11-opcodes.
15643 * instruction summary, D10V:             D10V-Opcodes.
15644 * instruction summary, D30V:             D30V-Opcodes.
15645 * instruction summary, H8/300:           H8/300 Opcodes.
15646 * instruction summary, H8/500:           H8/500 Opcodes.
15647 * instruction summary, SH:               SH Opcodes.
15648 * instruction summary, SH64:             SH64 Opcodes.
15649 * instruction summary, Z8000:            Z8000 Opcodes.
15650 * instructions and directives:           Statements.
15651 * int directive:                         Int.
15652 * int directive, H8/300:                 H8/300 Directives.
15653 * int directive, H8/500:                 H8/500 Directives.
15654 * int directive, i386:                   i386-Float.
15655 * int directive, TIC54X:                 TIC54X-Directives.
15656 * int directive, x86-64:                 i386-Float.
15657 * integer expressions:                   Integer Exprs.
15658 * integer, 16-byte:                      Octa.
15659 * integer, 8-byte:                       Quad.
15660 * integers:                              Integers.
15661 * integers, 16-bit:                      hword.
15662 * integers, 32-bit:                      Int.
15663 * integers, binary:                      Integers.
15664 * integers, decimal:                     Integers.
15665 * integers, hexadecimal:                 Integers.
15666 * integers, octal:                       Integers.
15667 * integers, one byte:                    Byte.
15668 * intel_syntax pseudo op, i386:          i386-Syntax.
15669 * intel_syntax pseudo op, x86-64:        i386-Syntax.
15670 * internal assembler sections:           As Sections.
15671 * internal directive:                    Internal.
15672 * invalid input:                         Bug Criteria.
15673 * invocation summary:                    Overview.
15674 * IP2K architecture options:             IP2K-Opts.
15675 * IP2K options:                          IP2K-Opts.
15676 * IP2K support:                          IP2K-Dependent.
15677 * irp directive:                         Irp.
15678 * irpc directive:                        Irpc.
15679 * ISA options, SH64:                     SH64 Options.
15680 * joining text and data sections:        R.
15681 * jump instructions, i386:               i386-Mnemonics.
15682 * jump instructions, x86-64:             i386-Mnemonics.
15683 * jump optimization, i386:               i386-Jumps.
15684 * jump optimization, x86-64:             i386-Jumps.
15685 * jump/call operands, i386:              i386-Syntax.
15686 * jump/call operands, x86-64:            i386-Syntax.
15687 * L16SI instructions, relaxation:        Xtensa Immediate Relaxation.
15688 * L16UI instructions, relaxation:        Xtensa Immediate Relaxation.
15689 * L32I instructions, relaxation:         Xtensa Immediate Relaxation.
15690 * L8UI instructions, relaxation:         Xtensa Immediate Relaxation.
15691 * label (:):                             Statements.
15692 * label directive, TIC54X:               TIC54X-Directives.
15693 * labels:                                Labels.
15694 * lcomm directive:                       Lcomm.
15695 * ld:                                    Object.
15696 * ldouble directive M680x0:              M68K-Float.
15697 * ldouble directive M68HC11:             M68HC11-Float.
15698 * ldouble directive, TIC54X:             TIC54X-Directives.
15699 * LDR reg,=<label> pseudo op, ARM:       ARM Opcodes.
15700 * leafproc directive, i960:              Directives-i960.
15701 * length directive, TIC54X:              TIC54X-Directives.
15702 * length of symbols:                     Symbol Intro.
15703 * lflags directive (ignored):            Lflags.
15704 * line comment character:                Comments.
15705 * line comment character, Alpha:         Alpha-Chars.
15706 * line comment character, AMD 29K:       AMD29K-Chars.
15707 * line comment character, ARM:           ARM-Chars.
15708 * line comment character, D10V:          D10V-Chars.
15709 * line comment character, D30V:          D30V-Chars.
15710 * line comment character, H8/300:        H8/300-Chars.
15711 * line comment character, H8/500:        H8/500-Chars.
15712 * line comment character, M680x0:        M68K-Chars.
15713 * line comment character, MSP 430:       MSP430-Chars.
15714 * line comment character, SH:            SH-Chars.
15715 * line comment character, SH64:          SH64-Chars.
15716 * line comment character, V850:          V850-Chars.
15717 * line comment character, Z8000:         Z8000-Chars.
15718 * line comment characters, CRIS:         CRIS-Chars.
15719 * line comment characters, MMIX:         MMIX-Chars.
15720 * line directive:                        Line.
15721 * line directive, AMD 29K:               AMD29K Directives.
15722 * line directive, MSP 430:               MSP430 Directives.
15723 * line numbers, in input files:          Input Files.
15724 * line numbers, in warnings/errors:      Errors.
15725 * line separator character:              Statements.
15726 * line separator, Alpha:                 Alpha-Chars.
15727 * line separator, ARM:                   ARM-Chars.
15728 * line separator, H8/300:                H8/300-Chars.
15729 * line separator, H8/500:                H8/500-Chars.
15730 * line separator, SH:                    SH-Chars.
15731 * line separator, SH64:                  SH64-Chars.
15732 * line separator, Z8000:                 Z8000-Chars.
15733 * lines starting with #:                 Comments.
15734 * linker:                                Object.
15735 * linker, and assembler:                 Secs Background.
15736 * linkonce directive:                    Linkonce.
15737 * list directive:                        List.
15738 * list directive, TIC54X:                TIC54X-Directives.
15739 * listing control, turning off:          Nolist.
15740 * listing control, turning on:           List.
15741 * listing control: new page:             Eject.
15742 * listing control: paper size:           Psize.
15743 * listing control: subtitle:             Sbttl.
15744 * listing control: title line:           Title.
15745 * listings, enabling:                    a.
15746 * literal directive:                     Literal Directive.
15747 * literal_position directive:            Literal Position Directive.
15748 * literal_prefix directive:              Literal Prefix Directive.
15749 * little endian output, MIPS:            Overview.
15750 * little endian output, PJ:              Overview.
15751 * little-endian output, MIPS:            MIPS Opts.
15752 * ln directive:                          Ln.
15753 * lo pseudo-op, V850:                    V850 Opcodes.
15754 * local common symbols:                  Lcomm.
15755 * local labels, retaining in output:     L.
15756 * local symbol names:                    Symbol Names.
15757 * location counter:                      Dot.
15758 * location counter, advancing:           Org.
15759 * logical file name:                     File.
15760 * logical line number:                   Line.
15761 * logical line numbers:                  Comments.
15762 * long directive:                        Long.
15763 * long directive, ARC:                   ARC Directives.
15764 * long directive, i386:                  i386-Float.
15765 * long directive, TIC54X:                TIC54X-Directives.
15766 * long directive, x86-64:                i386-Float.
15767 * longcall pseudo-op, V850:              V850 Opcodes.
15768 * longcalls directive:                   Longcalls Directive.
15769 * longjump pseudo-op, V850:              V850 Opcodes.
15770 * loop directive, TIC54X:                TIC54X-Directives.
15771 * LOOP instructions, alignment:          Xtensa Automatic Alignment.
15772 * low directive, M32R:                   M32R-Directives.
15773 * lp register, V850:                     V850-Regs.
15774 * lval:                                  Z8000 Directives.
15775 * M32R architecture options:             M32R-Opts.
15776 * M32R directives:                       M32R-Directives.
15777 * M32R options:                          M32R-Opts.
15778 * M32R support:                          M32R-Dependent.
15779 * M32R warnings:                         M32R-Warnings.
15780 * M680x0 addressing modes:               M68K-Syntax.
15781 * M680x0 architecture options:           M68K-Opts.
15782 * M680x0 branch improvement:             M68K-Branch.
15783 * M680x0 directives:                     M68K-Directives.
15784 * M680x0 floating point:                 M68K-Float.
15785 * M680x0 immediate character:            M68K-Chars.
15786 * M680x0 line comment character:         M68K-Chars.
15787 * M680x0 opcodes:                        M68K-opcodes.
15788 * M680x0 options:                        M68K-Opts.
15789 * M680x0 pseudo-opcodes:                 M68K-Branch.
15790 * M680x0 size modifiers:                 M68K-Syntax.
15791 * M680x0 support:                        M68K-Dependent.
15792 * M680x0 syntax:                         M68K-Syntax.
15793 * M68HC11 addressing modes:              M68HC11-Syntax.
15794 * M68HC11 and M68HC12 support:           M68HC11-Dependent.
15795 * M68HC11 assembler directive .far:      M68HC11-Directives.
15796 * M68HC11 assembler directive .interrupt: M68HC11-Directives.
15797 * M68HC11 assembler directive .mode:     M68HC11-Directives.
15798 * M68HC11 assembler directive .relax:    M68HC11-Directives.
15799 * M68HC11 assembler directive .xrefb:    M68HC11-Directives.
15800 * M68HC11 assembler directives:          M68HC11-Directives.
15801 * M68HC11 branch improvement:            M68HC11-Branch.
15802 * M68HC11 floating point:                M68HC11-Float.
15803 * M68HC11 modifiers:                     M68HC11-Modifiers.
15804 * M68HC11 opcodes:                       M68HC11-opcodes.
15805 * M68HC11 options:                       M68HC11-Opts.
15806 * M68HC11 pseudo-opcodes:                M68HC11-Branch.
15807 * M68HC11 syntax:                        M68HC11-Syntax.
15808 * M68HC12 assembler directives:          M68HC11-Directives.
15809 * M88K support:                          M88K-Dependent.
15810 * machine dependencies:                  Machine Dependencies.
15811 * machine directives, AMD 29K:           AMD29K Directives.
15812 * machine directives, ARC:               ARC Directives.
15813 * machine directives, ARM:               ARM Directives.
15814 * machine directives, H8/300 (none):     H8/300 Directives.
15815 * machine directives, H8/500 (none):     H8/500 Directives.
15816 * machine directives, i860:              Directives-i860.
15817 * machine directives, i960:              Directives-i960.
15818 * machine directives, MSP 430:           MSP430 Directives.
15819 * machine directives, SH:                SH Directives.
15820 * machine directives, SH64:              SH64 Directives.
15821 * machine directives, SPARC:             Sparc-Directives.
15822 * machine directives, TIC54X:            TIC54X-Directives.
15823 * machine directives, V850:              V850 Directives.
15824 * machine directives, VAX:               VAX-directives.
15825 * machine independent directives:        Pseudo Ops.
15826 * machine instructions (not covered):    Manual.
15827 * machine-independent syntax:            Syntax.
15828 * macro directive:                       Macro.
15829 * macro directive, TIC54X:               TIC54X-Directives.
15830 * macros:                                Macro.
15831 * Macros, AMD 29K:                       AMD29K-Macros.
15832 * macros, count executed:                Macro.
15833 * Macros, MSP 430:                       MSP430-Macros.
15834 * macros, TIC54X:                        TIC54X-Macros.
15835 * make rules:                            MD.
15836 * manual, structure and purpose:         Manual.
15837 * math builtins, TIC54X:                 TIC54X-Builtins.
15838 * Maximum number of continuation lines:  listing.
15839 * memory references, i386:               i386-Memory.
15840 * memory references, x86-64:             i386-Memory.
15841 * memory-mapped registers, TIC54X:       TIC54X-MMRegs.
15842 * merging text and data sections:        R.
15843 * messages from assembler:               Errors.
15844 * minus, permitted arguments:            Infix Ops.
15845 * MIPS architecture options:             MIPS Opts.
15846 * MIPS big-endian output:                MIPS Opts.
15847 * MIPS debugging directives:             MIPS Stabs.
15848 * MIPS ECOFF sections:                   MIPS Object.
15849 * MIPS endianness:                       Overview.
15850 * MIPS ISA:                              Overview.
15851 * MIPS ISA override:                     MIPS ISA.
15852 * MIPS little-endian output:             MIPS Opts.
15853 * MIPS MDMX instruction generation override: MIPS ASE instruction generation overrides.
15854 * MIPS MIPS-3D instruction generation override: MIPS ASE instruction generation overrides.
15855 * MIPS option stack:                     MIPS option stack.
15856 * MIPS processor:                        MIPS-Dependent.
15857 * MIT:                                   M68K-Syntax.
15858 * mlib directive, TIC54X:                TIC54X-Directives.
15859 * mlist directive, TIC54X:               TIC54X-Directives.
15860 * MMIX assembler directive BSPEC:        MMIX-Pseudos.
15861 * MMIX assembler directive BYTE:         MMIX-Pseudos.
15862 * MMIX assembler directive ESPEC:        MMIX-Pseudos.
15863 * MMIX assembler directive GREG:         MMIX-Pseudos.
15864 * MMIX assembler directive IS:           MMIX-Pseudos.
15865 * MMIX assembler directive LOC:          MMIX-Pseudos.
15866 * MMIX assembler directive LOCAL:        MMIX-Pseudos.
15867 * MMIX assembler directive OCTA:         MMIX-Pseudos.
15868 * MMIX assembler directive PREFIX:       MMIX-Pseudos.
15869 * MMIX assembler directive TETRA:        MMIX-Pseudos.
15870 * MMIX assembler directive WYDE:         MMIX-Pseudos.
15871 * MMIX assembler directives:             MMIX-Pseudos.
15872 * MMIX line comment characters:          MMIX-Chars.
15873 * MMIX options:                          MMIX-Opts.
15874 * MMIX pseudo-op BSPEC:                  MMIX-Pseudos.
15875 * MMIX pseudo-op BYTE:                   MMIX-Pseudos.
15876 * MMIX pseudo-op ESPEC:                  MMIX-Pseudos.
15877 * MMIX pseudo-op GREG:                   MMIX-Pseudos.
15878 * MMIX pseudo-op IS:                     MMIX-Pseudos.
15879 * MMIX pseudo-op LOC:                    MMIX-Pseudos.
15880 * MMIX pseudo-op LOCAL:                  MMIX-Pseudos.
15881 * MMIX pseudo-op OCTA:                   MMIX-Pseudos.
15882 * MMIX pseudo-op PREFIX:                 MMIX-Pseudos.
15883 * MMIX pseudo-op TETRA:                  MMIX-Pseudos.
15884 * MMIX pseudo-op WYDE:                   MMIX-Pseudos.
15885 * MMIX pseudo-ops:                       MMIX-Pseudos.
15886 * MMIX register names:                   MMIX-Regs.
15887 * MMIX support:                          MMIX-Dependent.
15888 * mmixal differences:                    MMIX-mmixal.
15889 * mmregs directive, TIC54X:              TIC54X-Directives.
15890 * mmsg directive, TIC54X:                TIC54X-Directives.
15891 * MMX, i386:                             i386-SIMD.
15892 * MMX, x86-64:                           i386-SIMD.
15893 * mnemonic suffixes, i386:               i386-Syntax.
15894 * mnemonic suffixes, x86-64:             i386-Syntax.
15895 * mnemonics for opcodes, VAX:            VAX-opcodes.
15896 * mnemonics, D10V:                       D10V-Opcodes.
15897 * mnemonics, D30V:                       D30V-Opcodes.
15898 * mnemonics, H8/300:                     H8/300 Opcodes.
15899 * mnemonics, H8/500:                     H8/500 Opcodes.
15900 * mnemonics, SH:                         SH Opcodes.
15901 * mnemonics, SH64:                       SH64 Opcodes.
15902 * mnemonics, Z8000:                      Z8000 Opcodes.
15903 * mnolist directive, TIC54X:             TIC54X-Directives.
15904 * Motorola syntax for the 680x0:         M68K-Moto-Syntax.
15905 * MOVI instructions, relaxation:         Xtensa Immediate Relaxation.
15906 * MRI compatibility mode:                M.
15907 * mri directive:                         MRI.
15908 * MRI mode, temporarily:                 MRI.
15909 * MSP 430 floating point (IEEE):         MSP430 Floating Point.
15910 * MSP 430 identifiers:                   MSP430-Chars.
15911 * MSP 430 line comment character:        MSP430-Chars.
15912 * MSP 430 machine directives:            MSP430 Directives.
15913 * MSP 430 macros:                        MSP430-Macros.
15914 * MSP 430 opcodes:                       MSP430 Opcodes.
15915 * MSP 430 options (none):                MSP430 Options.
15916 * MSP 430 register names:                MSP430-Regs.
15917 * MSP 430 support:                       MSP430-Dependent.
15918 * MSP430 Assembler Extensions:           MSP430-Ext.
15919 * mul instruction, i386:                 i386-Notes.
15920 * mul instruction, x86-64:               i386-Notes.
15921 * name:                                  Z8000 Directives.
15922 * named section:                         Section.
15923 * named sections:                        Ld Sections.
15924 * names, symbol:                         Symbol Names.
15925 * naming object file:                    o.
15926 * new page, in listings:                 Eject.
15927 * newblock directive, TIC54X:            TIC54X-Directives.
15928 * newline (\n):                          Strings.
15929 * newline, required at file end:         Statements.
15930 * no-density directive:                  Density Directive.
15931 * no-generics directive:                 Generics Directive.
15932 * no-longcalls directive:                Longcalls Directive.
15933 * no-relax directive:                    Relax Directive.
15934 * nolist directive:                      Nolist.
15935 * nolist directive, TIC54X:              TIC54X-Directives.
15936 * NOP pseudo op, ARM:                    ARM Opcodes.
15937 * notes for Alpha:                       Alpha Notes.
15938 * null-terminated strings:               Asciz.
15939 * number constants:                      Numbers.
15940 * number of macros executed:             Macro.
15941 * numbered subsections:                  Sub-Sections.
15942 * numbers, 16-bit:                       hword.
15943 * numeric values:                        Expressions.
15944 * nword directive, SPARC:                Sparc-Directives.
15945 * object file:                           Object.
15946 * object file format:                    Object Formats.
15947 * object file name:                      o.
15948 * object file, after errors:             Z.
15949 * obsolescent directives:                Deprecated.
15950 * octa directive:                        Octa.
15951 * octal character code (\DDD):           Strings.
15952 * octal integers:                        Integers.
15953 * offset directive, V850:                V850 Directives.
15954 * opcode mnemonics, VAX:                 VAX-opcodes.
15955 * opcode names, Xtenxa:                  Xtensa Opcodes.
15956 * opcode summary, D10V:                  D10V-Opcodes.
15957 * opcode summary, D30V:                  D30V-Opcodes.
15958 * opcode summary, H8/300:                H8/300 Opcodes.
15959 * opcode summary, H8/500:                H8/500 Opcodes.
15960 * opcode summary, SH:                    SH Opcodes.
15961 * opcode summary, SH64:                  SH64 Opcodes.
15962 * opcode summary, Z8000:                 Z8000 Opcodes.
15963 * opcodes for AMD 29K:                   AMD29K Opcodes.
15964 * opcodes for ARC:                       ARC Opcodes.
15965 * opcodes for ARM:                       ARM Opcodes.
15966 * opcodes for MSP 430:                   MSP430 Opcodes.
15967 * opcodes for V850:                      V850 Opcodes.
15968 * opcodes, i860:                         Opcodes for i860.
15969 * opcodes, i960:                         Opcodes for i960.
15970 * opcodes, M680x0:                       M68K-opcodes.
15971 * opcodes, M68HC11:                      M68HC11-opcodes.
15972 * operand delimiters, i386:              i386-Syntax.
15973 * operand delimiters, x86-64:            i386-Syntax.
15974 * operand notation, VAX:                 VAX-operands.
15975 * operands in expressions:               Arguments.
15976 * operator precedence:                   Infix Ops.
15977 * operators, in expressions:             Operators.
15978 * operators, permitted arguments:        Infix Ops.
15979 * optimization, D10V:                    Overview.
15980 * optimization, D30V:                    Overview.
15981 * optimizations:                         Xtensa Optimizations.
15982 * option directive, ARC:                 ARC Directives.
15983 * option directive, TIC54X:              TIC54X-Directives.
15984 * option summary:                        Overview.
15985 * options for Alpha:                     Alpha Options.
15986 * options for AMD29K (none):             AMD29K Options.
15987 * options for ARC (none):                ARC Options.
15988 * options for ARM (none):                ARM Options.
15989 * options for i386:                      i386-Options.
15990 * options for MSP430 (none):             MSP430 Options.
15991 * options for PDP-11:                    PDP-11-Options.
15992 * options for PowerPC:                   PowerPC-Opts.
15993 * options for SPARC:                     Sparc-Opts.
15994 * options for V850 (none):               V850 Options.
15995 * options for VAX/VMS:                   VAX-Opts.
15996 * options for x86-64:                    i386-Options.
15997 * options, all versions of assembler:    Invoking.
15998 * options, command line:                 Command Line.
15999 * options, CRIS:                         CRIS-Opts.
16000 * options, D10V:                         D10V-Opts.
16001 * options, D30V:                         D30V-Opts.
16002 * options, H8/300 (none):                H8/300 Options.
16003 * options, H8/500 (none):                H8/500 Options.
16004 * options, i960:                         Options-i960.
16005 * options, IP2K:                         IP2K-Opts.
16006 * options, M32R:                         M32R-Opts.
16007 * options, M680x0:                       M68K-Opts.
16008 * options, M68HC11:                      M68HC11-Opts.
16009 * options, MMIX:                         MMIX-Opts.
16010 * options, PJ:                           PJ Options.
16011 * options, SH:                           SH Options.
16012 * options, SH64:                         SH64 Options.
16013 * options, TIC54X:                       TIC54X-Opts.
16014 * options, Z8000:                        Z8000 Options.
16015 * org directive:                         Org.
16016 * other attribute, of a.out symbol:      Symbol Other.
16017 * output file:                           Object.
16018 * p2align directive:                     P2align.
16019 * p2alignl directive:                    P2align.
16020 * p2alignw directive:                    P2align.
16021 * padding the location counter:          Align.
16022 * padding the location counter given a power of two: P2align.
16023 * padding the location counter given number of bytes: Balign.
16024 * page, in listings:                     Eject.
16025 * paper size, for listings:              Psize.
16026 * paths for .include:                    I.
16027 * patterns, writing in memory:           Fill.
16028 * PDP-11 comments:                       PDP-11-Syntax.
16029 * PDP-11 floating-point register syntax: PDP-11-Syntax.
16030 * PDP-11 general-purpose register syntax: PDP-11-Syntax.
16031 * PDP-11 instruction naming:             PDP-11-Mnemonics.
16032 * PDP-11 support:                        PDP-11-Dependent.
16033 * PDP-11 syntax:                         PDP-11-Syntax.
16034 * PIC code generation for ARM:           ARM Options.
16035 * PIC code generation for M32R:          M32R-Opts.
16036 * PJ endianness:                         Overview.
16037 * PJ options:                            PJ Options.
16038 * PJ support:                            PJ-Dependent.
16039 * plus, permitted arguments:             Infix Ops.
16040 * popsection directive:                  PopSection.
16041 * Position-independent code, CRIS:       CRIS-Opts.
16042 * Position-independent code, symbols in, CRIS: CRIS-Pic.
16043 * PowerPC architectures:                 PowerPC-Opts.
16044 * PowerPC directives:                    PowerPC-Pseudo.
16045 * PowerPC options:                       PowerPC-Opts.
16046 * PowerPC support:                       PPC-Dependent.
16047 * precedence of directives:              Xtensa Directives.
16048 * precedence of operators:               Infix Ops.
16049 * precision, floating point:             Flonums.
16050 * prefix operators:                      Prefix Ops.
16051 * prefixes, i386:                        i386-Prefixes.
16052 * preprocessing:                         Preprocessing.
16053 * preprocessing, turning on and off:     Preprocessing.
16054 * previous directive:                    Previous.
16055 * primary attributes, COFF symbols:      COFF Symbols.
16056 * print directive:                       Print.
16057 * proc directive, SPARC:                 Sparc-Directives.
16058 * protected directive:                   Protected.
16059 * protected registers, AMD 29K:          AMD29K-Regs.
16060 * pseudo-op .dword, CRIS:                CRIS-Pseudos.
16061 * pseudo-op .syntax, CRIS:               CRIS-Pseudos.
16062 * pseudo-op BSPEC, MMIX:                 MMIX-Pseudos.
16063 * pseudo-op BYTE, MMIX:                  MMIX-Pseudos.
16064 * pseudo-op ESPEC, MMIX:                 MMIX-Pseudos.
16065 * pseudo-op GREG, MMIX:                  MMIX-Pseudos.
16066 * pseudo-op IS, MMIX:                    MMIX-Pseudos.
16067 * pseudo-op LOC, MMIX:                   MMIX-Pseudos.
16068 * pseudo-op LOCAL, MMIX:                 MMIX-Pseudos.
16069 * pseudo-op OCTA, MMIX:                  MMIX-Pseudos.
16070 * pseudo-op PREFIX, MMIX:                MMIX-Pseudos.
16071 * pseudo-op TETRA, MMIX:                 MMIX-Pseudos.
16072 * pseudo-op WYDE, MMIX:                  MMIX-Pseudos.
16073 * pseudo-opcodes, M680x0:                M68K-Branch.
16074 * pseudo-opcodes, M68HC11:               M68HC11-Branch.
16075 * pseudo-ops for branch, VAX:            VAX-branch.
16076 * pseudo-ops, CRIS:                      CRIS-Pseudos.
16077 * pseudo-ops, machine independent:       Pseudo Ops.
16078 * pseudo-ops, MMIX:                      MMIX-Pseudos.
16079 * psize directive:                       Psize.
16080 * pstring directive, TIC54X:             TIC54X-Directives.
16081 * psw register, V850:                    V850-Regs.
16082 * purgem directive:                      Purgem.
16083 * purpose of GNU assembler:              GNU Assembler.
16084 * pushsection directive:                 PushSection.
16085 * quad directive:                        Quad.
16086 * quad directive, i386:                  i386-Float.
16087 * quad directive, x86-64:                i386-Float.
16088 * real-mode code, i386:                  i386-16bit.
16089 * ref directive, TIC54X:                 TIC54X-Directives.
16090 * register directive, SPARC:             Sparc-Directives.
16091 * register names, Alpha:                 Alpha-Regs.
16092 * register names, AMD 29K:               AMD29K-Regs.
16093 * register names, ARC:                   ARC-Regs.
16094 * register names, ARM:                   ARM-Regs.
16095 * register names, CRIS:                  CRIS-Regs.
16096 * register names, H8/300:                H8/300-Regs.
16097 * register names, MMIX:                  MMIX-Regs.
16098 * register names, MSP 430:               MSP430-Regs.
16099 * register names, V850:                  V850-Regs.
16100 * register names, VAX:                   VAX-operands.
16101 * register names, Xtensa:                Xtensa Registers.
16102 * register operands, i386:               i386-Syntax.
16103 * register operands, x86-64:             i386-Syntax.
16104 * registers, D10V:                       D10V-Regs.
16105 * registers, D30V:                       D30V-Regs.
16106 * registers, H8/500:                     H8/500-Regs.
16107 * registers, i386:                       i386-Regs.
16108 * registers, SH:                         SH-Regs.
16109 * registers, SH64:                       SH64-Regs.
16110 * registers, TIC54X memory-mapped:       TIC54X-MMRegs.
16111 * registers, x86-64:                     i386-Regs.
16112 * registers, Z8000:                      Z8000-Regs.
16113 * relax directive:                       Relax Directive.
16114 * relaxation:                            Xtensa Relaxation.
16115 * relaxation of ADDI instructions:       Xtensa Immediate Relaxation.
16116 * relaxation of branch instructions:     Xtensa Branch Relaxation.
16117 * relaxation of call instructions:       Xtensa Call Relaxation.
16118 * relaxation of immediate fields:        Xtensa Immediate Relaxation.
16119 * relaxation of L16SI instructions:      Xtensa Immediate Relaxation.
16120 * relaxation of L16UI instructions:      Xtensa Immediate Relaxation.
16121 * relaxation of L32I instructions:       Xtensa Immediate Relaxation.
16122 * relaxation of L8UI instructions:       Xtensa Immediate Relaxation.
16123 * relaxation of MOVI instructions:       Xtensa Immediate Relaxation.
16124 * relocation:                            Sections.
16125 * relocation example:                    Ld Sections.
16126 * relocations, Alpha:                    Alpha-Relocs.
16127 * repeat prefixes, i386:                 i386-Prefixes.
16128 * reporting bugs in assembler:           Reporting Bugs.
16129 * rept directive:                        Rept.
16130 * req directive, ARM:                    ARM Directives.
16131 * reserve directive, SPARC:              Sparc-Directives.
16132 * return instructions, i386:             i386-Syntax.
16133 * return instructions, x86-64:           i386-Syntax.
16134 * REX prefixes, i386:                    i386-Prefixes.
16135 * rsect:                                 Z8000 Directives.
16136 * sblock directive, TIC54X:              TIC54X-Directives.
16137 * sbttl directive:                       Sbttl.
16138 * scl directive:                         Scl.
16139 * sdaoff pseudo-op, V850:                V850 Opcodes.
16140 * search path for .include:              I.
16141 * sect directive, AMD 29K:               AMD29K Directives.
16142 * sect directive, MSP 430:               MSP430 Directives.
16143 * sect directive, TIC54X:                TIC54X-Directives.
16144 * section directive (COFF version):      Section.
16145 * section directive (ELF version):       Section.
16146 * section directive, V850:               V850 Directives.
16147 * section override prefixes, i386:       i386-Prefixes.
16148 * Section Stack <1>:                     SubSection.
16149 * Section Stack <2>:                     Section.
16150 * Section Stack <3>:                     PushSection.
16151 * Section Stack <4>:                     PopSection.
16152 * Section Stack:                         Previous.
16153 * section-relative addressing:           Secs Background.
16154 * sections:                              Sections.
16155 * sections in messages, internal:        As Sections.
16156 * sections, i386:                        i386-Syntax.
16157 * sections, named:                       Ld Sections.
16158 * sections, x86-64:                      i386-Syntax.
16159 * seg directive, SPARC:                  Sparc-Directives.
16160 * segm:                                  Z8000 Directives.
16161 * set directive:                         Set.
16162 * set directive, M88K:                   M88K Directives.
16163 * set directive, TIC54X:                 TIC54X-Directives.
16164 * SH addressing modes:                   SH-Addressing.
16165 * SH floating point (IEEE):              SH Floating Point.
16166 * SH line comment character:             SH-Chars.
16167 * SH line separator:                     SH-Chars.
16168 * SH machine directives:                 SH Directives.
16169 * SH opcode summary:                     SH Opcodes.
16170 * SH options:                            SH Options.
16171 * SH registers:                          SH-Regs.
16172 * SH support:                            SH-Dependent.
16173 * SH64 ABI options:                      SH64 Options.
16174 * SH64 addressing modes:                 SH64-Addressing.
16175 * SH64 ISA options:                      SH64 Options.
16176 * SH64 line comment character:           SH64-Chars.
16177 * SH64 line separator:                   SH64-Chars.
16178 * SH64 machine directives:               SH64 Directives.
16179 * SH64 opcode summary:                   SH64 Opcodes.
16180 * SH64 options:                          SH64 Options.
16181 * SH64 registers:                        SH64-Regs.
16182 * SH64 support:                          SH64-Dependent.
16183 * shigh directive, M32R:                 M32R-Directives.
16184 * short directive:                       Short.
16185 * short directive, ARC:                  ARC Directives.
16186 * short directive, TIC54X:               TIC54X-Directives.
16187 * SIMD, i386:                            i386-SIMD.
16188 * SIMD, x86-64:                          i386-SIMD.
16189 * single character constant:             Chars.
16190 * single directive:                      Single.
16191 * single directive, i386:                i386-Float.
16192 * single directive, x86-64:              i386-Float.
16193 * sixteen bit integers:                  hword.
16194 * sixteen byte integer:                  Octa.
16195 * size directive (COFF version):         Size.
16196 * size directive (ELF version):          Size.
16197 * size modifiers, D10V:                  D10V-Size.
16198 * size modifiers, D30V:                  D30V-Size.
16199 * size modifiers, M680x0:                M68K-Syntax.
16200 * size prefixes, i386:                   i386-Prefixes.
16201 * size suffixes, H8/300:                 H8/300 Opcodes.
16202 * sizes operands, i386:                  i386-Syntax.
16203 * sizes operands, x86-64:                i386-Syntax.
16204 * skip directive:                        Skip.
16205 * skip directive, M680x0:                M68K-Directives.
16206 * skip directive, SPARC:                 Sparc-Directives.
16207 * sleb128 directive:                     Sleb128.
16208 * small objects, MIPS ECOFF:             MIPS Object.
16209 * SOM symbol attributes:                 SOM Symbols.
16210 * source program:                        Input Files.
16211 * source, destination operands; i386:    i386-Syntax.
16212 * source, destination operands; x86-64:  i386-Syntax.
16213 * sp register:                           Xtensa Registers.
16214 * sp register, V850:                     V850-Regs.
16215 * space directive:                       Space.
16216 * space directive, TIC54X:               TIC54X-Directives.
16217 * space used, maximum for assembly:      statistics.
16218 * SPARC architectures:                   Sparc-Opts.
16219 * SPARC data alignment:                  Sparc-Aligned-Data.
16220 * SPARC floating point (IEEE):           Sparc-Float.
16221 * SPARC machine directives:              Sparc-Directives.
16222 * SPARC options:                         Sparc-Opts.
16223 * SPARC support:                         Sparc-Dependent.
16224 * special characters, ARC:               ARC-Chars.
16225 * special characters, M680x0:            M68K-Chars.
16226 * special purpose registers, AMD 29K:    AMD29K-Regs.
16227 * special purpose registers, MSP 430:    MSP430-Regs.
16228 * specific opcodes:                      Xtensa Opcodes.
16229 * sslist directive, TIC54X:              TIC54X-Directives.
16230 * ssnolist directive, TIC54X:            TIC54X-Directives.
16231 * stabd directive:                       Stab.
16232 * stabn directive:                       Stab.
16233 * stabs directive:                       Stab.
16234 * stabX directives:                      Stab.
16235 * standard assembler sections:           Secs Background.
16236 * standard input, as input file:         Command Line.
16237 * statement separator character:         Statements.
16238 * statement separator, Alpha:            Alpha-Chars.
16239 * statement separator, ARM:              ARM-Chars.
16240 * statement separator, H8/300:           H8/300-Chars.
16241 * statement separator, H8/500:           H8/500-Chars.
16242 * statement separator, SH:               SH-Chars.
16243 * statement separator, SH64:             SH64-Chars.
16244 * statement separator, Z8000:            Z8000-Chars.
16245 * statements, structure of:              Statements.
16246 * statistics, about assembly:            statistics.
16247 * stopping the assembly:                 Abort.
16248 * string constants:                      Strings.
16249 * string directive:                      String.
16250 * string directive on HPPA:              HPPA Directives.
16251 * string directive, M88K:                M88K Directives.
16252 * string directive, TIC54X:              TIC54X-Directives.
16253 * string literals:                       Ascii.
16254 * string, copying to object file:        String.
16255 * struct directive:                      Struct.
16256 * struct directive, TIC54X:              TIC54X-Directives.
16257 * structure debugging, COFF:             Tag.
16258 * sub-instruction ordering, D10V:        D10V-Chars.
16259 * sub-instruction ordering, D30V:        D30V-Chars.
16260 * sub-instructions, D10V:                D10V-Subs.
16261 * sub-instructions, D30V:                D30V-Subs.
16262 * subexpressions:                        Arguments.
16263 * subsection directive:                  SubSection.
16264 * subsym builtins, TIC54X:               TIC54X-Macros.
16265 * subtitles for listings:                Sbttl.
16266 * subtraction, permitted arguments:      Infix Ops.
16267 * summary of options:                    Overview.
16268 * support:                               HPPA-Dependent.
16269 * supporting files, including:           Include.
16270 * suppressing warnings:                  W.
16271 * sval:                                  Z8000 Directives.
16272 * symbol attributes:                     Symbol Attributes.
16273 * symbol attributes, a.out:              a.out Symbols.
16274 * symbol attributes, COFF:               COFF Symbols.
16275 * symbol attributes, SOM:                SOM Symbols.
16276 * symbol descriptor, COFF:               Desc.
16277 * symbol modifiers:                      M68HC11-Modifiers.
16278 * symbol names:                          Symbol Names.
16279 * symbol names, $ in <1>:                SH64-Chars.
16280 * symbol names, $ in <2>:                SH-Chars.
16281 * symbol names, $ in <3>:                H8/500-Chars.
16282 * symbol names, $ in <4>:                D30V-Chars.
16283 * symbol names, $ in:                    D10V-Chars.
16284 * symbol names, local:                   Symbol Names.
16285 * symbol names, temporary:               Symbol Names.
16286 * symbol storage class (COFF):           Scl.
16287 * symbol type:                           Symbol Type.
16288 * symbol type, COFF:                     Type.
16289 * symbol type, ELF:                      Type.
16290 * symbol value:                          Symbol Value.
16291 * symbol value, setting:                 Set.
16292 * symbol values, assigning:              Setting Symbols.
16293 * symbol versioning:                     Symver.
16294 * symbol, common:                        Comm.
16295 * symbol, making visible to linker:      Global.
16296 * symbolic debuggers, information for:   Stab.
16297 * symbols:                               Symbols.
16298 * Symbols in position-independent code, CRIS: CRIS-Pic.
16299 * symbols with uppercase, VAX/VMS:       VAX-Opts.
16300 * symbols, assigning values to:          Equ.
16301 * symbols, local common:                 Lcomm.
16302 * symver directive:                      Symver.
16303 * syntax compatibility, i386:            i386-Syntax.
16304 * syntax compatibility, x86-64:          i386-Syntax.
16305 * syntax, D10V:                          D10V-Syntax.
16306 * syntax, D30V:                          D30V-Syntax.
16307 * syntax, M680x0:                        M68K-Syntax.
16308 * syntax, M68HC11 <1>:                   M68HC11-Modifiers.
16309 * syntax, M68HC11:                       M68HC11-Syntax.
16310 * syntax, machine-independent:           Syntax.
16311 * syntax, Xtensa assembler:              Xtensa Syntax.
16312 * sysproc directive, i960:               Directives-i960.
16313 * tab (\t):                              Strings.
16314 * tab directive, TIC54X:                 TIC54X-Directives.
16315 * tag directive:                         Tag.
16316 * tag directive, TIC54X:                 TIC54X-Directives.
16317 * tdaoff pseudo-op, V850:                V850 Opcodes.
16318 * temporary symbol names:                Symbol Names.
16319 * text and data sections, joining:       R.
16320 * text directive:                        Text.
16321 * text section:                          Ld Sections.
16322 * tfloat directive, i386:                i386-Float.
16323 * tfloat directive, x86-64:              i386-Float.
16324 * thumb directive, ARM:                  ARM Directives.
16325 * Thumb support:                         ARM-Dependent.
16326 * thumb_func directive, ARM:             ARM Directives.
16327 * thumb_set directive, ARM:              ARM Directives.
16328 * TIC54X builtin math functions:         TIC54X-Builtins.
16329 * TIC54X machine directives:             TIC54X-Directives.
16330 * TIC54X memory-mapped registers:        TIC54X-MMRegs.
16331 * TIC54X options:                        TIC54X-Opts.
16332 * TIC54X subsym builtins:                TIC54X-Macros.
16333 * TIC54X support:                        TIC54X-Dependent.
16334 * TIC54X-specific macros:                TIC54X-Macros.
16335 * time, total for assembly:              statistics.
16336 * title directive:                       Title.
16337 * tp register, V850:                     V850-Regs.
16338 * trusted compiler:                      f.
16339 * turning preprocessing on and off:      Preprocessing.
16340 * type directive (COFF version):         Type.
16341 * type directive (ELF version):          Type.
16342 * type of a symbol:                      Symbol Type.
16343 * ualong directive, SH:                  SH Directives.
16344 * uaword directive, SH:                  SH Directives.
16345 * ubyte directive, TIC54X:               TIC54X-Directives.
16346 * uchar directive, TIC54X:               TIC54X-Directives.
16347 * uhalf directive, TIC54X:               TIC54X-Directives.
16348 * uint directive, TIC54X:                TIC54X-Directives.
16349 * uleb128 directive:                     Uleb128.
16350 * ulong directive, TIC54X:               TIC54X-Directives.
16351 * undefined section:                     Ld Sections.
16352 * union directive, TIC54X:               TIC54X-Directives.
16353 * unreq directive, ARM:                  ARM Directives.
16354 * unsegm:                                Z8000 Directives.
16355 * use directive, AMD 29K:                AMD29K Directives.
16356 * usect directive, TIC54X:               TIC54X-Directives.
16357 * ushort directive, TIC54X:              TIC54X-Directives.
16358 * uword directive, TIC54X:               TIC54X-Directives.
16359 * V850 command line options:             V850 Options.
16360 * V850 floating point (IEEE):            V850 Floating Point.
16361 * V850 line comment character:           V850-Chars.
16362 * V850 machine directives:               V850 Directives.
16363 * V850 opcodes:                          V850 Opcodes.
16364 * V850 options (none):                   V850 Options.
16365 * V850 register names:                   V850-Regs.
16366 * V850 support:                          V850-Dependent.
16367 * val directive:                         Val.
16368 * value attribute, COFF:                 Val.
16369 * value of a symbol:                     Symbol Value.
16370 * var directive, TIC54X:                 TIC54X-Directives.
16371 * VAX bitfields not supported:           VAX-no.
16372 * VAX branch improvement:                VAX-branch.
16373 * VAX command-line options ignored:      VAX-Opts.
16374 * VAX displacement sizing character:     VAX-operands.
16375 * VAX floating point:                    VAX-float.
16376 * VAX immediate character:               VAX-operands.
16377 * VAX indirect character:                VAX-operands.
16378 * VAX machine directives:                VAX-directives.
16379 * VAX opcode mnemonics:                  VAX-opcodes.
16380 * VAX operand notation:                  VAX-operands.
16381 * VAX register names:                    VAX-operands.
16382 * VAX support:                           Vax-Dependent.
16383 * Vax-11 C compatibility:                VAX-Opts.
16384 * VAX/VMS options:                       VAX-Opts.
16385 * version directive:                     Version.
16386 * version directive, TIC54X:             TIC54X-Directives.
16387 * version of assembler:                  v.
16388 * versions of symbols:                   Symver.
16389 * visibility <1>:                        Protected.
16390 * visibility <2>:                        Internal.
16391 * visibility:                            Hidden.
16392 * VMS (VAX) options:                     VAX-Opts.
16393 * vtable_entry:                          VTableEntry.
16394 * vtable_inherit:                        VTableInherit.
16395 * warning for altered difference tables: K.
16396 * warning messages:                      Errors.
16397 * warnings, causing error:               W.
16398 * warnings, M32R:                        M32R-Warnings.
16399 * warnings, suppressing:                 W.
16400 * warnings, switching on:                W.
16401 * weak directive:                        Weak.
16402 * whitespace:                            Whitespace.
16403 * whitespace, removed by preprocessor:   Preprocessing.
16404 * wide floating point directives, VAX:   VAX-directives.
16405 * width directive, TIC54X:               TIC54X-Directives.
16406 * Width of continuation lines of disassembly output: listing.
16407 * Width of first line disassembly output: listing.
16408 * Width of source line output:           listing.
16409 * wmsg directive, TIC54X:                TIC54X-Directives.
16410 * word directive:                        Word.
16411 * word directive, ARC:                   ARC Directives.
16412 * word directive, H8/300:                H8/300 Directives.
16413 * word directive, H8/500:                H8/500 Directives.
16414 * word directive, i386:                  i386-Float.
16415 * word directive, M88K:                  M88K Directives.
16416 * word directive, SPARC:                 Sparc-Directives.
16417 * word directive, TIC54X:                TIC54X-Directives.
16418 * word directive, x86-64:                i386-Float.
16419 * writing patterns in memory:            Fill.
16420 * wval:                                  Z8000 Directives.
16421 * x86-64 arch directive:                 i386-Arch.
16422 * x86-64 att_syntax pseudo op:           i386-Syntax.
16423 * x86-64 conversion instructions:        i386-Mnemonics.
16424 * x86-64 floating point:                 i386-Float.
16425 * x86-64 immediate operands:             i386-Syntax.
16426 * x86-64 instruction naming:             i386-Mnemonics.
16427 * x86-64 intel_syntax pseudo op:         i386-Syntax.
16428 * x86-64 jump optimization:              i386-Jumps.
16429 * x86-64 jump, call, return:             i386-Syntax.
16430 * x86-64 jump/call operands:             i386-Syntax.
16431 * x86-64 memory references:              i386-Memory.
16432 * x86-64 options:                        i386-Options.
16433 * x86-64 register operands:              i386-Syntax.
16434 * x86-64 registers:                      i386-Regs.
16435 * x86-64 sections:                       i386-Syntax.
16436 * x86-64 size suffixes:                  i386-Syntax.
16437 * x86-64 source, destination operands:   i386-Syntax.
16438 * x86-64 support:                        i386-Dependent.
16439 * x86-64 syntax compatibility:           i386-Syntax.
16440 * xfloat directive, TIC54X:              TIC54X-Directives.
16441 * xlong directive, TIC54X:               TIC54X-Directives.
16442 * Xtensa architecture:                   Xtensa-Dependent.
16443 * Xtensa assembler syntax:               Xtensa Syntax.
16444 * Xtensa density option:                 Xtensa Options.
16445 * Xtensa directives:                     Xtensa Directives.
16446 * Xtensa opcode names:                   Xtensa Opcodes.
16447 * Xtensa register names:                 Xtensa Registers.
16448 * xword directive, SPARC:                Sparc-Directives.
16449 * Z800 addressing modes:                 Z8000-Addressing.
16450 * Z8000 directives:                      Z8000 Directives.
16451 * Z8000 line comment character:          Z8000-Chars.
16452 * Z8000 line separator:                  Z8000-Chars.
16453 * Z8000 opcode summary:                  Z8000 Opcodes.
16454 * Z8000 options:                         Z8000 Options.
16455 * Z8000 registers:                       Z8000-Regs.
16456 * Z8000 support:                         Z8000-Dependent.
16457 * zdaoff pseudo-op, V850:                V850 Opcodes.
16458 * zero register, V850:                   V850-Regs.
16459 * zero-terminated strings:               Asciz.