@c Copyright 1991, 1992, 1993, 1994, 1995 Free Software Foundation, Inc.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.
@ifset GENERIC
@page
@node AMD29K-Dependent
@chapter AMD 29K Dependent Features
@end ifset
@ifclear GENERIC
@node Machine Dependencies
@chapter AMD 29K Dependent Features
@end ifclear

@cindex AMD 29K support
@cindex 29K support
@menu
* AMD29K Options::              Options
* AMD29K Syntax::               Syntax
* AMD29K Floating Point::       Floating Point
* AMD29K Directives::           AMD 29K Machine Directives
* AMD29K Opcodes::              Opcodes
@end menu

@node AMD29K Options
@section Options
@cindex AMD 29K options (none)
@cindex options for AMD29K (none)
@code{@value{AS}} has no additional command-line options for the AMD
29K family.

@node AMD29K Syntax
@section Syntax
@menu
* AMD29K-Macros::		Macros
* AMD29K-Chars::                Special Characters
* AMD29K-Regs::                 Register Names
@end menu

@node AMD29K-Macros
@subsection Macros

@cindex Macros, AMD 29K
@cindex AMD 29K macros
The macro syntax used on the AMD 29K is like that described in the AMD
29K Family Macro Assembler Specification.  Normal @code{@value{AS}}
macros should still work.

@node AMD29K-Chars
@subsection Special Characters

@cindex line comment character, AMD 29K
@cindex AMD 29K line comment character
@samp{;} is the line comment character.

@cindex identifiers, AMD 29K
@cindex AMD 29K identifiers
The character @samp{?} is permitted in identifiers (but may not begin
an identifier).

@node AMD29K-Regs
@subsection Register Names

@cindex AMD 29K register names
@cindex register names, AMD 29K
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
@code{0} and @code{127}, written with no leading zeros.  The leading
letters may be in either upper or lower case; for example, @samp{gr13}
and @samp{LR7} are both valid register names.

You may also refer to general-purpose registers by specifying the
register number as the result of an expression (prefixed with @samp{%%}
to flag the expression as a register number):
@smallexample
%%@var{expression}
@end smallexample
@noindent
---where @var{expression} must be an absolute expression evaluating to a
number between @code{0} and @code{255}.  The range [0, 127] refers to
global registers, and the range [128, 255] to local registers.

@cindex special purpose registers, AMD 29K
@cindex AMD 29K special purpose registers
@cindex protected registers, AMD 29K
@cindex AMD 29K protected registers
In addition, @code{@value{AS}} understands the following protected
special-purpose register names for the AMD 29K family:

@smallexample
  vab    chd    pc0
  ops    chc    pc1
  cps    rbp    pc2
  cfg    tmc    mmu
  cha    tmr    lru
@end smallexample

These unprotected special-purpose register names are also recognized:
@smallexample
  ipc    alu    fpe
  ipa    bp     inte
  ipb    fc     fps
  q      cr     exop
@end smallexample

@node AMD29K Floating Point
@section Floating Point

@cindex floating point, AMD 29K (@sc{ieee})
@cindex AMD 29K floating point (@sc{ieee})
The AMD 29K family uses @sc{ieee} floating-point numbers.

@node AMD29K Directives
@section AMD 29K Machine Directives

@cindex machine directives, AMD 29K
@cindex AMD 29K machine directives
@table @code
@cindex @code{block} directive, AMD 29K
@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 @sc{gnu} assembler, this directive is called
@samp{.space}.
@end table

@table @code
@cindex @code{cputype} directive, AMD 29K
@item .cputype
This directive is ignored; it is accepted for compatibility with other
AMD 29K assemblers.

@cindex @code{file} directive, AMD 29K
@item .file
This directive is ignored; it is accepted for compatibility with other
AMD 29K assemblers.

@quotation
@emph{Warning:} in other versions of the @sc{gnu} assembler, @code{.file} is
used for the directive called @code{.app-file} in the AMD 29K support.
@end quotation

@cindex @code{line} directive, AMD 29K
@item .line
This directive is ignored; it is accepted for compatibility with other
AMD 29K assemblers.

@ignore
@c since we're ignoring .lsym...
@cindex @code{reg} directive, AMD 29K
@item .reg @var{symbol}, @var{expression}
@code{.reg} has the same effect as @code{.lsym}; @pxref{Lsym,,@code{.lsym}}.
@end ignore

@cindex @code{sect} directive, AMD 29K
@item .sect
This directive is ignored; it is accepted for compatibility with other
AMD 29K assemblers.

@cindex @code{use} directive, AMD 29K
@item .use @var{section name}
Establishes the section and subsection for the following code;
@var{section name} may be one of @code{.text}, @code{.data},
@code{.data1}, or @code{.lit}.  With one of the first three @var{section
name} options, @samp{.use} is equivalent to the machine directive
@var{section name}; the remaining case, @samp{.use .lit}, is the same as
@samp{.data 200}.
@end table

@node AMD29K Opcodes
@section Opcodes

@cindex AMD 29K opcodes
@cindex opcodes for AMD 29K
@code{@value{AS}} implements all the standard AMD 29K opcodes.  No
additional pseudo-instructions are needed on this family.

For information on the 29K machine instruction set, see @cite{Am29000
User's Manual}, Advanced Micro Devices, Inc.

