1 @c Copyright (C) 1997, 2011 Free Software Foundation, Inc.
2 @c This is part of the GAS manual.
3 @c For copying conditions, see the file as.texinfo.
7 @chapter D30V Dependent Features
10 @node Machine Dependencies
11 @chapter D30V Dependent Features
16 * D30V-Opts:: D30V Options
17 * D30V-Syntax:: Syntax
18 * D30V-Float:: Floating Point
19 * D30V-Opcodes:: Opcodes
26 The Mitsubishi D30V version of @code{@value{AS}} has a few machine
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.
36 When this option is used, @code{@value{AS}} will issue a warning every
37 time it adds a nop instruction.
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
50 The D30V syntax is based on the syntax in Mitsubishi's D30V architecture manual.
51 The differences are detailed below.
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
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.
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.
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.
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.
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}).
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.
115 To specify the executing order, use the following symbols:
118 Sequential with instruction on the left first.
121 Sequential with instruction on the right first.
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
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.
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.
138 @item abs r2,r3 || abs r4,r5
139 Execute these in parallel.
141 @item ldw r2,@@(r3,r4) ||
143 Two-line format. Execute these in parallel.
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.
155 @item stw r2,@@(r3,r4) ->
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
163 @item stw r2,@@(r3,r4) <-
165 Same as previous example, except that the @samp{mulx} instruction is
166 executed before the @samp{stw} instruction.
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.
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:
182 Execute the instruction if flag f0 is true.
184 Execute the instruction if flag f0 is false.
186 Execute the instruction if flag f1 is true.
188 Execute the instruction if flag f1 is false.
190 Execute the instruction if both flags f0 and f1 are true.
192 Execute the instruction if flag f0 is true and flag f1 is false.
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}.
204 The D30V also has predefined symbols for these control registers and status bits:
207 Processor Status Word
209 Backup Processor Status Word
213 Backup Program Counter
225 Instruction Break Address
243 Same as flag 4 (saturation flag)
245 Same as flag 5 (overflow flag)
247 Same as flag 6 (sticky overflow flag)
249 Same as flag 7 (carry/borrow flag)
251 Same as flag 7 (carry/borrow flag)
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.
267 Register indirect with post-increment
269 Register indirect with post-decrement
271 Register indirect with pre-decrement
272 @item @@(@var{disp}, R@var{n})
273 Register indirect with displacement
275 PC relative address (for branch or rep).
277 Immediate data (the @samp{#} is optional and ignored)
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.
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