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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gen_or1k_isa/] [sources/] [or1k_isadesc.h] - Blame information for rev 1778

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 14 lampret
/* Information about OR1K ISA. W/o this we can't generate or1k_isa_part.tex.
2 1113 lampret
*
3
* $Log: not supported by cvs2svn $
4 1601 lampret
* Revision 1.14  2005/11/03 19:06:00  lampret
5
* Added l.fl1, fixed desc of l.ff1
6
*
7 1591 lampret
* Revision 1.13  2005/03/16 12:27:17  nogj
8
* Fix description of the l.mac/l.msb/l.maci instructions
9
*
10 1385 nogj
* Revision 1.12  2004/06/27 22:56:48  lampret
11
* Updated instruction set descriptions. Changed FP instructions encoding.
12
*
13 1295 lampret
* Revision 1.11  2003/01/28 03:43:04  lampret
14
* Typos by Maria Bolado
15
*
16 14 lampret
*/
17
 
18
struct or1k_isa {
19
        char *name;
20
        char *title;
21
        char *desc;
22 87 lampret
        char *oper32;
23
        char *oper64;
24 14 lampret
        char *except;
25
        int  class;
26 87 lampret
        int  printed;
27 14 lampret
};
28
 
29 87 lampret
#define ORBIS32I        1
30
#define ORBIS32II       2
31
#define ORBIS64I        3
32
#define ORBIS64II       4
33
#define ORFPX32I        5
34
#define ORFPX32II       6
35
#define ORFPX64I        7
36
#define ORFPX64II       8
37
#define ORVDX64I        9
38
#define ORVDX64II       10
39
 
