1@c Copyright (C) 2008-2021 Free Software Foundation, Inc.
2@c This is part of the GAS manual.
3@c For copying conditions, see the file as.texinfo.
4@ifset GENERIC
5@page
6@node RX-Dependent
7@chapter RX Dependent Features
8@end ifset
9@ifclear GENERIC
10@node Machine Dependencies
11@chapter RX Dependent Features
12@end ifclear
13
14@cindex RX support
15@menu
16* RX-Opts::                   RX Assembler Command-line Options
17* RX-Modifiers::              Symbolic Operand Modifiers
18* RX-Directives::             Assembler Directives
19* RX-Float::                  Floating Point
20* RX-Syntax::                 Syntax
21@end menu
22
23@node RX-Opts
24@section RX Options
25@cindex options, RX
26@cindex RX options
27
28The Renesas RX port of @code{@value{AS}} has a few target specific
29command-line options:
30
31@table @code
32
33@cindex @samp{-m32bit-doubles}
34@item -m32bit-doubles
35This option controls the ABI and indicates to use a 32-bit float ABI.
36It has no effect on the assembled instructions, but it does influence
37the behaviour of the @samp{.double} pseudo-op.
38This is the default.
39
40@cindex @samp{-m64bit-doubles}
41@item -m64bit-doubles
42This option controls the ABI and indicates to use a 64-bit float ABI.
43It has no effect on the assembled instructions, but it does influence
44the behaviour of the @samp{.double} pseudo-op.
45
46@cindex @samp{-mbig-endian}
47@item -mbig-endian
48This option controls the ABI and indicates to use a big-endian data
49ABI.  It has no effect on the assembled instructions, but it does
50influence the behaviour of the @samp{.short}, @samp{.hword}, @samp{.int},
51@samp{.word}, @samp{.long}, @samp{.quad} and @samp{.octa} pseudo-ops.
52
53@cindex @samp{-mlittle-endian}
54@item -mlittle-endian
55This option controls the ABI and indicates to use a little-endian data
56ABI.  It has no effect on the assembled instructions, but it does
57influence the behaviour of the @samp{.short}, @samp{.hword}, @samp{.int},
58@samp{.word}, @samp{.long}, @samp{.quad} and @samp{.octa} pseudo-ops.
59This is the default.
60
61@cindex @samp{-muse-conventional-section-names}
62@item -muse-conventional-section-names
63This option controls the default names given to the code (.text),
64initialised data (.data) and uninitialised data sections (.bss).
65
66@cindex @samp{-muse-renesas-section-names}
67@item -muse-renesas-section-names
68This option controls the default names given to the code (.P),
69initialised data (.D_1) and uninitialised data sections (.B_1).
70This is the default.
71
72@cindex @samp{-msmall-data-limit}
73@item -msmall-data-limit
74This option tells the assembler that the small data limit feature of
75the RX port of GCC is being used.  This results in the assembler
76generating an undefined reference to a symbol called @code{__gp} for
77use by the relocations that are needed to support the small data limit
78feature.   This option is not enabled by default as it would otherwise
79pollute the symbol table.
80
81@cindex @samp{-mpid}
82@item -mpid
83This option tells the assembler that the position independent data of the
84RX port of GCC is being used.  This results in the assembler
85generating an undefined reference to a symbol called @code{__pid_base},
86and also setting the RX_PID flag bit in the e_flags field of the ELF
87header of the object file.
88
89@cindex @samp{-mint-register}
90@item -mint-register=@var{num}
91This option tells the assembler how many registers have been reserved
92for use by interrupt handlers.  This is needed in order to compute the
93correct values for the @code{%gpreg} and @code{%pidreg} meta registers.
94
95@cindex @samp{-mgcc-abi}
96@item -mgcc-abi
97This option tells the assembler that the old GCC ABI is being used by
98the assembled code.  With this version of the ABI function arguments
99that are passed on the stack are aligned to a 32-bit boundary.
100
101@cindex @samp{-mrx-abi}
102@item -mrx-abi
103This option tells the assembler that the official RX ABI is being used
104by the assembled code.  With this version of the ABI function
105arguments that are passed on the stack are aligned to their natural
106alignments.  This option is the default.
107
108@cindex @samp{-mcpu=}
109@item -mcpu=@var{name}
110This option tells the assembler the target CPU type.  Currently the
111@code{rx100}, @code{rx200}, @code{rx600}, @code{rx610}, @code{rxv2},
112@code{rxv3} and @code{rxv3-dfpu} are recognised as valid cpu names.
113Attempting to assemble an instructionnot supported by the indicated
114cpu type will result in an error message being generated.
115
116@cindex @samp{-mno-allow-string-insns}
117@item -mno-allow-string-insns
118This option tells the assembler to mark the object file that it is
119building as one that does not use the string instructions
120@code{SMOVF}, @code{SCMPU}, @code{SMOVB}, @code{SMOVU}, @code{SUNTIL}
121@code{SWHILE} or the @code{RMPA} instruction.  In addition the mark
122tells the linker to complain if an attempt is made to link the binary
123with another one that does use any of these instructions.
124
125Note - the inverse of this option, @code{-mallow-string-insns}, is
126not needed.  The assembler automatically detects the use of the
127the instructions in the source code and labels the resulting
128object file appropriately.  If no string instructions are detected
129then the object file is labelled as being one that can be linked with
130either string-using or string-banned object files.
131@end table
132
133@node RX-Modifiers
134@section Symbolic Operand Modifiers
135
136@cindex RX modifiers
137@cindex syntax, RX
138@cindex %gp
139
140The assembler supports one modifier when using symbol addresses
141in RX instruction operands.  The general syntax is the following:
142
143@smallexample
144%gp(symbol)
145@end smallexample
146
147The modifier returns the offset from the @var{__gp} symbol to the
148specified symbol as a 16-bit value.  The intent is that this offset
149should be used in a register+offset move instruction when generating
150references to small data.  Ie, like this:
151
152@smallexample
153  mov.W	 %gp(_foo)[%gpreg], r1
154@end smallexample
155
156The assembler also supports two meta register names which can be used
157to refer to registers whose values may not be known to the
158programmer.  These meta register names are:
159
160@table @code
161
162@cindex @samp{%gpreg}
163@item %gpreg
164The small data address register.
165
166@cindex @samp{%pidreg}
167@item %pidreg
168The PID base address register.
169
170@end table
171
172Both registers normally have the value r13, but this can change if
173some registers have been reserved for use by interrupt handlers or if
174both the small data limit and position independent data features are
175being used at the same time.
176
177@node RX-Directives
178@section Assembler Directives
179
180@cindex assembler directives, RX
181@cindex RX assembler directives
182
183The RX version of @code{@value{AS}} has the following specific
184assembler directives:
185
186@table @code
187
188@item .3byte
189@cindex assembler directive .3byte, RX
190@cindex RX assembler directive .3byte
191Inserts a 3-byte value into the output file at the current location.
192
193@item .fetchalign
194@cindex assembler directive .fetchalign, RX
195@cindex RX assembler directive .fetchalign
196If the next opcode following this directive spans a fetch line
197boundary (8 byte boundary), the opcode is aligned to that boundary.
198If the next opcode does not span a fetch line, this directive has no
199effect.  Note that one or more labels may be between this directive
200and the opcode; those labels are aligned as well.  Any inserted bytes
201due to alignment will form a NOP opcode.
202
203@end table
204
205@node RX-Float
206@section Floating Point
207
208@cindex floating point, RX
209@cindex RX floating point
210
211The floating point formats generated by directives are these.
212
213@table @code
214@cindex @code{float} directive, RX
215
216@item .float
217@code{Single} precision (32-bit) floating point constants.
218
219@cindex @code{double} directive, RX
220@item .double
221If the @option{-m64bit-doubles} command-line option has been specified
222then then @code{double} directive generates @code{double} precision
223(64-bit) floating point constants, otherwise it generates
224@code{single} precision (32-bit) floating point constants.  To force
225the generation of 64-bit floating point constants used the @code{dc.d}
226directive instead.
227
228@end table
229
230@node RX-Syntax
231@section Syntax for the RX
232@menu
233* RX-Chars::                Special Characters
234@end menu
235
236@node RX-Chars
237@subsection Special Characters
238
239@cindex line comment character, RX
240@cindex RX line comment character
241The presence of a @samp{;} appearing anywhere on a line indicates the
242start of a comment that extends to the end of that line.
243
244If a @samp{#} appears as the first character of a line then the whole
245line is treated as a comment, but in this case the line can also be a
246logical line number directive (@pxref{Comments}) or a preprocessor
247control command (@pxref{Preprocessing}).
248
249@cindex line separator, RX
250@cindex statement separator, RX
251@cindex RX line separator
252The @samp{!} character can be used to separate statements on the same
253line.
254