@c @tex
@c \special{twoside}
@c @end tex
-_if__(_ALL_ARCH__)
+_if__(_GENERIC__)
@setfilename as.info
-_fi__(_ALL_ARCH__)
-_if__(_AMD29K__ && !_ALL_ARCH__)
+_fi__(_GENERIC__)
+_if__(_AMD29K__ && !_GENERIC__)
@setfilename as-29k.info
-_fi__(_AMD29K__ && !_ALL_ARCH__)
-_if__(_I960__ && !_ALL_ARCH__)
+_fi__(_AMD29K__ && !_GENERIC__)
+_if__(_I960__ && !_GENERIC__)
@setfilename as-960.info
-_fi__(_I960__ && !_ALL_ARCH__)
-_if__(_M680X0__ && !_ALL_ARCH__)
+_fi__(_I960__ && !_GENERIC__)
+_if__(_M680X0__ && !_GENERIC__)
@setfilename as-m680x0.info
-_fi__(_M680X0__ && !_ALL_ARCH__)
-@c
-@c NOTE: this manual is marked up for preprocessing with a collection
-@c of m4 macros called "pretex.m4". If you see <_if__> and <_fi__>
-@c scattered around the source, you have the full source before
-@c preprocessing; if you don't, you have the source configured for
-@c _HOST__ architectures (and you can of course get the full source,
-@c with all configurations, from wherever you got this).
+_fi__(_M680X0__ && !_GENERIC__)
_if__(0)
+NOTE: this manual is marked up for preprocessing with a collection
+of m4 macros called "pretex.m4".
+
THIS IS THE FULL SOURCE. The full source needs to be run through m4
before either tex- or info- formatting: for example,
m4 pretex.m4 none.m4 m680x0.m4 as.texinfo >as-680x0.texinfo
Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that the section entitled ``GNU General Public License'' may be
-included in a translation approved by the author instead of in the
-original English.
+included in a translation approved by the Free Software Foundation
+instead of in the original English.
@end ifinfo
@iftex
@finalout
-@end iftex
@smallbook
+@end iftex
@setchapternewpage odd
-_if__(_ALL_ARCH__)
+_if__(_GENERIC__)
@settitle Using _AS__
-_fi__(_ALL_ARCH__)
-_if__(!_ALL_ARCH__)
+_fi__(_GENERIC__)
+_if__(!_GENERIC__)
@settitle Using _AS__ (_HOST__)
-_fi__(!_ALL_ARCH__)
+_fi__(!_GENERIC__)
@titlepage
@title{Using _AS__}
@subtitle{The GNU Assembler}
-_if__(!_ALL_ARCH__)
+_if__(!_GENERIC__)
@subtitle{for the _HOST__ family}
-_fi__(!_ALL_ARCH__)
+_fi__(!_GENERIC__)
@sp 1
@subtitle March 1991
+@sp 1
+@c pesch@cygnus.com
+@subtitle edited by Roland Pesch
+@subtitle for Cygnus Support
@sp 13
The Free Software Foundation Inc. thanks The Nice Computer
Company of Australia for loaning Dean Elsner to write the
done.
@sp 3
@author{Dean Elsner, Jay Fenlason & friends}
-@author{revised by Roland Pesch for Cygnus Support}
-@c pesch@cygnus.com
@page
@tex
\def\$#1${{#1}} % Kluge: collect RCS revision info without $...$
Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that the section entitled ``GNU General Public License'' may be
-included in a translation approved by the author instead of in the
-original English.
+included in a translation approved by the Free Software Foundation
+instead of in the original English.
@end titlepage
@page
@node Top,,,
@ifinfo
This file is a user guide to the GNU assembler @code{_AS__}.
-_if__(!_ALL_ARCH__)
+_if__(!_GENERIC__)
This version of the file describes @code{_AS__} configured to generate
code for _HOST__ architectures.
-_fi__(!_ALL_ARCH__)
+_fi__(!_GENERIC__)
@end ifinfo
@node Overview,,,
@chapter Overview
@iftex
This manual is a user guide to the GNU assembler @code{_AS__}.
-_if__(!_ALL_ARCH__)
+_if__(!_GENERIC__)
This version of the manual describes @code{_AS__} configured to generate
code for _HOST__ architectures.
-_fi__(!_ALL_ARCH__)
+_fi__(!_GENERIC__)
@end iftex
@node Invoking,,,
Add @var{path} to the search list for @code{.include} directives
@item -k
-_if__(_AMD29K__ || _I960__)
+_if__((!_GENERIC__) && (_AMD29K__ || _I960__))
This option is accepted but has no effect on the _HOST__ family.
-_fi__(_AMD29K__ || _I960__)
-_if__(!(_AMD29K__||_I960__))
-Issue warnings when difference tables altered for long displacements
-_fi__(!(_AMD29K__||_I960__))
+_fi__((!_GENERIC__) && (_AMD29K__ || _I960__))
+_if__(_GENERIC__)
+Issue warnings when difference tables altered for long displacements.
+_fi__(_GENERIC__)
@item -L
Keep (in symbol table) local symbols, starting with @samp{L}
notation for symbols, constants, and expressions; the directives that
@code{_AS__} understands; and of course how to invoke @code{_AS__}.
-_if__(!_ALL_ARCH__)
+_if__(!_GENERIC__)
We also cover special features in the _HOST__
configuration of @code{_AS__}, including assembler directives.
-_fi__(!_ALL_ARCH__)
-_if__(_ALL_ARCH__)
+_fi__(!_GENERIC__)
+_if__(_GENERIC__)
This document also describes some of the machine-dependent features of
various flavors of the assembler.
-_fi__(_ALL_ARCH__)
+_fi__(_GENERIC__)
_if__(_INTERNALS__)
This document also describes how the assembler works internally, and
provides some information that may be useful to people attempting to
@node GNU Assembler,,,
@section _AS__, the GNU Assembler
GNU @code{as} is really a family of assemblers.
-_if__(!_ALL_ARCH__)
+_if__(!_GENERIC__)
This manual describes @samp{_AS__}, a member of that family which is
configured for the _HOST__ architectures.
-_fi__(!_ALL_ARCH__)
+_fi__(!_GENERIC__)
If you use (or have used) the GNU assembler on another architecture, you
should find a fairly similar environment. Each version has much in
common with the others, including object file formats, most assembler
_if__(_VAX__)
Any exceptions are documented explicitly (@pxref{_MACH_DEP__}).
_fi__(_VAX__)
-_if__(_ALL_ARCH__||_M680X0__)
+_if__(_GENERIC__||_M680X0__)
This doesn't mean @code{_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.
-_fi__(_ALL_ARCH__||_M680X0__)
+_fi__(_GENERIC__||_M680X0__)
Unlike older assemblers, @code{_AS__} is designed to assemble a source
program in one pass of the source file. This has a subtle impact on the
@section Object File Formats
The GNU assembler can be configured to produce several alternative
object file formats.
-_if__(!_ALL_ARCH__)
+_if__(!_GENERIC__)
_if__(!_I960__)
@code{_AS__} is configured to produce @code{a.out} format object
files.@refill
@code{_AS__} can be configured to produce either @code{b.out} or COFF
format object files.
_fi__(_I960__)
-_fi__(!_ALL_ARCH__)
+_fi__(!_GENERIC__)
@node Command Line,,,
@section Command Line
@smallexample
file_name:@b{NNN}:Warning Message Text
@end smallexample
-@noindent(where @b{NNN} is a line number). If a logical file name has
+@noindent
+(where @b{NNN} is a line number). If a logical file name has
been given (@pxref{App-File}) it is used for the filename, otherwise the
name of the current input file is used. If a logical line number was
given
@section Options
This section describes command-line options available in @emph{all}
versions of the GNU assembler; @pxref{_MACH_DEP__}, for options specific
+_if__(!_GENERIC__)
to the _HOST__.
+_fi__(!_GENERIC__)
+_if__(_GENERIC__)
+to particular machine architectures.
+_fi__(_GENERIC__)
@subsection @code{-D}
This option has no effect whatsoever, but it is accepted to make it more
line.
@subsection Difference Tables: @code{-k}
-_if__(_AMD29K__ || _I960__)
+_if__((!_GENERIC__) && (_AMD29K__ || _I960__))
On the _HOST__ family, this option is allowed, but has no effect. It is
permitted for compatibility with the 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 _HOST__
family does not have the addressing limitations that sometimes lead to this
alteration on other platforms.
-_fi__(_AMD29K__ || _I960__)
+_fi__((!_GENERIC__) && (_AMD29K__ || _I960__))
-_if__(! (_AMD29K__ || _I960__) )
+_if__(_GENERIC__ || (! _AMD29K__ || _I960__ ))
@code{_AS__} sometimes alters the code emitted for directives of the form
@samp{.word @var{sym1}-@var{sym2}}; @pxref{Word}.
You can use the @samp{-k} option if you want a warning issued when this
is done.
-_fi__(! (_AMD29K__ || _I960__) )
+_fi__(_GENERIC__ || (! _AMD29K__ || _I960__ ))
@subsection Include Local Labels: @code{-L}
Labels beginning with @samp{L} (upper case only) are called @dfn{local
Anything from the @dfn{line comment} character to the next newline
is considered a comment and is ignored. The line comment character is
-_if__(_VAX__ || _I960__)
-@samp{#} on the _HOST__;
-_fi__(_VAX__ || _I960__)
+_if__(_VAX__)
+@samp{#} on the Vax;
+_fi__(_VAX__)
+_if__(_I960__)
+@samp{#} on the i960;
+_fi__(_I960__)
_if__(_M680X0__)
@samp{|} on the 680x0;
_fi__(_M680X0__)
@samp{;} for the AMD 29K family;
_fi__(_AMD29K__)
@pxref{_MACH_DEP__}. @refill
+@c FIXME: fill in SPARC line comment char
-_if__(_ALL_ARCH__)
+_if__(_GENERIC__)
On some machines there are two different line comment characters. One
will only begin a comment if it is the first non-whitespace character on
a line, while the other will always begin a comment.
-_fi__(_ALL_ARCH__)
+_fi__(_GENERIC__)
To be compatible with past assemblers a special interpretation is
given to lines that begin with @samp{#}. Following the @samp{#} an
directive: typically valid for any computer. If the symbol begins with
a letter the statement is an assembly language @dfn{instruction}: it
will assemble into a machine language instruction.
-_if__(_ALL_ARCH__)
+_if__(_GENERIC__)
Different versions of @code{_AS__} for different computers will
recognize different instructions. In fact, the same symbol may
represent a different instruction in a different computer's assembly
language.@refill
-_fi__(_ALL_ARCH__)
+_fi__(_GENERIC__)
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
@item
The digit @samp{0}.
@item
+_if__(_GENERIC__)
+A letter, to tell @code{_AS__} the rest of the number is a flonum. @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
+will work here, but that might be changed. Vax BSD 4.2 assembler seems
+to allow any of @samp{defghDEFGH}.)
+@end ignore
+_fi__(_GENERIC__)
_if__(_AMD29K__)
+_if__(_GENERIC__)
+On the AMD 29K architecture, the letter must be:
+_fi__(_GENERIC__)
One of the letters @samp{DFPRSX} (in upper or lower case), to tell
@code{_AS__} the rest of the number is a flonum.
_fi__(_AMD29K__)
_if__(_I960__)
+_if__(_GENERIC__)
+On the Intel 960 architecture, the letter must be:
+_fi__(_GENERIC__)
One of the letters @samp{DFT} (in upper or lower case), to tell
@code{_AS__} the rest of the number is a flonum.
_fi__(_I960__)
-_if__(!(_AMD29K__||_I960__))
-A letter, to tell @code{_AS__} the rest of the number is a flonum. @kbd{e}
-is recommended. Case is not important. (Any otherwise illegal letter
-will work here, but that might be changed. Vax BSD 4.2 assembler seems
-to allow any of @samp{defghDEFGH}.)
-_fi__(!(_AMD29K__||_I960__))
@item
An optional sign: either @samp{+} or @samp{-}.
@item
second value.
The resulting number is then packed
-_if__(_ALL_ARCH__)
+_if__(_GENERIC__)
(in host-dependent byte order)
-_fi__(_ALL_ARCH__)
+_fi__(_GENERIC__)
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,
Subsegments are optional. If you don't use subsegments, everything
will be stored in subsegment number zero.
-_if__(!(_AMD29K__||_I960__))
+_if__(_GENERIC__)
Each subsegment is zero-padded up to a multiple of four bytes.
(Subsegments may be padded a different amount on different flavors
of @code{_AS__}.)
-_fi__(!(_AMD29K__||_I960__))
+_fi__(_GENERIC__)
_if__(_I960__)
@c Rich Pixley says padding here depends on target obj code format; that
@c doesn't seem particularly useful to say without further elaboration,
_if__(_AOUT__||_BOUT__)
@node a.out Symbols,,,
+_if__(_BOUT__)
@subsection Symbol Attributes: @code{a.out}, @code{b.out}
These symbol attributes appear only when @code{_AS__} is configured for
one of the Berkeley-descended object output formats.
+_fi__(_BOUT__)
+_if__(!_BOUT__)
+@subsection Symbol Attributes: @code{a.out}
+_fi__(!_BOUT__)
@node Symbol Desc, Symbol Other, Symbol Type, Symbol Attributes
@subsubsection Descriptor
@section @code{.double @var{flonums}}
@code{.double} expects zero or more flonums, separated by commas. It
assembles floating point numbers.
-_if__(_ALL_ARCH__)
+_if__(_GENERIC__)
The exact kind of floating point numbers emitted depends on how
@code{_AS__} is configured. @xref{_MACH_DEP__}.
-_fi__(_ALL_ARCH__)
-_if__(_AMD29K__ || _I960__)
+_fi__(_GENERIC__)
+_if__((!_GENERIC__) && (_AMD29K__ || _I960__))
On the _HOST__ family @samp{.double} emits 64-bit floating-point numbers
in IEEE format.
-_fi__(_AMD29K__ || _I960__)
+_fi__((!_GENERIC__) && (_AMD29K__ || _I960__))
@node Else,,,
@section @code{.else}
@section @code{.float @var{flonums}}
This directive assembles zero or more flonums, separated by commas. It
has the same effect as @code{.single}.
-_if__(_ALL_ARCH__)
+_if__(_GENERIC__)
The exact kind of floating point numbers emitted depends on how
@code{_AS__} is configured.
@xref{_MACH_DEP__}.
-_fi__(_ALL_ARCH__)
-_if__(_AMD29K__ || _I960__)
+_fi__(_GENERIC__)
+_if__((!_GENERIC__) && (_AMD29K__ || _I960__))
On the _HOST__ family, @code{.float} emits 32-bit floating point numbers
in IEEE format.
-_fi__(_AMD29K__ || _I960__)
+_fi__((!_GENERIC__) && (_AMD29K__ || _I960__))
@node Global, Ident, Float, Pseudo Ops
@section @code{.global @var{symbol}}, @code{.globl @var{symbol}}
This expects zero or more @var{expressions}, and emits
a 16 bit number for each.
-_if__(_ALL_ARCH__)
+_if__(_GENERIC__)
This directive is a synonym for @samp{.short}; depending on the target
architecture, it may also be a synonym for @samp{.word}.
-_fi__(_ALL_ARCH__)
-_if__( (_AMD29K__ || _I960__) && !_ALL_ARCH__ )
+_fi__(_GENERIC__)
+_if__( (_AMD29K__ || _I960__) && !_GENERIC__ )
This directive is a synonym for @samp{.short}.
-_fi__( (_AMD29K__ || _I960__) && !_ALL_ARCH__ )
+_fi__( (_AMD29K__ || _I960__) && !_GENERIC__ )
_if__(_AOUT__||_BOUT__||_COFF__)
@node Ident, If, Global, Pseudo Ops
@node Short, Single, Set, Pseudo Ops
@section @code{.short @var{expressions}}
-_if__(! (_SPARC__ || _AMD29K__ || _I960__) )
+_if__(_GENERIC__ && (! (_SPARC__ || _AMD29K__ || _I960__) ))
@code{.short} is the same as @samp{.word}. @xref{Word}.
-_fi__(! (_SPARC__ || _AMD29K__ || _I960__) )
-_if__(_SPARC__ || _AMD29K__ || _I960__)
+_fi__(_GENERIC__ && (! (_SPARC__ || _AMD29K__ || _I960__) ))
+_if__((!_GENERIC__) && (_SPARC__ || _AMD29K__ || _I960__))
This expects zero or more @var{expressions}, and emits
a 16 bit number for each.
-_fi__(_SPARC__ || _AMD29K__ || _I960__)
+_fi__((!_GENERIC__) && (_SPARC__ || _AMD29K__ || _I960__))
@node Single,,,
@section @code{.single @var{flonums}}
This directive assembles zero or more flonums, separated by commas. It
has the same effect as @code{.float}.
-_if__(_ALL_ARCH__)
+_if__(_GENERIC__)
The exact kind of floating point numbers emitted depends on how
@code{_AS__} is configured. @xref{_MACH_DEP__}.
-_fi__(_ALL_ARCH__)
-_if__(_AMD29K__ || _I960__)
+_fi__(_GENERIC__)
+_if__((!_GENERIC__) && (_AMD29K__ || _I960__ || _SPARC__))
On the _HOST__ family, @code{.single} emits 32-bit floating point
numbers in IEEE format.
-_fi__(_AMD29K__ || _I960__)
+_fi__((!_GENERIC__) && (_AMD29K__ || _I960__ || _SPARC__))
_if__(_COFF__)
@node Size,,,
@quotation
@emph{Warning:} In other versions of the GNU assembler, the directive
-@code{.space} has the effect of @code{.block} @xref{Machine Directives}.
+@code{.space} has the effect of @code{.block} @xref{_MACH_DEP__}.
@end quotation
_fi__(_AMD29K__)
@section @code{.word @var{expressions}}
This directive expects zero or more @var{expressions}, of any segment,
separated by commas.
-_if__(_SPARC__ || _AMD29K__ || _I960__)
+_if__((!_GENERIC__) && (_SPARC__ || _AMD29K__ || _I960__))
For each expression, @code{_AS__} emits a 32-bit number.
-_fi__(_SPARC__ || _AMD29K__ || _I960__)
-_if__(! (_SPARC__ || _AMD29K__ || _I960__) )
+_fi__((!_GENERIC__) && (_SPARC__ || _AMD29K__ || _I960__))
+_if__((!_GENERIC__) && (! (_SPARC__ || _AMD29K__ || _I960__) ))
For each expression, @code{_AS__} emits a 16-bit number.
-_fi__(! (_SPARC__ || _AMD29K__ || _I960__) )
+_fi__((!_GENERIC__) && (! (_SPARC__ || _AMD29K__ || _I960__) ))
-_if__(_ALL_ARCH__)
-The byte order of the expression depends on what kind of computer will
-run the program.
-_fi__(_ALL_ARCH__)
+_if__(_GENERIC__)
+The size of the number emitted, and its byte order,
+depends on what kind of computer will run the program.
+_fi__(_GENERIC__)
@c on these boxes the "special treatment to support compilers" doesn't
@c happen---32-bit addressability, period; no long/short jumps.
-_if__(! (_AMD29K__ || _I960__) )
-@subsection Special Treatment to support Compilers
+_if__(_GENERIC__ || (! (_AMD29K__ || _I960__) ))
+@quotation
+@emph{Warning: Special Treatment to support Compilers}
+@end quotation
In order to assemble compiler output into something that will work,
@code{_AS__} will occasionlly do strange things to @samp{.word} directives.
@samp{-DWORKING_DOT_WORD} option.} This feature is likely to confuse
assembly language programmers.
_fi__(_INTERNALS__)
-_fi__(! (_AMD29K__ || _I960__) )
+_fi__(_GENERIC__ || (! (_AMD29K__ || _I960__) ))
@node Deprecated, _MACH_DEP__, Word, Pseudo Ops
@section Deprecated Directives
@end table
@node _MACH_DEP__,,,
-_if__(_ALL_ARCH__)
+_if__(_GENERIC__)
@chapter Machine Dependent Features
-_fi__(_ALL_ARCH__)
+_fi__(_GENERIC__)
_if__(_VAX__)
@group
-_CHAPSEC__(0+_ALL_ARCH__) VAX Dependent Features
-_CHAPSEC__(1+_ALL_ARCH__) Options
+_CHAPSEC__(0+_GENERIC__) VAX Dependent Features
+_CHAPSEC__(1+_GENERIC__) Options
The Vax version of @code{_AS__} accepts any of the following options,
gives a warning message that the option was ignored and proceeds.
symbol so that the object file will be compatible with Vax-11
"C".
-_CHAPSEC__(1+_ALL_ARCH__) Floating Point
+_CHAPSEC__(1+_GENERIC__) Floating Point
Conversion of flonums to floating point is correct, and
compatible with previous assemblers. Rounding is
towards zero if the remainder is exactly half the least significant bit.
The @code{.float} directive produces @code{f} format numbers.
The @code{.double} directive produces @code{d} format numbers.
-_CHAPSEC__(1+_ALL_ARCH__) Machine Directives
+_CHAPSEC__(1+_GENERIC__) Vax Machine Directives
The Vax version of the assembler supports four directives for
generating Vax floating point constants. They are described in the
table below.
@end table
-_CHAPSEC__(1+_ALL_ARCH__) Opcodes
+_CHAPSEC__(1+_GENERIC__) Opcodes
All DEC mnemonics are supported. Beware that @code{case@dots{}}
instructions have exactly 3 operands. The dispatch table that
follows the @code{case@dots{}} instruction should be made with
@code{.word} statements. This is compatible with all unix
assemblers we know of.
-_CHAPSEC__(1+_ALL_ARCH__) Branch Improvement
+_CHAPSEC__(1+_GENERIC__) Branch Improvement
Certain pseudo opcodes are permitted. They are for branch
instructions. They expand to the shortest branch instruction that
will reach the target. Generally these mnemonics are made by
@item (byte displacement)
@kbd{b@var{COND} @dots{}}
@item (word displacement)
-@kbd{b@var{UNCOND} foo ; brw @dots{} ; foo:}
+@kbd{b@var{NOTCOND} foo ; brw @dots{} ; foo:}
@item (long displacement)
-@kbd{b@var{UNCOND} foo ; jmp @dots{} ; foo:}
+@kbd{b@var{NOTCOND} foo ; jmp @dots{} ; foo:}
@end table
@item jacb@var{X}
@var{X} may be one of @code{b d f g h l w}.
@item (word displacement)
@kbd{@var{OPCODE} @dots{}}
@item (long displacement)
-@kbd{@var{OPCODE} @dots{}, foo ; brb bar ; foo: jmp @dots{} ; bar:}
+@example
+@var{OPCODE} @dots{}, foo ;
+brb bar ;
+foo: jmp @dots{} ;
+bar:
+@end example
@end table
@item jaob@var{YYY}
@var{YYY} may be one of @code{lss leq}.
@item (byte displacement)
@kbd{@var{OPCODE} @dots{}}
@item (word displacement)
-@kbd{@var{OPCODE} @dots{}, foo ; brb bar ; foo: brw @var{destination} ; bar:}
+@example
+@var{OPCODE} @dots{}, foo ;
+brb bar ;
+foo: brw @var{destination} ;
+bar:
+@end example
@item (long displacement)
-@kbd{@var{OPCODE} @dots{}, foo ; brb bar ; foo: jmp @var{destination} ; bar: }
+@example
+@var{OPCODE} @dots{}, foo ;
+brb bar ;
+foo: jmp @var{destination} ;
+bar:
+@end example
@end table
@item aobleq
@itemx aoblss
@item (byte displacement)
@kbd{@var{OPCODE} @dots{}}
@item (word displacement)
-@kbd{@var{OPCODE} @dots{}, foo ; brb bar ; foo: brw @var{destination} ; bar:}
+@example
+@var{OPCODE} @dots{}, foo ;
+brb bar ;
+foo: brw @var{destination} ;
+bar:
+@end example
@item (long displacement)
-@kbd{@var{OPCODE} @dots{}, foo ; brb bar ; foo: jmp @var{destination} ; bar:}
+@example
+@var{OPCODE} @dots{}, foo ;
+brb bar ;
+foo: jmp @var{destination} ;
+bar:
+@end example
@end table
@end table
-_CHAPSEC__(1+_ALL_ARCH__) operands
+_CHAPSEC__(1+_GENERIC__) operands
The immediate character is @samp{$} for Unix compatibility, not
@samp{#} as DEC writes it.
@c in operands, but I forget what it is. It is
@c a syntax clash because () is used as an address mode
@c and to encapsulate sub-expressions.
-_CHAPSEC__(1+_ALL_ARCH__) Not Supported
+_CHAPSEC__(1+_GENERIC__) Not Supported
Vax bit fields can not be assembled with @code{_AS__}. Someone
can add the required code if they really need it.
+
_fi__(_VAX__)
_if__(_AMD29K__)
@group
-_CHAPSEC__(0+_ALL_ARCH__) AMD 29K Dependent Features
+_CHAPSEC__(0+_GENERIC__) AMD 29K Dependent Features
@node AMD29K Options, AMD29K Syntax, _MACH_DEP__, _MACH_DEP__
-_CHAPSEC__(1+_ALL_ARCH__) Options
+_CHAPSEC__(1+_GENERIC__) Options
@code{_AS__} has no additional command-line options for the AMD
29K family.
@end group
@node AMD29K Syntax, AMD29K Floating Point, AMD29K Options, _MACH_DEP__
@group
-_CHAPSEC__(1+_ALL_ARCH__) Syntax
-_CHAPSEC__(2+_ALL_ARCH__) Special Characters
+_CHAPSEC__(1+_GENERIC__) Syntax
+_CHAPSEC__(2+_GENERIC__) Special Characters
@samp{;} is the line comment character.
@samp{@@} can be used instead of a newline to separate statements.
an identifier).
@end group
-_CHAPSEC__(2+_ALL_ARCH__) Register Names
+_CHAPSEC__(2+_GENERIC__) Register Names
General-purpose registers are represented by predefined symbols of the
form @samp{GR@var{nnn}} (for global registers) or @samp{LR@var{nnn}}
(for local registers), where @var{nnn} represents a number between
@end smallexample
@node AMD29K Floating Point, AMD29K Directives, AMD29K Syntax, _MACH_DEP__
-_CHAPSEC__(1+_ALL_ARCH__) Floating Point
+_CHAPSEC__(1+_GENERIC__) Floating Point
The AMD 29K family uses IEEE floating-point numbers.
@group
@node AMD29K Directives, AMD29K Opcodes, AMD29K Floating Point, _MACH_DEP__
-_CHAPSEC__(1+_ALL_ARCH__) Machine Directives
+_CHAPSEC__(1+_GENERIC__) AMD 29K Machine Directives
-@node block, cputype, AMD29K Directives, AMD29K Directives
-_CHAPSEC__(2+_ALL_ARCH__) @code{.block @var{size} , @var{fill}}
+@table @code
+@item .block @var{size} , @var{fill}
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.
In other versions of the GNU assembler, this directive is called
@samp{.space}.
+@end table
@end group
-@node cputype, file, block, Machine Directives
-_CHAPSEC__(2+_ALL_ARCH__) @code{.cputype}
+@table @code
+@item .cputype
This directive is ignored; it is accepted for compatibility with other
AMD 29K assemblers.
-@node file, hword, cputype, Machine Directives
-_CHAPSEC__(2+_ALL_ARCH__) @code{.file}
+@item .file
This directive is ignored; it is accepted for compatibility with other
AMD 29K assemblers.
used for the directive called @code{.app-file} in the AMD 29K support.
@end quotation
-@node line, reg, hword, Machine Directives
-_CHAPSEC__(2+_ALL_ARCH__) @code{.line}
+@item .line
This directive is ignored; it is accepted for compatibility with other
AMD 29K assemblers.
-@node reg, sect, line, Machine Directives
-_CHAPSEC__(2+_ALL_ARCH__) @code{.reg @var{symbol}, @var{expression}}
+@item .reg @var{symbol}, @var{expression}
@code{.reg} has the same effect as @code{.lsym}; @pxref{Lsym}.
-@node sect, use, reg, Machine Directives
-_CHAPSEC__(2+_ALL_ARCH__) @code{.sect}
+@item .sect
This directive is ignored; it is accepted for compatibility with other
AMD 29K assemblers.
-@node use, , sect, Machine Directives
-_CHAPSEC__(2+_ALL_ARCH__) @code{.use @var{segment name}}
+@item .use @var{segment name}
Establishes the segment and subsegment for the following code;
@var{segment name} may be one of @code{.text}, @code{.data},
@code{.data1}, or @code{.lit}. With one of the first three @var{segment
name} options, @samp{.use} is equivalent to the machine directive
@var{segment name}; the remaining case, @samp{.use .lit}, is the same as
@samp{.data 200}.
-
+@end table
@node AMD29K Opcodes, , AMD29K Directives, _MACH_DEP__
@section Opcodes
_fi__(_AMD29K__)
_if__(_I960__)
-_CHAPSEC__(0+_ALL_ARCH__) Intel 80960 Dependent Features
+_CHAPSEC__(0+_GENERIC__) Intel 80960 Dependent Features
@node Options-i960,,,
-_CHAPSEC__(1+_ALL_ARCH__) Command-line Options
+_CHAPSEC__(1+_GENERIC__) Command-line Options
@table @code
@item -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC
@end table
@node Floating Point-i960,,,
-_CHAPSEC__(1+_ALL_ARCH__) Floating Point
+_CHAPSEC__(1+_GENERIC__) Floating Point
@code{_AS__} generates IEEE floating-point numbers for the directives
@samp{.float}, @samp{.double}, @samp{extended}, and @samp{.single}.
@group
@node Directives-i960,,,
-_CHAPSEC__(1+_ALL_ARCH__) Machine Directives
+_CHAPSEC__(1+_GENERIC__) i960 Machine Directives
-@node bss-i960,,,
-_CHAPSEC__(2+_ALL_ARCH__) @code{.bss @var{symbol}, @var{length}, @var{align}}
+@table @code
+@item .bss @var{symbol}, @var{length}, @var{align}
Reserve @var{length} bytes in the bss segment for a local @var{symbol},
aligned to the power of two specified by @var{align}. @var{length} and
@var{align} must be positive absolute expressions. This directive
differs from @samp{.lcomm} only in that it permits you to specify
an alignment. @xref{Lcomm}.
+@end table
@end group
-@node extended-i960,,,
-_CHAPSEC__(2+_ALL_ARCH__) @code{.extended @var{flonums}}
+@table @code
+@item .extended @var{flonums}
@code{.extended} expects zero or more flonums, separated by commas; for
each flonum, @samp{.extended} emits an IEEE extended-format (80-bit)
floating-point number.
-@node leafproc-i960,,,
-_CHAPSEC__(2+_ALL_ARCH__) @code{.leafproc @var{call-lab}, @var{bal-lab}}
+@item .leafproc @var{call-lab}, @var{bal-lab}
You can use the @samp{.leafproc} directive in conjunction with the
optimized @code{callj} instruction to enable faster calls of leaf
procedures. If a procedure is known to call no other procedures, you
two arguments are identical, the single argument is assumed to be the
@code{bal} entry point.
-@node sysproc-i960,,,
-_CHAPSEC__(2+_ALL_ARCH__) @code{.sysproc @var{name}, @var{index}}
+@item .sysproc @var{name}, @var{index}
The @samp{.sysproc} directive defines a name for a system procedure.
After you define it using @samp{.sysproc}, you can use @var{name} to
refer to the system procedure identified by @var{index} when calling
Both arguments are required; @var{index} must be between 0 and 31
(inclusive).
+@end table
@node Opcodes for i960,,,
-_CHAPSEC__(1+_ALL_ARCH__) i960 Opcodes
+_CHAPSEC__(1+_GENERIC__) i960 Opcodes
All Intel 960 machine instructions are supported; @pxref{Options-i960}
for a discussion of selecting the instruction subset for a particular
960 architecture.@refill
instructions with target displacements larger than 13 bits.
@node callj-i960
-_CHAPSEC__(2+_ALL_ARCH__) @code{callj}
+_CHAPSEC__(2+_GENERIC__) @code{callj}
You can write @code{callj} to have the assembler or the linker determine
the most appropriate form of subroutine call: @samp{call},
@samp{bal}, or @samp{calls}. If the assembly source contains
for the linker to resolve.
@node Compare-and-branch-i960
-_CHAPSEC__(2+_ALL_ARCH__) Compare-and-Branch
+_CHAPSEC__(2+_GENERIC__) Compare-and-Branch
The 960 architectures provide combined Compare-and-Branch instructions
that permit you to store the branch target in the lower 13 bits of the
necessary @emph{unless} you specify @code{-norelax}---in which case
@code{_AS__} gives an error instead.
+@group
These are the Compare-and-Branch instructions, their ``Jump'' variants,
and the instruction pairs they may expand into:
cmpoble& cmpojle& cmpo; ble\cr
cmpobne& cmpojne& cmpo; bne\cr}
@end tex
+@end group
_fi__(_I960__)
_if__(_M680X0__)
@group
-_CHAPSEC__(0+_ALL_ARCH__) M680x0 Dependent Features
-_CHAPSEC__(1+_ALL_ARCH__) M680x0 Options
+_CHAPSEC__(0+_GENERIC__) M680x0 Dependent Features
+_CHAPSEC__(1+_GENERIC__) M680x0 Options
The Motorola 680x0 version of @code{_AS__} has two machine dependent options.
One shortens undefined references from 32 to 16 bits, while the
other is used to tell @code{_AS__} what kind of machine it is
@samp{-m68020}, and @samp{-mc68020} to tell it what processor is the
target.
-_CHAPSEC__(1+_ALL_ARCH__) Syntax
+_CHAPSEC__(1+_GENERIC__) Syntax
The 680x0 version of @code{_AS__} uses syntax similar to the Sun assembler.
Size modifiers are appended directly to the end of the opcode without an
@item Index
@samp{@var{apc}@@(@var{digits},@var{register}:@var{size}:@var{scale})}
+
or @samp{@var{apc}@@(@var{register}:@var{size}:@var{scale})}
@item Postindex
@samp{@var{apc}@@(@var{digits})@@(@var{digits},@var{register}:@var{size}:@var{scale})}
+
or @samp{@var{apc}@@(@var{digits})@@(@var{register}:@var{size}:@var{scale})}
@item Preindex
@samp{@var{apc}@@(@var{digits},@var{register}:@var{size}:@var{scale})@@(@var{digits})}
+
or @samp{@var{apc}@@(@var{register}:@var{size}:@var{scale})@@(@var{digits})}
@item Memory Indirect
@end ignore
@end table
-_CHAPSEC__(1+_ALL_ARCH__) Floating Point
+_CHAPSEC__(1+_GENERIC__) Floating Point
The floating point code is not too well tested, and may have
subtle bugs in it.
directive to create extended precision numbers would not be
hard, but it has not yet seemed necessary.
-_CHAPSEC__(1+_ALL_ARCH__) Machine Directives
+_CHAPSEC__(1+_GENERIC__) 680x0 Machine Directives
In order to be compatible with the Sun assembler the 680x0 assembler
understands the following directives.
@table @code
This directive is identical to a @code{.space} directive.
@end table
-_CHAPSEC__(1+_ALL_ARCH__) Opcodes
+_CHAPSEC__(1+_GENERIC__) Opcodes
@c pesch@cygnus.com: I don't see any point in the following
@c paragraph. Bugs are bugs; how does saying this
@c help anyone?
instructions.
@end ignore
-_CHAPSEC__(2+_ALL_ARCH__) Branch Improvement
+_CHAPSEC__(2+_GENERIC__) Branch Improvement
Certain pseudo opcodes are permitted for branch instructions.
They expand to the shortest branch instruction that will reach the
@end table
-_CHAPSEC__(2+_ALL_ARCH__) Special Characters
+_CHAPSEC__(2+_GENERIC__) Special Characters
The immediate character is @samp{#} for Sun compatibility. The
line-comment character is @samp{|}. If a @samp{#} appears at the
beginning of a line, it is treated as a comment unless it looks like
@samp{# line file}, in which case it is treated normally.
+
_fi__(_M680X0__)
@c pesch@cygnus.com: conditionalize on something other than 0 when filled in.
_if__(0)
create single or double precision values. I don't know if the 32x32
understands extended precision numbers.
-@subsection Machine Directives
+@subsection 32x32 Machine Directives
The 32x32 has no machine dependent directives.
+
_fi__(0)
_if__(_SPARC__)
-@c fixme (sparc): Fill in "syntax" section!
-_CHAPSEC__(0+_ALL_ARCH__) SPARC Dependent Features
-@section Sparc
+@group
+_CHAPSEC__(0+_GENERIC__) SPARC Dependent Features
@subsection Options
The sparc has no machine dependent options.
+@end group
+@ignore
+@c FIXME: (sparc) Fill in "syntax" section!
@subsection syntax
I don't know anything about Sparc syntax. Someone who does
will have to write this section.
+@end ignore
@subsection Floating Point
The Sparc uses ieee floating-point numbers.
-@subsection Machine Directives
+@subsection Sparc Machine Directives
The Sparc version of @code{_AS__} supports the following additional
machine directives:
instead of the 16 bit values it produces on every other machine.
@end table
+
_fi__(_SPARC__)
_if__(_I80386__)
-_CHAPSEC__(0+_ALL_ARCH__) 80386 Dependent Features
-_CHAPSEC__(1+_ALL_ARCH__) Options
+_CHAPSEC__(0+_GENERIC__) 80386 Dependent Features
+_CHAPSEC__(1+_GENERIC__) Options
The 80386 has no machine dependent options.
-_CHAPSEC__(1+_ALL_ARCH__) AT&T Syntax versus Intel Syntax
+_CHAPSEC__(1+_GENERIC__) AT&T Syntax versus Intel Syntax
In order to maintain compatibility with the output of @code{_GCC__},
@code{_AS__} supports AT&T System V/386 assembler syntax. This is quite
different from Intel syntax. We mention these differences because
programs. Unix style systems expect all programs to be single segments.
@end itemize
-_CHAPSEC__(1+_ALL_ARCH__) Opcode Naming
+_CHAPSEC__(1+_GENERIC__) Opcode Naming
Opcode names are suffixed with one character modifiers which specify the
size of operands. The letters @samp{b}, @samp{w}, and @samp{l} specify
byte, word, and long operands. If no suffix is specified by an
AT&T syntax, but are @samp{call far} and @samp{jump far} in Intel
convention.
-_CHAPSEC__(1+_ALL_ARCH__) Register Naming
+_CHAPSEC__(1+_GENERIC__) Register Naming
Register operands are always prefixes with @samp{%}. The 80386 registers
consist of
@itemize @bullet
@samp{%st(4)}, @samp{%st(5)}, @samp{%st(6)}, and @samp{%st(7)}.
@end itemize
-_CHAPSEC__(1+_ALL_ARCH__) Opcode Prefixes
+_CHAPSEC__(1+_GENERIC__) Opcode Prefixes
Opcode prefixes are used to modify the following opcode. They are used
to repeat string instructions, to provide segment overrides, to perform
bus lock operations, and to give operand and address size (16-bit
to string instructions to make them repeat @samp{%ecx} times.
@end itemize
-_CHAPSEC__(1+_ALL_ARCH__) Memory References
+_CHAPSEC__(1+_GENERIC__) Memory References
An Intel syntax indirect memory reference of the form
@smallexample
@var{segment}:[@var{base} + @var{index}*@var{scale} + @var{disp}]
word, or long) with an opcode suffix (@samp{b}, @samp{w}, or @samp{l},
respectively).
-_CHAPSEC__(1+_ALL_ARCH__) Handling of Jump Instructions
+_CHAPSEC__(1+_GENERIC__) Handling of Jump Instructions
Jump instructions are always optimized to use the smallest possible
displacements. This is accomplished by using byte (8-bit) displacement
jumps whenever the target is sufficiently close. If a byte displacement
cx_nonzero:
@end smallexample
-_CHAPSEC__(1+_ALL_ARCH__) Floating Point
+_CHAPSEC__(1+_GENERIC__) Floating Point
All 80387 floating point types except packed BCD are supported.
(BCD support may be added without much difficulty). These data
types are 16-, 32-, and 64- bit integers, and single (32-bit),
instructions are made equivalent to @samp{f@dots{}} instructions. If
@samp{fwait} is desired it must be explicitly coded.
-_CHAPSEC__(1+_ALL_ARCH__) Notes
+_CHAPSEC__(1+_GENERIC__) Notes
There is some trickery concerning the @samp{mul} and @samp{imul}
instructions that deserves mention. The 16-, 32-, and 64-bit expanding
multiplies (base opcode @samp{0xf6}; extension 4 for @samp{mul} and 5
This is just a shorthand, so that, multiplying @samp{%eax} by 69, for
example, can be done with @samp{imul $69, %eax} rather than @samp{imul
$69, %eax, %eax}.
+
_fi__(_I80386__)
_if__(0)
@c pesch@cygnus.com: we ignore the following chapters, since internals are