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