Home | History | Annotate | Download | only in doc
      1 @c Copyright (C) 2000-2014 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)
    341