summaryrefslogtreecommitdiff
path: root/opcodes
blob: 364d28912a7baa2cd67415a206262beee21b8570 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
# format of a line in this file:
# <instruction name> <opcode> <args>
#
# <opcode> is given by specifying one or more range/value pairs:
# highbit..lowbit=value (e.g. 6..2=0x45 9..7=0x0)
#
# <args> is one of xa,xb,xc,fa,fb,fc,fd,imm,imm20,imm27,shamt,shamtw

j       imm25 6..2=0x19 1..0=3
jal     imm25 6..2=0x1B 1..0=3

jalr.c  rd rs1      imm12    9..7=0 6..2=0x1A 1..0=3
jalr.r  rd rs1      imm12    9..7=1 6..2=0x1A 1..0=3
jalr.j  rd rs1      imm12    9..7=2 6..2=0x1A 1..0=3
rdnpc   rd 26..22=0 21..10=0 9..7=4 6..2=0x1A 1..0=3

beq     imm12hi rs1 rs2 imm12lo 9..7=0 6..2=0x18 1..0=3
bne     imm12hi rs1 rs2 imm12lo 9..7=1 6..2=0x18 1..0=3
blt     imm12hi rs1 rs2 imm12lo 9..7=4 6..2=0x18 1..0=3
bge     imm12hi rs1 rs2 imm12lo 9..7=5 6..2=0x18 1..0=3
bltu    imm12hi rs1 rs2 imm12lo 9..7=6 6..2=0x18 1..0=3
bgeu    imm12hi rs1 rs2 imm12lo 9..7=7 6..2=0x18 1..0=3

lui     rd imm20 6..2=0x0D 1..0=3

addi    rd rs1 imm12               9..7=0 6..2=0x04 1..0=3
slli    rd rs1 21..17=0 16=0 shamt 9..7=1 6..2=0x04 1..0=3
slti    rd rs1 imm12               9..7=2 6..2=0x04 1..0=3
sltiu   rd rs1 imm12               9..7=3 6..2=0x04 1..0=3
xori    rd rs1 imm12               9..7=4 6..2=0x04 1..0=3
srli    rd rs1 21..17=0 16=0 shamt 9..7=5 6..2=0x04 1..0=3
srai    rd rs1 21..17=0 16=1 shamt 9..7=5 6..2=0x04 1..0=3
ori     rd rs1 imm12               9..7=6 6..2=0x04 1..0=3
andi    rd rs1 imm12               9..7=7 6..2=0x04 1..0=3

add     rd rs1 rs2 16=0 15..10=0 9..7=0 6..2=0x0C 1..0=3
sub     rd rs1 rs2 16=1 15..10=0 9..7=0 6..2=0x0C 1..0=3
sll     rd rs1 rs2 16=0 15..10=0 9..7=1 6..2=0x0C 1..0=3
slt     rd rs1 rs2 16=0 15..10=0 9..7=2 6..2=0x0C 1..0=3
sltu    rd rs1 rs2 16=0 15..10=0 9..7=3 6..2=0x0C 1..0=3
xor     rd rs1 rs2 16=0 15..10=0 9..7=4 6..2=0x0C 1..0=3
srl     rd rs1 rs2 16=0 15..10=0 9..7=5 6..2=0x0C 1..0=3
sra     rd rs1 rs2 16=1 15..10=0 9..7=5 6..2=0x0C 1..0=3
or      rd rs1 rs2 16=0 15..10=0 9..7=6 6..2=0x0C 1..0=3
and     rd rs1 rs2 16=0 15..10=0 9..7=7 6..2=0x0C 1..0=3

