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