@c Copyright 2008, 2009
@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 RX-Dependent
@chapter RX Dependent Features
@end ifset
@ifclear GENERIC
@node Machine Dependencies
@chapter RX Dependent Features
@end ifclear

@cindex RX support
@menu
* RX-Opts::                   RX Assembler Command Line Options
* RX-Modifiers::              Symbolic Operand Modifiers
* RX-Directives::             Assembler Directives
* RX-Float::                  Floating Point
@end menu

@node RX-Opts
@section RX Options
@cindex options, RX
@cindex RX options

The Renesas RX port of @code{@value{AS}} has a few target specfic
command line options:

@table @code

@cindex @samp{-m32bit-doubles}
@item -m32bit-doubles
This option controls the ABI and indicates to use a 32-bit float ABI.
It has no effect on the assembled instructions, but it does influence
the behaviour of the @samp{.double} pseudo-op.
This is the default.

@cindex @samp{-m64bit-doubles}
@item -m64bit-doubles
This option controls the ABI and indicates to use a 64-bit float ABI.
It has no effect on the assembled instructions, but it does influence
the behaviour of the @samp{.double} pseudo-op.

@cindex @samp{-mbig-endian}
@item -mbig-endian
This option controls the ABI and indicates to use a big-endian data
ABI.  It has no effect on the assembled instructions, but it does
influence the behaviour of the @samp{.short}, @samp{.hword}, @samp{.int},
@samp{.word}, @samp{.long}, @samp{.quad} and @samp{.octa} pseudo-ops.

@cindex @samp{-mlittle-endian}
@item -mlittle-endian
This option controls the ABI and indicates to use a little-endian data
ABI.  It has no effect on the assembled instructions, but it does
influence the behaviour of the @samp{.short}, @samp{.hword}, @samp{.int},
@samp{.word}, @samp{.long}, @samp{.quad} and @samp{.octa} pseudo-ops.
This is the default.

@cindex @samp{-muse-conventional-section-names}
@item -muse-conventional-section-names
This option controls the default names given to the code (.text),
initialised data (.data) and uninitialised data sections (.bss).

@cindex @samp{-muse-renesas-section-names}
@item -muse-renesas-section-names
This option controls the default names given to the code (.P),
initialised data (.D_1) and uninitialised data sections (.B_1).
This is the default.

@cindex @samp{-msmall-data-limit}
@item -msmall-data-limit
This option tells the assembler that the small data limit feature of
the RX port of GCC is being used.  This results in the assembler
generating an undefined reference to a symbol called __gp for use by
the relocations that are needed to support the small data limit
feature.   This option is not enabled by default as it would otherwise
pollute the symbol table.

@end table

@node RX-Modifiers
@section Symbolic Operand Modifiers

@cindex RX modifiers
@cindex syntax, RX

The assembler supports several modifiers when using symbol addresses
in RX instruction operands.  The general syntax is the following:

@smallexample
%modifier(symbol)
@end smallexample

@table @code
@cindex symbol modifiers

@item %gp
@c FIXME: Add documentation here.

@end table

@node RX-Directives
@section Assembler Directives

@cindex assembler directives, RX
@cindex RX assembler directives

The RX version of @code{@value{AS}} has the following specific
assembler directives:

@table @code

@item .3byte
@cindex assembler directive .3byte, RX
@cindex RX assembler directive .3byte
Inserts a 3-byte value into the output file at the current location.

@end table

@node RX-Float
@section Floating Point

@cindex floating point, RX
@cindex RX floating point

The floating point formats generated by directives are these.

@table @code
@cindex @code{float} directive, RX

@item .float
@code{Single} precision (32-bit) floating point constants.

@cindex @code{double} directive, RX
@item .double
If the @option{-m64bit-doubles} command line option has been specified
then then @code{double} directive generates @code{double} precision
(64-bit) floating point constants, otherwise it generates
@code{single} precision (32-bit) floating point constants.  To force
the generation of 64-bit floating point constants used the @code{dc.d}
directive instead.

@end table
