* prdbg.c (pr_function_type): Close memory leaks.
[binutils.git] / gas / doc / c-arc.texi
blobea0fa4eb522c265700bdc3b6712894ec2ad61d7c
1 @c Copyright 2000, 2001, 2005, 2006, 2007, 2011 Free Software Foundation, Inc.
2 @c This is part of the GAS manual.
3 @c For copying conditions, see the file as.texinfo.
5 @ifset GENERIC
6 @page
7 @node ARC-Dependent
8 @chapter ARC Dependent Features
9 @end ifset
11 @ifclear GENERIC
12 @node Machine Dependencies
13 @chapter ARC Dependent Features
14 @end ifclear
16 @set ARC_CORE_DEFAULT 6
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
28 @node ARC Options
29 @section Options
30 @cindex ARC options (none)
31 @cindex options for ARC (none)
33 @table @code
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.
41 @table @code
43 @cindex @code{arc5} arc5, ARC
44 @item arc5
45 Base instruction set.
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:
52 @smallexample
53   mov.f r0,r1
54   beq   foo
55 @end smallexample
57 @cindex @code{arc7} arc7, ARC
58 @item arc7
59 Break (brk) and sleep (sleep) instructions.
61 @cindex @code{arc8} arc8, ARC
62 @item arc8
63 Software interrupt (swi) instruction.
65 @end table
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
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.
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.
81 @end table
83 @node ARC Syntax
84 @section Syntax
85 @menu
86 * ARC-Chars::                Special Characters
87 * ARC-Regs::                 Register Names
88 @end menu
90 @node ARC-Chars
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.
106 @node ARC-Regs
107 @subsection Register Names
109 @cindex ARC register names
110 @cindex register names, ARC
111 *TODO*
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.
124 @node ARC Directives
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
130 machine directives:
132 @table @code
134 @cindex @code{2byte} directive, ARC
135 @item .2byte @var{expressions}
136 *TODO*
138 @cindex @code{3byte} directive, ARC
139 @item .3byte @var{expressions}
140 *TODO*
142 @cindex @code{4byte} directive, ARC
143 @item .4byte @var{expressions}
144 *TODO*
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: 
156 @table @code
157 @item r          (readonly) 
158 @item w          (write only)
159 @item r|w        (read or write)
160 @end table
162 For example:
164 @smallexample
165   .extAuxRegister mulhi,0x12,w
166 @end smallexample
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.
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:
179 @smallexample
180   .extCondCode is_busy,0x14
181   
182    add.is_busy  r1,r2,r3
183    bis_busy     _main
184 @end smallexample
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} 
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
199 The other parameter gives a description of the register having a
200 @var{shortcut} in the pipeline.  The valid values are:
202 @table @code
203 @item can_shortcut
204 @item cannot_shortcut
205 @end table
207 For example:
209 @smallexample
210   .extCoreRegister mlo,57,r,can_shortcut
211 @end smallexample
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:
223 @table @bullet
224 @item @var{name}
225 Name of the extension instruction 
227 @item @var{opcode}
228 Opcode to be used. (Bits 27:31 in the encoding).  Valid values
229 0x10-0x1f or 0x03
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
245 following values:
247 @table @code
248 @item @code{SYNTAX_2OP}:
249 2 Operand Instruction 
250 @item @code{SYNTAX_3OP}:
251 3 Operand Instruction 
252 @end table
254 In addition there could be modifiers for the syntax class as described
255 below:
257 @itemize @minus
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:
272 @smallexample
273 inst r1,r2 
274 @end smallexample
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.
281 @end itemize 
282 @end table
284 For example, defining 64-bit multiplier with immediate operands:
286 @smallexample
287 .extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG ,
288                 SYNTAX_3OP|OP1_MUST_BE_IMM
289 @end smallexample
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).
296 @smallexample
297  .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED
298 @end smallexample
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}
305 *TODO*
307 @cindex @code{long} directive, ARC
308 @item .long @var{expressions}
309 *TODO*
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}
324 *TODO*
326 @cindex @code{word} directive, ARC
327 @item .word @var{expressions}
328 *TODO*
330 @end table
333 @node ARC Opcodes
334 @section Opcodes
336 @cindex ARC opcodes
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)