mul     rd rs1 rs2 16=0 15..10=1 9..7=0 6..2=0x0C 1..0=3
mulh    rd rs1 rs2 16=0 15..10=1 9..7=1 6..2=0x0C 1..0=3
mulhsu  rd rs1 rs2 16=0 15..10=1 9..7=2 6..2=0x0C 1..0=3
mulhu   rd rs1 rs2 16=0 15..10=1 9..7=3 6..2=0x0C 1..0=3
div     rd rs1 rs2 16=0 15..10=1 9..7=4 6..2=0x0C 1..0=3
divu    rd rs1 rs2 16=0 15..10=1 9..7=5 6..2=0x0C 1..0=3
rem     rd rs1 rs2 16=0 15..10=1 9..7=6 6..2=0x0C 1..0=3
remu    rd rs1 rs2 16=0 15..10=1 9..7=7 6..2=0x0C 1..0=3

addiw   rd rs1 imm12                     9..7=0 6..2=0x06 1..0=3
slliw   rd rs1 21..17=0 16=0 15=0 shamtw 9..7=1 6..2=0x06 1..0=3
srliw   rd rs1 21..17=0 16=0 15=0 shamtw 9..7=5 6..2=0x06 1..0=3
sraiw   rd rs1 21..17=0 16=1 15=0 shamtw 9..7=5 6..2=0x06 1..0=3

addw    rd rs1 rs2 16=0 15..10=0 9..7=0 6..2=0x0E 1..0=3
subw    rd rs1 rs2 16=1 15..10=0 9..7=0 6..2=0x0E 1..0=3
sllw    rd rs1 rs2 16=0 15..10=0 9..7=1 6..2=0x0E 1..0=3
srlw    rd rs1 rs2 16=0 15..10=0 9..7=5 6..2=0x0E 1..0=3
sraw    rd rs1 rs2 16=1 15..10=0 9..7=5 6..2=0x0E 1..0=3

mulw    rd rs1 rs2 16=0 15..10=1 9..7=0 6..2=0x0E 1..0=3
divw    rd rs1 rs2 16=0 15..10=1 9..7=4 6..2=0x0E 1..0=3
divuw   rd rs1 rs2 16=0 15..10=1 9..7=5 6..2=0x0E 1..0=3
remw    rd rs1 rs2 16=0 15..10=1 9..7=6 6..2=0x0E 1..0=3
remuw   rd rs1 rs2 16=0 15..10=1 9..7=7 6..2=0x0E 1..0=3

lb      rd rs1       imm12 9..7=0 6..2=0x00 1..0=3
lh      rd rs1       imm12 9..7=1 6..2=0x00 1..0=3
lw      rd rs1       imm12 9..7=2 6..2=0x00 1..0=3
ld      rd rs1       imm12 9..7=3 6..2=0x00 1..0=3
lbu     rd rs1       imm12 9..7=4 6..2=0x00 1..0=3
lhu     rd rs1       imm12 9..7=5 6..2=0x00 1..0=3
lwu     rd rs1       imm12 9..7=6 6..2=0x00 1..0=3

# NOTE: if you add new store instructions, make sure to modify tc-mips-riscv.c
# and elfxx-mips.c to detect them.  this is a hack to handle the split immed.
# just open up those files and search for MATCH_SW; should be obvious.
sb     imm12hi rs1 rs2 imm12lo 9..7=0 6..2=0x08 1..0=3
sh     imm12hi rs1 rs2 imm12lo 9..7=1 6..2=0x08 1..0=3
sw     imm12hi rs1 rs2 imm12lo 9..7=2 6..2=0x08 1..0=3
sd     imm12hi rs1 rs2 imm12lo 9..7=3 6..2=0x08 1..0=3

amoadd.w    rd rs1 rs2 16..10=0 9..7=2 6..2=0x0A 1..0=3
amoswap.w   rd rs1 rs2 16..10=1 9..7=2 6..2=0x0A 1..0=3
amoand.w    rd rs1 rs2 16..10=2 9..7=2 6..2=0x0A 1..0=3
amoor.w     rd rs1 rs2 16..10=3 9..7=2 6..2=0x0A 1..0=3
amomin.w    rd rs1 rs2 16..10=4 9..7=2 6..2=0x0A 1..0=3
amomax.w    rd rs1 rs2 16..10=5 9..7=2 6..2=0x0A 1..0=3
amominu.w   rd rs1 rs2 16..10=6 9..7=2 6..2=0x0A 1..0=3
amomaxu.w   rd rs1 rs2 16..10=7 9..7=2 6..2=0x0A 1..0=3
                                        
