@c Copyright 2012
@c 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 XGATE-Dependent
@chapter XGATE Dependent Features
@end ifset
@ifclear GENERIC
@node Machine Dependencies
@chapter XGATE Dependent Features
@end ifclear

@cindex XGATE support
@menu
* XGATE-Opts::                   XGATE Options
* XGATE-Syntax::                 Syntax
* XGATE-Directives::             Assembler Directives
* XGATE-Float::                  Floating Point
* XGATE-opcodes::                Opcodes
@end menu

@node XGATE-Opts
@section XGATE Options

@cindex options, XGATE
@cindex XGATE options
The Freescale XGATE version of @code{@value{AS}} has a few machine
dependent options.

@table @code

@cindex @samp{-mshort}
@item -mshort
This option controls the ABI and indicates to use a 16-bit integer ABI.
It has no effect on the assembled instructions.
This is the default.

@cindex @samp{-mlong}
@item -mlong
This option controls the ABI and indicates to use a 32-bit integer ABI.

@cindex @samp{-mshort-double}
@item -mshort-double
This option controls the ABI and indicates to use a 32-bit float ABI.
This is the default.

@cindex @samp{-mlong-double}
@item -mlong-double
This option controls the ABI and indicates to use a 64-bit float ABI.

@cindex @samp{--print-insn-syntax}
@item --print-insn-syntax
You can use the @samp{--print-insn-syntax} option to obtain the
syntax description of the instruction when an error is detected.

@cindex @samp{--print-opcodes}
@item --print-opcodes
The @samp{--print-opcodes} option prints the list of all the
instructions with their syntax. Once the list is printed
@code{@value{AS}} exits.

@end table

@node XGATE-Syntax
@section Syntax

@cindex XGATE syntax
@cindex syntax, XGATE

In XGATE RISC syntax, the instruction name comes first and it may
be followed by up to three operands. Operands are separated by commas
(@samp{,}). @code{@value{AS}} will complain if too many operands are specified
for a given instruction. The same will happen if you specified too few
 operands.

@smallexample
nop
ldl  #23
CMP  R1, R2
@end smallexample

@cindex line comment character, XGATE
@cindex XGATE line comment character
The presence of a @samp{;} character or a @samp{!} character anywhere
on a line indicates the start of a comment that extends to the end of
that line.

A @samp{*} or a @samp{#} character at the start of a line also
introduces a line comment, but these characters do not work elsewhere
on the line.  If the first character of the line is a @samp{#} then as
well as starting a comment, the line could also be logical line number
directive (@pxref{Comments}) or a preprocessor control command
(@pxref{Preprocessing}).

@cindex line separator, XGATE
@cindex statement separator, XGATE
@cindex XGATE line separator
The XGATE assembler does not currently support a line separator
character.

@cindex XGATE addressing modes
@cindex addressing modes, XGATE
The following addressing modes are understood for XGATE:
@table @dfn
@item Inherent
@samp{}

@item Immediate 3 Bit Wide
@samp{#@var{number}}

@item Immediate 4 Bit Wide
@samp{#@var{number}}

@item Immediate 8 Bit Wide
@samp{#@var{number}}

@item Monadic Addressing
@samp{@var{reg}}

@item Dyadic Addressing
@samp{@var{reg}, @var{reg}}

@item Triadic Addressing
@samp{@var{reg}, @var{reg}, @var{reg}}

@item Relative Addressing 9 Bit Wide
@samp{*@var{symbol}}

@item Relative Addressing 10 Bit Wide
@samp{*@var{symbol}}

@item Index Register plus Immediate Offset
@samp{@var{reg}, (@var{reg}, #@var{number})}

@item Index Register plus Register Offset
@samp{@var{reg}, @var{reg}, @var{reg}}

@item Index Register plus Register Offset with Post-increment
@samp{@var{reg}, @var{reg}, @var{reg}+}

@item Index Register plus Register Offset with Pre-decrement
@samp{@var{reg}, @var{reg}, -@var{reg}}

The register can be either @samp{R0}, @samp{R1}, @samp{R2}, @samp{R3},
@samp{R4}, @samp{R5}, @samp{R6} or @samp{R7}.

@end table

Convience macro opcodes to deal with 16-bit values have been added.  

@table @dfn

@item Immediate 16 Bit Wide
@samp{#@var{number}}, or @samp{*@var{symbol}}

For example:

@smallexample
ldw R1, #1024
ldw R3, timer
ldw R1, (R1, #0)
COM R1
stw R2, (R1, #0)
@end smallexample
@end table

@node XGATE-Directives
@section Assembler Directives

@cindex assembler directives, XGATE
@cindex XGATE assembler directives

The XGATE version of @code{@value{AS}} have the following
specific assembler directives:

@node XGATE-Float
@section Floating Point

@cindex floating point, XGATE
@cindex XGATE floating point
Packed decimal (P) format floating literals are not supported(yet).

The floating point formats generated by directives are these.

@table @code
@cindex @code{float} directive, XGATE
@item .float
@code{Single} precision floating point constants.

@cindex @code{double} directive, XGATE
@item .double
@code{Double} precision floating point constants.

@cindex @code{extend} directive XGATE
@cindex @code{ldouble} directive XGATE
@item .extend
@itemx .ldouble
@code{Extended} precision (@code{long double}) floating point constants.
@end table

@need 2000
@node XGATE-opcodes
@section Opcodes

@cindex XGATE opcodes
@cindex instruction set, XGATE

