blob: 4410e2a02e16f4c40a32b95b1c07e7940a13ad4d (
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
|
# MIPS SIMD Architecture Module instruction set
#
# Copyright (C) 2020 Philippe Mathieu-Daudé
#
# SPDX-License-Identifier: LGPL-2.1-or-later
#
# Reference:
# MIPS Architecture for Programmers Volume IV-j
# - The MIPS32 SIMD Architecture Module, Revision 1.12
# (Document Number: MD00866-2B-MSA32-AFP-01.12)
# - The MIPS64 SIMD Architecture Module, Revision 1.12
# (Document Number: MD00868-1D-MSA64-AFP-01.12)
&r rs rt rd sa
&msa_r df wd ws wt
&msa_bz df wt sa
&msa_ldi df wd sa
&msa_i df wd ws sa
&msa_bit df wd ws m
&msa_elm_df df wd ws n
&msa_elm wd ws
%elm_df 16:6 !function=elm_df
%elm_n 16:6 !function=elm_n
%bit_df 16:7 !function=bit_df
%bit_m 16:7 !function=bit_m
%2r_df_w 16:1 !function=plus_2
%3r_df_h 21:1 !function=plus_1
%3r_df_w 21:1 !function=plus_2
@lsa ...... rs:5 rt:5 rd:5 ... sa:2 ...... &r
@ldst ...... sa:s10 ws:5 wd:5 .... df:2 &msa_i
@bz_v ...... ... .. wt:5 sa:s16 &msa_bz df=3
@bz ...... ... df:2 wt:5 sa:s16 &msa_bz
@elm_df ...... .... ...... ws:5 wd:5 ...... &msa_elm_df df=%elm_df n=%elm_n
@elm ...... .......... ws:5 wd:5 ...... &msa_elm
@vec ...... ..... wt:5 ws:5 wd:5 ...... &msa_r df=0
@2r ...... ........ df:2 ws:5 wd:5 ...... &msa_r wt=0
@2rf ...... ......... . ws:5 wd:5 ...... &msa_r wt=0 df=%2r_df_w
@3r ...... ... df:2 wt:5 ws:5 wd:5 ...... &msa_r
@3rf_h ...... .... . wt:5 ws:5 wd:5 ...... &msa_r df=%3r_df_h
@3rf_w ...... .... . wt:5 ws:5 wd:5 ...... &msa_r df=%3r_df_w
@u5 ...... ... df:2 sa:5 ws:5 wd:5 ...... &msa_i
@s5 ...... ... df:2 sa:s5 ws:5 wd:5 ...... &msa_i
@i8_df ...... df:2 sa:s8 ws:5 wd:5 ...... &msa_i
@i8 ...... .. sa:s8 ws:5 wd:5 ...... &msa_i df=0
@ldi ...... ... df:2 sa:s10 wd:5 ...... &msa_ldi
@bit ...... ... ....... ws:5 wd:5 ...... &msa_bit df=%bit_df m=%bit_m
LSA 000000 ..... ..... ..... 000 .. 000101 @lsa
DLSA 000000 ..... ..... ..... 000 .. 010101 @lsa
BZ_V 010001 01011 ..... ................ @bz_v
BNZ_V 010001 01111 ..... ................ @bz_v
BZ 010001 110 .. ..... ................ @bz
BNZ 010001 111 .. ..... ................ @bz
ANDI 011110 00 ........ ..... ..... 000000 @i8
ORI 011110 01 ........ ..... ..... 000000 @i8
NORI 011110 10 ........ ..... ..... 000000 @i8
XORI 011110 11 ........ ..... ..... 000000 @i8
BMNZI 011110 00 ........ ..... ..... 000001 @i8
BMZI 011110 01 ........ ..... ..... 000001 @i8
BSELI 011110 10 ........ ..... ..... 000001 @i8
SHF 011110 .. ........ ..... ..... 000010 @i8_df
ADDVI 011110 000 .. ..... ..... ..... 000110 @u5
SUBVI 011110 001 .. ..... ..... ..... 000110 @u5
MAXI_S 011110 010 .. ..... ..... ..... 000110 @s5
MAXI_U 011110 011 .. ..... ..... ..... 000110 @u5
MINI_S 011110 100 .. ..... ..... ..... 000110 @s5
MINI_U 011110 101 .. ..... ..... ..... 000110 @u5
CEQI 011110 000 .. ..... ..... ..... 000111 @s5
CLTI_S 011110 010 .. ..... ..... ..... 000111 @s5
CLTI_U 011110 011 .. ..... ..... ..... 000111 @u5
CLEI_S 011110 100 .. ..... ..... ..... 000111 @s5
CLEI_U 011110 101 .. ..... ..... ..... 000111 @u5
LDI 011110 110 .. .......... ..... 000111 @ldi
SLLI 011110 000 ....... ..... ..... 001001 @bit
SRAI 011110 001 ....... ..... ..... 001001 @bit
SRLI 011110 010 ....... ..... ..... 001001 @bit
BCLRI 011110 011 ....... ..... ..... 001001 @bit
BSETI 011110 100 ....... ..... ..... 001001 @bit
BNEGI 011110 101 ....... ..... ..... 001001 @bit
BINSLI 011110 110 ....... ..... ..... 001001 @bit
BINSRI 011110 111 ....... ..... ..... 001001 @bit
SAT_S 011110 000 ....... ..... ..... 001010 @bit
SAT_U 011110 001 ....... ..... ..... 001010 @bit
SRARI 011110 010 ....... ..... ..... 001010 @bit
SRLRI 011110 011 ....... ..... ..... 001010 @bit
SLL 011110 000.. ..... ..... ..... 001101 @3r
SRA 011110 001.. ..... ..... ..... 001101 @3r
SRL 011110 010.. ..... ..... ..... 001101 @3r
BCLR 011110 011.. ..... ..... ..... 001101 @3r
BSET 011110 100.. ..... ..... ..... 001101 @3r
BNEG 011110 101.. ..... ..... ..... 001101 @3r
BINSL 011110 110.. ..... ..... ..... 001101 @3r
BINSR 011110 111.. ..... ..... ..... 001101 @3r
ADDV 011110 000.. ..... ..... ..... 001110 @3r
SUBV 011110 001.. ..... ..... ..... 001110 @3r
MAX_S 011110 010.. ..... ..... ..... 001110 @3r
MAX_U 011110 011.. ..... ..... ..... 001110 @3r
MIN_S 011110 100.. ..... ..... ..... 001110 @3r
MIN_U 011110 101.. ..... ..... ..... 001110 @3r
MAX_A 011110 110.. ..... ..... ..... 001110 @3r
MIN_A 011110 111.. ..... ..... ..... 001110 @3r
CEQ 011110 000.. ..... ..... ..... 001111 @3r
CLT_S 011110 010.. ..... ..... ..... 001111 @3r
CLT_U 011110 011.. ..... ..... ..... 001111 @3r
CLE_S 011110 100.. ..... ..... ..... 001111 @3r
CLE_U 011110 101.. ..... ..... ..... 001111 @3r
ADD_A 011110 000.. ..... ..... ..... 010000 @3r
ADDS_A 011110 001.. ..... ..... ..... 010000 @3r
ADDS_S 011110 010.. ..... ..... ..... 010000 @3r
ADDS_U 011110 011.. ..... ..... ..... 010000 @3r
AVE_S 011110 100.. ..... ..... ..... 010000 @3r
AVE_U 011110 101.. ..... ..... ..... 010000 @3r
AVER_S 011110 110.. ..... ..... ..... 010000 @3r
AVER_U 011110 111.. ..... ..... ..... 010000 @3r
SUBS_S 011110 000.. ..... ..... ..... 010001 @3r
SUBS_U 011110 001.. ..... ..... ..... 010001 @3r
SUBSUS_U 011110 010.. ..... ..... ..... 010001 @3r
SUBSUU_S 011110 011.. ..... ..... ..... 010001 @3r
ASUB_S 011110 100.. ..... ..... ..... 010001 @3r
ASUB_U 011110 101.. ..... ..... ..... 010001 @3r
MULV 011110 000.. ..... ..... ..... 010010 @3r
MADDV 011110 001.. ..... ..... ..... 010010 @3r
MSUBV 011110 010.. ..... ..... ..... 010010 @3r
DIV_S 011110 100.. ..... ..... ..... 010010 @3r
DIV_U 011110 101.. ..... ..... ..... 010010 @3r
MOD_S 011110 110.. ..... ..... ..... 010010 @3r
MOD_U 011110 111.. ..... ..... ..... 010010 @3r
DOTP_S 011110 000.. ..... ..... ..... 010011 @3r
DOTP_U 011110 001.. ..... ..... ..... 010011 @3r
DPADD_S 011110 010.. ..... ..... ..... 010011 @3r
DPADD_U 011110 011.. ..... ..... ..... 010011 @3r
DPSUB_S 011110 100.. ..... ..... ..... 010011 @3r
DPSUB_U 011110 101.. ..... ..... ..... 010011 @3r
SLD 011110 000 .. ..... ..... ..... 010100 @3r
SPLAT 011110 001 .. ..... ..... ..... 010100 @3r
PCKEV 011110 010 .. ..... ..... ..... 010100 @3r
PCKOD 011110 011 .. ..... ..... ..... 010100 @3r
ILVL 011110 100 .. ..... ..... ..... 010100 @3r
ILVR 011110 101 .. ..... ..... ..... 010100 @3r
ILVEV 011110 110 .. ..... ..... ..... 010100 @3r
ILVOD 011110 111 .. ..... ..... ..... 010100 @3r
VSHF 011110 000 .. ..... ..... ..... 010101 @3r
SRAR 011110 001 .. ..... ..... ..... 010101 @3r
SRLR 011110 010 .. ..... ..... ..... 010101 @3r
HADD_S 011110 100.. ..... ..... ..... 010101 @3r
HADD_U 011110 101.. ..... ..... ..... 010101 @3r
HSUB_S 011110 110.. ..... ..... ..... 010101 @3r
HSUB_U 011110 111.. ..... ..... ..... 010101 @3r
{
CTCMSA 011110 0000111110 ..... ..... 011001 @elm
SLDI 011110 0000 ...... ..... ..... 011001 @elm_df
}
{
CFCMSA 011110 0001111110 ..... ..... 011001 @elm
SPLATI 011110 0001 ...... ..... ..... 011001 @elm_df
}
{
MOVE_V 011110 0010111110 ..... ..... 011001 @elm
COPY_S 011110 0010 ...... ..... ..... 011001 @elm_df
}
COPY_U 011110 0011 ...... ..... ..... 011001 @elm_df
INSERT 011110 0100 ...... ..... ..... 011001 @elm_df
INSVE 011110 0101 ...... ..... ..... 011001 @elm_df
FCAF 011110 0000 . ..... ..... ..... 011010 @3rf_w
FCUN 011110 0001 . ..... ..... ..... 011010 @3rf_w
FCEQ 011110 0010 . ..... ..... ..... 011010 @3rf_w
FCUEQ 011110 0011 . ..... ..... ..... 011010 @3rf_w
FCLT 011110 0100 . ..... ..... ..... 011010 @3rf_w
FCULT 011110 0101 . ..... ..... ..... 011010 @3rf_w
FCLE 011110 0110 . ..... ..... ..... 011010 @3rf_w
FCULE 011110 0111 . ..... ..... ..... 011010 @3rf_w
FSAF 011110 1000 . ..... ..... ..... 011010 @3rf_w
FSUN 011110 1001 . ..... ..... ..... 011010 @3rf_w
FSEQ 011110 1010 . ..... ..... ..... 011010 @3rf_w
FSUEQ 011110 1011 . ..... ..... ..... 011010 @3rf_w
FSLT 011110 1100 . ..... ..... ..... 011010 @3rf_w
FSULT 011110 1101 . ..... ..... ..... 011010 @3rf_w
FSLE 011110 1110 . ..... ..... ..... 011010 @3rf_w
FSULE 011110 1111 . ..... ..... ..... 011010 @3rf_w
FADD 011110 0000 . ..... ..... ..... 011011 @3rf_w
FSUB 011110 0001 . ..... ..... ..... 011011 @3rf_w
FMUL 011110 0010 . ..... ..... ..... 011011 @3rf_w
FDIV 011110 0011 . ..... ..... ..... 011011 @3rf_w
FMADD 011110 0100 . ..... ..... ..... 011011 @3rf_w
FMSUB 011110 0101 . ..... ..... ..... 011011 @3rf_w
FEXP2 011110 0111 . ..... ..... ..... 011011 @3rf_w
FEXDO 011110 1000 . ..... ..... ..... 011011 @3rf_w
FTQ 011110 1010 . ..... ..... ..... 011011 @3rf_w
FMIN 011110 1100 . ..... ..... ..... 011011 @3rf_w
FMIN_A 011110 1101 . ..... ..... ..... 011011 @3rf_w
FMAX 011110 1110 . ..... ..... ..... 011011 @3rf_w
FMAX_A 011110 1111 . ..... ..... ..... 011011 @3rf_w
FCOR 011110 0001 . ..... ..... ..... 011100 @3rf_w
FCUNE 011110 0010 . ..... ..... ..... 011100 @3rf_w
FCNE 011110 0011 . ..... ..... ..... 011100 @3rf_w
MUL_Q 011110 0100 . ..... ..... ..... 011100 @3rf_h
MADD_Q 011110 0101 . ..... ..... ..... 011100 @3rf_h
MSUB_Q 011110 0110 . ..... ..... ..... 011100 @3rf_h
FSOR 011110 1001 . ..... ..... ..... 011100 @3rf_w
FSUNE 011110 1010 . ..... ..... ..... 011100 @3rf_w
FSNE 011110 1011 . ..... ..... ..... 011100 @3rf_w
MULR_Q 011110 1100 . ..... ..... ..... 011100 @3rf_h
MADDR_Q 011110 1101 . ..... ..... ..... 011100 @3rf_h
MSUBR_Q 011110 1110 . ..... ..... ..... 011100 @3rf_h
AND_V 011110 00000 ..... ..... ..... 011110 @vec
OR_V 011110 00001 ..... ..... ..... 011110 @vec
NOR_V 011110 00010 ..... ..... ..... 011110 @vec
XOR_V 011110 00011 ..... ..... ..... 011110 @vec
BMNZ_V 011110 00100 ..... ..... ..... 011110 @vec
BMZ_V 011110 00101 ..... ..... ..... 011110 @vec
BSEL_V 011110 00110 ..... ..... ..... 011110 @vec
FILL 011110 11000000 .. ..... ..... 011110 @2r
PCNT 011110 11000001 .. ..... ..... 011110 @2r
NLOC 011110 11000010 .. ..... ..... 011110 @2r
NLZC 011110 11000011 .. ..... ..... 011110 @2r
FCLASS 011110 110010000 . ..... ..... 011110 @2rf
FTRUNC_S 011110 110010001 . ..... ..... 011110 @2rf
FTRUNC_U 011110 110010010 . ..... ..... 011110 @2rf
FSQRT 011110 110010011 . ..... ..... 011110 @2rf
FRSQRT 011110 110010100 . ..... ..... 011110 @2rf
FRCP 011110 110010101 . ..... ..... 011110 @2rf
FRINT 011110 110010110 . ..... ..... 011110 @2rf
FLOG2 011110 110010111 . ..... ..... 011110 @2rf
FEXUPL 011110 110011000 . ..... ..... 011110 @2rf
FEXUPR 011110 110011001 . ..... ..... 011110 @2rf
FFQL 011110 110011010 . ..... ..... 011110 @2rf
FFQR 011110 110011011 . ..... ..... 011110 @2rf
FTINT_S 011110 110011100 . ..... ..... 011110 @2rf
FTINT_U 011110 110011101 . ..... ..... 011110 @2rf
FFINT_S 011110 110011110 . ..... ..... 011110 @2rf
FFINT_U 011110 110011111 . ..... ..... 011110 @2rf
LD 011110 .......... ..... ..... 1000 .. @ldst
ST 011110 .......... ..... ..... 1001 .. @ldst
|