amoadd.d     rd rs1 rs2 16..10=0 9..7=3 6..2=0x0A 1..0=3
amoswap.d    rd rs1 rs2 16..10=1 9..7=3 6..2=0x0A 1..0=3
amoand.d     rd rs1 rs2 16..10=2 9..7=3 6..2=0x0A 1..0=3
amoor.d      rd rs1 rs2 16..10=3 9..7=3 6..2=0x0A 1..0=3
amomin.d     rd rs1 rs2 16..10=4 9..7=3 6..2=0x0A 1..0=3
amomax.d     rd rs1 rs2 16..10=5 9..7=3 6..2=0x0A 1..0=3
amominu.d    rd rs1 rs2 16..10=6 9..7=3 6..2=0x0A 1..0=3
amomaxu.d    rd rs1 rs2 16..10=7 9..7=3 6..2=0x0A 1..0=3

fence.i     rd rs1 imm12 9..7=1 6..2=0x0B 1..0=3
fence       rd rs1 imm12 9..7=2 6..2=0x0B 1..0=3

syscall 31..27=0 26..22=0 21..17=0 16..7=0 6..2=0x1D 1..0=3
break   31..27=0 26..22=0 21..17=0 16..7=1 6..2=0x1D 1..0=3

# vector fence instructions
fence.l.v   rd rs1 imm12 9..7=4 6..2=0x0B 1..0=3
fence.g.v   rd rs1 imm12 9..7=5 6..2=0x0B 1..0=3
fence.l.cv  rd rs1 imm12 9..7=6 6..2=0x0B 1..0=3
fence.g.cv  rd rs1 imm12 9..7=7 6..2=0x0B 1..0=3

# vector scalar instructions
stop    31..27=0 26..22=0 21..17=0 16..7=2 6..2=0x1D 1..0=3
utidx   rd       26..22=0 21..17=0 16..7=3 6..2=0x1D 1..0=3

ei      rd       26..22=0 21..17=0 16..7=0 6..2=0x1E 1..0=3
di      rd       26..22=0 21..17=0 16..7=1 6..2=0x1E 1..0=3
mfpcr   rd       26..22=0 rs2      16..7=2 6..2=0x1E 1..0=3
mtpcr   31..27=0 rs1      rs2      16..7=3 6..2=0x1E 1..0=3
eret    31..27=0 26..22=0 21..17=0 16..7=4 6..2=0x1E 1..0=3
cflush  31..27=0 26..22=0 21..17=0 16..7=5 6..2=0x1E 1..0=3

# 0x7C-0x7F are reserved for >32b instructions

fadd.s      rd rs1 rs2      16..12=0    rm      8..7=0 6..2=0x14 1..0=3
fsub.s      rd rs1 rs2      16..12=1    rm      8..7=0 6..2=0x14 1..0=3
fmul.s      rd rs1 rs2      16..12=2    rm      8..7=0 6..2=0x14 1..0=3
fdiv.s      rd rs1 rs2      16..12=3    rm      8..7=0 6..2=0x14 1..0=3
fsqrt.s     rd rs1 21..17=0 16..12=4    rm      8..7=0 6..2=0x14 1..0=3
fsgnj.s     rd rs1 rs2      16..12=5    11..9=0 8..7=0 6..2=0x14 1..0=3
fsgnjn.s    rd rs1 rs2      16..12=6    11..9=0 8..7=0 6..2=0x14 1..0=3
fsgnjx.s    rd rs1 rs2      16..12=7    11..9=0 8..7=0 6..2=0x14 1..0=3

