1
@c Copyright 2000-2013 Free Software Foundation, Inc.
2
@c This is part of the GAS manual.
3
@c For copying conditions, see the file as.texinfo.
8
@chapter ARC Dependent Features
12
@node Machine Dependencies
13
@chapter ARC Dependent Features
16
@set ARC_CORE_DEFAULT 6
20
* ARC Options:: Options
22
* ARC Floating Point:: Floating Point
23
* ARC Directives:: ARC Machine Directives
24
* ARC Opcodes:: Opcodes
30
@cindex ARC options (none)
31
@cindex options for ARC (none)
35
@cindex @code{-marc[5|6|7|8]} command line option, ARC
37
This option selects the core processor variant. Using
38
@code{-marc} is the same as @code{-marc@value{ARC_CORE_DEFAULT}}, which
43
@cindex @code{arc5} arc5, ARC
47
@cindex @code{arc6} arc6, ARC
49
Jump-and-link (jl) instruction. No requirement of an instruction between
50
setting flags and conditional jump. For example:
57
@cindex @code{arc7} arc7, ARC
59
Break (brk) and sleep (sleep) instructions.
61
@cindex @code{arc8} arc8, ARC
63
Software interrupt (swi) instruction.
67
Note: the @code{.option} directive can to be used to select a core
68
variant from within assembly code.
70
@cindex @code{-EB} command line option, ARC
72
This option specifies that the output generated by the assembler should
73
be marked as being encoded for a big-endian processor.
75
@cindex @code{-EL} command line option, ARC
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
86
* ARC-Chars:: Special Characters
87
* ARC-Regs:: Register Names
91
@subsection Special Characters
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}).
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.
107
@subsection Register Names
109
@cindex ARC register names
110
@cindex register names, ARC
114
@node ARC Floating Point
115
@section Floating Point
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.
125
@section ARC Machine Directives
127
@cindex machine directives, ARC
128
@cindex ARC machine directives
129
The ARC version of @code{@value{AS}} supports the following additional
134
@cindex @code{2byte} directive, ARC
135
@item .2byte @var{expressions}
138
@cindex @code{3byte} directive, ARC
139
@item .3byte @var{expressions}
142
@cindex @code{4byte} directive, ARC
143
@item .4byte @var{expressions}
146
@cindex @code{extAuxRegister} directive, ARC
147
@item .extAuxRegister @var{name},@var{address},@var{mode}
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
154
register can be operated is and it can be one of:
159
@item r|w (read or write)
165
.extAuxRegister mulhi,0x12,w
168
This specifies an extension auxiliary register called @emph{mulhi}
169
which is at address 0x12 in the memory space and which is only
172
@cindex @code{extCondCode} directive, ARC
173
@item .extCondCode @var{suffix},@var{value}
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:
180
.extCondCode is_busy,0x14
186
@cindex @code{extCoreRegister} directive, ARC
187
@item .extCoreRegister @var{name},@var{regnum},@var{mode},@var{shortcut}
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
190
and 60, with the following as valid values for @var{mode}
193
@item @emph{r} (readonly)
194
@item @emph{w} (write only)
195
@item @emph{r|w} (read or write)
199
The other parameter gives a description of the register having a
200
@var{shortcut} in the pipeline. The valid values are:
204
@item cannot_shortcut
210
.extCoreRegister mlo,57,r,can_shortcut
213
This defines an extension core register mlo with the value 57 which
214
can shortcut the pipeline.
216
@cindex @code{extInstruction} directive, ARC
217
@item .extInstruction @var{name},@var{opcode},@var{subopcode},@var{suffixclass},@var{syntaxclass}
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:
225
Name of the extension instruction
228
Opcode to be used. (Bits 27:31 in the encoding). Valid values
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}
235
@item @var{suffixclass}
236
Determines the kinds of suffixes to be allowed. Valid values are
237
@code{SUFFIX_NONE}, @code{SUFFIX_COND},
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
241
is conditional by using @code{SUFFIX_CODE} | @code{SUFFIX_FLAG}.
243
@item @var{syntaxclass}
244
Determines the syntax class for the instruction. It can have the
248
@item @code{SYNTAX_2OP}:
249
2 Operand Instruction
250
@item @code{SYNTAX_3OP}:
251
3 Operand Instruction
254
In addition there could be modifiers for the syntax class as described
258
Syntax Class Modifiers are:
260
@item @code{OP1_MUST_BE_IMM}:
261
Modifies syntax class SYNTAX_3OP, specifying that the first operand
262
of a three-operand instruction must be an immediate (i.e., the result
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
265
to set the flags using specific instructions and not retain results.
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:
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
284
For example, defining 64-bit multiplier with immediate operands:
287
.extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG ,
288
SYNTAX_3OP|OP1_MUST_BE_IMM
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
293
first operand is an immediate. (Equivalent to discarding the result
297
.extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED
300
This describes a 2 operand instruction with an implicit first
301
immediate operand. The result of this operation would be discarded.
303
@cindex @code{half} directive, ARC
304
@item .half @var{expressions}
307
@cindex @code{long} directive, ARC
308
@item .long @var{expressions}
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}}.
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}).
322
@cindex @code{short} directive, ARC
323
@item .short @var{expressions}
326
@cindex @code{word} directive, ARC
327
@item .word @var{expressions}
337
@cindex opcodes for ARC
339
For information on the ARC instruction set, see @cite{ARC Programmers
340
Reference Manual}, ARC International (www.arc.com)