40 14 lampret
static struct or1k_isa or1k_isa_info[] =
41
{
42
 
43 87 lampret
/*** ORBIS32 ***/
44 14 lampret
 
45 87 lampret
{"l.addi", "Add Immediate Signed",
46 1295 lampret
        "The immediate value is sign-extended and added to the contents of general-purpose"
47 87 lampret
        "register rA to form the result. The result is placed into general-purpose"
48
        "register rD.",
49 95 lampret
        "rD[31:0] <- rA[31:0] + exts(Immediate)\\SR[CY] <- carry\\SR[OV] <- overflow",
50
        "rD[63:0] <- rA[63:0] + exts(Immediate)\\SR[CY] <- carry\\SR[OV] <- overflow",
51 1108 lampret
        "Range Exception", ORBIS32I,},
52 14 lampret
 
53 1295 lampret
{"l.addic", "Add Immediate Signed and Carry",
54
        "The immediate value is sign-extended and added to the contents of general-purpose"
55
        "register rA and carry SR[CY] to form the result. "
56
        "The result is placed into general-purpose register rD.",
57
        "rD[31:0] <- rA[31:0] + exts(Immediate) + SR[CY]\\SR[CY] <- carry\\SR[OV] <- overflow",
58
        "rD[63:0] <- rA[63:0] + exts(Immediate) + SR[CY]\\SR[CY] <- carry\\SR[OV] <- overflow",
59
        "Range Exception", ORBIS32I,},
60
 
61 87 lampret
{"l.andi", "And with Immediate Half Word",
62 487 markom
        "The immediate value is zero-extended and combined with the contents "
63 623 markom
        "of general-purpose register rA in a bit-wise logical AND operation. The "
64 87 lampret
        "result is placed into general-purpose register rD.",
65 623 markom
        "rD[31:0] <- rA[31:0] AND extz(Immediate)",
66
        "rD[63:0] <- rA[63:0] AND extz(Immediate)",
67 87 lampret
        "None", ORBIS32I,},
68 14 lampret
 
69 87 lampret
{"l.ori", "Or with Immediate Half Word",
70 487 markom
        "The immediate value is zero-extended and combined with the contents "
71 623 markom
        "of general-purpose register rA in a bit-wise logical OR operation. The "
72 87 lampret
        "result is placed into general-purpose register rD.",
73 155 simons
        "rD[31:0] <- rA[31:0] OR extz(Immediate)",
74
        "rD[63:0] <- rA[63:0] OR extz(Immediate)",
75 87 lampret
        "None", ORBIS32I,},
76 14 lampret
 
77 87 lampret
{"l.xori", "Exclusive Or with Immediate Half Word",
78 1295 lampret
        "The immediate value is sign-extended and combined with the contents of general-purpose "
79 623 markom
        "register rA in a bit-wise logical XOR operation. The result is "
80 87 lampret
        "placed into general-purpose register rD.",
81 1295 lampret
        "rD[31:0] <- rA[31:0] XOR exts(Immediate)",
82
        "rD[63:0] <- rA[63:0] XOR exts(Immediate)",
83 87 lampret
        "None", ORBIS32I,},
84 14 lampret
 
85 87 lampret
{"l.slli", "Shift Left Logical with Immediate",
86 1295 lampret
        "The immediate value specifies the number of "
87 955 markom
        "bit positions; the contents of general-purpose register rA are shifted left, "
88 487 markom
        "inserting zeros into the low-order bits. The result is written into general-purpose "
89 1295 lampret
        "register rD. In 32-bit implementations bit 5 of immediate is ignored.",
90 87 lampret
        "rD[31:L] <- rA[31-L:0]\\rD[L-1:0] <- 0",
91
        "rD[63:L] <- rA[63-L:0]\\rD[L-1:0] <- 0",
92
        "None", ORBIS32I,},
93 14 lampret
 
94 87 lampret
{"l.srai", "Shift Right Arithmetic with Immediate",
95 487 markom
        "The 6-bit immediate value specifies the number of "
96 955 markom
        "bit positions; the contents of general-purpose register rA are shifted right, "
97 487 markom
        "sign-extending the high-order bits. The result is written into "
98 1295 lampret
        "general-purpose register rD. In 32-bit implementations bit 5 of immediate is ignored.",
99 623 markom
        "rD[31-L:0] <- rA[31:L]\\rD[31:32-L] <- \{rA[31]\}",
100
        "rD[63-L:0] <- rA[63:L]\\rD[63:64-L] <- \{rA[63]\}",
101 87 lampret
        "None", ORBIS32I,},
102
 
103
{"l.srli", "Shift Right Logical with Immediate",
104 487 markom
        "The 6-bit immediate value specifies the number of "
105 955 markom
        "bit positions; the contents of general-purpose register rA are shifted right, "
106 487 markom
        "inserting zeros into the high-order bits. The result is written into general-purpose "
107 1295 lampret
        "register rD. In 32-bit implementations bit 5 of immediate is ignored.",
108 87 lampret
        "rD[31-L:0] <- rA[31:L]\\rD[31:32-L] <- 0",
109
        "rD[63-L:0] <- rA[63:L]\\rD[63:64-L] <- 0",
110
        "None", ORBIS32I,},
111
 
112
{"l.rori", "Rotate Right with Immediate",
113 487 markom
        "The 6-bit immediate value specifies the number of "
114 955 markom
        "bit positions; the contents of general-purpose register rA are rotated right. "
115 1295 lampret
        "The result is written into general-purpose register rD. In 32-bit implementations bit 5 of immediate is ignored.",
116 87 lampret
        "rD[31-L:0] <- rA[31:L]\\rD[31:32-L] <- rA[L-1:0]",
117
        "rD[63-L:0] <- rA[63:L]\\rD[63:64-L] <- rA[L-1:0]",
118 1591 lampret
        "None", ORBIS32II,},
119 87 lampret
 
120
{"l.muli", "Multiply Immediate Signed",
121 955 markom
        "The immediate value and the contents of general-purpose register rA are "
122
        "multiplied, and the result is truncated to destination register width and placed into "
123 87 lampret
        "general-purpose register rD.",
124 623 markom
        "rD[31:0] <- rA[31:0] * Immediate\\SR[OV] <- overflow\\SR[CY] <- carry",
125
        "rD[63:0] <- rA[63:0] * Immediate\\SR[OV] <- overflow\\SR[CY] <- carry",
126 1108 lampret
        "Range Exception", ORBIS32I,},
127 87 lampret
 
128
{"l.exths", "Extend Half Word with Sign",
129
        "Bit 15 of general-purpose register rA is placed in high-order bits of "
130
        "general-purpose register rD. The low-order 16 bits of general-purpose register rA "
131 487 markom
        "are copied into the low-order 16 bits of general-purpose register rD.",
132 623 markom
        "rD[31:16] <- \{rA[15]\}\\rD[15:0] <- rA[15:0]",
133
        "rD[63:16] <- \{rA[15]\}\\rD[15:0] <- rA[15:0]",
134 87 lampret
        "None", ORBIS32II,},
135
 
136
{"l.extbs", "Extend Byte with Sign",
137
        "Bit 7 of general-purpose register rA is placed in high-order bits of "
138
        "general-purpose register rD. The low-order eight bits of general-purpose register rA "
139 623 markom
        "are copied into the low-order eight bits of general-purpose register rD.",
140
        "rD[31:8] <- \{rA[7]\}\\rD[7:0] <- rA[7:0]",
141
        "rD[63:8] <- \{rA[7]\}\\rD[7:0] <- rA[7:0]",
142 87 lampret
        "None", ORBIS32II,},
143
 
144
{"l.extbz", "Extend Byte with Zero",
145
        "Zero is placed in high-order bits of "
146
        "general-purpose register rD. The low-order eight bits of general-purpose register rA "
147 487 markom
        "are copied into the low-order eight bits of general-purpose register rD.",
148 87 lampret
        "rD[31:8] <- 0\\rD[7:0] <- rA[7:0]",
149
        "rD[63:8] <- 0\\rD[7:0] <- rA[7:0]",
150
        "None", ORBIS32II,},
151
 
152
{"l.exthz", "Extend Half Word with Zero",
153
        "Zero is placed in high-order bits of "
154
        "general-purpose register rD. The low-order 16 bits of general-purpose register rA "
155 487 markom
        "are copied into the low-order 16 bits of general-purpose register rD.",
156 87 lampret
        "rD[31:16] <- 0\\rD[15:0] <- rA[15:0]",
157
        "rD[63:16] <- 0\\rD[15:0] <- rA[15:0]",
158
        "None", ORBIS32II,},
159
 
160
{"l.extwz", "Extend Word with Zero",
161
        "Zero is placed in high-order bits of "
162
        "general-purpose register rD. The low-order 32 bits of general-purpose register rA "
163 487 markom
        "are copied into the low-order 32 bits of general-purpose register rD.",
164 87 lampret
        "rD[31:0] <- rA[31:0]",
165
        "rD[63:32] <- 0\\rD[31:0] <- rA[31:0]",
166
        "None", ORBIS64II,},
167
 
168
{"l.extws", "Extend Word with Sign",
169
        "Bit 31 of general-purpose register rA is placed in high-order bits of "
170
        "general-purpose register rD. The low-order 32 bits of general-purpose register rA "
171
        "are copied from low-order 32 bits of general-purpose register rD.",
172
        "rD[31:0] <- rA[31:0]",
173 623 markom
        "rD[63:32] <- \{rA[31]\}\\rD[31:0] <- rA[31:0]",
174 87 lampret
        "None", ORBIS64II,},
175
 
176 109 lampret
{"l.cmov", "Conditional Move",
177 623 markom
        "If SR[F] is set, general-purpose register rA is placed in "
178
        "general-purpose register rD. If SR[F] is cleared, general-purpose register rB "
179 109 lampret
        "is placed in general-purpose register rD.",
180 623 markom
        "rD[31:0] <- SR[F] ? rA[31:0] : rB[31:0]",
181
        "rD[63:0] <- SR[F] ? rA[63:0] : rB[63:0]",
182 109 lampret
        "None", ORBIS32II,},
183
 
184 155 simons
{"l.trap", "Trap",
185 1108 lampret
        "Execution of trap instruction results in the trap exception if specified bit in SR"
186
        " is set. Trap exception is a request to the operating system or to the debug facility"
187 955 markom
        " to execute certain debug services. Immediate value is used to select which SR bit"
188 155 simons
        " is tested by trap instruction.",
189 1108 lampret
        "if SR[K] = 1 then trap-exception()",
190
        "if SR[K] = 1 then trap-exception()",
191 155 simons
        "Trap exception", ORBIS32II,},
192
 
193 109 lampret
{"l.ff1", "Find First 1",
194
        "Position of the first '1' bit is written into general-purpose register rD. Checking for "
195 1591 lampret
        "bit '1' starts with bit 0 (LSB), and counting is incremented for every zero bit. If first '1' bit is "
196
        "discovered in bit 0 (LSB), one is written into rD. If there is no '1' bit, zero is written in rD.",
197
        "rD[31:0] <- rA[0] ? 1 : rA[1] ? 2 ... rA[31] ? 32 : 0",
198
        "rD[63:0] <- rA[0] ? 1 : rA[2] ? 2 ... rA[63] ? 64 : 0",
199
        "None", ORBIS32II,},
200
 
201
{"l.fl1", "Find Last 1",
202
        "Position of the last '1' bit is written into general-purpose register rD. Checking for "
203
        "bit '1' starts with bit 0 (LSB), and counting is incremented for every bit until the last '1' bit is found nearing the MSB. If last '1' bit is "
204
        "discovered in bit 31(63) (MSB), 32(64) is written into rD. If there is no '1' bit, zero is written in rD.",
205
        "rD[31:0] <- rA[31] ? 32 : rA[31] ? 32 ... rA[0] ? 1 : 0",
206 623 markom
        "rD[63:0] <- rA[63] ? 64 : rA[62] ? 63 ... rA[0] ? 1 : 0",
207 109 lampret
        "None", ORBIS32II,},
208
 
209 87 lampret
{"l.lbs", "Load Byte and Extend with Sign",
210 487 markom
        "The offset is sign-extended and added to the contents of general-purpose "
211
        "register rA. The sum represents an effective address. The byte in memory "
212 14 lampret
        "addressed by EA is loaded into the low-order eight bits of "
213 87 lampret
        "general-purpose register rD. "
214
        "High-order bits of general-purpose register rD are replaced with "
215 14 lampret
        "bit 7 of the loaded value.",
216 1113 lampret
        "EA <- exts(Immediate) + rA[31:0]\\rD[7:0] <- (EA)[7:0]\\rD[31:8] <- (EA)[7]",
217
        "EA <- exts(Immediate) + rA[63:0]\\rD[7:0] <- (EA)[7:0]\\rD[63:8] <- (EA)[7]",
218 1295 lampret
        "TLB miss\\Page fault\\Bus error", ORBIS32I,},
219 14 lampret
 
220 87 lampret
{"l.lhs", "Load Half Word and Extend with Sign",
221 487 markom
        "The offset is sign-extended and added to the contents of general-purpose "
222
        "register rA. The sum represents an effective address. The half word in memory "
223 14 lampret
        "addressed by EA is loaded into the low-order 16 bits of "
224 87 lampret
        "general-purpose register rD. "
225
        "High-order bits of general-purpose register rD are replaced with "
226 14 lampret
        "bit 15 of the loaded value.",
227 1113 lampret
        "EA <- exts(Immediate) + rA[31:0]\\rD[15:0] <- (EA)[15:0]\\rD[31:16] <- (EA)[15]",
228
        "EA <- exts(Immediate) + rA[63:0]\\rD[15:0] <- (EA)[15:0]\\rD[63:16] <- (EA)[15]",
229 623 markom
        "TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
230 14 lampret
 
231 87 lampret
{"l.lws", "Load Single Word and Extend with Sign",
232 487 markom
        "The offset is sign-extended and added to the contents of general-purpose "
233
        "register rA. The sum represents an effective address. The single word in memory "
234 87 lampret
        "addressed by EA is loaded into the low-order 32 bits of "
235
        "general-purpose register rD. "
236
        "High-order bits of general-purpose register rD are replaced with "
237
        "bit 31 of the loaded value.",
238
        "EA <- exts(Immediate) + rA[31:0]\\rD[31:0] <- (EA)[31:0]",
239 1113 lampret
        "EA <- exts(Immediate) + rA[63:0]\\rD[31:0] <- (EA)[31:0]\\rD[63:32] <- (EA)[31]",
240 623 markom
        "TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
241 87 lampret
 
242
{"l.lbz", "Load Byte and Extend with Zero",
243 487 markom
        "The offset is sign-extended and added to the contents of general-purpose "
244
        "register rA. The sum represents an effective address. The byte in memory "
245 14 lampret
        "addressed by EA is loaded into the low-order eight bits of "
246 87 lampret
        "general-purpose register rD. "
247
        "High-order bits of general-purpose register rD are replaced with "
248 14 lampret
        "zero.",
249 87 lampret
        "EA <- exts(Immediate) + rA[31:0]\\rD[7:0] <- (EA)[7:0]\\rD[31:8] <- 0",
250
        "EA <- exts(Immediate) + rA[63:0]\\rD[7:0] <- (EA)[7:0]\\rD[63:8] <- 0",
251 1295 lampret
        "TLB miss\\Page fault\\Bus error", ORBIS32I,},
252 14 lampret
 
253 87 lampret
{"l.lhz", "Load Half Word and Extend with Zero",
254 487 markom
        "The offset is sign-extended and added to the contents of general-purpose "
255
        "register rA. The sum represents an effective address. The half word in memory "
256 14 lampret
        "addressed by EA is loaded into the low-order 16 bits of "
257 87 lampret
        "general-purpose register rD. "
258
        "High-order bits of general-purpose register rD are replaced with "
259 14 lampret
        "zero.",
260 87 lampret
        "EA <- exts(Immediate) + rA[31:0]\\rD[15:0] <- (EA)[15:0]\\rD[31:16] <- 0",
261
        "EA <- exts(Immediate) + rA[63:0]\\rD[15:0] <- (EA)[15:0]\\rD[63:16] <- 0",
262 623 markom
        "TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
263 14 lampret
 
264 87 lampret
{"l.lwz", "Load Single Word and Extend with Zero",
265 487 markom
        "The offset is sign-extended and added to the contents of general-purpose "
266
        "register rA. The sum represents an effective address. The single word in memory "
267 87 lampret
        "addressed by EA is loaded into the low-order 32 bits of "
268
        "general-purpose register rD. "
269
        "High-order bits of general-purpose register rD are replaced with "
270
        "zero.",
271
        "EA <- exts(Immediate) + rA[31:0]\\rD[31:0] <- (EA)[31:0]",
272
        "EA <- exts(Immediate) + rA[63:0]\\rD[31:0] <- (EA)[31:0]\\rD[63:32] <- 0",
273 623 markom
        "TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
274 14 lampret
 
275 87 lampret
{"l.ld", "Load Double Word",
276 487 markom
        "The offset is sign-extended and added to the contents of general-purpose "
277
        "register rA. The sum represents an effective address. The double word in memory "
278 87 lampret
        "addressed by EA is loaded into general-purpose register rD. ",
279
        "N/A",
280
        "EA <- exts(Immediate) + rA[63:0]\\rD[63:0] <- (EA)[63:0]",
281 623 markom
        "TLB miss\\Page fault\\Bus error\\Alignment", ORBIS64I,},
282 14 lampret
 
283 87 lampret
{"l.sd", "Store Double Word",
284 487 markom
        "The offset is sign-extended and added to the contents of general-purpose "
285
        "register rA. The sum represents an effective address. The double word in "
286 95 lampret
        "general-purpose register rB is stored to memory location addressed by EA. ",
287 87 lampret
        "N/A",
288
        "EA <- exts(Immediate) + rA[63:0]\\(EA)[63:0] <- rB[63:0]",
289 623 markom
        "TLB miss\\Page fault\\Bus error\\Alignment", ORBIS64I,},
290 14 lampret
 
291 87 lampret
{"l.sw", "Store Single Word",
292 487 markom
        "The offset is sign-extended and added to the contents of general-purpose "
293
        "register rA. The sum represents an effective address. The low-order 32 bits of "
294 95 lampret
        "general-purpose register rB are stored to memory location addressed by EA. ",
295 87 lampret
        "EA <- exts(Immediate) + rA[31:0]\\(EA)[31:0] <- rB[31:0]",
296
        "EA <- exts(Immediate) + rA[63:0]\\(EA)[31:0] <- rB[31:0]",
297 623 markom
        "TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
298 14 lampret
 
299 87 lampret
{"l.sh", "Store Half Word",
300 487 markom
        "The offset is sign-extended and added to the contents of general-purpose "
301
        "register rA. The sum represents an effective address. The low-order 16 bits "
302 95 lampret
        "of general-purpose register rB are stored to memory location addressed by EA. ",
303 87 lampret
        "EA <- exts(Immediate) + rA[31:0]\\(EA)[15:0] <- rB[15:0]",
304
        "EA <- exts(Immediate) + rA[63:0]\\(EA)[15:0] <- rB[15:0]",
305 623 markom
        "TLB miss\\Page fault\\Bus error\\Alignment", ORBIS32I,},
306 14 lampret
 
307 87 lampret
{"l.sb", "Store Byte",
308 487 markom
        "The offset is sign-extended and added to the contents of general-purpose "
309
        "register rA. The sum represents an effective address. The low-order 8 bits "
310 95 lampret
        "of general-purpose register rB are stored to memory location addressed by EA. ",
311 87 lampret
        "EA <- exts(Immediate) + rA[31:0]\\(EA)[7:0] <- rB[7:0]",
312
        "EA <- exts(Immediate) + rA[63:0]\\(EA)[7:0] <- rB[7:0]",
313 1295 lampret
        "TLB miss\\Page fault\\Bus error", ORBIS32I,},
314 14 lampret
 
315 87 lampret
{"l.add", "Add Signed",
316 487 markom
        "The contents of general-purpose register rA are added to the contents "
317 87 lampret
        "of general-purpose register rB to form the result. The result is placed into "
318
        "general-purpose register rD.",
319 95 lampret
        "rD[31:0] <- rA[31:0] + rB[31:0]\\SR[CY] <- carry\\SR[OV] <- overflow",
320
        "rD[63:0] <- rA[63:0] + rB[63:0]\\SR[CY] <- carry\\SR[OV] <- overflow",
321
        "Range Exception", ORBIS32I,},
322 14 lampret
 
323 87 lampret
{"l.addc", "Add Signed and Carry",
324 487 markom
        "The contents of general-purpose register rA are added to the contents "
325 87 lampret
        "of general-purpose register rB and carry SR[CY] to form the result. "
326
        "The result is placed into general-purpose register rD.",
327 623 markom
        "rD[31:0] <- rA[31:0] + rB[31:0] + SR[CY]\\SR[CY] <- carry\\SR[OV] <- overflow",
328
        "rD[63:0] <- rA[63:0] + rB[63:0] + SR[CY]\\SR[CY] <- carry\\SR[OV] <- overflow",
329 95 lampret
        "Range Exception", ORBIS32I,},
330 14 lampret
 
331 87 lampret
{"l.sub", "Subtract Signed",
332 487 markom
        "The contents of general-purpose register rB are subtracted from the contents "
333 87 lampret
        "of general-purpose register rA to form the result. The result is placed into "
334 1295 lampret
        "general-purpose register rD. This isntruction does not change carry SR[CY] flag.",
335 95 lampret
        "rD[31:0] <- rA[31:0] - rB[31:0]\\SR[CY] <- carry\\SR[OV] <- overflow",
336
        "rD[63:0] <- rA[63:0] - rB[63:0]\\SR[CY] <- carry\\SR[OV] <- overflow",
337
        "Range Exception", ORBIS32I,},
338 14 lampret
 
339 87 lampret
{"l.sll", "Shift Left Logical",
340
        "General-purpose register rB specifies the number of "
341 955 markom
        "bit positions; the contents of general-purpose register rA are shifted left, "
342 487 markom
        "inserting zeros into the low-order bits. The result is written into general-purpose "
343 1295 lampret
        "rD. In 32-bit implementations bit 5 of rB is ignored.",
344
        "rD[31:rB[4:0]] <- rA[31-rB[4:0]:0]\\rD[rB[4:0]-1:0] <- 0",
345 1108 lampret
        "rD[63:rB[5:0]] <- rA[63-rB[5:0]:0]\\rD[rB[5:0]-1:0] <- 0",
346 87 lampret
        "None", ORBIS32I,},
347 14 lampret
 
348 87 lampret
{"l.sra", "Shift Right Arithmetic",
349
        "General-purpose register rB specifies the number of "
350 955 markom
        "bit positions; the contents of general-purpose register rA are shifted right, "
351 487 markom
        "sign-extending the high-order bits. The result is written into "
352 1295 lampret
        "general-purpose register rD. In 32-bit implementations bit 5 of rB is ignored.",
353
        "rD[31-rB[4:0]:0] <- rA[31:rB[4:0]]\\rD[31:32-rB[4:0]] <- \{rA[31]\}",
354 623 markom
        "rD[63-rB[5:0]:0] <- rA[63:rB[5:0]]\\rD[63:64-rB[5:0]] <- \{rA[63]\}",
355 87 lampret
        "None", ORBIS32I,},
356 14 lampret
 
357 87 lampret
{"l.srl", "Shift Right Logical",
358
        "General-purpose register rB specifies the number of "
359 955 markom
        "bit positions; the contents of general-purpose register rA are shifted right, "
360 487 markom
        "inserting zeros into the high-order bits. The result is written into general-purpose "
361 1295 lampret
        "register rD. In 32-bit implementations bit 5 of rB is ignored.",
362
        "rD[31-rB[4:0]:0] <- rA[31:rB[4:0]]\\rD[31:32-rB[4:0]] <- 0",
363 623 markom
        "rD[63-rB[5:0]:0] <- rA[63:rB[5:0]]\\rD[63:64-rB[5:0]] <- 0",
364 87 lampret
        "None", ORBIS32I,},
365 14 lampret
 
366 87 lampret
{"l.ror", "Rotate Right",
367
        "General-purpose register rB specifies the number of "
368 955 markom
        "bit positions; the contents of general-purpose register rA are rotated right. "
369 1295 lampret
        "The result is written into general-purpose register rD. In 32-bit implementations bit 5 of rB is ignored.",
370
        "rD[31-rB[4:0]:0] <- rA[31:rB]\\rD[31:32-rB[4:0]] <- rA[rB[4:0]-1:0]",
371 623 markom
        "rD[63-rB[5:0]:0] <- rA[63:rB]\\rD[63:64-rB[5:0]] <- rA[rB[5:0]-1:0]",
372 87 lampret
        "None", ORBIS32II,},
373 14 lampret
 
374 87 lampret
{"l.and", "And",
375
        "The contents of general-purpose register rA are combined with the contents "
376
        "of general-purpose register rB in a bit-wise logical AND operation. The "
377
        "result is placed into general-purpose register rD.",
378
        "rD[31:0] <- rA[31:0] AND rB[31:0]",
379
        "rD[63:0] <- rA[63:0] AND rB[63:0]",
380
        "None", ORBIS32I,},
381 14 lampret
 
382 87 lampret
{"l.or", "Or",
383
        "The contents of general-purpose register rA are combined with the contents "
384
        "of general-purpose register rB in a bit-wise logical OR operation. The "
385
        "result is placed into general-purpose register rD.",
386
        "rD[31:0] <- rA[31:0] OR rB[31:0]",
387
        "rD[63:0] <- rA[63:0] OR rB[63:0]",
388
        "None", ORBIS32I,},
389 14 lampret
 
390 87 lampret
{"l.xor", "Exclusive Or",
391
        "The contents of general-purpose register rA are combined with the contents "
392
        "of general-purpose register rB in a bit-wise logical XOR operation. The "
393
        "result is placed into general-purpose register rD.",
394
        "rD[31:0] <- rA[31:0] XOR rB[31:0]",
395
        "rD[63:0] <- rA[63:0] XOR rB[63:0]",
396
        "None", ORBIS32I,},
397 14 lampret
 
398 623 markom
{"l.mac0", "Multiply Signed",
399
        "The contents of general-purpose register rA and the contents of general-purpose "
400 955 markom
        "register rB are multiplied, and the result is truncated to 32 bits and stored "
401 623 markom
        "into the special-purpose registers MACHI and MACLO. "
402
        "All operands are treated as signed integers.",
403
        "temp[31:0] <- rA[31:0] * rB[31:0]\\MACHI[31:0]MACLO[31:0] <- temp[31:0]\\",
404
        "temp[31:0] <- rA[63:0] * rB[63:0]\\MACHI[31:0]MACLO[31:0] <- temp[31:0]\\",
405
        "None", ORBIS32II,},
406
 
407
{"l.maci0", "Multiply Immediate Signed",
408 955 markom
        "The immediate value and the contents of general-purpose register rA are "
409
        "multiplied, and the result is truncated to 32 bits and stored "
410 623 markom
        "into the special-purpose registers MACHI and MACLO. "
411
        "All operands are treated as signed integers.",
412 1295 lampret
        "temp[31:0] <- rA[31:0] * exts(Immediate)\\MACHI[31:0]MACLO[31:0] <- temp[31:0]\\",
413
        "temp[31:0] <- rA[63:0] * exts(Immediate)\\MACHI[31:0]MACLO[31:0] <- temp[31:0]\\",
414 623 markom
        "None", ORBIS32II,},
415
 
416 87 lampret
{"l.mac", "Multiply Signed and Accumulate",
417
        "The contents of general-purpose register rA and the contents of general-purpose "
418 1385 nogj
        "register rB are multiplied, and then added to the special-purpose registers "
419
        "MACHI and MACLO. All operands are treated as signed integers.",
420 623 markom
        "temp[31:0] <- rA[31:0] * rB[31:0]\\MACHI[31:0]MACLO[31:0] <- temp[31:0] + MACHI[31:0]MACLO[31:0]\\",
421
        "temp[31:0] <- rA[63:0] * rB[63:0]\\MACHI[31:0]MACLO[31:0] <- temp[31:0] + MACHI[31:0]MACLO[31:0]\\",
422 87 lampret
        "None", ORBIS32II,},
423
 
424 1295 lampret
{"l.msb", "Multiply Signed and Subtract",
425
        "The contents of general-purpose register rA and the contents of general-purpose "
426 1385 nogj
        "register rB are multiplied and then subtracted from the special-purpose registers "
427
        "MACHI and MACLO. The result of the subtraction is placed into the MACHI and MACLO "
428
        "registers. All operands are treated as signed integers.",
429 1295 lampret
        "temp[31:0] <- rA[31:0] * rB[31:0]\\MACHI[31:0]MACLO[31:0] <- MACHI[31:0]MACLO[31:0] - temp[31:0]\\",
430
        "temp[31:0] <- rA[63:0] * rB[63:0]\\MACHI[31:0]MACLO[31:0] <- MACHI[31:0]MACLO[31:0] - temp[31:0]\\",
431
        "None", ORBIS32II,},
432
 
433 623 markom
{"l.maci", "Multiply Immediate Signed and Accumulate",
434 955 markom
        "The immediate value and the contents of general-purpose register rA are "
435 1385 nogj
        "multiplied, and then added to the special-purpose registers MACHI and "
436
        "MACLO. All operands are treated as signed integers.",
437 1295 lampret
        "temp[31:0] <- rA[31:0] * exts(Immediate)\\MACHI[31:0]MACLO[31:0] <- temp[31:0] + MACHI[31:0]MACLO[31:0]\\",
438
        "temp[31:0] <- rA[63:0] * exts(Immediate)\\MACHI[31:0]MACLO[31:0] <- temp[31:0] + MACHI[31:0]MACLO[31:0]\\",
439 623 markom
        "None", ORBIS32II,},
440
 
441 1295 lampret
{"l.macrc", "MAC Read and Clear",
442
        "Once all instructions in MAC pipeline are completed, the contents of MAC is placed into "
443
        "general-purpose register rD and MAC accumulator is cleared.",
444 155 simons
        "synchronize-mac\\"
445 1295 lampret
        "rD[31:0] <- MACLO[31:0]\\"
446
        "MACHI[31:0]MACLO[31:0] <- 0\\",
447 623 markom
        "synchronize-mac\\"
448 1295 lampret
        "rD[63:0] <- MACHI[31:0]MACLO[31:0]\\"
449
        "MACHI[31:0]MACLO[31:0] <- 0\\",
450 155 simons
        "None", ORBIS32II,},
451
 
452 87 lampret
{"l.mul", "Multiply Signed",
453
        "The contents of general-purpose register rA and the contents of general-purpose "
454 955 markom
        "register rB are multiplied, and the result is truncated to destination register width "
455 87 lampret
        "and placed into general-purpose register rD. "
456 155 simons
        "Both operands are treated as signed integers.",
457 623 markom
        "rD[31:0] <- rA[31:0] * rB[31:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
458
        "rD[63:0] <- rA[63:0] * rB[63:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
459 1108 lampret
        "Range Exception", ORBIS32I,},
460 87 lampret
 
461
{"l.mulu", "Multiply Unsigned",
462
        "The contents of general-purpose register rA and the contents of general-purpose "
463 955 markom
        "register rB are multiplied, and the result is truncated to destination register width "
464 87 lampret
        "and placed into general-purpose register rD. "
465
        "Both operands are treated as unsigned integers.",
466 623 markom
        "rD[31:0] <- rA[31:0] * rB[31:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
467
        "rD[63:0] <- rA[63:0] * rB[63:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
468 1108 lampret
        "Range Exception", ORBIS32I,},
469 87 lampret
 
470
{"l.div", "Divide Signed",
471 487 markom
        "The content of general-purpose register rA are divided by the content of "
472 955 markom
        "general-purpose register rB, and the result is placed into general-purpose register "
473 623 markom
        "rD. Both operands are treated as signed integers. A carry "
474 1295 lampret
        "flag is set when the divisor is zero (if carry SR[CY] is implemented).",
475 623 markom
        "rD[31:0] <- rA[31:0] / rB[31:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
476
        "rD[63:0] <- rA[63:0] / rB[63:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
477 1108 lampret
        "Range Exception", ORBIS32II,},
478 14 lampret
 
479 87 lampret
{"l.divu", "Divide Unsigned",
480 487 markom
        "The content of general-purpose register rA are divided by the content of "
481 1295 lampret
        "general-purpose register rB, and the result is placed into general-purpose register "
482 623 markom
        "rD. Both operands are treated as unsigned integers. A carry "
483 1295 lampret
        "flag is set when the divisor is zero (if carry SR[CY] is implemented).",
484 623 markom
        "rD[31:0] <- rA[31:0] / rB[31:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
485
        "rD[63:0] <- rA[63:0] / rB[63:0]\\SR[OV] <- overflow\\SR[CY] <- carry",
486 1108 lampret
        "Range Exception", ORBIS32II,},
487 14 lampret
 
488 87 lampret
{"l.sfeq", "Set Flag if Equal",
489 487 markom
        "The contents of general-purpose registers rA and rB "
490
        "are compared. If the contents are equal, "
491 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
492 155 simons
        "SR[F] <- rA[31:0] == rB[31:0]",
493
        "SR[F] <- rA[63:0] == rB[63:0]",
494 87 lampret
        "None", ORBIS32I,},
495 14 lampret
 
496 87 lampret
{"l.sfne", "Set Flag if Not Equal",
497 487 markom
        "The contents of general-purpose registers rA and "
498
        "rB are compared. If the contents are not equal, "
499 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
500 155 simons
        "SR[F] <- rA[31:0] != rB[31:0]",
501
        "SR[F] <- rA[63:0] != rB[63:0]",
502 87 lampret
        "None", ORBIS32I,},
503 14 lampret
 
504 87 lampret
{"l.sfgts", "Set Flag if Greater Than Signed",
505 487 markom
        "The contents of general-purpose registers rA and "
506
        "rB are compared as signed integers. If the contents "
507 14 lampret
        "of the first register are greater than the contents of the second "
508
        "register, "
509 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
510 155 simons
        "SR[F] <- rA[31:0] > rB[31:0]",
511
        "SR[F] <- rA[63:0] > rB[63:0]",
512 87 lampret
        "None", ORBIS32I,},
513 14 lampret
 
514 87 lampret
{"l.sfges", "Set Flag if Greater or Equal Than Signed",
515 487 markom
        "The contents of general-purpose registers rA and "
516
        "rB are compared as signed integers. If the contents "
517 955 markom
        "of the first register are greater than or equal to the contents of the second "
518 14 lampret
        "register, "
519 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
520 155 simons
        "SR[F] <- rA[31:0] >= rB[31:0]",
521
        "SR[F] <- rA[63:0] >= rB[63:0]",
522 87 lampret
        "None", ORBIS32I,},
523 14 lampret
 
524 87 lampret
{"l.sflts", "Set Flag if Less Than Signed",
525 487 markom
        "The contents of general-purpose registers rA and "
526
        "rB are compared as signed integers. If the contents "
527 14 lampret
        "of the first register are less than the contents of the second "
528
        "register, "
529 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
530 155 simons
        "SR[F] <- rA[31:0] < rB[31:0]",
531
        "SR[F] <- rA[63:0] < rB[63:0]",
532 87 lampret
        "None", ORBIS32I,},
533 14 lampret
 
534 87 lampret
{"l.sfles", "Set Flag if Less or Equal Than Signed",
535 487 markom
        "The contents of general-purpose registers rA and "
536
        "rB are compared as signed integers. If the contents "
537 955 markom
        "of the first register are less than or equal to the contents of the second "
538 14 lampret
        "register, "
539 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
540 155 simons
        "SR[F] <- rA[31:0] <= rB[31:0]",
541
        "SR[F] <- rA[63:0] <= rB[63:0]",
542 87 lampret
        "None", ORBIS32I,},
543 14 lampret
 
544 87 lampret
{"l.sfgtu", "Set Flag if Greater Than Unsigned",
545 487 markom
        "The contents of general-purpose registers rA and "
546
        "rB are compared as unsigned integers. If the contents "
547 14 lampret
        "of the first register are greater than the contents of the second "
548
        "register, "
549 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
550 155 simons
        "SR[F] <- rA[31:0] > rB[31:0]",
551
        "SR[F] <- rA[63:0] > rB[63:0]",
552 87 lampret
        "None", ORBIS32I,},
553 14 lampret
 
554 87 lampret
{"l.sfgeu", "Set Flag if Greater or Equal Than Unsigned",
555 487 markom
        "The contents of general-purpose registers rA and "
556
        "rB are compared as unsigned integers. If the contents "
557 955 markom
        "of the first register are greater than or equal to the contents of the second "
558 14 lampret
        "register, "
559 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
560 155 simons
        "SR[F] <- rA[31:0] >= rB[31:0]",
561
        "SR[F] <- rA[63:0] >= rB[63:0]",
562 87 lampret
        "None", ORBIS32I,},
563 14 lampret
 
564 87 lampret
{"l.sfltu", "Set Flag if Less Than Unsigned",
565 487 markom
        "The contents of general-purpose registers rA and "
566
        "rB are compared as unsigned integers. If the contents "
567 14 lampret
        "of the first register are less than the contents of the second "
568
        "register, "
569 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
570 155 simons
        "SR[F] <- rA[31:0] < rB[31:0]",
571
        "SR[F] <- rA[63:0] < rB[63:0]",
572 87 lampret
        "None", ORBIS32I,},
573 14 lampret
 
574 87 lampret
{"l.sfleu", "Set Flag if Less or Equal Than Unsigned",
575 487 markom
        "The contents of general-purpose registers rA and "
576
        "rB are compared as unsigned integers. If the contents "
577 955 markom
        "of the first register are less than or equal to the contents of the second "
578 14 lampret
        "register, "
579 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
580 155 simons
        "SR[F] <- rA[31:0] <= rB[31:0]",
581
        "SR[F] <- rA[63:0] <= rB[63:0]",
582 87 lampret
        "None", ORBIS32I,},
583 14 lampret
 
584 87 lampret
{"l.sfeqi", "Set Flag if Equal Immediate",
585 487 markom
        "The contents of general-purpose register rA and the sign-extended immediate value "
586
        "are compared. If the two values are equal, "
587 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
588 155 simons
        "SR[F] <- rA[31:0] == exts(Immediate)",
589
        "SR[F] <- rA[63:0] == exts(Immediate)",
590 87 lampret
        "None", ORBIS32II,},
591 14 lampret
 
592 87 lampret
{"l.sfnei", "Set Flag if Not Equal Immediate",
593
        "The contents of general-purpose register rA and "
594 487 markom
        "the sign-extended immediate value are compared. If the two values are not equal, "
595 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
596 155 simons
        "SR[F] <- rA[31:0] != exts(Immediate)",
597
        "SR[F] <- rA[63:0] != exts(Immediate)",
598 87 lampret
        "None", ORBIS32II,},
599 14 lampret
 
600 87 lampret
{"l.sfgtsi", "Set Flag if Greater Than Immediate Signed",
601
        "The contents of general-purpose register rA and "
602 487 markom
        "the sign-extended immediate value are compared as signed integers. If the contents "
603
        "of the first register are greater than the immediate value "
604 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
605 155 simons
        "SR[F] <- rA[31:0] > exts(Immediate)",
606
        "SR[F] <- rA[63:0] > exts(Immediate)",
607 87 lampret
        "None", ORBIS32II,},
608 14 lampret
 
609 87 lampret
{"l.sfgesi", "Set Flag if Greater or Equal Than Immediate Signed",
610
        "The contents of general-purpose register rA and "
611 487 markom
        "the sign-extended immediate value are compared as signed integers. If the contents "
612
        "of the first register are greater than or equal to the immediate value "
613 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
614 155 simons
        "SR[F] <- rA[31:0] >= exts(Immediate)",
615
        "SR[F] <- rA[63:0] >= exts(Immediate)",
616 87 lampret
        "None", ORBIS32II,},
617 14 lampret
 
618 87 lampret
{"l.sfltsi", "Set Flag if Less Than Immediate Signed",
619
        "The contents of general-purpose register rA and "
620 487 markom
        "the sign-extended immediate value are compared as signed integers. If the contents "
621
        "of the first register are less than the immediate value "
622 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
623 155 simons
        "SR[F] <- rA[31:0] < exts(Immediate)",
624
        "SR[F] <- rA[63:0] < exts(Immediate)",
625 87 lampret
        "None", ORBIS32II,},
626 14 lampret
 
627 87 lampret
{"l.sflesi", "Set Flag if Less or Equal Than Immediate Signed",
628
        "The contents of general-purpose register rA and "
629 487 markom
        "the sign-extended immediate value are compared as signed integers. If the contents "
630
        "of the first register are less than or equal to the immediate value "
631 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
632 155 simons
        "SR[F] <- rA[31:0] <= exts(Immediate)",
633
        "SR[F] <- rA[63:0] <= exts(Immediate)",
634 87 lampret
        "None", ORBIS32II,},
635 14 lampret
 
636 87 lampret
{"l.sfgtui", "Set Flag if Greater Than Immediate Unsigned",
637
        "The contents of general-purpose register rA and "
638 1601 lampret
        "the sign-extended immediate value are compared as unsigned integers. If the contents "
639 487 markom
        "of the first register are greater than the immediate value "
640 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
641 1601 lampret
        "SR[F] <- rA[31:0] > exts(Immediate)",
642
        "SR[F] <- rA[63:0] > exts(Immediate)",
643 87 lampret
        "None", ORBIS32II,},
644 14 lampret
 
645 87 lampret
{"l.sfgeui", "Set Flag if Greater or Equal Than Immediate Unsigned",
646
        "The contents of general-purpose register rA and "
647 1601 lampret
        "the sign-extended immediate value are compared as unsigned integers. If the contents "
648 487 markom
        "of the first register are greater than or equal to the immediate value "
649 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
650 1601 lampret
        "SR[F] <- rA[31:0] >= exts(Immediate)",
651
        "SR[F] <- rA[63:0] >= exts(Immediate)",
652 87 lampret
        "None", ORBIS32II,},
653
 
654
{"l.sfltui", "Set Flag if Less Than Immediate Unsigned",
655
        "The contents of general-purpose register rA and "
656 1601 lampret
        "the sign-extended immediate value are compared as unsigned integers. If the contents "
657 487 markom
        "of the first register are less than the immediate value "
658 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
659 1601 lampret
        "SR[F] <- rA[31:0] < exts(Immediate)",
660
        "SR[F] <- rA[63:0] < exts(Immediate)",
661 87 lampret
        "None", ORBIS32II,},
662
 
663
{"l.sfleui", "Set Flag if Less or Equal Than Immediate Unsigned",
664
        "The contents of general-purpose register rA and "
665 1601 lampret
        "the sign-extended immediate value are compared as unsigned integers. If the contents "
666 487 markom
        "of the first register are less than or equal to the immediate value "
667 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
668 1601 lampret
        "SR[F] <- rA[31:0] <= exts(Immediate)",
669
        "SR[F] <- rA[63:0] <= exts(Immediate)",
670 87 lampret
        "None", ORBIS32II,},
671
 
672 95 lampret
{"l.mtspr", "Move To Special-Purpose Register",
673 955 markom
        "The contents of general-purpose register rB are moved into the special register "
674 1295 lampret
        "defined by contents of general-purpose register rA logically ORed with the immediate value.",
675 1113 lampret
        "spr(rA OR Immediate) <- rB[31:0]",
676
        "spr(rA OR Immediate) <- rB[31:0]",
677 87 lampret
        "None", ORBIS32I,},
678
 
679 95 lampret
{"l.mfspr", "Move From Special-Purpose Register",
680 1295 lampret
        "The contents of the special register, defined by contents of general-purpose rA logically ORed "
681
        "with immediate value, are moved into general-purpose register rD.",
682 1113 lampret
        "rD[31:0] <- spr(rA OR Immediate)",
683
        "rD[63:0] <- spr(rA OR Immediate)",
684 87 lampret
        "None", ORBIS32I,},
685
 
686
{"l.nop", "No Operation",
687 955 markom
        "This instruction does not do anything except that it takes at least one "
688 623 markom
        "clock cycle to complete. It is often used to fill delay slot gaps."
689 955 markom
        "Immediate value can be used for simulation purposes.",
690 155 simons
        "\\",
691
        "\\",
692 87 lampret
        "None", ORBIS32I,},
693
 
694
{"l.movhi", "Move Immediate High",
695 955 markom
        "The 16-bit immediate value is zero-extended, shifted left by 16 bits, and placed "
696 87 lampret
        "into general-purpose register rD.",
697 623 markom
        "rD[31:0] <- extz(Immediate) << 16",
698
        "rD[63:0] <- extz(Immediate) << 16",
699 87 lampret
        "None", ORBIS32I,},
700
 
701 14 lampret
{"l.bf", "Branch if Flag",
702 487 markom
        "The immediate value is shifted left two bits, sign-extended to "
703 1113 lampret
        "program counter width, and then added to the address of the branch instruction. The result "
704 623 markom
        "is the effective address of the branch. If the flag is set, "
705 955 markom
        "the program branches "
706 87 lampret
        "to EA with a delay of one instruction.",
707 1113 lampret
        "EA <- exts(Immediate << 2) + BranchInsnAddr\\PC <- EA if SR[F] set",
708
        "EA <- exts(Immediate << 2) + BranchInsnAddr\\PC <- EA if SR[F] set",
709 87 lampret
        "None", ORBIS32I,},
710 14 lampret
 
711
{"l.bnf", "Branch if No Flag",
712 487 markom
        "The immediate value is shifted left two bits, sign-extended to "
713 1113 lampret
        "program counter width, and then added to the address of the branch instruction. The result "
714 623 markom
        "is the effective address of the branch. If the flag is cleared, "
715 955 markom
        "the program branches "
716 87 lampret
        "to EA with a delay of one instruction.",
717 1113 lampret
        "EA <- exts(Immediate << 2) + BranchInsnAddr\\PC <- EA if SR[F] cleared",
718
        "EA <- exts(Immediate << 2) + BranchInsnAddr\\PC <- EA if SR[F] cleared",
719 87 lampret
        "None", ORBIS32I,},
720 14 lampret
 
721
{"l.jal", "Jump and Link",
722 487 markom
        "The immediate value is shifted left two bits, sign-extended to "
723 1113 lampret
        "program counter width, and then added to the address of the jump instruction. The result "
724 487 markom
        "is the effective address of the jump. The program unconditionally jumps "
725 87 lampret
        "to EA with a delay of one instruction. The "
726 14 lampret
        "address of the instruction after the delay slot is placed in the "
727
        "link register. ",
728 1113 lampret
        "PC <- exts(Immediate << 2) + JumpInsnAddr\\LR <- DelayInsnAddr + 4",
729
        "PC <- exts(Immediate << 2) + JumpInsnAddr\\LR <- DelayInsnAddr + 4",
730 87 lampret
        "None", ORBIS32I,},
731 14 lampret
 
732
{"l.j", "Jump",
733 487 markom
        "The immediate value is shifted left two bits, sign-extended to "
734 1113 lampret
        "program counter width, and then added to the address of the jump instruction. The result "
735 487 markom
        "is the effective address of the jump. The program unconditionally jumps "
736 87 lampret
        "to EA with a delay of one instruction.",
737 1295 lampret
        "PC <- exts(Immediate << 2) + JumpInsnAddr",
738
        "PC <- exts(Immediate << 2) + JumpInsnAddr",
739 87 lampret
        "None", ORBIS32I,},
740 14 lampret
 
741 87 lampret
{"l.jalr", "Jump and Link Register",
742
        "The contents of general-purpose register rB "
743 487 markom
        "is the effective address of the jump. The program unconditionally jumps "
744 87 lampret
        "to EA with a delay of one instruction. The "
745 14 lampret
        "address of the instruction after the delay slot is placed in the "
746 1295 lampret
        "link register. It is not allowed to specify link register as rB.",
747 87 lampret
        "PC <- rB\\LR <- DelayInsnAddr + 4",
748
        "PC <- rB\\LR <- DelayInsnAddr + 4",
749
        "None", ORBIS32I,},
750 14 lampret
 
751 87 lampret
{"l.jr", "Jump Register",
752
        "The contents of general-purpose register rB "
753 487 markom
        "is the effective address of the jump. The program unconditionally jumps "
754 87 lampret
        "to EA with a delay of one instruction.",
755
        "PC <- rB",
756
        "PC <- rB",
757
        "None", ORBIS32I,},
758 14 lampret
 
759 87 lampret
{"l.sys", "System Call",
760 487 markom
        "Execution of the system call instruction results in the system call "
761
        "exception. The system calls exception is a request to the operating system "
762 1113 lampret
        "to provide operating system services. The immediate value can be used to "
763
        "specify which system service is requested, alternatively a GPR defined by "
764
        "the ABI can be used to specify system service.",
765
        "system-call-exception(K)",
766
        "system-call-exception(K)",
767 623 markom
        "System Call", ORBIS32I,},
768 14 lampret
 
769 89 lampret
{"l.msync", "Memory Syncronization",
770 487 markom
        "Execution of the memory synchronization instruction results in completion "
771 89 lampret
        "of all load/store operations before the RISC core continues.",
772
        "memory-synchronization",
773
        "memory-synchronization",
774
        "None", ORBIS32II,},
775
 
776 95 lampret
{"l.psync", "Pipeline Syncronization",
777
        "Execution of pipeline synchronization instruction results in completion "
778
        "of all instructions that were fetched before l.psync instruction. Once all "
779
        "instructions are completed, instructions fetched after l.psync are flushed from the "
780
        " pipeline and fetched again.",
781
        "pipeline-synchronization",
782
        "pipeline-synchronization",
783
        "None", ORBIS32II,},
784
 
785
{"l.csync", "Context Syncronization",
786
        "Execution of context synchronization instruction results in completion "
787 487 markom
        "of all operations inside the processor and a flush of the instruction pipelines. "
788 955 markom
        "When all operations are complete, the RISC core resumes with an empty instruction pipeline and "
789 95 lampret
        "fresh context in all units (MMU for example).",
790
        "context-synchronization",
791
        "context-synchronization",
792
        "None", ORBIS32II,},
793
 
794 87 lampret
{"l.rfe", "Return From Exception",
795 623 markom
        "Execution of this instruction partially restores the state of the processor prior to "
796
        "the exception. This instruction does not have a delay slot.",
797 1108 lampret
        "PC <- EPCR\\SR <- ESR",
798
        "PC <- EPCR\\SR <- ESR",
799 87 lampret
        "None", ORBIS32I,},
800 14 lampret
 
801 95 lampret
{"l.cust1", "Reserved for ORBIS32/64 Custom Instructions",
802
        "This fake instruction only allocates instruction set space for custom instructions. "
803 955 markom
        "Custom instructions are those that are not defined by the architecture but rather "
804 95 lampret
        "by the implementation itself.",
805
        "N/A",
806
        "N/A",
807
        "N/A", ORBIS32II,},
808
 
809
{"l.cust2", "Reserved for ORBIS32/64 Custom Instructions",
810
        "This fake instruction only allocates instruction set space for custom instructions. "
811 955 markom
        "Custom instructions are those that are not defined by the architecture but rather "
812 95 lampret
        "by the implementation itself.",
813
        "N/A",
814
        "N/A",
815
        "N/A", ORBIS32II,},
816
 
817
{"l.cust3", "Reserved for ORBIS32/64 Custom Instructions",
818
        "This fake instruction only allocates instruction set space for custom instructions. "
819 955 markom
        "Custom instructions are those that are not defined by the architecture but rather "
820 95 lampret
        "by the implementation itself.",
821
        "N/A",
822
        "N/A",
823
        "N/A", ORBIS32II,},
824
 
825
{"l.cust4", "Reserved for ORBIS32/64 Custom Instructions",
826
        "This fake instruction only allocates instruction set space for custom instructions. "
827 955 markom
        "Custom instructions are those that are not defined by the architecture but rather "
828 95 lampret
        "by the implementation itself.",
829
        "N/A",
830
        "N/A",
831
        "N/A", ORBIS32II,},
832
 
833
{"l.cust5", "Reserved for ORBIS32/64 Custom Instructions",
834
        "This fake instruction only allocates instruction set space for custom instructions. "
835 955 markom
        "Custom instructions are those that are not defined by the architecture but rather "
836 95 lampret
        "by the implementation itself.",
837
        "N/A",
838
        "N/A",
839
        "N/A", ORBIS32II,},
840
 
841
{"l.cust6", "Reserved for ORBIS32/64 Custom Instructions",
842
        "This fake instruction only allocates instruction set space for custom instructions. "
843 955 markom
        "Custom instructions are those that are not defined by the architecture but rather "
844 95 lampret
        "by the implementation itself.",
845
        "N/A",
846
        "N/A",
847
        "N/A", ORBIS32II,},
848
 
849
{"l.cust7", "Reserved for ORBIS32/64 Custom Instructions",
850
        "This fake instruction only allocates instruction set space for custom instructions. "
851 955 markom
        "Custom instructions are those that are not defined by the architecture but rather "
852 95 lampret
        "by the implementation itself.",
853
        "N/A",
854
        "N/A",
855
        "N/A", ORBIS32II,},
856
 
857
{"l.cust8", "Reserved for ORBIS32/64 Custom Instructions",
858
        "This fake instruction only allocates instruction set space for custom instructions. "
859 955 markom
        "Custom instructions are those that are not defined by the architecture but rather "
860 95 lampret
        "by the implementation itself.",
861
        "N/A",
862
        "N/A",
863
        "N/A", ORBIS32II,},
864
 
865 87 lampret
/*** ORFPX32 ***/
866 14 lampret
 
867 87 lampret
{"lf.add.s", "Add Floating-Point Single-Precision",
868 955 markom
        "The contents of vector/floating-point register vfrA are added to the contents "
869 87 lampret
        "of vector/floating-point register vfrB to form the result. The result is placed into "
870
        "vector/floating-point register vfrD.",
871
        "vfrD[31:0] <- vfrA[31:0] + vfrB[31:0]",
872 1295 lampret
        "vfrD[31:0] <- vfrA[31:0] + vfrB[31:0]\\vfrD[63:32] <- 0",
873
        "Floating Point", ORFPX32I,},
874 14 lampret
 
875 87 lampret
{"lf.sub.s", "Subtract Floating-Point Single-Precision",
876 955 markom
        "The contents of vector/floating-point register vfrB are subtracted from the contents "
877 87 lampret
        "of vector/floating-point register vfrA to form the result. The result is placed into "
878
        "vector/floating-point register vfrD.",
879
        "vfrD[31:0] <- vfrA[31:0] - vfrB[31:0]",
880 1295 lampret
        "vfrD[31:0] <- vfrA[31:0] - vfrB[31:0]\\vfrD[63:32] <- 0",
881
        "Floating Point", ORFPX32I,},
882 14 lampret
 
883 87 lampret
{"lf.mul.s", "Multiply Floating-Point Single-Precision",
884 955 markom
        "The contents of vector/floating-point register vfrA are multiplied by the contents "
885 87 lampret
        "of vector/floating-point register vfrB to form the result. The result is placed into "
886
        "vector/floating-point register vfrD.",
887
        "vfrD[31:0] <- vfrA[31:0] * vfrB[31:0]",
888 1295 lampret
        "vfrD[31:0] <- vfrA[31:0] * vfrB[31:0]\\vfrD[63:32] <- 0",
889
        "Floating Point", ORFPX32I,},
890 14 lampret
 
891 87 lampret
{"lf.div.s", "Divide Floating-Point Single-Precision",
892 955 markom
        "The contents of vector/floating-point register vfrA are divided by the contents "
893 87 lampret
        "of vector/floating-point register vfrB to form the result. The result is placed into "
894
        "vector/floating-point register vfrD.",
895
        "vfrD[31:0] <- vfrA[31:0] / vfrB[31:0]",
896 1295 lampret
        "vfrD[31:0] <- vfrA[31:0] / vfrB[31:0]\\vfrD[63:32] <- 0",
897
        "Floating Point", ORFPX32II,},
898 14 lampret
 
899 87 lampret
{"lf.rem.s", "Remainder Floating-Point Single-Precision",
900 955 markom
        "The contents of vector/floating-point register vfrA are divided by the contents "
901
        "of vector/floating-point register vfrB, and remainder is used as the result. The result is placed into "
902 87 lampret
        "vector/floating-point register vfrD.",
903
        "vfrD[31:0] <- vfrA[31:0] % vfrB[31:0]",
904 1295 lampret
        "vfrD[31:0] <- vfrA[31:0] % vfrB[31:0]\\vfrD[63:32] <- 0",
905
        "Floating Point", ORFPX32II,},
906 14 lampret
 
907 87 lampret
{"lf.madd.s", "Multiply and Add Floating-Point Single-Precision",
908 955 markom
        "The contents of vector/floating-point register vfrA are multiplied by the contents "
909
        "of vector/floating-point register vfrB, and added to special-purpose register "
910 87 lampret
        "FPMADDLO/FPMADDHI.",
911
        "FPMADDHI[31:0]FPMADDLO[31:0] <- vfrA[31:0] * vfrB[31:0] + FPMADDHI[31:0]FPMADDLO[31:0]",
912 1295 lampret
        "FPMADDHI[31:0]FPMADDLO[31:0] <- vfrA[31:0] * vfrB[31:0] + FPMADDHI[31:0]FPMADDLO[31:0]\\FPMADDHI <- 0\\FPMADDLO <- 0",
913
        "Floating Point", ORFPX32II,},
914 14 lampret
 
915 87 lampret
{"lf.sfeq.s", "Set Flag if Equal Floating-Point Single-Precision",
916
        "The contents of vector/floating-point register vfrA and the contents of "
917
        "vector/floating-point register vfrB are compared. If the two registers are equal, "
918 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
919 155 simons
        "SR[F] <- vfrA[31:0] == vfrB[31:0]",
920 1295 lampret
        "SR[F] <- vfrA[31:0] == vfrB[31:0]",
921 87 lampret
        "None", ORFPX32I,},
922 14 lampret
 
923 87 lampret
{"lf.sfne.s", "Set Flag if Not Equal Floating-Point Single-Precision",
924
        "The contents of vector/floating-point register vfrA and the contents of "
925
        "vector/floating-point register vfrB are compared. If the two registers are not equal, "
926 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
927 155 simons
        "SR[F] <- vfrA[31:0] != vfrB[31:0]",
928 1295 lampret
        "SR[F] <- vfrA[31:0] != vfrB[31:0]",
929 87 lampret
        "None", ORFPX32I,},
930 14 lampret
 
931 87 lampret
{"lf.sfgt.s", "Set Flag if Greater Than Floating-Point Single-Precision",
932
        "The contents of vector/floating-point register vfrA and the contents of "
933 487 markom
        "vector/floating-point register vfrB are compared. If the first register is greater than "
934 955 markom
        "the second register, the compare flag is set; otherwise the compare flag is cleared.",
935 155 simons
        "SR[F] <- vfrA[31:0] > vfrB[31:0]",
936 1295 lampret
        "SR[F] <- vfrA[31:0] > vfrB[31:0]",
937 87 lampret
        "None", ORFPX32I,},
938 14 lampret
 
939 87 lampret
{"lf.sfge.s", "Set Flag if Greater or Equal Than Floating-Point Single-Precision",
940
        "The contents of vector/floating-point register vfrA and the contents of "
941 955 markom
        "vector/floating-point register vfrB are compared. If the first register is greater than "
942
        "or equal to the second register, the compare flag is set; otherwise the compare flag is cleared.",
943 155 simons
        "SR[F] <- vfrA[31:0] >= vfrB[31:0]",
944 1295 lampret
        "SR[F] <- vfrA[31:0] >= vfrB[31:0]",
945 87 lampret
        "None", ORFPX32I,},
946 14 lampret
 
947 87 lampret
{"lf.sflt.s", "Set Flag if Less Than Floating-Point Single-Precision",
948
        "The contents of vector/floating-point register vfrA and the contents of "
949 955 markom
        "vector/floating-point register vfrB are compared. If the first register is less than the "
950
        "second register, the compare flag is set; otherwise the compare flag is cleared.",
951 155 simons
        "SR[F] <- vfrA[31:0] < vfrB[31:0]",
952 1295 lampret
        "SR[F] <- vfrA[31:0] < vfrB[31:0]",
953 87 lampret
        "None", ORFPX32I,},
954
 
955
{"lf.sfle.s", "Set Flag if Less or Equal Than Floating-Point Single-Precision",
956
        "The contents of vector/floating-point register vfrA and the contents of "
957 955 markom
        "vector/floating-point register vfrB are compared. If the first register is less than "
958
        "or equal to the second register, the compare flag is set; otherwise the compare flag is cleared.",
959 155 simons
        "SR[F] <- vfrA[31:0] <= vfrB[31:0]",
960 1295 lampret
        "SR[F] <- vfrA[31:0] <= vfrB[31:0]",
961 87 lampret
        "None", ORFPX32I,},
962
 
963
{"lf.ftoi.s", "Floating-Point Single-Precision To Integer",
964 487 markom
        "The contents of vector/floating-point register vfrA are converted to an integer "
965 87 lampret
        "and stored into general-purpose register rD.",
966
        "rD[31:0] <- ftoi(vfrA[31:0])",
967 1295 lampret
        "rD[31:0] <- ftoi(vfrA[31:0])\\rD[63:32] <- 0",
968
        "Floating Point", ORFPX32I,},
969 87 lampret
 
970
{"lf.itof.s", "Integer To Floating-Point Single-Precision",
971 487 markom
        "The contents of general-purpose register rA are converted to a single-precision "
972 87 lampret
        "floating-point number and stored into vector/floating-point register vfrD.",
973
        "vfrD[31:0] <- itof(rA[31:0])",
974 1295 lampret
        "vfrD[31:0] <- itof(rA[31:0])\\vfrD[63:32] <- 0",
975
        "Floating Point", ORFPX32I,},
976 87 lampret
 
977 95 lampret
{"lf.cust1.s", "Reserved for ORFPX32 Custom Instructions",
978
        "This fake instruction only allocates instruction set space for custom instructions. "
979 955 markom
        "Custom instructions are those that are not defined by the architecture but instead "
980 95 lampret
        "by the implementation itself.",
981
        "N/A",
982
        "N/A",
983
        "N/A", ORFPX32II,},
984
 
985 87 lampret
/*** ORFPX64 ***/
986
 
987
{"lf.add.d", "Add Floating-Point Double-Precision",
988 487 markom
        "The contents of vector/floating-point register vfrA are added to the contents "
989 87 lampret
        "of vector/floating-point register vfrB to form the result. The result is placed into "
990
        "vector/floating-point register vfrD.",
991 155 simons
        "N/A",
992 87 lampret
        "vfrD[63:0] <- vfrA[63:0] + vfrB[63:0]",
993 1295 lampret
        "Floating Point", ORFPX64I,},
994 87 lampret
 
995
{"lf.sub.d", "Subtract Floating-Point Double-Precision",
996 487 markom
        "The contents of vector/floating-point register vfrB are subtracted from the contents "
997 87 lampret
        "of vector/floating-point register vfrA to form the result. The result is placed into "
998
        "vector/floating-point register vfrD.",
999 155 simons
        "N/A",
1000 87 lampret
        "vfrD[63:0] <- vfrA[63:0] - vfrB[63:0]",
1001 1295 lampret
        "Floating Point", ORFPX64I,},
1002 87 lampret
 
1003
{"lf.mul.d", "Multiply Floating-Point Double-Precision",
1004 487 markom
        "The contents of vector/floating-point register vfrA are multiplied by the contents "
1005 87 lampret
        "of vector/floating-point register vfrB to form the result. The result is placed into "
1006
        "vector/floating-point register vfrD.",
1007 155 simons
        "N/A",
1008 87 lampret
        "vfrD[63:0] <- vfrA[63:0] * vfrB[63:0]",
1009 1295 lampret
        "Floating Point", ORFPX64I,},
1010 87 lampret
 
1011
{"lf.div.d", "Divide Floating-Point Double-Precision",
1012 487 markom
        "The contents of vector/floating-point register vfrA are divided by the contents "
1013 87 lampret
        "of vector/floating-point register vfrB to form the result. The result is placed into "
1014
        "vector/floating-point register vfrD.",
1015 155 simons
        "N/A",
1016 87 lampret
        "vfrD[63:0] <- vfrA[63:0] / vfrB[63:0]",
1017 1295 lampret
        "Floating Point", ORFPX64II,},
1018 87 lampret
 
1019
{"lf.rem.d", "Remainder Floating-Point Double-Precision",
1020 487 markom
        "The contents of vector/floating-point register vfrA are divided by the contents "
1021 955 markom
        "of vector/floating-point register vfrB, and remainder is used as the result. The result is placed into "
1022 87 lampret
        "vector/floating-point register vfrD.",
1023 155 simons
        "N/A",
1024 87 lampret
        "vfrD[63:0] <- vfrA[63:0] % vfrB[63:0]",
1025 1295 lampret
        "Floating Point", ORFPX64II,},
1026 87 lampret
 
1027
{"lf.madd.d", "Multiply and Add Floating-Point Double-Precision",
1028 487 markom
        "The contents of vector/floating-point register vfrA are multiplied by the contents "
1029 955 markom
        "of vector/floating-point register vfrB, and added to special-purpose register "
1030 87 lampret
        "FPMADDLO/FPMADDHI.",
1031 155 simons
        "N/A",
1032 87 lampret
        "FPMADDHI[31:0]FPMADDLO[31:0] <- vfrA[63:0] * vfrB[63:0] + FPMADDHI[31:0]FPMADDLO[31:0]",
1033 1295 lampret
        "Floating Point", ORFPX64II,},
1034 87 lampret
 
1035
{"lf.sfeq.d", "Set Flag if Equal Floating-Point Double-Precision",
1036
        "The contents of vector/floating-point register vfrA and the contents of "
1037
        "vector/floating-point register vfrB are compared. If the two registers are equal, "
1038 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
1039 155 simons
        "N/A",
1040
        "SR[F] <- vfrA[63:0] == vfrB[63:0]",
1041 87 lampret
        "None", ORFPX64I,},
1042
 
1043
{"lf.sfne.d", "Set Flag if Not Equal Floating-Point Double-Precision",
1044
        "The contents of vector/floating-point register vfrA and the contents of "
1045
        "vector/floating-point register vfrB are compared. If the two registers are not equal, "
1046 955 markom
        "the compare flag is set; otherwise the compare flag is cleared.",
1047 155 simons
        "N/A",
1048
        "SR[F] <- vfrA[63:0] != vfrB[63:0]",
1049 87 lampret
        "None", ORFPX64I,},
1050
 
1051
{"lf.sfgt.d", "Set Flag if Greater Than Floating-Point Double-Precision",
1052
        "The contents of vector/floating-point register vfrA and the contents of "
1053 955 markom
        "vector/floating-point register vfrB are compared. If the first register is greater than the "
1054
        "second register, the compare flag is set; otherwise the compare flag is cleared.",
1055 155 simons
        "N/A",
1056
        "SR[F] <- vfrA[63:0] > vfrB[63:0]",
1057 87 lampret
        "None", ORFPX64I,},
1058
 
1059
{"lf.sfge.d", "Set Flag if Greater or Equal Than Floating-Point Double-Precision",
1060
        "The contents of vector/floating-point register vfrA and the contents of "
1061 955 markom
        "vector/floating-point register vfrB are compared. If the first register is greater than "
1062
        "or equal to the second register, the compare flag is set; otherwise the compare flag is cleared.",
1063 155 simons
        "N/A",
1064
        "SR[F] <- vfrA[63:0] >= vfrB[63:0]",
1065 87 lampret
        "None", ORFPX64I,},
1066
 
1067
{"lf.sflt.d", "Set Flag if Less Than Floating-Point Double-Precision",
1068
        "The contents of vector/floating-point register vfrA and the contents of "
1069 955 markom
        "vector/floating-point register vfrB are compared. If the first register is less than the "
1070
        "second register, the compare flag is set; otherwise the compare flag is cleared.",
1071 155 simons
        "N/A",
1072
        "SR[F] <- vfrA[63:0] < vfrB[63:0]",
1073 87 lampret
        "None", ORFPX64I,},
1074
 
1075
{"lf.sfle.d", "Set Flag if Less or Equal Than Floating-Point Double-Precision",
1076
        "The contents of vector/floating-point register vfrA and the contents of "
1077 955 markom
        "vector/floating-point register vfrB are compared. If the first register is less than "
1078
        "or equal to the second register, the compare flag is set; otherwise the compare flag is cleared.",
1079 155 simons
        "N/A",
1080
        "SR[F] <- vfrA[363:0] <= vfrB[63:0]",
1081 87 lampret
        "None", ORFPX64I,},
1082
 
1083
{"lf.ftoi.d", "Floating-Point Double-Precision To Integer",
1084 487 markom
        "The contents of vector/floating-point register vfrA are converted to an integer "
1085
        "and stored in general-purpose register rD.",
1086 155 simons
        "N/A",
1087 87 lampret
        "rD[63:0] <- ftoi(vfrA[63:0])",
1088 1295 lampret
        "Floating Point", ORFPX64I,},
1089 87 lampret
 
1090
{"lf.itof.d", "Integer To Floating-Point Double-Precision",
1091 955 markom
        "The contents of general-purpose register rA are converted to a double-precision "
1092 487 markom
        "floating-point number and stored in vector/floating-point register vfrD.",
1093 155 simons
        "N/A",
1094 87 lampret
        "vfrD[63:0] <- itof(rA[63:0])",
1095 1295 lampret
        "Floating Point", ORFPX64I,},
1096 87 lampret
 
1097 95 lampret
{"lf.cust1.d", "Reserved for ORFPX64 Custom Instructions",
1098
        "This fake instruction only allocates instruction set space for custom instructions. "
1099 955 markom
        "Custom instructions are those that are not defined by the architecture but instead "
1100 95 lampret
        "by the implementation itself.",
1101
        "N/A",
1102
        "N/A",
1103
        "N/A", ORFPX64II,},
1104
 
1105 87 lampret
/*** ORVDX64 ***/
1106
 
1107
{"lv.all_eq.b", "Vector Byte Elements All Equal",
1108
        "All byte elements of vector/floating-point register vfrA are compared "
1109 487 markom
        "to the byte elements of vector/floating-point register vfrB. The compare flag is "
1110
        "set if all corresponding elements are equal; otherwise the compare flag is cleared. "
1111
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1112 87 lampret
        "register vfrD.",
1113 155 simons
        "N/A",
1114 87 lampret
        "flag <- vfrA[7:0] == vfrB[7:0] \\"
1115 155 simons
        "\tvfrA[15:8] == vfrB[15:8] &&\\"
1116
        "\tvfrA[23:16] == vfrB[23:16] &&\\"
1117
        "\tvfrA[31:24] == vfrB[31:24] &&\\"
1118
        "\tvfrA[39:32] == vfrB[39:32] &&\\"
1119
        "\tvfrA[47:40] == vfrB[47:40] &&\\"
1120
        "\tvfrA[55:48] == vfrB[55:48] &&\\"
1121
        "\tvfrA[63:56] == vfrB[63:56]\\"
1122 87 lampret
        "vfrD[63:0] <- repl(flag)",
1123
        "None", ORVDX64I,},
1124
 
1125
{"lv.all_eq.h", "Vector Half-Word Elements All Equal",
1126
        "All half-word elements of vector/floating-point register vfrA are compared "
1127 487 markom
        "to the half-word elements of vector/floating-point register vfrB. The compare flag is "
1128
        "set if all corresponding elements are equal; otherwise the compare flag is cleared. "
1129
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1130 87 lampret
        "register vfrD.",
1131 155 simons
        "N/A",
1132
        "flag <- vfrA[15:0] == vfrB[15:0] &&\\"
1133
        "\tvfrA[31:16] == vfrB[31:16] &&\\"
1134
        "\tvfrA[47:32] == vfrB[47:32] &&\\"
1135
        "\tvfrA[63:48] == vfrB[63:48]\\"
1136 87 lampret
        "vfrD[63:0] <- repl(flag)",
1137
        "None", ORVDX64I,},
1138
 
1139 487 markom
{"lv.all_ge.b", "Vector Byte Elements All Greater Than or Equal To",
1140 87 lampret
        "All byte elements of vector/floating-point register vfrA are compared "
1141 487 markom
        "to the byte elements of vector/floating-point register vfrB. The compare flag is "
1142
        "set if all elements of vfrA are greater than or equal to the elements of vfrB;"
1143 955 markom
        " otherwise the compare flag is cleared. "
1144 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1145 87 lampret
        "register vfrD.",
1146 155 simons
        "N/A",
1147
        "flag <- vfrA[7:0] >= vfrB[7:0] &&\\"
1148
        "\tvfrA[15:8] >= vfrB[15:8] &&\\"
1149
        "\tvfrA[23:16] >= vfrB[23:16] &&\\"
1150
        "\tvfrA[31:24] >= vfrB[31:24] &&\\"
1151
        "\tvfrA[39:32] >= vfrB[39:32] &&\\"
1152
        "\tvfrA[47:40] >= vfrB[47:40] &&\\"
1153
        "\tvfrA[55:48] >= vfrB[55:48] &&\\"
1154
        "\tvfrA[63:56] >= vfrB[63:56]\\"
1155 87 lampret
        "vfrD[63:0] <- repl(flag)",
1156
        "None", ORVDX64I,},
1157
 
1158 487 markom
{"lv.all_ge.h", "Vector Half-Word Elements All Greater Than or Equal To",
1159 87 lampret
        "All half-word elements of vector/floating-point register vfrA are compared "
1160 487 markom
        "to the half-word elements of vector/floating-point register vfrB. The compare flag is "
1161
        "set if all elements of vfrA are greater than or equal to the elements of vfrB;"
1162 955 markom
        " otherwise the compare flag is cleared. "
1163 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1164 87 lampret
        "register vfrD.",
1165 155 simons
        "N/A",
1166
        "flag <- vfrA[15:0] >= vfrB[15:0] &&\\"
1167
        "\tvfrA[31:16] >= vfrB[31:16] &&\\"
1168
        "\tvfrA[47:32] >= vfrB[47:32] &&\\"
1169
        "\tvfrA[63:48] >= vfrB[63:48]\\"
1170 87 lampret
        "vfrD[63:0] <- repl(flag)",
1171
        "None", ORVDX64I,},
1172
 
1173
{"lv.all_gt.b", "Vector Byte Elements All Greater Than",
1174
        "All byte elements of vector/floating-point register vfrA are compared "
1175 487 markom
        "to the byte elements of vector/floating-point register vfrB. The compare flag is "
1176
        "set if all elements of vfrA are greater than the elements of vfrB;"
1177 955 markom
        " otherwise the compare flag is cleared. "
1178 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1179 87 lampret
        "register vfrD.",
1180 155 simons
        "N/A",
1181
        "flag <- vfrA[7:0] > vfrB[7:0] &&\\"
1182
        "\tvfrA[15:8] > vfrB[15:8] &&\\"
1183
        "\tvfrA[23:16] > vfrB[23:16] &&\\"
1184
        "\tvfrA[31:24] > vfrB[31:24] &&\\"
1185
        "\tvfrA[39:32] > vfrB[39:32] &&\\"
1186
        "\tvfrA[47:40] > vfrB[47:40] &&\\"
1187
        "\tvfrA[55:48] > vfrB[55:48] &&\\"
1188
        "\tvfrA[63:56] > vfrB[63:56]\\"
1189 87 lampret
        "vfrD[63:0] <- repl(flag)",
1190
        "None", ORVDX64I,},
1191
 
1192
{"lv.all_gt.h", "Vector Half-Word Elements All Greater Than",
1193
        "All half-word elements of vector/floating-point register vfrA are compared "
1194 487 markom
        "to the half-word elements of vector/floating-point register vfrB. The compare flag is "
1195
        "set if all elements of vfrA are greater than the elements of vfrB;"
1196 955 markom
        " otherwise the compare flag is cleared. "
1197 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1198 87 lampret
        "register vfrD.",
1199 155 simons
        "N/A",
1200
        "flag <- vfrA[15:0] > vfrB[15:0] &&\\"
1201
        "\tvfrA[31:16] > vfrB[31:16] &&\\"
1202
        "\tvfrA[47:32] > vfrB[47:32] &&\\"
1203
        "\tvfrA[63:48] > vfrB[63:48]\\"
1204 87 lampret
        "vfrD[63:0] <- repl(flag)",
1205
        "None", ORVDX64I,},
1206
 
1207
{"lv.all_lt.b", "Vector Byte Elements All Less Than",
1208
        "All byte elements of vector/floating-point register vfrA are compared "
1209 487 markom
        "to the byte elements of vector/floating-point register vfrB. The compare flag is "
1210
        "set if all elements of vfrA are less than the elements of vfrB;"
1211 955 markom
        " otherwise the compare flag is cleared. "
1212 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1213 87 lampret
        "register vfrD.",
1214 155 simons
        "N/A",
1215
        "flag <- vfrA[7:0] < vfrB[7:0] &&\\"
1216
        "\tvfrA[15:8] < vfrB[15:8] &&\\"
1217
        "\tvfrA[23:16] < vfrB[23:16] &&\\"
1218
        "\tvfrA[31:24] < vfrB[31:24] &&\\"
1219
        "\tvfrA[39:32] < vfrB[39:32] &&\\"
1220
        "\tvfrA[47:40] < vfrB[47:40] &&\\"
1221
        "\tvfrA[55:48] < vfrB[55:48] &&\\"
1222
        "\tvfrA[63:56] < vfrB[63:56]\\"
1223 87 lampret
        "vfrD[63:0] <- repl(flag)",
1224
        "None", ORVDX64I,},
1225
 
1226
{"lv.all_lt.h", "Vector Half-Word Elements All Less Than",
1227
        "All half-word elements of vector/floating-point register vfrA are compared "
1228 487 markom
        "to the half-word elements of vector/floating-point register vfrB. The compare flag is "
1229
        "set if all elements of vfrA are less than the elements of vfrB;"
1230 955 markom
        " otherwise the compare flag is cleared. "
1231 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1232 87 lampret
        "register vfrD.",
1233 155 simons
        "N/A",
1234
        "flag <- vfrA[15:0] < vfrB[15:0] &&\\"
1235
        "\tvfrA[31:16] < vfrB[31:16] &&\\"
1236
        "\tvfrA[47:32] < vfrB[47:32] &&\\"
1237
        "\tvfrA[63:48] < vfrB[63:48]\\"
1238 87 lampret
        "vfrD[63:0] <- repl(flag)",
1239
        "None", ORVDX64I,},
1240
 
1241 487 markom
{"lv.all_le.b", "Vector Byte Elements All Less Than or Equal To",
1242 87 lampret
        "All byte elements of vector/floating-point register vfrA are compared "
1243 487 markom
        "to the byte elements of vector/floating-point register vfrB. The compare flag is "
1244
        "set if all elements of vfrA are less than or equal to the elements of vfrB;"
1245 955 markom
        " otherwise the compare flag is cleared. "
1246 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1247 87 lampret
        "register vfrD.",
1248 155 simons
        "N/A",
1249
        "flag <- vfrA[7:0] <= vfrB[7:0] &&\\"
1250
        "\tvfrA[15:8] <= vfrB[15:8] &&\\"
1251
        "\tvfrA[23:16] <= vfrB[23:16] &&\\"
1252
        "\tvfrA[31:24] <= vfrB[31:24] &&\\"
1253
        "\tvfrA[39:32] <= vfrB[39:32] &&\\"
1254
        "\tvfrA[47:40] <= vfrB[47:40] &&\\"
1255
        "\tvfrA[55:48] <= vfrB[55:48] &&\\"
1256
        "\tvfrA[63:56] <= vfrB[63:56]\\"
1257 87 lampret
        "vfrD[63:0] <- repl(flag)",
1258
        "None", ORVDX64I,},
1259
 
1260 487 markom
{"lv.all_le.h", "Vector Half-Word Elements All Less Than or Equal To",
1261 87 lampret
        "All half-word elements of vector/floating-point register vfrA are compared "
1262 487 markom
        "to the half-word elements of vector/floating-point register vfrB. The compare flag is "
1263
        "set if all elements of vfrA are less than or equal to the elements of vfrB;"
1264 955 markom
        " otherwise the compare flag is cleared. "
1265 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1266 87 lampret
        "register vfrD.",
1267 155 simons
        "N/A",
1268
        "flag <- vfrA[15:0] <= vfrB[15:0] &&\\"
1269
        "\tvfrA[31:16] <= vfrB[31:16] &&\\"
1270
        "\tvfrA[47:32] <= vfrB[47:32] &&\\"
1271 87 lampret
        "\tvfrA[63:48] <= vfrB[63:48]"
1272
        "vfrD[63:0] <- repl(flag)",
1273
        "None", ORVDX64I,},
1274
 
1275
{"lv.all_ne.b", "Vector Byte Elements All Not Equal",
1276
        "All byte elements of vector/floating-point register vfrA are compared "
1277 487 markom
        "to the byte elements of vector/floating-point register vfrB. The compare flag is "
1278
        "set if all corresponding elements are not equal; otherwise the compare flag is cleared. "
1279
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1280 87 lampret
        "register vfrD.",
1281 155 simons
        "N/A",
1282
        "flag <- vfrA[7:0] != vfrB[7:0] &&\\"
1283
        "\tvfrA[15:8] != vfrB[15:8] &&\\"
1284
        "\tvfrA[23:16] != vfrB[23:16] &&\\"
1285
        "\tvfrA[31:24] != vfrB[31:24] &&\\"
1286
        "\tvfrA[39:32] != vfrB[39:32] &&\\"
1287
        "\tvfrA[47:40] != vfrB[47:40] &&\\"
1288
        "\tvfrA[55:48] != vfrB[55:48] &&\\"
1289
        "\tvfrA[63:56] != vfrB[63:56]\\"
1290 87 lampret
        "vfrD[63:0] <- repl(flag)",
1291
        "None", ORVDX64I,},
1292
 
1293
{"lv.all_ne.h", "Vector Half-Word Elements All Not Equal",
1294
        "All half-word elements of vector/floating-point register vfrA are compared "
1295 487 markom
        "to the half-word elements of vector/floating-point register vfrB. The compare flag is "
1296
        "set if all corresponding elements are not equal; otherwise the compare flag is cleared. "
1297
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1298 87 lampret
        "register vfrD.",
1299 155 simons
        "N/A",
1300
        "flag <- vfrA[15:0] != vfrB[15:0] &&\\"
1301
        "\tvfrA[31:16] != vfrB[31:16] &&\\"
1302
        "\tvfrA[47:32] != vfrB[47:32] &&\\"
1303
        "\tvfrA[63:48] != vfrB[63:48]\\"
1304 87 lampret
        "vfrD[63:0] <- repl(flag)",
1305
        "None", ORVDX64I,},
1306
 
1307
{"lv.any_eq.b", "Vector Byte Elements Any Equal",
1308
        "All byte elements of vector/floating-point register vfrA are compared "
1309 487 markom
        "to the byte elements of vector/floating-point register vfrB. The compare flag is "
1310
        "set if any two corresponding elements are equal; otherwise the compare flag is cleared. "
1311
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1312 87 lampret
        "register vfrD.",
1313 155 simons
        "N/A",
1314 87 lampret
        "flag <- vfrA[7:0] == vfrB[7:0] ||\\"
1315
        "\tvfrA[15:8] == vfrB[15:8] ||\\"
1316
        "\tvfrA[23:16] == vfrB[23:16] ||\\"
1317
        "\tvfrA[31:24] == vfrB[31:24] ||\\"
1318
        "\tvfrA[39:32] == vfrB[39:32] ||\\"
1319
        "\tvfrA[47:40] == vfrB[47:40] ||\\"
1320
        "\tvfrA[55:48] == vfrB[55:48] ||\\"
1321 155 simons
        "\tvfrA[63:56] == vfrB[63:56]\\"
1322 87 lampret
        "vfrD[63:0] <- repl(flag)",
1323
        "None", ORVDX64I,},
1324
 
1325
{"lv.any_eq.h", "Vector Half-Word Elements Any Equal",
1326
        "All half-word elements of vector/floating-point register vfrA are compared "
1327 487 markom
        "to the half-word elements of vector/floating-point register vfrB. The compare flag is "
1328
        "set if any two corresponding elements are equal; otherwise the compare flag is cleared. "
1329
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1330 87 lampret
        "register vfrD.",
1331 155 simons
        "N/A",
1332 87 lampret
        "flag <- vfrA[15:0] == vfrB[15:0] ||\\"
1333
        "\tvfrA[31:16] == vfrB[31:16] ||\\"
1334
        "\tvfrA[47:32] == vfrB[47:32] ||\\"
1335 155 simons
        "\tvfrA[63:48] == vfrB[63:48]\\"
1336 87 lampret
        "vfrD[63:0] <- repl(flag)",
1337
        "None", ORVDX64I,},
1338
 
1339 487 markom
{"lv.any_ge.b", "Vector Byte Elements Any Greater Than or Equal To",
1340 87 lampret
        "All byte elements of vector/floating-point register vfrA are compared "
1341 487 markom
        "to the byte elements of vector/floating-point register vfrB. The compare flag is "
1342
        "set if any element of vfrA is greater than or equal to the corresponding element of vfrB;"
1343 955 markom
        " otherwise the compare flag is cleared. "
1344 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1345 87 lampret
        "register vfrD.",
1346 155 simons
        "N/A",
1347 87 lampret
        "flag <- vfrA[7:0] >= vfrB[7:0] ||\\"
1348
        "\tvfrA[15:8] >= vfrB[15:8] ||\\"
1349
        "\tvfrA[23:16] >= vfrB[23:16] ||\\"
1350
        "\tvfrA[31:24] >= vfrB[31:24] ||\\"
1351
        "\tvfrA[39:32] >= vfrB[39:32] ||\\"
1352
        "\tvfrA[47:40] >= vfrB[47:40] ||\\"
1353
        "\tvfrA[55:48] >= vfrB[55:48] ||\\"
1354 155 simons
        "\tvfrA[63:56] >= vfrB[63:56]\\"
1355 87 lampret
        "vfrD[63:0] <- repl(flag)",
1356
        "None", ORVDX64I,},
1357
 
1358 487 markom
{"lv.any_ge.h", "Vector Half-Word Elements Any Greater Than or Equal To",
1359 87 lampret
        "All half-word elements of vector/floating-point register vfrA are compared "
1360 487 markom
        "to the half-word elements of vector/floating-point register vfrB. The compare flag is "
1361
        "set if any element of vfrA is greater than or equal to the corresponding element of vfrB;"
1362 955 markom
        " otherwise the compare flag is cleared. "
1363 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1364 87 lampret
        "register vfrD.",
1365 155 simons
        "N/A",
1366 87 lampret
        "flag <- vfrA[15:0] >= vfrB[15:0] ||\\"
1367
        "\tvfrA[31:16] >= vfrB[31:16] ||\\"
1368
        "\tvfrA[47:32] >= vfrB[47:32] ||\\"
1369 155 simons
        "\tvfrA[63:48] >= vfrB[63:48]\\"
1370 87 lampret
        "vfrD[63:0] <- repl(flag)",
1371
        "None", ORVDX64I,},
1372
 
1373
{"lv.any_gt.b", "Vector Byte Elements Any Greater Than",
1374
        "All byte elements of vector/floating-point register vfrA are compared "
1375 487 markom
        "to the byte elements of vector/floating-point register vfrB. The compare flag is "
1376
        "set if any element of vfrA is greater than the corresponding element of vfrB;"
1377 955 markom
        " otherwise the compare flag is cleared. "
1378 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1379 87 lampret
        "register vfrD.",
1380 155 simons
        "N/A",
1381 87 lampret
        "flag <- vfrA[7:0] > vfrB[7:0] ||\\"
1382
        "\tvfrA[15:8] > vfrB[15:8] ||\\"
1383
        "\tvfrA[23:16] > vfrB[23:16] ||\\"
1384
        "\tvfrA[31:24] > vfrB[31:24] ||\\"
1385
        "\tvfrA[39:32] > vfrB[39:32] ||\\"
1386
        "\tvfrA[47:40] > vfrB[47:40] ||\\"
1387
        "\tvfrA[55:48] > vfrB[55:48] ||\\"
1388 155 simons
        "\tvfrA[63:56] > vfrB[63:56]\\"
1389 87 lampret
        "vfrD[63:0] <- repl(flag)",
1390
        "None", ORVDX64I,},
1391
 
1392
{"lv.any_gt.h", "Vector Half-Word Elements Any Greater Than",
1393
        "All half-word elements of vector/floating-point register vfrA are compared "
1394 487 markom
        "to the half-word elements of vector/floating-point register vfrB. The compare flag is "
1395
        "set if any element of vfrA is greater than the corresponding element of vfrB;"
1396 955 markom
        " otherwise the compare flag is cleared. "
1397 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1398 87 lampret
        "register vfrD.",
1399 155 simons
        "N/A",
1400 87 lampret
        "flag <- vfrA[15:0] > vfrB[15:0] ||\\"
1401
        "\tvfrA[31:16] > vfrB[31:16] ||\\"
1402
        "\tvfrA[47:32] > vfrB[47:32] ||\\"
1403 155 simons
        "\tvfrA[63:48] > vfrB[63:48]\\"
1404 87 lampret
        "vfrD[63:0] <- repl(flag)",
1405
        "None", ORVDX64I,},
1406
 
1407
{"lv.any_lt.b", "Vector Byte Elements Any Less Than",
1408
        "All byte elements of vector/floating-point register vfrA are compared "
1409 487 markom
        "to the byte elements of vector/floating-point register vfrB. The compare flag is "
1410
        "set if any element of vfrA is less than the corresponding element of vfrB;"
1411 955 markom
        " otherwise the compare flag is cleared. "
1412 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1413 87 lampret
        "register vfrD.",
1414 155 simons
        "N/A",
1415 87 lampret
        "flag <- vfrA[7:0] < vfrB[7:0] ||\\"
1416
        "\tvfrA[15:8] < vfrB[15:8] ||\\"
1417
        "\tvfrA[23:16] < vfrB[23:16] ||\\"
1418
        "\tvfrA[31:24] < vfrB[31:24] ||\\"
1419
        "\tvfrA[39:32] < vfrB[39:32] ||\\"
1420
        "\tvfrA[47:40] < vfrB[47:40] ||\\"
1421
        "\tvfrA[55:48] < vfrB[55:48] ||\\"
1422 155 simons
        "\tvfrA[63:56] < vfrB[63:56]\\"
1423 87 lampret
        "vfrD[63:0] <- repl(flag)",
1424
        "None", ORVDX64I,},
1425
 
1426
{"lv.any_lt.h", "Vector Half-Word Elements Any Less Than",
1427
        "All half-word elements of vector/floating-point register vfrA are compared "
1428 487 markom
        "to the half-word elements of vector/floating-point register vfrB. The compare flag is "
1429
        "set if any element of vfrA is less than the corresponding element of vfrB;"
1430 955 markom
        " otherwise the compare flag is cleared. "
1431 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1432 87 lampret
        "register vfrD.",
1433 155 simons
        "N/A",
1434 87 lampret
        "flag <- vfrA[15:0] < vfrB[15:0] ||\\"
1435
        "\tvfrA[31:16] < vfrB[31:16] ||\\"
1436
        "\tvfrA[47:32] < vfrB[47:32] ||\\"
1437 155 simons
        "\tvfrA[63:48] < vfrB[63:48]\\"
1438 87 lampret
        "vfrD[63:0] <- repl(flag)",
1439
        "None", ORVDX64I,},
1440
 
1441 487 markom
{"lv.any_le.b", "Vector Byte Elements Any Less Than or Equal To",
1442 87 lampret
        "All byte elements of vector/floating-point register vfrA are compared "
1443 487 markom
        "to the byte elements of vector/floating-point register vfrB. The compare flag is "
1444
        "set if any element of vfrA is less than or equal to the corresponding element of vfrB;"
1445 955 markom
        " otherwise the compare flag is cleared. "
1446 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1447 87 lampret
        "register vfrD.",
1448 155 simons
        "N/A",
1449 87 lampret
        "flag <- vfrA[7:0] <= vfrB[7:0] ||\\"
1450
        "\tvfrA[15:8] <= vfrB[15:8] ||\\"
1451
        "\tvfrA[23:16] <= vfrB[23:16] ||\\"
1452
        "\tvfrA[31:24] <= vfrB[31:24] ||\\"
1453
        "\tvfrA[39:32] <= vfrB[39:32] ||\\"
1454
        "\tvfrA[47:40] <= vfrB[47:40] ||\\"
1455
        "\tvfrA[55:48] <= vfrB[55:48] ||\\"
1456 155 simons
        "\tvfrA[63:56] <= vfrB[63:56]\\"
1457 87 lampret
        "vfrD[63:0] <- repl(flag)",
1458
        "None", ORVDX64I,},
1459
 
1460 487 markom
{"lv.any_le.h", "Vector Half-Word Elements Any Less Than or Equal To",
1461 87 lampret
        "All half-word elements of vector/floating-point register vfrA are compared "
1462 487 markom
        "to the half-word elements of vector/floating-point register vfrB. The compare flag is "
1463
        "set if any element of vfrA is less than or equal to the corresponding element of vfrB;"
1464 955 markom
        " otherwise the compare flag is cleared. "
1465 487 markom
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1466 87 lampret
        "register vfrD.",
1467 155 simons
        "N/A",
1468 87 lampret
        "flag <- vfrA[15:0] ,= vfrB[15:0] ||\\"
1469
        "\tvfrA[31:16] <= vfrB[31:16] ||\\"
1470
        "\tvfrA[47:32] <= vfrB[47:32] ||\\"
1471 155 simons
        "\tvfrA[63:48] <= vfrB[63:48]\\"
1472 87 lampret
        "vfrD[63:0] <- repl(flag)",
1473
        "None", ORVDX64I,},
1474
 
1475
{"lv.any_ne.b", "Vector Byte Elements Any Not Equal",
1476
        "All byte elements of vector/floating-point register vfrA are compared "
1477 487 markom
        "to the byte elements of vector/floating-point register vfrB. The compare flag is "
1478
        "set if any two corresponding elements are not equal; otherwise the compare flag is cleared. "
1479
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1480 87 lampret
        "register vfrD.",
1481 155 simons
        "N/A",
1482 87 lampret
        "flag <- vfrA[7:0] != vfrB[7:0] ||\\"
1483
        "\tvfrA[15:8] != vfrB[15:8] ||\\"
1484
        "\tvfrA[23:16] != vfrB[23:16] ||\\"
1485
        "\tvfrA[31:24] != vfrB[31:24] ||\\"
1486
        "\tvfrA[39:32] != vfrB[39:32] ||\\"
1487
        "\tvfrA[47:40] != vfrB[47:40] ||\\"
1488
        "\tvfrA[55:48] != vfrB[55:48] ||\\"
1489 155 simons
        "\tvfrA[63:56] != vfrB[63:56]\\"
1490 87 lampret
        "vfrD[63:0] <- repl(flag)",
1491
        "None", ORVDX64I,},
1492
 
1493
{"lv.any_ne.h", "Vector Half-Word Elements Any Not Equal",
1494
        "All half-word elements of vector/floating-point register vfrA are compared "
1495 487 markom
        "to the half-word elements of vector/floating-point register vfrB. The compare flag is "
1496
        "set if any two corresponding elements are not equal; otherwise the compare flag is cleared. "
1497
        "\\The compare flag is replicated into all bit positions of vector/floating-point "
1498 87 lampret
        "register vfrD.",
1499 155 simons
        "N/A",
1500 87 lampret
        "flag <- vfrA[15:0] != vfrB[15:0] ||\\"
1501
        "\tvfrA[31:16] != vfrB[31:16] ||\\"
1502
        "\tvfrA[47:32] != vfrB[47:32] ||\\"
1503 155 simons
        "\tvfrA[63:48] != vfrB[63:48]\\"
1504 87 lampret
        "vfrD[63:0] <- repl(flag)",
1505
        "None", ORVDX64I,},
1506
 
1507
{"lv.cmp_eq.b", "Vector Byte Elements Compare Equal",
1508
        "All byte elements of vector/floating-point register vfrA are compared "
1509 487 markom
        "to the byte elements of vector/floating-point register vfrB. Bits of the element "
1510
        "in vector/floating-point register vfrD are set if the two corresponding compared "
1511
        "elements are equal; otherwise the element bits are cleared. ",
1512 155 simons
        "N/A",
1513 87 lampret
        "vfrD[7:0] <- repl(vfrA[7:0] == vfrB[7:0]\\"
1514
        "vfrD[15:8] <- repl(vfrA[15:8] == vfrB[15:8]\\"
1515
        "vfrD[23:16] <- repl(vfrA[23:16] == vfrB[23:16]\\"
1516
        "vfrD[31:24] <- repl(vfrA[31:24] == vfrB[31:24]\\"
1517
        "vfrD[39:32] <- repl(vfrA[39:32] == vfrB[39:32]\\"
1518
        "vfrD[47:40] <- repl(vfrA[47:40] == vfrB[47:40]\\"
1519
        "vfrD[55:48] <- repl(vfrA[55:48] == vfrB[55:48]\\"
1520
        "vfrD[63:56] <- repl(vfrA[63:56] == vfrB[63:56]\\",
1521
        "None", ORVDX64I,},
1522
 
1523
{"lv.cmp_eq.h", "Vector Half-Word Elements Compare Equal",
1524
        "All half-word elements of vector/floating-point register vfrA are compared "
1525 487 markom
        "to the half-word elements of vector/floating-point register vfrB. Bits of the element "
1526
        "in vector/floating-point register vfrD are set if the two corresponding compared "
1527
        "elements are equal; otherwise the element bits are cleared. ",
1528 155 simons
        "N/A",
1529 87 lampret
        "vfrD[15:0] <- repl(vfrA[7:0] == vfrB[7:0]\\"
1530
        "vfrD[31:16] <- repl(vfrA[23:16] == vfrB[23:16]\\"
1531
        "vfrD[47:32] <- repl(vfrA[39:32] == vfrB[39:32]\\"
1532
        "vfrD[63:48] <- repl(vfrA[55:48] == vfrB[55:48]\\",
1533
        "None", ORVDX64I,},
1534
 
1535 487 markom
{"lv.cmp_ge.b", "Vector Byte Elements Compare Greater Than or Equal To",
1536 87 lampret
        "All byte elements of vector/floating-point register vfrA are compared "
1537 487 markom
        "to the byte elements of vector/floating-point register vfrB. Bits of the element "
1538
        "in vector/floating-point register vfrD are set if the element in vfrA is "
1539
        "greater than or equal to the element in vfrB; otherwise the element bits are cleared. ",
1540 155 simons
        "N/A",
1541 87 lampret
        "vfrD[7:0] <- repl(vfrA[7:0] >= vfrB[7:0]\\"
1542
        "vfrD[15:8] <- repl(vfrA[15:8] >= vfrB[15:8]\\"
1543
        "vfrD[23:16] <- repl(vfrA[23:16] >= vfrB[23:16]\\"
1544
        "vfrD[31:24] <- repl(vfrA[31:24] >= vfrB[31:24]\\"
1545
        "vfrD[39:32] <- repl(vfrA[39:32] >= vfrB[39:32]\\"
1546
        "vfrD[47:40] <- repl(vfrA[47:40] >= vfrB[47:40]\\"
1547
        "vfrD[55:48] <- repl(vfrA[55:48] >= vfrB[55:48]\\"
1548
        "vfrD[63:56] <- repl(vfrA[63:56] >= vfrB[63:56]\\",
1549
        "None", ORVDX64I,},
1550
 
1551 487 markom
{"lv.cmp_ge.h", "Vector Half-Word Elements Compare Greater Than or Equal To",
1552 87 lampret
        "All half-word elements of vector/floating-point register vfrA are compared "
1553 487 markom
        "to the half-word elements of vector/floating-point register vfrB. Bits of the element "
1554
        "in vector/floating-point register vfrD are set if the element in vfrA is "
1555
        "greater than or equal to the element in vfrB; otherwise the element bits are cleared. ",
1556 155 simons
        "N/A",
1557 87 lampret
        "vfrD[15:0] <- repl(vfrA[7:0] >= vfrB[7:0]\\"
1558
        "vfrD[31:16] <- repl(vfrA[23:16] >= vfrB[23:16]\\"
1559
        "vfrD[47:32] <- repl(vfrA[39:32] >= vfrB[39:32]\\"
1560
        "vfrD[63:48] <- repl(vfrA[55:48] >= vfrB[55:48]\\",
1561
        "None", ORVDX64I,},
1562
 
1563
{"lv.cmp_gt.b", "Vector Byte Elements Compare Greater Than",
1564
        "All byte elements of vector/floating-point register vfrA are compared "
1565 487 markom
        "to the byte elements of vector/floating-point register vfrB. Bits of the element "
1566
        "in vector/floating-point register vfrD are set if the element in vfrA is "
1567
        "greater than the element in vfrB; otherwise the element bits are cleared. ",
1568 155 simons
        "N/A",
1569 87 lampret
        "vfrD[7:0] <- repl(vfrA[7:0] > vfrB[7:0]\\"
1570
        "vfrD[15:8] <- repl(vfrA[15:8] > vfrB[15:8]\\"
1571
        "vfrD[23:16] <- repl(vfrA[23:16] > vfrB[23:16]\\"
1572
        "vfrD[31:24] <- repl(vfrA[31:24] > vfrB[31:24]\\"
1573
        "vfrD[39:32] <- repl(vfrA[39:32] > vfrB[39:32]\\"
1574
        "vfrD[47:40] <- repl(vfrA[47:40] > vfrB[47:40]\\"
1575
        "vfrD[55:48] <- repl(vfrA[55:48] > vfrB[55:48]\\"
1576
        "vfrD[63:56] <- repl(vfrA[63:56] > vfrB[63:56]\\",
1577
        "None", ORVDX64I,},
1578
 
1579
{"lv.cmp_gt.h", "Vector Half-Word Elements Compare Greater Than",
1580
        "All half-word elements of vector/floating-point register vfrA are compared "
1581 487 markom
        "to the half-word elements of vector/floating-point register vfrB. Bits of the element "
1582
        "in vector/floating-point register vfrD are set if the element in vfrA is "
1583
        "greater than the element in vfrB; otherwise the element bits are cleared. ",
1584 155 simons
        "N/A",
1585 87 lampret
        "vfrD[15:0] <- repl(vfrA[7:0] > vfrB[7:0]\\"
1586
        "vfrD[31:16] <- repl(vfrA[23:16] > vfrB[23:16]\\"
1587
        "vfrD[47:32] <- repl(vfrA[39:32] > vfrB[39:32]\\"
1588
        "vfrD[63:48] <- repl(vfrA[55:48] > vfrB[55:48]\\",
1589
        "None", ORVDX64I,},
1590
 
1591 487 markom
{"lv.cmp_le.b", "Vector Byte Elements Compare Less Than or Equal To",
1592 87 lampret
        "All byte elements of vector/floating-point register vfrA are compared "
1593 487 markom
        "to the byte elements of vector/floating-point register vfrB. Bits of the element "
1594
        "in vector/floating-point register vfrD are set if the element in vfrA is "
1595
        "less than or equal to the element in vfrB; otherwise the element bits are cleared. ",
1596 155 simons
        "N/A",
1597 87 lampret
        "vfrD[7:0] <- repl(vfrA[7:0] <= vfrB[7:0]\\"
1598
        "vfrD[15:8] <- repl(vfrA[15:8] <= vfrB[15:8]\\"
1599
        "vfrD[23:16] <- repl(vfrA[23:16] <= vfrB[23:16]\\"
1600
        "vfrD[31:24] <- repl(vfrA[31:24] <= vfrB[31:24]\\"
1601
        "vfrD[39:32] <- repl(vfrA[39:32] <= vfrB[39:32]\\"
1602
        "vfrD[47:40] <- repl(vfrA[47:40] <= vfrB[47:40]\\"
1603
        "vfrD[55:48] <- repl(vfrA[55:48] <= vfrB[55:48]\\"
1604
        "vfrD[63:56] <- repl(vfrA[63:56] <= vfrB[63:56]\\",
1605
        "None", ORVDX64I,},
1606
 
1607 487 markom
{"lv.cmp_le.h", "Vector Half-Word Elements Compare Less Than or Equal To",
1608 87 lampret
        "All half-word elements of vector/floating-point register vfrA are compared "
1609 487 markom
        "to the half-word elements of vector/floating-point register vfrB. Bits of the element "
1610
        "in vector/floating-point register vfrD are set if the element in vfrA is "
1611
        "less than or equal to the element in vfrB; otherwise the element bits are cleared. ",
1612 155 simons
        "N/A",
1613 87 lampret
        "vfrD[15:0] <- repl(vfrA[7:0] <= vfrB[7:0]\\"
1614
        "vfrD[31:16] <- repl(vfrA[23:16] <= vfrB[23:16]\\"
1615
        "vfrD[47:32] <- repl(vfrA[39:32] <= vfrB[39:32]\\"
1616
        "vfrD[63:48] <- repl(vfrA[55:48] <= vfrB[55:48]\\",
1617
        "None", ORVDX64I,},
1618
 
1619
{"lv.cmp_lt.b", "Vector Byte Elements Compare Less Than",
1620
        "All byte elements of vector/floating-point register vfrA are compared "
1621 487 markom
        "to the byte elements of vector/floating-point register vfrB. Bits of the element "
1622
        "in vector/floating-point register vfrD are set if the element in vfrA is "
1623
        "less than the element in vfrB; otherwise the element bits are cleared. ",
1624 155 simons
        "N/A",
1625 87 lampret
        "vfrD[7:0] <- repl(vfrA[7:0] <= vfrB[7:0]\\"
1626
        "vfrD[15:8] <- repl(vfrA[15:8] <= vfrB[15:8]\\"
1627
        "vfrD[23:16] <- repl(vfrA[23:16] <= vfrB[23:16]\\"
1628
        "vfrD[31:24] <- repl(vfrA[31:24] <= vfrB[31:24]\\"
1629
        "vfrD[39:32] <- repl(vfrA[39:32] <= vfrB[39:32]\\"
1630
        "vfrD[47:40] <- repl(vfrA[47:40] <= vfrB[47:40]\\"
1631
        "vfrD[55:48] <- repl(vfrA[55:48] <= vfrB[55:48]\\"
1632
        "vfrD[63:56] <- repl(vfrA[63:56] <= vfrB[63:56]\\",
1633
        "None", ORVDX64I,},
1634
 
1635
{"lv.cmp_lt.h", "Vector Half-Word Elements Compare Less Than",
1636
        "All half-word elements of vector/floating-point register vfrA are compared "
1637 487 markom
        "to the half-word elements of vector/floating-point register vfrB. Bits of the element "
1638
        "in vector/floating-point register vfrD are set if the element in vfrA is "
1639
        "less than the element in vfrB; otherwise the element bits are cleared. ",
1640 155 simons
        "N/A",
1641 87 lampret
        "vfrD[15:0] <- repl(vfrA[7:0] <= vfrB[7:0]\\"
1642
        "vfrD[31:16] <- repl(vfrA[23:16] <= vfrB[23:16]\\"
1643
        "vfrD[47:32] <- repl(vfrA[39:32] <= vfrB[39:32]\\"
1644
        "vfrD[63:48] <- repl(vfrA[55:48] <= vfrB[55:48]\\",
1645
        "None", ORVDX64I,},
1646
 
1647
{"lv.cmp_ne.b", "Vector Byte Elements Compare Not Equal",
1648
        "All byte elements of vector/floating-point register vfrA are compared "
1649 487 markom
        "to the byte elements of vector/floating-point register vfrB. Bits of the element "
1650
        "in vector/floating-point register vfrD are set if the two corresponding compared "
1651
        "elements are not equal; otherwise the element bits are cleared. ",
1652 155 simons
        "N/A",
1653 87 lampret
        "vfrD[7:0] <- repl(vfrA[7:0] != vfrB[7:0])\\"
1654
        "vfrD[15:8] <- repl(vfrA[15:8] != vfrB[15:8])\\"
1655
        "vfrD[23:16] <- repl(vfrA[23:16] != vfrB[23:16])\\"
1656
        "vfrD[31:24] <- repl(vfrA[31:24] != vfrB[31:24])\\"
1657
        "vfrD[39:32] <- repl(vfrA[39:32] != vfrB[39:32])\\"
1658
        "vfrD[47:40] <- repl(vfrA[47:40] != vfrB[47:40])\\"
1659
        "vfrD[55:48] <- repl(vfrA[55:48] != vfrB[55:48])\\"
1660
        "vfrD[63:56] <- repl(vfrA[63:56] != vfrB[63:56])\\",
1661
        "None", ORVDX64I,},
1662
 
1663
{"lv.cmp_ne.h", "Vector Half-Word Elements Compare Not Equal",
1664
        "All half-word elements of vector/floating-point register vfrA are compared "
1665 487 markom
        "to the half-word elements of vector/floating-point register vfrB. Bits of the element "
1666
        "in vector/floating-point register vfrD are set if the two corresponding compared "
1667
        "elements are not equal; otherwise the element bits are cleared. ",
1668 155 simons
        "N/A",
1669 87 lampret
        "vfrD[15:0] <- repl(vfrA[7:0] != vfrB[7:0])\\"
1670
        "vfrD[31:16] <- repl(vfrA[23:16] != vfrB[23:16])\\"
1671
        "vfrD[47:32] <- repl(vfrA[39:32] != vfrB[39:32])\\"
1672
        "vfrD[63:48] <- repl(vfrA[55:48] != vfrB[55:48])\\",
1673
        "None", ORVDX64I,},
1674
 
1675
{"lv.and", "Vector And",
1676
        "The contents of vector/floating-point register vfrA are combined with the contents "
1677
        "of vector/floating-point register vfrB in a bit-wise logical AND operation. The "
1678
        "result is placed into vector/floating-point register vfrD.",
1679 155 simons
        "N/A",
1680 87 lampret
        "vfrD[63:0] <- vfrA[63:0] AND vfrB[63:0]",
1681
        "None", ORVDX64I,},
1682
 
1683
{"lv.nand", "Vector Not And",
1684
        "The contents of vector/floating-point register vfrA are combined with the contents "
1685
        "of vector/floating-point register vfrB in a bit-wise logical NAND operation. The "
1686
        "result is placed into vector/floating-point register vfrD.",
1687 155 simons
        "N/A",
1688 87 lampret
        "vfrD[63:0] <- vfrA[63:0] NAND vfrB[63:0]",
1689
        "None", ORVDX64I,},
1690
 
1691
{"lv.nor", "Vector Not Or",
1692
        "The contents of vector/floating-point register vfrA are combined with the contents "
1693
        "of vector/floating-point register vfrB in a bit-wise logical NOR operation. The "
1694
        "result is placed into vector/floating-point register vfrD.",
1695 155 simons
        "N/A",
1696 87 lampret
        "vfrD[63:0] <- vfrA[63:0] NOR vfrB[63:0]",
1697
        "None", ORVDX64I,},
1698
 
1699
{"lv.or", "Vector Or",
1700
        "The contents of vector/floating-point register vfrA are combined with the contents "
1701
        "of vector/floating-point register vfrB in a bit-wise logical OR operation. The "
1702
        "result is placed into vector/floating-point register vfrD.",
1703 155 simons
        "N/A",
1704 87 lampret
        "vfrD[63:0] <- vfrA[63:0] OR vfrB[63:0]",
1705
        "None", ORVDX64I,},
1706
 
1707
{"lv.xor", "Vector Exclusive Or",
1708
        "The contents of vector/floating-point register vfrA are combined with the contents "
1709
        "of vector/floating-point register vfrB in a bit-wise logical XOR operation. The "
1710
        "result is placed into vector/floating-point register vfrD.",
1711 155 simons
        "N/A",
1712 87 lampret
        "vfrD[63:0] <- vfrA[63:0] XOR vfrB[63:0]",
1713
        "None", ORVDX64I,},
1714
 
1715
{"lv.add.b", "Vector Byte Elements Add Signed",
1716
        "The byte elements of vector/floating-point register vfrA are added to the byte elements "
1717 487 markom
        "of vector/floating-point register vfrB to form the result elements. The result "
1718 87 lampret
        "elements are placed into vector/floating-point register vfrD.",
1719 155 simons
        "N/A",
1720 87 lampret
        "vfrD[7:0] <- vfrA[7:0] + vfrB[7:0]\\"
1721
        "vfrD[15:8] <- vfrA[15:8] + vfrB[15:8]\\"
1722
        "vfrD[23:16] <- vfrA[23:16] + vfrB[23:16]\\"
1723
        "vfrD[31:24] <- vfrA[31:24] + vfrB[31:24]\\"
1724
        "vfrD[39:32] <- vfrA[39:32] + vfrB[39:32]\\"
1725
        "vfrD[47:40] <- vfrA[47:40] + vfrB[47:40]\\"
1726
        "vfrD[55:48] <- vfrA[55:48] + vfrB[55:48]\\"
1727
        "vfrD[63:56] <- vfrA[63:56] + vfrB[63:56]",
1728
        "None", ORVDX64I,},
1729
 
1730
{"lv.add.h", "Vector Half-Word Elements Add Signed",
1731
        "The half-word elements of vector/floating-point register vfrA are added to the "
1732
        "half-word elements of vector/floating-point register vfrB to form the result "
1733 487 markom
        "elements. The result elements are placed into vector/floating-point "
1734 87 lampret
        "register vfrD.",
1735 155 simons
        "N/A",
1736 87 lampret
        "vfrD[15:0] <- vfrA[15:0] + vfrB[15:0]\\"
1737
        "vfrD[31:16] <- vfrA[31:16] + vfrB[31:16]\\"
1738
        "vfrD[47:32] <- vfrA[47:32] + vfrB[47:32]\\"
1739
        "vfrD[63:48] <- vfrA[63:48] + vfrB[63:48]\\",
1740
        "None", ORVDX64I,},
1741
 
1742
{"lv.sub.b", "Vector Byte Elements Subtract Signed",
1743
        "The byte elements of vector/floating-point register vfrB are subtracted from the "
1744
        "byte elements of vector/floating-point register vfrA to form the result elements. "
1745 487 markom
        "The result elements are placed into vector/floating-point register vfrD.",
1746 155 simons
        "N/A",
1747 87 lampret
        "vfrD[7:0] <- vfrA[7:0] - vfrB[7:0]\\"
1748
        "vfrD[15:8] <- vfrA[15:8] - vfrB[15:8]\\"
1749
        "vfrD[23:16] <- vfrA[23:16] - vfrB[23:16]\\"
1750
        "vfrD[31:24] <- vfrA[31:24] - vfrB[31:24]\\"
1751
        "vfrD[39:32] <- vfrA[39:32] - vfrB[39:32]\\"
1752
        "vfrD[47:40] <- vfrA[47:40] - vfrB[47:40]\\"
1753
        "vfrD[55:48] <- vfrA[55:48] - vfrB[55:48]\\"
1754
        "vfrD[63:56] <- vfrA[63:56] - vfrB[63:56]",
1755
        "None", ORVDX64I,},
1756
 
1757
{"lv.sub.h", "Vector Half-Word Elements Subtract Signed",
1758
        "The half-word elements of vector/floating-point register vfrB are subtracted from the "
1759
        "half-word elements of vector/floating-point register vfrA to form the result "
1760 487 markom
        "elements. The result elements are placed into vector/floating-point "
1761 87 lampret
        "register vfrD.",
1762 155 simons
        "N/A",
1763 87 lampret
        "vfrD[15:0] <- vfrA[15:0] - vfrB[15:0]\\"
1764
        "vfrD[31:16] <- vfrA[31:16] - vfrB[31:16]\\"
1765
        "vfrD[47:32] <- vfrA[47:32] - vfrB[47:32]\\"
1766
        "vfrD[63:48] <- vfrA[63:48] - vfrB[63:48]\\",
1767
        "None", ORVDX64I,},
1768
 
1769
{"lv.adds.b", "Vector Byte Elements Add Signed Saturated",
1770
        "The byte elements of vector/floating-point register vfrA are added to the byte elements "
1771
        "of vector/floating-point register vfrB to form the result elements. If the result "
1772 487 markom
        "exceeds the min/max value for the destination data type, it is saturated to the min/max value "
1773
        "and placed into vector/floating-point register vfrD.",
1774 155 simons
        "N/A",
1775 87 lampret
        "vfrD[7:0] <- sat8s(vfrA[7:0] + vfrB[7:0])\\"
1776
        "vfrD[15:8] <- sat8s(vfrA[15:8] + vfrB[15:8])\\"
1777
        "vfrD[23:16] <- sat8s(vfrA[23:16] + vfrB[23:16])\\"
1778
        "vfrD[31:24] <- sat8s(vfrA[31:24] + vfrB[31:24])\\"
1779
        "vfrD[39:32] <- sat8s(vfrA[39:32] + vfrB[39:32])\\"
1780
        "vfrD[47:40] <- sat8s(vfrA[47:40] + vfrB[47:40])\\"
1781
        "vfrD[55:48] <- sat8s(vfrA[55:48] + vfrB[55:48])\\"
1782
        "vfrD[63:56] <- sat8s(vfrA[63:56] + vfrB[63:56])",
1783
        "None", ORVDX64I,},
1784
 
1785
{"lv.adds.h", "Vector Half-Word Elements Add Signed Saturated",
1786
        "The half-word elements of vector/floating-point register vfrA are added to the "
1787
        "half-word elements of vector/floating-point register vfrB to form the result "
1788 487 markom
        "elements. If the result exceeds the min/max value for the destination data type, "
1789
        "it is saturated to the min/max value and placed into vector/floating-point register vfrD.",
1790 155 simons
        "N/A",
1791 87 lampret
        "vfrD[15:0] <- sat16s(vfrA[15:0] + vfrB[15:0])\\"
1792
        "vfrD[31:16] <- sat16s(vfrA[31:16] + vfrB[31:16])\\"
1793
        "vfrD[47:32] <- sat16s(vfrA[47:32] + vfrB[47:32])\\"
1794
        "vfrD[63:48] <- sat16s(vfrA[63:48] + vfrB[63:48])",
1795
        "None", ORVDX64I,},
1796
 
1797
{"lv.subs.b", "Vector Byte Elements Subtract Signed Saturated",
1798
        "The byte elements of vector/floating-point register vfrB are subtracted from the byte elements "
1799
        "of vector/floating-point register vfrA to form the result elements. If the result "
1800 487 markom
        "exceeds the min/max value for the destination data type, it is saturated to the min/max value "
1801 87 lampret
        "and placed into vector/floating-point register vfrD.",
1802 155 simons
        "N/A",
1803 87 lampret
        "vfrD[7:0] <- sat8s(vfrA[7:0] + vfrB[7:0])\\"
1804
        "vfrD[15:8] <- sat8s(vfrA[15:8] + vfrB[15:8])\\"
1805
        "vfrD[23:16] <- sat8s(vfrA[23:16] + vfrB[23:16])\\"
1806
        "vfrD[31:24] <- sat8s(vfrA[31:24] + vfrB[31:24])\\"
1807
        "vfrD[39:32] <- sat8s(vfrA[39:32] + vfrB[39:32])\\"
1808
        "vfrD[47:40] <- sat8s(vfrA[47:40] + vfrB[47:40])\\"
1809
        "vfrD[55:48] <- sat8s(vfrA[55:48] + vfrB[55:48])\\"
1810
        "vfrD[63:56] <- sat8s(vfrA[63:56] + vfrB[63:56])",
1811
        "None", ORVDX64I,},
1812
 
1813
{"lv.subs.h", "Vector Half-Word Elements Subtract Signed Saturated",
1814
        "The half-word elements of vector/floating-point register vfrB are subtracted from the "
1815
        "half-word elements of vector/floating-point register vfrA to form the result "
1816 487 markom
        "elements. If the result exceeds the min/max value for the destination data type, "
1817
        "it is saturated to the min/max value and placed into vector/floating-point register vfrD.",
1818 155 simons
        "N/A",
1819 87 lampret
        "vfrD[15:0] <- sat16s(vfrA[15:0] - vfrB[15:0])\\"
1820
        "vfrD[31:16] <- sat16s(vfrA[31:16] - vfrB[31:16])\\"
1821
        "vfrD[47:32] <- sat16s(vfrA[47:32] - vfrB[47:32])\\"
1822
        "vfrD[63:48] <- sat16s(vfrA[63:48] - vfrB[63:48])",
1823
        "None", ORVDX64I,},
1824
 
1825
{"lv.addu.b", "Vector Byte Elements Add Unsigned",
1826
        "The unsigned byte elements of vector/floating-point register vfrA are added to "
1827
        "the unsigned byte elements of vector/floating-point register vfrB to form the "
1828 487 markom
        "result elements. The result elements are placed into vector/floating-point register vfrD.",
1829 155 simons
        "N/A",
1830 87 lampret
        "vfrD[7:0] <- vfrA[7:0] + vfrB[7:0]\\"
1831
        "vfrD[15:8] <- vfrA[15:8] + vfrB[15:8]\\"
1832
        "vfrD[23:16] <- vfrA[23:16] + vfrB[23:16]\\"
1833
        "vfrD[31:24] <- vfrA[31:24] + vfrB[31:24]\\"
1834
        "vfrD[39:32] <- vfrA[39:32] + vfrB[39:32]\\"
1835
        "vfrD[47:40] <- vfrA[47:40] + vfrB[47:40]\\"
1836
        "vfrD[55:48] <- vfrA[55:48] + vfrB[55:48]\\"
1837
        "vfrD[63:56] <- vfrA[63:56] + vfrB[63:56]",
1838
        "None", ORVDX64I,},
1839
 
1840
{"lv.addu.h", "Vector Half-Word Elements Add Unsigned",
1841
        "The unsigned half-word elements of vector/floating-point register vfrA are added to the "
1842
        "unsigned half-word elements of vector/floating-point register vfrB to form the result "
1843 487 markom
        "elements. The result elements are placed into vector/floating-point "
1844 87 lampret
        "register vfrD.",
1845 155 simons
        "N/A",
1846 87 lampret
        "vfrD[15:0] <- vfrA[15:0] + vfrB[15:0]\\"
1847
        "vfrD[31:16] <- vfrA[31:16] + vfrB[31:16]\\"
1848
        "vfrD[47:32] <- vfrA[47:32] + vfrB[47:32]\\"
1849
        "vfrD[63:48] <- vfrA[63:48] + vfrB[63:48]\\",
1850
        "None", ORVDX64I,},
1851
 
1852
{"lv.subu.b", "Vector Byte Elements Subtract Unsigned",
1853
        "The unsigned byte elements of vector/floating-point register vfrB are subtracted from the "
1854
        "unsigned byte elements of vector/floating-point register vfrA to form the result elements. "
1855 487 markom
        "The result elements are placed into vector/floating-point register vfrD.",
1856 155 simons
        "N/A",
1857 87 lampret
        "vfrD[7:0] <- vfrA[7:0] - vfrB[7:0]\\"
1858
        "vfrD[15:8] <- vfrA[15:8] - vfrB[15:8]\\"
1859
        "vfrD[23:16] <- vfrA[23:16] - vfrB[23:16]\\"
1860
        "vfrD[31:24] <- vfrA[31:24] - vfrB[31:24]\\"
1861
        "vfrD[39:32] <- vfrA[39:32] - vfrB[39:32]\\"
1862
        "vfrD[47:40] <- vfrA[47:40] - vfrB[47:40]\\"
1863
        "vfrD[55:48] <- vfrA[55:48] - vfrB[55:48]\\"
1864
        "vfrD[63:56] <- vfrA[63:56] - vfrB[63:56]",
1865
        "None", ORVDX64I,},
1866
 
1867
{"lv.subu.h", "Vector Half-Word Elements Subtract Unsigned",
1868
        "The unsigned half-word elements of vector/floating-point register vfrB are subtracted from the "
1869
        "unsigned half-word elements of vector/floating-point register vfrA to form the result "
1870 487 markom
        "elements. The result elements are placed into vector/floating-point "
1871 87 lampret
        "register vfrD.",
1872 155 simons
        "N/A",
1873 87 lampret
        "vfrD[15:0] <- vfrA[15:0] - vfrB[15:0]\\"
1874
        "vfrD[31:16] <- vfrA[31:16] - vfrB[31:16]\\"
1875
        "vfrD[47:32] <- vfrA[47:32] - vfrB[47:32]\\"
1876
        "vfrD[63:48] <- vfrA[63:48] - vfrB[63:48]\\",
1877
        "None", ORVDX64I,},
1878
 
1879
{"lv.addus.b", "Vector Byte Elements Add Unsigned Saturated",
1880
        "The unsigned byte elements of vector/floating-point register vfrA are added to the "
1881
        "unsigned byte elements of vector/floating-point register vfrB to form the result "
1882 487 markom
        "elements. If the result exceeds the min/max value for the destination data type, "
1883
        "it is saturated to the min/max value and placed into vector/floating-point register vfrD.",
1884 155 simons
        "N/A",
1885 87 lampret
        "vfrD[7:0] <- sat8u(vfrA[7:0] + vfrB[7:0])\\"
1886
        "vfrD[15:8] <- sat8u(vfrA[15:8] + vfrB[15:8])\\"
1887
        "vfrD[23:16] <- sat8u(vfrA[23:16] + vfrB[23:16])\\"
1888
        "vfrD[31:24] <- sat8u(vfrA[31:24] + vfrB[31:24])\\"
1889
        "vfrD[39:32] <- sat8u(vfrA[39:32] + vfrB[39:32])\\"
1890
        "vfrD[47:40] <- sat8u(vfrA[47:40] + vfrB[47:40])\\"
1891
        "vfrD[55:48] <- sat8u(vfrA[55:48] + vfrB[55:48])\\"
1892
        "vfrD[63:56] <- sat8u(vfrA[63:56] + vfrB[63:56])",
1893
        "None", ORVDX64I,},
1894
 
1895
{"lv.addus.h", "Vector Half-Word Elements Add Unsigned Saturated",
1896
        "The unsigned half-word elements of vector/floating-point register vfrA are added to the "
1897
        "unsigned half-word elements of vector/floating-point register vfrB to form the result "
1898 487 markom
        "elements. If the result exceeds the min/max value for the destination data type, "
1899
        "it is saturated to the min/max value and placed into vector/floating-point register vfrD.",
1900 155 simons
        "N/A",
1901 87 lampret
        "vfrD[15:0] <- sat16s(vfrA[15:0] + vfrB[15:0])\\"
1902
        "vfrD[31:16] <- sat16s(vfrA[31:16] + vfrB[31:16])\\"
1903
        "vfrD[47:32] <- sat16s(vfrA[47:32] + vfrB[47:32])\\"
1904
        "vfrD[63:48] <- sat16s(vfrA[63:48] + vfrB[63:48])",
1905
        "None", ORVDX64I,},
1906
 
1907
{"lv.subus.b", "Vector Byte Elements Subtract Unsigned Saturated",
1908
        "The unsigned byte elements of vector/floating-point register vfrB are subtracted from "
1909
        "the unsigned byte elements of vector/floating-point register vfrA to form the result "
1910 487 markom
        "elements. If the result exceeds the min/max value for the destination data type, it is "
1911
        "saturated to the min/max value and placed into vector/floating-point register vfrD.",
1912 155 simons
        "N/A",
1913 87 lampret
        "vfrD[7:0] <- sat8u(vfrA[7:0] + vfrB[7:0])\\"
1914
        "vfrD[15:8] <- sat8u(vfrA[15:8] + vfrB[15:8])\\"
1915
        "vfrD[23:16] <- sat8u(vfrA[23:16] + vfrB[23:16])\\"
1916
        "vfrD[31:24] <- sat8u(vfrA[31:24] + vfrB[31:24])\\"
1917
        "vfrD[39:32] <- sat8u(vfrA[39:32] + vfrB[39:32])\\"
1918
        "vfrD[47:40] <- sat8u(vfrA[47:40] + vfrB[47:40])\\"
1919
        "vfrD[55:48] <- sat8u(vfrA[55:48] + vfrB[55:48])\\"
1920
        "vfrD[63:56] <- sat8u(vfrA[63:56] + vfrB[63:56])",
1921
        "None", ORVDX64I,},
1922
 
1923
{"lv.subus.h", "Vector Half-Word Elements Subtract Unsigned Saturated",
1924
        "The unsigned half-word elements of vector/floating-point register vfrB are subtracted "
1925
        "from the unsigned half-word elements of vector/floating-point register vfrA to form "
1926 487 markom
        "the result elements. If the result exceeds the min/max value for the destination data type, "
1927
        "it is saturated to the min/max value and placed into vector/floating-point register vfrD.",
1928 155 simons
        "N/A",
1929 87 lampret
        "vfrD[15:0] <- sat16u(vfrA[15:0] - vfrB[15:0])\\"
1930
        "vfrD[31:16] <- sat16u(vfrA[31:16] - vfrB[31:16])\\"
1931
        "vfrD[47:32] <- sat16u(vfrA[47:32] - vfrB[47:32])\\"
1932
        "vfrD[63:48] <- sat16u(vfrA[63:48] - vfrB[63:48])",
1933
        "None", ORVDX64I,},
1934
 
1935
{"lv.avg.b", "Vector Byte Elements Average",
1936
        "The byte elements of vector/floating-point register vfrA are added to the byte elements "
1937 955 markom
        "of vector/floating-point register vfrB, and the sum is shifted right by one to form the "
1938 487 markom
        "result elements. The result elements are placed into vector/floating-point register vfrD.",
1939 155 simons
        "N/A",
1940 87 lampret
        "vfrD[7:0] <- (vfrA[7:0] + vfrB[7:0]) >> 1\\"
1941
        "vfrD[15:8] <- (vfrA[15:8] + vfrB[15:8]) >> 1\\"
1942
        "vfrD[23:16] <- (vfrA[23:16] + vfrB[23:16]) >> 1\\"
1943
        "vfrD[31:24] <- (vfrA[31:24] + vfrB[31:24]) >> 1\\"
1944
        "vfrD[39:32] <- (vfrA[39:32] + vfrB[39:32]) >> 1\\"
1945
        "vfrD[47:40] <- (vfrA[47:40] + vfrB[47:40]) >> 1\\"
1946
        "vfrD[55:48] <- (vfrA[55:48] + vfrB[55:48]) >> 1\\"
1947
        "vfrD[63:56] <- (vfrA[63:56] + vfrB[63:56]) >> 1",
1948
        "None", ORVDX64I,},
1949
 
1950
{"lv.avg.h", "Vector Half-Word Elements Average",
1951
        "The half-word elements of vector/floating-point register vfrA are added to the "
1952 955 markom
        "half-word elements of vector/floating-point register vfrB, and the sum is shifted "
1953 487 markom
        "right by one to form the result elements. The result elements are placed into "
1954 87 lampret
        "vector/floating-point register vfrD.",
1955 155 simons
        "N/A",
1956 87 lampret
        "vfrD[15:0] <- (vfrA[15:0] + vfrB[15:0]) >> 1\\"
1957
        "vfrD[31:16] <- (vfrA[31:16] + vfrB[31:16]) >> 1\\"
1958
        "vfrD[47:32] <- (vfrA[47:32] + vfrB[47:32]) >> 1\\"
1959
        "vfrD[63:48] <- (vfrA[63:48] + vfrB[63:48]) >> 1\\",
1960
        "None", ORVDX64I,},
1961
 
1962
{"lv.max.b", "Vector Byte Elements Maximum",
1963
        "The byte elements of vector/floating-point register vfrA are compared to the byte elements "
1964 955 markom
        "of vector/floating-point register vfrB, and the larger elements are selected to form the "
1965 487 markom
        "result elements. The result elements are placed into vector/floating-point register vfrD.",
1966 155 simons
        "N/A",
1967 87 lampret
        "vfrD[7:0] <- vfrA[7:0] > vfrB[7:0] ? vfrA[7:0] : vrfB[7:0]\\"
1968
        "vfrD[15:8] <- vfrA[15:8] > vfrB[15:8] ? vfrA[15:8] : vrfB[15:8]\\"
1969
        "vfrD[23:16] <- vfrA[23:16] > vfrB[23:16] ? vfrA[23:16] : vrfB[23:16]\\"
1970
        "vfrD[31:24] <- vfrA[31:24] > vfrB[31:24] ? vfrA[31:24] : vrfB[31:24]\\"
1971
        "vfrD[39:32] <- vfrA[39:32] > vfrB[39:32] ? vfrA[39:32] : vrfB[39:32]\\"
1972
        "vfrD[47:40] <- vfrA[47:40] > vfrB[47:40] ? vfrA[47:40] : vrfB[47:40]\\"
1973
        "vfrD[55:48] <- vfrA[55:48] > vfrB[55:48] ? vfrA[55:48] : vrfB[55:48]\\"
1974
        "vfrD[63:56] <- vfrA[63:56] > vfrB[63:56] ? vfrA[63:56] : vrfB[63:56]",
1975
        "None", ORVDX64I,},
1976
 
1977
{"lv.max.h", "Vector Half-Word Elements Maximum",
1978
        "The half-word elements of vector/floating-point register vfrA are compared to the "
1979 955 markom
        "half-word elements of vector/floating-point register vfrB, and the larger elements "
1980 487 markom
        "are selected to form the result elements. The result elements are placed into "
1981 87 lampret
        "vector/floating-point register vfrD.",
1982 155 simons
        "N/A",
1983 87 lampret
        "vfrD[15:0] <- vfrA[15:0] > vfrB[15:0] ? vfrA[15:0] : vrfB[15:0]\\"
1984
        "vfrD[31:16] <- vfrA[31:16] > vfrB[31:16] ? vfrA[31:16] : vrfB[31:16]\\"
1985
        "vfrD[47:32] <- vfrA[47:32] > vfrB[47:32] ? vfrA[47:32] : vrfB[47:32]\\"
1986
        "vfrD[63:48] <- vfrA[63:48] > vfrB[63:48] ? vfrA[63:48] : vrfB[63:48]\\",
1987
        "None", ORVDX64I,},
1988
 
1989
{"lv.min.b", "Vector Byte Elements Minimum",
1990
        "The byte elements of vector/floating-point register vfrA are compared to the byte elements "
1991 955 markom
        "of vector/floating-point register vfrB, and the smaller elements are selected to form the "
1992 487 markom
        "result elements. The result elements are placed into vector/floating-point register vfrD.",
1993 155 simons
        "N/A",
1994 87 lampret
        "vfrD[7:0] <- vfrA[7:0] < vfrB[7:0] ? vfrA[7:0] : vrfB[7:0]\\"
1995
        "vfrD[15:8] <- vfrA[15:8] < vfrB[15:8] ? vfrA[15:8] : vrfB[15:8]\\"
1996
        "vfrD[23:16] <- vfrA[23:16] < vfrB[23:16] ? vfrA[23:16] : vrfB[23:16]\\"
1997
        "vfrD[31:24] <- vfrA[31:24] < vfrB[31:24] ? vfrA[31:24] : vrfB[31:24]\\"
1998
        "vfrD[39:32] <- vfrA[39:32] < vfrB[39:32] ? vfrA[39:32] : vrfB[39:32]\\"
1999
        "vfrD[47:40] <- vfrA[47:40] < vfrB[47:40] ? vfrA[47:40] : vrfB[47:40]\\"
2000
        "vfrD[55:48] <- vfrA[55:48] < vfrB[55:48] ? vfrA[55:48] : vrfB[55:48]\\"
2001
        "vfrD[63:56] <- vfrA[63:56] < vfrB[63:56] ? vfrA[63:56] : vrfB[63:56]",
2002
        "None", ORVDX64I,},
2003
 
2004
{"lv.min.h", "Vector Half-Word Elements Minimum",
2005
        "The half-word elements of vector/floating-point register vfrA are compared to the "
2006 955 markom
        "half-word elements of vector/floating-point register vfrB, and the smaller elements "
2007 487 markom
        "are selected to form the result elements. The result elements are placed into "
2008 87 lampret
        "vector/floating-point register vfrD.",
2009 155 simons
        "N/A",
2010 87 lampret
        "vfrD[15:0] <- vfrA[15:0] < vfrB[15:0] ? vfrA[15:0] : vrfB[15:0]\\"
2011
        "vfrD[31:16] <- vfrA[31:16] < vfrB[31:16] ? vfrA[31:16] : vrfB[31:16]\\"
2012
        "vfrD[47:32] <- vfrA[47:32] < vfrB[47:32] ? vfrA[47:32] : vrfB[47:32]\\"
2013
        "vfrD[63:48] <- vfrA[63:48] < vfrB[63:48] ? vfrA[63:48] : vrfB[63:48]\\",
2014
        "None", ORVDX64I,},
2015
 
2016
{"lv.sll.b", "Vector Byte Elements Shift Left Logical",
2017
        "The contents of byte elements of vector/floating-point register vfrA are "
2018 955 markom
        "shifted left by the number of bits specified in the lower 3 bits in each byte element "
2019 487 markom
        "of vector/floating-point register vfrB, inserting zeros into the low-order bits. "
2020
        "The result elements are placed into vector/floating-point register vfrD.",
2021 155 simons
        "N/A",
2022 87 lampret
        "vfrD[7:0] <- vfrA[7:0] << vfrB[2:0]\\"
2023
        "vfrD[15:8] <- vfrA[15:8] << vfrB[10:8]\\"
2024
        "vfrD[23:16] <- vfrA[23:16] << vfrB[18:16]\\"
2025
        "vfrD[31:24] <- vfrA[31:24] << vfrB[26:24]\\"
2026
        "vfrD[39:32] <- vfrA[39:32] << vfrB[34:32]\\"
2027
        "vfrD[47:40] <- vfrA[47:40] << vfrB[42:40]\\"
2028
        "vfrD[55:48] <- vfrA[55:48] << vfrB[50:48]\\"
2029
        "vfrD[63:56] <- vfrA[63:56] << vfrB[58:56]",
2030
        "None", ORVDX64I,},
2031
 
2032
{"lv.sll.h", "Vector Half-Word Elements Shift Left Logical",
2033
        "The contents of half-word elements of vector/floating-point register vfrA are "
2034 955 markom
        "shifted left by the number of bits specified in the lower 4 bits in each half-word element "
2035 487 markom
        "of vector/floating-point register vfrB, inserting zeros into the low-order bits. "
2036
        "The result elements are placed into vector/floating-point register vfrD.",
2037 155 simons
        "N/A",
2038 87 lampret
        "vfrD[15:0] <- vfrA[15:0] << vfrB[3:0]\\"
2039
        "vfrD[31:16] <- vfrA[31:16] << vfrB[19:16]\\"
2040
        "vfrD[47:32] <- vfrA[47:32] << vfrB[35:32]\\"
2041
        "vfrD[63:48] <- vfrA[63:48] << vfrB[51:48]\\",
2042
        "None", ORVDX64I,},
2043
 
2044
{"lv.srl.b", "Vector Byte Elements Shift Right Logical",
2045
        "The contents of byte elements of vector/floating-point register vfrA are "
2046 955 markom
        "shifted right by the number of bits specified in the lower 3 bits in each byte element "
2047 487 markom
        "of vector/floating-point register vfrB, inserting zeros into the high-order bits. "
2048
        "The result elements are placed into vector/floating-point register vfrD.",
2049 155 simons
        "N/A",
2050 87 lampret
        "vfrD[7:0] <- vfrA[7:0] >> vfrB[2:0]\\"
2051
        "vfrD[15:8] <- vfrA[15:8] >> vfrB[10:8]\\"
2052
        "vfrD[23:16] <- vfrA[23:16] >> vfrB[18:16]\\"
2053
        "vfrD[31:24] <- vfrA[31:24] >> vfrB[26:24]\\"
2054
        "vfrD[39:32] <- vfrA[39:32] >> vfrB[34:32]\\"
2055
        "vfrD[47:40] <- vfrA[47:40] >> vfrB[42:40]\\"
2056
        "vfrD[55:48] <- vfrA[55:48] >> vfrB[50:48]\\"
2057
        "vfrD[63:56] <- vfrA[63:56] >> vfrB[58:56]",
2058
        "None", ORVDX64I,},
2059
 
2060
{"lv.srl.h", "Vector Half-Word Elements Shift Right Logical",
2061
        "The contents of half-word elements of vector/floating-point register vfrA are "
2062 955 markom
        "shifted right by the number of bits specified in the lower 4 bits in each half-word element "
2063 487 markom
        "of vector/floating-point register vfrB, inserting zeros into the high-order bits. "
2064
        "The result elements are placed into vector/floating-point register vfrD.",
2065 155 simons
        "N/A",
2066 87 lampret
        "vfrD[15:0] <- vfrA[15:0] >> vfrB[3:0]\\"
2067
        "vfrD[31:16] <- vfrA[31:16] >> vfrB[19:16]\\"
2068
        "vfrD[47:32] <- vfrA[47:32] >> vfrB[35:32]\\"
2069
        "vfrD[63:48] <- vfrA[63:48] >> vfrB[51:48]\\",
2070
        "None", ORVDX64I,},
2071
 
2072
{"lv.sra.b", "Vector Byte Elements Shift Right Arithmetic",
2073
        "The contents of byte elements of vector/floating-point register vfrA are "
2074 955 markom
        "shifted right by the number of bits specified in the lower 3 bits in each byte element "
2075 487 markom
        "of vector/floating-point register vfrB, inserting the most significant bit of each "
2076 87 lampret
        "element into the high-order bits. "
2077 487 markom
        "The result elements are placed into vector/floating-point register vfrD.",
2078 155 simons
        "N/A",
2079 87 lampret
        "vfrD[7:0] <- vfrA[7:0] sra vfrB[2:0]\\"
2080
        "vfrD[15:8] <- vfrA[15:8] sra vfrB[10:8]\\"
2081
        "vfrD[23:16] <- vfrA[23:16] sra vfrB[18:16]\\"
2082
        "vfrD[31:24] <- vfrA[31:24] sra vfrB[26:24]\\"
2083
        "vfrD[39:32] <- vfrA[39:32] sra vfrB[34:32]\\"
2084
        "vfrD[47:40] <- vfrA[47:40] sra vfrB[42:40]\\"
2085
        "vfrD[55:48] <- vfrA[55:48] sra vfrB[50:48]\\"
2086
        "vfrD[63:56] <- vfrA[63:56] sra vfrB[58:56]",
2087
        "None", ORVDX64I,},
2088
 
2089
{"lv.sra.h", "Vector Half-Word Elements Shift Right Arithmetic",
2090
        "The contents of half-word elements of vector/floating-point register vfrA are "
2091 955 markom
        "shifted right by the number of bits specified in the lower 4 bits in each half-word element "
2092 487 markom
        "of vector/floating-point register vfrB, inserting the most significant bit of each element "
2093
        "into the high-order bits. "
2094
        "The result elements are placed into vector/floating-point register vfrD.",
2095 155 simons
        "N/A",
2096 87 lampret
        "vfrD[15:0] <- vfrA[15:0] sra vfrB[3:0]\\"
2097
        "vfrD[31:16] <- vfrA[31:16] sra vfrB[19:16]\\"
2098
        "vfrD[47:32] <- vfrA[47:32] sra vfrB[35:32]\\"
2099
        "vfrD[63:48] <- vfrA[63:48] sra vfrB[51:48]\\",
2100
        "None", ORVDX64I,},
2101
 
2102
{"lv.rl.b", "Vector Byte Elements Rotate Left",
2103
        "The contents of byte elements of vector/floating-point register vfrA are "
2104 955 markom
        "rotated left by the number of bits specified in the lower 3 bits in each byte element "
2105 87 lampret
        "of vector/floating-point register vfrB. "
2106 487 markom
        "The result elements are placed into vector/floating-point register vfrD.",
2107 155 simons
        "N/A",
2108 87 lampret
        "vfrD[7:0] <- vfrA[7:0] rl vfrB[2:0]\\"
2109
        "vfrD[15:8] <- vfrA[15:8] rl vfrB[10:8]\\"
2110
        "vfrD[23:16] <- vfrA[23:16] rl vfrB[18:16]\\"
2111
        "vfrD[31:24] <- vfrA[31:24] rl vfrB[26:24]\\"
2112
        "vfrD[39:32] <- vfrA[39:32] rl vfrB[34:32]\\"
2113
        "vfrD[47:40] <- vfrA[47:40] rl vfrB[42:40]\\"
2114
        "vfrD[55:48] <- vfrA[55:48] rl vfrB[50:48]\\"
2115
        "vfrD[63:56] <- vfrA[63:56] rl vfrB[58:56]",
2116
        "None", ORVDX64I,},
2117
 
2118
{"lv.rl.h", "Vector Half-Word Elements Rotate Left",
2119
        "The contents of half-word elements of vector/floating-point register vfrA are "
2120 955 markom
        "rotated left by the number of bits specified in the lower 4 bits in each half-word element "
2121 87 lampret
        "of vector/floating-point register vfrB. "
2122 487 markom
        "The result elements are placed into vector/floating-point register vfrD.",
2123 155 simons
        "N/A",
2124 87 lampret
        "vfrD[15:0] <- vfrA[15:0] rl vfrB[3:0]\\"
2125
        "vfrD[31:16] <- vfrA[31:16] rl vfrB[19:16]\\"
2126
        "vfrD[47:32] <- vfrA[47:32] rl vfrB[35:32]\\"
2127
        "vfrD[63:48] <- vfrA[63:48] rl vfrB[51:48]\\",
2128
        "None", ORVDX64I,},
2129
 
2130
{"lv.sll", "Vector Shift Left Logical",
2131
        "The contents of vector/floating-point register vfrA are "
2132 955 markom
        "shifted left by the number of bits specified in the lower 4 bits in each byte element "
2133 87 lampret
        "of vector/floating-point register vfrB, inserting zeros into the low-order bits of "
2134
        "vfrD. "
2135 487 markom
        "The result elements are placed into vector/floating-point register vfrD.",
2136 155 simons
        "N/A",
2137 87 lampret
        "vfrD[63:0] <- vfrA[63:0] << vfrB[2:0]",
2138
        "None", ORVDX64I,},
2139
 
2140
{"lv.srl", "Vector Shift Right Logical",
2141
        "The contents of vector/floating-point register vfrA are "
2142 955 markom
        "shifted right by the number of bits specified in the lower 4 bits in each byte element "
2143 87 lampret
        "of vector/floating-point register vfrB, inserting zeros into the high-order bits of "
2144
        "vfrD. "
2145 487 markom
        "The result elements are placed into vector/floating-point register vfrD.",
2146 155 simons
        "N/A",
2147 87 lampret
        "vfrD[63:0] <- vfrA[63:0] >> vfrB[2:0]",
2148
        "None", ORVDX64I,},
2149
 
2150
{"lv.merge.b", "Vector Byte Elements Merge",
2151 487 markom
        "The byte elements of the lower half of the vector/floating-point register vfrA are "
2152 87 lampret
        "combined with the byte elements of the lower half of vector/floating-point "
2153 955 markom
        "register vfrB in such a way that the lowest element is from vfrB, the second element "
2154 487 markom
        "from vfrA, the third again from vfrB etc. "
2155
        "The result elements are placed into vector/floating-point register vfrD.",
2156 155 simons
        "N/A",
2157 87 lampret
        "vfrD[7:0] <- vfrB[7:0]\\"
2158
        "vfrD[15:8] <- vfrA[15:8]\\"
2159
        "vfrD[23:16] <- vfrB[23:16]\\"
2160
        "vfrD[31:24] <- vfrA[31:24]\\"
2161
        "vfrD[39:32] <- vfrB[39:32]\\"
2162
        "vfrD[47:40] <- vfrA[47:40]\\"
2163
        "vfrD[55:48] <- vfrB[55:48]\\"
2164
        "vfrD[63:56] <- vfrA[63:56]",
2165
        "None", ORVDX64I,},
2166
 
2167
{"lv.merge.h", "Vector Half-Word Elements Merge",
2168 487 markom
        "The half-word elements of the lower half of the vector/floating-point register vfrA are "
2169
        "combined with the half-word elements of the lower half of vector/floating-point "
2170 955 markom
        "register vfrB in such a way that the lowest element is from vfrB, the second element "
2171 487 markom
        "from vfrA, the third again from vfrB etc. "
2172
        "The result elements are placed into vector/floating-point register vfrD.",
2173 155 simons
        "N/A",
2174 87 lampret
        "vfrD[15:0] <- vfrB[15:0]\\"
2175
        "vfrD[31:16] <- vfrA[31:16]\\"
2176
        "vfrD[47:32] <- vfrB[47:32]\\"
2177
        "vfrD[63:48] <- vfrA[63:48]",
2178
        "None", ORVDX64I,},
2179
 
2180
{"lv.pack.b", "Vector Byte Elements Pack",
2181 487 markom
        "The lower half of the byte elements of the vector/floating-point register vfrA are "
2182 87 lampret
        "truncated and combined with the lower half of the byte truncated elements of the "
2183 955 markom
        "vector/floating-point register vfrB in such a way that the lowest elements are from "
2184
        "vfrB, and the highest elements from vfrA. "
2185 487 markom
        "The result elements are placed into vector/floating-point register vfrD.",
2186 155 simons
        "N/A",
2187 87 lampret
        "vfrD[3:0] <- vfrB[3:0]\\"
2188
        "vfrD[7:4] <- vfrB[11:8]\\"
2189
        "vfrD[11:8] <- vfrB[19:16]\\"
2190
        "vfrD[15:12] <- vfrB[27:24]\\"
2191
        "vfrD[19:16] <- vfrB[35:32]\\"
2192
        "vfrD[23:20] <- vfrB[43:40]\\"
2193
        "vfrD[27:24] <- vfrB[51:48]\\"
2194
        "vfrD[31:28] <- vfrB[59:56]\\"
2195
        "vfrD[35:32] <- vfrA[3:0]\\"
2196
        "vfrD[39:36] <- vfrA[11:8]\\"
2197
        "vfrD[43:40] <- vfrA[19:16]\\"
2198
        "vfrD[47:44] <- vfrA[27:24]\\"
2199
        "vfrD[51:48] <- vfrA[35:32]\\"
2200
        "vfrD[55:52] <- vfrA[43:40]\\"
2201
        "vfrD[59:56] <- vfrA[51:48]\\"
2202
        "vfrD[63:60] <- vfrA[59:56]",
2203
        "None", ORVDX64I,},
2204
 
2205
{"lv.pack.h", "Vector Half-word Elements Pack",
2206 487 markom
        "The lower half of the half-word elements of the vector/floating-point register vfrA are "
2207 87 lampret
        "truncated and combined with the lower half of the half-word truncated elements of the "
2208 955 markom
        "vector/floating-point register vfrB in such a way that the lowest elements are from vfrB, and the highest elements "
2209 87 lampret
        "from vfrA. "
2210 487 markom
        "The result elements are placed into vector/floating-point register vfrD.",
2211 155 simons
        "N/A",
2212 87 lampret
        "vfrD[7:0] <- vfrB[15:0]\\"
2213
        "vfrD[15:8] <- vfrB[31:16]\\"
2214
        "vfrD[23:16] <- vfrB[47:32]\\"
2215
        "vfrD[31:24] <- vfrB[63:48]\\"
2216
        "vfrD[39:32] <- vfrA[15:0]\\"
2217
        "vfrD[47:40] <- vfrA[31:16]\\"
2218
        "vfrD[55:48] <- vfrA[47:32]\\"
2219
        "vfrD[63:56] <- vfrA[63:48]\\",
2220
        "None", ORVDX64I,},
2221
 
2222
{"lv.packs.b", "Vector Byte Elements Pack Signed Saturated",
2223 487 markom
        "The lower half of the signed byte elements of the vector/floating-point register vfrA are "
2224 87 lampret
        "truncated and combined with the lower half of the signed byte truncated elements of "
2225 955 markom
        "the vector/floating-point register vfrB in such a way that the lowest elements are from "
2226
        "vfrB, and the highest elements from vfrA. "
2227 487 markom
        "If any truncated element exceeds a signed 4-bit value, it is saturated. "
2228
        "The result elements are placed into vector/floating-point register vfrD.",
2229 155 simons
        "N/A",
2230 87 lampret
        "vfrD[3:0] <- sat4s(vfrB[7:0]\\"
2231
        "vfrD[7:4] <- sat4s(vfrB[15:8]\\"
2232
        "vfrD[11:8] <- sat4s(vfrB[23:16]\\"
2233
        "vfrD[15:12] <- sat4s(vfrB[31:24]\\"
2234
        "vfrD[19:16] <- sat4s(vfrB[39:32]\\"
2235
        "vfrD[23:20] <- sat4s(vfrB[47:40]\\"
2236
        "vfrD[27:24] <- sat4s(vfrB[55:48]\\"
2237
        "vfrD[31:28] <- sat4s(vfrB[63:56]\\"
2238
        "vfrD[35:32] <- sat4s(vfrA[7:0]\\"
2239
        "vfrD[39:36] <- sat4s(vfrA[15:8]\\"
2240
        "vfrD[43:40] <- sat4s(vfrA[23:16]\\"
2241
        "vfrD[47:44] <- sat4s(vfrA[31:24]\\"
2242
        "vfrD[51:48] <- sat4s(vfrA[39:32]\\"
2243
        "vfrD[55:52] <- sat4s(vfrA[47:40]\\"
2244
        "vfrD[59:56] <- sat4s(vfrA[55:48]\\"
2245
        "vfrD[63:60] <- sat4s(vfrA[63:56]",
2246
        "None", ORVDX64I,},
2247
 
2248
{"lv.packs.h", "Vector Half-word Elements Pack Signed Saturated",
2249 487 markom
        "The lower half of the signed halfword elements of the vector/floating-point register "
2250 87 lampret
        "vfrA are truncated and combined with the lower half of the signed half-word "
2251
        "truncated elements of the vector/floating-point register vfrB in such a way "
2252 955 markom
        "that the lowest elements are from vfrB, and the highest elements from vfrA. "
2253 487 markom
        "If any truncated element exceeds a signed 8-bit value, it is saturated. "
2254
        "The result elements are placed into vector/floating-point register vfrD.",
2255 155 simons
        "N/A",
2256 87 lampret
        "vfrD[7:0] <- sat8s(vfrB[15:0])\\"
2257
        "vfrD[15:8] <- sat8s(vfrB[31:16])\\"
2258
        "vfrD[23:16] <- sat8s(vfrB[47:32])\\"
2259
        "vfrD[31:24] <- sat8s(vfrB[63:48])\\"
2260
        "vfrD[39:32] <- sat8s(vfrA[15:0])\\"
2261
        "vfrD[47:40] <- sat8s(vfrA[31:16])\\"
2262
        "vfrD[55:48] <- sat8s(vfrA[47:32])\\"
2263
        "vfrD[63:56] <- sat8s(vfrA[63:48])\\",
2264
        "None", ORVDX64I,},
2265
 
2266
{"lv.packus.b", "Vector Byte Elements Pack Unsigned Saturated",
2267 487 markom
        "The lower half of the unsigned byte elements of the vector/floating-point register vfrA are "
2268 87 lampret
        "truncated and combined with the lower half of the unsigned byte truncated elements of "
2269 955 markom
        "the vector/floating-point register vfrB in such a way that the lowest elements are from "
2270
        "vfrB, and the highest elements from vfrA. "
2271
        "If any truncated element exceeds an unsigned 4-bit value, it is saturated. "
2272 487 markom
        "The result elements are placed into vector/floating-point register vfrD.",
2273 155 simons
        "N/A",
2274 87 lampret
        "vfrD[3:0] <- sat4u(vfrB[7:0]\\"
2275
        "vfrD[7:4] <- sat4u(vfrB[15:8]\\"
2276
        "vfrD[11:8] <- sat4u(vfrB[23:16]\\"
2277
        "vfrD[15:12] <- sat4u(vfrB[31:24]\\"
2278
        "vfrD[19:16] <- sat4u(vfrB[39:32]\\"
2279
        "vfrD[23:20] <- sat4u(vfrB[47:40]\\"
2280
        "vfrD[27:24] <- sat4u(vfrB[55:48]\\"
2281
        "vfrD[31:28] <- sat4u(vfrB[63:56]\\"
2282
        "vfrD[35:32] <- sat4u(vfrA[7:0]\\"
2283
        "vfrD[39:36] <- sat4u(vfrA[15:8]\\"
2284
        "vfrD[43:40] <- sat4u(vfrA[23:16]\\"
2285
        "vfrD[47:44] <- sat4u(vfrA[31:24]\\"
2286
        "vfrD[51:48] <- sat4u(vfrA[39:32]\\"
2287
        "vfrD[55:52] <- sat4u(vfrA[47:40]\\"
2288
        "vfrD[59:56] <- sat4u(vfrA[55:48]\\"
2289
        "vfrD[63:60] <- sat4u(vfrA[63:56]",
2290
        "None", ORVDX64I,},
2291
 
2292
{"lv.packus.h", "Vector Half-word Elements Pack Unsigned Saturated",
2293 487 markom
        "The lower half of the unsigned halfword elements of the vector/floating-point register "
2294 87 lampret
        "vfrA are truncated and combined with the lower half of the unsigned half-word "
2295
        "truncated elements of the vector/floating-point register vfrB in such a way "
2296 955 markom
        "that the lowest elements are from vfrB, and the highest elements from vfrA. "
2297 487 markom
        "If any truncated element exceeds an unsigned 8-bit value, it is saturated. "
2298
        "The result elements are placed into vector/floating-point register vfrD.",
2299 155 simons
        "N/A",
2300 87 lampret
        "vfrD[7:0] <- sat8u(vfrB[15:0])\\"
2301
        "vfrD[15:8] <- sat8u(vfrB[31:16])\\"
2302
        "vfrD[23:16] <- sat8u(vfrB[47:32])\\"
2303
        "vfrD[31:24] <- sat8u(vfrB[63:48])\\"
2304
        "vfrD[39:32] <- sat8u(vfrA[15:0])\\"
2305
        "vfrD[47:40] <- sat8u(vfrA[31:16])\\"
2306
        "vfrD[55:48] <- sat8u(vfrA[47:32])\\"
2307
        "vfrD[63:56] <- sat8u(vfrA[63:48])\\",
2308
        "None", ORVDX64I,},
2309
 
2310
{"lv.unpack.b", "Vector Byte Elements Unpack",
2311 487 markom
        "The lower half of the 4-bit elements in vector/floating-point register "
2312 87 lampret
        "vfrA are sign-extended and placed into vector/floating-point register vfrD.",
2313 155 simons
        "N/A",
2314 87 lampret
        "vfrD[7:0] <- exts(vfrA[3:0])\\"
2315
        "vfrD[15:8] <- exts(vfrA[7:4])\\"
2316
        "vfrD[23:16] <- exts(vfrA[11:8])\\"
2317
        "vfrD[31:24] <- exts(vfrA[15:12])\\"
2318
        "vfrD[39:32] <- exts(vfrA[19:16])\\"
2319
        "vfrD[47:40] <- exts(vfrA[23:20])\\"
2320
        "vfrD[55:48] <- exts(vfrA[27:24])\\"
2321
        "vfrD[63:56] <- exts(vfrA[31:28])",
2322
        "None", ORVDX64I,},
2323
 
2324
{"lv.unpack.h", "Vector Half-Word Elements Unpack",
2325 487 markom
        "The lower half of the 8-bit elements in vector/floating-point register "
2326 87 lampret
        "vfrA are sign-extended and placed into vector/floating-point register vfrD.",
2327 155 simons
        "N/A",
2328 87 lampret
        "vfrD[15:0] <- exts(vfrA[7:0])\\"
2329
        "vfrD[31:16] <- exts(vfrA[15:8])\\"
2330
        "vfrD[47:32] <- exts(vfrA[23:16])\\"
2331
        "vfrD[63:48] <- exts(vfrA[31:24])\\",
2332
        "None", ORVDX64I,},
2333
 
2334
{"lv.perm.n", "Vector Nibble Elements Permute",
2335
        "The 4-bit elements of vector/floating-point register vfrA are "
2336 955 markom
        "permuted according to the corresponding 4-bit values in vector/floating-point "
2337 87 lampret
        "register vfrB. "
2338 487 markom
        "The result elements are placed into vector/floating-point register vfrD.",
2339 155 simons
        "N/A",
2340 87 lampret
        "vfrD[3:0] <- vfrA[vfrB[3:0]*4+3:vfrB[3:0]*4]\\"
2341
        "vfrD[7:4] <- vfrA[vfrB[7:4]*4+3:vfrB[7:4]*4]\\"
2342
        "vfrD[11:8] <- vfrA[vfrB[11:8]*4+3:vfrB[11:8]*4]\\"
2343
        "vfrD[15:12] <- vfrA[vfrB[15:12]*4+3:vfrB[15:12]*4]\\"
2344
        "vfrD[19:16] <- vfrA[vfrB[19:16]*4+3:vfrB[19:16]*4]\\"
2345
        "vfrD[23:20] <- vfrA[vfrB[23:20]*4+3:vfrB[23:20]*4]\\"
2346
        "vfrD[27:24] <- vfrA[vfrB[27:24]*4+3:vfrB[27:24]*4]\\"
2347
        "vfrD[31:28] <- vfrA[vfrB[31:28]*4+3:vfrB[31:28]*4]\\"
2348
        "vfrD[35:32] <- vfrA[vfrB[35:32]*4+3:vfrB[35:32]*4]\\"
2349
        "vfrD[39:36] <- vfrA[vfrB[39:36]*4+3:vfrB[39:36]*4]\\"
2350
        "vfrD[43:40] <- vfrA[vfrB[43:40]*4+3:vfrB[43:40]*4]\\"
2351
        "vfrD[47:44] <- vfrA[vfrB[47:44]*4+3:vfrB[47:44]*4]\\"
2352
        "vfrD[51:48] <- vfrA[vfrB[51:48]*4+3:vfrB[51:48]*4]\\"
2353
        "vfrD[55:52] <- vfrA[vfrB[55:52]*4+3:vfrB[55:52]*4]\\"
2354
        "vfrD[59:56] <- vfrA[vfrB[59:56]*4+3:vfrB[59:56]*4]\\"
2355
        "vfrD[63:60] <- vfrA[vfrB[63:60]*4+3:vfrB[63:60]*4]",
2356
        "None", ORVDX64I,},
2357
 
2358
{"lv.madds.h", "Vector Half-Word Elements Multiply Add Signed Saturated",
2359
        "The signed half-word elements of vector/floating-point register vfrA are multiplied "
2360
        "by the signed half-word elements of vector/floating-point register vfrB to form "
2361 487 markom
        "intermediate results. They are then added to the signed half-word VMAC elements to "
2362
        "form the final results that are placed again in the VMAC registers. "
2363
        "The intermediate result is placed into vector/floating-point register vfrD. "
2364
        "If any of the final results exceeds the min/max value, it is saturated.",
2365 155 simons
        "N/A",
2366 87 lampret
        "vfrD[15:0] <- sat32s(vfrA[15:0] * vfrB[15:0] + VMACLO[31:0])\\"
2367
        "vfrD[31:16] <- sat32s(vfrA[31:16] * vfrB[31:16] + VMACLO[63:32])\\"
2368
        "vfrD[47:32] <- sat32s(vfrA[47:32] * vfrB[47:32] + VMACHI[31:0])\\"
2369
        "vfrD[63:48] <- sat32s(vfrA[63:48] * vfrB[63:48] + VMACHI[63:32])\\",
2370
        "None", ORVDX64I,},
2371
 
2372
{"lv.msubs.h", "Vector Half-Word Elements Multiply Subtract Signed Saturated",
2373
        "The signed half-word elements of vector/floating-point register vfrA are multiplied "
2374
        "by the signed half-word elements of vector/floating-point register vfrB to form "
2375 487 markom
        "intermediate results. They are then subtracted from the signed half-word VMAC elements to "
2376
        "form the final results that are placed again in the VMAC registers. "
2377
        "The intermediate result is placed into vector/floating-point register vfrD. "
2378
        "If any of the final results exceeds the min/max value, it is saturated.",
2379 155 simons
        "N/A",
2380 87 lampret
        "vfrD[15:0] <- sat32s(VMACLO[31:0] - vfrA[15:0] * vfrB[15:0])\\"
2381
        "vfrD[31:16] <- sat32s(VMACLO[63:32] - vfrA[31:16] * vfrB[31:16])\\"
2382
        "vfrD[47:32] <- sat32s(VMACHI[31:0] - vfrA[47:32] * vfrB[47:32])\\"
2383
        "vfrD[63:48] <- sat32s(VMACHI[63:32] - vfrA[63:48] * vfrB[63:48])\\",
2384
        "None", ORVDX64I,},
2385
 
2386 95 lampret
{"lv.muls.h", "Vector Half-Word Elements Multiply Signed Saturated",
2387
        "The signed half-word elements of vector/floating-point register vfrA are multiplied "
2388
        "by the signed half-word elements of vector/floating-point register vfrB to form "
2389
        "the results. "
2390
        "The result is placed into vector/floating-point register vfrD. "
2391 487 markom
        "If any of the final results exceeds the min/max value, it is saturated.",
2392 155 simons
        "N/A",
2393 95 lampret
        "vfrD[15:0] <- sat32s(vfrA[15:0] * vfrB[15:0])\\"
2394
        "vfrD[31:16] <- sat32s(vfrA[31:16] * vfrB[31:16])\\"
2395
        "vfrD[47:32] <- sat32s(vfrA[47:32] * vfrB[47:32])\\"
2396
        "vfrD[63:48] <- sat32s(vfrA[63:48] * vfrB[63:48])\\",
2397
        "None", ORVDX64II,},
2398 87 lampret
 
2399 95 lampret
{"lv.cust1", "Reserved for Custom Vector Instructions",
2400
        "This fake instruction only allocates instruction set space for custom instructions. "
2401 955 markom
        "Custom instructions are those that are not defined by the architecture but instead "
2402 95 lampret
        "by the implementation itself.",
2403
        "N/A",
2404
        "N/A",
2405
        "N/A", ORVDX64II,},
2406 87 lampret
 
2407 95 lampret
{"lv.cust2", "Reserved for Custom Vector Instructions",
2408
        "This fake instruction only allocates instruction set space for custom instructions. "
2409 955 markom
        "Custom instructions are those that are not defined by the architecture but instead "
2410 95 lampret
        "by the implementation itself.",
2411
        "N/A",
2412
        "N/A",
2413
        "N/A", ORVDX64II,},
2414 87 lampret
 
2415 95 lampret
{"lv.cust3", "Reserved for Custom Vector Instructions",
2416
        "This fake instruction only allocates instruction set space for custom instructions. "
2417 955 markom
        "Custom instructions are those that are not defined by the architecture but instead "
2418 95 lampret
        "by the implementation itself.",
2419
        "N/A",
2420
        "N/A",
2421
        "N/A", ORVDX64II,},
2422
 
2423
{"lv.cust4", "Reserved for Custom Vector Instructions",
2424
        "This fake instruction only allocates instruction set space for custom instructions. "
2425 955 markom
        "Custom instructions are those that are not defined by the architecture but instead "
2426 95 lampret
        "by the implementation itself.",
2427
        "N/A",
2428
        "N/A",
2429
        "N/A", ORVDX64II,},
2430
 
2431
/**** L/S for ORFPX/ORVDX ***/
2432
 
2433
{"lvf.ld", "Load Vector/Floating-Point Double Word",
2434
        "The contents of vector/floating-point "
2435 955 markom
        "register vfrA are used as an effective address. The double word in memory "
2436 95 lampret
        "addressed by EA is loaded into vector/floating-point register vfrD. ",
2437
        "N/A",
2438 155 simons
        "EA <- vfrA[63:0]\\vfrD[63:0] <- (EA)[63:0]",
2439 1295 lampret
        "TLB miss\\Page fault\\Bus error\\Alignment", ORFPX64I,},
2440 95 lampret
 
2441
{"lvf.lw", "Load Vector/Floating-Point Single Word",
2442
        "The contents of vector/floating-point "
2443 955 markom
        "register vfrA are used as an effective address. The double word in memory "
2444 95 lampret
        "addressed by EA is loaded into vector/floating-point register vfrD. ",
2445 155 simons
        "EA <- vfrA[31:0]\\vfrD[31:0] <- (EA)[31:0]",
2446
        "EA <- vfrA[31:0]\\vfrD[31:0] <- (EA)[31:0]",
2447 1295 lampret
        "TLB miss\\Page fault\\Bus error\\Alignment", ORFPX32I,},
2448 95 lampret
 
2449
{"lvf.sd", "Store Vector/Floating-Point Double Word",
2450
        "The contents of vector/floating-point "
2451 955 markom
        "register vfrA are used as an effective address. The double word in vector/floating-point "
2452 487 markom
        "register vrfB is stored to the memory location addressed by EA. ",
2453 95 lampret
        "N/A",
2454 155 simons
        "EA <- vfrA[63:0]\\vfrD[63:0] <- (EA)[63:0]",
2455 1295 lampret
        "TLB miss\\Page fault\\Bus error\\Alignment", ORFPX64I,},
2456 95 lampret
 
2457
{"lvf.sw", "Store Vector/Floating-Point Single Word",
2458
        "The contents of vector/floating-point "
2459 955 markom
        "register vfrA are used as an effective address. The single word in vector/floating-point "
2460 487 markom
        "register vrfB is stored to the memory location addressed by EA. ",
2461 155 simons
        "EA <- vfrA[31:0]\\vfrD[31:0] <- (EA)[31:0]",
2462
        "EA <- vfrA[31:0]\\vfrD[31:0] <- (EA)[31:0]",
2463 1295 lampret
        "TLB miss\\Page fault\\Bus error\\Alignment", ORFPX32I,},
2464 95 lampret
 
2465 87 lampret
{"", "", "", "", "", "", 0}
2466
 
2467 14 lampret
};
2468
 
2469
struct or1k_isa_classes {
2470
        char *title;
2471
        char *desc;
2472
        char *table;
2473
} or1k_isa_classes[] = {
2474
 
2475 87 lampret
{ "", "x", "-&-\\", },
2476 1108 lampret
{ "", "x", "ORBIS32 I& \\", },
2477
{ "", "x", "ORBIS32 II& \\", },
2478
{ "", "x", "ORBIS64 I& \\", },
2479
{ "", "x", "ORBIS64 II& \\", },
2480
{ "", "x", "ORFPX32 I& \\", },
2481
{ "", "x", "ORFPX32 II& \\", },
2482
{ "", "x", "ORFPX64 I& \\", },
2483
{ "", "x", "ORFPX64 II& \\", },
2484
{ "", "x", "ORVDX64 I& \\", },
2485
{ "", "x", "ORVDX64 II& \\", },
2486 87 lampret
{ "", "x", "&\\", },
2487 14 lampret
 
2488
};
2489 87 lampret
 
2490
struct or1k_order {
2491
        char *title;
2492
        unsigned long classes;
2493
} or1k_order[] = {
2494
 
2495
{ "ORBIS32/64", (1<<ORBIS32I)>>1 | (1<<ORBIS32II)>>1 | (1<<ORBIS64I)>>1 | (1<<ORBIS64II)>>1, },
2496
{ "ORFPX32/64", (1<<ORFPX32I)>>1 | (1<<ORFPX32II)>>1 | (1<<ORFPX64I)>>1 | (1<<ORFPX64II)>>1, },
2497
{ "ORVDX64", (1<<ORVDX64I)>>1 | (1<<ORVDX64II)>>1, },
2498
{ "", 0, },
2499
 
2500
};
2501 487 markom
 
2502
 

powered by: WebSVN 2.1.0

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