fadd.d      rd rs1 rs2      16..12=0x0  rm      8..7=1 6..2=0x14 1..0=3
fsub.d      rd rs1 rs2      16..12=0x1  rm      8..7=1 6..2=0x14 1..0=3
fmul.d      rd rs1 rs2      16..12=0x2  rm      8..7=1 6..2=0x14 1..0=3
fdiv.d      rd rs1 rs2      16..12=0x3  rm      8..7=1 6..2=0x14 1..0=3
fsqrt.d     rd rs1 21..17=0 16..12=0x4  rm      8..7=1 6..2=0x14 1..0=3
fsgnj.d     rd rs1 rs2      16..12=0x5  11..9=0 8..7=1 6..2=0x14 1..0=3
fsgnjn.d    rd rs1 rs2      16..12=0x6  11..9=0 8..7=1 6..2=0x14 1..0=3
fsgnjx.d    rd rs1 rs2      16..12=0x7  11..9=0 8..7=1 6..2=0x14 1..0=3

fcvt.l.s    rd rs1 21..17=0 16..12=0x8  rm      8..7=0 6..2=0x14 1..0=3
fcvt.lu.s   rd rs1 21..17=0 16..12=0x9  rm      8..7=0 6..2=0x14 1..0=3
fcvt.w.s    rd rs1 21..17=0 16..12=0xA  rm      8..7=0 6..2=0x14 1..0=3
fcvt.wu.s   rd rs1 21..17=0 16..12=0xB  rm      8..7=0 6..2=0x14 1..0=3

fcvt.l.d    rd rs1 21..17=0 16..12=0x8  rm      8..7=1 6..2=0x14 1..0=3
fcvt.lu.d   rd rs1 21..17=0 16..12=0x9  rm      8..7=1 6..2=0x14 1..0=3
fcvt.w.d    rd rs1 21..17=0 16..12=0xA  rm      8..7=1 6..2=0x14 1..0=3
fcvt.wu.d   rd rs1 21..17=0 16..12=0xB  rm      8..7=1 6..2=0x14 1..0=3

fcvt.s.l    rd rs1 21..17=0 16..12=0xC  rm      8..7=0 6..2=0x14 1..0=3
fcvt.s.lu   rd rs1 21..17=0 16..12=0xD  rm      8..7=0 6..2=0x14 1..0=3
fcvt.s.w    rd rs1 21..17=0 16..12=0xE  rm      8..7=0 6..2=0x14 1..0=3
fcvt.s.wu   rd rs1 21..17=0 16..12=0xF  rm      8..7=0 6..2=0x14 1..0=3

fcvt.d.l    rd rs1 21..17=0 16..12=0xC  rm      8..7=1 6..2=0x14 1..0=3
fcvt.d.lu   rd rs1 21..17=0 16..12=0xD  rm      8..7=1 6..2=0x14 1..0=3
fcvt.d.w    rd rs1 21..17=0 16..12=0xE  11..9=0 8..7=1 6..2=0x14 1..0=3
fcvt.d.wu   rd rs1 21..17=0 16..12=0xF  11..9=0 8..7=1 6..2=0x14 1..0=3

fcvt.s.d    rd rs1 21..17=0 16..14=0x4 13..12=1 rm 8..7=0 6..2=0x14 1..0=3
fcvt.d.s    rd rs1 21..17=0 16..14=0x4 13..12=0 11..9=0 8..7=1 6..2=0x14 1..0=3

feq.s     rd rs1 rs2      16..12=0x15 11..9=0 8..7=0 6..2=0x14 1..0=3
flt.s     rd rs1 rs2      16..12=0x16 11..9=0 8..7=0 6..2=0x14 1..0=3
fle.s     rd rs1 rs2      16..12=0x17 11..9=0 8..7=0 6..2=0x14 1..0=3

