1 @c Copyright (C) 1996-2022 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 D10V Dependent Features
10 @node Machine Dependencies
11 @chapter D10V Dependent Features
16 * D10V-Opts:: D10V Options
17 * D10V-Syntax:: Syntax
18 * D10V-Float:: Floating Point
19 * D10V-Opcodes:: Opcodes
26 The Mitsubishi D10V version of @code{@value{AS}} has a few machine
31 The D10V 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.
35 To optimize execution performance, @code{@value{AS}} will sometimes swap the
36 order of instructions. Normally this generates a warning. When this option
37 is used, no warning will be generated when instructions are swapped.
38 @item --gstabs-packing
39 @itemx --no-gstabs-packing
40 @code{@value{AS}} packs adjacent short instructions into a single packed
41 instruction. @samp{--no-gstabs-packing} turns instruction packing off if
42 @samp{--gstabs} is specified as well; @samp{--gstabs-packing} (the
43 default) turns instruction packing on even when @samp{--gstabs} is
52 The D10V syntax is based on the syntax in Mitsubishi's D10V architecture manual.
53 The differences are detailed below.
56 * D10V-Size:: Size Modifiers
57 * D10V-Subs:: Sub-Instructions
58 * D10V-Chars:: Special Characters
59 * D10V-Regs:: Register Names
60 * D10V-Addressing:: Addressing Modes
61 * D10V-Word:: @@WORD Modifier
66 @subsection Size Modifiers
67 @cindex D10V size modifiers
68 @cindex size modifiers, D10V
69 The D10V version of @code{@value{AS}} uses the instruction names in the D10V
70 Architecture Manual. However, the names in the manual are sometimes ambiguous.
71 There are instruction names that can assemble to a short or long form opcode.
72 How does the assembler pick the correct form? @code{@value{AS}} will always pick the
73 smallest form if it can. When dealing with a symbol that is not defined yet when a
74 line is being assembled, it will always use the long form. If you need to force the
75 assembler to use either the short or long form of the instruction, you can append
76 either @samp{.s} (short) or @samp{.l} (long) to it. For example, if you are writing
77 an assembly program and you want to do a branch to a symbol that is defined later
78 in your program, you can write @samp{bra.s foo}.
79 Objdump and GDB will always append @samp{.s} or @samp{.l} to instructions which
80 have both short and long forms.
83 @subsection Sub-Instructions
84 @cindex D10V sub-instructions
85 @cindex sub-instructions, D10V
86 The D10V assembler takes as input a series of instructions, either one-per-line,
87 or in the special two-per-line format described in the next section. Some of these
88 instructions will be short-form or sub-instructions. These sub-instructions can be packed
89 into a single instruction. The assembler will do this automatically. It will also detect
90 when it should not pack instructions. For example, when a label is defined, the next
91 instruction will never be packaged with the previous one. Whenever a branch and link
92 instruction is called, it will not be packaged with the next instruction so the return
93 address will be valid. Nops are automatically inserted when necessary.
95 If you do not want the assembler automatically making these decisions, you can control
96 the packaging and execution type (parallel or sequential) with the special execution
97 symbols described in the next section.
100 @subsection Special Characters
101 @cindex line comment character, D10V
102 @cindex D10V line comment character
103 A semicolon (@samp{;}) can be used anywhere on a line to start a
104 comment that extends to the end of the line.
106 If a @samp{#} appears as the first character of a line, the whole line
107 is treated as a comment, but in this case the line could also be a
108 logical line number directive (@pxref{Comments}) or a preprocessor
109 control command (@pxref{Preprocessing}).
111 @cindex sub-instruction ordering, D10V
112 @cindex D10V sub-instruction ordering
113 Sub-instructions may be executed in order, in reverse-order, or in parallel.
114 Instructions listed in the standard one-per-line format will be executed sequentially.
115 To specify the executing order, use the following symbols:
118 Sequential with instruction on the left first.
120 Sequential with instruction on the right first.
124 The D10V syntax allows either one instruction per line, one instruction per line with
125 the execution symbol, or two instructions per line. For example
127 @item abs a1 -> abs r0
128 Execute these sequentially. The instruction on the right is in the right
129 container and is executed second.
130 @item abs r0 <- abs a1
131 Execute these reverse-sequentially. The instruction on the right is in the right
132 container, and is executed first.
133 @item ld2w r2,@@r8+ || mac a0,r0,r7
134 Execute these in parallel.
135 @item ld2w r2,@@r8+ ||
137 Two-line format. Execute these in parallel.
140 Two-line format. Execute these sequentially. Assembler will
141 put them in the proper containers.
142 @item ld2w r2,@@r8+ ->
144 Two-line format. Execute these sequentially. Same as above but
145 second instruction will always go into right container.
147 @cindex symbol names, @samp{$} in
148 @cindex @code{$} in symbol names
149 Since @samp{$} has no special meaning, you may use it in symbol names.
152 @subsection Register Names
153 @cindex D10V registers
154 @cindex registers, D10V
155 You can use the predefined symbols @samp{r0} through @samp{r15} to refer to the D10V
156 registers. You can also use @samp{sp} as an alias for @samp{r15}. The accumulators
157 are @samp{a0} and @samp{a1}. There are special register-pair names that may
158 optionally be used in opcodes that require even-numbered registers. Register names are
173 The D10V also has predefined symbols for these control registers and status bits:
176 Processor Status Word
178 Backup Processor Status Word
182 Backup Program Counter
194 Instruction Break Address
203 @node D10V-Addressing
204 @subsection Addressing Modes
205 @cindex addressing modes, D10V
206 @cindex D10V addressing modes
207 @code{@value{AS}} understands the following addressing modes for the D10V.
208 @code{R@var{n}} in the following refers to any of the numbered
209 registers, but @emph{not} the control registers.
216 Register indirect with post-increment
218 Register indirect with post-decrement
220 Register indirect with pre-decrement
221 @item @@(@var{disp}, R@var{n})
222 Register indirect with displacement
224 PC relative address (for branch or rep).
226 Immediate data (the @samp{#} is optional and ignored)
230 @subsection @@WORD Modifier
231 @cindex D10V @@word modifier
232 @cindex @@word modifier, D10V
233 Any symbol followed by @code{@@word} will be replaced by the symbol's value
234 shifted right by 2. This is used in situations such as loading a register
235 with the address of a function (or any other code fragment). For example, if
236 you want to load a register with the location of the function @code{main} then
237 jump to that function, you could do it as follows:
246 @section Floating Point
247 @cindex floating point, D10V
248 @cindex D10V floating point
249 The D10V has no hardware floating point, but the @code{.float} and @code{.double}
250 directives generates @sc{ieee} floating-point numbers for compatibility
251 with other development tools.
255 @cindex D10V opcode summary
256 @cindex opcode summary, D10V
257 @cindex mnemonics, D10V
258 @cindex instruction summary, D10V
259 For detailed information on the D10V machine instruction set, see
260 @cite{D10V Architecture: A VLIW Microprocessor for Multimedia Applications}
261 (Mitsubishi Electric Corp.).
262 @code{@value{AS}} implements all the standard D10V opcodes. The only changes are those
263 described in the section on size modifiers