@c Copyright (C) 2012-2021 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

Convene 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