feq.d     rd rs1 rs2      16..12=0x15 11..9=0 8..7=1 6..2=0x14 1..0=3
flt.d     rd rs1 rs2      16..12=0x16 11..9=0 8..7=1 6..2=0x14 1..0=3
fle.d     rd rs1 rs2      16..12=0x17 11..9=0 8..7=1 6..2=0x14 1..0=3

fmin.s    rd rs1 rs2      16..12=0x18 11..9=0 8..7=0 6..2=0x14 1..0=3
fmax.s    rd rs1 rs2      16..12=0x19 11..9=0 8..7=0 6..2=0x14 1..0=3

fmin.d    rd rs1 rs2      16..12=0x18 11..9=0 8..7=1 6..2=0x14 1..0=3
fmax.d    rd rs1 rs2      16..12=0x19 11..9=0 8..7=1 6..2=0x14 1..0=3

mftx.s      rd 26..22=0  rs2      16..12=0x1C 11..9=0 8..7=0 6..2=0x14 1..0=3
mftx.d      rd 26..22=0  rs2      16..12=0x1C 11..9=0 8..7=1 6..2=0x14 1..0=3
mffsr       rd 26..22=0  21..17=0 16..12=0x1D 11..9=0 8..7=0 6..2=0x14 1..0=3
mxtf.s      rd       rs1 21..17=0 16..12=0x1E 11..9=0 8..7=0 6..2=0x14 1..0=3
mxtf.d      rd       rs1 21..17=0 16..12=0x1E 11..9=0 8..7=1 6..2=0x14 1..0=3
mtfsr       rd       rs1 21..17=0 16..12=0x1F 11..9=0 8..7=0 6..2=0x14 1..0=3

flw        rd rs1 imm12 9..7=2 6..2=0x01 1..0=3
fld        rd rs1 imm12 9..7=3 6..2=0x01 1..0=3

fsw        imm12hi rs1 rs2 imm12lo 9..7=2 6..2=0x09 1..0=3
fsd        imm12hi rs1 rs2 imm12lo 9..7=3 6..2=0x09 1..0=3

fmadd.s     rd rs1 rs2 rs3 rm 8..7=0 6..2=0x10 1..0=3
fmsub.s     rd rs1 rs2 rs3 rm 8..7=0 6..2=0x11 1..0=3
fnmsub.s    rd rs1 rs2 rs3 rm 8..7=0 6..2=0x12 1..0=3
fnmadd.s    rd rs1 rs2 rs3 rm 8..7=0 6..2=0x13 1..0=3

fmadd.d     rd rs1 rs2 rs3 rm 8..7=1 6..2=0x10 1..0=3
fmsub.d     rd rs1 rs2 rs3 rm 8..7=1 6..2=0x11 1..0=3
fnmsub.d    rd rs1 rs2 rs3 rm 8..7=1 6..2=0x12 1..0=3
fnmadd.d    rd rs1 rs2 rs3 rm 8..7=1 6..2=0x13 1..0=3

# vector mem instructions

#                                                                3=d
#                                         2=seg                  2=w
#                                         1=st     1=st 1=f  1=s 1=h
#                                         0=u      0=ld 0=x  0=u 0=b
#           ----------------------------------------------------------------------------
#                           mem  padding  type     ldst x/f  u/s width  opcode
# unit stride               |    |        |        |    |    |   |      |
# xloads                    |    |        |        |    |    |   |      |
ld.v        rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=0 10=0 9=0 8..7=3 6..2=0x02 1..0=3
lw.v        rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=0 10=0 9=0 8..7=2 6..2=0x02 1..0=3
lwu.v       rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=0 10=0 9=1 8..7=2 6..2=0x02 1..0=3
lh.v        rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=0 10=0 9=0 8..7=1 6..2=0x02 1..0=3
lhu.v       rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=0 10=0 9=1 8..7=1 6..2=0x02 1..0=3
lb.v        rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=0 10=0 9=0 8..7=0 6..2=0x02 1..0=3
lbu.v       rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=0 10=0 9=1 8..7=0 6..2=0x02 1..0=3
# xstores
sd.v        rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=1 10=0 9=0 8..7=3 6..2=0x02 1..0=3
sw.v        rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=1 10=0 9=0 8..7=2 6..2=0x02 1..0=3
sh.v        rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=1 10=0 9=0 8..7=1 6..2=0x02 1..0=3
sb.v        rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=1 10=0 9=0 8..7=0 6..2=0x02 1..0=3
# floads
fld.v       rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=0 10=1 9=0 8..7=3 6..2=0x02 1..0=3
flw.v       rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=0 10=1 9=0 8..7=2 6..2=0x02 1..0=3
# fstores
fsd.v       rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=1 10=1 9=0 8..7=3 6..2=0x02 1..0=3
fsw.v       rd rs1 21..17=0 16=0 15..14=0 13..12=0 11=1 10=1 9=0 8..7=2 6..2=0x02 1..0=3

