OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [gas/] [doc/] [c-d30v.texi] - Blame information for rev 179

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 179 jshamlet
@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.
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
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.