\input texinfo @c                               -*-Texinfo-*-
@c  Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
@c  2001, 2002, 2003, 2004
@c  Free Software Foundation, Inc.
@c UPDATE!!  On future updates--
@c   (1)   check for new machine-dep cmdline options in
@c         md_parse_option definitions in config/tc-*.c
@c   (2)   for platform-specific directives, examine md_pseudo_op
@c         in config/tc-*.c
@c   (3)   for object-format specific directives, examine obj_pseudo_op
@c         in config/obj-*.c       
@c   (4)   portable directives in potable[] in read.c
@c %**start of header
@setfilename as.info
@c ---config---
@macro gcctabopt{body}
@code{\body\}
@end macro
@c defaults, config file may override:
@set have-stabs
@c ---
@c man begin NAME
@c ---
@include asconfig.texi
@include gasver.texi
@c ---
@c man end
@c ---
@c common OR combinations of conditions
@ifset COFF
@set COFF-ELF
@end ifset
@ifset ELF
@set COFF-ELF
@end ifset
@ifset AOUT
@set aout-bout
@end ifset
@ifset ARM/Thumb
@set ARM
@end ifset
@ifset BOUT
@set aout-bout
@end ifset
@ifset H8/300
@set H8
@end ifset
@ifset H8/500
@set H8
@end ifset
@ifset SH
@set H8
@end ifset
@ifset HPPA
@set abnormal-separator
@end ifset
@c ------------
@ifset GENERIC
@settitle Using @value{AS}
@end ifset
@ifclear GENERIC
@settitle Using @value{AS} (@value{TARGET})
@end ifclear
@setchapternewpage odd
@c %**end of header

@c @smallbook
@c @set SMALL
@c WARE! Some of the machine-dependent sections contain tables of machine
@c instructions.  Except in multi-column format, these tables look silly.
@c Unfortunately, Texinfo doesn't have a general-purpose multi-col format, so
@c the multi-col format is faked within @example sections.
@c 
@c Again unfortunately, the natural size that fits on a page, for these tables,
@c is different depending on whether or not smallbook is turned on.
@c This matters, because of order: text flow switches columns at each page
@c break.
@c 
@c The format faked in this source works reasonably well for smallbook,
@c not well for the default large-page format.  This manual expects that if you
@c turn on @smallbook, you will also uncomment the "@set SMALL" to enable the
@c tables in question.  You can turn on one without the other at your
@c discretion, of course. 
@ifinfo
@set SMALL
@c the insn tables look just as silly in info files regardless of smallbook,
@c might as well show 'em anyways.
@end ifinfo

@ifinfo
@format
START-INFO-DIR-ENTRY
* As: (as).                     The GNU assembler.
* Gas: (as).                    The GNU assembler.
END-INFO-DIR-ENTRY
@end format
@end ifinfo

@finalout
@syncodeindex ky cp

@ifinfo
This file documents the GNU Assembler "@value{AS}".

@c man begin COPYRIGHT
Copyright (C) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts.  A copy of the license is included in the
section entitled ``GNU Free Documentation License''.

@c man end

@ignore
Permission is granted to process this file through Tex and print the
results, provided the printed document carries copying permission
notice identical to this one except for the removal of this paragraph
(this paragraph not being relevant to the printed manual).

@end ignore
@end ifinfo

