~ubuntu-branches/ubuntu/utopic/binutils-arm64-cross/utopic

« back to all changes in this revision

Viewing changes to binutils-2.23.52.20130611/gas/doc/c-arc.texi

  • Committer: Package Import Robot
  • Author(s): Matthias Klose
  • Date: 2013-06-20 17:38:09 UTC
  • Revision ID: package-import@ubuntu.com-20130620173809-app8lzgvymy5fg6c
Tags: 0.7
Build-depend on binutils-source (>= 2.23.52.20130620-1~).

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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.
 
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
 
 
16
@set ARC_CORE_DEFAULT 6
 
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]
 
37
This option selects the core processor variant.  Using
 
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
 
49
Jump-and-link (jl) instruction.  No requirement of an instruction between
 
50
setting flags and conditional jump.  For example:
 
51
 
 
52
@smallexample
 
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
 
 
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
 
 
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.
 
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}
 
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:
 
155
 
 
156
@table @code
 
157
@item r          (readonly)
 
158
@item w          (write only)
 
159
@item r|w        (read or write)
 
160
@end table
 
161
 
 
162
For example:
 
163
 
 
164
@smallexample
 
165
  .extAuxRegister mulhi,0x12,w
 
166
@end smallexample
 
167
 
 
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
 
 
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:
 
178
 
 
179
@smallexample
 
180
  .extCondCode is_busy,0x14
 
181
 
 
182
   add.is_busy  r1,r2,r3
 
183
   bis_busy     _main
 
184
@end smallexample
 
185
 
 
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}
 
191
 
 
192
@table @samp
 
193
@item @emph{r}   (readonly)
 
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:
 
208
 
 
209
@smallexample
 
210
  .extCoreRegister mlo,57,r,can_shortcut
 
211
@end smallexample
 
212
 
 
213
This defines an extension core register mlo with the value 57 which
 
214
can shortcut the pipeline.
 
215
 
 
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:
 
222
 
 
223
@itemize @bullet
 
224
@item @var{name}
 
225
Name of the extension instruction
 
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
 
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}.
 
242
 
 
243
@item @var{syntaxclass}
 
244
Determines the syntax class for the instruction.  It can have the
 
245
following values:
 
246
 
 
247
@table @code
 
248
@item @code{SYNTAX_2OP}:
 
249
2 Operand Instruction
 
250
@item @code{SYNTAX_3OP}:
 
251
3 Operand Instruction
 
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
 
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.
 
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:
 
271
 
 
272
@smallexample
 
273
inst r1,r2
 
274
@end smallexample
 
275
 
 
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
 
 
281
@end itemize
 
282
@end itemize
 
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
 
293
first operand is an immediate.  (Equivalent to discarding the result
 
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
 
 
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
 
340
Reference Manual}, ARC International (www.arc.com)