#                           mem  padding  type     ldst x/f  u/s width  opcode
# stride                    |    |        |        |    |    |   |      |
# xloads                    |    |        |        |    |    |   |      |
ldst.v      rd rs1 rs2      16=0 15..14=0 13..12=1 11=0 10=0 9=0 8..7=3 6..2=0x02 1..0=3
lwst.v      rd rs1 rs2      16=0 15..14=0 13..12=1 11=0 10=0 9=0 8..7=2 6..2=0x02 1..0=3
lwust.v     rd rs1 rs2      16=0 15..14=0 13..12=1 11=0 10=0 9=1 8..7=2 6..2=0x02 1..0=3
lhst.v      rd rs1 rs2      16=0 15..14=0 13..12=1 11=0 10=0 9=0 8..7=1 6..2=0x02 1..0=3
lhust.v     rd rs1 rs2      16=0 15..14=0 13..12=1 11=0 10=0 9=1 8..7=1 6..2=0x02 1..0=3
lbst.v      rd rs1 rs2      16=0 15..14=0 13..12=1 11=0 10=0 9=0 8..7=0 6..2=0x02 1..0=3
lbust.v     rd rs1 rs2      16=0 15..14=0 13..12=1 11=0 10=0 9=1 8..7=0 6..2=0x02 1..0=3
# xstores
sdst.v      rd rs1 rs2      16=0 15..14=0 13..12=1 11=1 10=0 9=0 8..7=3 6..2=0x02 1..0=3
swst.v      rd rs1 rs2      16=0 15..14=0 13..12=1 11=1 10=0 9=0 8..7=2 6..2=0x02 1..0=3
shst.v      rd rs1 rs2      16=0 15..14=0 13..12=1 11=1 10=0 9=0 8..7=1 6..2=0x02 1..0=3
sbst.v      rd rs1 rs2      16=0 15..14=0 13..12=1 11=1 10=0 9=0 8..7=0 6..2=0x02 1..0=3
# floads
fldst.v     rd rs1 rs2      16=0 15..14=0 13..12=1 11=0 10=1 9=0 8..7=3 6..2=0x02 1..0=3
flwst.v     rd rs1 rs2      16=0 15..14=0 13..12=1 11=0 10=1 9=0 8..7=2 6..2=0x02 1..0=3
# fstores
fsdst.v     rd rs1 rs2      16=0 15..14=0 13..12=1 11=1 10=1 9=0 8..7=3 6..2=0x02 1..0=3
fswst.v     rd rs1 rs2      16=0 15..14=0 13..12=1 11=1 10=1 9=0 8..7=2 6..2=0x02 1..0=3