@titlepage
@title Using @value{AS}
@subtitle The @sc{gnu} Assembler
@ifclear GENERIC
@subtitle for the @value{TARGET} family
@end ifclear
@sp 1
@subtitle Version @value{VERSION}
@sp 1
@sp 13
The Free Software Foundation Inc.  thanks The Nice Computer
Company of Australia for loaning Dean Elsner to write the
first (Vax) version of @command{as} for Project @sc{gnu}.
The proprietors, management and staff of TNCCA thank FSF for
distracting the boss while they got some work
done.
@sp 3
@author Dean Elsner, Jay Fenlason & friends
@page
@tex
{\parskip=0pt
\hfill {\it Using {\tt @value{AS}}}\par
\hfill Edited by Cygnus Support\par
}
%"boxit" macro for figures:
%Modified from Knuth's ``boxit'' macro from TeXbook (answer to exercise 21.3)
\gdef\boxit#1#2{\vbox{\hrule\hbox{\vrule\kern3pt
     \vbox{\parindent=0pt\parskip=0pt\hsize=#1\kern3pt\strut\hfil
#2\hfil\strut\kern3pt}\kern3pt\vrule}\hrule}}%box with visible outline
\gdef\ibox#1#2{\hbox to #1{#2\hfil}\kern8pt}% invisible box
@end tex

@vskip 0pt plus 1filll
Copyright @copyright{} 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002 Free Software Foundation, Inc.

      Permission is granted to copy, distribute and/or modify this document
      under the terms of the GNU Free Documentation License, Version 1.1
      or any later version published by the Free Software Foundation;
      with no Invariant Sections, with no Front-Cover Texts, and with no
      Back-Cover Texts.  A copy of the license is included in the
      section entitled ``GNU Free Documentation License''.

@end titlepage

@ifnottex
@node Top
@top Using @value{AS}

This file is a user guide to the @sc{gnu} assembler @command{@value{AS}} version
@value{VERSION}.
@ifclear GENERIC
This version of the file describes @command{@value{AS}} configured to generate
code for @value{TARGET} architectures.
@end ifclear

This document is distributed under the terms of the GNU Free
Documentation License.  A copy of the license is included in the
section entitled ``GNU Free Documentation License''.

@menu
* Overview::                    Overview
* Invoking::                    Command-Line Options
* Syntax::                      Syntax
* Sections::                    Sections and Relocation
* Symbols::                     Symbols
* Expressions::                 Expressions
* Pseudo Ops::                  Assembler Directives
* Machine Dependencies::        Machine Dependent Features
* Reporting Bugs::              Reporting Bugs
* Acknowledgements::            Who Did What
* GNU Free Documentation License::  GNU Free Documentation License
* Index::                       Index
@end menu
@end ifnottex

@node Overview
@chapter Overview
@iftex
This manual is a user guide to the @sc{gnu} assembler @command{@value{AS}}.
@ifclear GENERIC
This version of the manual describes @command{@value{AS}} configured to generate
code for @value{TARGET} architectures.
@end ifclear
@end iftex

@cindex invocation summary
@cindex option summary
@cindex summary of options
Here is a brief summary of how to invoke @command{@value{AS}}.  For details,
@pxref{Invoking,,Command-Line Options}.

@c man title AS the portable GNU assembler.

@ignore
@c man begin SEEALSO
gcc(1), ld(1), and the Info entries for @file{binutils} and @file{ld}.
@c man end
@end ignore

@c We don't use deffn and friends for the following because they seem
@c to be limited to one line for the header.
@smallexample
@c man begin SYNOPSIS
@value{AS} [@b{-a}[@b{cdhlns}][=@var{file}]] [@b{-D}] [@b{--defsym} @var{sym}=@var{val}]
 [@b{-f}] [@b{--gstabs}] [@b{--gstabs+}] [@b{--gdwarf2}] [@b{--help}]
 [@b{-I} @var{dir}] [@b{-J}] [@b{-K}] [@b{-L}]
 [@b{--listing-lhs-width}=@var{NUM}] [@b{--listing-lhs-width2}=@var{NUM}]
 [@b{--listing-rhs-width}=@var{NUM}] [@b{--listing-cont-lines}=@var{NUM}]
 [@b{--keep-locals}] [@b{-o} @var{objfile}] [@b{-R}] [@b{--statistics}] [@b{-v}]
 [@b{-version}] [@b{--version}] [@b{-W}] [@b{--warn}] [@b{--fatal-warnings}] 
 [@b{-w}] [@b{-x}] [@b{-Z}] [@b{--target-help}] [@var{target-options}] 
 [@b{--}|@var{files} @dots{}]
@c
@c Target dependent options are listed below.  Keep the list sorted.
@c Add an empty line for separation. 
@ifset A29K
@c am29k has no machine-dependent assembler options
@end ifset
@ifset ALPHA

@emph{Target Alpha options:}
   [@b{-m@var{cpu}}]
   [@b{-mdebug} | @b{-no-mdebug}]
   [@b{-relax}] [@b{-g}] [@b{-G@var{size}}]
   [@b{-F}] [@b{-32addr}]
@end ifset
@ifset ARC

@emph{Target ARC options:}
   [@b{-marc[5|6|7|8]}]
   [@b{-EB}|@b{-EL}]
@end ifset
@ifset ARM

@emph{Target ARM options:}
@c Don't document the deprecated options
   [@b{-mcpu}=@var{processor}[+@var{extension}@dots{}]]
   [@b{-march}=@var{architecture}[+@var{extension}@dots{}]]
   [@b{-mfpu}=@var{floating-point-format}]
   [@b{-mfloat-abi}=@var{abi}]
   [@b{-mthumb}]
   [@b{-EB}|@b{-EL}]
   [@b{-mapcs-32}|@b{-mapcs-26}|@b{-mapcs-float}|
    @b{-mapcs-reentrant}]
   [@b{-mthumb-interwork}] [@b{-moabi}] [@b{-k}]
@end ifset
@ifset CRIS

@emph{Target CRIS options:}
   [@b{--underscore} | @b{--no-underscore}]
   [@b{--pic}] [@b{-N}]
   [@b{--emulation=criself} | @b{--emulation=crisaout}]
@c Deprecated -- deliberately not documented.
@c [@b{-h}] [@b{-H}]
@end ifset
@ifset D10V

@emph{Target D10V options:}
   [@b{-O}]
@end ifset
@ifset D30V

@emph{Target D30V options:}
   [@b{-O}|@b{-n}|@b{-N}]
@end ifset
@ifset H8
@c Renesas family chips have no machine-dependent assembler options
@end ifset
@ifset HPPA
@c HPPA has no machine-dependent assembler options (yet).
@end ifset
@ifset I80386

@emph{Target i386 options:}
   [@b{--32}|@b{--64}] [@b{-n}]
@end ifset
@ifset I960

@emph{Target i960 options:}
@c see md_parse_option in tc-i960.c
   [@b{-ACA}|@b{-ACA_A}|@b{-ACB}|@b{-ACC}|@b{-AKA}|@b{-AKB}|
    @b{-AKC}|@b{-AMC}]
   [@b{-b}] [@b{-no-relax}]
@end ifset
@ifset IA64

@emph{Target IA-64 options:}
   [@b{-mconstant-gp}|@b{-mauto-pic}]
   [@b{-milp32}|@b{-milp64}|@b{-mlp64}|@b{-mp64}]
   [@b{-mle}|@b{mbe}]
   [@b{-x}|@b{-xexplicit}] [@b{-xauto}] [@b{-xdebug}]
@end ifset
@ifset IP2K

@emph{Target IP2K options:}
   [@b{-mip2022}|@b{-mip2022ext}]
@end ifset
@ifset M32R

@emph{Target M32R options:}
   [@b{--m32rx}|@b{--[no-]warn-explicit-parallel-conflicts}|
   @b{--W[n]p}]
@end ifset
@ifset M680X0

@emph{Target M680X0 options:}
   [@b{-l}] [@b{-m68000}|@b{-m68010}|@b{-m68020}|@dots{}]
@end ifset
@ifset M68HC11

@emph{Target M68HC11 options:}
   [@b{-m68hc11}|@b{-m68hc12}|@b{-m68hcs12}]
   [@b{-mshort}|@b{-mlong}]
   [@b{-mshort-double}|@b{-mlong-double}]
   [@b{--force-long-branchs}] [@b{--short-branchs}]
   [@b{--strict-direct-mode}] [@b{--print-insn-syntax}]
   [@b{--print-opcodes}] [@b{--generate-example}]
@end ifset
@ifset MCORE

@emph{Target MCORE options:}
   [@b{-jsri2bsr}] [@b{-sifilter}] [@b{-relax}]
   [@b{-mcpu=[210|340]}]
@end ifset
@ifset MIPS

@emph{Target MIPS options:}
   [@b{-nocpp}] [@b{-EL}] [@b{-EB}] [@b{-O}[@var{optimization level}]]
   [@b{-g}[@var{debug level}]] [@b{-G} @var{num}] [@b{-KPIC}] [@b{-call_shared}]
   [@b{-non_shared}] [@b{-xgot}] [@b{--membedded-pic}]
   [@b{-mabi}=@var{ABI}] [@b{-32}] [@b{-n32}] [@b{-64}] [@b{-mfp32}] [@b{-mgp32}]
   [@b{-march}=@var{CPU}] [@b{-mtune}=@var{CPU}] [@b{-mips1}] [@b{-mips2}]
   [@b{-mips3}] [@b{-mips4}] [@b{-mips5}] [@b{-mips32}] [@b{-mips32r2}]
   [@b{-mips64}] [@b{-mips64r2}]
   [@b{-construct-floats}] [@b{-no-construct-floats}]
   [@b{-trap}] [@b{-no-break}] [@b{-break}] [@b{-no-trap}]
   [@b{-mfix7000}] [@b{-mno-fix7000}]
   [@b{-mips16}] [@b{-no-mips16}]
   [@b{-mips3d}] [@b{-no-mips3d}]
   [@b{-mdmx}] [@b{-no-mdmx}]
   [@b{-mdebug}] [@b{-no-mdebug}]
   [@b{-mpdr}] [@b{-mno-pdr}]
@end ifset
@ifset MMIX

@emph{Target MMIX options:}
   [@b{--fixed-special-register-names}] [@b{--globalize-symbols}]
   [@b{--gnu-syntax}] [@b{--relax}] [@b{--no-predefined-symbols}]
   [@b{--no-expand}] [@b{--no-merge-gregs}] [@b{-x}]
   [@b{--linker-allocated-gregs}]
@end ifset
@ifset PDP11

@emph{Target PDP11 options:}
   [@b{-mpic}|@b{-mno-pic}] [@b{-mall}] [@b{-mno-extensions}]
   [@b{-m}@var{extension}|@b{-mno-}@var{extension}]
   [@b{-m}@var{cpu}] [@b{-m}@var{machine}]  
@end ifset
@ifset PJ

@emph{Target picoJava options:}
   [@b{-mb}|@b{-me}]
@end ifset
@ifset PPC

@emph{Target PowerPC options:}
   [@b{-mpwrx}|@b{-mpwr2}|@b{-mpwr}|@b{-m601}|@b{-mppc}|@b{-mppc32}|@b{-m603}|@b{-m604}|
    @b{-m403}|@b{-m405}|@b{-mppc64}|@b{-m620}|@b{-mppc64bridge}|@b{-mbooke}|
    @b{-mbooke32}|@b{-mbooke64}]
   [@b{-mcom}|@b{-many}|@b{-maltivec}] [@b{-memb}]
   [@b{-mregnames}|@b{-mno-regnames}]
   [@b{-mrelocatable}|@b{-mrelocatable-lib}]
   [@b{-mlittle}|@b{-mlittle-endian}|@b{-mbig}|@b{-mbig-endian}]
   [@b{-msolaris}|@b{-mno-solaris}]
@end ifset
@ifset SPARC

@emph{Target SPARC options:}
@c The order here is important.  See c-sparc.texi.
   [@b{-Av6}|@b{-Av7}|@b{-Av8}|@b{-Asparclet}|@b{-Asparclite}
    @b{-Av8plus}|@b{-Av8plusa}|@b{-Av9}|@b{-Av9a}]
   [@b{-xarch=v8plus}|@b{-xarch=v8plusa}] [@b{-bump}]
   [@b{-32}|@b{-64}]
@end ifset
@ifset TIC54X

@emph{Target TIC54X options:}
 [@b{-mcpu=54[123589]}|@b{-mcpu=54[56]lp}] [@b{-mfar-mode}|@b{-mf}] 
 [@b{-merrors-to-file} @var{<filename>}|@b{-me} @var{<filename>}]
@end ifset
@ifset Z8000
@c Z8000 has no machine-dependent assembler options
@end ifset
@ifset XTENSA

@emph{Target Xtensa options:}
 [@b{--[no-]density}] [@b{--[no-]relax}] [@b{--[no-]generics}]
 [@b{--[no-]text-section-literals}]
 [@b{--[no-]target-align}] [@b{--[no-]longcalls}]
@end ifset
@c man end
@end smallexample

@c man begin OPTIONS

@table @gcctabopt
@item -a[cdhlmns]
Turn on listings, in any of a variety of ways:

@table @gcctabopt
@item -ac
omit false conditionals

@item -ad
omit debugging directives

@item -ah
include high-level source

@item -al
include assembly

@item -am
include macro expansions

@item -an
omit forms processing

@item -as
include symbols

@item =file
set the name of the listing file
@end table

You may combine these options; for example, use @samp{-aln} for assembly
listing without forms processing.  The @samp{=file} option, if used, must be
the last one.  By itself, @samp{-a} defaults to @samp{-ahls}.

@item -D
Ignored.  This option is accepted for script compatibility with calls to
other assemblers.

@item --defsym @var{sym}=@var{value}
Define the symbol @var{sym} to be @var{value} before assembling the input file.
@var{value} must be an integer constant.  As in C, a leading @samp{0x}
indicates a hexadecimal value, and a leading @samp{0} indicates an octal value.

@item -f
``fast''---skip whitespace and comment preprocessing (assume source is
compiler output).

@item --gstabs
Generate stabs debugging information for each assembler line.  This
may help debugging assembler code, if the debugger can handle it.

@item --gstabs+
Generate stabs debugging information for each assembler line, with GNU
extensions that probably only gdb can handle, and that could make other
debuggers crash or refuse to read your program.  This
may help debugging assembler code.  Currently the only GNU extension is
the location of the current working directory at assembling time.

@item --gdwarf2
Generate DWARF2 debugging information for each assembler line.  This
may help debugging assembler code, if the debugger can handle it.  Note---this
option is only supported by some targets, not all of them.

@item --help
Print a summary of the command line options and exit.

@item --target-help
Print a summary of all target specific options and exit.

@item -I @var{dir}
Add directory @var{dir} to the search list for @code{.include} directives.

@item -J
Don't warn about signed overflow.

@item -K
@ifclear DIFF-TBL-KLUGE
This option is accepted but has no effect on the @value{TARGET} family.
@end ifclear
@ifset DIFF-TBL-KLUGE
Issue warnings when difference tables altered for long displacements.
@end ifset

@item -L
@itemx --keep-locals
Keep (in the symbol table) local symbols.  On traditional a.out systems
these start with @samp{L}, but different systems have different local
label prefixes.

@item --listing-lhs-width=@var{number}
Set the maximum width, in words, of the output data column for an assembler
listing to @var{number}.

@item --listing-lhs-width2=@var{number}
Set the maximum width, in words, of the output data column for continuation
lines in an assembler listing to @var{number}.

@item --listing-rhs-width=@var{number}
Set the maximum width of an input source line, as displayed in a listing, to
@var{number} bytes.

@item --listing-cont-lines=@var{number}
Set the maximum number of lines printed in a listing for a single line of input
to @var{number} + 1.

@item -o @var{objfile}
Name the object-file output from @command{@value{AS}} @var{objfile}.

@item -R
Fold the data section into the text section.

@item --statistics
Print the maximum space (in bytes) and total time (in seconds) used by
assembly.

@item --strip-local-absolute
Remove local absolute symbols from the outgoing symbol table.

@item -v
@itemx -version
Print the @command{as} version.

@item --version
Print the @command{as} version and exit.

@item -W
@itemx --no-warn
Suppress warning messages.

@item --fatal-warnings
Treat warnings as errors.

@item --warn
Don't suppress warning messages or treat them as errors.

@item -w
Ignored.

@item -x
Ignored.

@item -Z
Generate an object file even after errors.

@item -- | @var{files} @dots{}
Standard input, or source files to assemble.

@end table

@ifset ARC
The following options are available when @value{AS} is configured for
an ARC processor.

@table @gcctabopt
@item -marc[5|6|7|8]
This option selects the core processor variant.
@item -EB | -EL
Select either big-endian (-EB) or little-endian (-EL) output.
@end table
@end ifset

@ifset ARM
The following options are available when @value{AS} is configured for the ARM
processor family.

@table @gcctabopt
@item -mcpu=@var{processor}[+@var{extension}@dots{}]
Specify which ARM processor variant is the target.
@item -march=@var{architecture}[+@var{extension}@dots{}]
Specify which ARM architecture variant is used by the target.
@item -mfpu=@var{floating-point-format}
Select which Floating Point architecture is the target.
@item -mfloat-abi=@var{abi}
Select which floating point ABI is in use.
@item -mthumb
Enable Thumb only instruction decoding.
@item -mapcs-32 | -mapcs-26 | -mapcs-float | -mapcs-reentrant | -moabi
Select which procedure calling convention is in use.
@item -EB | -EL
Select either big-endian (-EB) or little-endian (-EL) output.
@item -mthumb-interwork
Specify that the code has been generated with interworking between Thumb and
ARM code in mind.
@item -k
Specify that PIC code has been generated.
@end table
@end ifset

@ifset CRIS
See the info pages for documentation of the CRIS-specific options.
@end ifset

@ifset D10V
The following options are available when @value{AS} is configured for
a D10V processor.
@table @gcctabopt
@cindex D10V optimization
@cindex optimization, D10V
@item -O
Optimize output by parallelizing instructions.
@end table
@end ifset

@ifset D30V
The following options are available when @value{AS} is configured for a D30V
processor.
@table @gcctabopt
@cindex D30V optimization
@cindex optimization, D30V
@item -O
Optimize output by parallelizing instructions.

@cindex D30V nops
@item -n
Warn when nops are generated.

@cindex D30V nops after 32-bit multiply
@item -N
Warn when a nop after a 32-bit multiply instruction is generated.
@end table
@end ifset

@ifset I960
The following options are available when @value{AS} is configured for the
Intel 80960 processor.

@table @gcctabopt
@item -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC
Specify which variant of the 960 architecture is the target.

@item -b
Add code to collect statistics about branches taken.

@item -no-relax
Do not alter compare-and-branch instructions for long displacements;
error if necessary.

@end table
@end ifset

@ifset IP2K
The following options are available when @value{AS} is configured for the
Ubicom IP2K series.

@table @gcctabopt

@item -mip2022ext
Specifies that the extended IP2022 instructions are allowed.

@item -mip2022
Restores the default behaviour, which restricts the permitted instructions to
just the basic IP2022 ones.

@end table
@end ifset

@ifset M32R
The following options are available when @value{AS} is configured for the
Renesas M32R (formerly Mitsubishi M32R) series.

@table @gcctabopt

@item --m32rx
Specify which processor in the M32R family is the target.  The default
is normally the M32R, but this option changes it to the M32RX.

@item --warn-explicit-parallel-conflicts or --Wp
Produce warning messages when questionable parallel constructs are
encountered. 

@item --no-warn-explicit-parallel-conflicts or --Wnp
Do not produce warning messages when questionable parallel constructs are 
encountered. 

@end table
@end ifset

@ifset M680X0
The following options are available when @value{AS} is configured for the
Motorola 68000 series.

@table @gcctabopt

@item -l
Shorten references to undefined symbols, to one word instead of two.

@item -m68000 | -m68008 | -m68010 | -m68020 | -m68030
@itemx | -m68040 | -m68060 | -m68302 | -m68331 | -m68332
@itemx | -m68333 | -m68340 | -mcpu32 | -m5200
Specify what processor in the 68000 family is the target.  The default
is normally the 68020, but this can be changed at configuration time.

@item -m68881 | -m68882 | -mno-68881 | -mno-68882
The target machine does (or does not) have a floating-point coprocessor.
The default is to assume a coprocessor for 68020, 68030, and cpu32.  Although
the basic 68000 is not compatible with the 68881, a combination of the
two can be specified, since it's possible to do emulation of the
coprocessor instructions with the main processor.

@item -m68851 | -mno-68851
The target machine does (or does not) have a memory-management
unit coprocessor.  The default is to assume an MMU for 68020 and up.

@end table
@end ifset

@ifset PDP11

For details about the PDP-11 machine dependent features options,
see @ref{PDP-11-Options}.

@table @gcctabopt
@item -mpic | -mno-pic
Generate position-independent (or position-dependent) code.  The
default is @option{-mpic}.

@item -mall
@itemx -mall-extensions
Enable all instruction set extensions.  This is the default.

@item -mno-extensions
Disable all instruction set extensions.

@item -m@var{extension} | -mno-@var{extension}
Enable (or disable) a particular instruction set extension.

@item -m@var{cpu}
Enable the instruction set extensions supported by a particular CPU, and
disable all other extensions.

@item -m@var{machine}
Enable the instruction set extensions supported by a particular machine
model, and disable all other extensions.
@end table

@end ifset

@ifset PJ
The following options are available when @value{AS} is configured for
a picoJava processor.

@table @gcctabopt

@cindex PJ endianness
@cindex endianness, PJ
@cindex big endian output, PJ
@item -mb
Generate ``big endian'' format output.

@cindex little endian output, PJ
@item -ml
Generate ``little endian'' format output.

@end table
@end ifset

@ifset M68HC11
The following options are available when @value{AS} is configured for the
Motorola 68HC11 or 68HC12 series.

@table @gcctabopt

@item -m68hc11 | -m68hc12 | -m68hcs12
Specify what processor is the target.  The default is
defined by the configuration option when building the assembler.

@item -mshort
Specify to use the 16-bit integer ABI.

@item -mlong
Specify to use the 32-bit integer ABI.  

@item -mshort-double
Specify to use the 32-bit double ABI.  

@item -mlong-double
Specify to use the 64-bit double ABI.  

@item --force-long-branchs
Relative branches are turned into absolute ones. This concerns
conditional branches, unconditional branches and branches to a
sub routine.

@item -S | --short-branchs
Do not turn relative branchs into absolute ones
when the offset is out of range.

@item --strict-direct-mode
Do not turn the direct addressing mode into extended addressing mode
when the instruction does not support direct addressing mode.

@item --print-insn-syntax
Print the syntax of instruction in case of error.

@item --print-opcodes
print the list of instructions with syntax and then exit.

@item --generate-example
print an example of instruction for each possible instruction and then exit.
This option is only useful for testing @command{@value{AS}}.

@end table
@end ifset

@ifset SPARC
The following options are available when @command{@value{AS}} is configured
for the SPARC architecture:

@table @gcctabopt
@item -Av6 | -Av7 | -Av8 | -Asparclet | -Asparclite
@itemx -Av8plus | -Av8plusa | -Av9 | -Av9a
Explicitly select a variant of the SPARC architecture.

@samp{-Av8plus} and @samp{-Av8plusa} select a 32 bit environment.
@samp{-Av9} and @samp{-Av9a} select a 64 bit environment.

@samp{-Av8plusa} and @samp{-Av9a} enable the SPARC V9 instruction set with
UltraSPARC extensions.

@item -xarch=v8plus | -xarch=v8plusa
For compatibility with the Solaris v9 assembler.  These options are
equivalent to -Av8plus and -Av8plusa, respectively.

@item -bump
Warn when the assembler switches to another architecture.
@end table
@end ifset

@ifset TIC54X
The following options are available when @value{AS} is configured for the 'c54x
architecture. 

@table @gcctabopt
@item -mfar-mode
Enable extended addressing mode.  All addresses and relocations will assume
extended addressing (usually 23 bits).
@item -mcpu=@var{CPU_VERSION}
Sets the CPU version being compiled for.
@item -merrors-to-file @var{FILENAME}
Redirect error output to a file, for broken systems which don't support such
behaviour in the shell.
@end table
@end ifset

@ifset MIPS
The following options are available when @value{AS} is configured for
a @sc{mips} processor.

@table @gcctabopt
@item -G @var{num}
This option sets the largest size of an object that can be referenced
implicitly with the @code{gp} register.  It is only accepted for targets that
use ECOFF format, such as a DECstation running Ultrix.  The default value is 8.

@cindex MIPS endianness
@cindex endianness, MIPS
@cindex big endian output, MIPS
@item -EB
Generate ``big endian'' format output.

@cindex little endian output, MIPS
@item -EL
Generate ``little endian'' format output.

@cindex MIPS ISA
@item -mips1
@itemx -mips2
@itemx -mips3
@itemx -mips4
@itemx -mips5
@itemx -mips32
@itemx -mips32r2
@itemx -mips64
@itemx -mips64r2
Generate code for a particular @sc{mips} Instruction Set Architecture level.
@samp{-mips1} is an alias for @samp{-march=r3000}, @samp{-mips2} is an
alias for @samp{-march=r6000}, @samp{-mips3} is an alias for
@samp{-march=r4000} and @samp{-mips4} is an alias for @samp{-march=r8000}.
@samp{-mips5}, @samp{-mips32}, @samp{-mips32r2}, @samp{-mips64}, and
@samp{-mips64r2}
correspond to generic
@samp{MIPS V}, @samp{MIPS32}, @samp{MIPS32 Release 2}, @samp{MIPS64},
and @samp{MIPS64 Release 2}
ISA processors, respectively.

@item -march=@var{CPU}
Generate code for a particular @sc{mips} cpu.

@item -mtune=@var{cpu}
Schedule and tune for a particular @sc{mips} cpu.

@item -mfix7000
@itemx -mno-fix7000
Cause nops to be inserted if the read of the destination register
of an mfhi or mflo instruction occurs in the following two instructions.

@item -mdebug
@itemx -no-mdebug
Cause stabs-style debugging output to go into an ECOFF-style .mdebug
section instead of the standard ELF .stabs sections.

@item -mpdr
@itemx -mno-pdr
Control generation of @code{.pdr} sections.

@item -mgp32
@itemx -mfp32
The register sizes are normally inferred from the ISA and ABI, but these
flags force a certain group of registers to be treated as 32 bits wide at
all times.  @samp{-mgp32} controls the size of general-purpose registers
and @samp{-mfp32} controls the size of floating-point registers.

@item -mips16
@itemx -no-mips16
Generate code for the MIPS 16 processor.  This is equivalent to putting
@code{.set mips16} at the start of the assembly file.  @samp{-no-mips16}
turns off this option.

@item -mips3d
@itemx -no-mips3d
Generate code for the MIPS-3D Application Specific Extension.
This tells the assembler to accept MIPS-3D instructions.
@samp{-no-mips3d} turns off this option.

@item -mdmx
@itemx -no-mdmx
Generate code for the MDMX Application Specific Extension.
This tells the assembler to accept MDMX instructions.
@samp{-no-mdmx} turns off this option.

@item --construct-floats
@itemx --no-construct-floats
The @samp{--no-construct-floats} option disables the construction of
double width floating point constants by loading the two halves of the
value into the two single width floating point registers that make up
the double width register.  By default @samp{--construct-floats} is
selected, allowing construction of these floating point constants.

@cindex emulation
@item --emulation=@var{name}
This option causes @command{@value{AS}} to emulate @command{@value{AS}} configured
for some other target, in all respects, including output format (choosing
between ELF and ECOFF only), handling of pseudo-opcodes which may generate
debugging information or store symbol table information, and default
endianness.  The available configuration names are: @samp{mipsecoff},
@samp{mipself}, @samp{mipslecoff}, @samp{mipsbecoff}, @samp{mipslelf},
@samp{mipsbelf}.  The first two do not alter the default endianness from that
of the primary target for which the assembler was configured; the others change
the default to little- or big-endian as indicated by the @samp{b} or @samp{l}
in the name.  Using @samp{-EB} or @samp{-EL} will override the endianness
selection in any case.

This option is currently supported only when the primary target
@command{@value{AS}} is configured for is a @sc{mips} ELF or ECOFF target.
Furthermore, the primary target or others specified with
@samp{--enable-targets=@dots{}} at configuration time must include support for
the other format, if both are to be available.  For example, the Irix 5
configuration includes support for both.

Eventually, this option will support more configurations, with more
fine-grained control over the assembler's behavior, and will be supported for
more processors.

@item -nocpp
@command{@value{AS}} ignores this option.  It is accepted for compatibility with
the native tools.

@item --trap
@itemx --no-trap
@itemx --break
@itemx --no-break
Control how to deal with multiplication overflow and division by zero.
@samp{--trap} or @samp{--no-break} (which are synonyms) take a trap exception
(and only work for Instruction Set Architecture level 2 and higher);
@samp{--break} or @samp{--no-trap} (also synonyms, and the default) take a
break exception.

@item -n
When this option is used, @command{@value{AS}} will issue a warning every
time it generates a nop instruction from a macro.
@end table
@end ifset

@ifset MCORE
The following options are available when @value{AS} is configured for
an MCore processor.

@table @gcctabopt
@item -jsri2bsr
@itemx -nojsri2bsr
Enable or disable the JSRI to BSR transformation.  By default this is enabled.
The command line option @samp{-nojsri2bsr} can be used to disable it.

@item -sifilter
@itemx -nosifilter
Enable or disable the silicon filter behaviour.  By default this is disabled.
The default can be overridden by the @samp{-sifilter} command line option.

@item -relax
Alter jump instructions for long displacements.

@item -mcpu=[210|340]
Select the cpu type on the target hardware.  This controls which instructions
can be assembled.

@item -EB
Assemble for a big endian target.

@item -EL
Assemble for a little endian target.

@end table
@end ifset

@ifset MMIX
See the info pages for documentation of the MMIX-specific options.
@end ifset

@ifset XTENSA
The following options are available when @value{AS} is configured for
an Xtensa processor.

@table @gcctabopt
@item --density | --no-density
Enable or disable use of instructions from the Xtensa code density
option.  This is enabled by default when the Xtensa processor supports
the code density option.

@item --relax | --no-relax
Enable or disable instruction relaxation.  This is enabled by default.
Note: In the current implementation, these options also control whether
assembler optimizations are performed, making these options equivalent
to @option{--generics} and @option{--no-generics}.

@item --generics | --no-generics
Enable or disable all assembler transformations of Xtensa instructions.
The default is @option{--generics};
@option{--no-generics} should be used only in the rare cases when the
instructions must be exactly as specified in the assembly source.

@item --text-section-literals | --no-text-section-literals
With @option{--text-@-section-@-literals}, literal pools are interspersed
in the text section.  The default is
@option{--no-@-text-@-section-@-literals}, which places literals in a
separate section in the output file.

@item --target-align | --no-target-align
Enable or disable automatic alignment to reduce branch penalties at the
expense of some code density.  The default is @option{--target-@-align}.

@item --longcalls | --no-longcalls
Enable or disable transformation of call instructions to allow calls
across a greater range of addresses.  The default is
@option{--no-@-longcalls}.
@end table
@end ifset

@c man end

@menu
* Manual::                      Structure of this Manual
* GNU Assembler::               The GNU Assembler
* Object Formats::              Object File Formats
* Command Line::                Command Line
* Input Files::                 Input Files
* Object::                      Output (Object) File
* Errors::                      Error and Warning Messages
@end menu

@node Manual
@section Structure of this Manual

@cindex manual, structure and purpose
This manual is intended to describe what you need to know to use
@sc{gnu} @command{@value{AS}}.  We cover the syntax expected in source files, including
notation for symbols, constants, and expressions; the directives that
@command{@value{AS}} understands; and of course how to invoke @command{@value{AS}}.

@ifclear GENERIC
We also cover special features in the @value{TARGET}
configuration of @command{@value{AS}}, including assembler directives.
@end ifclear
@ifset GENERIC
This manual also describes some of the machine-dependent features of
various flavors of the assembler.
@end ifset

@cindex machine instructions (not covered)
On the other hand, this manual is @emph{not} intended as an introduction
to programming in assembly language---let alone programming in general!
In a similar vein, we make no attempt to introduce the machine
architecture; we do @emph{not} describe the instruction set, standard
mnemonics, registers or addressing modes that are standard to a
particular architecture.
@ifset GENERIC
You may want to consult the manufacturer's
machine architecture manual for this information.
@end ifset
@ifclear GENERIC
@ifset H8/300
For information on the H8/300 machine instruction set, see @cite{H8/300
Series Programming Manual}.  For the H8/300H, see @cite{H8/300H Series
Programming Manual} (Renesas).
@end ifset
@ifset H8/500
For information on the H8/500 machine instruction set, see @cite{H8/500
Series Programming Manual} (Renesas M21T001).
@end ifset
@ifset SH
For information on the Renesas (formerly Hitachi) / SuperH SH machine instruction set,
see @cite{SH-Microcomputer User's Manual} (Renesas) or
@cite{SH-4 32-bit CPU Core Architecture} (SuperH) and
@cite{SuperH (SH) 64-Bit RISC Series} (SuperH).
@end ifset
@ifset Z8000
For information on the Z8000 machine instruction set, see @cite{Z8000 CPU Technical Manual}
@end ifset
@end ifclear

@c I think this is premature---doc@cygnus.com, 17jan1991
@ignore
Throughout this manual, we assume that you are running @dfn{GNU},
the portable operating system from the @dfn{Free Software
Foundation, Inc.}.  This restricts our attention to certain kinds of
computer (in particular, the kinds of computers that @sc{gnu} can run on);
once this assumption is granted examples and definitions need less
qualification.

@command{@value{AS}} is part of a team of programs that turn a high-level
human-readable series of instructions into a low-level
computer-readable series of instructions.  Different versions of
@command{@value{AS}} are used for different kinds of computer.
@end ignore

@c There used to be a section "Terminology" here, which defined
@c "contents", "byte", "word", and "long".  Defining "word" to any
@c particular size is confusing when the .word directive may generate 16
@c bits on one machine and 32 bits on another; in general, for the user
@c version of this manual, none of these terms seem essential to define.
@c They were used very little even in the former draft of the manual;
@c this draft makes an effort to avoid them (except in names of
@c directives).

@node GNU Assembler
@section The GNU Assembler

@c man begin DESCRIPTION

@sc{gnu} @command{as} is really a family of assemblers.
@ifclear GENERIC
This manual describes @command{@value{AS}}, a member of that family which is
configured for the @value{TARGET} architectures.
@end ifclear
If you use (or have used) the @sc{gnu} assembler on one architecture, you
should find a fairly similar environment when you use it on another
architecture.  Each version has much in common with the others,
including object file formats, most assembler directives (often called
@dfn{pseudo-ops}) and assembler syntax.@refill

@cindex purpose of @sc{gnu} assembler
@command{@value{AS}} is primarily intended to assemble the output of the
@sc{gnu} C compiler @code{@value{GCC}} for use by the linker
@code{@value{LD}}.  Nevertheless, we've tried to make @command{@value{AS}}
assemble correctly everything that other assemblers for the same
machine would assemble.
@ifset VAX
Any exceptions are documented explicitly (@pxref{Machine Dependencies}).
@end ifset
@ifset M680X0
@c This remark should appear in generic version of manual; assumption
@c here is that generic version sets M680x0.
This doesn't mean @command{@value{AS}} always uses the same syntax as another
assembler for the same architecture; for example, we know of several
incompatible versions of 680x0 assembly language syntax.
@end ifset

@c man end

Unlike older assemblers, @command{@value{AS}} is designed to assemble a source
program in one pass of the source file.  This has a subtle impact on the
@kbd{.org} directive (@pxref{Org,,@code{.org}}).

@node Object Formats
@section Object File Formats

@cindex object file format
The @sc{gnu} assembler can be configured to produce several alternative
object file formats.  For the most part, this does not affect how you
write assembly language programs; but directives for debugging symbols
are typically different in different file formats.  @xref{Symbol
Attributes,,Symbol Attributes}.
@ifclear GENERIC
@ifclear MULTI-OBJ
For the @value{TARGET} target, @command{@value{AS}} is configured to produce
@value{OBJ-NAME} format object files.
@end ifclear
@c The following should exhaust all configs that set MULTI-OBJ, ideally
@ifset A29K
On the @value{TARGET}, @command{@value{AS}} can be configured to produce either
@code{a.out} or COFF format object files.
@end ifset
@ifset I960
On the @value{TARGET}, @command{@value{AS}} can be configured to produce either
@code{b.out} or COFF format object files.
@end ifset
@ifset HPPA
On the @value{TARGET}, @command{@value{AS}} can be configured to produce either
SOM or ELF format object files.
@end ifset
@end ifclear

@node Command Line
@section Command Line

@cindex command line conventions

After the program name @command{@value{AS}}, the command line may contain
options and file names.  Options may appear in any order, and may be
before, after, or between file names.  The order of file names is
significant.

@cindex standard input, as input file
@kindex --
@file{--} (two hyphens) by itself names the standard input file
explicitly, as one of the files for @command{@value{AS}} to assemble.

@cindex options, command line
Except for @samp{--} any command line argument that begins with a
hyphen (@samp{-}) is an option.  Each option changes the behavior of
@command{@value{AS}}.  No option changes the way another option works.  An
option is a @samp{-} followed by one or more letters; the case of
the letter is important.   All options are optional.

Some options expect exactly one file name to follow them.  The file
name may either immediately follow the option's letter (compatible
with older assemblers) or it may be the next command argument (@sc{gnu}
standard).  These two command lines are equivalent:

@smallexample
@value{AS} -o my-object-file.o mumble.s
@value{AS} -omy-object-file.o mumble.s
@end smallexample

@node Input Files
@section Input Files

@cindex input
@cindex source program
@cindex files, input
We use the phrase @dfn{source program}, abbreviated @dfn{source}, to
describe the program input to one run of @command{@value{AS}}.  The program may
be in one or more files; how the source is partitioned into files
doesn't change the meaning of the source.

@c I added "con" prefix to "catenation" just to prove I can overcome my
@c APL training...   doc@cygnus.com
The source program is a concatenation of the text in all the files, in the
order specified.

@c man begin DESCRIPTION
Each time you run @command{@value{AS}} it assembles exactly one source
program.  The source program is made up of one or more files.
(The standard input is also a file.)

You give @command{@value{AS}} a command line that has zero or more input file
names.  The input files are read (from left file name to right).  A
command line argument (in any position) that has no special meaning
is taken to be an input file name.

If you give @command{@value{AS}} no file names it attempts to read one input file
from the @command{@value{AS}} standard input, which is normally your terminal.  You
may have to type @key{ctl-D} to tell @command{@value{AS}} there is no more program
to assemble.

Use @samp{--} if you need to explicitly name the standard input file
in your command line.

If the source is empty, @command{@value{AS}} produces a small, empty object
file.

@c man end

@subheading Filenames and Line-numbers

@cindex input file linenumbers
@cindex line numbers, in input files
There are two ways of locating a line in the input file (or files) and
either may be used in reporting error messages.  One way refers to a line
number in a physical file; the other refers to a line number in a
``logical'' file.  @xref{Errors, ,Error and Warning Messages}.

@dfn{Physical files} are those files named in the command line given
to @command{@value{AS}}.

@dfn{Logical files} are simply names declared explicitly by assembler
directives; they bear no relation to physical files.  Logical file names help
error messages reflect the original source file, when @command{@value{AS}} source
is itself synthesized from other files.  @command{@value{AS}} understands the
@samp{#} directives emitted by the @code{@value{GCC}} preprocessor.  See also
@ref{File,,@code{.file}}.

@node Object
@section Output (Object) File

@cindex object file
@cindex output file
@kindex a.out
@kindex .o
Every time you run @command{@value{AS}} it produces an output file, which is
your assembly language program translated into numbers.  This file
is the object file.  Its default name is
@ifclear BOUT
@code{a.out}.
@end ifclear
@ifset BOUT
@ifset GENERIC
@code{a.out}, or 
@end ifset
@code{b.out} when @command{@value{AS}} is configured for the Intel 80960.
@end ifset
You can give it another name by using the @option{-o} option.  Conventionally,
object file names end with @file{.o}.  The default name is used for historical
reasons: older assemblers were capable of assembling self-contained programs
directly into a runnable program.  (For some formats, this isn't currently
possible, but it can be done for the @code{a.out} format.)

@cindex linker
@kindex ld
The object file is meant for input to the linker @code{@value{LD}}.  It contains
assembled program code, information to help @code{@value{LD}} integrate
the assembled program into a runnable file, and (optionally) symbolic
information for the debugger.

@c link above to some info file(s) like the description of a.out.
@c don't forget to describe @sc{gnu} info as well as Unix lossage.

@node Errors
@section Error and Warning Messages

@c man begin DESCRIPTION

@cindex error messages
@cindex warning messages
@cindex messages from assembler
@command{@value{AS}} may write warnings and error messages to the standard error
file (usually your terminal).  This should not happen when  a compiler
runs @command{@value{AS}} automatically.  Warnings report an assumption made so
that @command{@value{AS}} could keep assembling a flawed program; errors report a
grave problem that stops the assembly.

@c man end

@cindex format of warning messages
Warning messages have the format

@smallexample
file_name:@b{NNN}:Warning Message Text
@end smallexample

@noindent
@cindex line numbers, in warnings/errors
(where @b{NNN} is a line number).  If a logical file name has been given
(@pxref{File,,@code{.file}}) it is used for the filename, otherwise the name of
the current input file is used.  If a logical line number was given
@ifset GENERIC
(@pxref{Line,,@code{.line}})
@end ifset
@ifclear GENERIC
@ifclear A29K
(@pxref{Line,,@code{.line}})
@end ifclear
@ifset A29K
(@pxref{Ln,,@code{.ln}})
@end ifset
@end ifclear
then it is used to calculate the number printed,
otherwise the actual line in the current source file is printed.  The
message text is intended to be self explanatory (in the grand Unix
tradition).

@cindex format of error messages
Error messages have the format
@smallexample
file_name:@b{NNN}:FATAL:Error Message Text
@end smallexample
The file name and line number are derived as for warning
messages.  The actual message text may be rather less explanatory
because many of them aren't supposed to happen.

@node Invoking
@chapter Command-Line Options

@cindex options, all versions of assembler
This chapter describes command-line options available in @emph{all}
versions of the @sc{gnu} assembler; @pxref{Machine Dependencies}, for options specific
@ifclear GENERIC
to the @value{TARGET} target.
@end ifclear
@ifset GENERIC
to particular machine architectures.
@end ifset

@c man begin DESCRIPTION

If you are invoking @command{@value{AS}} via the @sc{gnu} C compiler,
you can use the @samp{-Wa} option to pass arguments through to the assembler.
The assembler arguments must be separated from each other (and the @samp{-Wa})
by commas.  For example:

@smallexample
gcc -c -g -O -Wa,-alh,-L file.c
@end smallexample

@noindent
This passes two options to the assembler: @samp{-alh} (emit a listing to
standard output with high-level and assembly source) and @samp{-L} (retain
local symbols in the symbol table).

Usually you do not need to use this @samp{-Wa} mechanism, since many compiler
command-line options are automatically passed to the assembler by the compiler.
(You can call the @sc{gnu} compiler driver with the @samp{-v} option to see
precisely what options it passes to each compilation pass, including the
assembler.)

@c man end

@menu
* a::             -a[cdhlns] enable listings
* D::             -D for compatibility
* f::             -f to work faster
* I::             -I for .include search path
@ifclear DIFF-TBL-KLUGE
* K::             -K for compatibility
@end ifclear
@ifset DIFF-TBL-KLUGE
* K::             -K for difference tables
@end ifset

* L::             -L to retain local labels
* listing::       --listing-XXX to configure listing output
* M::		  -M or --mri to assemble in MRI compatibility mode
* MD::            --MD for dependency tracking
* o::             -o to name the object file
* R::             -R to join data and text sections
* statistics::    --statistics to see statistics about assembly
* traditional-format:: --traditional-format for compatible output
* v::             -v to announce version
* W::             -W, --no-warn, --warn, --fatal-warnings to control warnings
* Z::             -Z to make object file even after errors
@end menu

@node a
@section Enable Listings: @option{-a[cdhlns]}

@kindex -a
@kindex -ac
@kindex -ad
@kindex -ah
@kindex -al
@kindex -an
@kindex -as
@cindex listings, enabling
@cindex assembly listings, enabling

These options enable listing output from the assembler.  By itself,
@samp{-a} requests high-level, assembly, and symbols listing.
You can use other letters to select specific options for the list:
@samp{-ah} requests a high-level language listing,
@samp{-al} requests an output-program assembly listing, and
@samp{-as} requests a symbol table listing.
High-level listings require that a compiler debugging option like
@samp{-g} be used, and that assembly listings (@samp{-al}) be requested
also.

Use the @samp{-ac} option to omit false conditionals from a listing.  Any lines
which are not assembled because of a false @code{.if} (or @code{.ifdef}, or any
other conditional), or a true @code{.if} followed by an @code{.else}, will be
omitted from the listing.

Use the @samp{-ad} option to omit debugging directives from the
listing.

Once you have specified one of these options, you can further control
listing output and its appearance using the directives @code{.list},
@code{.nolist}, @code{.psize}, @code{.eject}, @code{.title}, and
@code{.sbttl}.
The @samp{-an} option turns off all forms processing.
If you do not request listing output with one of the @samp{-a} options, the
listing-control directives have no effect.

The letters after @samp{-a} may be combined into one option,
@emph{e.g.}, @samp{-aln}.

Note if the assembler source is coming from the standard input (eg because it
is being created by @code{@value{GCC}} and the @samp{-pipe} command line switch
is being used) then the listing will not contain any comments or preprocessor
directives.  This is because the listing code buffers input source lines from
stdin only after they have been preprocessed by the assembler.  This reduces
memory usage and makes the code more efficient.

@node D
@section @option{-D}

@kindex -D
This option has no effect whatsoever, but it is accepted to make it more
likely that scripts written for other assemblers also work with
@command{@value{AS}}.

@node f
@section Work Faster: @option{-f}

@kindex -f
@cindex trusted compiler
@cindex faster processing (@option{-f})
@samp{-f} should only be used when assembling programs written by a
(trusted) compiler.  @samp{-f} stops the assembler from doing whitespace
and comment preprocessing on
the input file(s) before assembling them.  @xref{Preprocessing,
,Preprocessing}.

@quotation
@emph{Warning:} if you use @samp{-f} when the files actually need to be
preprocessed (if they contain comments, for example), @command{@value{AS}} does
not work correctly.
@end quotation

@node I
@section @code{.include} Search Path: @option{-I} @var{path}

@kindex -I @var{path}
@cindex paths for @code{.include}
@cindex search path for @code{.include}
@cindex @code{include} directive search path
Use this option to add a @var{path} to the list of directories
@command{@value{AS}} searches for files specified in @code{.include}
directives (@pxref{Include,,@code{.include}}).  You may use @option{-I} as
many times as necessary to include a variety of paths.  The current
working directory is always searched first; after that, @command{@value{AS}}
searches any @samp{-I} directories in the same order as they were
specified (left to right) on the command line.

@node K
@section Difference Tables: @option{-K}

@kindex -K
@ifclear DIFF-TBL-KLUGE
On the @value{TARGET} family, this option is allowed, but has no effect.  It is
permitted for compatibility with the @sc{gnu} assembler on other platforms,
where it can be used to warn when the assembler alters the machine code
generated for @samp{.word} directives in difference tables.  The @value{TARGET}
family does not have the addressing limitations that sometimes lead to this
alteration on other platforms.
@end ifclear

@ifset DIFF-TBL-KLUGE
@cindex difference tables, warning
@cindex warning for altered difference tables
@command{@value{AS}} sometimes alters the code emitted for directives of the form
@samp{.word @var{sym1}-@var{sym2}}; @pxref{Word,,@code{.word}}.
You can use the @samp{-K} option if you want a warning issued when this
is done.
@end ifset

@node L
@section Include Local Labels: @option{-L}

@kindex -L
@cindex local labels, retaining in output
Labels beginning with @samp{L} (upper case only) are called @dfn{local
labels}. @xref{Symbol Names}.  Normally you do not see such labels when
debugging, because they are intended for the use of programs (like
compilers) that compose assembler programs, not for your notice.
Normally both @command{@value{AS}} and @code{@value{LD}} discard such labels, so you do not
normally debug with them.

This option tells @command{@value{AS}} to retain those @samp{L@dots{}} symbols
in the object file.  Usually if you do this you also tell the linker
@code{@value{LD}} to preserve symbols whose names begin with @samp{L}.

By default, a local label is any label beginning with @samp{L}, but each
target is allowed to redefine the local label prefix.
@ifset HPPA
On the HPPA local labels begin with @samp{L$}.
@end ifset

@node listing
@section Configuring listing output: @option{--listing}

The listing feature of the assembler can be enabled via the command line switch
@samp{-a} (@pxref{a}).  This feature combines the input source file(s) with a
hex dump of the corresponding locations in the output object file, and displays
them as a listing file.  The format of this listing can be controlled by pseudo
ops inside the assembler source (@pxref{List} @pxref{Title} @pxref{Sbttl}
@pxref{Psize} @pxref{Eject}) and also by the following switches:

@table @gcctabopt
@item --listing-lhs-width=@samp{number}
@kindex --listing-lhs-width
@cindex Width of first line disassembly output
Sets the maximum width, in words, of the first line of the hex byte dump.  This
dump appears on the left hand side of the listing output.

@item --listing-lhs-width2=@samp{number}
@kindex --listing-lhs-width2
@cindex Width of continuation lines of disassembly output
Sets the maximum width, in words, of any further lines of the hex byte dump for
a given input source line.  If this value is not specified, it defaults to being
the same as the value specified for @samp{--listing-lhs-width}.  If neither
switch is used the default is to one.

@item --listing-rhs-width=@samp{number}
@kindex --listing-rhs-width
@cindex Width of source line output
Sets the maximum width, in characters, of the source line that is displayed
alongside the hex dump.  The default value for this parameter is 100.  The
source line is displayed on the right hand side of the listing output.

@item --listing-cont-lines=@samp{number}
@kindex --listing-cont-lines
@cindex Maximum number of continuation lines
Sets the maximum number of continuation lines of hex dump that will be
displayed for a given single line of source input.  The default value is 4.
@end table

@node M
@section Assemble in MRI Compatibility Mode: @option{-M}

@kindex -M
@cindex MRI compatibility mode
The @option{-M} or @option{--mri} option selects MRI compatibility mode.  This
changes the syntax and pseudo-op handling of @command{@value{AS}} to make it
compatible with the @code{ASM68K} or the @code{ASM960} (depending upon the
configured target) assembler from Microtec Research.  The exact nature of the
MRI syntax will not be documented here; see the MRI manuals for more
information.  Note in particular that the handling of macros and macro
arguments is somewhat different.  The purpose of this option is to permit
assembling existing MRI assembler code using @command{@value{AS}}.

The MRI compatibility is not complete.  Certain operations of the MRI assembler
depend upon its object file format, and can not be supported using other object
file formats.  Supporting these would require enhancing each object file format
individually.  These are:

@itemize @bullet
@item global symbols in common section

The m68k MRI assembler supports common sections which are merged by the linker.
Other object file formats do not support this.  @command{@value{AS}} handles
common sections by treating them as a single common symbol.  It permits local
symbols to be defined within a common section, but it can not support global
symbols, since it has no way to describe them.

@item complex relocations

The MRI assemblers support relocations against a negated section address, and
relocations which combine the start addresses of two or more sections.  These
are not support by other object file formats.

@item @code{END} pseudo-op specifying start address

The MRI @code{END} pseudo-op permits the specification of a start address.
This is not supported by other object file formats.  The start address may
instead be specified using the @option{-e} option to the linker, or in a linker
script.

@item @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops

The MRI @code{IDNT}, @code{.ident} and @code{NAME} pseudo-ops assign a module
name to the output file.  This is not supported by other object file formats.

@item @code{ORG} pseudo-op

The m68k MRI @code{ORG} pseudo-op begins an absolute section at a given
address.  This differs from the usual @command{@value{AS}} @code{.org} pseudo-op,
which changes the location within the current section.  Absolute sections are
not supported by other object file formats.  The address of a section may be
assigned within a linker script.
@end itemize

There are some other features of the MRI assembler which are not supported by
@command{@value{AS}}, typically either because they are difficult or because they
seem of little consequence.  Some of these may be supported in future releases.

@itemize @bullet

@item EBCDIC strings

EBCDIC strings are not supported.

@item packed binary coded decimal

Packed binary coded decimal is not supported.  This means that the @code{DC.P}
and @code{DCB.P} pseudo-ops are not supported.

@item @code{FEQU} pseudo-op

The m68k @code{FEQU} pseudo-op is not supported.

@item @code{NOOBJ} pseudo-op

The m68k @code{NOOBJ} pseudo-op is not supported.

@item @code{OPT} branch control options

The m68k @code{OPT} branch control options---@code{B}, @code{BRS}, @code{BRB},
@code{BRL}, and @code{BRW}---are ignored.  @command{@value{AS}} automatically
relaxes all branches, whether forward or backward, to an appropriate size, so
these options serve no purpose.

@item @code{OPT} list control options

The following m68k @code{OPT} list control options are ignored: @code{C},
@code{CEX}, @code{CL}, @code{CRE}, @code{E}, @code{G}, @code{I}, @code{M},
@code{MEX}, @code{MC}, @code{MD}, @code{X}.

@item other @code{OPT} options

The following m68k @code{OPT} options are ignored: @code{NEST}, @code{O},
@code{OLD}, @code{OP}, @code{P}, @code{PCO}, @code{PCR}, @code{PCS}, @code{R}.

@item @code{OPT} @code{D} option is default

The m68k @code{OPT} @code{D} option is the default, unlike the MRI assembler.
@code{OPT NOD} may be used to turn it off.

@item @code{XREF} pseudo-op.

The m68k @code{XREF} pseudo-op is ignored.

@item @code{.debug} pseudo-op

The i960 @code{.debug} pseudo-op is not supported.

@item @code{.extended} pseudo-op

The i960 @code{.extended} pseudo-op is not supported.

@item @code{.list} pseudo-op.

The various options of the i960 @code{.list} pseudo-op are not supported.

@item @code{.optimize} pseudo-op

The i960 @code{.optimize} pseudo-op is not supported.

@item @code{.output} pseudo-op

The i960 @code{.output} pseudo-op is not supported.

@item @code{.setreal} pseudo-op

The i960 @code{.setreal} pseudo-op is not supported.

@end itemize

@node MD
@section Dependency Tracking: @option{--MD}

@kindex --MD
@cindex dependency tracking
@cindex make rules

@command{@value{AS}} can generate a dependency file for the file it creates.  This
file consists of a single rule suitable for @code{make} describing the
dependencies of the main source file.

The rule is written to the file named in its argument.

This feature is used in the automatic updating of makefiles.

@node o
@section Name the Object File: @option{-o}

@kindex -o
@cindex naming object file
@cindex object file name
There is always one object file output when you run @command{@value{AS}}.  By
default it has the name
@ifset GENERIC
@ifset I960
@file{a.out} (or @file{b.out}, for Intel 960 targets only).
@end ifset
@ifclear I960
@file{a.out}.
@end ifclear
@end ifset
@ifclear GENERIC
@ifset I960
@file{b.out}.
@end ifset
@ifclear I960
@file{a.out}.
@end ifclear
@end ifclear
You use this option (which takes exactly one filename) to give the
object file a different name.

Whatever the object file is called, @command{@value{AS}} overwrites any
existing file of the same name.

@node R
@section Join Data and Text Sections: @option{-R}

@kindex -R
@cindex data and text sections, joining
@cindex text and data sections, joining
@cindex joining text and data sections
@cindex merging text and data sections
@option{-R} tells @command{@value{AS}} to write the object file as if all
data-section data lives in the text section.  This is only done at
the very last moment:  your binary data are the same, but data
section parts are relocated differently.  The data section part of
your object file is zero bytes long because all its bytes are
appended to the text section.  (@xref{Sections,,Sections and Relocation}.)

When you specify @option{-R} it would be possible to generate shorter
address displacements (because we do not have to cross between text and
data section).  We refrain from doing this simply for compatibility with
older versions of @command{@value{AS}}.  In future, @option{-R} may work this way.

@ifset COFF-ELF
When @command{@value{AS}} is configured for COFF or ELF output,
this option is only useful if you use sections named @samp{.text} and
@samp{.data}.
@end ifset

@ifset HPPA
@option{-R} is not supported for any of the HPPA targets.  Using
@option{-R} generates a warning from @command{@value{AS}}.
@end ifset

@node statistics
@section Display Assembly Statistics: @option{--statistics}

@kindex --statistics
@cindex statistics, about assembly
@cindex time, total for assembly
@cindex space used, maximum for assembly
Use @samp{--statistics} to display two statistics about the resources used by
@command{@value{AS}}: the maximum amount of space allocated during the assembly
(in bytes), and the total execution time taken for the assembly (in @sc{cpu}
seconds).

@node traditional-format
@section Compatible Output: @option{--traditional-format}

@kindex --traditional-format
For some targets, the output of @command{@value{AS}} is different in some ways
from the output of some existing assembler.  This switch requests
@command{@value{AS}} to use the traditional format instead.

For example, it disables the exception frame optimizations which
@command{@value{AS}} normally does by default on @code{@value{GCC}} output.

@node v
@section Announce Version: @option{-v}

@kindex -v
@kindex -version
@cindex assembler version
@cindex version of assembler
You can find out what version of as is running by including the
option @samp{-v} (which you can also spell as @samp{-version}) on the
command line.

@node W
@section Control Warnings: @option{-W}, @option{--warn}, @option{--no-warn}, @option{--fatal-warnings}

@command{@value{AS}} should never give a warning or error message when
assembling compiler output.  But programs written by people often
cause @command{@value{AS}} to give a warning that a particular assumption was
made.  All such warnings are directed to the standard error file.

@kindex -W
@kindex --no-warn
@cindex suppressing warnings
@cindex warnings, suppressing
If you use the @option{-W} and @option{--no-warn} options, no warnings are issued.
This only affects the warning messages: it does not change any particular of
how @command{@value{AS}} assembles your file.  Errors, which stop the assembly,
are still reported.

@kindex --fatal-warnings
@cindex errors, caused by warnings
@cindex warnings, causing error
If you use the @option{--fatal-warnings} option, @command{@value{AS}} considers
files that generate warnings to be in error.

@kindex --warn
@cindex warnings, switching on
You can switch these options off again by specifying @option{--warn}, which
causes warnings to be output as usual.

@node Z
@section Generate Object File in Spite of Errors: @option{-Z}
@cindex object file, after errors
@cindex errors, continuing after
After an error message, @command{@value{AS}} normally produces no output.  If for
some reason you are interested in object file output even after
@command{@value{AS}} gives an error message on your program, use the @samp{-Z}
option.  If there are any errors, @command{@value{AS}} continues anyways, and
writes an object file after a final warning message of the form @samp{@var{n}
errors, @var{m} warnings, generating bad object file.}

@node Syntax
@chapter Syntax

@cindex machine-independent syntax
@cindex syntax, machine-independent
This chapter describes the machine-independent syntax allowed in a
source file.  @command{@value{AS}} syntax is similar to what many other
assemblers use; it is inspired by the BSD 4.2
@ifclear VAX
assembler.
@end ifclear
@ifset VAX
assembler, except that @command{@value{AS}} does not assemble Vax bit-fields.
@end ifset

@menu
* Preprocessing::              Preprocessing
* Whitespace::                  Whitespace
* Comments::                    Comments
* Symbol Intro::                Symbols
* Statements::                  Statements
* Constants::                   Constants
@end menu

@node Preprocessing
@section Preprocessing

@cindex preprocessing
The @command{@value{AS}} internal preprocessor:
@itemize @bullet
@cindex whitespace, removed by preprocessor
@item
adjusts and removes extra whitespace.  It leaves one space or tab before
the keywords on a line, and turns any other whitespace on the line into
a single space.

@cindex comments, removed by preprocessor
@item
removes all comments, replacing them with a single space, or an
appropriate number of newlines.

@cindex constants, converted by preprocessor
@item
converts character constants into the appropriate numeric values.
@end itemize

It does not do macro processing, include file handling, or
anything else you may get from your C compiler's preprocessor.  You can
do include file processing with the @code{.include} directive
(@pxref{Include,,@code{.include}}).  You can use the @sc{gnu} C compiler driver
to get other ``CPP'' style preprocessing by giving the input file a
@samp{.S} suffix.  @xref{Overall Options,, Options Controlling the Kind of
Output, gcc.info, Using GNU CC}.

Excess whitespace, comments, and character constants
cannot be used in the portions of the input text that are not
preprocessed.

@cindex turning preprocessing on and off
@cindex preprocessing, turning on and off
@kindex #NO_APP
@kindex #APP
If the first line of an input file is @code{#NO_APP} or if you use the
@samp{-f} option, whitespace and comments are not removed from the input file.
Within an input file, you can ask for whitespace and comment removal in
specific portions of the by putting a line that says @code{#APP} before the
text that may contain whitespace or comments, and putting a line that says
@code{#NO_APP} after this text.  This feature is mainly intend to support
@code{asm} statements in compilers whose output is otherwise free of comments
and whitespace.

@node Whitespace
@section Whitespace

@cindex whitespace
@dfn{Whitespace} is one or more blanks or tabs, in any order.
Whitespace is used to separate symbols, and to make programs neater for
people to read.  Unless within character constants
(@pxref{Characters,,Character Constants}), any whitespace means the same
as exactly one space.

@node Comments
@section Comments

@cindex comments
There are two ways of rendering comments to @command{@value{AS}}.  In both
cases the comment is equivalent to one space.

Anything from @samp{/*} through the next @samp{*/} is a comment.
This means you may not nest these comments.

@smallexample
/*
  The only way to include a newline ('\n') in a comment
  is to use this sort of comment.
*/

/* This sort of comment does not nest. */
@end smallexample

@cindex line comment character
Anything from the @dfn{line comment} character to the next newline
is considered a comment and is ignored.  The line comment character is
@ifset A29K
@samp{;} for the AMD 29K family;
@end ifset
@ifset ARC
@samp{;} on the ARC;
@end ifset
@ifset ARM
@samp{@@} on the ARM;
@end ifset
@ifset H8/300
@samp{;} for the H8/300 family;
@end ifset
@ifset H8/500
@samp{!} for the H8/500 family;
@end ifset
@ifset HPPA
@samp{;} for the HPPA;
@end ifset
@ifset I80386
@samp{#} on the i386 and x86-64;
@end ifset
@ifset I960
@samp{#} on the i960;
@end ifset
@ifset PDP11
@samp{;} for the PDP-11;
@end ifset
@ifset PJ
@samp{;} for picoJava;
@end ifset
@ifset PPC
@samp{#} for Motorola PowerPC;
@end ifset
@ifset SH
@samp{!} for the Renesas / SuperH SH;
@end ifset
@ifset SPARC
@samp{!} on the SPARC;
@end ifset
@ifset IP2K
@samp{#} on the ip2k;
@end ifset
@ifset M32R
@samp{#} on the m32r;
@end ifset
@ifset M680X0
@samp{|} on the 680x0;
@end ifset
@ifset M68HC11
@samp{#} on the 68HC11 and 68HC12;
@end ifset
@ifset M880X0
@samp{;} on the M880x0;
@end ifset
@ifset VAX
@samp{#} on the Vax;
@end ifset
@ifset Z8000
@samp{!} for the Z8000;
@end ifset
@ifset V850
@samp{#} on the V850;
@end ifset
@ifset XTENSA
@samp{#} for Xtensa systems;
@end ifset
see @ref{Machine Dependencies}.  @refill
@c FIXME What about i860?

@ifset GENERIC
On some machines there are two different line comment characters.  One
character only begins a comment if it is the first non-whitespace character on
a line, while the other always begins a comment.
@end ifset

@ifset V850
The V850 assembler also supports a double dash as starting a comment that
extends to the end of the line.

@samp{--};
@end ifset

@kindex #
@cindex lines starting with @code{#}
@cindex logical line numbers
To be compatible with past assemblers, lines that begin with @samp{#} have a
special interpretation.  Following the @samp{#} should be an absolute
expression (@pxref{Expressions}): the logical line number of the @emph{next}
line.  Then a string (@pxref{Strings,, Strings}) is allowed: if present it is a
new logical file name.  The rest of the line, if any, should be whitespace.

If the first non-whitespace characters on the line are not numeric,
the line is ignored.  (Just like a comment.)

@smallexample
                          # This is an ordinary comment.
# 42-6 "new_file_name"    # New logical file name
                          # This is logical line # 36.
@end smallexample
This feature is deprecated, and may disappear from future versions
of @command{@value{AS}}.

@node Symbol Intro
@section Symbols

@cindex characters used in symbols
@ifclear SPECIAL-SYMS
A @dfn{symbol} is one or more characters chosen from the set of all
letters (both upper and lower case), digits and the three characters
@samp{_.$}.
@end ifclear
@ifset SPECIAL-SYMS
@ifclear GENERIC
@ifset H8
A @dfn{symbol} is one or more characters chosen from the set of all
letters (both upper and lower case), digits and the three characters
@samp{._$}.  (Save that, on the H8/300 only, you may not use @samp{$} in
symbol names.)
@end ifset
@end ifclear
@end ifset
@ifset GENERIC
On most machines, you can also use @code{$} in symbol names; exceptions
are noted in @ref{Machine Dependencies}.
@end ifset
No symbol may begin with a digit.  Case is significant.
There is no length limit: all characters are significant.  Symbols are
delimited by characters not in that set, or by the beginning of a file
(since the source program must end with a newline, the end of a file is
not a possible symbol delimiter).  @xref{Symbols}.
@cindex length of symbols

@node Statements
@section Statements

@cindex statements, structure of
@cindex line separator character
@cindex statement separator character
@ifclear GENERIC
@ifclear abnormal-separator
A @dfn{statement} ends at a newline character (@samp{\n}) or at a
semicolon (@samp{;}).  The newline or semicolon is considered part of
the preceding statement.  Newlines and semicolons within character
constants are an exception: they do not end statements.
@end ifclear
@ifset abnormal-separator
@ifset A29K
A @dfn{statement} ends at a newline character (@samp{\n}) or an ``at''
sign (@samp{@@}).  The newline or at sign is considered part of the
preceding statement.  Newlines and at signs within character constants
are an exception: they do not end statements.
@end ifset
@ifset HPPA
A @dfn{statement} ends at a newline character (@samp{\n}) or an exclamation 
point (@samp{!}).  The newline or exclamation point is considered part of the
preceding statement.  Newlines and exclamation points within character
constants are an exception: they do not end statements.
@end ifset
@ifset H8
A @dfn{statement} ends at a newline character (@samp{\n}); or (for the
H8/300) a dollar sign (@samp{$}); or (for the
Renesas-SH or the
H8/500) a semicolon
(@samp{;}).  The newline or separator character is considered part of
the preceding statement.  Newlines and separators within character
constants are an exception: they do not end statements.
@end ifset
@end ifset
@end ifclear
@ifset GENERIC
A @dfn{statement} ends at a newline character (@samp{\n}) or line
separator character.  (The line separator is usually @samp{;}, unless
this conflicts with the comment character; @pxref{Machine Dependencies}.)  The
newline or separator character is considered part of the preceding
statement.  Newlines and separators within character constants are an
exception: they do not end statements.
@end ifset

@cindex newline, required at file end
@cindex EOF, newline must precede
It is an error to end any statement with end-of-file:  the last
character of any input file should be a newline.@refill

An empty statement is allowed, and may include whitespace.  It is ignored.

@cindex instructions and directives
@cindex directives and instructions
@c "key symbol" is not used elsewhere in the document; seems pedantic to
@c @defn{} it in that case, as was done previously...  doc@cygnus.com,
@c 13feb91.
A statement begins with zero or more labels, optionally followed by a
key symbol which determines what kind of statement it is.  The key
symbol determines the syntax of the rest of the statement.  If the
symbol begins with a dot @samp{.} then the statement is an assembler
directive: typically valid for any computer.  If the symbol begins with
a letter the statement is an assembly language @dfn{instruction}: it
assembles into a machine language instruction.
@ifset GENERIC
Different versions of @command{@value{AS}} for different computers
recognize different instructions.  In fact, the same symbol may
represent a different instruction in a different computer's assembly
language.@refill
@end ifset

@cindex @code{:} (label)
@cindex label (@code{:})
A label is a symbol immediately followed by a colon (@code{:}).
Whitespace before a label or after a colon is permitted, but you may not
have whitespace between a label's symbol and its colon. @xref{Labels}.

@ifset HPPA
For HPPA targets, labels need not be immediately followed by a colon, but 
the definition of a label must begin in column zero.  This also implies that
only one label may be defined on each line.
@end ifset

@smallexample
label:     .directive    followed by something
another_label:           # This is an empty statement.
           instruction   operand_1, operand_2, @dots{}
@end smallexample

@node Constants
@section Constants

@cindex constants
A constant is a number, written so that its value is known by
inspection, without knowing any context.  Like this:
@smallexample
@group
.byte  74, 0112, 092, 0x4A, 0X4a, 'J, '\J # All the same value.
.ascii "Ring the bell\7"                  # A string constant.
.octa  0x123456789abcdef0123456789ABCDEF0 # A bignum.
.float 0f-314159265358979323846264338327\
95028841971.693993751E-40                 # - pi, a flonum.
@end group
@end smallexample

@menu
* Characters::                  Character Constants
* Numbers::                     Number Constants
@end menu

@node Characters
@subsection Character Constants

@cindex character constants
@cindex constants, character
There are two kinds of character constants.  A @dfn{character} stands
for one character in one byte and its value may be used in
numeric expressions.  String constants (properly called string
@emph{literals}) are potentially many bytes and their values may not be
used in arithmetic expressions.

@menu
* Strings::                     Strings
* Chars::                       Characters
@end menu

@node Strings
@subsubsection Strings

@cindex string constants
@cindex constants, string
A @dfn{string} is written between double-quotes.  It may contain
double-quotes or null characters.  The way to get special characters
into a string is to @dfn{escape} these characters: precede them with
a backslash @samp{\} character.  For example @samp{\\} represents
one backslash:  the first @code{\} is an escape which tells
@command{@value{AS}} to interpret the second character literally as a backslash
(which prevents @command{@value{AS}} from recognizing the second @code{\} as an
escape character).  The complete list of escapes follows.

@cindex escape codes, character
@cindex character escape codes
@table @kbd
@c      @item \a
@c      Mnemonic for ACKnowledge; for ASCII this is octal code 007.
@c
@cindex @code{\b} (backspace character)
@cindex backspace (@code{\b})
@item \b
Mnemonic for backspace; for ASCII this is octal code 010.

@c      @item \e
@c      Mnemonic for EOText; for ASCII this is octal code 004.
@c
@cindex @code{\f} (formfeed character)
@cindex formfeed (@code{\f})
@item \f
Mnemonic for FormFeed; for ASCII this is octal code 014.

@cindex @code{\n} (newline character)
@cindex newline (@code{\n})
@item \n
Mnemonic for newline; for ASCII this is octal code 012.

@c      @item \p
@c      Mnemonic for prefix; for ASCII this is octal code 033, usually known as @code{escape}.
@c
@cindex @code{\r} (carriage return character)
@cindex carriage return (@code{\r})
@item \r
Mnemonic for carriage-Return; for ASCII this is octal code 015.

@c      @item \s
@c      Mnemonic for space; for ASCII this is octal code 040.  Included for compliance with
@c      other assemblers.
@c
@cindex @code{\t} (tab)
@cindex tab (@code{\t})
@item \t
Mnemonic for horizontal Tab; for ASCII this is octal code 011.

@c      @item \v
@c      Mnemonic for Vertical tab; for ASCII this is octal code 013.
@c      @item \x @var{digit} @var{digit} @var{digit}
@c      A hexadecimal character code.  The numeric code is 3 hexadecimal digits.
@c
@cindex @code{\@var{ddd}} (octal character code)
@cindex octal character code (@code{\@var{ddd}})
@item \ @var{digit} @var{digit} @var{digit}
An octal character code.  The numeric code is 3 octal digits.
For compatibility with other Unix systems, 8 and 9 are accepted as digits:
for example, @code{\008} has the value 010, and @code{\009} the value 011.

@cindex @code{\@var{xd...}} (hex character code)
@cindex hex character code (@code{\@var{xd...}})
@item \@code{x} @var{hex-digits...}
A hex character code.  All trailing hex digits are combined.  Either upper or
lower case @code{x} works.

@cindex @code{\\} (@samp{\} character)
@cindex backslash (@code{\\})
@item \\
Represents one @samp{\} character.

@c      @item \'
@c      Represents one @samp{'} (accent acute) character.
@c      This is needed in single character literals
@c      (@xref{Characters,,Character Constants}.) to represent
@c      a @samp{'}.
@c
@cindex @code{\"} (doublequote character)
@cindex doublequote (@code{\"})
@item \"
Represents one @samp{"} character.  Needed in strings to represent
this character, because an unescaped @samp{"} would end the string.

@item \ @var{anything-else}
Any other character when escaped by @kbd{\} gives a warning, but
assembles as if the @samp{\} was not present.  The idea is that if
you used an escape sequence you clearly didn't want the literal
interpretation of the following character.  However @command{@value{AS}} has no
other interpretation, so @command{@value{AS}} knows it is giving you the wrong
code and warns you of the fact.
@end table

Which characters are escapable, and what those escapes represent,
varies widely among assemblers.  The current set is what we think
the BSD 4.2 assembler recognizes, and is a subset of what most C
compilers recognize.  If you are in doubt, do not use an escape
sequence.

@node Chars
@subsubsection Characters

@cindex single character constant
@cindex character, single
@cindex constant, single character
A single character may be written as a single quote immediately
followed by that character.  The same escapes apply to characters as
to strings.  So if you want to write the character backslash, you
must write @kbd{'\\} where the first @code{\} escapes the second
@code{\}.  As you can see, the quote is an acute accent, not a
grave accent.  A newline
@ifclear GENERIC
@ifclear abnormal-separator
(or semicolon @samp{;})
@end ifclear
@ifset abnormal-separator
@ifset A29K
(or at sign @samp{@@})
@end ifset
@ifset H8
(or dollar sign @samp{$}, for the H8/300; or semicolon @samp{;} for the
Renesas SH or H8/500)
@end ifset
@end ifset
@end ifclear
immediately following an acute accent is taken as a literal character
and does not count as the end of a statement.  The value of a character
constant in a numeric expression is the machine's byte-wide code for
that character.  @command{@value{AS}} assumes your character code is ASCII:
@kbd{'A} means 65, @kbd{'B} means 66, and so on. @refill

@node Numbers
@subsection Number Constants

@cindex constants, number
@cindex number constants
@command{@value{AS}} distinguishes three kinds of numbers according to how they
are stored in the target machine.  @emph{Integers} are numbers that
would fit into an @code{int} in the C language.  @emph{Bignums} are
integers, but they are stored in more than 32 bits.  @emph{Flonums}
are floating point numbers, described below.

@menu
* Integers::                    Integers
* Bignums::                     Bignums
* Flonums::                     Flonums
@ifclear GENERIC
@ifset I960
* Bit Fields::                  Bit Fields
@end ifset
@end ifclear
@end menu

@node Integers
@subsubsection Integers
@cindex integers
@cindex constants, integer

@cindex binary integers
@cindex integers, binary
A binary integer is @samp{0b} or @samp{0B} followed by zero or more of
the binary digits @samp{01}.

@cindex octal integers
@cindex integers, octal
An octal integer is @samp{0} followed by zero or more of the octal
digits (@samp{01234567}).

@cindex decimal integers
@cindex integers, decimal
A decimal integer starts with a non-zero digit followed by zero or
more digits (@samp{0123456789}).

@cindex hexadecimal integers
@cindex integers, hexadecimal
A hexadecimal integer is @samp{0x} or @samp{0X} followed by one or
more hexadecimal digits chosen from @samp{0123456789abcdefABCDEF}.

Integers have the usual values.  To denote a negative integer, use
the prefix operator @samp{-} discussed under expressions
(@pxref{Prefix Ops,,Prefix Operators}).

@node Bignums
@subsubsection Bignums

@cindex bignums
@cindex constants, bignum
A @dfn{bignum} has the same syntax and semantics as an integer
except that the number (or its negative) takes more than 32 bits to
represent in binary.  The distinction is made because in some places
integers are permitted while bignums are not.

@node Flonums
@subsubsection Flonums
@cindex flonums
@cindex floating point numbers
@cindex constants, floating point

@cindex precision, floating point
A @dfn{flonum} represents a floating point number.  The translation is
indirect: a decimal floating point number from the text is converted by
@command{@value{AS}} to a generic binary floating point number of more than
sufficient precision.  This generic floating point number is converted
to a particular computer's floating point format (or formats) by a
portion of @command{@value{AS}} specialized to that computer.

A flonum is written by writing (in order)
@itemize @bullet
@item
The digit @samp{0}.
@ifset HPPA
(@samp{0} is optional on the HPPA.)
@end ifset

@item
A letter, to tell @command{@value{AS}} the rest of the number is a flonum.
@ifset GENERIC
@kbd{e} is recommended.  Case is not important.
@ignore
@c FIXME: verify if flonum syntax really this vague for most cases
(Any otherwise illegal letter works here, but that might be changed.  Vax BSD
4.2 assembler seems to allow any of @samp{defghDEFGH}.)
@end ignore

On the H8/300, H8/500,
Renesas / SuperH SH,
and AMD 29K architectures, the letter must be
one of the letters @samp{DFPRSX} (in upper or lower case).

On the ARC, the letter must be one of the letters @samp{DFRS}
(in upper or lower case).

On the Intel 960 architecture, the letter must be
one of the letters @samp{DFT} (in upper or lower case).

On the HPPA architecture, the letter must be @samp{E} (upper case only).
@end ifset
@ifclear GENERIC
@ifset A29K
One of the letters @samp{DFPRSX} (in upper or lower case).
@end ifset
@ifset ARC
One of the letters @samp{DFRS} (in upper or lower case).
@end ifset
@ifset H8
One of the letters @samp{DFPRSX} (in upper or lower case).
@end ifset
@ifset HPPA
The letter @samp{E} (upper case only).
@end ifset
@ifset I960
One of the letters @samp{DFT} (in upper or lower case).
@end ifset
@end ifclear

@item
An optional sign: either @samp{+} or @samp{-}.

@item
An optional @dfn{integer part}: zero or more decimal digits.

@item
An optional @dfn{fractional part}: @samp{.} followed by zero
or more decimal digits.

@item
An optional exponent, consisting of:

@itemize @bullet
@item
An @samp{E} or @samp{e}.
@c I can't find a config where "EXP_CHARS" is other than 'eE', but in
@c principle this can perfectly well be different on different targets.
@item
Optional sign: either @samp{+} or @samp{-}.
@item
One or more decimal digits.
@end itemize

@end itemize

At least one of the integer part or the fractional part must be
present.  The floating point number has the usual base-10 value.

@command{@value{AS}} does all processing using integers.  Flonums are computed
independently of any floating point hardware in the computer running
@command{@value{AS}}.

@ifclear GENERIC
@ifset I960
@c Bit fields are written as a general facility but are also controlled
@c by a conditional-compilation flag---which is as of now (21mar91)
@c turned on only by the i960 config of GAS.
@node Bit Fields
@subsubsection Bit Fields

@cindex bit fields
@cindex constants, bit field
You can also define numeric constants as @dfn{bit fields}.
specify two numbers separated by a colon---
@example
@var{mask}:@var{value}
@end example
@noindent
@command{@value{AS}} applies a bitwise @sc{and} between @var{mask} and
@var{value}.

The resulting number is then packed
@ifset GENERIC
@c this conditional paren in case bit fields turned on elsewhere than 960
(in host-dependent byte order)
@end ifset
into a field whose width depends on which assembler directive has the
bit-field as its argument.  Overflow (a result from the bitwise and
requiring more binary digits to represent) is not an error; instead,
more constants are generated, of the specified width, beginning with the
least significant digits.@refill

The directives @code{.byte}, @code{.hword}, @code{.int}, @code{.long},
@code{.short}, and @code{.word} accept bit-field arguments.
@end ifset
@end ifclear

@node Sections
@chapter Sections and Relocation
@cindex sections
@cindex relocation

@menu
* Secs Background::             Background
* Ld Sections::                 Linker Sections
* As Sections::                 Assembler Internal Sections
* Sub-Sections::                Sub-Sections
* bss::                         bss Section
@end menu

@node Secs Background
@section Background

Roughly, a section is a range of addresses, with no gaps; all data
``in'' those addresses is treated the same for some particular purpose.
For example there may be a ``read only'' section.

@cindex linker, and assembler
@cindex assembler, and linker
The linker @code{@value{LD}} reads many object files (partial programs) and
combines their contents to form a runnable program.  When @command{@value{AS}}
emits an object file, the partial program is assumed to start at address 0.
@code{@value{LD}} assigns the final addresses for the partial program, so that
different partial programs do not overlap.  This is actually an
oversimplification, but it suffices to explain how @command{@value{AS}} uses
sections.

@code{@value{LD}} moves blocks of bytes of your program to their run-time
addresses.  These blocks slide to their run-time addresses as rigid
units; their length does not change and neither does the order of bytes
within them.  Such a rigid unit is called a @emph{section}.  Assigning
run-time addresses to sections is called @dfn{relocation}.  It includes
the task of adjusting mentions of object-file addresses so they refer to
the proper run-time addresses.
@ifset H8
For the H8/300 and H8/500,
and for the Renesas / SuperH SH,
@command{@value{AS}} pads sections if needed to
ensure they end on a word (sixteen bit) boundary.
@end ifset

@cindex standard assembler sections
An object file written by @command{@value{AS}} has at least three sections, any
of which may be empty.  These are named @dfn{text}, @dfn{data} and
@dfn{bss} sections.

@ifset COFF-ELF
@ifset GENERIC
When it generates COFF or ELF output,
@end ifset
@command{@value{AS}} can also generate whatever other named sections you specify
using the @samp{.section} directive (@pxref{Section,,@code{.section}}).
If you do not use any directives that place output in the @samp{.text}
or @samp{.data} sections, these sections still exist, but are empty.
@end ifset

@ifset HPPA
@ifset GENERIC
When @command{@value{AS}} generates SOM or ELF output for the HPPA,
@end ifset
@command{@value{AS}} can also generate whatever other named sections you
specify using the @samp{.space} and @samp{.subspace} directives.  See
@cite{HP9000 Series 800 Assembly Language Reference Manual}
(HP 92432-90001) for details on the @samp{.space} and @samp{.subspace}
assembler directives.

@ifset SOM
Additionally, @command{@value{AS}} uses different names for the standard
text, data, and bss sections when generating SOM output.  Program text
is placed into the @samp{$CODE$} section, data into @samp{$DATA$}, and
BSS into @samp{$BSS$}.
@end ifset
@end ifset

Within the object file, the text section starts at address @code{0}, the
data section follows, and the bss section follows the data section.

@ifset HPPA
When generating either SOM or ELF output files on the HPPA, the text
section starts at address @code{0}, the data section at address
@code{0x4000000}, and the bss section follows the data section.
@end ifset

To let @code{@value{LD}} know which data changes when the sections are
relocated, and how to change that data, @command{@value{AS}} also writes to the
object file details of the relocation needed.  To perform relocation
@code{@value{LD}} must know, each time an address in the object
file is mentioned:
@itemize @bullet
@item
Where in the object file is the beginning of this reference to
an address?
@item
How long (in bytes) is this reference?
@item
Which section does the address refer to?  What is the numeric value of
@display
(@var{address}) @minus{} (@var{start-address of section})?
@end display
@item
Is the reference to an address ``Program-Counter relative''?
@end itemize

@cindex addresses, format of
@cindex section-relative addressing
In fact, every address @command{@value{AS}} ever uses is expressed as
@display
(@var{section}) + (@var{offset into section})
@end display
@noindent
Further, most expressions @command{@value{AS}} computes have this section-relative
nature.
@ifset SOM
(For some object formats, such as SOM for the HPPA, some expressions are
symbol-relative instead.)
@end ifset

In this manual we use the notation @{@var{secname} @var{N}@} to mean ``offset
@var{N} into section @var{secname}.''

Apart from text, data and bss sections you need to know about the
@dfn{absolute} section.  When @code{@value{LD}} mixes partial programs,
addresses in the absolute section remain unchanged.  For example, address
@code{@{absolute 0@}} is ``relocated'' to run-time address 0 by
@code{@value{LD}}.  Although the linker never arranges two partial programs'
data sections with overlapping addresses after linking, @emph{by definition}
their absolute sections must overlap.  Address @code{@{absolute@ 239@}} in one
part of a program is always the same address when the program is running as
address @code{@{absolute@ 239@}} in any other part of the program.

The idea of sections is extended to the @dfn{undefined} section.  Any
address whose section is unknown at assembly time is by definition
rendered @{undefined @var{U}@}---where @var{U} is filled in later.
Since numbers are always defined, the only way to generate an undefined
address is to mention an undefined symbol.  A reference to a named
common block would be such a symbol: its value is unknown at assembly
time so it has section @emph{undefined}.

By analogy the word @emph{section} is used to describe groups of sections in
the linked program.  @code{@value{LD}} puts all partial programs' text
sections in contiguous addresses in the linked program.  It is
customary to refer to the @emph{text section} of a program, meaning all
the addresses of all partial programs' text sections.  Likewise for
data and bss sections.

Some sections are manipulated by @code{@value{LD}}; others are invented for
use of @command{@value{AS}} and have no meaning except during assembly.

@node Ld Sections
@section Linker Sections
@code{@value{LD}} deals with just four kinds of sections, summarized below.

@table @strong

@ifset COFF-ELF
@cindex named sections
@cindex sections, named
@item named sections
@end ifset
@ifset aout-bout
@cindex text section
@cindex data section
@itemx text section
@itemx data section
@end ifset
These sections hold your program.  @command{@value{AS}} and @code{@value{LD}} treat them as
separate but equal sections.  Anything you can say of one section is
true of another.
@c @ifset aout-bout
When the program is running, however, it is
customary for the text section to be unalterable.  The
text section is often shared among processes: it contains
instructions, constants and the like.  The data section of a running
program is usually alterable: for example, C variables would be stored
in the data section.
@c @end ifset

@cindex bss section
@item bss section
This section contains zeroed bytes when your program begins running.  It
is used to hold uninitialized variables or common storage.  The length of
each partial program's bss section is important, but because it starts
out containing zeroed bytes there is no need to store explicit zero
bytes in the object file.  The bss section was invented to eliminate
those explicit zeros from object files.

@cindex absolute section
@item absolute section
Address 0 of this section is always ``relocated'' to runtime address 0.
This is useful if you want to refer to an address that @code{@value{LD}} must
not change when relocating.  In this sense we speak of absolute
addresses being ``unrelocatable'': they do not change during relocation.

@cindex undefined section
@item undefined section
This ``section'' is a catch-all for address references to objects not in
the preceding sections.
@c FIXME: ref to some other doc on obj-file formats could go here.
@end table

@cindex relocation example
An idealized example of three relocatable sections follows.
@ifset COFF-ELF
The example uses the traditional section names @samp{.text} and @samp{.data}.
@end ifset
Memory addresses are on the horizontal axis.

@c TEXI2ROFF-KILL
@ifnottex
@c END TEXI2ROFF-KILL
@smallexample
                      +-----+----+--+
partial program # 1:  |ttttt|dddd|00|
                      +-----+----+--+

                      text   data bss
                      seg.   seg. seg.

                      +---+---+---+
partial program # 2:  |TTT|DDD|000|
                      +---+---+---+

                      +--+---+-----+--+----+---+-----+~~
linked program:       |  |TTT|ttttt|  |dddd|DDD|00000|
                      +--+---+-----+--+----+---+-----+~~

    addresses:        0 @dots{}
@end smallexample
@c TEXI2ROFF-KILL
@end ifnottex
@need 5000
@tex
\bigskip
\line{\it Partial program \#1: \hfil}
\line{\ibox{2.5cm}{\tt text}\ibox{2cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
\line{\boxit{2.5cm}{\tt ttttt}\boxit{2cm}{\tt dddd}\boxit{1cm}{\tt 00}\hfil}

\line{\it Partial program \#2: \hfil}
\line{\ibox{1cm}{\tt text}\ibox{1.5cm}{\tt data}\ibox{1cm}{\tt bss}\hfil}
\line{\boxit{1cm}{\tt TTT}\boxit{1.5cm}{\tt DDDD}\boxit{1cm}{\tt 000}\hfil}

\line{\it linked program: \hfil}
\line{\ibox{.5cm}{}\ibox{1cm}{\tt text}\ibox{2.5cm}{}\ibox{.75cm}{}\ibox{2cm}{\tt data}\ibox{1.5cm}{}\ibox{2cm}{\tt bss}\hfil}
\line{\boxit{.5cm}{}\boxit{1cm}{\tt TTT}\boxit{2.5cm}{\tt
ttttt}\boxit{.75cm}{}\boxit{2cm}{\tt dddd}\boxit{1.5cm}{\tt
DDDD}\boxit{2cm}{\tt 00000}\ \dots\hfil}

\line{\it addresses: \hfil}
\line{0\dots\hfil}

@end tex
@c END TEXI2ROFF-KILL

@node As Sections
@section Assembler Internal Sections

@cindex internal assembler sections
@cindex sections in messages, internal
These sections are meant only for the internal use of @command{@value{AS}}.  They
have no meaning at run-time.  You do not really need to know about these
sections for most purposes; but they can be mentioned in @command{@value{AS}}
warning messages, so it might be helpful to have an idea of their
meanings to @command{@value{AS}}.  These sections are used to permit the
value of every expression in your assembly language program to be a
section-relative address.

@table @b
@cindex assembler internal logic error
@item ASSEMBLER-INTERNAL-LOGIC-ERROR!
An internal assembler logic error has been found.  This means there is a
bug in the assembler.

@cindex expr (internal section)
@item expr section
The assembler stores complex expression internally as combinations of
symbols.  When it needs to represent an expression as a symbol, it puts
it in the expr section.
@c FIXME item debug
@c FIXME item transfer[t] vector preload
@c FIXME item transfer[t] vector postload
@c FIXME item register
@end table

@node Sub-Sections
@section Sub-Sections

@cindex numbered subsections
@cindex grouping data
@ifset aout-bout
Assembled bytes
@ifset COFF-ELF
conventionally
@end ifset
fall into two sections: text and data.
@end ifset
You may have separate groups of
@ifset GENERIC
data in named sections
@end ifset
@ifclear GENERIC
@ifclear aout-bout
data in named sections
@end ifclear
@ifset aout-bout
text or data
@end ifset
@end ifclear
that you want to end up near to each other in the object file, even though they
are not contiguous in the assembler source.  @command{@value{AS}} allows you to
use @dfn{subsections} for this purpose.  Within each section, there can be
numbered subsections with values from 0 to 8192.  Objects assembled into the
same subsection go into the object file together with other objects in the same
subsection.  For example, a compiler might want to store constants in the text
section, but might not want to have them interspersed with the program being
assembled.  In this case, the compiler could issue a @samp{.text 0} before each
section of code being output, and a @samp{.text 1} before each group of
constants being output.

Subsections are optional.  If you do not use subsections, everything
goes in subsection number zero.

@ifset GENERIC
Each subsection is zero-padded up to a multiple of four bytes.
(Subsections may be padded a different amount on different flavors
of @command{@value{AS}}.)
@end ifset
@ifclear GENERIC
@ifset H8
On the H8/300 and H8/500 platforms, each subsection is zero-padded to a word
boundary (two bytes).
The same is true on the Renesas SH.
@end ifset
@ifset I960
@c FIXME section padding (alignment)?
@c Rich Pixley says padding here depends on target obj code format; that
@c doesn't seem particularly useful to say without further elaboration,
@c so for now I say nothing about it.  If this is a generic BFD issue,
@c these paragraphs might need to vanish from this manual, and be
@c discussed in BFD chapter of binutils (or some such).
@end ifset
@ifset A29K
On the AMD 29K family, no particular padding is added to section or
subsection sizes; @value{AS} forces no alignment on this platform.
@end ifset
@end ifclear

Subsections appear in your object file in numeric order, lowest numbered
to highest.  (All this to be compatible with other people's assemblers.)
The object file contains no representation of subsections; @code{@value{LD}} and
other programs that manipulate object files see no trace of them.
They just see all your text subsections as a text section, and all your
data subsections as a data section.

To specify which subsection you want subsequent statements assembled
into, use a numeric argument to specify it, in a @samp{.text
@var{expression}} or a @samp{.data @var{expression}} statement.
@ifset COFF-ELF
@ifset GENERIC
When generating COFF or ELF output, you
@end ifset
@ifclear GENERIC
You
@end ifclear
can also use an extra subsection
argument with arbitrary named sections: @samp{.section @var{name},
@var{expression}}.
@end ifset
@var{Expression} should be an absolute expression.
(@xref{Expressions}.)  If you just say @samp{.text} then @samp{.text 0}
is assumed.  Likewise @samp{.data} means @samp{.data 0}.  Assembly
begins in @code{text 0}.  For instance:
@smallexample
.text 0     # The default subsection is text 0 anyway.
.ascii "This lives in the first text subsection. *"
.text 1
.ascii "But this lives in the second text subsection."
.data 0
.ascii "This lives in the data section,"
.ascii "in the first data subsection."
.text 0
.ascii "This lives in the first text section,"
.ascii "immediately following the asterisk (*)."
@end smallexample

Each section has a @dfn{location counter} incremented by one for every byte
assembled into that section.  Because subsections are merely a convenience
restricted to @command{@value{AS}} there is no concept of a subsection location
counter.  There is no way to directly manipulate a location counter---but the
@code{.align} directive changes it, and any label definition captures its
current value.  The location counter of the section where statements are being
assembled is said to be the @dfn{active} location counter.

@node bss
@section bss Section

@cindex bss section
@cindex common variable storage
The bss section is used for local common variable storage.
You may allocate address space in the bss section, but you may
not dictate data to load into it before your program executes.  When
your program starts running, all the contents of the bss
section are zeroed bytes.

The @code{.lcomm} pseudo-op defines a symbol in the bss section; see
@ref{Lcomm,,@code{.lcomm}}.

The @code{.comm} pseudo-op may be used to declare a common symbol, which is
another form of uninitialized symbol; see @xref{Comm,,@code{.comm}}.

@ifset GENERIC
When assembling for a target which supports multiple sections, such as ELF or
COFF, you may switch into the @code{.bss} section and define symbols as usual;
see @ref{Section,,@code{.section}}.  You may only assemble zero values into the
section.  Typically the section will only contain symbol definitions and
@code{.skip} directives (@pxref{Skip,,@code{.skip}}).
@end ifset

@node Symbols
@chapter Symbols

@cindex symbols
Symbols are a central concept: the programmer uses symbols to name
things, the linker uses symbols to link, and the debugger uses symbols
to debug.

@quotation
@cindex debuggers, and symbol order
@emph{Warning:} @command{@value{AS}} does not place symbols in the object file in
the same order they were declared.  This may break some debuggers.
@end quotation

@menu
* Labels::                      Labels
* Setting Symbols::             Giving Symbols Other Values
* Symbol Names::                Symbol Names
* Dot::                         The Special Dot Symbol
* Symbol Attributes::           Symbol Attributes
@end menu

@node Labels
@section Labels

@cindex labels
A @dfn{label} is written as a symbol immediately followed by a colon
@samp{:}.  The symbol then represents the current value of the
active location counter, and is, for example, a suitable instruction
operand.  You are warned if you use the same symbol to represent two
different locations: the first definition overrides any other
definitions.

@ifset HPPA
On the HPPA, the usual form for a label need not be immediately followed by a
colon, but instead must start in column zero.  Only one label may be defined on
a single line.  To work around this, the HPPA version of @command{@value{AS}} also
provides a special directive @code{.label} for defining labels more flexibly.
@end ifset

@node Setting Symbols
@section Giving Symbols Other Values

@cindex assigning values to symbols
@cindex symbol values, assigning
A symbol can be given an arbitrary value by writing a symbol, followed
by an equals sign @samp{=}, followed by an expression
(@pxref{Expressions}).  This is equivalent to using the @code{.set}
directive.  @xref{Set,,@code{.set}}.

@node Symbol Names
@section Symbol Names

@cindex symbol names
@cindex names, symbol
@ifclear SPECIAL-SYMS
Symbol names begin with a letter or with one of @samp{._}.  On most
machines, you can also use @code{$} in symbol names; exceptions are
noted in @ref{Machine Dependencies}.  That character may be followed by any
string of digits, letters, dollar signs (unless otherwise noted in
@ref{Machine Dependencies}), and underscores.
@end ifclear
@ifset A29K
For the AMD 29K family, @samp{?} is also allowed in the
body of a symbol name, though not at its beginning.
@end ifset

@ifset SPECIAL-SYMS
@ifset H8
Symbol names begin with a letter or with one of @samp{._}.  On the
Renesas SH or the H8/500, you can also use @code{$} in symbol names.  That
character may be followed by any string of digits, letters, dollar signs (save
on the H8/300), and underscores.
@end ifset
@end ifset

Case of letters is significant: @code{foo} is a different symbol name
than @code{Foo}.

Each symbol has exactly one name.  Each name in an assembly language program
refers to exactly one symbol.  You may use that symbol name any number of times
in a program.

@subheading Local Symbol Names

@cindex local symbol names
@cindex symbol names, local
@cindex temporary symbol names
@cindex symbol names, temporary
Local symbols help compilers and programmers use names temporarily.
They create symbols which are guaranteed to be unique over the entire scope of
the input source code and which can be referred to by a simple notation.
To define a local symbol, write a label of the form @samp{@b{N}:} (where @b{N}
represents any positive integer).  To refer to the most recent previous
definition of that symbol write @samp{@b{N}b}, using the same number as when
you defined the label.  To refer to the next definition of a local label, write
@samp{@b{N}f}--- The @samp{b} stands for``backwards'' and the @samp{f} stands
for ``forwards''.

There is no restriction on how you can use these labels, and you can reuse them
too.  So that it is possible to repeatedly define the same local label (using
the same number @samp{@b{N}}), although you can only refer to the most recently
defined local label of that number (for a backwards reference) or the next
definition of a specific local label for a forward reference.  It is also worth
noting that the first 10 local labels (@samp{@b{0:}}@dots{}@samp{@b{9:}}) are
implemented in a slightly more efficient manner than the others.

Here is an example:

@smallexample
1:        branch 1f
2:        branch 1b
1:        branch 2f
2:        branch 1b
@end smallexample

Which is the equivalent of:

@smallexample
label_1:  branch label_3
label_2:  branch label_1
label_3:  branch label_4
label_4:  branch label_3
@end smallexample

Local symbol names are only a notational device.  They are immediately
transformed into more conventional symbol names before the assembler uses them.
The symbol names stored in the symbol table, appearing in error messages and
optionally emitted to the object file.  The names are constructed using these
parts:

@table @code
@item L
All local labels begin with @samp{L}. Normally both @command{@value{AS}} and
@code{@value{LD}} forget symbols that start with @samp{L}. These labels are
used for symbols you are never intended to see.  If you use the
@samp{-L} option then @command{@value{AS}} retains these symbols in the
object file. If you also instruct @code{@value{LD}} to retain these symbols,
you may use them in debugging.

@item @var{number}
This is the number that was used in the local label definition.  So if the
label is written @samp{55:} then the number is @samp{55}. 

@item @kbd{C-B}
This unusual character is included so you do not accidentally invent a symbol
of the same name.  The character has ASCII value of @samp{\002} (control-B).

@item @emph{ordinal number}
This is a serial number to keep the labels distinct.  The first definition of
@samp{0:} gets the number @samp{1}.  The 15th definition of @samp{0:} gets the 
number @samp{15}, and so on.  Likewise the first definition of @samp{1:} gets
the number @samp{1} and its 15th defintion gets @samp{15} as well.
@end table

So for example, the first @code{1:} is named @code{L1@kbd{C-B}1}, the 44th
@code{3:} is named @code{L3@kbd{C-B}44}.

@subheading Dollar Local Labels
@cindex dollar local symbols

@code{@value{AS}} also supports an even more local form of local labels called
dollar labels.  These labels go out of scope (ie they become undefined) as soon
as a non-local label is defined.  Thus they remain valid for only a small
region of the input source code.  Normal local labels, by contrast, remain in
scope for the entire file, or until they are redefined by another occurrence of
the same local label.

Dollar labels are defined in exactly the same way as ordinary local labels,
except that instead of being terminated by a colon, they are terminated by a
dollar sign.  eg @samp{@b{55$}}.

They can also be distinguished from ordinary local labels by their transformed
name which uses ASCII character @samp{\001} (control-A) as the magic character
to distinguish them from ordinary labels.  Thus the 5th defintion of @samp{6$}
is named @samp{L6@kbd{C-A}5}.

@node Dot
@section The Special Dot Symbol

@cindex dot (symbol)
@cindex @code{.} (symbol)
@cindex current address
@cindex location counter
The special symbol @samp{.} refers to the current address that
@command{@value{AS}} is assembling into.  Thus, the expression @samp{melvin:
.long .} defines @code{melvin} to contain its own address.
Assigning a value to @code{.} is treated the same as a @code{.org}
directive.  Thus, the expression @samp{.=.+4} is the same as saying
@ifclear no-space-dir
@samp{.space 4}.
@end ifclear
@ifset no-space-dir
@ifset A29K
@samp{.block 4}.
@end ifset
@end ifset

@node Symbol Attributes
@section Symbol Attributes

@cindex symbol attributes
@cindex attributes, symbol
Every symbol has, as well as its name, the attributes ``Value'' and
``Type''.  Depending on output format, symbols can also have auxiliary
attributes.
@ifset INTERNALS
The detailed definitions are in @file{a.out.h}.
@end ifset

If you use a symbol without defining it, @command{@value{AS}} assumes zero for
all these attributes, and probably won't warn you.  This makes the
symbol an externally defined symbol, which is generally what you
would want.

@menu
* Symbol Value::                Value
* Symbol Type::                 Type
@ifset aout-bout
@ifset GENERIC
* a.out Symbols::               Symbol Attributes: @code{a.out}
@end ifset
@ifclear GENERIC
@ifclear BOUT
* a.out Symbols::               Symbol Attributes: @code{a.out}
@end ifclear
@ifset BOUT
* a.out Symbols::               Symbol Attributes: @code{a.out}, @code{b.out}
@end ifset
@end ifclear
@end ifset
@ifset COFF
* COFF Symbols::                Symbol Attributes for COFF
@end ifset
@ifset SOM
* SOM Symbols::                Symbol Attributes for SOM
@end ifset
@end menu

@node Symbol Value
@subsection Value

@cindex value of a symbol
@cindex symbol value
The value of a symbol is (usually) 32 bits.  For a symbol which labels a
location in the text, data, bss or absolute sections the value is the
number of addresses from the start of that section to the label.
Naturally for text, data and bss sections the value of a symbol changes
as @code{@value{LD}} changes section base addresses during linking.  Absolute
symbols' values do not change during linking: that is why they are
called absolute.

The value of an undefined symbol is treated in a special way.  If it is
0 then the symbol is not defined in this assembler source file, and
@code{@value{LD}} tries to determine its value from other files linked into the
same program.  You make this kind of symbol simply by mentioning a symbol
name without defining it.  A non-zero value represents a @code{.comm}
common declaration.  The value is how much common storage to reserve, in
bytes (addresses).  The symbol refers to the first address of the
allocated storage.

@node Symbol Type
@subsection Type

@cindex type of a symbol
@cindex symbol type
The type attribute of a symbol contains relocation (section)
information, any flag settings indicating that a symbol is external, and
(optionally), other information for linkers and debuggers.  The exact
format depends on the object-code output format in use.

@ifset aout-bout
@ifclear GENERIC
@ifset BOUT
@c The following avoids a "widow" subsection title.  @group would be
@c better if it were available outside examples.
@need 1000
@node a.out Symbols
@subsection Symbol Attributes: @code{a.out}, @code{b.out}

@cindex @code{b.out} symbol attributes
@cindex symbol attributes, @code{b.out}
These symbol attributes appear only when @command{@value{AS}} is configured for
one of the Berkeley-descended object output formats---@code{a.out} or
@code{b.out}.

@end ifset
@ifclear BOUT
@node a.out Symbols
@subsection Symbol Attributes: @code{a.out}

@cindex @code{a.out} symbol attributes
@cindex symbol attributes, @code{a.out}

@end ifclear
@end ifclear
@ifset GENERIC
@node a.out Symbols
@subsection Symbol Attributes: @code{a.out}

@cindex @code{a.out} symbol attributes
@cindex symbol attributes, @code{a.out}

@end ifset
@menu
* Symbol Desc::                 Descriptor
* Symbol Other::                Other
@end menu

@node Symbol Desc
@subsubsection Descriptor

@cindex descriptor, of @code{a.out} symbol
This is an arbitrary 16-bit value.  You may establish a symbol's
descriptor value by using a @code{.desc} statement
(@pxref{Desc,,@code{.desc}}).  A descriptor value means nothing to
@command{@value{AS}}.

@node Symbol Other
@subsubsection Other

@cindex other attribute, of @code{a.out} symbol
This is an arbitrary 8-bit value.  It means nothing to @command{@value{AS}}.
@end ifset

@ifset COFF
@node COFF Symbols
@subsection Symbol Attributes for COFF

@cindex COFF symbol attributes
@cindex symbol attributes, COFF

The COFF format supports a multitude of auxiliary symbol attributes;
like the primary symbol attributes, they are set between @code{.def} and
@code{.endef} directives.

@subsubsection Primary Attributes

@cindex primary attributes, COFF symbols
The symbol name is set with @code{.def}; the value and type,
respectively, with @code{.val} and @code{.type}.

@subsubsection Auxiliary Attributes

@cindex auxiliary attributes, COFF symbols
The @command{@value{AS}} directives @code{.dim}, @code{.line}, @code{.scl},
@code{.size}, and @code{.tag} can generate auxiliary symbol table
information for COFF.
@end ifset

@ifset SOM
@node SOM Symbols
@subsection Symbol Attributes for SOM

@cindex SOM symbol attributes
@cindex symbol attributes, SOM

The SOM format for the HPPA supports a multitude of symbol attributes set with
the @code{.EXPORT} and @code{.IMPORT} directives.

The attributes are described in @cite{HP9000 Series 800 Assembly 
Language Reference Manual} (HP 92432-90001) under the @code{IMPORT} and
@code{EXPORT} assembler directive documentation.
@end ifset

@node Expressions
@chapter Expressions

@cindex expressions
@cindex addresses
@cindex numeric values
An @dfn{expression} specifies an address or numeric value.
Whitespace may precede and/or follow an expression.

The result of an expression must be an absolute number, or else an offset into
a particular section.  If an expression is not absolute, and there is not
enough information when @command{@value{AS}} sees the expression to know its
section, a second pass over the source program might be necessary to interpret
the expression---but the second pass is currently not implemented.
@command{@value{AS}} aborts with an error message in this situation.

@menu
* Empty Exprs::                 Empty Expressions
* Integer Exprs::               Integer Expressions
@end menu

@node Empty Exprs
@section Empty Expressions

@cindex empty expressions
@cindex expressions, empty
An empty expression has no value: it is just whitespace or null.
Wherever an absolute expression is required, you may omit the
expression, and @command{@value{AS}} assumes a value of (absolute) 0.  This
is compatible with other assemblers.

@node Integer Exprs
@section Integer Expressions

@cindex integer expressions
@cindex expressions, integer
An @dfn{integer expression} is one or more @emph{arguments} delimited
by @emph{operators}.

@menu
* Arguments::                   Arguments
* Operators::                   Operators
* Prefix Ops::                  Prefix Operators
* Infix Ops::                   Infix Operators
@end menu

@node Arguments
@subsection Arguments

@cindex expression arguments
@cindex arguments in expressions
@cindex operands in expressions
@cindex arithmetic operands
@dfn{Arguments} are symbols, numbers or subexpressions.  In other
contexts arguments are sometimes called ``arithmetic operands''.  In
this manual, to avoid confusing them with the ``instruction operands'' of
the machine language, we use the term ``argument'' to refer to parts of
expressions only, reserving the word ``operand'' to refer only to machine
instruction operands.

Symbols are evaluated to yield @{@var{section} @var{NNN}@} where
@var{section} is one of text, data, bss, absolute,
or undefined.  @var{NNN} is a signed, 2's complement 32 bit
integer.

Numbers are usually integers.

A number can be a flonum or bignum.  In this case, you are warned
that only the low order 32 bits are used, and @command{@value{AS}} pretends
these 32 bits are an integer.  You may write integer-manipulating
instructions that act on exotic constants, compatible with other
assemblers.

@cindex subexpressions
Subexpressions are a left parenthesis @samp{(} followed by an integer
expression, followed by a right parenthesis @samp{)}; or a prefix
operator followed by an argument.

@node Operators
@subsection Operators

@cindex operators, in expressions
@cindex arithmetic functions
@cindex functions, in expressions
@dfn{Operators} are arithmetic functions, like @code{+} or @code{%}.  Prefix
operators are followed by an argument.  Infix operators appear
between their arguments.  Operators may be preceded and/or followed by
whitespace.

@node Prefix Ops
@subsection Prefix Operator

@cindex prefix operators
@command{@value{AS}} has the following @dfn{prefix operators}.  They each take
one argument, which must be absolute.

@c the tex/end tex stuff surrounding this small table is meant to make
@c it align, on the printed page, with the similar table in the next
@c section (which is inside an enumerate).
@tex
\global\advance\leftskip by \itemindent
@end tex

@table @code
@item -
@dfn{Negation}.  Two's complement negation.
@item ~
@dfn{Complementation}.  Bitwise not.
@end table

@tex
\global\advance\leftskip by -\itemindent
@end tex

@node Infix Ops
@subsection Infix Operators

@cindex infix operators
@cindex operators, permitted arguments
@dfn{Infix operators} take two arguments, one on either side.  Operators
have precedence, but operations with equal precedence are performed left
to right.  Apart from @code{+} or @option{-}, both arguments must be
absolute, and the result is absolute.

@enumerate
@cindex operator precedence
@cindex precedence of operators

@item
Highest Precedence

@table @code
@item *
@dfn{Multiplication}.

@item /
@dfn{Division}.  Truncation is the same as the C operator @samp{/}

@item %
@dfn{Remainder}.

@item <
@itemx <<
@dfn{Shift Left}.  Same as the C operator @samp{<<}.

@item >
@itemx >>
@dfn{Shift Right}.  Same as the C operator @samp{>>}.
@end table

@item
Intermediate precedence

@table @code
@item |

@dfn{Bitwise Inclusive Or}.

@item &
@dfn{Bitwise And}.

@item ^
@dfn{Bitwise Exclusive Or}.

@item !
@dfn{Bitwise Or Not}.
@end table

@item
Low Precedence

@table @code
@cindex addition, permitted arguments
@cindex plus, permitted arguments
@cindex arguments for addition
@item +
@dfn{Addition}.  If either argument is absolute, the result has the section of
the other argument.  You may not add together arguments from different
sections.

@cindex subtraction, permitted arguments
@cindex minus, permitted arguments
@cindex arguments for subtraction
@item -
@dfn{Subtraction}.  If the right argument is absolute, the
result has the section of the left argument.
If both arguments are in the same section, the result is absolute.
You may not subtract arguments from different sections.
@c FIXME is there still something useful to say about undefined - undefined ?

@cindex comparison expressions
@cindex expressions, comparison
@item  ==
@dfn{Is Equal To}
@item <>
@dfn{Is Not Equal To}
@item <
@dfn{Is Less Than}
@itemx >
@dfn{Is Greater Than}
@itemx >=
@dfn{Is Greater Than Or Equal To}
@itemx <=
@dfn{Is Less Than Or Equal To}

The comparison operators can be used as infix operators.  A true results has a
value of -1 whereas a false result has a value of 0.   Note, these operators
perform signed comparisons.
@end table

@item Lowest Precedence

@table @code
@item &&
@dfn{Logical And}.

@item ||
@dfn{Logical Or}.

These two logical operations can be used to combine the results of sub
expressions.  Note, unlike the comparison operators a true result returns a
value of 1 but a false results does still return 0.  Also note that the logical
or operator has a slightly lower precedence than logical and.

@end table
@end enumerate

In short, it's only meaningful to add or subtract the @emph{offsets} in an
address; you can only have a defined section in one of the two arguments.

@node Pseudo Ops
@chapter Assembler Directives

@cindex directives, machine independent
@cindex pseudo-ops, machine independent
@cindex machine independent directives
All assembler directives have names that begin with a period (@samp{.}).
The rest of the name is letters, usually in lower case.

This chapter discusses directives that are available regardless of the
target machine configuration for the @sc{gnu} assembler.
@ifset GENERIC
Some machine configurations provide additional directives.
@xref{Machine Dependencies}.
@end ifset
@ifclear GENERIC
@ifset machine-directives
@xref{Machine Dependencies} for additional directives.
@end ifset
@end ifclear

@menu
* Abort::                       @code{.abort}
@ifset COFF
* ABORT::                       @code{.ABORT}
@end ifset

* Align::                       @code{.align @var{abs-expr} , @var{abs-expr}}
* Ascii::                       @code{.ascii "@var{string}"}@dots{}
* Asciz::                       @code{.asciz "@var{string}"}@dots{}
* Balign::                      @code{.balign @var{abs-expr} , @var{abs-expr}}
* Byte::                        @code{.byte @var{expressions}}
* Comm::                        @code{.comm @var{symbol} , @var{length} }

* CFI directives::		@code{.cfi_startproc}, @code{.cfi_endproc}, etc.

* Data::                        @code{.data @var{subsection}}
@ifset COFF
* Def::                         @code{.def @var{name}}
@end ifset
@ifset aout-bout
* Desc::                        @code{.desc @var{symbol}, @var{abs-expression}}
@end ifset
@ifset COFF
* Dim::                         @code{.dim}
@end ifset

* Double::                      @code{.double @var{flonums}}
* Eject::                       @code{.eject}
* Else::                        @code{.else}
* Elseif::                      @code{.elseif}
* End::				@code{.end}
@ifset COFF
* Endef::                       @code{.endef}
@end ifset

* Endfunc::                     @code{.endfunc}
* Endif::                       @code{.endif}
* Equ::                         @code{.equ @var{symbol}, @var{expression}}
* Equiv::                       @code{.equiv @var{symbol}, @var{expression}}
* Err::				@code{.err}
* Exitm::			@code{.exitm}
* Extern::                      @code{.extern}
* Fail::			@code{.fail}
@ifclear no-file-dir
* File::                        @code{.file @var{string}}
@end ifclear

* Fill::                        @code{.fill @var{repeat} , @var{size} , @var{value}}
* Float::                       @code{.float @var{flonums}}
* Func::                        @code{.func}  
* Global::                      @code{.global @var{symbol}}, @code{.globl @var{symbol}}
@ifset ELF
* Hidden::                      @code{.hidden @var{names}}
@end ifset

* hword::                       @code{.hword @var{expressions}}
* Ident::                       @code{.ident}
* If::                          @code{.if @var{absolute expression}}
* Incbin::                      @code{.incbin "@var{file}"[,@var{skip}[,@var{count}]]}
* Include::                     @code{.include "@var{file}"}
* Int::                         @code{.int @var{expressions}}
@ifset ELF
* Internal::                    @code{.internal @var{names}}
@end ifset

* Irp::				@code{.irp @var{symbol},@var{values}}@dots{}
* Irpc::			@code{.irpc @var{symbol},@var{values}}@dots{}
* Lcomm::                       @code{.lcomm @var{symbol} , @var{length}}
* Lflags::                      @code{.lflags}
@ifclear no-line-dir
* Line::                        @code{.line @var{line-number}}
@end ifclear

* Ln::                          @code{.ln @var{line-number}}
* Linkonce::			@code{.linkonce [@var{type}]}
* List::                        @code{.list}
* Long::                        @code{.long @var{expressions}}
@ignore
* Lsym::                        @code{.lsym @var{symbol}, @var{expression}}
@end ignore

* Macro::			@code{.macro @var{name} @var{args}}@dots{}
* MRI::				@code{.mri @var{val}}
* Nolist::                      @code{.nolist}
* Octa::                        @code{.octa @var{bignums}}
* Org::                         @code{.org @var{new-lc} , @var{fill}}
* P2align::                     @code{.p2align @var{abs-expr} , @var{abs-expr}}
@ifset ELF
* PopSection::                  @code{.popsection}
* Previous::                    @code{.previous}
@end ifset

* Print::			@code{.print @var{string}}
@ifset ELF
* Protected::                   @code{.protected @var{names}}
@end ifset

* Psize::                       @code{.psize @var{lines}, @var{columns}}
* Purgem::			@code{.purgem @var{name}}
@ifset ELF
* PushSection::                 @code{.pushsection @var{name}}
@end ifset

* Quad::                        @code{.quad @var{bignums}}
* Rept::			@code{.rept @var{count}}
* Sbttl::                       @code{.sbttl "@var{subheading}"}
@ifset COFF
* Scl::                         @code{.scl @var{class}}
@end ifset
@ifset COFF-ELF
* Section::                     @code{.section @var{name}}
@end ifset

* Set::                         @code{.set @var{symbol}, @var{expression}}
* Short::                       @code{.short @var{expressions}}
* Single::                      @code{.single @var{flonums}}
@ifset COFF-ELF
* Size::                        @code{.size [@var{name} , @var{expression}]}
@end ifset

* Skip::                        @code{.skip @var{size} , @var{fill}}
* Sleb128::			@code{.sleb128 @var{expressions}}
* Space::                       @code{.space @var{size} , @var{fill}}
@ifset have-stabs
* Stab::                        @code{.stabd, .stabn, .stabs}
@end ifset

* String::                      @code{.string "@var{str}"}
* Struct::			@code{.struct @var{expression}}
@ifset ELF
* SubSection::                  @code{.subsection}
* Symver::                      @code{.symver @var{name},@var{name2@@nodename}}
@end ifset

@ifset COFF
* Tag::                         @code{.tag @var{structname}}
@end ifset

* Text::                        @code{.text @var{subsection}}
* Title::                       @code{.title "@var{heading}"}
@ifset COFF-ELF
* Type::                        @code{.type <@var{int} | @var{name} , @var{type description}>}
@end ifset

* Uleb128::                     @code{.uleb128 @var{expressions}}
@ifset COFF
* Val::                         @code{.val @var{addr}}
@end ifset

@ifset ELF
* Version::                     @code{.version "@var{string}"}
* VTableEntry::                 @code{.vtable_entry @var{table}, @var{offset}}
* VTableInherit::               @code{.vtable_inherit @var{child}, @var{parent}}
* Weak::                        @code{.weak @var{names}}
@end ifset

* Word::                        @code{.word @var{expressions}}
* Deprecated::                  Deprecated Directives
@end menu

@node Abort
@section @code{.abort}

@cindex @code{abort} directive
@cindex stopping the assembly
This directive stops the assembly immediately.  It is for
compatibility with other assemblers.  The original idea was that the
assembly language source would be piped into the assembler.  If the sender
of the source quit, it could use this directive tells @command{@value{AS}} to
quit also.  One day @code{.abort} will not be supported.

@ifset COFF
@node ABORT
@section @code{.ABORT}

@cindex @code{ABORT} directive
When producing COFF output, @command{@value{AS}} accepts this directive as a
synonym for @samp{.abort}.

@ifset BOUT
When producing @code{b.out} output, @command{@value{AS}} accepts this directive,
but ignores it.
@end ifset
@end ifset

@node Align
@section @code{.align @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}

@cindex padding the location counter
@cindex @code{align} directive
Pad the location counter (in the current subsection) to a particular storage
boundary.  The first expression (which must be absolute) is the alignment
required, as described below.

The second expression (also absolute) gives the fill value to be stored in the
padding bytes.  It (and the comma) may be omitted.  If it is omitted, the
padding bytes are normally zero.  However, on some systems, if the section is
marked as containing code and the fill value is omitted, the space is filled
with no-op instructions.

The third expression is also absolute, and is also optional.  If it is present,
it is the maximum number of bytes that should be skipped by this alignment
directive.  If doing the alignment would require skipping more bytes than the
specified maximum, then the alignment is not done at all.  You can omit the
fill value (the second argument) entirely by simply using two commas after the
required alignment; this can be useful if you want the alignment to be filled
with no-op instructions when appropriate.

The way the required alignment is specified varies from system to system.
For the a29k, arc, hppa, i386 using ELF, i860, iq2000, m68k, m88k, or32,
s390, sparc, tic4x, tic80 and xtensa, the first expression is the
alignment request in bytes.  For example @samp{.align 8} advances
the location counter until it is a multiple of 8.  If the location counter
is already a multiple of 8, no change is needed.  For the tic54x, the
first expression is the alignment request in words.

For other systems, including the i386 using a.out format, and the arm and
strongarm, it is the
number of low-order zero bits the location counter must have after
advancement.  For example @samp{.align 3} advances the location
counter until it a multiple of 8.  If the location counter is already a
multiple of 8, no change is needed.

This inconsistency is due to the different behaviors of the various
native assemblers for these systems which GAS must emulate.
GAS also provides @code{.balign} and @code{.p2align} directives,
described later, which have a consistent behavior across all
architectures (but are specific to GAS).

@node Ascii
@section @code{.ascii "@var{string}"}@dots{}

@cindex @code{ascii} directive
@cindex string literals
@code{.ascii} expects zero or more string literals (@pxref{Strings})
separated by commas.  It assembles each string (with no automatic
trailing zero byte) into consecutive addresses.

@node Asciz
@section @code{.asciz "@var{string}"}@dots{}

@cindex @code{asciz} directive
@cindex zero-terminated strings
@cindex null-terminated strings
@code{.asciz} is just like @code{.ascii}, but each string is followed by
a zero byte.  The ``z'' in @samp{.asciz} stands for ``zero''.

@node Balign
@section @code{.balign[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}

@cindex padding the location counter given number of bytes
@cindex @code{balign} directive
Pad the location counter (in the current subsection) to a particular
storage boundary.  The first expression (which must be absolute) is the
alignment request in bytes.  For example @samp{.balign 8} advances
the location counter until it is a multiple of 8.  If the location counter
is already a multiple of 8, no change is needed.

The second expression (also absolute) gives the fill value to be stored in the
padding bytes.  It (and the comma) may be omitted.  If it is omitted, the
padding bytes are normally zero.  However, on some systems, if the section is
marked as containing code and the fill value is omitted, the space is filled
with no-op instructions.

The third expression is also absolute, and is also optional.  If it is present,
it is the maximum number of bytes that should be skipped by this alignment
directive.  If doing the alignment would require skipping more bytes than the
specified maximum, then the alignment is not done at all.  You can omit the
fill value (the second argument) entirely by simply using two commas after the
required alignment; this can be useful if you want the alignment to be filled
with no-op instructions when appropriate.

@cindex @code{balignw} directive
@cindex @code{balignl} directive
The @code{.balignw} and @code{.balignl} directives are variants of the
@code{.balign} directive.  The @code{.balignw} directive treats the fill
pattern as a two byte word value.  The @code{.balignl} directives treats the
fill pattern as a four byte longword value.  For example, @code{.balignw
4,0x368d} will align to a multiple of 4.  If it skips two bytes, they will be
filled in with the value 0x368d (the exact placement of the bytes depends upon
the endianness of the processor).  If it skips 1 or 3 bytes, the fill value is
undefined.

@node Byte
@section @code{.byte @var{expressions}}

@cindex @code{byte} directive
@cindex integers, one byte
@code{.byte} expects zero or more expressions, separated by commas.
Each expression is assembled into the next byte.

@node Comm
@section @code{.comm @var{symbol} , @var{length} }

@cindex @code{comm} directive
@cindex symbol, common
@code{.comm} declares a common symbol named @var{symbol}.  When linking, a
common symbol in one object file may be merged with a defined or common symbol
of the same name in another object file.  If @code{@value{LD}} does not see a
definition for the symbol--just one or more common symbols--then it will
allocate @var{length} bytes of uninitialized memory.  @var{length} must be an
absolute expression.  If @code{@value{LD}} sees multiple common symbols with
the same name, and they do not all have the same size, it will allocate space
using the largest size.

@ifset ELF
When using ELF, the @code{.comm} directive takes an optional third argument.
This is the desired alignment of the symbol, specified as a byte boundary (for
example, an alignment of 16 means that the least significant 4 bits of the
address should be zero).  The alignment must be an absolute expression, and it
must be a power of two.  If @code{@value{LD}} allocates uninitialized memory
for the common symbol, it will use the alignment when placing the symbol.  If
no alignment is specified, @command{@value{AS}} will set the alignment to the
largest power of two less than or equal to the size of the symbol, up to a
maximum of 16.
@end ifset

@ifset HPPA
The syntax for @code{.comm} differs slightly on the HPPA.  The syntax is
@samp{@var{symbol} .comm, @var{length}}; @var{symbol} is optional.
@end ifset

@node CFI directives
@section @code{.cfi_startproc}
@cindex @code{cfi_startproc} directive
@code{.cfi_startproc} is used at the beginning of each function that
should have an entry in @code{.eh_frame}. It initializes some internal
data structures and emits architecture dependent initial CFI instructions.
Don't forget to close the function by 
@code{.cfi_endproc}.

@section @code{.cfi_endproc}
@cindex @code{cfi_endproc} directive
@code{.cfi_endproc} is used at the end of a function where it closes its
unwind entry previously opened by
@code{.cfi_startproc}. and emits it to @code{.eh_frame}.

@section @code{.cfi_def_cfa @var{register}, @var{offset}}
@code{.cfi_def_cfa} defines a rule for computing CFA as: @i{take 
address from @var{register} and add @var{offset} to it}.

@section @code{.cfi_def_cfa_register @var{register}}
@code{.cfi_def_cfa_register} modifies a rule for computing CFA. From
now on @var{register} will be used instead of the old one. Offset
remains the same.

@section @code{.cfi_def_cfa_offset @var{offset}}
@code{.cfi_def_cfa_offset} modifies a rule for computing CFA. Register
remains the same, but @var{offset} is new. Note that it is the
absolute offset that will be added to a defined register to compute
CFA address.

@section @code{.cfi_adjust_cfa_offset @var{offset}}
Same as @code{.cfi_def_cfa_offset} but @var{offset} is a relative
value that is added/substracted from the previous offset.

@section @code{.cfi_offset @var{register}, @var{offset}}
Previous value of @var{register} is saved at offset @var{offset} from
CFA. 

@section @code{.cfi_rel_offset @var{register}, @var{offset}}
Previous value of @var{register} is saved at offset @var{offset} from
the current CFA register.  This is transformed to @code{.cfi_offset}
using the known displacement of the CFA register from the CFA.
This is often easier to use, because the number will match the
code it's annotating.

@section @code{.cfi_window_save}
SPARC register window has been saved.

@section @code{.cfi_escape} @var{expression}[, @dots{}]
Allows the user to add arbitrary bytes to the unwind info.  One
might use this to add OS-specific CFI opcodes, or generic CFI
opcodes that GAS does not yet support.

@node Data
@section @code{.data @var{subsection}}

@cindex @code{data} directive
@code{.data} tells @command{@value{AS}} to assemble the following statements onto the
end of the data subsection numbered @var{subsection} (which is an
absolute expression).  If @var{subsection} is omitted, it defaults
to zero.

@ifset COFF
@node Def
@section @code{.def @var{name}}

@cindex @code{def} directive
@cindex COFF symbols, debugging
@cindex debugging COFF symbols
Begin defining debugging information for a symbol @var{name}; the
definition extends until the @code{.endef} directive is encountered.
@ifset BOUT

This directive is only observed when @command{@value{AS}} is configured for COFF
format output; when producing @code{b.out}, @samp{.def} is recognized,
but ignored.
@end ifset
@end ifset

@ifset aout-bout
@node Desc
@section @code{.desc @var{symbol}, @var{abs-expression}}

@cindex @code{desc} directive
@cindex COFF symbol descriptor
@cindex symbol descriptor, COFF
This directive sets the descriptor of the symbol (@pxref{Symbol Attributes})
to the low 16 bits of an absolute expression.

@ifset COFF
The @samp{.desc} directive is not available when @command{@value{AS}} is
configured for COFF output; it is only for @code{a.out} or @code{b.out}
object format.  For the sake of compatibility, @command{@value{AS}} accepts
it, but produces no output, when configured for COFF.
@end ifset
@end ifset

@ifset COFF
@node Dim
@section @code{.dim}

@cindex @code{dim} directive
@cindex COFF auxiliary symbol information
@cindex auxiliary symbol information, COFF
This directive is generated by compilers to include auxiliary debugging
information in the symbol table.  It is only permitted inside
@code{.def}/@code{.endef} pairs.
@ifset BOUT

@samp{.dim} is only meaningful when generating COFF format output; when
@command{@value{AS}} is generating @code{b.out}, it accepts this directive but
ignores it.
@end ifset
@end ifset

@node Double
@section @code{.double @var{flonums}}

@cindex @code{double} directive
@cindex floating point numbers (double)
@code{.double} expects zero or more flonums, separated by commas.  It
assembles floating point numbers.
@ifset GENERIC
The exact kind of floating point numbers emitted depends on how
@command{@value{AS}} is configured.  @xref{Machine Dependencies}.
@end ifset
@ifclear GENERIC
@ifset IEEEFLOAT
On the @value{TARGET} family @samp{.double} emits 64-bit floating-point numbers
in @sc{ieee} format.
@end ifset
@end ifclear

@node Eject
@section @code{.eject}

@cindex @code{eject} directive
@cindex new page, in listings
@cindex page, in listings
@cindex listing control: new page
Force a page break at this point, when generating assembly listings.

@node Else
@section @code{.else}

@cindex @code{else} directive
@code{.else} is part of the @command{@value{AS}} support for conditional
assembly; @pxref{If,,@code{.if}}.  It marks the beginning of a section
of code to be assembled if the condition for the preceding @code{.if}
was false.

@node Elseif
@section @code{.elseif}

@cindex @code{elseif} directive
@code{.elseif} is part of the @command{@value{AS}} support for conditional
assembly; @pxref{If,,@code{.if}}.  It is shorthand for beginning a new
@code{.if} block that would otherwise fill the entire @code{.else} section.

@node End
@section @code{.end}

@cindex @code{end} directive
@code{.end} marks the end of the assembly file.  @command{@value{AS}} does not
process anything in the file past the @code{.end} directive.

@ifset COFF
@node Endef
@section @code{.endef}

@cindex @code{endef} directive
This directive flags the end of a symbol definition begun with
@code{.def}.
@ifset BOUT

@samp{.endef} is only meaningful when generating COFF format output; if
@command{@value{AS}} is configured to generate @code{b.out}, it accepts this
directive but ignores it.
@end ifset
@end ifset

@node Endfunc
@section @code{.endfunc}
@cindex @code{endfunc} directive
@code{.endfunc} marks the end of a function specified with @code{.func}.

@node Endif
@section @code{.endif}

@cindex @code{endif} directive
@code{.endif} is part of the @command{@value{AS}} support for conditional assembly;
it marks the end of a block of code that is only assembled
conditionally.  @xref{If,,@code{.if}}.

@node Equ
@section @code{.equ @var{symbol}, @var{expression}}

@cindex @code{equ} directive
@cindex assigning values to symbols
@cindex symbols, assigning values to
This directive sets the value of @var{symbol} to @var{expression}.
It is synonymous with @samp{.set}; @pxref{Set,,@code{.set}}.

@ifset HPPA
The syntax for @code{equ} on the HPPA is 
@samp{@var{symbol} .equ @var{expression}}.
@end ifset

@node Equiv
@section @code{.equiv @var{symbol}, @var{expression}}
@cindex @code{equiv} directive
The @code{.equiv} directive is like @code{.equ} and @code{.set}, except that
the assembler will signal an error if @var{symbol} is already defined.  Note a
symbol which has been referenced but not actually defined is considered to be
undefined.

Except for the contents of the error message, this is roughly equivalent to 
@smallexample
.ifdef SYM
.err
.endif
.equ SYM,VAL
@end smallexample

@node Err
@section @code{.err}
@cindex @code{err} directive
If @command{@value{AS}} assembles a @code{.err} directive, it will print an error
message and, unless the @option{-Z} option was used, it will not generate an
object file.  This can be used to signal error an conditionally compiled code.

@node Exitm
@section @code{.exitm}
Exit early from the current macro definition.  @xref{Macro}.

@node Extern
@section @code{.extern}

@cindex @code{extern} directive
@code{.extern} is accepted in the source program---for compatibility
with other assemblers---but it is ignored.  @command{@value{AS}} treats
all undefined symbols as external.

@node Fail
@section @code{.fail @var{expression}}

@cindex @code{fail} directive
Generates an error or a warning.  If the value of the @var{expression} is 500
or more, @command{@value{AS}} will print a warning message.  If the value is less
than 500, @command{@value{AS}} will print an error message.  The message will
include the value of @var{expression}.  This can occasionally be useful inside
complex nested macros or conditional assembly.

@ifclear no-file-dir
@node File
@section @code{.file @var{string}}

@cindex @code{file} directive
@cindex logical file name
@cindex file name, logical
@code{.file} tells @command{@value{AS}} that we are about to start a new logical
file.  @var{string} is the new file name.  In general, the filename is
recognized whether or not it is surrounded by quotes @samp{"}; but if you wish
to specify an empty file name, you must give the quotes--@code{""}.  This
statement may go away in future: it is only recognized to be compatible with
old @command{@value{AS}} programs.
@ifset A29K
In some configurations of @command{@value{AS}}, @code{.file} has already been
removed to avoid conflicts with other assemblers.  @xref{Machine Dependencies}.
@end ifset
@end ifclear

@node Fill
@section @code{.fill @var{repeat} , @var{size} , @var{value}}

@cindex @code{fill} directive
@cindex writing patterns in memory
@cindex patterns, writing in memory
@var{repeat}, @var{size} and @var{value} are absolute expressions.
This emits @var{repeat} copies of @var{size} bytes.  @var{Repeat}
may be zero or more.  @var{Size} may be zero or more, but if it is
more than 8, then it is deemed to have the value 8, compatible with
other people's assemblers.  The contents of each @var{repeat} bytes
is taken from an 8-byte number.  The highest order 4 bytes are
zero.  The lowest order 4 bytes are @var{value} rendered in the
byte-order of an integer on the computer @command{@value{AS}} is assembling for.
Each @var{size} bytes in a repetition is taken from the lowest order
@var{size} bytes of this number.  Again, this bizarre behavior is
compatible with other people's assemblers.

@var{size} and @var{value} are optional.
If the second comma and @var{value} are absent, @var{value} is
assumed zero.  If the first comma and following tokens are absent,
@var{size} is assumed to be 1.

@node Float
@section @code{.float @var{flonums}}

@cindex floating point numbers (single)
@cindex @code{float} directive
This directive assembles zero or more flonums, separated by commas.  It
has the same effect as @code{.single}.
@ifset GENERIC
The exact kind of floating point numbers emitted depends on how
@command{@value{AS}} is configured.
@xref{Machine Dependencies}.
@end ifset
@ifclear GENERIC
@ifset IEEEFLOAT
On the @value{TARGET} family, @code{.float} emits 32-bit floating point numbers
in @sc{ieee} format.
@end ifset
@end ifclear

@node Func
@section @code{.func @var{name}[,@var{label}]}
@cindex @code{func} directive
@code{.func} emits debugging information to denote function @var{name}, and
is ignored unless the file is assembled with debugging enabled.
Only @samp{--gstabs[+]} is currently supported.
@var{label} is the entry point of the function and if omitted @var{name}
prepended with the @samp{leading char} is used.
@samp{leading char} is usually @code{_} or nothing, depending on the target.
All functions are currently defined to have @code{void} return type.
The function must be terminated with @code{.endfunc}.

@node Global
@section @code{.global @var{symbol}}, @code{.globl @var{symbol}}

@cindex @code{global} directive
@cindex symbol, making visible to linker
@code{.global} makes the symbol visible to @code{@value{LD}}.  If you define
@var{symbol} in your partial program, its value is made available to
other partial programs that are linked with it.  Otherwise,
@var{symbol} takes its attributes from a symbol of the same name
from another file linked into the same program.

Both spellings (@samp{.globl} and @samp{.global}) are accepted, for
compatibility with other assemblers.

@ifset HPPA
On the HPPA, @code{.global} is not always enough to make it accessible to other
partial programs.  You may need the HPPA-only @code{.EXPORT} directive as well.
@xref{HPPA Directives,, HPPA Assembler Directives}.
@end ifset

@ifset ELF
@node Hidden
@section @code{.hidden @var{names}}

@cindex @code{hidden} directive
@cindex visibility
This one of the ELF visibility directives.  The other two are
@code{.internal} (@pxref{Internal,,@code{.internal}}) and 
@code{.protected} (@pxref{Protected,,@code{.protected}}).

This directive overrides the named symbols default visibility (which is set by
their binding: local, global or weak).  The directive sets the visibility to
@code{hidden} which means that the symbols are not visible to other components.
Such symbols are always considered to be @code{protected} as well. 
@end ifset

@node hword
@section @code{.hword @var{expressions}}

@cindex @code{hword} directive
@cindex integers, 16-bit
@cindex numbers, 16-bit
@cindex sixteen bit integers
This expects zero or more @var{expressions}, and emits
a 16 bit number for each.

@ifset GENERIC
This directive is a synonym for @samp{.short}; depending on the target
architecture, it may also be a synonym for @samp{.word}.
@end ifset
@ifclear GENERIC
@ifset W32
This directive is a synonym for @samp{.short}.
@end ifset
@ifset W16
This directive is a synonym for both @samp{.short} and @samp{.word}.
@end ifset
@end ifclear

@node Ident
@section @code{.ident}

@cindex @code{ident} directive
This directive is used by some assemblers to place tags in object files.
@command{@value{AS}} simply accepts the directive for source-file
compatibility with such assemblers, but does not actually emit anything
for it.

@node If
@section @code{.if @var{absolute expression}}

@cindex conditional assembly
@cindex @code{if} directive
@code{.if} marks the beginning of a section of code which is only
considered part of the source program being assembled if the argument
(which must be an @var{absolute expression}) is non-zero.  The end of
the conditional section of code must be marked by @code{.endif}
(@pxref{Endif,,@code{.endif}}); optionally, you may include code for the
alternative condition, flagged by @code{.else} (@pxref{Else,,@code{.else}}).
If you have several conditions to check, @code{.elseif} may be used to avoid
nesting blocks if/else within each subsequent @code{.else} block.

The following variants of @code{.if} are also supported:
@table @code
@cindex @code{ifdef} directive
@item .ifdef @var{symbol}
Assembles the following section of code if the specified @var{symbol}
has been defined.  Note a symbol which has been referenced but not yet defined
is considered to be undefined.

@cindex @code{ifc} directive
@item .ifc @var{string1},@var{string2}
Assembles the following section of code if the two strings are the same.  The
strings may be optionally quoted with single quotes.  If they are not quoted,
the first string stops at the first comma, and the second string stops at the
end of the line.  Strings which contain whitespace should be quoted.  The
string comparison is case sensitive.

@cindex @code{ifeq} directive
@item .ifeq @var{absolute expression}
Assembles the following section of code if the argument is zero.

@cindex @code{ifeqs} directive
@item .ifeqs @var{string1},@var{string2}
Another form of @code{.ifc}.  The strings must be quoted using double quotes.

@cindex @code{ifge} directive
@item .ifge @var{absolute expression}
Assembles the following section of code if the argument is greater than or
equal to zero.

@cindex @code{ifgt} directive
@item .ifgt @var{absolute expression}
Assembles the following section of code if the argument is greater than zero.

@cindex @code{ifle} directive
@item .ifle @var{absolute expression}
Assembles the following section of code if the argument is less than or equal
to zero.

@cindex @code{iflt} directive
@item .iflt @var{absolute expression}
Assembles the following section of code if the argument is less than zero.

@cindex @code{ifnc} directive
@item .ifnc @var{string1},@var{string2}.
Like @code{.ifc}, but the sense of the test is reversed: this assembles the
following section of code if the two strings are not the same.

@cindex @code{ifndef} directive
@cindex @code{ifnotdef} directive
@item .ifndef @var{symbol}
@itemx .ifnotdef @var{symbol}
Assembles the following section of code if the specified @var{symbol}
has not been defined.  Both spelling variants are equivalent.  Note a symbol
which has been referenced but not yet defined is considered to be undefined.

@cindex @code{ifne} directive
@item .ifne @var{absolute expression}
Assembles the following section of code if the argument is not equal to zero
(in other words, this is equivalent to @code{.if}).

@cindex @code{ifnes} directive
@item .ifnes @var{string1},@var{string2}
Like @code{.ifeqs}, but the sense of the test is reversed: this assembles the
following section of code if the two strings are not the same.
@end table

@node Incbin
@section @code{.incbin "@var{file}"[,@var{skip}[,@var{count}]]}

@cindex @code{incbin} directive
@cindex binary files, including
The @code{incbin} directive includes @var{file} verbatim at the current
location. You can control the search paths used with the @samp{-I} command-line
option (@pxref{Invoking,,Command-Line Options}).  Quotation marks are required
around @var{file}.

The @var{skip} argument skips a number of bytes from the start of the
@var{file}.  The @var{count} argument indicates the maximum number of bytes to
read.  Note that the data is not aligned in any way, so it is the user's
responsibility to make sure that proper alignment is provided both before and
after the @code{incbin} directive.

@node Include
@section @code{.include "@var{file}"}

@cindex @code{include} directive
@cindex supporting files, including
@cindex files, including
This directive provides a way to include supporting files at specified
points in your source program.  The code from @var{file} is assembled as
if it followed the point of the @code{.include}; when the end of the
included file is reached, assembly of the original file continues.  You
can control the search paths used with the @samp{-I} command-line option
(@pxref{Invoking,,Command-Line Options}).  Quotation marks are required
around @var{file}.

@node Int
@section @code{.int @var{expressions}}

@cindex @code{int} directive
@cindex integers, 32-bit
Expect zero or more @var{expressions}, of any section, separated by commas.
For each expression, emit a number that, at run time, is the value of that
expression.  The byte order and bit size of the number depends on what kind
of target the assembly is for.

@ifclear GENERIC
@ifset H8
On the H8/500 and most forms of the H8/300, @code{.int} emits 16-bit
integers.  On the H8/300H and the Renesas SH, however, @code{.int} emits
32-bit integers.
@end ifset
@end ifclear

@ifset ELF
@node Internal
@section @code{.internal @var{names}}

@cindex @code{internal} directive
@cindex visibility
This one of the ELF visibility directives.  The other two are
@code{.hidden} (@pxref{Hidden,,@code{.hidden}}) and 
@code{.protected} (@pxref{Protected,,@code{.protected}}).

This directive overrides the named symbols default visibility (which is set by
their binding: local, global or weak).  The directive sets the visibility to
@code{internal} which means that the symbols are considered to be @code{hidden}
(i.e., not visible to other components), and that some extra, processor specific
processing must also be performed upon the  symbols as well.
@end ifset

@node Irp
@section @code{.irp @var{symbol},@var{values}}@dots{}

@cindex @code{irp} directive
Evaluate a sequence of statements assigning different values to @var{symbol}.
The sequence of statements starts at the @code{.irp} directive, and is
terminated by an @code{.endr} directive.  For each @var{value}, @var{symbol} is
set to @var{value}, and the sequence of statements is assembled.  If no
@var{value} is listed, the sequence of statements is assembled once, with
@var{symbol} set to the null string.  To refer to @var{symbol} within the
sequence of statements, use @var{\symbol}.

For example, assembling

@example
        .irp    param,1,2,3
        move    d\param,sp@@-
        .endr
@end example

is equivalent to assembling

@example
        move    d1,sp@@-
        move    d2,sp@@-
        move    d3,sp@@-
@end example

@node Irpc
@section @code{.irpc @var{symbol},@var{values}}@dots{}

@cindex @code{irpc} directive
Evaluate a sequence of statements assigning different values to @var{symbol}.
The sequence of statements starts at the @code{.irpc} directive, and is
terminated by an @code{.endr} directive.  For each character in @var{value},
@var{symbol} is set to the character, and the sequence of statements is
assembled.  If no @var{value} is listed, the sequence of statements is
assembled once, with @var{symbol} set to the null string.  To refer to
@var{symbol} within the sequence of statements, use @var{\symbol}.

For example, assembling

@example
        .irpc    param,123
        move    d\param,sp@@-
        .endr
@end example

is equivalent to assembling

@example
        move    d1,sp@@-
        move    d2,sp@@-
        move    d3,sp@@-
@end example

@node Lcomm
@section @code{.lcomm @var{symbol} , @var{length}}

@cindex @code{lcomm} directive
@cindex local common symbols
@cindex symbols, local common
Reserve @var{length} (an absolute expression) bytes for a local common
denoted by @var{symbol}.  The section and value of @var{symbol} are
those of the new local common.  The addresses are allocated in the bss
section, so that at run-time the bytes start off zeroed.  @var{Symbol}
is not declared global (@pxref{Global,,@code{.global}}), so is normally
not visible to @code{@value{LD}}.

@ifset GENERIC
Some targets permit a third argument to be used with @code{.lcomm}.  This
argument specifies the desired alignment of the symbol in the bss section.
@end ifset

@ifset HPPA
The syntax for @code{.lcomm} differs slightly on the HPPA.  The syntax is
@samp{@var{symbol} .lcomm, @var{length}}; @var{symbol} is optional.
@end ifset

@node Lflags
@section @code{.lflags}

@cindex @code{lflags} directive (ignored)
@command{@value{AS}} accepts this directive, for compatibility with other
assemblers, but ignores it.

@ifclear no-line-dir
@node Line
@section @code{.line @var{line-number}}

@cindex @code{line} directive
@end ifclear
@ifset no-line-dir
@node Ln
@section @code{.ln @var{line-number}}

@cindex @code{ln} directive
@end ifset
@cindex logical line number
@ifset aout-bout
Change the logical line number.  @var{line-number} must be an absolute
expression.  The next line has that logical line number.  Therefore any other
statements on the current line (after a statement separator character) are
reported as on logical line number @var{line-number} @minus{} 1.  One day
@command{@value{AS}} will no longer support this directive: it is recognized only
for compatibility with existing assembler programs.

@ifset GENERIC
@ifset A29K
@emph{Warning:} In the AMD29K configuration of @value{AS}, this command is
not available; use the synonym @code{.ln} in that context.
@end ifset
@end ifset
@end ifset

@ifclear no-line-dir
Even though this is a directive associated with the @code{a.out} or
@code{b.out} object-code formats, @command{@value{AS}} still recognizes it
when producing COFF output, and treats @samp{.line} as though it
were the COFF @samp{.ln} @emph{if} it is found outside a
@code{.def}/@code{.endef} pair.

Inside a @code{.def}, @samp{.line} is, instead, one of the directives
used by compilers to generate auxiliary symbol information for
debugging.
@end ifclear

@node Linkonce
@section @code{.linkonce [@var{type}]}
@cindex COMDAT
@cindex @code{linkonce} directive
@cindex common sections
Mark the current section so that the linker only includes a single copy of it.
This may be used to include the same section in several different object files,
but ensure that the linker will only include it once in the final output file.
The @code{.linkonce} pseudo-op must be used for each instance of the section.
Duplicate sections are detected based on the section name, so it should be
unique.

This directive is only supported by a few object file formats; as of this
writing, the only object file format which supports it is the Portable
Executable format used on Windows NT.

The @var{type} argument is optional.  If specified, it must be one of the
following strings.  For example:
@smallexample
.linkonce same_size
@end smallexample
Not all types may be supported on all object file formats.

@table @code
@item discard
Silently discard duplicate sections.  This is the default.

@item one_only
Warn if there are duplicate sections, but still keep only one copy.

@item same_size
Warn if any of the duplicates have different sizes.

@item same_contents
Warn if any of the duplicates do not have exactly the same contents.
@end table

@node Ln
@section @code{.ln @var{line-number}}

@cindex @code{ln} directive
@ifclear no-line-dir
@samp{.ln} is a synonym for @samp{.line}.
@end ifclear
@ifset no-line-dir
Tell @command{@value{AS}} to change the logical line number.  @var{line-number}
must be an absolute expression.  The next line has that logical
line number, so any other statements on the current line (after a
statement separator character @code{;}) are reported as on logical
line number @var{line-number} @minus{} 1.
@ifset BOUT

This directive is accepted, but ignored, when @command{@value{AS}} is
configured for @code{b.out}; its effect is only associated with COFF
output format.
@end ifset
@end ifset

@node MRI
@section @code{.mri @var{val}}

@cindex @code{mri} directive
@cindex MRI mode, temporarily
If @var{val} is non-zero, this tells @command{@value{AS}} to enter MRI mode.  If
@var{val} is zero, this tells @command{@value{AS}} to exit MRI mode.  This change
affects code assembled until the next @code{.mri} directive, or until the end
of the file.  @xref{M, MRI mode, MRI mode}.

@node List
@section @code{.list}

@cindex @code{list} directive
@cindex listing control, turning on
Control (in conjunction with the @code{.nolist} directive) whether or
not assembly listings are generated.  These two directives maintain an
internal counter (which is zero initially).   @code{.list} increments the
counter, and @code{.nolist} decrements it.  Assembly listings are
generated whenever the counter is greater than zero.

By default, listings are disabled.  When you enable them (with the
@samp{-a} command line option; @pxref{Invoking,,Command-Line Options}),
the initial value of the listing counter is one.

@node Long
@section @code{.long @var{expressions}}

@cindex @code{long} directive
@code{.long} is the same as @samp{.int}, @pxref{Int,,@code{.int}}.

@ignore
@c no one seems to know what this is for or whether this description is
@c what it really ought to do
@node Lsym
@section @code{.lsym @var{symbol}, @var{expression}}

@cindex @code{lsym} directive
@cindex symbol, not referenced in assembly
@code{.lsym} creates a new symbol named @var{symbol}, but does not put it in
the hash table, ensuring it cannot be referenced by name during the
rest of the assembly.  This sets the attributes of the symbol to be
the same as the expression value:
@smallexample
@var{other} = @var{descriptor} = 0
@var{type} = @r{(section of @var{expression})}
@var{value} = @var{expression}
@end smallexample
@noindent
The new symbol is not flagged as external.
@end ignore

@node Macro
@section @code{.macro}

@cindex macros
The commands @code{.macro} and @code{.endm} allow you to define macros that
generate assembly output.  For example, this definition specifies a macro
@code{sum} that puts a sequence of numbers into memory:

@example
        .macro  sum from=0, to=5
        .long   \from
        .if     \to-\from
        sum     "(\from+1)",\to
        .endif
        .endm
@end example

@noindent
With that definition, @samp{SUM 0,5} is equivalent to this assembly input:

@example
        .long   0
        .long   1
        .long   2
        .long   3
        .long   4
        .long   5
@end example

@ftable @code
@item .macro @var{macname}
@itemx .macro @var{macname} @var{macargs} @dots{}
@cindex @code{macro} directive
Begin the definition of a macro called @var{macname}.  If your macro
definition requires arguments, specify their names after the macro name,
separated by commas or spaces.  You can supply a default value for any
macro argument by following the name with @samp{=@var{deflt}}.  For
example, these are all valid @code{.macro} statements:

@table @code
@item .macro comm
Begin the definition of a macro called @code{comm}, which takes no
arguments.

@item .macro plus1 p, p1
@itemx .macro plus1 p p1
Either statement begins the definition of a macro called @code{plus1},
which takes two arguments; within the macro definition, write
@samp{\p} or @samp{\p1} to evaluate the arguments.

@item .macro reserve_str p1=0 p2
Begin the definition of a macro called @code{reserve_str}, with two
arguments.  The first argument has a default value, but not the second.
After the definition is complete, you can call the macro either as
@samp{reserve_str @var{a},@var{b}} (with @samp{\p1} evaluating to
@var{a} and @samp{\p2} evaluating to @var{b}), or as @samp{reserve_str
,@var{b}} (with @samp{\p1} evaluating as the default, in this case
@samp{0}, and @samp{\p2} evaluating to @var{b}).
@end table

When you call a macro, you can specify the argument values either by
position, or by keyword.  For example, @samp{sum 9,17} is equivalent to
@samp{sum to=17, from=9}.

@item .endm
@cindex @code{endm} directive
Mark the end of a macro definition.

@item .exitm
@cindex @code{exitm} directive
Exit early from the current macro definition.

@cindex number of macros executed
@cindex macros, count executed
@item \@@
@command{@value{AS}} maintains a counter of how many macros it has
executed in this pseudo-variable; you can copy that number to your
output with @samp{\@@}, but @emph{only within a macro definition}.

@ignore
@item LOCAL @var{name} [ , @dots{} ]
@emph{Warning: @code{LOCAL} is only available if you select ``alternate
macro syntax'' with @samp{-a} or @samp{--alternate}.}  @xref{Alternate,,
Alternate macro syntax}.

Generate a string replacement for each of the @var{name} arguments, and
replace any instances of @var{name} in each macro expansion.  The
replacement string is unique in the assembly, and different for each
separate macro expansion.  @code{LOCAL} allows you to write macros that
define symbols, without fear of conflict between separate macro expansions.
@end ignore
@end ftable

@node Nolist
@section @code{.nolist}

@cindex @code{nolist} directive
@cindex listing control, turning off
Control (in conjunction with the @code{.list} directive) whether or
not assembly listings are generated.  These two directives maintain an
internal counter (which is zero initially).   @code{.list} increments the
counter, and @code{.nolist} decrements it.  Assembly listings are
generated whenever the counter is greater than zero.

@node Octa
@section @code{.octa @var{bignums}}

@c FIXME: double size emitted for "octa" on i960, others?  Or warn?
@cindex @code{octa} directive
@cindex integer, 16-byte
@cindex sixteen byte integer
This directive expects zero or more bignums, separated by commas.  For each
bignum, it emits a 16-byte integer.

The term ``octa'' comes from contexts in which a ``word'' is two bytes;
hence @emph{octa}-word for 16 bytes.

@node Org
@section @code{.org @var{new-lc} , @var{fill}}

@cindex @code{org} directive
@cindex location counter, advancing
@cindex advancing location counter
@cindex current address, advancing
Advance the location counter of the current section to
@var{new-lc}.  @var{new-lc} is either an absolute expression or an
expression with the same section as the current subsection.  That is,
you can't use @code{.org} to cross sections: if @var{new-lc} has the
wrong section, the @code{.org} directive is ignored.  To be compatible
with former assemblers, if the section of @var{new-lc} is absolute,
@command{@value{AS}} issues a warning, then pretends the section of @var{new-lc}
is the same as the current subsection.

@code{.org} may only increase the location counter, or leave it
unchanged; you cannot use @code{.org} to move the location counter
backwards.

@c double negative used below "not undefined" because this is a specific
@c reference to "undefined" (as SEG_UNKNOWN is called in this manual)
@c section. doc@cygnus.com 18feb91
Because @command{@value{AS}} tries to assemble programs in one pass, @var{new-lc}
may not be undefined.  If you really detest this restriction we eagerly await
a chance to share your improved assembler.

Beware that the origin is relative to the start of the section, not
to the start of the subsection.  This is compatible with other
people's assemblers.

When the location counter (of the current subsection) is advanced, the
intervening bytes are filled with @var{fill} which should be an
absolute expression.  If the comma and @var{fill} are omitted,
@var{fill} defaults to zero.

@node P2align
@section @code{.p2align[wl] @var{abs-expr}, @var{abs-expr}, @var{abs-expr}}

@cindex padding the location counter given a power of two
@cindex @code{p2align} directive
Pad the location counter (in the current subsection) to a particular
storage boundary.  The first expression (which must be absolute) is the
number of low-order zero bits the location counter must have after
advancement.  For example @samp{.p2align 3} advances the location
counter until it a multiple of 8.  If the location counter is already a
multiple of 8, no change is needed.

The second expression (also absolute) gives the fill value to be stored in the
padding bytes.  It (and the comma) may be omitted.  If it is omitted, the
padding bytes are normally zero.  However, on some systems, if the section is
marked as containing code and the fill value is omitted, the space is filled
with no-op instructions.

The third expression is also absolute, and is also optional.  If it is present,
it is the maximum number of bytes that should be skipped by this alignment
directive.  If doing the alignment would require skipping more bytes than the
specified maximum, then the alignment is not done at all.  You can omit the
fill value (the second argument) entirely by simply using two commas after the
required alignment; this can be useful if you want the alignment to be filled
with no-op instructions when appropriate.

@cindex @code{p2alignw} directive
@cindex @code{p2alignl} directive
The @code{.p2alignw} and @code{.p2alignl} directives are variants of the
@code{.p2align} directive.  The @code{.p2alignw} directive treats the fill
pattern as a two byte word value.  The @code{.p2alignl} directives treats the
fill pattern as a four byte longword value.  For example, @code{.p2alignw
2,0x368d} will align to a multiple of 4.  If it skips two bytes, they will be
filled in with the value 0x368d (the exact placement of the bytes depends upon
the endianness of the processor).  If it skips 1 or 3 bytes, the fill value is
undefined.

@ifset ELF
@node Previous
@section @code{.previous}

@cindex @code{previous} directive
@cindex Section Stack
This is one of the ELF section stack manipulation directives.  The others are
@code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}),
@code{.pushsection} (@pxref{PushSection}), and @code{.popsection}
(@pxref{PopSection}).

This directive swaps the current section (and subsection) with most recently
referenced section (and subsection) prior to this one.  Multiple
@code{.previous} directives in a row will flip between two sections (and their
subsections).

In terms of the section stack, this directive swaps the current section with
the top section on the section stack.
@end ifset

@ifset ELF
@node PopSection
@section @code{.popsection}

@cindex @code{popsection} directive
@cindex Section Stack
This is one of the ELF section stack manipulation directives.  The others are
@code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}), 
@code{.pushsection} (@pxref{PushSection}), and @code{.previous} 
(@pxref{Previous}).

This directive replaces the current section (and subsection) with the top
section (and subsection) on the section stack.  This section is popped off the
stack. 
@end ifset

@node Print
@section @code{.print @var{string}}

@cindex @code{print} directive
@command{@value{AS}} will print @var{string} on the standard output during
assembly.  You must put @var{string} in double quotes.

@ifset ELF
@node Protected
@section @code{.protected @var{names}}

@cindex @code{protected} directive
@cindex visibility
This one of the ELF visibility directives.  The other two are
@code{.hidden} (@pxref{Hidden}) and @code{.internal} (@pxref{Internal}).

This directive overrides the named symbols default visibility (which is set by
their binding: local, global or weak).  The directive sets the visibility to
@code{protected} which means that any references to the symbols from within the
components that defines them must be resolved to the definition in that
component, even if a definition in another component would normally preempt
this. 
@end ifset

@node Psize
@section @code{.psize @var{lines} , @var{columns}}

@cindex @code{psize} directive
@cindex listing control: paper size
@cindex paper size, for listings
Use this directive to declare the number of lines---and, optionally, the
number of columns---to use for each page, when generating listings.

If you do not use @code{.psize}, listings use a default line-count
of 60.  You may omit the comma and @var{columns} specification; the
default width is 200 columns.

@command{@value{AS}} generates formfeeds whenever the specified number of
lines is exceeded (or whenever you explicitly request one, using
@code{.eject}).

If you specify @var{lines} as @code{0}, no formfeeds are generated save
those explicitly specified with @code{.eject}.

@node Purgem
@section @code{.purgem @var{name}}

@cindex @code{purgem} directive
Undefine the macro @var{name}, so that later uses of the string will not be
expanded.  @xref{Macro}.

@ifset ELF
@node PushSection
@section @code{.pushsection @var{name} , @var{subsection}}

@cindex @code{pushsection} directive
@cindex Section Stack
This is one of the ELF section stack manipulation directives.  The others are
@code{.section} (@pxref{Section}), @code{.subsection} (@pxref{SubSection}), 
@code{.popsection} (@pxref{PopSection}), and @code{.previous} 
(@pxref{Previous}).

This directive is a synonym for @code{.section}.  It pushes the current section
(and subsection) onto the top of the section stack, and then replaces the
current section and subsection with @code{name} and @code{subsection}.
@end ifset

@node Quad
@section @code{.quad @var{bignums}}

@cindex @code{quad} directive
@code{.quad} expects zero or more bignums, separated by commas.  For
each bignum, it emits
@ifclear bignum-16
an 8-byte integer.  If the bignum won't fit in 8 bytes, it prints a
warning message; and just takes the lowest order 8 bytes of the bignum.
@cindex eight-byte integer
@cindex integer, 8-byte

The term ``quad'' comes from contexts in which a ``word'' is two bytes;
hence @emph{quad}-word for 8 bytes.
@end ifclear
@ifset bignum-16
a 16-byte integer.  If the bignum won't fit in 16 bytes, it prints a
warning message; and just takes the lowest order 16 bytes of the bignum.
@cindex sixteen-byte integer
@cindex integer, 16-byte
@end ifset

@node Rept
@section @code{.rept @var{count}}

@cindex @code{rept} directive
Repeat the sequence of lines between the @code{.rept} directive and the next
@code{.endr} directive @var{count} times.

For example, assembling

@example
        .rept   3
        .long   0
        .endr
@end example

is equivalent to assembling

@example
        .long   0
        .long   0
        .long   0
@end example

@node Sbttl
@section @code{.sbttl "@var{subheading}"}

@cindex @code{sbttl} directive
@cindex subtitles for listings
@cindex listing control: subtitle
Use @var{subheading} as the title (third line, immediately after the
title line) when generating assembly listings.

This directive affects subsequent pages, as well as the current page if
it appears within ten lines of the top of a page.

@ifset COFF
@node Scl
@section @code{.scl @var{class}}

@cindex @code{scl} directive
@cindex symbol storage class (COFF)
@cindex COFF symbol storage class
Set the storage-class value for a symbol.  This directive may only be
used inside a @code{.def}/@code{.endef} pair.  Storage class may flag
whether a symbol is static or external, or it may record further
symbolic debugging information.
@ifset BOUT

The @samp{.scl} directive is primarily associated with COFF output; when
configured to generate @code{b.out} output format, @command{@value{AS}}
accepts this directive but ignores it.
@end ifset
@end ifset

@ifset COFF-ELF
@node Section
@section @code{.section @var{name}}

@cindex named section
Use the @code{.section} directive to assemble the following code into a section
named @var{name}.

This directive is only supported for targets that actually support arbitrarily
named sections; on @code{a.out} targets, for example, it is not accepted, even
with a standard @code{a.out} section name.

@ifset COFF
@ifset ELF
@c only print the extra heading if both COFF and ELF are set
@subheading COFF Version
@end ifset

@cindex @code{section} directive (COFF version)
For COFF targets, the @code{.section} directive is used in one of the following
ways:

@smallexample
.section @var{name}[, "@var{flags}"]
.section @var{name}[, @var{subsegment}]
@end smallexample

If the optional argument is quoted, it is taken as flags to use for the
section.  Each flag is a single character.  The following flags are recognized:
@table @code
@item b
bss section (uninitialized data)
@item n
section is not loaded
@item w
writable section
@item d
data section
@item r
read-only section
@item x
executable section
@item s
shared section (meaningful for PE targets)
@item a
ignored.  (For compatibility with the ELF version)
@end table

If no flags are specified, the default flags depend upon the section name.  If
the section name is not recognized, the default will be for the section to be
loaded and writable.  Note the @code{n} and @code{w} flags remove attributes
from the section, rather than adding them, so if they are used on their own it
will be as if no flags had been specified at all.

If the optional argument to the @code{.section} directive is not quoted, it is
taken as a subsegment number (@pxref{Sub-Sections}).
@end ifset

@ifset ELF
@ifset COFF
@c only print the extra heading if both COFF and ELF are set
@subheading ELF Version
@end ifset

@cindex Section Stack
This is one of the ELF section stack manipulation directives.  The others are
@code{.subsection} (@pxref{SubSection}), @code{.pushsection} 
(@pxref{PushSection}), @code{.popsection} (@pxref{PopSection}), and
@code{.previous} (@pxref{Previous}).

@cindex @code{section} directive (ELF version)
For ELF targets, the @code{.section} directive is used like this:

@smallexample
.section @var{name} [, "@var{flags}"[, @@@var{type}[, @@@var{entsize}]]]
@end smallexample

The optional @var{flags} argument is a quoted string which may contain any
combination of the following characters:
@table @code
@item a
section is allocatable
@item w
section is writable
@item x
section is executable
@item M
section is mergeable
@item S
section contains zero terminated strings
@end table

The optional @var{type} argument may contain one of the following constants:
@table @code
@item @@progbits
section contains data
@item @@nobits
section does not contain data (i.e., section only occupies space)
@end table

Note on targets where the @code{@@} character is the start of a comment (eg
ARM) then another character is used instead.  For example the ARM port uses the
@code{%} character.

If @var{flags} contains @code{M} flag, @var{type} argument must be specified
as well as @var{entsize} argument. Sections with @code{M} flag but not
@code{S} flag must contain fixed size constants, each @var{entsize} octets
long. Sections with both @code{M} and @code{S} must contain zero terminated
strings where each character is @var{entsize} bytes long. The linker may remove
duplicates within sections with the same name, same entity size and same flags. 

If no flags are specified, the default flags depend upon the section name.  If
the section name is not recognized, the default will be for the section to have
none of the above flags: it will not be allocated in memory, nor writable, nor
executable.  The section will contain data.

For ELF targets, the assembler supports another type of @code{.section}
directive for compatibility with the Solaris assembler:

@smallexample
.section "@var{name}"[, @var{flags}...]
@end smallexample

Note that the section name is quoted.  There may be a sequence of comma
separated flags:
@table @code
@item #alloc
section is allocatable
@item #write
section is writable
@item #execinstr
section is executable
@end table

This directive replaces the current section and subsection.  The replaced
section and subsection are pushed onto the section stack.  See the contents of
the gas testsuite directory @code{gas/testsuite/gas/elf} for some examples of
how this directive and the other section stack directives work.
@end ifset
@end ifset

@node Set
@section @code{.set @var{symbol}, @var{expression}}

@cindex @code{set} directive
@cindex symbol value, setting
Set the value of @var{symbol} to @var{expression}.  This
changes @var{symbol}'s value and type to conform to
@var{expression}.  If @var{symbol} was flagged as external, it remains
flagged (@pxref{Symbol Attributes}).

You may @code{.set} a symbol many times in the same assembly.

If you @code{.set} a global symbol, the value stored in the object
file is the last value stored into it.

@ifset HPPA
The syntax for @code{set} on the HPPA is
@samp{@var{symbol} .set @var{expression}}.
@end ifset

@node Short
@section @code{.short @var{expressions}}

@cindex @code{short} directive
@ifset GENERIC
@code{.short} is normally the same as @samp{.word}.
@xref{Word,,@code{.word}}.

In some configurations, however, @code{.short} and @code{.word} generate
numbers of different lengths; @pxref{Machine Dependencies}.
@end ifset
@ifclear GENERIC
@ifset W16
@code{.short} is the same as @samp{.word}.  @xref{Word,,@code{.word}}.
@end ifset
@ifset W32
This expects zero or more @var{expressions}, and emits
a 16 bit number for each.
@end ifset
@end ifclear

@node Single
@section @code{.single @var{flonums}}

@cindex @code{single} directive
@cindex floating point numbers (single)
This directive assembles zero or more flonums, separated by commas.  It
has the same effect as @code{.float}.
@ifset GENERIC
The exact kind of floating point numbers emitted depends on how
@command{@value{AS}} is configured.  @xref{Machine Dependencies}.
@end ifset
@ifclear GENERIC
@ifset IEEEFLOAT
On the @value{TARGET} family, @code{.single} emits 32-bit floating point
numbers in @sc{ieee} format.
@end ifset
@end ifclear

@ifset COFF-ELF
@node Size
@section @code{.size}

This directive is used to set the size associated with a symbol.

@ifset COFF
@ifset ELF
@c only print the extra heading if both COFF and ELF are set
@subheading COFF Version
@end ifset

@cindex @code{size} directive (COFF version)
For COFF targets, the @code{.size} directive is only permitted inside
@code{.def}/@code{.endef} pairs.  It is used like this:

@smallexample
.size @var{expression}
@end smallexample

@ifset BOUT
@samp{.size} is only meaningful when generating COFF format output; when
@command{@value{AS}} is generating @code{b.out}, it accepts this directive but
ignores it.
@end ifset
@end ifset

@ifset ELF
@ifset COFF
@c only print the extra heading if both COFF and ELF are set
@subheading ELF Version
@end ifset

@cindex @code{size} directive (ELF version)
For ELF targets, the @code{.size} directive is used like this:

@smallexample
.size @var{name} , @var{expression}
@end smallexample

This directive sets the size associated with a symbol @var{name}.
The size in bytes is computed from @var{expression} which can make use of label
arithmetic.  This directive is typically used to set the size of function
symbols.
@end ifset
@end ifset

@node Sleb128
@section @code{.sleb128 @var{expressions}}

@cindex @code{sleb128} directive
@var{sleb128} stands for ``signed little endian base 128.''  This is a 
compact, variable length representation of numbers used by the DWARF
symbolic debugging format.  @xref{Uleb128,@code{.uleb128}}.

@ifclear no-space-dir
@node Skip
@section @code{.skip @var{size} , @var{fill}}

@cindex @code{skip} directive
@cindex filling memory
This directive emits @var{size} bytes, each of value @var{fill}.  Both
@var{size} and @var{fill} are absolute expressions.  If the comma and
@var{fill} are omitted, @var{fill} is assumed to be zero.  This is the same as
@samp{.space}.

@node Space
@section @code{.space @var{size} , @var{fill}}

@cindex @code{space} directive
@cindex filling memory
This directive emits @var{size} bytes, each of value @var{fill}.  Both
@var{size} and @var{fill} are absolute expressions.  If the comma
and @var{fill} are omitted, @var{fill} is assumed to be zero.  This is the same
as @samp{.skip}.

@ifset HPPA
@quotation
@emph{Warning:} @code{.space} has a completely different meaning for HPPA
targets; use @code{.block} as a substitute.  See @cite{HP9000 Series 800
Assembly Language Reference Manual} (HP 92432-90001) for the meaning of the
@code{.space} directive.  @xref{HPPA Directives,,HPPA Assembler Directives},
for a summary.
@end quotation
@end ifset
@end ifclear

@ifset A29K
@ifclear GENERIC
@node Space
@section @code{.space}
@cindex @code{space} directive
@end ifclear
On the AMD 29K, this directive is ignored; it is accepted for
compatibility with other AMD 29K assemblers.

@quotation
@emph{Warning:} In most versions of the @sc{gnu} assembler, the directive
@code{.space} has the effect of @code{.block}  @xref{Machine Dependencies}.
@end quotation
@end ifset

@ifset have-stabs
@node Stab
@section @code{.stabd, .stabn, .stabs}

@cindex symbolic debuggers, information for
@cindex @code{stab@var{x}} directives
There are three directives that begin @samp{.stab}.
All emit symbols (@pxref{Symbols}), for use by symbolic debuggers.
The symbols are not entered in the @command{@value{AS}} hash table: they
cannot be referenced elsewhere in the source file.
Up to five fields are required:

@table @var
@item string
This is the symbol's name.  It may contain any character except
@samp{\000}, so is more general than ordinary symbol names.  Some
debuggers used to code arbitrarily complex structures into symbol names
using this field.

@item type
An absolute expression.  The symbol's type is set to the low 8 bits of
this expression.  Any bit pattern is permitted, but @code{@value{LD}}
and debuggers choke on silly bit patterns.

@item other
An absolute expression.  The symbol's ``other'' attribute is set to the
low 8 bits of this expression.

@item desc
An absolute expression.  The symbol's descriptor is set to the low 16
bits of this expression.

@item value
An absolute expression which becomes the symbol's value.
@end table

If a warning is detected while reading a @code{.stabd}, @code{.stabn},
or @code{.stabs} statement, the symbol has probably already been created;
you get a half-formed symbol in your object file.  This is
compatible with earlier assemblers!

@table @code
@cindex @code{stabd} directive
@item .stabd @var{type} , @var{other} , @var{desc}

The ``name'' of the symbol generated is not even an empty string.
It is a null pointer, for compatibility.  Older assemblers used a
null pointer so they didn't waste space in object files with empty
strings.

The symbol's value is set to the location counter,
relocatably.  When your program is linked, the value of this symbol
is the address of the location counter when the @code{.stabd} was
assembled.

@cindex @code{stabn} directive
@item .stabn @var{type} , @var{other} , @var{desc} , @var{value}
The name of the symbol is set to the empty string @code{""}.

@cindex @code{stabs} directive
@item .stabs @var{string} ,  @var{type} , @var{other} , @var{desc} , @var{value}
All five fields are specified.
@end table
@end ifset
@c end     have-stabs

@node String
@section @code{.string} "@var{str}"

@cindex string, copying to object file
@cindex @code{string} directive

Copy the characters in @var{str} to the object file.  You may specify more than
one string to copy, separated by commas.  Unless otherwise specified for a
particular machine, the assembler marks the end of each string with a 0 byte.
You can use any of the escape sequences described in @ref{Strings,,Strings}.

@node Struct
@section @code{.struct @var{expression}}

@cindex @code{struct} directive
Switch to the absolute section, and set the section offset to @var{expression},
which must be an absolute expression.  You might use this as follows:
@smallexample
        .struct 0
field1:
        .struct field1 + 4
field2:
        .struct field2 + 4
field3:
@end smallexample
This would define the symbol @code{field1} to have the value 0, the symbol
@code{field2} to have the value 4, and the symbol @code{field3} to have the
value 8.  Assembly would be left in the absolute section, and you would need to
use a @code{.section} directive of some sort to change to some other section
before further assembly.

@ifset ELF
@node SubSection
@section @code{.subsection @var{name}}

@cindex @code{subsection} directive
@cindex Section Stack
This is one of the ELF section stack manipulation directives.  The others are
@code{.section} (@pxref{Section}), @code{.pushsection} (@pxref{PushSection}), 
@code{.popsection} (@pxref{PopSection}), and @code{.previous} 
(@pxref{Previous}).

This directive replaces the current subsection with @code{name}.  The current
section is not changed.  The replaced subsection is put onto the section stack
in place of the then current top of stack subsection.
@end ifset

@ifset ELF
@node Symver
@section @code{.symver}
@cindex @code{symver} directive
@cindex symbol versioning
@cindex versions of symbols
Use the @code{.symver} directive to bind symbols to specific version nodes
within a source file.  This is only supported on ELF platforms, and is
typically used when assembling files to be linked into a shared library.
There are cases where it may make sense to use this in objects to be bound
into an application itself so as to override a versioned symbol from a
shared library.

For ELF targets, the @code{.symver} directive can be used like this:
@smallexample
.symver @var{name}, @var{name2@@nodename}
@end smallexample
If the symbol @var{name} is defined within the file
being assembled, the @code{.symver} directive effectively creates a symbol
alias with the name @var{name2@@nodename}, and in fact the main reason that we
just don't try and create a regular alias is that the @var{@@} character isn't
permitted in symbol names.  The @var{name2} part of the name is the actual name
of the symbol by which it will be externally referenced.  The name @var{name}
itself is merely a name of convenience that is used so that it is possible to
have definitions for multiple versions of a function within a single source
file, and so that the compiler can unambiguously know which version of a
function is being mentioned.  The @var{nodename} portion of the alias should be
the name of a node specified in the version script supplied to the linker when
building a shared library.  If you are attempting to override a versioned
symbol from a shared library, then @var{nodename} should correspond to the
nodename of the symbol you are trying to override.

If the symbol @var{name} is not defined within the file being assembled, all
references to @var{name} will be changed to @var{name2@@nodename}.  If no
reference to @var{name} is made, @var{name2@@nodename} will be removed from the
symbol table.

Another usage of the @code{.symver} directive is:
@smallexample
.symver @var{name}, @var{name2@@@@nodename}
@end smallexample
In this case, the symbol @var{name} must exist and be defined within
the file being assembled. It is similar to @var{name2@@nodename}. The
difference is @var{name2@@@@nodename} will also be used to resolve
references to @var{name2} by the linker.

The third usage of the @code{.symver} directive is:
@smallexample
.symver @var{name}, @var{name2@@@@@@nodename}
@end smallexample
When @var{name} is not defined within the
file being assembled, it is treated as @var{name2@@nodename}. When
@var{name} is defined within the file being assembled, the symbol
name, @var{name}, will be changed to @var{name2@@@@nodename}.
@end ifset

@ifset COFF
@node Tag
@section @code{.tag @var{structname}}

@cindex COFF structure debugging
@cindex structure debugging, COFF
@cindex @code{tag} directive
This directive is generated by compilers to include auxiliary debugging
information in the symbol table.  It is only permitted inside
@code{.def}/@code{.endef} pairs.  Tags are used to link structure
definitions in the symbol table with instances of those structures.
@ifset BOUT

@samp{.tag} is only used when generating COFF format output; when
@command{@value{AS}} is generating @code{b.out}, it accepts this directive but
ignores it.
@end ifset
@end ifset

@node Text
@section @code{.text @var{subsection}}

@cindex @code{text} directive
Tells @command{@value{AS}} to assemble the following statements onto the end of
the text subsection numbered @var{subsection}, which is an absolute
expression.  If @var{subsection} is omitted, subsection number zero
is used.

@node Title
@section @code{.title "@var{heading}"}

@cindex @code{title} directive
@cindex listing control: title line
Use @var{heading} as the title (second line, immediately after the
source file name and pagenumber) when generating assembly listings.

This directive affects subsequent pages, as well as the current page if
it appears within ten lines of the top of a page.

@ifset COFF-ELF
@node Type
@section @code{.type}

This directive is used to set the type of a symbol.

@ifset COFF
@ifset ELF
@c only print the extra heading if both COFF and ELF are set
@subheading COFF Version
@end ifset

@cindex COFF symbol type
@cindex symbol type, COFF
@cindex @code{type} directive (COFF version)
For COFF targets, this directive is permitted only within
@code{.def}/@code{.endef} pairs.  It is used like this:

@smallexample
.type @var{int}
@end smallexample

This records the integer @var{int} as the type attribute of a symbol table
entry.

@ifset BOUT
@samp{.type} is associated only with COFF format output; when
@command{@value{AS}} is configured for @code{b.out} output, it accepts this
directive but ignores it.
@end ifset
@end ifset

@ifset ELF
@ifset COFF
@c only print the extra heading if both COFF and ELF are set
@subheading ELF Version
@end ifset

@cindex ELF symbol type
@cindex symbol type, ELF
@cindex @code{type} directive (ELF version)
For ELF targets, the @code{.type} directive is used like this:

@smallexample
.type @var{name} , @var{type description}
@end smallexample

This sets the type of symbol @var{name} to be either a
function symbol or an object symbol.  There are five different syntaxes
supported for the @var{type description} field, in order to provide
compatibility with various other assemblers.  The syntaxes supported are:

@smallexample
  .type <name>,#function
  .type <name>,#object

  .type <name>,@@function
  .type <name>,@@object

  .type <name>,%function
  .type <name>,%object
  
  .type <name>,"function"
  .type <name>,"object"
  
  .type <name> STT_FUNCTION
  .type <name> STT_OBJECT
@end smallexample
@end ifset
@end ifset

@node Uleb128
@section @code{.uleb128 @var{expressions}}

@cindex @code{uleb128} directive
@var{uleb128} stands for ``unsigned little endian base 128.''  This is a 
compact, variable length representation of numbers used by the DWARF
symbolic debugging format.  @xref{Sleb128,@code{.sleb128}}.

@ifset COFF
@node Val
@section @code{.val @var{addr}}

@cindex @code{val} directive
@cindex COFF value attribute
@cindex value attribute, COFF
This directive, permitted only within @code{.def}/@code{.endef} pairs,
records the address @var{addr} as the value attribute of a symbol table
entry.
@ifset BOUT

@samp{.val} is used only for COFF output; when @command{@value{AS}} is
configured for @code{b.out}, it accepts this directive but ignores it.
@end ifset
@end ifset

@ifset ELF
@node Version
@section @code{.version "@var{string}"}

@cindex @code{version} directive
This directive creates a @code{.note} section and places into it an ELF
formatted note of type NT_VERSION.  The note's name is set to @code{string}.
@end ifset

@ifset ELF
@node VTableEntry
@section @code{.vtable_entry @var{table}, @var{offset}}

@cindex @code{vtable_entry}
This directive finds or creates a symbol @code{table} and creates a
@code{VTABLE_ENTRY} relocation for it with an addend of @code{offset}.

@node VTableInherit
@section @code{.vtable_inherit @var{child}, @var{parent}}

@cindex @code{vtable_inherit}
This directive finds the symbol @code{child} and finds or creates the symbol
@code{parent} and then creates a @code{VTABLE_INHERIT} relocation for the
parent whose addend is the value of the child symbol.  As a special case the
parent name of @code{0} is treated as refering the @code{*ABS*} section.
@end ifset

@ifset ELF
@node Weak
@section @code{.weak @var{names}}

@cindex @code{weak} directive
This directive sets the weak attribute on the comma separated list of symbol
@code{names}.  If the symbols do not already exist, they will be created.
@end ifset

@node Word
@section @code{.word @var{expressions}}

@cindex @code{word} directive
This directive expects zero or more @var{expressions}, of any section,
separated by commas.
@ifclear GENERIC
@ifset W32
For each expression, @command{@value{AS}} emits a 32-bit number.
@end ifset
@ifset W16
For each expression, @command{@value{AS}} emits a 16-bit number.
@end ifset
@end ifclear
@ifset GENERIC

The size of the number emitted, and its byte order,
depend on what target computer the assembly is for.
@end ifset

@c on amd29k, i960, sparc the "special treatment to support compilers" doesn't
@c happen---32-bit addressability, period; no long/short jumps.
@ifset DIFF-TBL-KLUGE
@cindex difference tables altered
@cindex altered difference tables
@quotation
@emph{Warning: Special Treatment to support Compilers}
@end quotation

@ifset GENERIC
Machines with a 32-bit address space, but that do less than 32-bit
addressing, require the following special treatment.  If the machine of
interest to you does 32-bit addressing (or doesn't require it;
@pxref{Machine Dependencies}), you can ignore this issue.

@end ifset
In order to assemble compiler output into something that works,
@command{@value{AS}} occasionally does strange things to @samp{.word} directives.
Directives of the form @samp{.word sym1-sym2} are often emitted by
compilers as part of jump tables.  Therefore, when @command{@value{AS}} assembles a
directive of the form @samp{.word sym1-sym2}, and the difference between
@code{sym1} and @code{sym2} does not fit in 16 bits, @command{@value{AS}}
creates a @dfn{secondary jump table}, immediately before the next label.
This secondary jump table is preceded by a short-jump to the
first byte after the secondary table.  This short-jump prevents the flow
of control from accidentally falling into the new table.  Inside the
table is a long-jump to @code{sym2}.  The original @samp{.word}
contains @code{sym1} minus the address of the long-jump to
@code{sym2}.

If there were several occurrences of @samp{.word sym1-sym2} before the
secondary jump table, all of them are adjusted.  If there was a
@samp{.word sym3-sym4}, that also did not fit in sixteen bits, a
long-jump to @code{sym4} is included in the secondary jump table,
and the @code{.word} directives are adjusted to contain @code{sym3}
minus the address of the long-jump to @code{sym4}; and so on, for as many
entries in the original jump table as necessary.

@ifset INTERNALS
@emph{This feature may be disabled by compiling @command{@value{AS}} with the
@samp{-DWORKING_DOT_WORD} option.} This feature is likely to confuse
assembly language programmers.
@end ifset
@end ifset
@c end     DIFF-TBL-KLUGE

@node Deprecated
@section Deprecated Directives

@cindex deprecated directives
@cindex obsolescent directives
One day these directives won't work.
They are included for compatibility with older assemblers.
@table @t
@item .abort
@item .line
@end table

@ifset GENERIC
@node Machine Dependencies
@chapter Machine Dependent Features

@cindex machine dependencies
The machine instruction sets are (almost by definition) different on
each machine where @command{@value{AS}} runs.  Floating point representations
vary as well, and @command{@value{AS}} often supports a few additional
directives or command-line options for compatibility with other
assemblers on a particular platform.  Finally, some versions of
@command{@value{AS}} support special pseudo-instructions for branch
optimization.

This chapter discusses most of these differences, though it does not
include details on any machine's instruction set.  For details on that
subject, see the hardware manufacturer's manual.

@menu
@ifset A29K
* AMD29K-Dependent::            AMD 29K Dependent Features
@end ifset
@ifset ALPHA
* Alpha-Dependent::		Alpha Dependent Features
@end ifset
@ifset ARC
* ARC-Dependent::               ARC Dependent Features
@end ifset
@ifset ARM
* ARM-Dependent::               ARM Dependent Features
@end ifset
@ifset CRIS
* CRIS-Dependent::              CRIS Dependent Features
@end ifset
@ifset D10V
* D10V-Dependent::              D10V Dependent Features
@end ifset
@ifset D30V
* D30V-Dependent::              D30V Dependent Features
@end ifset
@ifset H8/300
* H8/300-Dependent::            Renesas H8/300 Dependent Features
@end ifset
@ifset H8/500
* H8/500-Dependent::            Renesas H8/500 Dependent Features
@end ifset
@ifset HPPA
* HPPA-Dependent::              HPPA Dependent Features
@end ifset
@ifset I370
* ESA/390-Dependent::           IBM ESA/390 Dependent Features
@end ifset
@ifset I80386
* i386-Dependent::              Intel 80386 and AMD x86-64 Dependent Features
@end ifset
@ifset I860
* i860-Dependent::              Intel 80860 Dependent Features
@end ifset
@ifset I960
* i960-Dependent::              Intel 80960 Dependent Features
@end ifset
@ifset IP2K
* IP2K-Dependent::              IP2K Dependent Features
@end ifset
@ifset M32R
* M32R-Dependent::              M32R Dependent Features
@end ifset
@ifset M680X0
* M68K-Dependent::              M680x0 Dependent Features
@end ifset
@ifset M68HC11
* M68HC11-Dependent::           M68HC11 and 68HC12 Dependent Features
@end ifset
@ifset M880X0
* M88K-Dependent::		M880x0 Dependent Features
@end ifset
@ifset MIPS
* MIPS-Dependent::              MIPS Dependent Features
@end ifset
@ifset MMIX
* MMIX-Dependent::              MMIX Dependent Features
@end ifset
@ifset MSP430
* MSP430-Dependent::		MSP430 Dependent Features
@end ifset
@ifset SH
* SH-Dependent::                Renesas / SuperH SH Dependent Features
* SH64-Dependent::              SuperH SH64 Dependent Features
@end ifset
@ifset PDP11
* PDP-11-Dependent::            PDP-11 Dependent Features
@end ifset
@ifset PJ
* PJ-Dependent::                picoJava Dependent Features
@end ifset
@ifset PPC
* PPC-Dependent::               PowerPC Dependent Features
@end ifset
@ifset SPARC
* Sparc-Dependent::             SPARC Dependent Features
@end ifset
@ifset TIC54X
* TIC54X-Dependent::            TI TMS320C54x Dependent Features
@end ifset
@ifset V850
* V850-Dependent::              V850 Dependent Features
@end ifset
@ifset XTENSA
* Xtensa-Dependent::            Xtensa Dependent Features
@end ifset
@ifset Z8000
* Z8000-Dependent::             Z8000 Dependent Features
@end ifset
@ifset VAX
* Vax-Dependent::               VAX Dependent Features
@end ifset
@end menu

@lowersections
@end ifset

@c The following major nodes are *sections* in the GENERIC version, *chapters*
@c in single-cpu versions.  This is mainly achieved by @lowersections.  There is a
@c peculiarity: to preserve cross-references, there must be a node called
@c "Machine Dependencies".  Hence the conditional nodenames in each
@c major node below.  Node defaulting in makeinfo requires adjacency of
@c node and sectioning commands; hence the repetition of @chapter BLAH
@c in both conditional blocks.

@ifset A29K
@include c-a29k.texi
@end ifset

@ifset ALPHA
@include c-alpha.texi
@end ifset

@ifset ARC
@include c-arc.texi
@end ifset

@ifset ARM
@include c-arm.texi
@end ifset

@ifset CRIS
@include c-cris.texi
@end ifset

@ifset Renesas-all
@ifclear GENERIC
@node Machine Dependencies
@chapter Machine Dependent Features

The machine instruction sets are different on each Renesas chip family,
and there are also some syntax differences among the families.  This
chapter describes the specific @command{@value{AS}} features for each
family.

@menu
* H8/300-Dependent::            Renesas H8/300 Dependent Features
* H8/500-Dependent::            Renesas H8/500 Dependent Features
* SH-Dependent::                Renesas SH Dependent Features
@end menu
@lowersections
@end ifclear
@end ifset

@ifset D10V
@include c-d10v.texi
@end ifset

@ifset D30V
@include c-d30v.texi
@end ifset

@ifset H8/300
@include c-h8300.texi
@end ifset

@ifset H8/500
@include c-h8500.texi
@end ifset

@ifset HPPA
@include c-hppa.texi
@end ifset

@ifset I370
@include c-i370.texi
@end ifset

@ifset I80386
@include c-i386.texi
@end ifset

@ifset I860
@include c-i860.texi
@end ifset

@ifset I960
@include c-i960.texi
@end ifset

@ifset IA64
@include c-ia64.texi
@end ifset

@ifset IP2K
@include c-ip2k.texi
@end ifset

@ifset M32R
@include c-m32r.texi
@end ifset

@ifset M680X0
@include c-m68k.texi
@end ifset

@ifset M68HC11
@include c-m68hc11.texi
@end ifset

@ifset M880X0
@include c-m88k.texi
@end ifset

@ifset MIPS
@include c-mips.texi
@end ifset

@ifset MMIX
@include c-mmix.texi
@end ifset

@ifset MSP430
@include c-msp430.texi
@end ifset

@ifset NS32K
@include c-ns32k.texi
@end ifset

@ifset PDP11
@include c-pdp11.texi
@end ifset

@ifset PJ
@include c-pj.texi
@end ifset

@ifset PPC
@include c-ppc.texi
@end ifset

@ifset SH
@include c-sh.texi
@include c-sh64.texi
@end ifset

@ifset SPARC
@include c-sparc.texi
@end ifset

@ifset TIC54X
@include c-tic54x.texi
@end ifset

@ifset Z8000
@include c-z8k.texi
@end ifset

@ifset VAX
@include c-vax.texi
@end ifset

@ifset V850
@include c-v850.texi
@end ifset

@ifset XTENSA
@include c-xtensa.texi
@end ifset

@ifset GENERIC
@c reverse effect of @down at top of generic Machine-Dep chapter
@raisesections
@end ifset

@node Reporting Bugs
@chapter Reporting Bugs
@cindex bugs in assembler
@cindex reporting bugs in assembler

Your bug reports play an essential role in making @command{@value{AS}} reliable.

Reporting a bug may help you by bringing a solution to your problem, or it may
not.  But in any case the principal function of a bug report is to help the
entire community by making the next version of @command{@value{AS}} work better.
Bug reports are your contribution to the maintenance of @command{@value{AS}}.

In order for a bug report to serve its purpose, you must include the
information that enables us to fix the bug.

@menu
* Bug Criteria::                Have you found a bug?
* Bug Reporting::               How to report bugs
@end menu

@node Bug Criteria
@section Have You Found a Bug?
@cindex bug criteria

If you are not sure whether you have found a bug, here are some guidelines:

@itemize @bullet
@cindex fatal signal
@cindex assembler crash
@cindex crash of assembler
@item
If the assembler gets a fatal signal, for any input whatever, that is a
@command{@value{AS}} bug.  Reliable assemblers never crash.

@cindex error on valid input
@item
If @command{@value{AS}} produces an error message for valid input, that is a bug.

@cindex invalid input
@item
If @command{@value{AS}} does not produce an error message for invalid input, that
is a bug.  However, you should note that your idea of ``invalid input'' might
be our idea of ``an extension'' or ``support for traditional practice''.

@item
If you are an experienced user of assemblers, your suggestions for improvement
of @command{@value{AS}} are welcome in any case.
@end itemize

@node Bug Reporting
@section How to Report Bugs
@cindex bug reports
@cindex assembler bugs, reporting

A number of companies and individuals offer support for @sc{gnu} products.  If
you obtained @command{@value{AS}} from a support organization, we recommend you
contact that organization first.

You can find contact information for many support companies and
individuals in the file @file{etc/SERVICE} in the @sc{gnu} Emacs
distribution.

In any event, we also recommend that you send bug reports for @command{@value{AS}}
to @samp{bug-binutils@@gnu.org}.

The fundamental principle of reporting bugs usefully is this:
@strong{report all the facts}.  If you are not sure whether to state a
fact or leave it out, state it!

Often people omit facts because they think they know what causes the problem
and assume that some details do not matter.  Thus, you might assume that the
name of a symbol you use in an example does not matter.  Well, probably it does
not, but one cannot be sure.  Perhaps the bug is a stray memory reference which
happens to fetch from the location where that name is stored in memory;
perhaps, if the name were different, the contents of that location would fool
the assembler into doing the right thing despite the bug.  Play it safe and
give a specific, complete example.  That is the easiest thing for you to do,
and the most helpful.

Keep in mind that the purpose of a bug report is to enable us to fix the bug if
it is new to us.  Therefore, always write your bug reports on the assumption
that the bug has not been reported previously.

Sometimes people give a few sketchy facts and ask, ``Does this ring a
bell?''  This cannot help us fix a bug, so it is basically useless.  We
respond by asking for enough details to enable us to investigate.
You might as well expedite matters by sending them to begin with.

To enable us to fix the bug, you should include all these things:

@itemize @bullet
@item
The version of @command{@value{AS}}.  @command{@value{AS}} announces it if you start
it with the @samp{--version} argument.

Without this, we will not know whether there is any point in looking for
the bug in the current version of @command{@value{AS}}.

@item
Any patches you may have applied to the @command{@value{AS}} source.

@item
The type of machine you are using, and the operating system name and
version number.

@item
What compiler (and its version) was used to compile @command{@value{AS}}---e.g.
``@code{gcc-2.7}''.

@item
The command arguments you gave the assembler to assemble your example and
observe the bug.  To guarantee you will not omit something important, list them
all.  A copy of the Makefile (or the output from make) is sufficient.

If we were to try to guess the arguments, we would probably guess wrong
and then we might not encounter the bug.

@item
A complete input file that will reproduce the bug.  If the bug is observed when
the assembler is invoked via a compiler, send the assembler source, not the
high level language source.  Most compilers will produce the assembler source
when run with the @samp{-S} option.  If you are using @code{@value{GCC}}, use
the options @samp{-v --save-temps}; this will save the assembler source in a
file with an extension of @file{.s}, and also show you exactly how
@command{@value{AS}} is being run.

@item
A description of what behavior you observe that you believe is
incorrect.  For example, ``It gets a fatal signal.''

Of course, if the bug is that @command{@value{AS}} gets a fatal signal, then we
will certainly notice it.  But if the bug is incorrect output, we might not
notice unless it is glaringly wrong.  You might as well not give us a chance to
make a mistake.

Even if the problem you experience is a fatal signal, you should still say so
explicitly.  Suppose something strange is going on, such as, your copy of
@command{@value{AS}} is out of synch, or you have encountered a bug in the C
library on your system.  (This has happened!)  Your copy might crash and ours
would not.  If you told us to expect a crash, then when ours fails to crash, we
would know that the bug was not happening for us.  If you had not told us to
expect a crash, then we would not be able to draw any conclusion from our
observations.

@item
If you wish to suggest changes to the @command{@value{AS}} source, send us context
diffs, as generated by @code{diff} with the @samp{-u}, @samp{-c}, or @samp{-p}
option.  Always send diffs from the old file to the new file.  If you even
discuss something in the @command{@value{AS}} source, refer to it by context, not
by line number.

The line numbers in our development sources will not match those in your
sources.  Your line numbers would convey no useful information to us.
@end itemize

Here are some things that are not necessary:

@itemize @bullet
@item
A description of the envelope of the bug.

Often people who encounter a bug spend a lot of time investigating
which changes to the input file will make the bug go away and which
changes will not affect it.

This is often time consuming and not very useful, because the way we
will find the bug is by running a single example under the debugger
with breakpoints, not by pure deduction from a series of examples.
We recommend that you save your time for something else.

Of course, if you can find a simpler example to report @emph{instead}
of the original one, that is a convenience for us.  Errors in the
output will be easier to spot, running under the debugger will take
less time, and so on.

However, simplification is not vital; if you do not want to do this,
report the bug anyway and send us the entire test case you used.

@item
A patch for the bug.

A patch for the bug does help us if it is a good one.  But do not omit
the necessary information, such as the test case, on the assumption that
a patch is all we need.  We might see problems with your patch and decide
to fix the problem another way, or we might not understand it at all.

Sometimes with a program as complicated as @command{@value{AS}} it is very hard to
construct an example that will make the program follow a certain path through
the code.  If you do not send us the example, we will not be able to construct
one, so we will not be able to verify that the bug is fixed.

And if we cannot understand what bug you are trying to fix, or why your
patch should be an improvement, we will not install it.  A test case will
help us to understand.

@item
A guess about what the bug is or what it depends on.

Such guesses are usually wrong.  Even we cannot guess right about such
things without first using the debugger to find the facts.
@end itemize

@node Acknowledgements
@chapter Acknowledgements

If you have contributed to @command{@value{AS}} and your name isn't listed here,
it is not meant as a slight.  We just don't know about it.  Send mail to the
maintainer, and we'll correct the situation.  Currently 
@c (January 1994), 
the maintainer is Ken Raeburn (email address @code{raeburn@@cygnus.com}).

Dean Elsner wrote the original @sc{gnu} assembler for the VAX.@footnote{Any
more details?}

Jay Fenlason maintained GAS for a while, adding support for GDB-specific debug
information and the 68k series machines, most of the preprocessing pass, and
extensive changes in @file{messages.c}, @file{input-file.c}, @file{write.c}.

K. Richard Pixley maintained GAS for a while, adding various enhancements and
many bug fixes, including merging support for several processors, breaking GAS
up to handle multiple object file format back ends (including heavy rewrite,
testing, an integration of the coff and b.out back ends), adding configuration
including heavy testing and verification of cross assemblers and file splits
and renaming, converted GAS to strictly ANSI C including full prototypes, added
support for m680[34]0 and cpu32, did considerable work on i960 including a COFF
port (including considerable amounts of reverse engineering), a SPARC opcode
file rewrite, DECstation, rs6000, and hp300hpux host ports, updated ``know''
assertions and made them work, much other reorganization, cleanup, and lint.

Ken Raeburn wrote the high-level BFD interface code to replace most of the code
in format-specific I/O modules.

The original VMS support was contributed by David L. Kashtan.  Eric Youngdale
has done much work with it since.

The Intel 80386 machine description was written by Eliot Dresselhaus.

Minh Tran-Le at IntelliCorp contributed some AIX 386 support.

The Motorola 88k machine description was contributed by Devon Bowen of Buffalo
University and Torbjorn Granlund of the Swedish Institute of Computer Science.

Keith Knowles at the Open Software Foundation wrote the original MIPS back end
(@file{tc-mips.c}, @file{tc-mips.h}), and contributed Rose format support
(which hasn't been merged in yet).  Ralph Campbell worked with the MIPS code to
support a.out format.

Support for the Zilog Z8k and Renesas H8/300 and H8/500 processors (tc-z8k,
tc-h8300, tc-h8500), and IEEE 695 object file format (obj-ieee), was written by
Steve Chamberlain of Cygnus Support.  Steve also modified the COFF back end to
use BFD for some low-level operations, for use with the H8/300 and AMD 29k
targets.

John Gilmore built the AMD 29000 support, added @code{.include} support, and
simplified the configuration of which versions accept which directives.  He
updated the 68k machine description so that Motorola's opcodes always produced
fixed-size instructions (e.g., @code{jsr}), while synthetic instructions
remained shrinkable (@code{jbsr}).  John fixed many bugs, including true tested
cross-compilation support, and one bug in relaxation that took a week and
required the proverbial one-bit fix.

Ian Lance Taylor of Cygnus Support merged the Motorola and MIT syntax for the
68k, completed support for some COFF targets (68k, i386 SVR3, and SCO Unix),
added support for MIPS ECOFF and ELF targets, wrote the initial RS/6000 and
PowerPC assembler, and made a few other minor patches.

Steve Chamberlain made @command{@value{AS}} able to generate listings.

Hewlett-Packard contributed support for the HP9000/300.

Jeff Law wrote GAS and BFD support for the native HPPA object format (SOM)
along with a fairly extensive HPPA testsuite (for both SOM and ELF object
formats).  This work was supported by both the Center for Software Science at
the University of Utah and Cygnus Support.

Support for ELF format files has been worked on by Mark Eichin of Cygnus
Support (original, incomplete implementation for SPARC), Pete Hoogenboom and
Jeff Law at the University of Utah (HPPA mainly), Michael Meissner of the Open
Software Foundation (i386 mainly), and Ken Raeburn of Cygnus Support (sparc,
and some initial 64-bit support).

Linas Vepstas added GAS support for the ESA/390 ``IBM 370'' architecture.

Richard Henderson rewrote the Alpha assembler. Klaus Kaempf wrote GAS and BFD
support for openVMS/Alpha.

Timothy Wall, Michael Hayes, and Greg Smart contributed to the various tic*
flavors.

David Heine, Sterling Augustine, Bob Wilson and John Ruttenberg from Tensilica,
Inc. added support for Xtensa processors.

Several engineers at Cygnus Support have also provided many small bug fixes and
configuration enhancements.

Many others have contributed large or small bugfixes and enhancements.  If
you have contributed significant work and are not mentioned on this list, and
want to be, let us know.  Some of the history has been lost; we are not
intentionally leaving anyone out.

@include fdl.texi

@node Index
@unnumbered Index

@printindex cp

@contents
@bye
@c Local Variables:
@c fill-column: 79
@c End:
