Home | History | Annotate | Download | only in doc
      1 @c Copyright (C) 1997-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 @ifset GENERIC
      5 @page
      6 @node D30V-Dependent
      7 @chapter D30V Dependent Features
      8 @end ifset
      9 @ifclear GENERIC
     10 @node Machine Dependencies
     11 @chapter D30V Dependent Features
     12 @end ifclear
     13 
     14 @cindex D30V support
     15 @menu
     16 * D30V-Opts::                   D30V Options
     17 * D30V-Syntax::                 Syntax
     18 * D30V-Float::                  Floating Point
     19 * D30V-Opcodes::                Opcodes
     20 @end menu
     21 
     22 @node D30V-Opts
     23 @section D30V Options
     24 @cindex options, D30V
     25 @cindex D30V options
     26 The Mitsubishi D30V version of @code{@value{AS}} has a few machine
     27 dependent options.
     28 
     29 @table @samp
     30 @item -O
     31 The D30V can often execute two sub-instructions in parallel. When this option
     32 is used, @code{@value{AS}} will attempt to optimize its output by detecting when
     33 instructions can be executed in parallel.
     34 
     35 @item -n
     36 When this option is used, @code{@value{AS}} will issue a warning every
     37 time it adds a nop instruction.
     38 
     39 @item -N
     40 When this option is used, @code{@value{AS}} will issue a warning if it
     41 needs to insert a nop after a 32-bit multiply before a load or 16-bit
     42 multiply instruction.
     43 @end table
     44 
     45 @node D30V-Syntax
     46 @section Syntax
     47 @cindex D30V syntax
     48 @cindex syntax, D30V
     49 
     50 The D30V syntax is based on the syntax in Mitsubishi's D30V architecture manual.
     51 The differences are detailed below.
     52 
     53 @menu
     54 * D30V-Size::                 Size Modifiers
     55 * D30V-Subs::                 Sub-Instructions
     56 * D30V-Chars::                Special Characters
     57 * D30V-Guarded::              Guarded Execution
     58 * D30V-Regs::                 Register Names
     59 * D30V-Addressing::           Addressing Modes
     60 @end menu
     61 
     62 
     63 @node D30V-Size
     64 @subsection Size Modifiers
     65 @cindex D30V size modifiers
     66 @cindex size modifiers, D30V
     67 The D30V version of @code{@value{AS}} uses the instruction names in the D30V
     68 Architecture Manual.  However, the names in the manual are sometimes ambiguous.
     69 There are instruction names that can assemble to a short or long form opcode.
     70 How does the assembler pick the correct form?  @code{@value{AS}} will always pick the
     71 smallest form if it can.  When dealing with a symbol that is not defined yet when a
     72 line is being assembled, it will always use the long form.  If you need to force the
     73 assembler to use either the short or long form of the instruction, you can append
     74 either @samp{.s} (short) or @samp{.l} (long) to it.  For example, if you are writing
     75 an assembly program and you want to do a branch to a symbol that is defined later
     76 in your program, you can write @samp{bra.s foo}.
     77 Objdump and GDB will always append @samp{.s} or @samp{.l} to instructions which
     78 have both short and long forms.
     79 
     80 @node D30V-Subs
     81 @subsection Sub-Instructions
     82 @cindex D30V sub-instructions
     83 @cindex sub-instructions, D30V
     84 The D30V assembler takes as input a series of instructions, either one-per-line,
     85 or in the special two-per-line format described in the next section.  Some of these
     86 instructions will be short-form or sub-instructions.  These sub-instructions can be packed
     87 into a single instruction.  The assembler will do this automatically.  It will also detect
     88 when it should not pack instructions.  For example, when a label is defined, the next
     89 instruction will never be packaged with the previous one.  Whenever a branch and link
     90 instruction is called, it will not be packaged with the next instruction so the return
     91 address will be valid.  Nops are automatically inserted when necessary.
     92 
     93 If you do not want the assembler automatically making these decisions, you can control
     94 the packaging and execution type (parallel or sequential) with the special execution
     95 symbols described in the next section.
     96 
     97 @node D30V-Chars
     98 @subsection Special Characters
     99 @cindex line comment character, D30V
    100 @cindex D30V line comment character
    101 A semicolon (@samp{;}) can be used anywhere on a line to start a
    102 comment that extends to the end of the line.
    103 
    104 If a @samp{#} appears as the first character of a line, the whole line
    105 is treated as a comment, but in this case the line could also be a
    106 logical line number directive (@pxref{Comments}) or a preprocessor
    107 control command (@pxref{Preprocessing}).
    108 
    109 @cindex sub-instruction ordering, D30V
    110 @cindex D30V sub-instruction ordering
    111 Sub-instructions may be executed in order, in reverse-order, or in parallel.
    112 Instructions listed in the standard one-per-line format will be executed
    113 sequentially unless you use the @samp{-O} option.
    114 
    115 To specify the executing order, use the following symbols:
    116 @table @samp
    117 @item ->
    118 Sequential with instruction on the left first.
    119 
    120 @item <-
    121 Sequential with instruction on the right first.
    122 
    123 @item ||
    124 Parallel
    125 @end table
    126 
    127 The D30V syntax allows either one instruction per line, one instruction per line with
    128 the execution symbol, or two instructions per line.  For example
    129 @table @code
    130 @item abs r2,r3 -> abs r4,r5
    131 Execute these sequentially.  The instruction on the right is in the right
    132 container and is executed second.
    133 
    134 @item abs r2,r3 <- abs r4,r5
    135 Execute these reverse-sequentially.  The instruction on the right is in the right
    136 container, and is executed first.
    137 
    138 @item abs r2,r3 || abs r4,r5
    139 Execute these in parallel.
    140 
    141 @item ldw r2,@@(r3,r4) ||
    142 @itemx mulx r6,r8,r9
    143 Two-line format. Execute these in parallel.
    144 
    145 @item mulx a0,r8,r9
    146 @itemx stw r2,@@(r3,r4)
    147 Two-line format. Execute these sequentially unless @samp{-O} option is
    148 used.  If the @samp{-O} option is used, the assembler will determine if
    149 the instructions could be done in parallel (the above two instructions
    150 can be done in parallel), and if so, emit them as parallel instructions.
    151 The assembler will put them in the proper containers.  In the above
    152 example, the assembler will put the @samp{stw} instruction in left
    153 container and the @samp{mulx} instruction in the right container.
    154 
    155 @item stw r2,@@(r3,r4) ->
    156 @itemx mulx a0,r8,r9
    157 Two-line format.  Execute the @samp{stw} instruction followed by the
    158 @samp{mulx} instruction sequentially.  The first instruction goes in the
    159 left container and the second instruction goes into right container.
    160 The assembler will give an error if the machine ordering constraints are
    161 violated.
    162 
    163 @item stw r2,@@(r3,r4) <-
    164 @itemx mulx a0,r8,r9
    165 Same as previous example, except that the @samp{mulx} instruction is
    166 executed before the @samp{stw} instruction.
    167 @end table
    168 
    169 @cindex symbol names, @samp{$} in
    170 @cindex @code{$} in symbol names
    171 Since @samp{$} has no special meaning, you may use it in symbol names.
    172 
    173 @node D30V-Guarded
    174 @subsection Guarded Execution
    175 @cindex D30V Guarded Execution
    176 @code{@value{AS}} supports the full range of guarded execution
    177 directives for each instruction.  Just append the directive after the
    178 instruction proper.  The directives are:
    179 
    180 @table @samp
    181 @item /tx
    182 Execute the instruction if flag f0 is true.
    183 @item /fx
    184 Execute the instruction if flag f0 is false.
    185 @item /xt
    186 Execute the instruction if flag f1 is true.
    187 @item /xf
    188 Execute the instruction if flag f1 is false.
    189 @item /tt
    190 Execute the instruction if both flags f0 and f1 are true.
    191 @item /tf
    192 Execute the instruction if flag f0 is true and flag f1 is false.
    193 @end table
    194 
    195 @node D30V-Regs
    196 @subsection Register Names
    197 @cindex D30V registers
    198 @cindex registers, D30V
    199 You can use the predefined symbols @samp{r0} through @samp{r63} to refer
    200 to the D30V registers.  You can also use @samp{sp} as an alias for
    201 @samp{r63} and @samp{link} as an alias for @samp{r62}.  The accumulators
    202 are @samp{a0} and @samp{a1}.
    203 
    204 The D30V also has predefined symbols for these control registers and status bits:
    205 @table @code
    206 @item psw
    207 Processor Status Word
    208 @item bpsw
    209 Backup Processor Status Word
    210 @item pc
    211 Program Counter
    212 @item bpc
    213 Backup Program Counter
    214 @item rpt_c
    215 Repeat Count
    216 @item rpt_s
    217 Repeat Start address
    218 @item rpt_e
    219 Repeat End address
    220 @item mod_s
    221 Modulo Start address
    222 @item mod_e
    223 Modulo End address
    224 @item iba
    225 Instruction Break Address
    226 @item f0
    227 Flag 0
    228 @item f1
    229 Flag 1
    230 @item f2
    231 Flag 2
    232 @item f3
    233 Flag 3
    234 @item f4
    235 Flag 4
    236 @item f5
    237 Flag 5
    238 @item f6
    239 Flag 6
    240 @item f7
    241 Flag 7
    242 @item s
    243 Same as flag 4 (saturation flag)
    244 @item v
    245 Same as flag 5 (overflow flag)
    246 @item va
    247 Same as flag 6 (sticky overflow flag)
    248 @item c
    249 Same as flag 7 (carry/borrow flag)
    250 @item b
    251 Same as flag 7 (carry/borrow flag)
    252 @end table
    253 
    254 @node D30V-Addressing
    255 @subsection Addressing Modes
    256 @cindex addressing modes, D30V
    257 @cindex D30V addressing modes
    258 @code{@value{AS}} understands the following addressing modes for the D30V.
    259 @code{R@var{n}} in the following refers to any of the numbered
    260 registers, but @emph{not} the control registers.
    261 @table @code
    262 @item R@var{n}
    263 Register direct
    264 @item @@R@var{n}
    265 Register indirect
    266 @item @@R@var{n}+
    267 Register indirect with post-increment
    268 @item @@R@var{n}-
    269 Register indirect with post-decrement
    270 @item @@-SP
    271 Register indirect with pre-decrement
    272 @item @@(@var{disp}, R@var{n})
    273 Register indirect with displacement
    274 @item @var{addr}
    275 PC relative address (for branch or rep).
    276 @item #@var{imm}
    277 Immediate data (the @samp{#} is optional and ignored)
    278 @end table
    279 
    280 @node D30V-Float
    281 @section Floating Point
    282 @cindex floating point, D30V
    283 @cindex D30V floating point
    284 The D30V has no hardware floating point, but the @code{.float} and @code{.double}
    285 directives generates @sc{ieee} floating-point numbers for compatibility
    286 with other development tools.
    287 
    288 @node D30V-Opcodes
    289 @section Opcodes
    290 @cindex D30V opcode summary
    291 @cindex opcode summary, D30V
    292 @cindex mnemonics, D30V
    293 @cindex instruction summary, D30V
    294 For detailed information on the D30V machine instruction set, see
    295 @cite{D30V Architecture: A VLIW Microprocessor for Multimedia Applications}
    296 (Mitsubishi Electric Corp.).
    297 @code{@value{AS}} implements all the standard D30V opcodes.  The only changes are those
    298 described in the section on size modifiers
    299 
    300