#                           mem  padding  type     ldst x/f  u/s width  opcode
# segment                   |    |        |        |    |    |   |      |
# xloads                    |    |        |        |    |    |   |      |
ldseg.v     rd rs1 rs2      16=0 15..14=0 13..12=2 11=0 10=0 9=0 8..7=3 6..2=0x02 1..0=3
lwseg.v     rd rs1 rs2      16=0 15..14=0 13..12=2 11=0 10=0 9=0 8..7=2 6..2=0x02 1..0=3
lwuseg.v    rd rs1 rs2      16=0 15..14=0 13..12=2 11=0 10=0 9=1 8..7=2 6..2=0x02 1..0=3
lhseg.v     rd rs1 rs2      16=0 15..14=0 13..12=2 11=0 10=0 9=0 8..7=1 6..2=0x02 1..0=3
lhuseg.v    rd rs1 rs2      16=0 15..14=0 13..12=2 11=0 10=0 9=1 8..7=1 6..2=0x02 1..0=3
lbseg.v     rd rs1 rs2      16=0 15..14=0 13..12=2 11=0 10=0 9=0 8..7=0 6..2=0x02 1..0=3
lbuseg.v    rd rs1 rs2      16=0 15..14=0 13..12=2 11=0 10=0 9=1 8..7=0 6..2=0x02 1..0=3
# xstores
sdseg.v     rd rs1 rs2      16=0 15..14=0 13..12=2 11=1 10=0 9=0 8..7=3 6..2=0x02 1..0=3
swseg.v     rd rs1 rs2      16=0 15..14=0 13..12=2 11=1 10=0 9=0 8..7=2 6..2=0x02 1..0=3
shseg.v     rd rs1 rs2      16=0 15..14=0 13..12=2 11=1 10=0 9=0 8..7=1 6..2=0x02 1..0=3
sbseg.v     rd rs1 rs2      16=0 15..14=0 13..12=2 11=1 10=0 9=0 8..7=0 6..2=0x02 1..0=3
# floads
fldseg.v    rd rs1 rs2      16=0 15..14=0 13..12=2 11=0 10=1 9=0 8..7=3 6..2=0x02 1..0=3
flwseg.v    rd rs1 rs2      16=0 15..14=0 13..12=2 11=0 10=1 9=0 8..7=2 6..2=0x02 1..0=3
# fstores
fsdseg.v    rd rs1 rs2      16=0 15..14=0 13..12=2 11=1 10=1 9=0 8..7=3 6..2=0x02 1..0=3
fswseg.v    rd rs1 rs2      16=0 15..14=0 13..12=2 11=1 10=1 9=0 8..7=2 6..2=0x02 1..0=3

#                                                  ldst x/f  u/s width  opcode
# stride segment                                   |    |    |   |      |
# xloads                                           |    |    |   |      |
ldsegst.v   rd rs1 rs2      rs3                    11=0 10=0 9=0 8..7=3 6..2=0x03 1..0=3
lwsegst.v   rd rs1 rs2      rs3                    11=0 10=0 9=0 8..7=2 6..2=0x03 1..0=3
lwusegst.v  rd rs1 rs2      rs3                    11=0 10=0 9=1 8..7=2 6..2=0x03 1..0=3
lhsegst.v   rd rs1 rs2      rs3                    11=0 10=0 9=0 8..7=1 6..2=0x03 1..0=3
lhusegst.v  rd rs1 rs2      rs3                    11=0 10=0 9=1 8..7=1 6..2=0x03 1..0=3
lbsegst.v   rd rs1 rs2      rs3                    11=0 10=0 9=0 8..7=0 6..2=0x03 1..0=3
lbusegst.v  rd rs1 rs2      rs3                    11=0 10=0 9=1 8..7=0 6..2=0x03 1..0=3
# xstores
sdsegst.v   rd rs1 rs2      rs3                    11=1 10=0 9=0 8..7=3 6..2=0x03 1..0=3
swsegst.v   rd rs1 rs2      rs3                    11=1 10=0 9=0 8..7=2 6..2=0x03 1..0=3
shsegst.v   rd rs1 rs2      rs3                    11=1 10=0 9=0 8..7=1 6..2=0x03 1..0=3
sbsegst.v   rd rs1 rs2      rs3                    11=1 10=0 9=0 8..7=0 6..2=0x03 1..0=3
# floads
fldsegst.v  rd rs1 rs2      rs3                    11=0 10=1 9=0 8..7=3 6..2=0x03 1..0=3
flwsegst.v  rd rs1 rs2      rs3                    11=0 10=1 9=0 8..7=2 6..2=0x03 1..0=3
# fstores
fsdsegst.v  rd rs1 rs2      rs3                    11=1 10=1 9=0 8..7=3 6..2=0x03 1..0=3
fswsegst.v  rd rs1 rs2      rs3                    11=1 10=1 9=0 8..7=2 6..2=0x03 1..0=3

