aboutsummaryrefslogtreecommitdiff
path: root/target/mips/tcg/msa.decode
blob: 391261109a5ef67f891f5cc30804a97992e642d2 (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
# 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

%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:16             &msa_bz df=3
@bz                 ...... ...  df:2 wt:5 sa:16             &msa_bz
@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

  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

  MSA               011110 --------------------------
}