MipsMSAInstrInfo.td revision ea549a847d87cb8ce46f6a45b24ae888db697a07
1//===- MipsMSAInstrInfo.td - MSA ASE instructions -*- tablegen ------------*-=//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file describes Mips MSA ASE instructions.
11//
12//===----------------------------------------------------------------------===//
13
14def immSExt5 : ImmLeaf<i32, [{return isInt<5>(Imm);}]>;
15def immSExt10: ImmLeaf<i32, [{return isInt<10>(Imm);}]>;
16
17def uimm3 : Operand<i32> {
18  let PrintMethod = "printUnsignedImm";
19}
20
21def uimm4 : Operand<i32> {
22  let PrintMethod = "printUnsignedImm";
23}
24
25def uimm6 : Operand<i32> {
26  let PrintMethod = "printUnsignedImm";
27}
28
29def uimm8 : Operand<i32> {
30  let PrintMethod = "printUnsignedImm";
31}
32
33def simm5 : Operand<i32>;
34
35def simm10 : Operand<i32>;
36
37// Instruction encoding.
38class ADD_A_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b010000>;
39class ADD_A_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b010000>;
40class ADD_A_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b010000>;
41class ADD_A_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b010000>;
42
43class ADDS_A_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b010000>;
44class ADDS_A_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b010000>;
45class ADDS_A_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b010000>;
46class ADDS_A_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b010000>;
47
48class ADDS_S_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b010000>;
49class ADDS_S_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b010000>;
50class ADDS_S_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b010000>;
51class ADDS_S_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b010000>;
52
53class ADDS_U_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b010000>;
54class ADDS_U_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b010000>;
55class ADDS_U_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b010000>;
56class ADDS_U_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b010000>;
57
58class ADDV_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b001110>;
59class ADDV_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b001110>;
60class ADDV_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b001110>;
61class ADDV_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b001110>;
62
63class ADDVI_B_ENC : MSA_I5_FMT<0b000, 0b00, 0b000110>;
64class ADDVI_H_ENC : MSA_I5_FMT<0b000, 0b01, 0b000110>;
65class ADDVI_W_ENC : MSA_I5_FMT<0b000, 0b10, 0b000110>;
66class ADDVI_D_ENC : MSA_I5_FMT<0b000, 0b11, 0b000110>;
67
68class ANDI_B_ENC : MSA_I8_FMT<0b00, 0b000000>;
69
70class ASUB_S_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b010001>;
71class ASUB_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010001>;
72class ASUB_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010001>;
73class ASUB_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010001>;
74
75class ASUB_U_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b010001>;
76class ASUB_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010001>;
77class ASUB_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010001>;
78class ASUB_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010001>;
79
80class AVE_S_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b010000>;
81class AVE_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010000>;
82class AVE_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010000>;
83class AVE_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010000>;
84
85class AVE_U_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b010000>;
86class AVE_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010000>;
87class AVE_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010000>;
88class AVE_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010000>;
89
90class AVER_S_B_ENC : MSA_3R_FMT<0b110, 0b00, 0b010000>;
91class AVER_S_H_ENC : MSA_3R_FMT<0b110, 0b01, 0b010000>;
92class AVER_S_W_ENC : MSA_3R_FMT<0b110, 0b10, 0b010000>;
93class AVER_S_D_ENC : MSA_3R_FMT<0b110, 0b11, 0b010000>;
94
95class AVER_U_B_ENC : MSA_3R_FMT<0b111, 0b00, 0b010000>;
96class AVER_U_H_ENC : MSA_3R_FMT<0b111, 0b01, 0b010000>;
97class AVER_U_W_ENC : MSA_3R_FMT<0b111, 0b10, 0b010000>;
98class AVER_U_D_ENC : MSA_3R_FMT<0b111, 0b11, 0b010000>;
99
100class BCLR_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b001101>;
101class BCLR_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b001101>;
102class BCLR_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b001101>;
103class BCLR_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b001101>;
104
105class BCLRI_B_ENC : MSA_BIT_B_FMT<0b011, 0b001001>;
106class BCLRI_H_ENC : MSA_BIT_H_FMT<0b011, 0b001001>;
107class BCLRI_W_ENC : MSA_BIT_W_FMT<0b011, 0b001001>;
108class BCLRI_D_ENC : MSA_BIT_D_FMT<0b011, 0b001001>;
109
110class BINSL_B_ENC : MSA_3R_FMT<0b110, 0b00, 0b001101>;
111class BINSL_H_ENC : MSA_3R_FMT<0b110, 0b01, 0b001101>;
112class BINSL_W_ENC : MSA_3R_FMT<0b110, 0b10, 0b001101>;
113class BINSL_D_ENC : MSA_3R_FMT<0b110, 0b11, 0b001101>;
114
115class BINSLI_B_ENC : MSA_BIT_B_FMT<0b110, 0b001001>;
116class BINSLI_H_ENC : MSA_BIT_H_FMT<0b110, 0b001001>;
117class BINSLI_W_ENC : MSA_BIT_W_FMT<0b110, 0b001001>;
118class BINSLI_D_ENC : MSA_BIT_D_FMT<0b110, 0b001001>;
119
120class BINSR_B_ENC : MSA_3R_FMT<0b111, 0b00, 0b001101>;
121class BINSR_H_ENC : MSA_3R_FMT<0b111, 0b01, 0b001101>;
122class BINSR_W_ENC : MSA_3R_FMT<0b111, 0b10, 0b001101>;
123class BINSR_D_ENC : MSA_3R_FMT<0b111, 0b11, 0b001101>;
124
125class BINSRI_B_ENC : MSA_BIT_B_FMT<0b111, 0b001001>;
126class BINSRI_H_ENC : MSA_BIT_H_FMT<0b111, 0b001001>;
127class BINSRI_W_ENC : MSA_BIT_W_FMT<0b111, 0b001001>;
128class BINSRI_D_ENC : MSA_BIT_D_FMT<0b111, 0b001001>;
129
130class BMNZI_B_ENC : MSA_I8_FMT<0b00, 0b000001>;
131
132class BMZI_B_ENC : MSA_I8_FMT<0b01, 0b000001>;
133
134class BNEG_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b001101>;
135class BNEG_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b001101>;
136class BNEG_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b001101>;
137class BNEG_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b001101>;
138
139class BNEGI_B_ENC : MSA_BIT_B_FMT<0b101, 0b001001>;
140class BNEGI_H_ENC : MSA_BIT_H_FMT<0b101, 0b001001>;
141class BNEGI_W_ENC : MSA_BIT_W_FMT<0b101, 0b001001>;
142class BNEGI_D_ENC : MSA_BIT_D_FMT<0b101, 0b001001>;
143
144class BSELI_B_ENC : MSA_I8_FMT<0b10, 0b000001>;
145
146class BSET_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b001101>;
147class BSET_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b001101>;
148class BSET_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b001101>;
149class BSET_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b001101>;
150
151class BSETI_B_ENC : MSA_BIT_B_FMT<0b100, 0b001001>;
152class BSETI_H_ENC : MSA_BIT_H_FMT<0b100, 0b001001>;
153class BSETI_W_ENC : MSA_BIT_W_FMT<0b100, 0b001001>;
154class BSETI_D_ENC : MSA_BIT_D_FMT<0b100, 0b001001>;
155
156class CEQ_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b001111>;
157class CEQ_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b001111>;
158class CEQ_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b001111>;
159class CEQ_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b001111>;
160
161class CEQI_B_ENC : MSA_I5_FMT<0b000, 0b00, 0b000111>;
162class CEQI_H_ENC : MSA_I5_FMT<0b000, 0b01, 0b000111>;
163class CEQI_W_ENC : MSA_I5_FMT<0b000, 0b10, 0b000111>;
164class CEQI_D_ENC : MSA_I5_FMT<0b000, 0b11, 0b000111>;
165
166class CLE_S_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b001111>;
167class CLE_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b001111>;
168class CLE_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b001111>;
169class CLE_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b001111>;
170
171class CLE_U_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b001111>;
172class CLE_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b001111>;
173class CLE_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b001111>;
174class CLE_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b001111>;
175
176class CLEI_S_B_ENC : MSA_I5_FMT<0b100, 0b00, 0b000111>;
177class CLEI_S_H_ENC : MSA_I5_FMT<0b100, 0b01, 0b000111>;
178class CLEI_S_W_ENC : MSA_I5_FMT<0b100, 0b10, 0b000111>;
179class CLEI_S_D_ENC : MSA_I5_FMT<0b100, 0b11, 0b000111>;
180
181class CLEI_U_B_ENC : MSA_I5_FMT<0b101, 0b00, 0b000111>;
182class CLEI_U_H_ENC : MSA_I5_FMT<0b101, 0b01, 0b000111>;
183class CLEI_U_W_ENC : MSA_I5_FMT<0b101, 0b10, 0b000111>;
184class CLEI_U_D_ENC : MSA_I5_FMT<0b101, 0b11, 0b000111>;
185
186class CLT_S_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b001111>;
187class CLT_S_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b001111>;
188class CLT_S_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b001111>;
189class CLT_S_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b001111>;
190
191class CLT_U_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b001111>;
192class CLT_U_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b001111>;
193class CLT_U_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b001111>;
194class CLT_U_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b001111>;
195
196class CLTI_S_B_ENC : MSA_I5_FMT<0b010, 0b00, 0b000111>;
197class CLTI_S_H_ENC : MSA_I5_FMT<0b010, 0b01, 0b000111>;
198class CLTI_S_W_ENC : MSA_I5_FMT<0b010, 0b10, 0b000111>;
199class CLTI_S_D_ENC : MSA_I5_FMT<0b010, 0b11, 0b000111>;
200
201class CLTI_U_B_ENC : MSA_I5_FMT<0b011, 0b00, 0b000111>;
202class CLTI_U_H_ENC : MSA_I5_FMT<0b011, 0b01, 0b000111>;
203class CLTI_U_W_ENC : MSA_I5_FMT<0b011, 0b10, 0b000111>;
204class CLTI_U_D_ENC : MSA_I5_FMT<0b011, 0b11, 0b000111>;
205
206class COPY_S_B_ENC : MSA_ELM_B_FMT<0b0010, 0b011001>;
207class COPY_S_H_ENC : MSA_ELM_H_FMT<0b0010, 0b011001>;
208class COPY_S_W_ENC : MSA_ELM_W_FMT<0b0010, 0b011001>;
209
210class COPY_U_B_ENC : MSA_ELM_B_FMT<0b0011, 0b011001>;
211class COPY_U_H_ENC : MSA_ELM_H_FMT<0b0011, 0b011001>;
212class COPY_U_W_ENC : MSA_ELM_W_FMT<0b0011, 0b011001>;
213
214class DIV_S_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b010010>;
215class DIV_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010010>;
216class DIV_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010010>;
217class DIV_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010010>;
218
219class DIV_U_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b010010>;
220class DIV_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010010>;
221class DIV_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010010>;
222class DIV_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010010>;
223
224class DOTP_S_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b010011>;
225class DOTP_S_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b010011>;
226class DOTP_S_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b010011>;
227class DOTP_S_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b010011>;
228
229class DOTP_U_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b010011>;
230class DOTP_U_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b010011>;
231class DOTP_U_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b010011>;
232class DOTP_U_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b010011>;
233
234class DPADD_S_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b010011>;
235class DPADD_S_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b010011>;
236class DPADD_S_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b010011>;
237
238class DPADD_U_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b010011>;
239class DPADD_U_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b010011>;
240class DPADD_U_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b010011>;
241
242class DPSUB_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010011>;
243class DPSUB_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010011>;
244class DPSUB_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010011>;
245
246class DPSUB_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010011>;
247class DPSUB_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010011>;
248class DPSUB_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010011>;
249
250class FADD_W_ENC : MSA_3RF_FMT<0b0000, 0b0, 0b011011>;
251class FADD_D_ENC : MSA_3RF_FMT<0b0000, 0b1, 0b011011>;
252
253class FCEQ_W_ENC : MSA_3RF_FMT<0b0010, 0b0, 0b011010>;
254class FCEQ_D_ENC : MSA_3RF_FMT<0b0010, 0b1, 0b011010>;
255
256class FCGE_W_ENC : MSA_3RF_FMT<0b0101, 0b0, 0b011010>;
257class FCGE_D_ENC : MSA_3RF_FMT<0b0101, 0b1, 0b011010>;
258
259class FCGT_W_ENC : MSA_3RF_FMT<0b0111, 0b0, 0b011010>;
260class FCGT_D_ENC : MSA_3RF_FMT<0b0111, 0b1, 0b011010>;
261
262class FCLASS_W_ENC : MSA_2RF_FMT<0b110010000, 0b0, 0b011110>;
263class FCLASS_D_ENC : MSA_2RF_FMT<0b110010000, 0b1, 0b011110>;
264
265class FCLE_W_ENC : MSA_3RF_FMT<0b0110, 0b0, 0b011010>;
266class FCLE_D_ENC : MSA_3RF_FMT<0b0110, 0b1, 0b011010>;
267
268class FCLT_W_ENC : MSA_3RF_FMT<0b0100, 0b0, 0b011010>;
269class FCLT_D_ENC : MSA_3RF_FMT<0b0100, 0b1, 0b011010>;
270
271class FCNE_W_ENC : MSA_3RF_FMT<0b0011, 0b0, 0b011010>;
272class FCNE_D_ENC : MSA_3RF_FMT<0b0011, 0b1, 0b011010>;
273
274class FCUN_W_ENC : MSA_3RF_FMT<0b0001, 0b0, 0b011010>;
275class FCUN_D_ENC : MSA_3RF_FMT<0b0001, 0b1, 0b011010>;
276
277class FDIV_W_ENC : MSA_3RF_FMT<0b0011, 0b0, 0b011011>;
278class FDIV_D_ENC : MSA_3RF_FMT<0b0011, 0b1, 0b011011>;
279
280class FEXDO_H_ENC : MSA_3RF_FMT<0b1000, 0b0, 0b011011>;
281class FEXDO_W_ENC : MSA_3RF_FMT<0b1000, 0b1, 0b011011>;
282
283class FEXP2_W_ENC : MSA_3RF_FMT<0b0111, 0b0, 0b011011>;
284class FEXP2_D_ENC : MSA_3RF_FMT<0b0111, 0b1, 0b011011>;
285
286class FEXUPL_W_ENC : MSA_2RF_FMT<0b110011000, 0b0, 0b011110>;
287class FEXUPL_D_ENC : MSA_2RF_FMT<0b110011000, 0b1, 0b011110>;
288
289class FEXUPR_W_ENC : MSA_2RF_FMT<0b110011001, 0b0, 0b011110>;
290class FEXUPR_D_ENC : MSA_2RF_FMT<0b110011001, 0b1, 0b011110>;
291
292class FFINT_S_W_ENC : MSA_2RF_FMT<0b110011110, 0b0, 0b011110>;
293class FFINT_S_D_ENC : MSA_2RF_FMT<0b110011110, 0b1, 0b011110>;
294
295class FFINT_U_W_ENC : MSA_2RF_FMT<0b110011111, 0b0, 0b011110>;
296class FFINT_U_D_ENC : MSA_2RF_FMT<0b110011111, 0b1, 0b011110>;
297
298class FFQL_W_ENC : MSA_2RF_FMT<0b110011010, 0b0, 0b011110>;
299class FFQL_D_ENC : MSA_2RF_FMT<0b110011010, 0b1, 0b011110>;
300
301class FFQR_W_ENC : MSA_2RF_FMT<0b110011011, 0b0, 0b011110>;
302class FFQR_D_ENC : MSA_2RF_FMT<0b110011011, 0b1, 0b011110>;
303
304class FILL_B_ENC : MSA_2R_FMT<0b11000000, 0b00, 0b011110>;
305class FILL_H_ENC : MSA_2R_FMT<0b11000000, 0b01, 0b011110>;
306class FILL_W_ENC : MSA_2R_FMT<0b11000000, 0b10, 0b011110>;
307
308class FLOG2_W_ENC : MSA_2RF_FMT<0b110010111, 0b0, 0b011110>;
309class FLOG2_D_ENC : MSA_2RF_FMT<0b110010111, 0b1, 0b011110>;
310
311class FMADD_W_ENC : MSA_3RF_FMT<0b0100, 0b0, 0b011011>;
312class FMADD_D_ENC : MSA_3RF_FMT<0b0100, 0b1, 0b011011>;
313
314class FMAX_W_ENC : MSA_3RF_FMT<0b1110, 0b0, 0b011011>;
315class FMAX_D_ENC : MSA_3RF_FMT<0b1110, 0b1, 0b011011>;
316
317class FMAX_A_W_ENC : MSA_3RF_FMT<0b1111, 0b0, 0b011011>;
318class FMAX_A_D_ENC : MSA_3RF_FMT<0b1111, 0b1, 0b011011>;
319
320class FMIN_W_ENC : MSA_3RF_FMT<0b1100, 0b0, 0b011011>;
321class FMIN_D_ENC : MSA_3RF_FMT<0b1100, 0b1, 0b011011>;
322
323class FMIN_A_W_ENC : MSA_3RF_FMT<0b1101, 0b0, 0b011011>;
324class FMIN_A_D_ENC : MSA_3RF_FMT<0b1101, 0b1, 0b011011>;
325
326class FMSUB_W_ENC : MSA_3RF_FMT<0b0101, 0b0, 0b011011>;
327class FMSUB_D_ENC : MSA_3RF_FMT<0b0101, 0b1, 0b011011>;
328
329class FMUL_W_ENC : MSA_3RF_FMT<0b0010, 0b0, 0b011011>;
330class FMUL_D_ENC : MSA_3RF_FMT<0b0010, 0b1, 0b011011>;
331
332class FRINT_W_ENC : MSA_2RF_FMT<0b110010110, 0b0, 0b011110>;
333class FRINT_D_ENC : MSA_2RF_FMT<0b110010110, 0b1, 0b011110>;
334
335class FRCP_W_ENC : MSA_2RF_FMT<0b110010101, 0b0, 0b011110>;
336class FRCP_D_ENC : MSA_2RF_FMT<0b110010101, 0b1, 0b011110>;
337
338class FRSQRT_W_ENC : MSA_2RF_FMT<0b110010100, 0b0, 0b011110>;
339class FRSQRT_D_ENC : MSA_2RF_FMT<0b110010100, 0b1, 0b011110>;
340
341class FSEQ_W_ENC : MSA_3RF_FMT<0b1010, 0b0, 0b011010>;
342class FSEQ_D_ENC : MSA_3RF_FMT<0b1010, 0b1, 0b011010>;
343
344class FSGE_W_ENC : MSA_3RF_FMT<0b1101, 0b0, 0b011010>;
345class FSGE_D_ENC : MSA_3RF_FMT<0b1101, 0b1, 0b011010>;
346
347class FSGT_W_ENC : MSA_3RF_FMT<0b1111, 0b0, 0b011010>;
348class FSGT_D_ENC : MSA_3RF_FMT<0b1111, 0b1, 0b011010>;
349
350class FSLE_W_ENC : MSA_3RF_FMT<0b1110, 0b0, 0b011010>;
351class FSLE_D_ENC : MSA_3RF_FMT<0b1110, 0b1, 0b011010>;
352
353class FSLT_W_ENC : MSA_3RF_FMT<0b1100, 0b0, 0b011010>;
354class FSLT_D_ENC : MSA_3RF_FMT<0b1100, 0b1, 0b011010>;
355
356class FSNE_W_ENC : MSA_3RF_FMT<0b1011, 0b0, 0b011010>;
357class FSNE_D_ENC : MSA_3RF_FMT<0b1011, 0b1, 0b011010>;
358
359class FSQRT_W_ENC : MSA_2RF_FMT<0b110010011, 0b0, 0b011110>;
360class FSQRT_D_ENC : MSA_2RF_FMT<0b110010011, 0b1, 0b011110>;
361
362class FSUB_W_ENC : MSA_3RF_FMT<0b0001, 0b0, 0b011011>;
363class FSUB_D_ENC : MSA_3RF_FMT<0b0001, 0b1, 0b011011>;
364
365class FTINT_S_W_ENC : MSA_2RF_FMT<0b110011100, 0b0, 0b011110>;
366class FTINT_S_D_ENC : MSA_2RF_FMT<0b110011100, 0b1, 0b011110>;
367
368class FTINT_U_W_ENC : MSA_2RF_FMT<0b110011101, 0b0, 0b011110>;
369class FTINT_U_D_ENC : MSA_2RF_FMT<0b110011101, 0b1, 0b011110>;
370
371class FTQ_H_ENC : MSA_3RF_FMT<0b1010, 0b0, 0b011011>;
372class FTQ_W_ENC : MSA_3RF_FMT<0b1010, 0b1, 0b011011>;
373
374class ILVEV_B_ENC : MSA_3R_FMT<0b110, 0b00, 0b010100>;
375class ILVEV_H_ENC : MSA_3R_FMT<0b110, 0b01, 0b010100>;
376class ILVEV_W_ENC : MSA_3R_FMT<0b110, 0b10, 0b010100>;
377class ILVEV_D_ENC : MSA_3R_FMT<0b110, 0b11, 0b010100>;
378
379class ILVL_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b010100>;
380class ILVL_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010100>;
381class ILVL_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010100>;
382class ILVL_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010100>;
383
384class ILVOD_B_ENC : MSA_3R_FMT<0b111, 0b00, 0b010100>;
385class ILVOD_H_ENC : MSA_3R_FMT<0b111, 0b01, 0b010100>;
386class ILVOD_W_ENC : MSA_3R_FMT<0b111, 0b10, 0b010100>;
387class ILVOD_D_ENC : MSA_3R_FMT<0b111, 0b11, 0b010100>;
388
389class ILVR_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b010100>;
390class ILVR_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010100>;
391class ILVR_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010100>;
392class ILVR_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010100>;
393
394class INSERT_B_ENC : MSA_ELM_B_FMT<0b0100, 0b011001>;
395class INSERT_H_ENC : MSA_ELM_H_FMT<0b0100, 0b011001>;
396class INSERT_W_ENC : MSA_ELM_W_FMT<0b0100, 0b011001>;
397
398class LD_B_ENC   : MSA_I5_FMT<0b110, 0b00, 0b000111>;
399class LD_H_ENC   : MSA_I5_FMT<0b110, 0b01, 0b000111>;
400class LD_W_ENC   : MSA_I5_FMT<0b110, 0b10, 0b000111>;
401class LD_D_ENC   : MSA_I5_FMT<0b110, 0b11, 0b000111>;
402
403class LDI_B_ENC   : MSA_I10_FMT<0b010, 0b00, 0b001100>;
404class LDI_H_ENC   : MSA_I10_FMT<0b010, 0b01, 0b001100>;
405class LDI_W_ENC   : MSA_I10_FMT<0b010, 0b10, 0b001100>;
406class LDI_D_ENC   : MSA_I10_FMT<0b010, 0b11, 0b001100>;
407
408class MADD_Q_H_ENC : MSA_3RF_FMT<0b0010, 0b0, 0b011100>;
409class MADD_Q_W_ENC : MSA_3RF_FMT<0b0010, 0b1, 0b011100>;
410
411class MADDR_Q_H_ENC : MSA_3RF_FMT<0b0011, 0b0, 0b011100>;
412class MADDR_Q_W_ENC : MSA_3RF_FMT<0b0011, 0b1, 0b011100>;
413
414class MADDV_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b010010>;
415class MADDV_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b010010>;
416class MADDV_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b010010>;
417class MADDV_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b010010>;
418
419class MAX_A_B_ENC : MSA_3R_FMT<0b110, 0b00, 0b001110>;
420class MAX_A_H_ENC : MSA_3R_FMT<0b110, 0b01, 0b001110>;
421class MAX_A_W_ENC : MSA_3R_FMT<0b110, 0b10, 0b001110>;
422class MAX_A_D_ENC : MSA_3R_FMT<0b110, 0b11, 0b001110>;
423
424class MAX_S_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b001110>;
425class MAX_S_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b001110>;
426class MAX_S_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b001110>;
427class MAX_S_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b001110>;
428
429class MAX_U_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b001110>;
430class MAX_U_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b001110>;
431class MAX_U_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b001110>;
432class MAX_U_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b001110>;
433
434class MAXI_S_B_ENC : MSA_I5_FMT<0b010, 0b00, 0b000110>;
435class MAXI_S_H_ENC : MSA_I5_FMT<0b010, 0b01, 0b000110>;
436class MAXI_S_W_ENC : MSA_I5_FMT<0b010, 0b10, 0b000110>;
437class MAXI_S_D_ENC : MSA_I5_FMT<0b010, 0b11, 0b000110>;
438
439class MAXI_U_B_ENC : MSA_I5_FMT<0b011, 0b00, 0b000110>;
440class MAXI_U_H_ENC : MSA_I5_FMT<0b011, 0b01, 0b000110>;
441class MAXI_U_W_ENC : MSA_I5_FMT<0b011, 0b10, 0b000110>;
442class MAXI_U_D_ENC : MSA_I5_FMT<0b011, 0b11, 0b000110>;
443
444class MIN_A_B_ENC : MSA_3R_FMT<0b111, 0b00, 0b001110>;
445class MIN_A_H_ENC : MSA_3R_FMT<0b111, 0b01, 0b001110>;
446class MIN_A_W_ENC : MSA_3R_FMT<0b111, 0b10, 0b001110>;
447class MIN_A_D_ENC : MSA_3R_FMT<0b111, 0b11, 0b001110>;
448
449class MIN_S_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b001110>;
450class MIN_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b001110>;
451class MIN_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b001110>;
452class MIN_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b001110>;
453
454class MIN_U_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b001110>;
455class MIN_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b001110>;
456class MIN_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b001110>;
457class MIN_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b001110>;
458
459class MINI_S_B_ENC : MSA_I5_FMT<0b100, 0b00, 0b000110>;
460class MINI_S_H_ENC : MSA_I5_FMT<0b100, 0b01, 0b000110>;
461class MINI_S_W_ENC : MSA_I5_FMT<0b100, 0b10, 0b000110>;
462class MINI_S_D_ENC : MSA_I5_FMT<0b100, 0b11, 0b000110>;
463
464class MINI_U_B_ENC : MSA_I5_FMT<0b101, 0b00, 0b000110>;
465class MINI_U_H_ENC : MSA_I5_FMT<0b101, 0b01, 0b000110>;
466class MINI_U_W_ENC : MSA_I5_FMT<0b101, 0b10, 0b000110>;
467class MINI_U_D_ENC : MSA_I5_FMT<0b101, 0b11, 0b000110>;
468
469class MOD_S_B_ENC : MSA_3R_FMT<0b110, 0b00, 0b010010>;
470class MOD_S_H_ENC : MSA_3R_FMT<0b110, 0b01, 0b010010>;
471class MOD_S_W_ENC : MSA_3R_FMT<0b110, 0b10, 0b010010>;
472class MOD_S_D_ENC : MSA_3R_FMT<0b110, 0b11, 0b010010>;
473
474class MOD_U_B_ENC : MSA_3R_FMT<0b111, 0b00, 0b010010>;
475class MOD_U_H_ENC : MSA_3R_FMT<0b111, 0b01, 0b010010>;
476class MOD_U_W_ENC : MSA_3R_FMT<0b111, 0b10, 0b010010>;
477class MOD_U_D_ENC : MSA_3R_FMT<0b111, 0b11, 0b010010>;
478
479class MSUB_Q_H_ENC : MSA_3RF_FMT<0b0100, 0b0, 0b011100>;
480class MSUB_Q_W_ENC : MSA_3RF_FMT<0b0100, 0b1, 0b011100>;
481
482class MSUBR_Q_H_ENC : MSA_3RF_FMT<0b0101, 0b0, 0b011100>;
483class MSUBR_Q_W_ENC : MSA_3RF_FMT<0b0101, 0b1, 0b011100>;
484
485class MSUBV_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b010010>;
486class MSUBV_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b010010>;
487class MSUBV_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b010010>;
488class MSUBV_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b010010>;
489
490class MUL_Q_H_ENC : MSA_3RF_FMT<0b0000, 0b0, 0b011100>;
491class MUL_Q_W_ENC : MSA_3RF_FMT<0b0000, 0b1, 0b011100>;
492
493class MULR_Q_H_ENC : MSA_3RF_FMT<0b0001, 0b0, 0b011100>;
494class MULR_Q_W_ENC : MSA_3RF_FMT<0b0001, 0b1, 0b011100>;
495
496class MULV_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b010010>;
497class MULV_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b010010>;
498class MULV_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b010010>;
499class MULV_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b010010>;
500
501class NLOC_B_ENC : MSA_2R_FMT<0b11000010, 0b00, 0b011110>;
502class NLOC_H_ENC : MSA_2R_FMT<0b11000010, 0b01, 0b011110>;
503class NLOC_W_ENC : MSA_2R_FMT<0b11000010, 0b10, 0b011110>;
504class NLOC_D_ENC : MSA_2R_FMT<0b11000010, 0b11, 0b011110>;
505
506class NLZC_B_ENC : MSA_2R_FMT<0b11000011, 0b00, 0b011110>;
507class NLZC_H_ENC : MSA_2R_FMT<0b11000011, 0b01, 0b011110>;
508class NLZC_W_ENC : MSA_2R_FMT<0b11000011, 0b10, 0b011110>;
509class NLZC_D_ENC : MSA_2R_FMT<0b11000011, 0b11, 0b011110>;
510
511class NORI_B_ENC : MSA_I8_FMT<0b10, 0b000000>;
512
513class ORI_B_ENC  : MSA_I8_FMT<0b01, 0b000000>;
514
515class PCKEV_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b010100>;
516class PCKEV_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b010100>;
517class PCKEV_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b010100>;
518class PCKEV_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b010100>;
519
520class PCKOD_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b010100>;
521class PCKOD_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b010100>;
522class PCKOD_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b010100>;
523class PCKOD_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b010100>;
524
525class PCNT_B_ENC : MSA_2R_FMT<0b11000001, 0b00, 0b011110>;
526class PCNT_H_ENC : MSA_2R_FMT<0b11000001, 0b01, 0b011110>;
527class PCNT_W_ENC : MSA_2R_FMT<0b11000001, 0b10, 0b011110>;
528class PCNT_D_ENC : MSA_2R_FMT<0b11000001, 0b11, 0b011110>;
529
530class SAT_S_B_ENC : MSA_BIT_B_FMT<0b000, 0b001010>;
531class SAT_S_H_ENC : MSA_BIT_H_FMT<0b000, 0b001010>;
532class SAT_S_W_ENC : MSA_BIT_W_FMT<0b000, 0b001010>;
533class SAT_S_D_ENC : MSA_BIT_D_FMT<0b000, 0b001010>;
534
535class SAT_U_B_ENC : MSA_BIT_B_FMT<0b001, 0b001010>;
536class SAT_U_H_ENC : MSA_BIT_H_FMT<0b001, 0b001010>;
537class SAT_U_W_ENC : MSA_BIT_W_FMT<0b001, 0b001010>;
538class SAT_U_D_ENC : MSA_BIT_D_FMT<0b001, 0b001010>;
539
540class SHF_B_ENC  : MSA_I8_FMT<0b00, 0b000010>;
541class SHF_H_ENC  : MSA_I8_FMT<0b01, 0b000010>;
542class SHF_W_ENC  : MSA_I8_FMT<0b10, 0b000010>;
543
544class SLD_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b010100>;
545class SLD_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b010100>;
546class SLD_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b010100>;
547class SLD_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b010100>;
548
549class SLDI_B_ENC : MSA_ELM_B_FMT<0b0000, 0b011001>;
550class SLDI_H_ENC : MSA_ELM_H_FMT<0b0000, 0b011001>;
551class SLDI_W_ENC : MSA_ELM_W_FMT<0b0000, 0b011001>;
552class SLDI_D_ENC : MSA_ELM_D_FMT<0b0000, 0b011001>;
553
554class SLL_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b001101>;
555class SLL_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b001101>;
556class SLL_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b001101>;
557class SLL_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b001101>;
558
559class SLLI_B_ENC : MSA_BIT_B_FMT<0b000, 0b001001>;
560class SLLI_H_ENC : MSA_BIT_H_FMT<0b000, 0b001001>;
561class SLLI_W_ENC : MSA_BIT_W_FMT<0b000, 0b001001>;
562class SLLI_D_ENC : MSA_BIT_D_FMT<0b000, 0b001001>;
563
564class SPLAT_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b010100>;
565class SPLAT_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b010100>;
566class SPLAT_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b010100>;
567class SPLAT_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b010100>;
568
569class SPLATI_B_ENC : MSA_ELM_B_FMT<0b0001, 0b011001>;
570class SPLATI_H_ENC : MSA_ELM_H_FMT<0b0001, 0b011001>;
571class SPLATI_W_ENC : MSA_ELM_W_FMT<0b0001, 0b011001>;
572class SPLATI_D_ENC : MSA_ELM_D_FMT<0b0001, 0b011001>;
573
574class SRA_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b001101>;
575class SRA_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b001101>;
576class SRA_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b001101>;
577class SRA_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b001101>;
578
579class SRAI_B_ENC : MSA_BIT_B_FMT<0b001, 0b001001>;
580class SRAI_H_ENC : MSA_BIT_H_FMT<0b001, 0b001001>;
581class SRAI_W_ENC : MSA_BIT_W_FMT<0b001, 0b001001>;
582class SRAI_D_ENC : MSA_BIT_D_FMT<0b001, 0b001001>;
583
584class SRL_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b001101>;
585class SRL_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b001101>;
586class SRL_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b001101>;
587class SRL_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b001101>;
588
589class SRLI_B_ENC : MSA_BIT_B_FMT<0b010, 0b001001>;
590class SRLI_H_ENC : MSA_BIT_H_FMT<0b010, 0b001001>;
591class SRLI_W_ENC : MSA_BIT_W_FMT<0b010, 0b001001>;
592class SRLI_D_ENC : MSA_BIT_D_FMT<0b010, 0b001001>;
593
594class ST_B_ENC   : MSA_I5_FMT<0b111, 0b00, 0b000111>;
595class ST_H_ENC   : MSA_I5_FMT<0b111, 0b01, 0b000111>;
596class ST_W_ENC   : MSA_I5_FMT<0b111, 0b10, 0b000111>;
597class ST_D_ENC   : MSA_I5_FMT<0b111, 0b11, 0b000111>;
598
599class SUBS_S_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b010001>;
600class SUBS_S_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b010001>;
601class SUBS_S_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b010001>;
602class SUBS_S_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b010001>;
603
604class SUBS_U_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b010001>;
605class SUBS_U_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b010001>;
606class SUBS_U_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b010001>;
607class SUBS_U_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b010001>;
608
609class SUBSUS_U_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b010001>;
610class SUBSUS_U_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b010001>;
611class SUBSUS_U_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b010001>;
612class SUBSUS_U_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b010001>;
613
614class SUBSUU_S_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b010001>;
615class SUBSUU_S_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b010001>;
616class SUBSUU_S_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b010001>;
617class SUBSUU_S_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b010001>;
618
619class SUBV_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b001110>;
620class SUBV_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b001110>;
621class SUBV_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b001110>;
622class SUBV_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b001110>;
623
624class SUBVI_B_ENC : MSA_I5_FMT<0b001, 0b00, 0b000110>;
625class SUBVI_H_ENC : MSA_I5_FMT<0b001, 0b01, 0b000110>;
626class SUBVI_W_ENC : MSA_I5_FMT<0b001, 0b10, 0b000110>;
627class SUBVI_D_ENC : MSA_I5_FMT<0b001, 0b11, 0b000110>;
628
629class VSHF_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b010101>;
630class VSHF_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b010101>;
631class VSHF_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b010101>;
632class VSHF_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b010101>;
633
634class XORI_B_ENC : MSA_I8_FMT<0b11, 0b000000>;
635
636// Instruction desc.
637class MSA_BIT_D_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
638                          InstrItinClass itin, RegisterClass RCWD,
639                          RegisterClass RCWS> {
640  dag OutOperandList = (outs RCWD:$wd);
641  dag InOperandList = (ins RCWS:$ws, uimm6:$u6);
642  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $u6");
643  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, immZExt6:$u6))];
644  InstrItinClass Itinerary = itin;
645}
646
647class MSA_BIT_W_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
648                          InstrItinClass itin, RegisterClass RCWD,
649                          RegisterClass RCWS> {
650  dag OutOperandList = (outs RCWD:$wd);
651  dag InOperandList = (ins RCWS:$ws, uimm5:$u5);
652  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $u5");
653  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, immZExt5:$u5))];
654  InstrItinClass Itinerary = itin;
655}
656
657class MSA_BIT_H_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
658                          InstrItinClass itin, RegisterClass RCWD,
659                          RegisterClass RCWS> {
660  dag OutOperandList = (outs RCWD:$wd);
661  dag InOperandList = (ins RCWS:$ws, uimm4:$u4);
662  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $u4");
663  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, immZExt4:$u4))];
664  InstrItinClass Itinerary = itin;
665}
666
667class MSA_BIT_B_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
668                          InstrItinClass itin, RegisterClass RCWD,
669                          RegisterClass RCWS> {
670  dag OutOperandList = (outs RCWD:$wd);
671  dag InOperandList = (ins RCWS:$ws, uimm3:$u3);
672  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $u3");
673  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, immZExt3:$u3))];
674  InstrItinClass Itinerary = itin;
675}
676
677class MSA_COPY_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
678                         InstrItinClass itin, RegisterClass RCD,
679                         RegisterClass RCWS> {
680  dag OutOperandList = (outs RCD:$rd);
681  dag InOperandList = (ins RCWS:$ws, uimm6:$n);
682  string AsmString = !strconcat(instr_asm, "\t$rd, $ws[$n]");
683  list<dag> Pattern = [(set RCD:$rd, (OpNode RCWS:$ws, immZExt6:$n))];
684  InstrItinClass Itinerary = itin;
685}
686
687class MSA_I5_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
688                       InstrItinClass itin, RegisterClass RCWD,
689                       RegisterClass RCWS> {
690  dag OutOperandList = (outs RCWD:$wd);
691  dag InOperandList = (ins RCWS:$ws, uimm5:$u5);
692  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $u5");
693  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, immZExt5:$u5))];
694  InstrItinClass Itinerary = itin;
695}
696
697class MSA_SI5_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
698                       InstrItinClass itin, RegisterClass RCWD,
699                       RegisterClass RCWS> {
700  dag OutOperandList = (outs RCWD:$wd);
701  dag InOperandList = (ins RCWS:$ws, simm5:$s5);
702  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $s5");
703  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, immSExt5:$s5))];
704  InstrItinClass Itinerary = itin;
705}
706
707class MSA_I8_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
708                       InstrItinClass itin, RegisterClass RCWD,
709                       RegisterClass RCWS> {
710  dag OutOperandList = (outs RCWD:$wd);
711  dag InOperandList = (ins RCWS:$ws, uimm8:$u8);
712  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $u8");
713  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, immZExt8:$u8))];
714  InstrItinClass Itinerary = itin;
715}
716
717class MSA_I10_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
718                        InstrItinClass itin, RegisterClass RCWD> {
719  dag OutOperandList = (outs RCWD:$wd);
720  dag InOperandList = (ins simm10:$i10);
721  string AsmString = !strconcat(instr_asm, "\t$wd, $i10");
722  list<dag> Pattern = [(set RCWD:$wd, (OpNode immSExt10:$i10))];
723  InstrItinClass Itinerary = itin;
724}
725
726class MSA_2R_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
727                       InstrItinClass itin, RegisterClass RCWD,
728                       RegisterClass RCWS> {
729  dag OutOperandList = (outs RCWD:$wd);
730  dag InOperandList = (ins RCWS:$ws);
731  string AsmString = !strconcat(instr_asm, "\t$wd, $ws");
732  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws))];
733  InstrItinClass Itinerary = itin;
734}
735
736class MSA_2RF_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
737                        InstrItinClass itin, RegisterClass RCWD,
738                        RegisterClass RCWS> :
739  MSA_2R_DESC_BASE<instr_asm, OpNode, itin, RCWD, RCWS>;
740
741
742class MSA_3R_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
743                       InstrItinClass itin, RegisterClass RCWD,
744                       RegisterClass RCWS,  RegisterClass RCWT = RCWS> {
745  dag OutOperandList = (outs RCWD:$wd);
746  dag InOperandList = (ins RCWS:$ws, RCWT:$wt);
747  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $wt");
748  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, RCWT:$wt))];
749  InstrItinClass Itinerary = itin;
750}
751
752class MSA_3R_4R_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
753                          InstrItinClass itin, RegisterClass RCWD,
754                          RegisterClass RCWS,  RegisterClass RCWT = RCWS> {
755  dag OutOperandList = (outs RCWD:$wd);
756  dag InOperandList = (ins RCWD:$wd_in, RCWS:$ws, RCWT:$wt);
757  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $wt");
758  list<dag> Pattern = [(set RCWD:$wd,
759                       (OpNode RCWD:$wd_in, RCWS:$ws, RCWT:$wt))];
760  InstrItinClass Itinerary = itin;
761  string Constraints = "$wd = $wd_in";
762}
763
764class MSA_3RF_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
765                        InstrItinClass itin, RegisterClass RCWD,
766                        RegisterClass RCWS,  RegisterClass RCWT = RCWS> :
767  MSA_3R_DESC_BASE<instr_asm, OpNode, itin, RCWD, RCWS, RCWT>;
768
769class MSA_3RF_4RF_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
770                            InstrItinClass itin, RegisterClass RCWD,
771                            RegisterClass RCWS,  RegisterClass RCWT = RCWS> :
772  MSA_3R_4R_DESC_BASE<instr_asm, OpNode, itin, RCWD, RCWS, RCWT>;
773
774class MSA_INSERT_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
775                           InstrItinClass itin, RegisterClass RCD,
776                           RegisterClass RCWS> {
777  dag OutOperandList = (outs RCD:$wd);
778  dag InOperandList = (ins RCD:$wd_in, uimm6:$n, RCWS:$rs);
779  string AsmString = !strconcat(instr_asm, "\t$wd[$n], $rs");
780  list<dag> Pattern = [(set RCD:$wd, (OpNode RCD:$wd_in,
781                                             immZExt6:$n,
782                                             RCWS:$rs))];
783  InstrItinClass Itinerary = itin;
784  string Constraints = "$wd = $wd_in";
785}
786
787class ADD_A_B_DESC : MSA_3R_DESC_BASE<"add_a.b", int_mips_add_a_b, NoItinerary,
788                                      MSA128, MSA128>, IsCommutable;
789class ADD_A_H_DESC : MSA_3R_DESC_BASE<"add_a.h", int_mips_add_a_h, NoItinerary,
790                                      MSA128, MSA128>, IsCommutable;
791class ADD_A_W_DESC : MSA_3R_DESC_BASE<"add_a.w", int_mips_add_a_w, NoItinerary,
792                                      MSA128, MSA128>, IsCommutable;
793class ADD_A_D_DESC : MSA_3R_DESC_BASE<"add_a.d", int_mips_add_a_d, NoItinerary,
794                                      MSA128, MSA128>, IsCommutable;
795
796class ADDS_A_B_DESC : MSA_3R_DESC_BASE<"adds_a.b", int_mips_adds_a_b,
797                                       NoItinerary, MSA128, MSA128>,
798                                       IsCommutable;
799class ADDS_A_H_DESC : MSA_3R_DESC_BASE<"adds_a.h", int_mips_adds_a_h,
800                                       NoItinerary, MSA128, MSA128>,
801                                       IsCommutable;
802class ADDS_A_W_DESC : MSA_3R_DESC_BASE<"adds_a.w", int_mips_adds_a_w,
803                                       NoItinerary, MSA128, MSA128>,
804                                       IsCommutable;
805class ADDS_A_D_DESC : MSA_3R_DESC_BASE<"adds_a.d", int_mips_adds_a_d,
806                                       NoItinerary, MSA128, MSA128>,
807                                       IsCommutable;
808
809class ADDS_S_B_DESC : MSA_3R_DESC_BASE<"adds_s.b", int_mips_adds_s_b,
810                                       NoItinerary, MSA128, MSA128>,
811                                       IsCommutable;
812class ADDS_S_H_DESC : MSA_3R_DESC_BASE<"adds_s.h", int_mips_adds_s_h,
813                                       NoItinerary, MSA128, MSA128>,
814                                       IsCommutable;
815class ADDS_S_W_DESC : MSA_3R_DESC_BASE<"adds_s.w", int_mips_adds_s_w,
816                                       NoItinerary, MSA128, MSA128>,
817                                       IsCommutable;
818class ADDS_S_D_DESC : MSA_3R_DESC_BASE<"adds_s.d", int_mips_adds_s_d,
819                                       NoItinerary, MSA128, MSA128>,
820                                       IsCommutable;
821
822class ADDS_U_B_DESC : MSA_3R_DESC_BASE<"adds_u.b", int_mips_adds_u_b,
823                                       NoItinerary, MSA128, MSA128>,
824                                       IsCommutable;
825class ADDS_U_H_DESC : MSA_3R_DESC_BASE<"adds_u.h", int_mips_adds_u_h,
826                                       NoItinerary, MSA128, MSA128>,
827                                       IsCommutable;
828class ADDS_U_W_DESC : MSA_3R_DESC_BASE<"adds_u.w", int_mips_adds_u_w,
829                                       NoItinerary, MSA128, MSA128>,
830                                       IsCommutable;
831class ADDS_U_D_DESC : MSA_3R_DESC_BASE<"adds_u.d", int_mips_adds_u_d,
832                                       NoItinerary, MSA128, MSA128>,
833                                       IsCommutable;
834
835class ADDV_B_DESC : MSA_3R_DESC_BASE<"addv.b", int_mips_addv_b, NoItinerary,
836                                     MSA128, MSA128>, IsCommutable;
837class ADDV_H_DESC : MSA_3R_DESC_BASE<"addv.h", int_mips_addv_h, NoItinerary,
838                                     MSA128, MSA128>, IsCommutable;
839class ADDV_W_DESC : MSA_3R_DESC_BASE<"addv.w", int_mips_addv_w, NoItinerary,
840                                     MSA128, MSA128>, IsCommutable;
841class ADDV_D_DESC : MSA_3R_DESC_BASE<"addv.d", int_mips_addv_d, NoItinerary,
842                                     MSA128, MSA128>, IsCommutable;
843
844class ADDVI_B_DESC : MSA_I5_DESC_BASE<"addvi.b", int_mips_addvi_b, NoItinerary,
845                                      MSA128, MSA128>;
846class ADDVI_H_DESC : MSA_I5_DESC_BASE<"addvi.h", int_mips_addvi_h, NoItinerary,
847                                      MSA128, MSA128>;
848class ADDVI_W_DESC : MSA_I5_DESC_BASE<"addvi.w", int_mips_addvi_w, NoItinerary,
849                                      MSA128, MSA128>;
850class ADDVI_D_DESC : MSA_I5_DESC_BASE<"addvi.d", int_mips_addvi_d, NoItinerary,
851                                      MSA128, MSA128>;
852
853class ANDI_B_DESC : MSA_I8_DESC_BASE<"andi.b", int_mips_andi_b, NoItinerary,
854                                     MSA128, MSA128>;
855
856class ASUB_S_B_DESC : MSA_3R_DESC_BASE<"asub_s.b", int_mips_asub_s_b,
857                                       NoItinerary, MSA128, MSA128>;
858class ASUB_S_H_DESC : MSA_3R_DESC_BASE<"asub_s.h", int_mips_asub_s_h,
859                                       NoItinerary, MSA128, MSA128>;
860class ASUB_S_W_DESC : MSA_3R_DESC_BASE<"asub_s.w", int_mips_asub_s_w,
861                                       NoItinerary, MSA128, MSA128>;
862class ASUB_S_D_DESC : MSA_3R_DESC_BASE<"asub_s.d", int_mips_asub_s_d,
863                                       NoItinerary, MSA128, MSA128>;
864
865class ASUB_U_B_DESC : MSA_3R_DESC_BASE<"asub_u.b", int_mips_asub_u_b,
866                                       NoItinerary, MSA128, MSA128>;
867class ASUB_U_H_DESC : MSA_3R_DESC_BASE<"asub_u.h", int_mips_asub_u_h,
868                                       NoItinerary, MSA128, MSA128>;
869class ASUB_U_W_DESC : MSA_3R_DESC_BASE<"asub_u.w", int_mips_asub_u_w,
870                                       NoItinerary, MSA128, MSA128>;
871class ASUB_U_D_DESC : MSA_3R_DESC_BASE<"asub_u.d", int_mips_asub_u_d,
872                                       NoItinerary, MSA128, MSA128>;
873
874class AVE_S_B_DESC : MSA_3R_DESC_BASE<"ave_s.b", int_mips_ave_s_b, NoItinerary,
875                                       MSA128, MSA128>, IsCommutable;
876class AVE_S_H_DESC : MSA_3R_DESC_BASE<"ave_s.h", int_mips_ave_s_h, NoItinerary,
877                                       MSA128, MSA128>, IsCommutable;
878class AVE_S_W_DESC : MSA_3R_DESC_BASE<"ave_s.w", int_mips_ave_s_w, NoItinerary,
879                                       MSA128, MSA128>, IsCommutable;
880class AVE_S_D_DESC : MSA_3R_DESC_BASE<"ave_s.d", int_mips_ave_s_d, NoItinerary,
881                                       MSA128, MSA128>, IsCommutable;
882
883class AVE_U_B_DESC : MSA_3R_DESC_BASE<"ave_u.b", int_mips_ave_u_b, NoItinerary,
884                                       MSA128, MSA128>, IsCommutable;
885class AVE_U_H_DESC : MSA_3R_DESC_BASE<"ave_u.h", int_mips_ave_u_h, NoItinerary,
886                                       MSA128, MSA128>, IsCommutable;
887class AVE_U_W_DESC : MSA_3R_DESC_BASE<"ave_u.w", int_mips_ave_u_w, NoItinerary,
888                                       MSA128, MSA128>, IsCommutable;
889class AVE_U_D_DESC : MSA_3R_DESC_BASE<"ave_u.d", int_mips_ave_u_d, NoItinerary,
890                                       MSA128, MSA128>, IsCommutable;
891
892class AVER_S_B_DESC : MSA_3R_DESC_BASE<"aver_s.b", int_mips_aver_s_b,
893                                       NoItinerary, MSA128, MSA128>,
894                                       IsCommutable;
895class AVER_S_H_DESC : MSA_3R_DESC_BASE<"aver_s.h", int_mips_aver_s_h,
896                                       NoItinerary, MSA128, MSA128>,
897                                       IsCommutable;
898class AVER_S_W_DESC : MSA_3R_DESC_BASE<"aver_s.w", int_mips_aver_s_w,
899                                       NoItinerary, MSA128, MSA128>,
900                                       IsCommutable;
901class AVER_S_D_DESC : MSA_3R_DESC_BASE<"aver_s.d", int_mips_aver_s_d,
902                                       NoItinerary, MSA128, MSA128>,
903                                       IsCommutable;
904
905class AVER_U_B_DESC : MSA_3R_DESC_BASE<"aver_u.b", int_mips_aver_u_b,
906                                       NoItinerary, MSA128, MSA128>,
907                                       IsCommutable;
908class AVER_U_H_DESC : MSA_3R_DESC_BASE<"aver_u.h", int_mips_aver_u_h,
909                                       NoItinerary, MSA128, MSA128>,
910                                       IsCommutable;
911class AVER_U_W_DESC : MSA_3R_DESC_BASE<"aver_u.w", int_mips_aver_u_w,
912                                       NoItinerary, MSA128, MSA128>,
913                                       IsCommutable;
914class AVER_U_D_DESC : MSA_3R_DESC_BASE<"aver_u.d", int_mips_aver_u_d,
915                                       NoItinerary, MSA128, MSA128>,
916                                       IsCommutable;
917
918class BCLR_B_DESC : MSA_3R_DESC_BASE<"bclr.b", int_mips_bclr_b, NoItinerary,
919                                     MSA128, MSA128>;
920class BCLR_H_DESC : MSA_3R_DESC_BASE<"bclr.h", int_mips_bclr_h, NoItinerary,
921                                     MSA128, MSA128>;
922class BCLR_W_DESC : MSA_3R_DESC_BASE<"bclr.w", int_mips_bclr_w, NoItinerary,
923                                     MSA128, MSA128>;
924class BCLR_D_DESC : MSA_3R_DESC_BASE<"bclr.d", int_mips_bclr_d, NoItinerary,
925                                     MSA128, MSA128>;
926
927class BCLRI_B_DESC : MSA_BIT_B_DESC_BASE<"bclri.b", int_mips_bclri_b,
928                                         NoItinerary, MSA128, MSA128>;
929class BCLRI_H_DESC : MSA_BIT_H_DESC_BASE<"bclri.h", int_mips_bclri_h,
930                                         NoItinerary, MSA128, MSA128>;
931class BCLRI_W_DESC : MSA_BIT_W_DESC_BASE<"bclri.w", int_mips_bclri_w,
932                                         NoItinerary, MSA128, MSA128>;
933class BCLRI_D_DESC : MSA_BIT_D_DESC_BASE<"bclri.d", int_mips_bclri_d,
934                                         NoItinerary, MSA128, MSA128>;
935
936class BINSL_B_DESC : MSA_3R_DESC_BASE<"binsl.b", int_mips_binsl_b, NoItinerary,
937                                      MSA128, MSA128>;
938class BINSL_H_DESC : MSA_3R_DESC_BASE<"binsl.h", int_mips_binsl_h, NoItinerary,
939                                      MSA128, MSA128>;
940class BINSL_W_DESC : MSA_3R_DESC_BASE<"binsl.w", int_mips_binsl_w, NoItinerary,
941                                      MSA128, MSA128>;
942class BINSL_D_DESC : MSA_3R_DESC_BASE<"binsl.d", int_mips_binsl_d, NoItinerary,
943                                      MSA128, MSA128>;
944
945class BINSLI_B_DESC : MSA_BIT_B_DESC_BASE<"binsli.b", int_mips_binsli_b,
946                                          NoItinerary, MSA128, MSA128>;
947class BINSLI_H_DESC : MSA_BIT_H_DESC_BASE<"binsli.h", int_mips_binsli_h,
948                                          NoItinerary, MSA128, MSA128>;
949class BINSLI_W_DESC : MSA_BIT_W_DESC_BASE<"binsli.w", int_mips_binsli_w,
950                                          NoItinerary, MSA128, MSA128>;
951class BINSLI_D_DESC : MSA_BIT_D_DESC_BASE<"binsli.d", int_mips_binsli_d,
952                                          NoItinerary, MSA128, MSA128>;
953
954class BINSR_B_DESC : MSA_3R_DESC_BASE<"binsr.b", int_mips_binsr_b, NoItinerary,
955                                      MSA128, MSA128>;
956class BINSR_H_DESC : MSA_3R_DESC_BASE<"binsr.h", int_mips_binsr_h, NoItinerary,
957                                      MSA128, MSA128>;
958class BINSR_W_DESC : MSA_3R_DESC_BASE<"binsr.w", int_mips_binsr_w, NoItinerary,
959                                      MSA128, MSA128>;
960class BINSR_D_DESC : MSA_3R_DESC_BASE<"binsr.d", int_mips_binsr_d, NoItinerary,
961                                      MSA128, MSA128>;
962
963class BINSRI_B_DESC : MSA_BIT_B_DESC_BASE<"binsri.b", int_mips_binsri_b,
964                                          NoItinerary, MSA128, MSA128>;
965class BINSRI_H_DESC : MSA_BIT_H_DESC_BASE<"binsri.h", int_mips_binsri_h,
966                                          NoItinerary, MSA128, MSA128>;
967class BINSRI_W_DESC : MSA_BIT_W_DESC_BASE<"binsri.w", int_mips_binsri_w,
968                                          NoItinerary, MSA128, MSA128>;
969class BINSRI_D_DESC : MSA_BIT_D_DESC_BASE<"binsri.d", int_mips_binsri_d,
970                                          NoItinerary, MSA128, MSA128>;
971
972class BMNZI_B_DESC : MSA_I8_DESC_BASE<"bmnzi.b", int_mips_bmnzi_b, NoItinerary,
973                                      MSA128, MSA128>;
974
975class BMZI_B_DESC : MSA_I8_DESC_BASE<"bmzi.b", int_mips_bmzi_b, NoItinerary,
976                                     MSA128, MSA128>;
977
978class BNEG_B_DESC : MSA_3R_DESC_BASE<"bneg.b", int_mips_bneg_b, NoItinerary,
979                                     MSA128, MSA128>;
980class BNEG_H_DESC : MSA_3R_DESC_BASE<"bneg.h", int_mips_bneg_h, NoItinerary,
981                                     MSA128, MSA128>;
982class BNEG_W_DESC : MSA_3R_DESC_BASE<"bneg.w", int_mips_bneg_w, NoItinerary,
983                                     MSA128, MSA128>;
984class BNEG_D_DESC : MSA_3R_DESC_BASE<"bneg.d", int_mips_bneg_d, NoItinerary,
985                                     MSA128, MSA128>;
986
987class BNEGI_B_DESC : MSA_BIT_B_DESC_BASE<"bnegi.b", int_mips_bnegi_b,
988                                         NoItinerary, MSA128, MSA128>;
989class BNEGI_H_DESC : MSA_BIT_H_DESC_BASE<"bnegi.h", int_mips_bnegi_h,
990                                         NoItinerary, MSA128, MSA128>;
991class BNEGI_W_DESC : MSA_BIT_W_DESC_BASE<"bnegi.w", int_mips_bnegi_w,
992                                         NoItinerary, MSA128, MSA128>;
993class BNEGI_D_DESC : MSA_BIT_D_DESC_BASE<"bnegi.d", int_mips_bnegi_d,
994                                         NoItinerary, MSA128, MSA128>;
995
996class BSELI_B_DESC : MSA_I8_DESC_BASE<"bseli.b", int_mips_bseli_b, NoItinerary,
997                                      MSA128, MSA128>;
998
999class BSET_B_DESC : MSA_3R_DESC_BASE<"bset.b", int_mips_bset_b, NoItinerary,
1000                                     MSA128, MSA128>;
1001class BSET_H_DESC : MSA_3R_DESC_BASE<"bset.h", int_mips_bset_h, NoItinerary,
1002                                     MSA128, MSA128>;
1003class BSET_W_DESC : MSA_3R_DESC_BASE<"bset.w", int_mips_bset_w, NoItinerary,
1004                                     MSA128, MSA128>;
1005class BSET_D_DESC : MSA_3R_DESC_BASE<"bset.d", int_mips_bset_d, NoItinerary,
1006                                     MSA128, MSA128>;
1007
1008class BSETI_B_DESC : MSA_BIT_B_DESC_BASE<"bseti.b", int_mips_bseti_b,
1009                                         NoItinerary, MSA128, MSA128>;
1010class BSETI_H_DESC : MSA_BIT_H_DESC_BASE<"bseti.h", int_mips_bseti_h,
1011                                         NoItinerary, MSA128, MSA128>;
1012class BSETI_W_DESC : MSA_BIT_W_DESC_BASE<"bseti.w", int_mips_bseti_w,
1013                                         NoItinerary, MSA128, MSA128>;
1014class BSETI_D_DESC : MSA_BIT_D_DESC_BASE<"bseti.d", int_mips_bseti_d,
1015                                         NoItinerary, MSA128, MSA128>;
1016
1017class CEQ_B_DESC : MSA_3R_DESC_BASE<"ceq.b", int_mips_ceq_b, NoItinerary,
1018                                    MSA128, MSA128>, IsCommutable;
1019class CEQ_H_DESC : MSA_3R_DESC_BASE<"ceq.h", int_mips_ceq_h, NoItinerary,
1020                                    MSA128, MSA128>, IsCommutable;
1021class CEQ_W_DESC : MSA_3R_DESC_BASE<"ceq.w", int_mips_ceq_w, NoItinerary,
1022                                    MSA128, MSA128>, IsCommutable;
1023class CEQ_D_DESC : MSA_3R_DESC_BASE<"ceq.d", int_mips_ceq_d, NoItinerary,
1024                                    MSA128, MSA128>, IsCommutable;
1025
1026class CEQI_B_DESC : MSA_SI5_DESC_BASE<"ceqi.b", int_mips_ceqi_b, NoItinerary,
1027                                      MSA128, MSA128>;
1028class CEQI_H_DESC : MSA_SI5_DESC_BASE<"ceqi.h", int_mips_ceqi_h, NoItinerary,
1029                                      MSA128, MSA128>;
1030class CEQI_W_DESC : MSA_SI5_DESC_BASE<"ceqi.w", int_mips_ceqi_w, NoItinerary,
1031                                      MSA128, MSA128>;
1032class CEQI_D_DESC : MSA_SI5_DESC_BASE<"ceqi.d", int_mips_ceqi_d, NoItinerary,
1033                                      MSA128, MSA128>;
1034
1035class CLE_S_B_DESC : MSA_3R_DESC_BASE<"cle_s.b", int_mips_cle_s_b, NoItinerary,
1036                                      MSA128, MSA128>;
1037class CLE_S_H_DESC : MSA_3R_DESC_BASE<"cle_s.h", int_mips_cle_s_h, NoItinerary,
1038                                      MSA128, MSA128>;
1039class CLE_S_W_DESC : MSA_3R_DESC_BASE<"cle_s.w", int_mips_cle_s_w, NoItinerary,
1040                                      MSA128, MSA128>;
1041class CLE_S_D_DESC : MSA_3R_DESC_BASE<"cle_s.d", int_mips_cle_s_d, NoItinerary,
1042                                      MSA128, MSA128>;
1043
1044class CLE_U_B_DESC : MSA_3R_DESC_BASE<"cle_u.b", int_mips_cle_u_b, NoItinerary,
1045                                      MSA128, MSA128>;
1046class CLE_U_H_DESC : MSA_3R_DESC_BASE<"cle_u.h", int_mips_cle_u_h, NoItinerary,
1047                                      MSA128, MSA128>;
1048class CLE_U_W_DESC : MSA_3R_DESC_BASE<"cle_u.w", int_mips_cle_u_w, NoItinerary,
1049                                      MSA128, MSA128>;
1050class CLE_U_D_DESC : MSA_3R_DESC_BASE<"cle_u.d", int_mips_cle_u_d, NoItinerary,
1051                                      MSA128, MSA128>;
1052
1053class CLEI_S_B_DESC : MSA_SI5_DESC_BASE<"clei_s.b", int_mips_clei_s_b,
1054                                        NoItinerary, MSA128, MSA128>;
1055class CLEI_S_H_DESC : MSA_SI5_DESC_BASE<"clei_s.h", int_mips_clei_s_h,
1056                                        NoItinerary, MSA128, MSA128>;
1057class CLEI_S_W_DESC : MSA_SI5_DESC_BASE<"clei_s.w", int_mips_clei_s_w,
1058                                        NoItinerary, MSA128, MSA128>;
1059class CLEI_S_D_DESC : MSA_SI5_DESC_BASE<"clei_s.d", int_mips_clei_s_d,
1060                                        NoItinerary, MSA128, MSA128>;
1061
1062class CLEI_U_B_DESC : MSA_SI5_DESC_BASE<"clei_u.b", int_mips_clei_u_b,
1063                                        NoItinerary, MSA128, MSA128>;
1064class CLEI_U_H_DESC : MSA_SI5_DESC_BASE<"clei_u.h", int_mips_clei_u_h,
1065                                        NoItinerary, MSA128, MSA128>;
1066class CLEI_U_W_DESC : MSA_SI5_DESC_BASE<"clei_u.w", int_mips_clei_u_w,
1067                                        NoItinerary, MSA128, MSA128>;
1068class CLEI_U_D_DESC : MSA_SI5_DESC_BASE<"clei_u.d", int_mips_clei_u_d,
1069                                        NoItinerary, MSA128, MSA128>;
1070
1071class CLT_S_B_DESC : MSA_3R_DESC_BASE<"clt_s.b", int_mips_clt_s_b, NoItinerary,
1072                                      MSA128, MSA128>;
1073class CLT_S_H_DESC : MSA_3R_DESC_BASE<"clt_s.h", int_mips_clt_s_h, NoItinerary,
1074                                      MSA128, MSA128>;
1075class CLT_S_W_DESC : MSA_3R_DESC_BASE<"clt_s.w", int_mips_clt_s_w, NoItinerary,
1076                                      MSA128, MSA128>;
1077class CLT_S_D_DESC : MSA_3R_DESC_BASE<"clt_s.d", int_mips_clt_s_d, NoItinerary,
1078                                      MSA128, MSA128>;
1079
1080class CLT_U_B_DESC : MSA_3R_DESC_BASE<"clt_u.b", int_mips_clt_u_b, NoItinerary,
1081                                      MSA128, MSA128>;
1082class CLT_U_H_DESC : MSA_3R_DESC_BASE<"clt_u.h", int_mips_clt_u_h, NoItinerary,
1083                                      MSA128, MSA128>;
1084class CLT_U_W_DESC : MSA_3R_DESC_BASE<"clt_u.w", int_mips_clt_u_w, NoItinerary,
1085                                      MSA128, MSA128>;
1086class CLT_U_D_DESC : MSA_3R_DESC_BASE<"clt_u.d", int_mips_clt_u_d, NoItinerary,
1087                                      MSA128, MSA128>;
1088
1089class CLTI_S_B_DESC : MSA_SI5_DESC_BASE<"clti_s.b", int_mips_clti_s_b,
1090                                        NoItinerary, MSA128, MSA128>;
1091class CLTI_S_H_DESC : MSA_SI5_DESC_BASE<"clti_s.h", int_mips_clti_s_h,
1092                                        NoItinerary, MSA128, MSA128>;
1093class CLTI_S_W_DESC : MSA_SI5_DESC_BASE<"clti_s.w", int_mips_clti_s_w,
1094                                        NoItinerary, MSA128, MSA128>;
1095class CLTI_S_D_DESC : MSA_SI5_DESC_BASE<"clti_s.d", int_mips_clti_s_d,
1096                                        NoItinerary, MSA128, MSA128>;
1097
1098class CLTI_U_B_DESC : MSA_SI5_DESC_BASE<"clti_u.b", int_mips_clti_u_b,
1099                                        NoItinerary, MSA128, MSA128>;
1100class CLTI_U_H_DESC : MSA_SI5_DESC_BASE<"clti_u.h", int_mips_clti_u_h,
1101                                        NoItinerary, MSA128, MSA128>;
1102class CLTI_U_W_DESC : MSA_SI5_DESC_BASE<"clti_u.w", int_mips_clti_u_w,
1103                                        NoItinerary, MSA128, MSA128>;
1104class CLTI_U_D_DESC : MSA_SI5_DESC_BASE<"clti_u.d", int_mips_clti_u_d,
1105                                        NoItinerary, MSA128, MSA128>;
1106
1107class COPY_S_B_DESC : MSA_COPY_DESC_BASE<"copy_s.b", int_mips_copy_s_b,
1108                                         NoItinerary, GPR32, MSA128>;
1109class COPY_S_H_DESC : MSA_COPY_DESC_BASE<"copy_s.h", int_mips_copy_s_h,
1110                                         NoItinerary, GPR32, MSA128>;
1111class COPY_S_W_DESC : MSA_COPY_DESC_BASE<"copy_s.w", int_mips_copy_s_w,
1112                                         NoItinerary, GPR32, MSA128>;
1113
1114class COPY_U_B_DESC : MSA_COPY_DESC_BASE<"copy_u.b", int_mips_copy_u_b,
1115                                         NoItinerary, GPR32, MSA128>;
1116class COPY_U_H_DESC : MSA_COPY_DESC_BASE<"copy_u.h", int_mips_copy_u_h,
1117                                         NoItinerary, GPR32, MSA128>;
1118class COPY_U_W_DESC : MSA_COPY_DESC_BASE<"copy_u.w", int_mips_copy_u_w,
1119                                         NoItinerary, GPR32, MSA128>;
1120
1121class DIV_S_B_DESC : MSA_3R_DESC_BASE<"div_s.b", int_mips_div_s_b, NoItinerary,
1122                                      MSA128, MSA128>;
1123class DIV_S_H_DESC : MSA_3R_DESC_BASE<"div_s.h", int_mips_div_s_h, NoItinerary,
1124                                      MSA128, MSA128>;
1125class DIV_S_W_DESC : MSA_3R_DESC_BASE<"div_s.w", int_mips_div_s_w, NoItinerary,
1126                                      MSA128, MSA128>;
1127class DIV_S_D_DESC : MSA_3R_DESC_BASE<"div_s.d", int_mips_div_s_d, NoItinerary,
1128                                      MSA128, MSA128>;
1129
1130class DIV_U_B_DESC : MSA_3R_DESC_BASE<"div_u.b", int_mips_div_u_b, NoItinerary,
1131                                      MSA128, MSA128>;
1132class DIV_U_H_DESC : MSA_3R_DESC_BASE<"div_u.h", int_mips_div_u_h, NoItinerary,
1133                                      MSA128, MSA128>;
1134class DIV_U_W_DESC : MSA_3R_DESC_BASE<"div_u.w", int_mips_div_u_w, NoItinerary,
1135                                      MSA128, MSA128>;
1136class DIV_U_D_DESC : MSA_3R_DESC_BASE<"div_u.d", int_mips_div_u_d, NoItinerary,
1137                                      MSA128, MSA128>;
1138
1139class DOTP_S_B_DESC : MSA_3R_DESC_BASE<"dotp_s.b", int_mips_dotp_s_b,
1140                                       NoItinerary, MSA128, MSA128>,
1141                                       IsCommutable;
1142class DOTP_S_H_DESC : MSA_3R_DESC_BASE<"dotp_s.h", int_mips_dotp_s_h,
1143                                       NoItinerary, MSA128, MSA128>,
1144                                       IsCommutable;
1145class DOTP_S_W_DESC : MSA_3R_DESC_BASE<"dotp_s.w", int_mips_dotp_s_w,
1146                                       NoItinerary, MSA128, MSA128>,
1147                                       IsCommutable;
1148class DOTP_S_D_DESC : MSA_3R_DESC_BASE<"dotp_s.d", int_mips_dotp_s_d,
1149                                       NoItinerary, MSA128, MSA128>,
1150                                       IsCommutable;
1151
1152class DOTP_U_B_DESC : MSA_3R_DESC_BASE<"dotp_u.b", int_mips_dotp_u_b,
1153                                       NoItinerary, MSA128, MSA128>,
1154                                       IsCommutable;
1155class DOTP_U_H_DESC : MSA_3R_DESC_BASE<"dotp_u.h", int_mips_dotp_u_h,
1156                                       NoItinerary, MSA128, MSA128>,
1157                                       IsCommutable;
1158class DOTP_U_W_DESC : MSA_3R_DESC_BASE<"dotp_u.w", int_mips_dotp_u_w,
1159                                       NoItinerary, MSA128, MSA128>,
1160                                       IsCommutable;
1161class DOTP_U_D_DESC : MSA_3R_DESC_BASE<"dotp_u.d", int_mips_dotp_u_d,
1162                                       NoItinerary, MSA128, MSA128>,
1163                                       IsCommutable;
1164
1165class DPADD_S_H_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.h", int_mips_dpadd_s_h,
1166                                           NoItinerary, MSA128, MSA128>,
1167                                           IsCommutable;
1168class DPADD_S_W_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.w", int_mips_dpadd_s_w,
1169                                           NoItinerary, MSA128, MSA128>,
1170                                           IsCommutable;
1171class DPADD_S_D_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.d", int_mips_dpadd_s_d,
1172                                           NoItinerary, MSA128, MSA128>,
1173                                           IsCommutable;
1174
1175class DPADD_U_H_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.h", int_mips_dpadd_u_h,
1176                                           NoItinerary, MSA128, MSA128>,
1177                                           IsCommutable;
1178class DPADD_U_W_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.w", int_mips_dpadd_u_w,
1179                                           NoItinerary, MSA128, MSA128>,
1180                                           IsCommutable;
1181class DPADD_U_D_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.d", int_mips_dpadd_u_d,
1182                                           NoItinerary, MSA128, MSA128>,
1183                                           IsCommutable;
1184
1185class DPSUB_S_H_DESC : MSA_3R_4R_DESC_BASE<"dpsub_s.h", int_mips_dpsub_s_h,
1186                                           NoItinerary, MSA128, MSA128>;
1187class DPSUB_S_W_DESC : MSA_3R_4R_DESC_BASE<"dpsub_s.w", int_mips_dpsub_s_w,
1188                                           NoItinerary, MSA128, MSA128>;
1189class DPSUB_S_D_DESC : MSA_3R_4R_DESC_BASE<"dpsub_s.d", int_mips_dpsub_s_d,
1190                                           NoItinerary, MSA128, MSA128>;
1191
1192class DPSUB_U_H_DESC : MSA_3R_4R_DESC_BASE<"dpsub_u.h", int_mips_dpsub_u_h,
1193                                           NoItinerary, MSA128, MSA128>;
1194class DPSUB_U_W_DESC : MSA_3R_4R_DESC_BASE<"dpsub_u.w", int_mips_dpsub_u_w,
1195                                           NoItinerary, MSA128, MSA128>;
1196class DPSUB_U_D_DESC : MSA_3R_4R_DESC_BASE<"dpsub_u.d", int_mips_dpsub_u_d,
1197                                           NoItinerary, MSA128, MSA128>;
1198
1199class FADD_W_DESC : MSA_3RF_DESC_BASE<"fadd.w", int_mips_fadd_w,
1200                                      NoItinerary, MSA128, MSA128>,
1201                                      IsCommutable;
1202class FADD_D_DESC : MSA_3RF_DESC_BASE<"fadd.d", int_mips_fadd_d,
1203                                      NoItinerary, MSA128, MSA128>,
1204                                      IsCommutable;
1205
1206class FCEQ_W_DESC : MSA_3RF_DESC_BASE<"fceq.w", int_mips_fceq_w,
1207                                      NoItinerary, MSA128, MSA128>,
1208                                      IsCommutable;
1209class FCEQ_D_DESC : MSA_3RF_DESC_BASE<"fceq.d", int_mips_fceq_d,
1210                                      NoItinerary, MSA128, MSA128>,
1211                                      IsCommutable;
1212
1213class FCGE_W_DESC : MSA_3RF_DESC_BASE<"fcge.w", int_mips_fcge_w,
1214                                      NoItinerary, MSA128, MSA128>;
1215class FCGE_D_DESC : MSA_3RF_DESC_BASE<"fcge.d", int_mips_fcge_d,
1216                                      NoItinerary, MSA128, MSA128>;
1217
1218class FCGT_W_DESC : MSA_3RF_DESC_BASE<"fcgt.w", int_mips_fcgt_w,
1219                                      NoItinerary, MSA128, MSA128>;
1220class FCGT_D_DESC : MSA_3RF_DESC_BASE<"fcgt.d", int_mips_fcgt_d,
1221                                      NoItinerary, MSA128, MSA128>;
1222
1223class FCLASS_W_DESC : MSA_2RF_DESC_BASE<"fclass.w", int_mips_fclass_w,
1224                                        NoItinerary, MSA128, MSA128>;
1225class FCLASS_D_DESC : MSA_2RF_DESC_BASE<"fclass.d", int_mips_fclass_d,
1226                                        NoItinerary, MSA128, MSA128>;
1227
1228class FCLE_W_DESC : MSA_3RF_DESC_BASE<"fcle.w", int_mips_fcle_w,
1229                                      NoItinerary, MSA128, MSA128>;
1230class FCLE_D_DESC : MSA_3RF_DESC_BASE<"fcle.d", int_mips_fcle_d,
1231                                      NoItinerary, MSA128, MSA128>;
1232
1233class FCLT_W_DESC : MSA_3RF_DESC_BASE<"fclt.w", int_mips_fclt_w,
1234                                      NoItinerary, MSA128, MSA128>;
1235class FCLT_D_DESC : MSA_3RF_DESC_BASE<"fclt.d", int_mips_fclt_d,
1236                                      NoItinerary, MSA128, MSA128>;
1237
1238class FCNE_W_DESC : MSA_3RF_DESC_BASE<"fcne.w", int_mips_fcne_w,
1239                                      NoItinerary, MSA128, MSA128>,
1240                                      IsCommutable;
1241class FCNE_D_DESC : MSA_3RF_DESC_BASE<"fcne.d", int_mips_fcne_d,
1242                                      NoItinerary, MSA128, MSA128>,
1243                                      IsCommutable;
1244
1245class FCUN_W_DESC : MSA_3RF_DESC_BASE<"fcun.w", int_mips_fcun_w,
1246                                      NoItinerary, MSA128, MSA128>,
1247                                      IsCommutable;
1248class FCUN_D_DESC : MSA_3RF_DESC_BASE<"fcun.d", int_mips_fcun_d,
1249                                      NoItinerary, MSA128, MSA128>,
1250                                      IsCommutable;
1251
1252class FDIV_W_DESC : MSA_3RF_DESC_BASE<"fdiv.w", int_mips_fdiv_w,
1253                                      NoItinerary, MSA128, MSA128>;
1254class FDIV_D_DESC : MSA_3RF_DESC_BASE<"fdiv.d", int_mips_fdiv_d,
1255                                      NoItinerary, MSA128, MSA128>;
1256
1257class FEXDO_H_DESC : MSA_3RF_DESC_BASE<"fexdo.h", int_mips_fexdo_h,
1258                                       NoItinerary, MSA128, MSA128>;
1259class FEXDO_W_DESC : MSA_3RF_DESC_BASE<"fexdo.w", int_mips_fexdo_w,
1260                                       NoItinerary, MSA128, MSA128>;
1261
1262class FEXP2_W_DESC : MSA_3RF_DESC_BASE<"fexp2.w", int_mips_fexp2_w,
1263                                       NoItinerary, MSA128, MSA128>;
1264class FEXP2_D_DESC : MSA_3RF_DESC_BASE<"fexp2.d", int_mips_fexp2_d,
1265                                       NoItinerary, MSA128, MSA128>;
1266
1267class FEXUPL_W_DESC : MSA_2RF_DESC_BASE<"fexupl.w", int_mips_fexupl_w,
1268                                        NoItinerary, MSA128, MSA128>;
1269class FEXUPL_D_DESC : MSA_2RF_DESC_BASE<"fexupl.d", int_mips_fexupl_d,
1270                                        NoItinerary, MSA128, MSA128>;
1271
1272class FEXUPR_W_DESC : MSA_2RF_DESC_BASE<"fexupr.w", int_mips_fexupr_w,
1273                                        NoItinerary, MSA128, MSA128>;
1274class FEXUPR_D_DESC : MSA_2RF_DESC_BASE<"fexupr.d", int_mips_fexupr_d,
1275                                        NoItinerary, MSA128, MSA128>;
1276
1277class FFINT_S_W_DESC : MSA_2RF_DESC_BASE<"ffint_s.w", int_mips_ffint_s_w,
1278                                         NoItinerary, MSA128, MSA128>;
1279class FFINT_S_D_DESC : MSA_2RF_DESC_BASE<"ffint_s.d", int_mips_ffint_s_d,
1280                                         NoItinerary, MSA128, MSA128>;
1281
1282class FFINT_U_W_DESC : MSA_2RF_DESC_BASE<"ffint_u.w", int_mips_ffint_u_w,
1283                                         NoItinerary, MSA128, MSA128>;
1284class FFINT_U_D_DESC : MSA_2RF_DESC_BASE<"ffint_u.d", int_mips_ffint_u_d,
1285                                         NoItinerary, MSA128, MSA128>;
1286
1287class FFQL_W_DESC : MSA_2RF_DESC_BASE<"ffql.w", int_mips_ffql_w,
1288                                      NoItinerary, MSA128, MSA128>;
1289class FFQL_D_DESC : MSA_2RF_DESC_BASE<"ffql.d", int_mips_ffql_d,
1290                                      NoItinerary, MSA128, MSA128>;
1291
1292class FFQR_W_DESC : MSA_2RF_DESC_BASE<"ffqr.w", int_mips_ffqr_w,
1293                                      NoItinerary, MSA128, MSA128>;
1294class FFQR_D_DESC : MSA_2RF_DESC_BASE<"ffqr.d", int_mips_ffqr_d,
1295                                      NoItinerary, MSA128, MSA128>;
1296
1297class FILL_B_DESC : MSA_2R_DESC_BASE<"fill.b", int_mips_fill_b,
1298                                     NoItinerary, MSA128, GPR32>;
1299class FILL_H_DESC : MSA_2R_DESC_BASE<"fill.h", int_mips_fill_h,
1300                                     NoItinerary, MSA128, GPR32>;
1301class FILL_W_DESC : MSA_2R_DESC_BASE<"fill.w", int_mips_fill_w,
1302                                     NoItinerary, MSA128, GPR32>;
1303
1304class FLOG2_W_DESC : MSA_2RF_DESC_BASE<"flog2.w", int_mips_flog2_w,
1305                                       NoItinerary, MSA128, MSA128>;
1306class FLOG2_D_DESC : MSA_2RF_DESC_BASE<"flog2.d", int_mips_flog2_d,
1307                                       NoItinerary, MSA128, MSA128>;
1308
1309class FMADD_W_DESC : MSA_3RF_4RF_DESC_BASE<"fmadd.w", int_mips_fmadd_w,
1310                                           NoItinerary, MSA128, MSA128>;
1311class FMADD_D_DESC : MSA_3RF_4RF_DESC_BASE<"fmadd.d", int_mips_fmadd_d,
1312                                           NoItinerary, MSA128, MSA128>;
1313
1314class FMAX_W_DESC : MSA_3RF_DESC_BASE<"fmax.w", int_mips_fmax_w,
1315                                      NoItinerary, MSA128, MSA128>;
1316class FMAX_D_DESC : MSA_3RF_DESC_BASE<"fmax.d", int_mips_fmax_d,
1317                                      NoItinerary, MSA128, MSA128>;
1318
1319class FMAX_A_W_DESC : MSA_3RF_DESC_BASE<"fmax_a.w", int_mips_fmax_a_w,
1320                                        NoItinerary, MSA128, MSA128>;
1321class FMAX_A_D_DESC : MSA_3RF_DESC_BASE<"fmax_a.d", int_mips_fmax_a_d,
1322                                        NoItinerary, MSA128, MSA128>;
1323
1324class FMIN_W_DESC : MSA_3RF_DESC_BASE<"fmin.w", int_mips_fmin_w,
1325                                      NoItinerary, MSA128, MSA128>;
1326class FMIN_D_DESC : MSA_3RF_DESC_BASE<"fmin.d", int_mips_fmin_d,
1327                                      NoItinerary, MSA128, MSA128>;
1328
1329class FMIN_A_W_DESC : MSA_3RF_DESC_BASE<"fmin_a.w", int_mips_fmin_a_w,
1330                                        NoItinerary, MSA128, MSA128>;
1331class FMIN_A_D_DESC : MSA_3RF_DESC_BASE<"fmin_a.d", int_mips_fmin_a_d,
1332                                        NoItinerary, MSA128, MSA128>;
1333
1334class FMSUB_W_DESC : MSA_3RF_4RF_DESC_BASE<"fmsub.w", int_mips_fmsub_w,
1335                                           NoItinerary, MSA128, MSA128>;
1336class FMSUB_D_DESC : MSA_3RF_4RF_DESC_BASE<"fmsub.d", int_mips_fmsub_d,
1337                                           NoItinerary, MSA128, MSA128>;
1338
1339class FMUL_W_DESC : MSA_3RF_DESC_BASE<"fmul.w", int_mips_fmul_w,
1340                                      NoItinerary, MSA128, MSA128>;
1341class FMUL_D_DESC : MSA_3RF_DESC_BASE<"fmul.d", int_mips_fmul_d,
1342                                      NoItinerary, MSA128, MSA128>;
1343
1344class FRINT_W_DESC : MSA_2RF_DESC_BASE<"frint.w", int_mips_frint_w,
1345                                       NoItinerary, MSA128, MSA128>;
1346class FRINT_D_DESC : MSA_2RF_DESC_BASE<"frint.d", int_mips_frint_d,
1347                                       NoItinerary, MSA128, MSA128>;
1348
1349class FRCP_W_DESC : MSA_2RF_DESC_BASE<"frcp.w", int_mips_frcp_w,
1350                                       NoItinerary, MSA128, MSA128>;
1351class FRCP_D_DESC : MSA_2RF_DESC_BASE<"frcp.d", int_mips_frcp_d,
1352                                       NoItinerary, MSA128, MSA128>;
1353
1354class FRSQRT_W_DESC : MSA_2RF_DESC_BASE<"frsqrt.w", int_mips_frsqrt_w,
1355                                        NoItinerary, MSA128, MSA128>;
1356class FRSQRT_D_DESC : MSA_2RF_DESC_BASE<"frsqrt.d", int_mips_frsqrt_d,
1357                                        NoItinerary, MSA128, MSA128>;
1358
1359class FSEQ_W_DESC : MSA_3RF_DESC_BASE<"fseq.w", int_mips_fseq_w,
1360                                      NoItinerary, MSA128, MSA128>;
1361class FSEQ_D_DESC : MSA_3RF_DESC_BASE<"fseq.d", int_mips_fseq_d,
1362                                      NoItinerary, MSA128, MSA128>;
1363
1364class FSGE_W_DESC : MSA_3RF_DESC_BASE<"fsge.w", int_mips_fsge_w,
1365                                      NoItinerary, MSA128, MSA128>;
1366class FSGE_D_DESC : MSA_3RF_DESC_BASE<"fsge.d", int_mips_fsge_d,
1367                                      NoItinerary, MSA128, MSA128>;
1368
1369class FSGT_W_DESC : MSA_3RF_DESC_BASE<"fsgt.w", int_mips_fsgt_w,
1370                                      NoItinerary, MSA128, MSA128>;
1371class FSGT_D_DESC : MSA_3RF_DESC_BASE<"fsgt.d", int_mips_fsgt_d,
1372                                      NoItinerary, MSA128, MSA128>;
1373
1374class FSLE_W_DESC : MSA_3RF_DESC_BASE<"fsle.w", int_mips_fsle_w,
1375                                      NoItinerary, MSA128, MSA128>;
1376class FSLE_D_DESC : MSA_3RF_DESC_BASE<"fsle.d", int_mips_fsle_d,
1377                                      NoItinerary, MSA128, MSA128>;
1378
1379class FSLT_W_DESC : MSA_3RF_DESC_BASE<"fslt.w", int_mips_fslt_w,
1380                                      NoItinerary, MSA128, MSA128>;
1381class FSLT_D_DESC : MSA_3RF_DESC_BASE<"fslt.d", int_mips_fslt_d,
1382                                      NoItinerary, MSA128, MSA128>;
1383
1384class FSNE_W_DESC : MSA_3RF_DESC_BASE<"fsne.w", int_mips_fsne_w,
1385                                      NoItinerary, MSA128, MSA128>;
1386class FSNE_D_DESC : MSA_3RF_DESC_BASE<"fsne.d", int_mips_fsne_d,
1387                                      NoItinerary, MSA128, MSA128>;
1388
1389class FSQRT_W_DESC : MSA_2RF_DESC_BASE<"fsqrt.w", int_mips_fsqrt_w,
1390                                       NoItinerary, MSA128, MSA128>;
1391class FSQRT_D_DESC : MSA_2RF_DESC_BASE<"fsqrt.d", int_mips_fsqrt_d,
1392                                       NoItinerary, MSA128, MSA128>;
1393
1394class FSUB_W_DESC : MSA_3RF_DESC_BASE<"fsub.w", int_mips_fsub_w,
1395                                      NoItinerary, MSA128, MSA128>;
1396class FSUB_D_DESC : MSA_3RF_DESC_BASE<"fsub.d", int_mips_fsub_d,
1397                                      NoItinerary, MSA128, MSA128>;
1398
1399class FTINT_S_W_DESC : MSA_2RF_DESC_BASE<"ftint_s.w", int_mips_ftint_s_w,
1400                                         NoItinerary, MSA128, MSA128>;
1401class FTINT_S_D_DESC : MSA_2RF_DESC_BASE<"ftint_s.d", int_mips_ftint_s_d,
1402                                         NoItinerary, MSA128, MSA128>;
1403
1404class FTINT_U_W_DESC : MSA_2RF_DESC_BASE<"ftint_u.w", int_mips_ftint_u_w,
1405                                         NoItinerary, MSA128, MSA128>;
1406class FTINT_U_D_DESC : MSA_2RF_DESC_BASE<"ftint_u.d", int_mips_ftint_u_d,
1407                                         NoItinerary, MSA128, MSA128>;
1408
1409class FTQ_H_DESC : MSA_3RF_DESC_BASE<"ftq.h", int_mips_ftq_h,
1410                                     NoItinerary, MSA128, MSA128>;
1411class FTQ_W_DESC : MSA_3RF_DESC_BASE<"ftq.w", int_mips_ftq_w,
1412                                     NoItinerary, MSA128, MSA128>;
1413
1414class ILVEV_B_DESC : MSA_3R_DESC_BASE<"ilvev.b", int_mips_ilvev_b, NoItinerary,
1415                                      MSA128, MSA128>;
1416class ILVEV_H_DESC : MSA_3R_DESC_BASE<"ilvev.h", int_mips_ilvev_h, NoItinerary,
1417                                      MSA128, MSA128>;
1418class ILVEV_W_DESC : MSA_3R_DESC_BASE<"ilvev.w", int_mips_ilvev_w, NoItinerary,
1419                                      MSA128, MSA128>;
1420class ILVEV_D_DESC : MSA_3R_DESC_BASE<"ilvev.d", int_mips_ilvev_d, NoItinerary,
1421                                      MSA128, MSA128>;
1422
1423class ILVL_B_DESC : MSA_3R_DESC_BASE<"ilvl.b", int_mips_ilvl_b, NoItinerary,
1424                                     MSA128, MSA128>;
1425class ILVL_H_DESC : MSA_3R_DESC_BASE<"ilvl.h", int_mips_ilvl_h, NoItinerary,
1426                                     MSA128, MSA128>;
1427class ILVL_W_DESC : MSA_3R_DESC_BASE<"ilvl.w", int_mips_ilvl_w, NoItinerary,
1428                                     MSA128, MSA128>;
1429class ILVL_D_DESC : MSA_3R_DESC_BASE<"ilvl.d", int_mips_ilvl_d, NoItinerary,
1430                                     MSA128, MSA128>;
1431
1432class ILVOD_B_DESC : MSA_3R_DESC_BASE<"ilvod.b", int_mips_ilvod_b, NoItinerary,
1433                                      MSA128, MSA128>;
1434class ILVOD_H_DESC : MSA_3R_DESC_BASE<"ilvod.h", int_mips_ilvod_h, NoItinerary,
1435                                      MSA128, MSA128>;
1436class ILVOD_W_DESC : MSA_3R_DESC_BASE<"ilvod.w", int_mips_ilvod_w, NoItinerary,
1437                                      MSA128, MSA128>;
1438class ILVOD_D_DESC : MSA_3R_DESC_BASE<"ilvod.d", int_mips_ilvod_d, NoItinerary,
1439                                      MSA128, MSA128>;
1440
1441class ILVR_B_DESC : MSA_3R_DESC_BASE<"ilvr.b", int_mips_ilvr_b, NoItinerary,
1442                                     MSA128, MSA128>;
1443class ILVR_H_DESC : MSA_3R_DESC_BASE<"ilvr.h", int_mips_ilvr_h, NoItinerary,
1444                                     MSA128, MSA128>;
1445class ILVR_W_DESC : MSA_3R_DESC_BASE<"ilvr.w", int_mips_ilvr_w, NoItinerary,
1446                                     MSA128, MSA128>;
1447class ILVR_D_DESC : MSA_3R_DESC_BASE<"ilvr.d", int_mips_ilvr_d, NoItinerary,
1448                                     MSA128, MSA128>;
1449
1450class INSERT_B_DESC : MSA_INSERT_DESC_BASE<"insert.b", int_mips_insert_b,
1451                                           NoItinerary, MSA128, GPR32>;
1452class INSERT_H_DESC : MSA_INSERT_DESC_BASE<"insert.h", int_mips_insert_h,
1453                                           NoItinerary, MSA128, GPR32>;
1454class INSERT_W_DESC : MSA_INSERT_DESC_BASE<"insert.w", int_mips_insert_w,
1455                                           NoItinerary, MSA128, GPR32>;
1456
1457class LD_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
1458                   ValueType TyNode, InstrItinClass itin, RegisterClass RCWD,
1459                   Operand MemOpnd = mem, ComplexPattern Addr = addr> {
1460  dag OutOperandList = (outs RCWD:$wd);
1461  dag InOperandList = (ins MemOpnd:$addr);
1462  string AsmString = !strconcat(instr_asm, "\t$wd, $addr");
1463  list<dag> Pattern = [(set RCWD:$wd, (TyNode (OpNode Addr:$addr)))];
1464  InstrItinClass Itinerary = itin;
1465}
1466
1467class LD_B_DESC : LD_DESC_BASE<"ld.b", load, v16i8, NoItinerary, MSA128>;
1468class LD_H_DESC : LD_DESC_BASE<"ld.h", load, v8i16, NoItinerary, MSA128>;
1469class LD_W_DESC : LD_DESC_BASE<"ld.w", load, v4i32, NoItinerary, MSA128>;
1470class LD_D_DESC : LD_DESC_BASE<"ld.d", load, v2i64, NoItinerary, MSA128>;
1471
1472class LDI_B_DESC : MSA_I10_DESC_BASE<"ldi.b", int_mips_ldi_b,
1473                                     NoItinerary, MSA128>;
1474class LDI_H_DESC : MSA_I10_DESC_BASE<"ldi.h", int_mips_ldi_h,
1475                                     NoItinerary, MSA128>;
1476class LDI_W_DESC : MSA_I10_DESC_BASE<"ldi.w", int_mips_ldi_w,
1477                                     NoItinerary, MSA128>;
1478class LDI_D_DESC : MSA_I10_DESC_BASE<"ldi.d", int_mips_ldi_d,
1479                                     NoItinerary, MSA128>;
1480
1481class MADD_Q_H_DESC : MSA_3RF_4RF_DESC_BASE<"madd_q.h", int_mips_madd_q_h,
1482                                            NoItinerary, MSA128, MSA128>;
1483class MADD_Q_W_DESC : MSA_3RF_4RF_DESC_BASE<"madd_q.w", int_mips_madd_q_w,
1484                                            NoItinerary, MSA128, MSA128>;
1485
1486class MADDR_Q_H_DESC : MSA_3RF_4RF_DESC_BASE<"maddr_q.h", int_mips_maddr_q_h,
1487                                             NoItinerary, MSA128, MSA128>;
1488class MADDR_Q_W_DESC : MSA_3RF_4RF_DESC_BASE<"maddr_q.w", int_mips_maddr_q_w,
1489                                             NoItinerary, MSA128, MSA128>;
1490
1491class MADDV_B_DESC : MSA_3R_4R_DESC_BASE<"maddv.b", int_mips_maddv_b,
1492                                         NoItinerary, MSA128, MSA128>;
1493class MADDV_H_DESC : MSA_3R_4R_DESC_BASE<"maddv.h", int_mips_maddv_h,
1494                                         NoItinerary, MSA128, MSA128>;
1495class MADDV_W_DESC : MSA_3R_4R_DESC_BASE<"maddv.w", int_mips_maddv_w,
1496                                         NoItinerary, MSA128, MSA128>;
1497class MADDV_D_DESC : MSA_3R_4R_DESC_BASE<"maddv.d", int_mips_maddv_d,
1498                                         NoItinerary, MSA128, MSA128>;
1499
1500class MAX_A_B_DESC : MSA_3R_DESC_BASE<"max_a.b", int_mips_max_a_b, NoItinerary,
1501                                      MSA128, MSA128>;
1502class MAX_A_H_DESC : MSA_3R_DESC_BASE<"max_a.h", int_mips_max_a_h, NoItinerary,
1503                                      MSA128, MSA128>;
1504class MAX_A_W_DESC : MSA_3R_DESC_BASE<"max_a.w", int_mips_max_a_w, NoItinerary,
1505                                      MSA128, MSA128>;
1506class MAX_A_D_DESC : MSA_3R_DESC_BASE<"max_a.d", int_mips_max_a_d, NoItinerary,
1507                                      MSA128, MSA128>;
1508
1509class MAX_S_B_DESC : MSA_3R_DESC_BASE<"max_s.b", int_mips_max_s_b, NoItinerary,
1510                                      MSA128, MSA128>;
1511class MAX_S_H_DESC : MSA_3R_DESC_BASE<"max_s.h", int_mips_max_s_h, NoItinerary,
1512                                      MSA128, MSA128>;
1513class MAX_S_W_DESC : MSA_3R_DESC_BASE<"max_s.w", int_mips_max_s_w, NoItinerary,
1514                                      MSA128, MSA128>;
1515class MAX_S_D_DESC : MSA_3R_DESC_BASE<"max_s.d", int_mips_max_s_d, NoItinerary,
1516                                      MSA128, MSA128>;
1517
1518class MAX_U_B_DESC : MSA_3R_DESC_BASE<"max_u.b", int_mips_max_u_b, NoItinerary,
1519                                      MSA128, MSA128>;
1520class MAX_U_H_DESC : MSA_3R_DESC_BASE<"max_u.h", int_mips_max_u_h, NoItinerary,
1521                                      MSA128, MSA128>;
1522class MAX_U_W_DESC : MSA_3R_DESC_BASE<"max_u.w", int_mips_max_u_w, NoItinerary,
1523                                      MSA128, MSA128>;
1524class MAX_U_D_DESC : MSA_3R_DESC_BASE<"max_u.d", int_mips_max_u_d, NoItinerary,
1525                                      MSA128, MSA128>;
1526
1527class MAXI_S_B_DESC : MSA_I5_DESC_BASE<"maxi_s.b", int_mips_maxi_s_b,
1528                                       NoItinerary, MSA128, MSA128>;
1529class MAXI_S_H_DESC : MSA_I5_DESC_BASE<"maxi_s.h", int_mips_maxi_s_h,
1530                                       NoItinerary, MSA128, MSA128>;
1531class MAXI_S_W_DESC : MSA_I5_DESC_BASE<"maxi_s.w", int_mips_maxi_s_w,
1532                                       NoItinerary, MSA128, MSA128>;
1533class MAXI_S_D_DESC : MSA_I5_DESC_BASE<"maxi_s.d", int_mips_maxi_s_d,
1534                                       NoItinerary, MSA128, MSA128>;
1535
1536class MAXI_U_B_DESC : MSA_I5_DESC_BASE<"maxi_u.b", int_mips_maxi_u_b,
1537                                       NoItinerary, MSA128, MSA128>;
1538class MAXI_U_H_DESC : MSA_I5_DESC_BASE<"maxi_u.h", int_mips_maxi_u_h,
1539                                       NoItinerary, MSA128, MSA128>;
1540class MAXI_U_W_DESC : MSA_I5_DESC_BASE<"maxi_u.w", int_mips_maxi_u_w,
1541                                       NoItinerary, MSA128, MSA128>;
1542class MAXI_U_D_DESC : MSA_I5_DESC_BASE<"maxi_u.d", int_mips_maxi_u_d,
1543                                       NoItinerary, MSA128, MSA128>;
1544
1545class MIN_A_B_DESC : MSA_3R_DESC_BASE<"min_a.b", int_mips_min_a_b, NoItinerary,
1546                                      MSA128, MSA128>;
1547class MIN_A_H_DESC : MSA_3R_DESC_BASE<"min_a.h", int_mips_min_a_h, NoItinerary,
1548                                      MSA128, MSA128>;
1549class MIN_A_W_DESC : MSA_3R_DESC_BASE<"min_a.w", int_mips_min_a_w, NoItinerary,
1550                                      MSA128, MSA128>;
1551class MIN_A_D_DESC : MSA_3R_DESC_BASE<"min_a.d", int_mips_min_a_d, NoItinerary,
1552                                      MSA128, MSA128>;
1553
1554class MIN_S_B_DESC : MSA_3R_DESC_BASE<"min_s.b", int_mips_min_s_b, NoItinerary,
1555                                      MSA128, MSA128>;
1556class MIN_S_H_DESC : MSA_3R_DESC_BASE<"min_s.h", int_mips_min_s_h, NoItinerary,
1557                                      MSA128, MSA128>;
1558class MIN_S_W_DESC : MSA_3R_DESC_BASE<"min_s.w", int_mips_min_s_w, NoItinerary,
1559                                      MSA128, MSA128>;
1560class MIN_S_D_DESC : MSA_3R_DESC_BASE<"min_s.d", int_mips_min_s_d, NoItinerary,
1561                                      MSA128, MSA128>;
1562
1563class MIN_U_B_DESC : MSA_3R_DESC_BASE<"min_u.b", int_mips_min_u_b, NoItinerary,
1564                                      MSA128, MSA128>;
1565class MIN_U_H_DESC : MSA_3R_DESC_BASE<"min_u.h", int_mips_min_u_h, NoItinerary,
1566                                      MSA128, MSA128>;
1567class MIN_U_W_DESC : MSA_3R_DESC_BASE<"min_u.w", int_mips_min_u_w, NoItinerary,
1568                                      MSA128, MSA128>;
1569class MIN_U_D_DESC : MSA_3R_DESC_BASE<"min_u.d", int_mips_min_u_d, NoItinerary,
1570                                      MSA128, MSA128>;
1571
1572class MINI_S_B_DESC : MSA_I5_DESC_BASE<"mini_s.b", int_mips_mini_s_b,
1573                                       NoItinerary, MSA128, MSA128>;
1574class MINI_S_H_DESC : MSA_I5_DESC_BASE<"mini_s.h", int_mips_mini_s_h,
1575                                       NoItinerary, MSA128, MSA128>;
1576class MINI_S_W_DESC : MSA_I5_DESC_BASE<"mini_s.w", int_mips_mini_s_w,
1577                                       NoItinerary, MSA128, MSA128>;
1578class MINI_S_D_DESC : MSA_I5_DESC_BASE<"mini_s.d", int_mips_mini_s_d,
1579                                       NoItinerary, MSA128, MSA128>;
1580
1581class MINI_U_B_DESC : MSA_I5_DESC_BASE<"mini_u.b", int_mips_mini_u_b,
1582                                       NoItinerary, MSA128, MSA128>;
1583class MINI_U_H_DESC : MSA_I5_DESC_BASE<"mini_u.h", int_mips_mini_u_h,
1584                                       NoItinerary, MSA128, MSA128>;
1585class MINI_U_W_DESC : MSA_I5_DESC_BASE<"mini_u.w", int_mips_mini_u_w,
1586                                       NoItinerary, MSA128, MSA128>;
1587class MINI_U_D_DESC : MSA_I5_DESC_BASE<"mini_u.d", int_mips_mini_u_d,
1588                                       NoItinerary, MSA128, MSA128>;
1589
1590class MOD_S_B_DESC : MSA_3R_DESC_BASE<"mod_s.b", int_mips_mod_s_b, NoItinerary,
1591                                      MSA128, MSA128>;
1592class MOD_S_H_DESC : MSA_3R_DESC_BASE<"mod_s.h", int_mips_mod_s_h, NoItinerary,
1593                                      MSA128, MSA128>;
1594class MOD_S_W_DESC : MSA_3R_DESC_BASE<"mod_s.w", int_mips_mod_s_w, NoItinerary,
1595                                      MSA128, MSA128>;
1596class MOD_S_D_DESC : MSA_3R_DESC_BASE<"mod_s.d", int_mips_mod_s_d, NoItinerary,
1597                                      MSA128, MSA128>;
1598
1599class MOD_U_B_DESC : MSA_3R_DESC_BASE<"mod_u.b", int_mips_mod_u_b, NoItinerary,
1600                                      MSA128, MSA128>;
1601class MOD_U_H_DESC : MSA_3R_DESC_BASE<"mod_u.h", int_mips_mod_u_h, NoItinerary,
1602                                      MSA128, MSA128>;
1603class MOD_U_W_DESC : MSA_3R_DESC_BASE<"mod_u.w", int_mips_mod_u_w, NoItinerary,
1604                                      MSA128, MSA128>;
1605class MOD_U_D_DESC : MSA_3R_DESC_BASE<"mod_u.d", int_mips_mod_u_d, NoItinerary,
1606                                      MSA128, MSA128>;
1607
1608class MSUB_Q_H_DESC : MSA_3RF_4RF_DESC_BASE<"msub_q.h", int_mips_msub_q_h,
1609                                            NoItinerary, MSA128, MSA128>;
1610class MSUB_Q_W_DESC : MSA_3RF_4RF_DESC_BASE<"msub_q.w", int_mips_msub_q_w,
1611                                            NoItinerary, MSA128, MSA128>;
1612
1613class MSUBR_Q_H_DESC : MSA_3RF_4RF_DESC_BASE<"msubr_q.h", int_mips_msubr_q_h,
1614                                             NoItinerary, MSA128, MSA128>;
1615class MSUBR_Q_W_DESC : MSA_3RF_4RF_DESC_BASE<"msubr_q.w", int_mips_msubr_q_w,
1616                                             NoItinerary, MSA128, MSA128>;
1617
1618class MSUBV_B_DESC : MSA_3R_4R_DESC_BASE<"msubv.b", int_mips_msubv_b,
1619                                         NoItinerary, MSA128, MSA128>;
1620class MSUBV_H_DESC : MSA_3R_4R_DESC_BASE<"msubv.h", int_mips_msubv_h,
1621                                         NoItinerary, MSA128, MSA128>;
1622class MSUBV_W_DESC : MSA_3R_4R_DESC_BASE<"msubv.w", int_mips_msubv_w,
1623                                         NoItinerary, MSA128, MSA128>;
1624class MSUBV_D_DESC : MSA_3R_4R_DESC_BASE<"msubv.d", int_mips_msubv_d,
1625                                         NoItinerary, MSA128, MSA128>;
1626
1627class MUL_Q_H_DESC : MSA_3RF_DESC_BASE<"mul_q.h", int_mips_mul_q_h,
1628                                       NoItinerary, MSA128, MSA128>;
1629class MUL_Q_W_DESC : MSA_3RF_DESC_BASE<"mul_q.w", int_mips_mul_q_w,
1630                                       NoItinerary, MSA128, MSA128>;
1631
1632class MULR_Q_H_DESC : MSA_3RF_DESC_BASE<"mulr_q.h", int_mips_mulr_q_h,
1633                                        NoItinerary, MSA128, MSA128>;
1634class MULR_Q_W_DESC : MSA_3RF_DESC_BASE<"mulr_q.w", int_mips_mulr_q_w,
1635                                        NoItinerary, MSA128, MSA128>;
1636
1637class MULV_B_DESC : MSA_3R_DESC_BASE<"mulv.b", int_mips_mulv_b,
1638                                     NoItinerary, MSA128, MSA128>;
1639class MULV_H_DESC : MSA_3R_DESC_BASE<"mulv.h", int_mips_mulv_h,
1640                                     NoItinerary, MSA128, MSA128>;
1641class MULV_W_DESC : MSA_3R_DESC_BASE<"mulv.w", int_mips_mulv_w,
1642                                     NoItinerary, MSA128, MSA128>;
1643class MULV_D_DESC : MSA_3R_DESC_BASE<"mulv.d", int_mips_mulv_d,
1644                                     NoItinerary, MSA128, MSA128>;
1645
1646class NLOC_B_DESC : MSA_2R_DESC_BASE<"nloc.b", int_mips_nloc_b,
1647                                     NoItinerary, MSA128, MSA128>;
1648class NLOC_H_DESC : MSA_2R_DESC_BASE<"nloc.h", int_mips_nloc_h,
1649                                     NoItinerary, MSA128, MSA128>;
1650class NLOC_W_DESC : MSA_2R_DESC_BASE<"nloc.w", int_mips_nloc_w,
1651                                     NoItinerary, MSA128, MSA128>;
1652class NLOC_D_DESC : MSA_2R_DESC_BASE<"nloc.d", int_mips_nloc_d,
1653                                     NoItinerary, MSA128, MSA128>;
1654
1655class NLZC_B_DESC : MSA_2R_DESC_BASE<"nlzc.b", int_mips_nlzc_b,
1656                                     NoItinerary, MSA128, MSA128>;
1657class NLZC_H_DESC : MSA_2R_DESC_BASE<"nlzc.h", int_mips_nlzc_h,
1658                                     NoItinerary, MSA128, MSA128>;
1659class NLZC_W_DESC : MSA_2R_DESC_BASE<"nlzc.w", int_mips_nlzc_w,
1660                                     NoItinerary, MSA128, MSA128>;
1661class NLZC_D_DESC : MSA_2R_DESC_BASE<"nlzc.d", int_mips_nlzc_d,
1662                                     NoItinerary, MSA128, MSA128>;
1663
1664class NORI_B_DESC : MSA_I8_DESC_BASE<"nori.b", int_mips_nori_b, NoItinerary,
1665                                     MSA128, MSA128>;
1666
1667class ORI_B_DESC : MSA_I8_DESC_BASE<"ori.b", int_mips_ori_b, NoItinerary,
1668                                    MSA128, MSA128>;
1669
1670class PCKEV_B_DESC : MSA_3R_DESC_BASE<"pckev.b", int_mips_pckev_b, NoItinerary,
1671                                      MSA128, MSA128>;
1672class PCKEV_H_DESC : MSA_3R_DESC_BASE<"pckev.h", int_mips_pckev_h, NoItinerary,
1673                                      MSA128, MSA128>;
1674class PCKEV_W_DESC : MSA_3R_DESC_BASE<"pckev.w", int_mips_pckev_w, NoItinerary,
1675                                      MSA128, MSA128>;
1676class PCKEV_D_DESC : MSA_3R_DESC_BASE<"pckev.d", int_mips_pckev_d, NoItinerary,
1677                                      MSA128, MSA128>;
1678
1679class PCKOD_B_DESC : MSA_3R_DESC_BASE<"pckod.b", int_mips_pckod_b, NoItinerary,
1680                                      MSA128, MSA128>;
1681class PCKOD_H_DESC : MSA_3R_DESC_BASE<"pckod.h", int_mips_pckod_h, NoItinerary,
1682                                      MSA128, MSA128>;
1683class PCKOD_W_DESC : MSA_3R_DESC_BASE<"pckod.w", int_mips_pckod_w, NoItinerary,
1684                                      MSA128, MSA128>;
1685class PCKOD_D_DESC : MSA_3R_DESC_BASE<"pckod.d", int_mips_pckod_d, NoItinerary,
1686                                      MSA128, MSA128>;
1687
1688class PCNT_B_DESC : MSA_2R_DESC_BASE<"pcnt.b", int_mips_pcnt_b,
1689                                     NoItinerary, MSA128, MSA128>;
1690class PCNT_H_DESC : MSA_2R_DESC_BASE<"pcnt.h", int_mips_pcnt_h,
1691                                     NoItinerary, MSA128, MSA128>;
1692class PCNT_W_DESC : MSA_2R_DESC_BASE<"pcnt.w", int_mips_pcnt_w,
1693                                     NoItinerary, MSA128, MSA128>;
1694class PCNT_D_DESC : MSA_2R_DESC_BASE<"pcnt.d", int_mips_pcnt_d,
1695                                     NoItinerary, MSA128, MSA128>;
1696
1697class SAT_S_B_DESC : MSA_BIT_B_DESC_BASE<"sat_s.b", int_mips_sat_s_b,
1698                                         NoItinerary, MSA128, MSA128>;
1699class SAT_S_H_DESC : MSA_BIT_H_DESC_BASE<"sat_s.h", int_mips_sat_s_h,
1700                                         NoItinerary, MSA128, MSA128>;
1701class SAT_S_W_DESC : MSA_BIT_W_DESC_BASE<"sat_s.w", int_mips_sat_s_w,
1702                                         NoItinerary, MSA128, MSA128>;
1703class SAT_S_D_DESC : MSA_BIT_D_DESC_BASE<"sat_s.d", int_mips_sat_s_d,
1704                                         NoItinerary, MSA128, MSA128>;
1705
1706class SAT_U_B_DESC : MSA_BIT_B_DESC_BASE<"sat_u.b", int_mips_sat_u_b,
1707                                         NoItinerary, MSA128, MSA128>;
1708class SAT_U_H_DESC : MSA_BIT_H_DESC_BASE<"sat_u.h", int_mips_sat_u_h,
1709                                         NoItinerary, MSA128, MSA128>;
1710class SAT_U_W_DESC : MSA_BIT_W_DESC_BASE<"sat_u.w", int_mips_sat_u_w,
1711                                         NoItinerary, MSA128, MSA128>;
1712class SAT_U_D_DESC : MSA_BIT_D_DESC_BASE<"sat_u.d", int_mips_sat_u_d,
1713                                         NoItinerary, MSA128, MSA128>;
1714
1715class SHF_B_DESC : MSA_I8_DESC_BASE<"shf.b", int_mips_shf_b, NoItinerary,
1716                                    MSA128, MSA128>;
1717class SHF_H_DESC : MSA_I8_DESC_BASE<"shf.h", int_mips_shf_h, NoItinerary,
1718                                    MSA128, MSA128>;
1719class SHF_W_DESC : MSA_I8_DESC_BASE<"shf.w", int_mips_shf_w, NoItinerary,
1720                                    MSA128, MSA128>;
1721
1722class SLD_B_DESC : MSA_3R_DESC_BASE<"sld.b", int_mips_sld_b, NoItinerary,
1723                                    MSA128, MSA128>;
1724class SLD_H_DESC : MSA_3R_DESC_BASE<"sld.h", int_mips_sld_h, NoItinerary,
1725                                    MSA128, MSA128>;
1726class SLD_W_DESC : MSA_3R_DESC_BASE<"sld.w", int_mips_sld_w, NoItinerary,
1727                                    MSA128, MSA128>;
1728class SLD_D_DESC : MSA_3R_DESC_BASE<"sld.d", int_mips_sld_d, NoItinerary,
1729                                    MSA128, MSA128>;
1730
1731class SLDI_B_DESC : MSA_BIT_B_DESC_BASE<"sldi.b", int_mips_sldi_b,
1732                                        NoItinerary, MSA128, MSA128>;
1733class SLDI_H_DESC : MSA_BIT_H_DESC_BASE<"sldi.h", int_mips_sldi_h,
1734                                        NoItinerary, MSA128, MSA128>;
1735class SLDI_W_DESC : MSA_BIT_W_DESC_BASE<"sldi.w", int_mips_sldi_w,
1736                                        NoItinerary, MSA128, MSA128>;
1737class SLDI_D_DESC : MSA_BIT_D_DESC_BASE<"sldi.d", int_mips_sldi_d,
1738                                        NoItinerary, MSA128, MSA128>;
1739
1740class SLL_B_DESC : MSA_3R_DESC_BASE<"sll.b", int_mips_sll_b, NoItinerary,
1741                                    MSA128, MSA128>;
1742class SLL_H_DESC : MSA_3R_DESC_BASE<"sll.h", int_mips_sll_h, NoItinerary,
1743                                    MSA128, MSA128>;
1744class SLL_W_DESC : MSA_3R_DESC_BASE<"sll.w", int_mips_sll_w, NoItinerary,
1745                                    MSA128, MSA128>;
1746class SLL_D_DESC : MSA_3R_DESC_BASE<"sll.d", int_mips_sll_d, NoItinerary,
1747                                    MSA128, MSA128>;
1748
1749class SLLI_B_DESC : MSA_BIT_B_DESC_BASE<"slli.b", int_mips_slli_b,
1750                                        NoItinerary, MSA128, MSA128>;
1751class SLLI_H_DESC : MSA_BIT_H_DESC_BASE<"slli.h", int_mips_slli_h,
1752                                        NoItinerary, MSA128, MSA128>;
1753class SLLI_W_DESC : MSA_BIT_W_DESC_BASE<"slli.w", int_mips_slli_w,
1754                                        NoItinerary, MSA128, MSA128>;
1755class SLLI_D_DESC : MSA_BIT_D_DESC_BASE<"slli.d", int_mips_slli_d,
1756                                        NoItinerary, MSA128, MSA128>;
1757
1758class SPLAT_B_DESC : MSA_3R_DESC_BASE<"splat.b", int_mips_splat_b, NoItinerary,
1759                                      MSA128, MSA128, GPR32>;
1760class SPLAT_H_DESC : MSA_3R_DESC_BASE<"splat.h", int_mips_splat_h, NoItinerary,
1761                                      MSA128, MSA128, GPR32>;
1762class SPLAT_W_DESC : MSA_3R_DESC_BASE<"splat.w", int_mips_splat_w, NoItinerary,
1763                                      MSA128, MSA128, GPR32>;
1764class SPLAT_D_DESC : MSA_3R_DESC_BASE<"splat.d", int_mips_splat_d, NoItinerary,
1765                                      MSA128, MSA128, GPR32>;
1766
1767class SPLATI_B_DESC : MSA_BIT_B_DESC_BASE<"splati.b", int_mips_splati_b,
1768                                          NoItinerary, MSA128, MSA128>;
1769class SPLATI_H_DESC : MSA_BIT_H_DESC_BASE<"splati.h", int_mips_splati_h,
1770                                          NoItinerary, MSA128, MSA128>;
1771class SPLATI_W_DESC : MSA_BIT_W_DESC_BASE<"splati.w", int_mips_splati_w,
1772                                          NoItinerary, MSA128, MSA128>;
1773class SPLATI_D_DESC : MSA_BIT_D_DESC_BASE<"splati.d", int_mips_splati_d,
1774                                          NoItinerary, MSA128, MSA128>;
1775
1776class SRA_B_DESC : MSA_3R_DESC_BASE<"sra.b", int_mips_sra_b, NoItinerary,
1777                                    MSA128, MSA128>;
1778class SRA_H_DESC : MSA_3R_DESC_BASE<"sra.h", int_mips_sra_h, NoItinerary,
1779                                    MSA128, MSA128>;
1780class SRA_W_DESC : MSA_3R_DESC_BASE<"sra.w", int_mips_sra_w, NoItinerary,
1781                                    MSA128, MSA128>;
1782class SRA_D_DESC : MSA_3R_DESC_BASE<"sra.d", int_mips_sra_d, NoItinerary,
1783                                    MSA128, MSA128>;
1784
1785class SRAI_B_DESC : MSA_BIT_B_DESC_BASE<"srai.b", int_mips_srai_b,
1786                                        NoItinerary, MSA128, MSA128>;
1787class SRAI_H_DESC : MSA_BIT_H_DESC_BASE<"srai.h", int_mips_srai_h,
1788                                        NoItinerary, MSA128, MSA128>;
1789class SRAI_W_DESC : MSA_BIT_W_DESC_BASE<"srai.w", int_mips_srai_w,
1790                                        NoItinerary, MSA128, MSA128>;
1791class SRAI_D_DESC : MSA_BIT_D_DESC_BASE<"srai.d", int_mips_srai_d,
1792                                        NoItinerary, MSA128, MSA128>;
1793
1794class SRL_B_DESC : MSA_3R_DESC_BASE<"srl.b", int_mips_srl_b, NoItinerary,
1795                                    MSA128, MSA128>;
1796class SRL_H_DESC : MSA_3R_DESC_BASE<"srl.h", int_mips_srl_h, NoItinerary,
1797                                    MSA128, MSA128>;
1798class SRL_W_DESC : MSA_3R_DESC_BASE<"srl.w", int_mips_srl_w, NoItinerary,
1799                                    MSA128, MSA128>;
1800class SRL_D_DESC : MSA_3R_DESC_BASE<"srl.d", int_mips_srl_d, NoItinerary,
1801                                    MSA128, MSA128>;
1802
1803class SRLI_B_DESC : MSA_BIT_B_DESC_BASE<"srli.b", int_mips_srli_b,
1804                                        NoItinerary, MSA128, MSA128>;
1805class SRLI_H_DESC : MSA_BIT_H_DESC_BASE<"srli.h", int_mips_srli_h,
1806                                        NoItinerary, MSA128, MSA128>;
1807class SRLI_W_DESC : MSA_BIT_W_DESC_BASE<"srli.w", int_mips_srli_w,
1808                                        NoItinerary, MSA128, MSA128>;
1809class SRLI_D_DESC : MSA_BIT_D_DESC_BASE<"srli.d", int_mips_srli_d,
1810                                        NoItinerary, MSA128, MSA128>;
1811
1812class ST_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
1813                   ValueType TyNode, InstrItinClass itin, RegisterClass RCWD,
1814                   Operand MemOpnd = mem, ComplexPattern Addr = addr> {
1815  dag OutOperandList = (outs);
1816  dag InOperandList = (ins RCWD:$wd, MemOpnd:$addr);
1817  string AsmString = !strconcat(instr_asm, "\t$wd, $addr");
1818  list<dag> Pattern = [(OpNode (TyNode RCWD:$wd), Addr:$addr)];
1819  InstrItinClass Itinerary = itin;
1820}
1821
1822// Load/Store
1823class ST_B_DESC : ST_DESC_BASE<"st.b", store, v16i8, NoItinerary, MSA128>;
1824class ST_H_DESC : ST_DESC_BASE<"st.h", store, v8i16, NoItinerary, MSA128>;
1825class ST_W_DESC : ST_DESC_BASE<"st.w", store, v4i32, NoItinerary, MSA128>;
1826class ST_D_DESC : ST_DESC_BASE<"st.d", store, v2i64, NoItinerary, MSA128>;
1827
1828class SUBS_S_B_DESC : MSA_3R_DESC_BASE<"subs_s.b", int_mips_subs_s_b,
1829                                       NoItinerary, MSA128, MSA128>;
1830class SUBS_S_H_DESC : MSA_3R_DESC_BASE<"subs_s.h", int_mips_subs_s_h,
1831                                       NoItinerary, MSA128, MSA128>;
1832class SUBS_S_W_DESC : MSA_3R_DESC_BASE<"subs_s.w", int_mips_subs_s_w,
1833                                       NoItinerary, MSA128, MSA128>;
1834class SUBS_S_D_DESC : MSA_3R_DESC_BASE<"subs_s.d", int_mips_subs_s_d,
1835                                       NoItinerary, MSA128, MSA128>;
1836
1837class SUBS_U_B_DESC : MSA_3R_DESC_BASE<"subs_u.b", int_mips_subs_u_b,
1838                                       NoItinerary, MSA128, MSA128>;
1839class SUBS_U_H_DESC : MSA_3R_DESC_BASE<"subs_u.h", int_mips_subs_u_h,
1840                                       NoItinerary, MSA128, MSA128>;
1841class SUBS_U_W_DESC : MSA_3R_DESC_BASE<"subs_u.w", int_mips_subs_u_w,
1842                                       NoItinerary, MSA128, MSA128>;
1843class SUBS_U_D_DESC : MSA_3R_DESC_BASE<"subs_u.d", int_mips_subs_u_d,
1844                                       NoItinerary, MSA128, MSA128>;
1845
1846class SUBSUS_U_B_DESC : MSA_3R_DESC_BASE<"subsus_u.b", int_mips_subsus_u_b,
1847                                         NoItinerary, MSA128, MSA128>;
1848class SUBSUS_U_H_DESC : MSA_3R_DESC_BASE<"subsus_u.h", int_mips_subsus_u_h,
1849                                         NoItinerary, MSA128, MSA128>;
1850class SUBSUS_U_W_DESC : MSA_3R_DESC_BASE<"subsus_u.w", int_mips_subsus_u_w,
1851                                         NoItinerary, MSA128, MSA128>;
1852class SUBSUS_U_D_DESC : MSA_3R_DESC_BASE<"subsus_u.d", int_mips_subsus_u_d,
1853                                         NoItinerary, MSA128, MSA128>;
1854
1855class SUBSUU_S_B_DESC : MSA_3R_DESC_BASE<"subsuu_s.b", int_mips_subsuu_s_b,
1856                                         NoItinerary, MSA128, MSA128>;
1857class SUBSUU_S_H_DESC : MSA_3R_DESC_BASE<"subsuu_s.h", int_mips_subsuu_s_h,
1858                                         NoItinerary, MSA128, MSA128>;
1859class SUBSUU_S_W_DESC : MSA_3R_DESC_BASE<"subsuu_s.w", int_mips_subsuu_s_w,
1860                                         NoItinerary, MSA128, MSA128>;
1861class SUBSUU_S_D_DESC : MSA_3R_DESC_BASE<"subsuu_s.d", int_mips_subsuu_s_d,
1862                                         NoItinerary, MSA128, MSA128>;
1863
1864class SUBV_B_DESC : MSA_3R_DESC_BASE<"subv.b", int_mips_subv_b,
1865                                     NoItinerary, MSA128, MSA128>;
1866class SUBV_H_DESC : MSA_3R_DESC_BASE<"subv.h", int_mips_subv_h,
1867                                     NoItinerary, MSA128, MSA128>;
1868class SUBV_W_DESC : MSA_3R_DESC_BASE<"subv.w", int_mips_subv_w,
1869                                     NoItinerary, MSA128, MSA128>;
1870class SUBV_D_DESC : MSA_3R_DESC_BASE<"subv.d", int_mips_subv_d,
1871                                     NoItinerary, MSA128, MSA128>;
1872
1873class SUBVI_B_DESC : MSA_I5_DESC_BASE<"subvi.b", int_mips_subvi_b, NoItinerary,
1874                                      MSA128, MSA128>;
1875class SUBVI_H_DESC : MSA_I5_DESC_BASE<"subvi.h", int_mips_subvi_h, NoItinerary,
1876                                      MSA128, MSA128>;
1877class SUBVI_W_DESC : MSA_I5_DESC_BASE<"subvi.w", int_mips_subvi_w, NoItinerary,
1878                                      MSA128, MSA128>;
1879class SUBVI_D_DESC : MSA_I5_DESC_BASE<"subvi.d", int_mips_subvi_d, NoItinerary,
1880                                      MSA128, MSA128>;
1881
1882class VSHF_B_DESC : MSA_3R_DESC_BASE<"vshf.b", int_mips_vshf_b,
1883                                     NoItinerary, MSA128, MSA128>;
1884class VSHF_H_DESC : MSA_3R_DESC_BASE<"vshf.h", int_mips_vshf_h,
1885                                     NoItinerary, MSA128, MSA128>;
1886class VSHF_W_DESC : MSA_3R_DESC_BASE<"vshf.w", int_mips_vshf_w,
1887                                     NoItinerary, MSA128, MSA128>;
1888class VSHF_D_DESC : MSA_3R_DESC_BASE<"vshf.d", int_mips_vshf_d,
1889                                     NoItinerary, MSA128, MSA128>;
1890
1891class XORI_B_DESC : MSA_I8_DESC_BASE<"xori.b", int_mips_xori_b, NoItinerary,
1892                                     MSA128, MSA128>;
1893// Instruction defs.
1894def ADD_A_B : ADD_A_B_ENC, ADD_A_B_DESC, Requires<[HasMSA]>;
1895def ADD_A_H : ADD_A_H_ENC, ADD_A_H_DESC, Requires<[HasMSA]>;
1896def ADD_A_W : ADD_A_W_ENC, ADD_A_W_DESC, Requires<[HasMSA]>;
1897def ADD_A_D : ADD_A_D_ENC, ADD_A_D_DESC, Requires<[HasMSA]>;
1898
1899def ADDS_A_B : ADDS_A_B_ENC, ADDS_A_B_DESC, Requires<[HasMSA]>;
1900def ADDS_A_H : ADDS_A_H_ENC, ADDS_A_H_DESC, Requires<[HasMSA]>;
1901def ADDS_A_W : ADDS_A_W_ENC, ADDS_A_W_DESC, Requires<[HasMSA]>;
1902def ADDS_A_D : ADDS_A_D_ENC, ADDS_A_D_DESC, Requires<[HasMSA]>;
1903
1904def ADDS_S_B : ADDS_S_B_ENC, ADDS_S_B_DESC, Requires<[HasMSA]>;
1905def ADDS_S_H : ADDS_S_H_ENC, ADDS_S_H_DESC, Requires<[HasMSA]>;
1906def ADDS_S_W : ADDS_S_W_ENC, ADDS_S_W_DESC, Requires<[HasMSA]>;
1907def ADDS_S_D : ADDS_S_D_ENC, ADDS_S_D_DESC, Requires<[HasMSA]>;
1908
1909def ADDS_U_B : ADDS_U_B_ENC, ADDS_U_B_DESC, Requires<[HasMSA]>;
1910def ADDS_U_H : ADDS_U_H_ENC, ADDS_U_H_DESC, Requires<[HasMSA]>;
1911def ADDS_U_W : ADDS_U_W_ENC, ADDS_U_W_DESC, Requires<[HasMSA]>;
1912def ADDS_U_D : ADDS_U_D_ENC, ADDS_U_D_DESC, Requires<[HasMSA]>;
1913
1914def ADDV_B : ADDV_B_ENC, ADDV_B_DESC, Requires<[HasMSA]>;
1915def ADDV_H : ADDV_H_ENC, ADDV_H_DESC, Requires<[HasMSA]>;
1916def ADDV_W : ADDV_W_ENC, ADDV_W_DESC, Requires<[HasMSA]>;
1917def ADDV_D : ADDV_D_ENC, ADDV_D_DESC, Requires<[HasMSA]>;
1918
1919def ADDVI_B : ADDVI_B_ENC, ADDVI_B_DESC, Requires<[HasMSA]>;
1920def ADDVI_H : ADDVI_H_ENC, ADDVI_H_DESC, Requires<[HasMSA]>;
1921def ADDVI_W : ADDVI_W_ENC, ADDVI_W_DESC, Requires<[HasMSA]>;
1922def ADDVI_D : ADDVI_D_ENC, ADDVI_D_DESC, Requires<[HasMSA]>;
1923
1924def ANDI_B : ANDI_B_ENC, ANDI_B_DESC, Requires<[HasMSA]>;
1925
1926def ASUB_S_B : ASUB_S_B_ENC, ASUB_S_B_DESC, Requires<[HasMSA]>;
1927def ASUB_S_H : ASUB_S_H_ENC, ASUB_S_H_DESC, Requires<[HasMSA]>;
1928def ASUB_S_W : ASUB_S_W_ENC, ASUB_S_W_DESC, Requires<[HasMSA]>;
1929def ASUB_S_D : ASUB_S_D_ENC, ASUB_S_D_DESC, Requires<[HasMSA]>;
1930
1931def ASUB_U_B : ASUB_U_B_ENC, ASUB_U_B_DESC, Requires<[HasMSA]>;
1932def ASUB_U_H : ASUB_U_H_ENC, ASUB_U_H_DESC, Requires<[HasMSA]>;
1933def ASUB_U_W : ASUB_U_W_ENC, ASUB_U_W_DESC, Requires<[HasMSA]>;
1934def ASUB_U_D : ASUB_U_D_ENC, ASUB_U_D_DESC, Requires<[HasMSA]>;
1935
1936def AVE_S_B : AVE_S_B_ENC, AVE_S_B_DESC, Requires<[HasMSA]>;
1937def AVE_S_H : AVE_S_H_ENC, AVE_S_H_DESC, Requires<[HasMSA]>;
1938def AVE_S_W : AVE_S_W_ENC, AVE_S_W_DESC, Requires<[HasMSA]>;
1939def AVE_S_D : AVE_S_D_ENC, AVE_S_D_DESC, Requires<[HasMSA]>;
1940
1941def AVE_U_B : AVE_U_B_ENC, AVE_U_B_DESC, Requires<[HasMSA]>;
1942def AVE_U_H : AVE_U_H_ENC, AVE_U_H_DESC, Requires<[HasMSA]>;
1943def AVE_U_W : AVE_U_W_ENC, AVE_U_W_DESC, Requires<[HasMSA]>;
1944def AVE_U_D : AVE_U_D_ENC, AVE_U_D_DESC, Requires<[HasMSA]>;
1945
1946def AVER_S_B : AVER_S_B_ENC, AVER_S_B_DESC, Requires<[HasMSA]>;
1947def AVER_S_H : AVER_S_H_ENC, AVER_S_H_DESC, Requires<[HasMSA]>;
1948def AVER_S_W : AVER_S_W_ENC, AVER_S_W_DESC, Requires<[HasMSA]>;
1949def AVER_S_D : AVER_S_D_ENC, AVER_S_D_DESC, Requires<[HasMSA]>;
1950
1951def AVER_U_B : AVER_U_B_ENC, AVER_U_B_DESC, Requires<[HasMSA]>;
1952def AVER_U_H : AVER_U_H_ENC, AVER_U_H_DESC, Requires<[HasMSA]>;
1953def AVER_U_W : AVER_U_W_ENC, AVER_U_W_DESC, Requires<[HasMSA]>;
1954def AVER_U_D : AVER_U_D_ENC, AVER_U_D_DESC, Requires<[HasMSA]>;
1955
1956def BCLR_B : BCLR_B_ENC, BCLR_B_DESC, Requires<[HasMSA]>;
1957def BCLR_H : BCLR_H_ENC, BCLR_H_DESC, Requires<[HasMSA]>;
1958def BCLR_W : BCLR_W_ENC, BCLR_W_DESC, Requires<[HasMSA]>;
1959def BCLR_D : BCLR_D_ENC, BCLR_D_DESC, Requires<[HasMSA]>;
1960
1961def BCLRI_B : BCLRI_B_ENC, BCLRI_B_DESC, Requires<[HasMSA]>;
1962def BCLRI_H : BCLRI_H_ENC, BCLRI_H_DESC, Requires<[HasMSA]>;
1963def BCLRI_W : BCLRI_W_ENC, BCLRI_W_DESC, Requires<[HasMSA]>;
1964def BCLRI_D : BCLRI_D_ENC, BCLRI_D_DESC, Requires<[HasMSA]>;
1965
1966def BINSL_B : BINSL_B_ENC, BINSL_B_DESC, Requires<[HasMSA]>;
1967def BINSL_H : BINSL_H_ENC, BINSL_H_DESC, Requires<[HasMSA]>;
1968def BINSL_W : BINSL_W_ENC, BINSL_W_DESC, Requires<[HasMSA]>;
1969def BINSL_D : BINSL_D_ENC, BINSL_D_DESC, Requires<[HasMSA]>;
1970
1971def BINSLI_B : BINSLI_B_ENC, BINSLI_B_DESC, Requires<[HasMSA]>;
1972def BINSLI_H : BINSLI_H_ENC, BINSLI_H_DESC, Requires<[HasMSA]>;
1973def BINSLI_W : BINSLI_W_ENC, BINSLI_W_DESC, Requires<[HasMSA]>;
1974def BINSLI_D : BINSLI_D_ENC, BINSLI_D_DESC, Requires<[HasMSA]>;
1975
1976def BINSR_B : BINSR_B_ENC, BINSR_B_DESC, Requires<[HasMSA]>;
1977def BINSR_H : BINSR_H_ENC, BINSR_H_DESC, Requires<[HasMSA]>;
1978def BINSR_W : BINSR_W_ENC, BINSR_W_DESC, Requires<[HasMSA]>;
1979def BINSR_D : BINSR_D_ENC, BINSR_D_DESC, Requires<[HasMSA]>;
1980
1981def BINSRI_B : BINSRI_B_ENC, BINSRI_B_DESC, Requires<[HasMSA]>;
1982def BINSRI_H : BINSRI_H_ENC, BINSRI_H_DESC, Requires<[HasMSA]>;
1983def BINSRI_W : BINSRI_W_ENC, BINSRI_W_DESC, Requires<[HasMSA]>;
1984def BINSRI_D : BINSRI_D_ENC, BINSRI_D_DESC, Requires<[HasMSA]>;
1985
1986def BMNZI_B : BMNZI_B_ENC, BMNZI_B_DESC, Requires<[HasMSA]>;
1987
1988def BMZI_B : BMZI_B_ENC, BMZI_B_DESC, Requires<[HasMSA]>;
1989
1990def BNEG_B : BNEG_B_ENC, BNEG_B_DESC, Requires<[HasMSA]>;
1991def BNEG_H : BNEG_H_ENC, BNEG_H_DESC, Requires<[HasMSA]>;
1992def BNEG_W : BNEG_W_ENC, BNEG_W_DESC, Requires<[HasMSA]>;
1993def BNEG_D : BNEG_D_ENC, BNEG_D_DESC, Requires<[HasMSA]>;
1994
1995def BNEGI_B : BNEGI_B_ENC, BNEGI_B_DESC, Requires<[HasMSA]>;
1996def BNEGI_H : BNEGI_H_ENC, BNEGI_H_DESC, Requires<[HasMSA]>;
1997def BNEGI_W : BNEGI_W_ENC, BNEGI_W_DESC, Requires<[HasMSA]>;
1998def BNEGI_D : BNEGI_D_ENC, BNEGI_D_DESC, Requires<[HasMSA]>;
1999
2000def BSELI_B : BSELI_B_ENC, BSELI_B_DESC, Requires<[HasMSA]>;
2001
2002def BSET_B : BSET_B_ENC, BSET_B_DESC, Requires<[HasMSA]>;
2003def BSET_H : BSET_H_ENC, BSET_H_DESC, Requires<[HasMSA]>;
2004def BSET_W : BSET_W_ENC, BSET_W_DESC, Requires<[HasMSA]>;
2005def BSET_D : BSET_D_ENC, BSET_D_DESC, Requires<[HasMSA]>;
2006
2007def BSETI_B : BSETI_B_ENC, BSETI_B_DESC, Requires<[HasMSA]>;
2008def BSETI_H : BSETI_H_ENC, BSETI_H_DESC, Requires<[HasMSA]>;
2009def BSETI_W : BSETI_W_ENC, BSETI_W_DESC, Requires<[HasMSA]>;
2010def BSETI_D : BSETI_D_ENC, BSETI_D_DESC, Requires<[HasMSA]>;
2011
2012def CEQ_B : CEQ_B_ENC, CEQ_B_DESC, Requires<[HasMSA]>;
2013def CEQ_H : CEQ_H_ENC, CEQ_H_DESC, Requires<[HasMSA]>;
2014def CEQ_W : CEQ_W_ENC, CEQ_W_DESC, Requires<[HasMSA]>;
2015def CEQ_D : CEQ_D_ENC, CEQ_D_DESC, Requires<[HasMSA]>;
2016
2017def CEQI_B : CEQI_B_ENC, CEQI_B_DESC, Requires<[HasMSA]>;
2018def CEQI_H : CEQI_H_ENC, CEQI_H_DESC, Requires<[HasMSA]>;
2019def CEQI_W : CEQI_W_ENC, CEQI_W_DESC, Requires<[HasMSA]>;
2020def CEQI_D : CEQI_D_ENC, CEQI_D_DESC, Requires<[HasMSA]>;
2021
2022def CLE_S_B : CLE_S_B_ENC, CLE_S_B_DESC, Requires<[HasMSA]>;
2023def CLE_S_H : CLE_S_H_ENC, CLE_S_H_DESC, Requires<[HasMSA]>;
2024def CLE_S_W : CLE_S_W_ENC, CLE_S_W_DESC, Requires<[HasMSA]>;
2025def CLE_S_D : CLE_S_D_ENC, CLE_S_D_DESC, Requires<[HasMSA]>;
2026
2027def CLE_U_B : CLE_U_B_ENC, CLE_U_B_DESC, Requires<[HasMSA]>;
2028def CLE_U_H : CLE_U_H_ENC, CLE_U_H_DESC, Requires<[HasMSA]>;
2029def CLE_U_W : CLE_U_W_ENC, CLE_U_W_DESC, Requires<[HasMSA]>;
2030def CLE_U_D : CLE_U_D_ENC, CLE_U_D_DESC, Requires<[HasMSA]>;
2031
2032def CLEI_S_B : CLEI_S_B_ENC, CLEI_S_B_DESC, Requires<[HasMSA]>;
2033def CLEI_S_H : CLEI_S_H_ENC, CLEI_S_H_DESC, Requires<[HasMSA]>;
2034def CLEI_S_W : CLEI_S_W_ENC, CLEI_S_W_DESC, Requires<[HasMSA]>;
2035def CLEI_S_D : CLEI_S_D_ENC, CLEI_S_D_DESC, Requires<[HasMSA]>;
2036
2037def CLEI_U_B : CLEI_U_B_ENC, CLEI_U_B_DESC, Requires<[HasMSA]>;
2038def CLEI_U_H : CLEI_U_H_ENC, CLEI_U_H_DESC, Requires<[HasMSA]>;
2039def CLEI_U_W : CLEI_U_W_ENC, CLEI_U_W_DESC, Requires<[HasMSA]>;
2040def CLEI_U_D : CLEI_U_D_ENC, CLEI_U_D_DESC, Requires<[HasMSA]>;
2041
2042def CLT_S_B : CLT_S_B_ENC, CLT_S_B_DESC, Requires<[HasMSA]>;
2043def CLT_S_H : CLT_S_H_ENC, CLT_S_H_DESC, Requires<[HasMSA]>;
2044def CLT_S_W : CLT_S_W_ENC, CLT_S_W_DESC, Requires<[HasMSA]>;
2045def CLT_S_D : CLT_S_D_ENC, CLT_S_D_DESC, Requires<[HasMSA]>;
2046
2047def CLT_U_B : CLT_U_B_ENC, CLT_U_B_DESC, Requires<[HasMSA]>;
2048def CLT_U_H : CLT_U_H_ENC, CLT_U_H_DESC, Requires<[HasMSA]>;
2049def CLT_U_W : CLT_U_W_ENC, CLT_U_W_DESC, Requires<[HasMSA]>;
2050def CLT_U_D : CLT_U_D_ENC, CLT_U_D_DESC, Requires<[HasMSA]>;
2051
2052def CLTI_S_B : CLTI_S_B_ENC, CLTI_S_B_DESC, Requires<[HasMSA]>;
2053def CLTI_S_H : CLTI_S_H_ENC, CLTI_S_H_DESC, Requires<[HasMSA]>;
2054def CLTI_S_W : CLTI_S_W_ENC, CLTI_S_W_DESC, Requires<[HasMSA]>;
2055def CLTI_S_D : CLTI_S_D_ENC, CLTI_S_D_DESC, Requires<[HasMSA]>;
2056
2057def CLTI_U_B : CLTI_U_B_ENC, CLTI_U_B_DESC, Requires<[HasMSA]>;
2058def CLTI_U_H : CLTI_U_H_ENC, CLTI_U_H_DESC, Requires<[HasMSA]>;
2059def CLTI_U_W : CLTI_U_W_ENC, CLTI_U_W_DESC, Requires<[HasMSA]>;
2060def CLTI_U_D : CLTI_U_D_ENC, CLTI_U_D_DESC, Requires<[HasMSA]>;
2061
2062def COPY_S_B : COPY_S_B_ENC, COPY_S_B_DESC, Requires<[HasMSA]>;
2063def COPY_S_H : COPY_S_H_ENC, COPY_S_H_DESC, Requires<[HasMSA]>;
2064def COPY_S_W : COPY_S_W_ENC, COPY_S_W_DESC, Requires<[HasMSA]>;
2065
2066def COPY_U_B : COPY_U_B_ENC, COPY_U_B_DESC, Requires<[HasMSA]>;
2067def COPY_U_H : COPY_U_H_ENC, COPY_U_H_DESC, Requires<[HasMSA]>;
2068def COPY_U_W : COPY_U_W_ENC, COPY_U_W_DESC, Requires<[HasMSA]>;
2069
2070def DIV_S_B : DIV_S_B_ENC, DIV_S_B_DESC, Requires<[HasMSA]>;
2071def DIV_S_H : DIV_S_H_ENC, DIV_S_H_DESC, Requires<[HasMSA]>;
2072def DIV_S_W : DIV_S_W_ENC, DIV_S_W_DESC, Requires<[HasMSA]>;
2073def DIV_S_D : DIV_S_D_ENC, DIV_S_D_DESC, Requires<[HasMSA]>;
2074
2075def DIV_U_B : DIV_U_B_ENC, DIV_U_B_DESC, Requires<[HasMSA]>;
2076def DIV_U_H : DIV_U_H_ENC, DIV_U_H_DESC, Requires<[HasMSA]>;
2077def DIV_U_W : DIV_U_W_ENC, DIV_U_W_DESC, Requires<[HasMSA]>;
2078def DIV_U_D : DIV_U_D_ENC, DIV_U_D_DESC, Requires<[HasMSA]>;
2079
2080def DOTP_S_B : DOTP_S_B_ENC, DOTP_S_B_DESC, Requires<[HasMSA]>;
2081def DOTP_S_H : DOTP_S_H_ENC, DOTP_S_H_DESC, Requires<[HasMSA]>;
2082def DOTP_S_W : DOTP_S_W_ENC, DOTP_S_W_DESC, Requires<[HasMSA]>;
2083def DOTP_S_D : DOTP_S_D_ENC, DOTP_S_D_DESC, Requires<[HasMSA]>;
2084
2085def DOTP_U_B : DOTP_U_B_ENC, DOTP_U_B_DESC, Requires<[HasMSA]>;
2086def DOTP_U_H : DOTP_U_H_ENC, DOTP_U_H_DESC, Requires<[HasMSA]>;
2087def DOTP_U_W : DOTP_U_W_ENC, DOTP_U_W_DESC, Requires<[HasMSA]>;
2088def DOTP_U_D : DOTP_U_D_ENC, DOTP_U_D_DESC, Requires<[HasMSA]>;
2089
2090def DPADD_S_H : DPADD_S_H_ENC, DPADD_S_H_DESC, Requires<[HasMSA]>;
2091def DPADD_S_W : DPADD_S_W_ENC, DPADD_S_W_DESC, Requires<[HasMSA]>;
2092def DPADD_S_D : DPADD_S_D_ENC, DPADD_S_D_DESC, Requires<[HasMSA]>;
2093
2094def DPADD_U_H : DPADD_U_H_ENC, DPADD_U_H_DESC, Requires<[HasMSA]>;
2095def DPADD_U_W : DPADD_U_W_ENC, DPADD_U_W_DESC, Requires<[HasMSA]>;
2096def DPADD_U_D : DPADD_U_D_ENC, DPADD_U_D_DESC, Requires<[HasMSA]>;
2097
2098def DPSUB_S_H : DPSUB_S_H_ENC, DPSUB_S_H_DESC, Requires<[HasMSA]>;
2099def DPSUB_S_W : DPSUB_S_W_ENC, DPSUB_S_W_DESC, Requires<[HasMSA]>;
2100def DPSUB_S_D : DPSUB_S_D_ENC, DPSUB_S_D_DESC, Requires<[HasMSA]>;
2101
2102def DPSUB_U_H : DPSUB_U_H_ENC, DPSUB_U_H_DESC, Requires<[HasMSA]>;
2103def DPSUB_U_W : DPSUB_U_W_ENC, DPSUB_U_W_DESC, Requires<[HasMSA]>;
2104def DPSUB_U_D : DPSUB_U_D_ENC, DPSUB_U_D_DESC, Requires<[HasMSA]>;
2105
2106def FADD_W : FADD_W_ENC, FADD_W_DESC, Requires<[HasMSA]>;
2107def FADD_D : FADD_D_ENC, FADD_D_DESC, Requires<[HasMSA]>;
2108
2109def FCEQ_W : FCEQ_W_ENC, FCEQ_W_DESC, Requires<[HasMSA]>;
2110def FCEQ_D : FCEQ_D_ENC, FCEQ_D_DESC, Requires<[HasMSA]>;
2111
2112def FCLE_W : FCLE_W_ENC, FCLE_W_DESC, Requires<[HasMSA]>;
2113def FCLE_D : FCLE_D_ENC, FCLE_D_DESC, Requires<[HasMSA]>;
2114
2115def FCLT_W : FCLT_W_ENC, FCLT_W_DESC, Requires<[HasMSA]>;
2116def FCLT_D : FCLT_D_ENC, FCLT_D_DESC, Requires<[HasMSA]>;
2117
2118def FCLASS_W : FCLASS_W_ENC, FCLASS_W_DESC, Requires<[HasMSA]>;
2119def FCLASS_D : FCLASS_D_ENC, FCLASS_D_DESC, Requires<[HasMSA]>;
2120
2121def FCGE_W : FCGE_W_ENC, FCGE_W_DESC, Requires<[HasMSA]>;
2122def FCGE_D : FCGE_D_ENC, FCGE_D_DESC, Requires<[HasMSA]>;
2123
2124def FCGT_W : FCGT_W_ENC, FCGT_W_DESC, Requires<[HasMSA]>;
2125def FCGT_D : FCGT_D_ENC, FCGT_D_DESC, Requires<[HasMSA]>;
2126
2127def FCNE_W : FCNE_W_ENC, FCNE_W_DESC, Requires<[HasMSA]>;
2128def FCNE_D : FCNE_D_ENC, FCNE_D_DESC, Requires<[HasMSA]>;
2129
2130def FCUN_W : FCUN_W_ENC, FCUN_W_DESC, Requires<[HasMSA]>;
2131def FCUN_D : FCUN_D_ENC, FCUN_D_DESC, Requires<[HasMSA]>;
2132
2133def FDIV_W : FDIV_W_ENC, FDIV_W_DESC, Requires<[HasMSA]>;
2134def FDIV_D : FDIV_D_ENC, FDIV_D_DESC, Requires<[HasMSA]>;
2135
2136def FEXDO_H : FEXDO_H_ENC, FEXDO_H_DESC, Requires<[HasMSA]>;
2137def FEXDO_W : FEXDO_W_ENC, FEXDO_W_DESC, Requires<[HasMSA]>;
2138
2139def FEXP2_W : FEXP2_W_ENC, FEXP2_W_DESC, Requires<[HasMSA]>;
2140def FEXP2_D : FEXP2_D_ENC, FEXP2_D_DESC, Requires<[HasMSA]>;
2141
2142def FEXUPL_W : FEXUPL_W_ENC, FEXUPL_W_DESC, Requires<[HasMSA]>;
2143def FEXUPL_D : FEXUPL_D_ENC, FEXUPL_D_DESC, Requires<[HasMSA]>;
2144
2145def FEXUPR_W : FEXUPR_W_ENC, FEXUPR_W_DESC, Requires<[HasMSA]>;
2146def FEXUPR_D : FEXUPR_D_ENC, FEXUPR_D_DESC, Requires<[HasMSA]>;
2147
2148def FFINT_S_W : FFINT_S_W_ENC, FFINT_S_W_DESC, Requires<[HasMSA]>;
2149def FFINT_S_D : FFINT_S_D_ENC, FFINT_S_D_DESC, Requires<[HasMSA]>;
2150
2151def FFINT_U_W : FFINT_U_W_ENC, FFINT_U_W_DESC, Requires<[HasMSA]>;
2152def FFINT_U_D : FFINT_U_D_ENC, FFINT_U_D_DESC, Requires<[HasMSA]>;
2153
2154def FFQL_W : FFQL_W_ENC, FFQL_W_DESC, Requires<[HasMSA]>;
2155def FFQL_D : FFQL_D_ENC, FFQL_D_DESC, Requires<[HasMSA]>;
2156
2157def FFQR_W : FFQR_W_ENC, FFQR_W_DESC, Requires<[HasMSA]>;
2158def FFQR_D : FFQR_D_ENC, FFQR_D_DESC, Requires<[HasMSA]>;
2159
2160def FILL_B : FILL_B_ENC, FILL_B_DESC, Requires<[HasMSA]>;
2161def FILL_H : FILL_H_ENC, FILL_H_DESC, Requires<[HasMSA]>;
2162def FILL_W : FILL_W_ENC, FILL_W_DESC, Requires<[HasMSA]>;
2163
2164def FLOG2_W : FLOG2_W_ENC, FLOG2_W_DESC, Requires<[HasMSA]>;
2165def FLOG2_D : FLOG2_D_ENC, FLOG2_D_DESC, Requires<[HasMSA]>;
2166
2167def FMADD_W : FMADD_W_ENC, FMADD_W_DESC, Requires<[HasMSA]>;
2168def FMADD_D : FMADD_D_ENC, FMADD_D_DESC, Requires<[HasMSA]>;
2169
2170def FMAX_W : FMAX_W_ENC, FMAX_W_DESC, Requires<[HasMSA]>;
2171def FMAX_D : FMAX_D_ENC, FMAX_D_DESC, Requires<[HasMSA]>;
2172
2173def FMAX_A_W : FMAX_A_W_ENC, FMAX_A_W_DESC, Requires<[HasMSA]>;
2174def FMAX_A_D : FMAX_A_D_ENC, FMAX_A_D_DESC, Requires<[HasMSA]>;
2175
2176def FMIN_W : FMIN_W_ENC, FMIN_W_DESC, Requires<[HasMSA]>;
2177def FMIN_D : FMIN_D_ENC, FMIN_D_DESC, Requires<[HasMSA]>;
2178
2179def FMIN_A_W : FMIN_A_W_ENC, FMIN_A_W_DESC, Requires<[HasMSA]>;
2180def FMIN_A_D : FMIN_A_D_ENC, FMIN_A_D_DESC, Requires<[HasMSA]>;
2181
2182def FMSUB_W : FMSUB_W_ENC, FMSUB_W_DESC, Requires<[HasMSA]>;
2183def FMSUB_D : FMSUB_D_ENC, FMSUB_D_DESC, Requires<[HasMSA]>;
2184
2185def FMUL_W : FMUL_W_ENC, FMUL_W_DESC, Requires<[HasMSA]>;
2186def FMUL_D : FMUL_D_ENC, FMUL_D_DESC, Requires<[HasMSA]>;
2187
2188def FRINT_W : FRINT_W_ENC, FRINT_W_DESC, Requires<[HasMSA]>;
2189def FRINT_D : FRINT_D_ENC, FRINT_D_DESC, Requires<[HasMSA]>;
2190
2191def FRCP_W : FRCP_W_ENC, FRCP_W_DESC, Requires<[HasMSA]>;
2192def FRCP_D : FRCP_D_ENC, FRCP_D_DESC, Requires<[HasMSA]>;
2193
2194def FRSQRT_W : FRSQRT_W_ENC, FRSQRT_W_DESC, Requires<[HasMSA]>;
2195def FRSQRT_D : FRSQRT_D_ENC, FRSQRT_D_DESC, Requires<[HasMSA]>;
2196
2197def FSEQ_W : FSEQ_W_ENC, FSEQ_W_DESC, Requires<[HasMSA]>;
2198def FSEQ_D : FSEQ_D_ENC, FSEQ_D_DESC, Requires<[HasMSA]>;
2199
2200def FSLE_W : FSLE_W_ENC, FSLE_W_DESC, Requires<[HasMSA]>;
2201def FSLE_D : FSLE_D_ENC, FSLE_D_DESC, Requires<[HasMSA]>;
2202
2203def FSLT_W : FSLT_W_ENC, FSLT_W_DESC, Requires<[HasMSA]>;
2204def FSLT_D : FSLT_D_ENC, FSLT_D_DESC, Requires<[HasMSA]>;
2205
2206def FSGE_W : FSGE_W_ENC, FSGE_W_DESC, Requires<[HasMSA]>;
2207def FSGE_D : FSGE_D_ENC, FSGE_D_DESC, Requires<[HasMSA]>;
2208
2209def FSGT_W : FSGT_W_ENC, FSGT_W_DESC, Requires<[HasMSA]>;
2210def FSGT_D : FSGT_D_ENC, FSGT_D_DESC, Requires<[HasMSA]>;
2211
2212def FSNE_W : FSNE_W_ENC, FSNE_W_DESC, Requires<[HasMSA]>;
2213def FSNE_D : FSNE_D_ENC, FSNE_D_DESC, Requires<[HasMSA]>;
2214
2215def FSQRT_W : FSQRT_W_ENC, FSQRT_W_DESC, Requires<[HasMSA]>;
2216def FSQRT_D : FSQRT_D_ENC, FSQRT_D_DESC, Requires<[HasMSA]>;
2217
2218def FSUB_W : FSUB_W_ENC, FSUB_W_DESC, Requires<[HasMSA]>;
2219def FSUB_D : FSUB_D_ENC, FSUB_D_DESC, Requires<[HasMSA]>;
2220
2221def FTINT_S_W : FTINT_S_W_ENC, FTINT_S_W_DESC, Requires<[HasMSA]>;
2222def FTINT_S_D : FTINT_S_D_ENC, FTINT_S_D_DESC, Requires<[HasMSA]>;
2223
2224def FTINT_U_W : FTINT_U_W_ENC, FTINT_U_W_DESC, Requires<[HasMSA]>;
2225def FTINT_U_D : FTINT_U_D_ENC, FTINT_U_D_DESC, Requires<[HasMSA]>;
2226
2227def FTQ_H : FTQ_H_ENC, FTQ_H_DESC, Requires<[HasMSA]>;
2228def FTQ_W : FTQ_W_ENC, FTQ_W_DESC, Requires<[HasMSA]>;
2229
2230def ILVEV_B : ILVEV_B_ENC, ILVEV_B_DESC, Requires<[HasMSA]>;
2231def ILVEV_H : ILVEV_H_ENC, ILVEV_H_DESC, Requires<[HasMSA]>;
2232def ILVEV_W : ILVEV_W_ENC, ILVEV_W_DESC, Requires<[HasMSA]>;
2233def ILVEV_D : ILVEV_D_ENC, ILVEV_D_DESC, Requires<[HasMSA]>;
2234
2235def ILVL_B : ILVL_B_ENC, ILVL_B_DESC, Requires<[HasMSA]>;
2236def ILVL_H : ILVL_H_ENC, ILVL_H_DESC, Requires<[HasMSA]>;
2237def ILVL_W : ILVL_W_ENC, ILVL_W_DESC, Requires<[HasMSA]>;
2238def ILVL_D : ILVL_D_ENC, ILVL_D_DESC, Requires<[HasMSA]>;
2239
2240def ILVOD_B : ILVOD_B_ENC, ILVOD_B_DESC, Requires<[HasMSA]>;
2241def ILVOD_H : ILVOD_H_ENC, ILVOD_H_DESC, Requires<[HasMSA]>;
2242def ILVOD_W : ILVOD_W_ENC, ILVOD_W_DESC, Requires<[HasMSA]>;
2243def ILVOD_D : ILVOD_D_ENC, ILVOD_D_DESC, Requires<[HasMSA]>;
2244
2245def ILVR_B : ILVR_B_ENC, ILVR_B_DESC, Requires<[HasMSA]>;
2246def ILVR_H : ILVR_H_ENC, ILVR_H_DESC, Requires<[HasMSA]>;
2247def ILVR_W : ILVR_W_ENC, ILVR_W_DESC, Requires<[HasMSA]>;
2248def ILVR_D : ILVR_D_ENC, ILVR_D_DESC, Requires<[HasMSA]>;
2249
2250def INSERT_B : INSERT_B_ENC, INSERT_B_DESC, Requires<[HasMSA]>;
2251def INSERT_H : INSERT_H_ENC, INSERT_H_DESC, Requires<[HasMSA]>;
2252def INSERT_W : INSERT_W_ENC, INSERT_W_DESC, Requires<[HasMSA]>;
2253
2254def LD_B: LD_B_ENC, LD_B_DESC, Requires<[HasMSA]>;
2255def LD_H: LD_H_ENC, LD_H_DESC, Requires<[HasMSA]>;
2256def LD_W: LD_W_ENC, LD_W_DESC, Requires<[HasMSA]>;
2257def LD_D: LD_D_ENC, LD_D_DESC, Requires<[HasMSA]>;
2258
2259def LDI_B : LDI_B_ENC, LDI_B_DESC, Requires<[HasMSA]>;
2260def LDI_H : LDI_H_ENC, LDI_H_DESC, Requires<[HasMSA]>;
2261def LDI_W : LDI_W_ENC, LDI_W_DESC, Requires<[HasMSA]>;
2262
2263def MADD_Q_H : MADD_Q_H_ENC, MADD_Q_H_DESC, Requires<[HasMSA]>;
2264def MADD_Q_W : MADD_Q_W_ENC, MADD_Q_W_DESC, Requires<[HasMSA]>;
2265
2266def MADDR_Q_H : MADDR_Q_H_ENC, MADDR_Q_H_DESC, Requires<[HasMSA]>;
2267def MADDR_Q_W : MADDR_Q_W_ENC, MADDR_Q_W_DESC, Requires<[HasMSA]>;
2268
2269def MADDV_B : MADDV_B_ENC, MADDV_B_DESC, Requires<[HasMSA]>;
2270def MADDV_H : MADDV_H_ENC, MADDV_H_DESC, Requires<[HasMSA]>;
2271def MADDV_W : MADDV_W_ENC, MADDV_W_DESC, Requires<[HasMSA]>;
2272def MADDV_D : MADDV_D_ENC, MADDV_D_DESC, Requires<[HasMSA]>;
2273
2274def MAX_A_B : MAX_A_B_ENC, MAX_A_B_DESC, Requires<[HasMSA]>;
2275def MAX_A_H : MAX_A_H_ENC, MAX_A_H_DESC, Requires<[HasMSA]>;
2276def MAX_A_W : MAX_A_W_ENC, MAX_A_W_DESC, Requires<[HasMSA]>;
2277def MAX_A_D : MAX_A_D_ENC, MAX_A_D_DESC, Requires<[HasMSA]>;
2278
2279def MAX_S_B : MAX_S_B_ENC, MAX_S_B_DESC, Requires<[HasMSA]>;
2280def MAX_S_H : MAX_S_H_ENC, MAX_S_H_DESC, Requires<[HasMSA]>;
2281def MAX_S_W : MAX_S_W_ENC, MAX_S_W_DESC, Requires<[HasMSA]>;
2282def MAX_S_D : MAX_S_D_ENC, MAX_S_D_DESC, Requires<[HasMSA]>;
2283
2284def MAX_U_B : MAX_U_B_ENC, MAX_U_B_DESC, Requires<[HasMSA]>;
2285def MAX_U_H : MAX_U_H_ENC, MAX_U_H_DESC, Requires<[HasMSA]>;
2286def MAX_U_W : MAX_U_W_ENC, MAX_U_W_DESC, Requires<[HasMSA]>;
2287def MAX_U_D : MAX_U_D_ENC, MAX_U_D_DESC, Requires<[HasMSA]>;
2288
2289def MAXI_S_B : MAXI_S_B_ENC, MAXI_S_B_DESC, Requires<[HasMSA]>;
2290def MAXI_S_H : MAXI_S_H_ENC, MAXI_S_H_DESC, Requires<[HasMSA]>;
2291def MAXI_S_W : MAXI_S_W_ENC, MAXI_S_W_DESC, Requires<[HasMSA]>;
2292def MAXI_S_D : MAXI_S_D_ENC, MAXI_S_D_DESC, Requires<[HasMSA]>;
2293
2294def MAXI_U_B : MAXI_U_B_ENC, MAXI_U_B_DESC, Requires<[HasMSA]>;
2295def MAXI_U_H : MAXI_U_H_ENC, MAXI_U_H_DESC, Requires<[HasMSA]>;
2296def MAXI_U_W : MAXI_U_W_ENC, MAXI_U_W_DESC, Requires<[HasMSA]>;
2297def MAXI_U_D : MAXI_U_D_ENC, MAXI_U_D_DESC, Requires<[HasMSA]>;
2298
2299def MIN_A_B : MIN_A_B_ENC, MIN_A_B_DESC, Requires<[HasMSA]>;
2300def MIN_A_H : MIN_A_H_ENC, MIN_A_H_DESC, Requires<[HasMSA]>;
2301def MIN_A_W : MIN_A_W_ENC, MIN_A_W_DESC, Requires<[HasMSA]>;
2302def MIN_A_D : MIN_A_D_ENC, MIN_A_D_DESC, Requires<[HasMSA]>;
2303
2304def MIN_S_B : MIN_S_B_ENC, MIN_S_B_DESC, Requires<[HasMSA]>;
2305def MIN_S_H : MIN_S_H_ENC, MIN_S_H_DESC, Requires<[HasMSA]>;
2306def MIN_S_W : MIN_S_W_ENC, MIN_S_W_DESC, Requires<[HasMSA]>;
2307def MIN_S_D : MIN_S_D_ENC, MIN_S_D_DESC, Requires<[HasMSA]>;
2308
2309def MIN_U_B : MIN_U_B_ENC, MIN_U_B_DESC, Requires<[HasMSA]>;
2310def MIN_U_H : MIN_U_H_ENC, MIN_U_H_DESC, Requires<[HasMSA]>;
2311def MIN_U_W : MIN_U_W_ENC, MIN_U_W_DESC, Requires<[HasMSA]>;
2312def MIN_U_D : MIN_U_D_ENC, MIN_U_D_DESC, Requires<[HasMSA]>;
2313
2314def MINI_S_B : MINI_S_B_ENC, MINI_S_B_DESC, Requires<[HasMSA]>;
2315def MINI_S_H : MINI_S_H_ENC, MINI_S_H_DESC, Requires<[HasMSA]>;
2316def MINI_S_W : MINI_S_W_ENC, MINI_S_W_DESC, Requires<[HasMSA]>;
2317def MINI_S_D : MINI_S_D_ENC, MINI_S_D_DESC, Requires<[HasMSA]>;
2318
2319def MINI_U_B : MINI_U_B_ENC, MINI_U_B_DESC, Requires<[HasMSA]>;
2320def MINI_U_H : MINI_U_H_ENC, MINI_U_H_DESC, Requires<[HasMSA]>;
2321def MINI_U_W : MINI_U_W_ENC, MINI_U_W_DESC, Requires<[HasMSA]>;
2322def MINI_U_D : MINI_U_D_ENC, MINI_U_D_DESC, Requires<[HasMSA]>;
2323
2324def MOD_S_B : MOD_S_B_ENC, MOD_S_B_DESC, Requires<[HasMSA]>;
2325def MOD_S_H : MOD_S_H_ENC, MOD_S_H_DESC, Requires<[HasMSA]>;
2326def MOD_S_W : MOD_S_W_ENC, MOD_S_W_DESC, Requires<[HasMSA]>;
2327def MOD_S_D : MOD_S_D_ENC, MOD_S_D_DESC, Requires<[HasMSA]>;
2328
2329def MOD_U_B : MOD_U_B_ENC, MOD_U_B_DESC, Requires<[HasMSA]>;
2330def MOD_U_H : MOD_U_H_ENC, MOD_U_H_DESC, Requires<[HasMSA]>;
2331def MOD_U_W : MOD_U_W_ENC, MOD_U_W_DESC, Requires<[HasMSA]>;
2332def MOD_U_D : MOD_U_D_ENC, MOD_U_D_DESC, Requires<[HasMSA]>;
2333
2334def MSUB_Q_H : MSUB_Q_H_ENC, MSUB_Q_H_DESC, Requires<[HasMSA]>;
2335def MSUB_Q_W : MSUB_Q_W_ENC, MSUB_Q_W_DESC, Requires<[HasMSA]>;
2336
2337def MSUBR_Q_H : MSUBR_Q_H_ENC, MSUBR_Q_H_DESC, Requires<[HasMSA]>;
2338def MSUBR_Q_W : MSUBR_Q_W_ENC, MSUBR_Q_W_DESC, Requires<[HasMSA]>;
2339
2340def MSUBV_B : MSUBV_B_ENC, MSUBV_B_DESC, Requires<[HasMSA]>;
2341def MSUBV_H : MSUBV_H_ENC, MSUBV_H_DESC, Requires<[HasMSA]>;
2342def MSUBV_W : MSUBV_W_ENC, MSUBV_W_DESC, Requires<[HasMSA]>;
2343def MSUBV_D : MSUBV_D_ENC, MSUBV_D_DESC, Requires<[HasMSA]>;
2344
2345def MUL_Q_H : MUL_Q_H_ENC, MUL_Q_H_DESC, Requires<[HasMSA]>;
2346def MUL_Q_W : MUL_Q_W_ENC, MUL_Q_W_DESC, Requires<[HasMSA]>;
2347
2348def MULR_Q_H : MULR_Q_H_ENC, MULR_Q_H_DESC, Requires<[HasMSA]>;
2349def MULR_Q_W : MULR_Q_W_ENC, MULR_Q_W_DESC, Requires<[HasMSA]>;
2350
2351def MULV_B : MULV_B_ENC, MULV_B_DESC, Requires<[HasMSA]>;
2352def MULV_H : MULV_H_ENC, MULV_H_DESC, Requires<[HasMSA]>;
2353def MULV_W : MULV_W_ENC, MULV_W_DESC, Requires<[HasMSA]>;
2354def MULV_D : MULV_D_ENC, MULV_D_DESC, Requires<[HasMSA]>;
2355
2356def NLOC_B : NLOC_B_ENC, NLOC_B_DESC, Requires<[HasMSA]>;
2357def NLOC_H : NLOC_H_ENC, NLOC_H_DESC, Requires<[HasMSA]>;
2358def NLOC_W : NLOC_W_ENC, NLOC_W_DESC, Requires<[HasMSA]>;
2359def NLOC_D : NLOC_D_ENC, NLOC_D_DESC, Requires<[HasMSA]>;
2360
2361def NLZC_B : NLZC_B_ENC, NLZC_B_DESC, Requires<[HasMSA]>;
2362def NLZC_H : NLZC_H_ENC, NLZC_H_DESC, Requires<[HasMSA]>;
2363def NLZC_W : NLZC_W_ENC, NLZC_W_DESC, Requires<[HasMSA]>;
2364def NLZC_D : NLZC_D_ENC, NLZC_D_DESC, Requires<[HasMSA]>;
2365
2366def NORI_B : NORI_B_ENC, NORI_B_DESC, Requires<[HasMSA]>;
2367
2368def ORI_B : ORI_B_ENC, ORI_B_DESC, Requires<[HasMSA]>;
2369
2370def PCKEV_B : PCKEV_B_ENC, PCKEV_B_DESC, Requires<[HasMSA]>;
2371def PCKEV_H : PCKEV_H_ENC, PCKEV_H_DESC, Requires<[HasMSA]>;
2372def PCKEV_W : PCKEV_W_ENC, PCKEV_W_DESC, Requires<[HasMSA]>;
2373def PCKEV_D : PCKEV_D_ENC, PCKEV_D_DESC, Requires<[HasMSA]>;
2374
2375def PCKOD_B : PCKOD_B_ENC, PCKOD_B_DESC, Requires<[HasMSA]>;
2376def PCKOD_H : PCKOD_H_ENC, PCKOD_H_DESC, Requires<[HasMSA]>;
2377def PCKOD_W : PCKOD_W_ENC, PCKOD_W_DESC, Requires<[HasMSA]>;
2378def PCKOD_D : PCKOD_D_ENC, PCKOD_D_DESC, Requires<[HasMSA]>;
2379
2380def PCNT_B : PCNT_B_ENC, PCNT_B_DESC, Requires<[HasMSA]>;
2381def PCNT_H : PCNT_H_ENC, PCNT_H_DESC, Requires<[HasMSA]>;
2382def PCNT_W : PCNT_W_ENC, PCNT_W_DESC, Requires<[HasMSA]>;
2383def PCNT_D : PCNT_D_ENC, PCNT_D_DESC, Requires<[HasMSA]>;
2384
2385def SAT_S_B : SAT_S_B_ENC, SAT_S_B_DESC, Requires<[HasMSA]>;
2386def SAT_S_H : SAT_S_H_ENC, SAT_S_H_DESC, Requires<[HasMSA]>;
2387def SAT_S_W : SAT_S_W_ENC, SAT_S_W_DESC, Requires<[HasMSA]>;
2388def SAT_S_D : SAT_S_D_ENC, SAT_S_D_DESC, Requires<[HasMSA]>;
2389
2390def SAT_U_B : SAT_U_B_ENC, SAT_U_B_DESC, Requires<[HasMSA]>;
2391def SAT_U_H : SAT_U_H_ENC, SAT_U_H_DESC, Requires<[HasMSA]>;
2392def SAT_U_W : SAT_U_W_ENC, SAT_U_W_DESC, Requires<[HasMSA]>;
2393def SAT_U_D : SAT_U_D_ENC, SAT_U_D_DESC, Requires<[HasMSA]>;
2394
2395def SHF_B : SHF_B_ENC, SHF_B_DESC, Requires<[HasMSA]>;
2396def SHF_H : SHF_H_ENC, SHF_H_DESC, Requires<[HasMSA]>;
2397def SHF_W : SHF_W_ENC, SHF_W_DESC, Requires<[HasMSA]>;
2398
2399def SLD_B : SLD_B_ENC, SLD_B_DESC, Requires<[HasMSA]>;
2400def SLD_H : SLD_H_ENC, SLD_H_DESC, Requires<[HasMSA]>;
2401def SLD_W : SLD_W_ENC, SLD_W_DESC, Requires<[HasMSA]>;
2402def SLD_D : SLD_D_ENC, SLD_D_DESC, Requires<[HasMSA]>;
2403
2404def SLDI_B : SLDI_B_ENC, SLDI_B_DESC, Requires<[HasMSA]>;
2405def SLDI_H : SLDI_H_ENC, SLDI_H_DESC, Requires<[HasMSA]>;
2406def SLDI_W : SLDI_W_ENC, SLDI_W_DESC, Requires<[HasMSA]>;
2407def SLDI_D : SLDI_D_ENC, SLDI_D_DESC, Requires<[HasMSA]>;
2408
2409def SLL_B : SLL_B_ENC, SLL_B_DESC, Requires<[HasMSA]>;
2410def SLL_H : SLL_H_ENC, SLL_H_DESC, Requires<[HasMSA]>;
2411def SLL_W : SLL_W_ENC, SLL_W_DESC, Requires<[HasMSA]>;
2412def SLL_D : SLL_D_ENC, SLL_D_DESC, Requires<[HasMSA]>;
2413
2414def SLLI_B : SLLI_B_ENC, SLLI_B_DESC, Requires<[HasMSA]>;
2415def SLLI_H : SLLI_H_ENC, SLLI_H_DESC, Requires<[HasMSA]>;
2416def SLLI_W : SLLI_W_ENC, SLLI_W_DESC, Requires<[HasMSA]>;
2417def SLLI_D : SLLI_D_ENC, SLLI_D_DESC, Requires<[HasMSA]>;
2418
2419def SPLAT_B : SPLAT_B_ENC, SPLAT_B_DESC, Requires<[HasMSA]>;
2420def SPLAT_H : SPLAT_H_ENC, SPLAT_H_DESC, Requires<[HasMSA]>;
2421def SPLAT_W : SPLAT_W_ENC, SPLAT_W_DESC, Requires<[HasMSA]>;
2422def SPLAT_D : SPLAT_D_ENC, SPLAT_D_DESC, Requires<[HasMSA]>;
2423
2424def SPLATI_B : SPLATI_B_ENC, SPLATI_B_DESC, Requires<[HasMSA]>;
2425def SPLATI_H : SPLATI_H_ENC, SPLATI_H_DESC, Requires<[HasMSA]>;
2426def SPLATI_W : SPLATI_W_ENC, SPLATI_W_DESC, Requires<[HasMSA]>;
2427def SPLATI_D : SPLATI_D_ENC, SPLATI_D_DESC, Requires<[HasMSA]>;
2428
2429def SRA_B : SRA_B_ENC, SRA_B_DESC, Requires<[HasMSA]>;
2430def SRA_H : SRA_H_ENC, SRA_H_DESC, Requires<[HasMSA]>;
2431def SRA_W : SRA_W_ENC, SRA_W_DESC, Requires<[HasMSA]>;
2432def SRA_D : SRA_D_ENC, SRA_D_DESC, Requires<[HasMSA]>;
2433
2434def SRAI_B : SRAI_B_ENC, SRAI_B_DESC, Requires<[HasMSA]>;
2435def SRAI_H : SRAI_H_ENC, SRAI_H_DESC, Requires<[HasMSA]>;
2436def SRAI_W : SRAI_W_ENC, SRAI_W_DESC, Requires<[HasMSA]>;
2437def SRAI_D : SRAI_D_ENC, SRAI_D_DESC, Requires<[HasMSA]>;
2438
2439def SRL_B : SRL_B_ENC, SRL_B_DESC, Requires<[HasMSA]>;
2440def SRL_H : SRL_H_ENC, SRL_H_DESC, Requires<[HasMSA]>;
2441def SRL_W : SRL_W_ENC, SRL_W_DESC, Requires<[HasMSA]>;
2442def SRL_D : SRL_D_ENC, SRL_D_DESC, Requires<[HasMSA]>;
2443
2444def SRLI_B : SRLI_B_ENC, SRLI_B_DESC, Requires<[HasMSA]>;
2445def SRLI_H : SRLI_H_ENC, SRLI_H_DESC, Requires<[HasMSA]>;
2446def SRLI_W : SRLI_W_ENC, SRLI_W_DESC, Requires<[HasMSA]>;
2447def SRLI_D : SRLI_D_ENC, SRLI_D_DESC, Requires<[HasMSA]>;
2448
2449def ST_B: ST_B_ENC, ST_B_DESC, Requires<[HasMSA]>;
2450def ST_H: ST_H_ENC, ST_H_DESC, Requires<[HasMSA]>;
2451def ST_W: ST_W_ENC, ST_W_DESC, Requires<[HasMSA]>;
2452def ST_D: ST_D_ENC, ST_D_DESC, Requires<[HasMSA]>;
2453
2454def SUBS_S_B : SUBS_S_B_ENC, SUBS_S_B_DESC, Requires<[HasMSA]>;
2455def SUBS_S_H : SUBS_S_H_ENC, SUBS_S_H_DESC, Requires<[HasMSA]>;
2456def SUBS_S_W : SUBS_S_W_ENC, SUBS_S_W_DESC, Requires<[HasMSA]>;
2457def SUBS_S_D : SUBS_S_D_ENC, SUBS_S_D_DESC, Requires<[HasMSA]>;
2458
2459def SUBS_U_B : SUBS_U_B_ENC, SUBS_U_B_DESC, Requires<[HasMSA]>;
2460def SUBS_U_H : SUBS_U_H_ENC, SUBS_U_H_DESC, Requires<[HasMSA]>;
2461def SUBS_U_W : SUBS_U_W_ENC, SUBS_U_W_DESC, Requires<[HasMSA]>;
2462def SUBS_U_D : SUBS_U_D_ENC, SUBS_U_D_DESC, Requires<[HasMSA]>;
2463
2464def SUBSUS_U_B : SUBSUS_U_B_ENC, SUBSUS_U_B_DESC, Requires<[HasMSA]>;
2465def SUBSUS_U_H : SUBSUS_U_H_ENC, SUBSUS_U_H_DESC, Requires<[HasMSA]>;
2466def SUBSUS_U_W : SUBSUS_U_W_ENC, SUBSUS_U_W_DESC, Requires<[HasMSA]>;
2467def SUBSUS_U_D : SUBSUS_U_D_ENC, SUBSUS_U_D_DESC, Requires<[HasMSA]>;
2468
2469def SUBSUU_S_B : SUBSUU_S_B_ENC, SUBSUU_S_B_DESC, Requires<[HasMSA]>;
2470def SUBSUU_S_H : SUBSUU_S_H_ENC, SUBSUU_S_H_DESC, Requires<[HasMSA]>;
2471def SUBSUU_S_W : SUBSUU_S_W_ENC, SUBSUU_S_W_DESC, Requires<[HasMSA]>;
2472def SUBSUU_S_D : SUBSUU_S_D_ENC, SUBSUU_S_D_DESC, Requires<[HasMSA]>;
2473
2474def SUBV_B : SUBV_B_ENC, SUBV_B_DESC, Requires<[HasMSA]>;
2475def SUBV_H : SUBV_H_ENC, SUBV_H_DESC, Requires<[HasMSA]>;
2476def SUBV_W : SUBV_W_ENC, SUBV_W_DESC, Requires<[HasMSA]>;
2477def SUBV_D : SUBV_D_ENC, SUBV_D_DESC, Requires<[HasMSA]>;
2478
2479def SUBVI_B : SUBVI_B_ENC, SUBVI_B_DESC, Requires<[HasMSA]>;
2480def SUBVI_H : SUBVI_H_ENC, SUBVI_H_DESC, Requires<[HasMSA]>;
2481def SUBVI_W : SUBVI_W_ENC, SUBVI_W_DESC, Requires<[HasMSA]>;
2482def SUBVI_D : SUBVI_D_ENC, SUBVI_D_DESC, Requires<[HasMSA]>;
2483
2484def VSHF_B : VSHF_B_ENC, VSHF_B_DESC, Requires<[HasMSA]>;
2485def VSHF_H : VSHF_H_ENC, VSHF_H_DESC, Requires<[HasMSA]>;
2486def VSHF_W : VSHF_W_ENC, VSHF_W_DESC, Requires<[HasMSA]>;
2487def VSHF_D : VSHF_D_ENC, VSHF_D_DESC, Requires<[HasMSA]>;
2488
2489def XORI_B : XORI_B_ENC, XORI_B_DESC, Requires<[HasMSA]>;
2490
2491// Patterns.
2492class MSAPat<dag pattern, dag result, Predicate pred = HasMSA> :
2493  Pat<pattern, result>, Requires<[pred]>;
2494
2495def LD_FH : MSAPat<(v8f16 (load addr:$addr)),
2496                   (LD_H addr:$addr)>;
2497def LD_FW : MSAPat<(v4f32 (load addr:$addr)),
2498                   (LD_W addr:$addr)>;
2499def LD_FD : MSAPat<(v2f64 (load addr:$addr)),
2500                   (LD_D addr:$addr)>;
2501
2502def ST_FH : MSAPat<(store (v8f16 MSA128:$ws), addr:$addr),
2503                   (ST_H MSA128:$ws, addr:$addr)>;
2504def ST_FW : MSAPat<(store (v4f32 MSA128:$ws), addr:$addr),
2505                   (ST_W MSA128:$ws, addr:$addr)>;
2506def ST_FD : MSAPat<(store (v2f64 MSA128:$ws), addr:$addr),
2507                   (ST_D MSA128:$ws, addr:$addr)>;
2508