# vector arithmetic instructions
mov.vv      rd rs1 21..17=0 16=1 15=0 14..12=0     11..7=0              6..2=0x02 1..0=3
mov.sv      rd rs1 21..17=0 16=1 15=0 14..12=0     11..7=1              6..2=0x02 1..0=3
mov.su      rd rs1 rs2      16=1 15=0 14..12=0     11..7=2              6..2=0x02 1..0=3
mov.us      rd rs1 rs2      16=1 15=0 14..12=0     11..7=3              6..2=0x02 1..0=3
fmov.vv     rd rs1 21..17=0 16=1 15=1 14..12=0     11..7=0              6..2=0x02 1..0=3
fmov.sv     rd rs1 21..17=0 16=1 15=1 14..12=0     11..7=1              6..2=0x02 1..0=3
fmov.su     rd rs1 rs2      16=1 15=1 14..12=0     11..7=2              6..2=0x02 1..0=3
fmov.us     rd rs1 rs2      16=1 15=1 14..12=0     11..7=3              6..2=0x02 1..0=3

# vector immediate instructions
vcfgivl     rd       rs1 imm12    9..7=0     6..2=0x1C 1..0=3
setvl       rd       rs1 21..10=0 9..7=1     6..2=0x1C 1..0=3
vf          31..27=0 rs1 imm12    9..7=2     6..2=0x1C 1..0=3

# compressed instructions
c.li      cimm6    crd   4..0=0
c.addi    cimm6    crd   4..0=1
c.move 15=0 crs1   crd   4..0=2
c.j    15=1   cimm10     4..0=2
c.ldsp    cimm6    crd   4..0=4
c.lwsp    cimm6    crd   4..0=5
c.sdsp    cimm6    crd   4..0=6
c.swsp    cimm6    crd   4..0=8
c.ld   crds  crs1s cimm5 4..0=9
c.lw   crds  crs1s cimm5 4..0=10
c.sd   crs2s crs1s cimm5 4..0=12
c.sw   crs2s crs1s cimm5 4..0=13
c.beq  crs2s crs1s cimm5 4..0=16
c.bne  crs2s crs1s cimm5 4..0=17
c.lw0 15=0 crs1    crd   4..0=18
c.ld0 15=1 crs1    crd   4..0=18
c.flw  crds  crs1s cimm5 4..0=20
c.fld  crds  crs1s cimm5 4..0=21
c.fsw  crs2s crs1s cimm5 4..0=22
c.fsd  crs2s crs1s cimm5 4..0=24

c.slli   crds 12..10=0 cimm5 4..0=25
c.slli32 crds 12..10=1 cimm5 4..0=25
c.srli   crds 12..10=2 cimm5 4..0=25
c.srli32 crds 12..10=3 cimm5 4..0=25
c.srai   crds 12..10=4 cimm5 4..0=25
c.srai32 crds 12..10=5 cimm5 4..0=25
c.slliw  crds 12..10=6 cimm5 4..0=25

c.add crd crs1 15=0 4..0=26
c.sub crd crs1 15=1 4..0=26

c.add3 crds crs1s crs2bs 9..8=0 4..0=28
c.sub3 crds crs1s crs2bs 9..8=1 4..0=28
c.or3  crds crs1s crs2bs 9..8=2 4..0=28
c.and3 crds crs1s crs2bs 9..8=3 4..0=28