aboutsummaryrefslogtreecommitdiff
path: root/target/mips/tcg/msa.decode
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