]>
Commit | Line | Data |
---|---|---|
4b95cf5c | 1 | @c Copyright (C) 2000-2014 Free Software Foundation, Inc. |
2d73a4ca NC |
2 | @c This is part of the GAS manual. |
3 | @c For copying conditions, see the file as.texinfo. | |
4 | ||
5 | @ifset GENERIC | |
6 | @page | |
7 | @node ARC-Dependent | |
8 | @chapter ARC Dependent Features | |
9 | @end ifset | |
10 | ||
11 | @ifclear GENERIC | |
12 | @node Machine Dependencies | |
13 | @chapter ARC Dependent Features | |
14 | @end ifclear | |
15 | ||
bcee8eb8 | 16 | @set ARC_CORE_DEFAULT 6 |
2d73a4ca NC |
17 | |
18 | @cindex ARC support | |
19 | @menu | |
20 | * ARC Options:: Options | |
21 | * ARC Syntax:: Syntax | |
22 | * ARC Floating Point:: Floating Point | |
23 | * ARC Directives:: ARC Machine Directives | |
24 | * ARC Opcodes:: Opcodes | |
25 | @end menu | |
26 | ||
27 | ||
28 | @node ARC Options | |
29 | @section Options | |
30 | @cindex ARC options (none) | |
31 | @cindex options for ARC (none) | |
32 | ||
33 | @table @code | |
34 | ||
35 | @cindex @code{-marc[5|6|7|8]} command line option, ARC | |
36 | @item -marc[5|6|7|8] | |
802a113d | 37 | This option selects the core processor variant. Using |
2d73a4ca NC |
38 | @code{-marc} is the same as @code{-marc@value{ARC_CORE_DEFAULT}}, which |
39 | is also the default. | |
40 | ||
41 | @table @code | |
42 | ||
43 | @cindex @code{arc5} arc5, ARC | |
44 | @item arc5 | |
45 | Base instruction set. | |
46 | ||
47 | @cindex @code{arc6} arc6, ARC | |
48 | @item arc6 | |
802a113d NC |
49 | Jump-and-link (jl) instruction. No requirement of an instruction between |
50 | setting flags and conditional jump. For example: | |
2d73a4ca | 51 | |
e10fad12 | 52 | @smallexample |
2d73a4ca NC |
53 | mov.f r0,r1 |
54 | beq foo | |
55 | @end smallexample | |
56 | ||
57 | @cindex @code{arc7} arc7, ARC | |
58 | @item arc7 | |
59 | Break (brk) and sleep (sleep) instructions. | |
60 | ||
61 | @cindex @code{arc8} arc8, ARC | |
62 | @item arc8 | |
63 | Software interrupt (swi) instruction. | |
64 | ||
65 | @end table | |
66 | ||
67 | Note: the @code{.option} directive can to be used to select a core | |
68 | variant from within assembly code. | |
69 | ||
70 | @cindex @code{-EB} command line option, ARC | |
71 | @item -EB | |
72 | This option specifies that the output generated by the assembler should | |
73 | be marked as being encoded for a big-endian processor. | |
74 | ||
75 | @cindex @code{-EL} command line option, ARC | |
76 | @item -EL | |
77 | This option specifies that the output generated by the assembler should | |
78 | be marked as being encoded for a little-endian processor - this is the | |
79 | default. | |
80 | ||
81 | @end table | |
82 | ||
2d73a4ca NC |
83 | @node ARC Syntax |
84 | @section Syntax | |
85 | @menu | |
86 | * ARC-Chars:: Special Characters | |
87 | * ARC-Regs:: Register Names | |
88 | @end menu | |
89 | ||
90 | @node ARC-Chars | |
91 | @subsection Special Characters | |
92 | ||
7c31ae13 NC |
93 | @cindex line comment character, ARC |
94 | @cindex ARC line comment character | |
95 | The presence of a @samp{#} on a line indicates the start of a comment | |
96 | that extends to the end of the current line. Note that if a line | |
97 | starts with a @samp{#} character then it can also be a logical line | |
98 | number directive (@pxref{Comments}) or a preprocessor | |
99 | control command (@pxref{Preprocessing}). | |
100 | ||
101 | @cindex line separator, ARC | |
102 | @cindex statement separator, ARC | |
103 | @cindex ARC line separator | |
104 | The ARC assembler does not support a line separator character. | |
2d73a4ca NC |
105 | |
106 | @node ARC-Regs | |
107 | @subsection Register Names | |
108 | ||
109 | @cindex ARC register names | |
110 | @cindex register names, ARC | |
111 | *TODO* | |
112 | ||
113 | ||
114 | @node ARC Floating Point | |
115 | @section Floating Point | |
116 | ||
117 | @cindex floating point, ARC (@sc{ieee}) | |
118 | @cindex ARC floating point (@sc{ieee}) | |
119 | The ARC core does not currently have hardware floating point | |
120 | support. Software floating point support is provided by @code{GCC} | |
121 | and uses @sc{ieee} floating-point numbers. | |
122 | ||
123 | ||
124 | @node ARC Directives | |
125 | @section ARC Machine Directives | |
126 | ||
127 | @cindex machine directives, ARC | |
128 | @cindex ARC machine directives | |
129 | The ARC version of @code{@value{AS}} supports the following additional | |
130 | machine directives: | |
131 | ||
132 | @table @code | |
133 | ||
134 | @cindex @code{2byte} directive, ARC | |
135 | @item .2byte @var{expressions} | |
136 | *TODO* | |
137 | ||
138 | @cindex @code{3byte} directive, ARC | |
139 | @item .3byte @var{expressions} | |
140 | *TODO* | |
141 | ||
142 | @cindex @code{4byte} directive, ARC | |
143 | @item .4byte @var{expressions} | |
144 | *TODO* | |
145 | ||
146 | @cindex @code{extAuxRegister} directive, ARC | |
147 | @item .extAuxRegister @var{name},@var{address},@var{mode} | |
802a113d NC |
148 | The ARCtangent A4 has extensible auxiliary register space. The |
149 | auxiliary registers can be defined in the assembler source code by | |
150 | using this directive. The first parameter is the @var{name} of the | |
151 | new auxiallry register. The second parameter is the @var{address} of | |
152 | the register in the auxiliary register memory map for the variant of | |
153 | the ARC. The third parameter specifies the @var{mode} in which the | |
34bca508 | 154 | register can be operated is and it can be one of: |
802a113d NC |
155 | |
156 | @table @code | |
34bca508 | 157 | @item r (readonly) |
802a113d NC |
158 | @item w (write only) |
159 | @item r|w (read or write) | |
160 | @end table | |
161 | ||
162 | For example: | |
2d73a4ca NC |
163 | |
164 | @smallexample | |
165 | .extAuxRegister mulhi,0x12,w | |
166 | @end smallexample | |
167 | ||
802a113d NC |
168 | This specifies an extension auxiliary register called @emph{mulhi} |
169 | which is at address 0x12 in the memory space and which is only | |
170 | writable. | |
171 | ||
2d73a4ca NC |
172 | @cindex @code{extCondCode} directive, ARC |
173 | @item .extCondCode @var{suffix},@var{value} | |
802a113d NC |
174 | The condition codes on the ARCtangent A4 are extensible and can be |
175 | specified by means of this assembler directive. They are specified | |
176 | by the suffix and the value for the condition code. They can be used to | |
177 | specify extra condition codes with any values. For example: | |
2d73a4ca NC |
178 | |
179 | @smallexample | |
180 | .extCondCode is_busy,0x14 | |
34bca508 | 181 | |
802a113d NC |
182 | add.is_busy r1,r2,r3 |
183 | bis_busy _main | |
2d73a4ca NC |
184 | @end smallexample |
185 | ||
186 | @cindex @code{extCoreRegister} directive, ARC | |
187 | @item .extCoreRegister @var{name},@var{regnum},@var{mode},@var{shortcut} | |
802a113d NC |
188 | Specifies an extension core register @var{name} for the application. |
189 | This allows a register @var{name} with a valid @var{regnum} between 0 | |
34bca508 | 190 | and 60, with the following as valid values for @var{mode} |
802a113d NC |
191 | |
192 | @table @samp | |
34bca508 | 193 | @item @emph{r} (readonly) |
802a113d NC |
194 | @item @emph{w} (write only) |
195 | @item @emph{r|w} (read or write) | |
196 | @end table | |
197 | ||
198 | ||
199 | The other parameter gives a description of the register having a | |
200 | @var{shortcut} in the pipeline. The valid values are: | |
201 | ||
202 | @table @code | |
203 | @item can_shortcut | |
204 | @item cannot_shortcut | |
205 | @end table | |
206 | ||
207 | For example: | |
2d73a4ca NC |
208 | |
209 | @smallexample | |
210 | .extCoreRegister mlo,57,r,can_shortcut | |
211 | @end smallexample | |
212 | ||
802a113d NC |
213 | This defines an extension core register mlo with the value 57 which |
214 | can shortcut the pipeline. | |
215 | ||
2d73a4ca NC |
216 | @cindex @code{extInstruction} directive, ARC |
217 | @item .extInstruction @var{name},@var{opcode},@var{subopcode},@var{suffixclass},@var{syntaxclass} | |
802a113d NC |
218 | The ARCtangent A4 allows the user to specify extension instructions. |
219 | The extension instructions are not macros. The assembler creates | |
220 | encodings for use of these instructions according to the specification | |
221 | by the user. The parameters are: | |
222 | ||
9e6f3811 | 223 | @itemize @bullet |
802a113d | 224 | @item @var{name} |
34bca508 | 225 | Name of the extension instruction |
802a113d NC |
226 | |
227 | @item @var{opcode} | |
228 | Opcode to be used. (Bits 27:31 in the encoding). Valid values | |
229 | 0x10-0x1f or 0x03 | |
230 | ||
231 | @item @var{subopcode} | |
232 | Subopcode to be used. Valid values are from 0x09-0x3f. However the | |
233 | correct value also depends on @var{syntaxclass} | |
234 | ||
235 | @item @var{suffixclass} | |
236 | Determines the kinds of suffixes to be allowed. Valid values are | |
34bca508 | 237 | @code{SUFFIX_NONE}, @code{SUFFIX_COND}, |
802a113d NC |
238 | @code{SUFFIX_FLAG} which indicates the absence or presence of |
239 | conditional suffixes and flag setting by the extension instruction. | |
240 | It is also possible to specify that an instruction sets the flags and | |
ec744b67 | 241 | is conditional by using @code{SUFFIX_CODE} | @code{SUFFIX_FLAG}. |
802a113d NC |
242 | |
243 | @item @var{syntaxclass} | |
244 | Determines the syntax class for the instruction. It can have the | |
245 | following values: | |
246 | ||
247 | @table @code | |
9a301b43 | 248 | @item @code{SYNTAX_2OP}: |
34bca508 | 249 | 2 Operand Instruction |
9a301b43 | 250 | @item @code{SYNTAX_3OP}: |
34bca508 | 251 | 3 Operand Instruction |
802a113d NC |
252 | @end table |
253 | ||
254 | In addition there could be modifiers for the syntax class as described | |
255 | below: | |
256 | ||
257 | @itemize @minus | |
258 | Syntax Class Modifiers are: | |
259 | ||
260 | @item @code{OP1_MUST_BE_IMM}: | |
261 | Modifies syntax class SYNTAX_3OP, specifying that the first operand | |
b45619c0 | 262 | of a three-operand instruction must be an immediate (i.e., the result |
802a113d NC |
263 | is discarded). OP1_MUST_BE_IMM is used by bitwise ORing it with |
264 | SYNTAX_3OP as given in the example below. This could usually be used | |
34bca508 | 265 | to set the flags using specific instructions and not retain results. |
802a113d NC |
266 | |
267 | @item @code{OP1_IMM_IMPLIED}: | |
268 | Modifies syntax class SYNTAX_20P, it specifies that there is an | |
269 | implied immediate destination operand which does not appear in the | |
270 | syntax. For example, if the source code contains an instruction like: | |
2d73a4ca NC |
271 | |
272 | @smallexample | |
34bca508 | 273 | inst r1,r2 |
2d73a4ca NC |
274 | @end smallexample |
275 | ||
802a113d NC |
276 | it really means that the first argument is an implied immediate (that |
277 | is, the result is discarded). This is the same as though the source | |
278 | code were: inst 0,r1,r2. You use OP1_IMM_IMPLIED by bitwise ORing it | |
279 | with SYNTAX_20P. | |
280 | ||
34bca508 | 281 | @end itemize |
9e6f3811 | 282 | @end itemize |
802a113d NC |
283 | |
284 | For example, defining 64-bit multiplier with immediate operands: | |
285 | ||
286 | @smallexample | |
287 | .extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG , | |
288 | SYNTAX_3OP|OP1_MUST_BE_IMM | |
289 | @end smallexample | |
290 | ||
291 | The above specifies an extension instruction called mp64 which has 3 operands, | |
292 | sets the flags, can be used with a condition code, for which the | |
34bca508 | 293 | first operand is an immediate. (Equivalent to discarding the result |
802a113d NC |
294 | of the operation). |
295 | ||
296 | @smallexample | |
297 | .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED | |
298 | @end smallexample | |
299 | ||
300 | This describes a 2 operand instruction with an implicit first | |
301 | immediate operand. The result of this operation would be discarded. | |
302 | ||
2d73a4ca NC |
303 | @cindex @code{half} directive, ARC |
304 | @item .half @var{expressions} | |
305 | *TODO* | |
306 | ||
307 | @cindex @code{long} directive, ARC | |
308 | @item .long @var{expressions} | |
309 | *TODO* | |
310 | ||
311 | @cindex @code{option} directive, ARC | |
312 | @item .option @var{arc|arc5|arc6|arc7|arc8} | |
313 | The @code{.option} directive must be followed by the desired core | |
314 | version. Again @code{arc} is an alias for | |
315 | @code{arc@value{ARC_CORE_DEFAULT}}. | |
316 | ||
317 | Note: the @code{.option} directive overrides the command line option | |
318 | @code{-marc}; a warning is emitted when the version is not consistent | |
319 | between the two - even for the implicit default core version | |
320 | (arc@value{ARC_CORE_DEFAULT}). | |
321 | ||
322 | @cindex @code{short} directive, ARC | |
323 | @item .short @var{expressions} | |
324 | *TODO* | |
325 | ||
326 | @cindex @code{word} directive, ARC | |
327 | @item .word @var{expressions} | |
328 | *TODO* | |
329 | ||
330 | @end table | |
331 | ||
332 | ||
333 | @node ARC Opcodes | |
334 | @section Opcodes | |
335 | ||
336 | @cindex ARC opcodes | |
337 | @cindex opcodes for ARC | |
338 | ||
339 | For information on the ARC instruction set, see @cite{ARC Programmers | |
802a113d | 340 | Reference Manual}, ARC International (www.arc.com) |