MipsMSAInstrInfo.td revision d0f99639c16ddad697db30e75643ae4cc52c3e80
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 ST_B_ENC   : MSA_I5_FMT<0b111, 0b00, 0b000111>;
409class ST_H_ENC   : MSA_I5_FMT<0b111, 0b01, 0b000111>;
410class ST_W_ENC   : MSA_I5_FMT<0b111, 0b10, 0b000111>;
411class ST_D_ENC   : MSA_I5_FMT<0b111, 0b11, 0b000111>;
412
413// Instruction desc.
414class MSA_BIT_D_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
415                          InstrItinClass itin, RegisterClass RCWD,
416                          RegisterClass RCWS> {
417  dag OutOperandList = (outs RCWD:$wd);
418  dag InOperandList = (ins RCWS:$ws, uimm6:$u6);
419  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $u6");
420  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, immZExt6:$u6))];
421  InstrItinClass Itinerary = itin;
422}
423
424class MSA_BIT_W_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
425                          InstrItinClass itin, RegisterClass RCWD,
426                          RegisterClass RCWS> {
427  dag OutOperandList = (outs RCWD:$wd);
428  dag InOperandList = (ins RCWS:$ws, uimm5:$u5);
429  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $u5");
430  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, immZExt5:$u5))];
431  InstrItinClass Itinerary = itin;
432}
433
434class MSA_BIT_H_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
435                          InstrItinClass itin, RegisterClass RCWD,
436                          RegisterClass RCWS> {
437  dag OutOperandList = (outs RCWD:$wd);
438  dag InOperandList = (ins RCWS:$ws, uimm4:$u4);
439  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $u4");
440  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, immZExt4:$u4))];
441  InstrItinClass Itinerary = itin;
442}
443
444class MSA_BIT_B_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
445                          InstrItinClass itin, RegisterClass RCWD,
446                          RegisterClass RCWS> {
447  dag OutOperandList = (outs RCWD:$wd);
448  dag InOperandList = (ins RCWS:$ws, uimm3:$u3);
449  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $u3");
450  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, immZExt3:$u3))];
451  InstrItinClass Itinerary = itin;
452}
453
454class MSA_COPY_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
455                         InstrItinClass itin, RegisterClass RCD,
456                         RegisterClass RCWS> {
457  dag OutOperandList = (outs RCD:$rd);
458  dag InOperandList = (ins RCWS:$ws, uimm6:$n);
459  string AsmString = !strconcat(instr_asm, "\t$rd, $ws[$n]");
460  list<dag> Pattern = [(set RCD:$rd, (OpNode RCWS:$ws, immZExt6:$n))];
461  InstrItinClass Itinerary = itin;
462}
463
464class MSA_I5_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
465                       InstrItinClass itin, RegisterClass RCWD,
466                       RegisterClass RCWS> {
467  dag OutOperandList = (outs RCWD:$wd);
468  dag InOperandList = (ins RCWS:$ws, uimm5:$u5);
469  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $u5");
470  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, immZExt5:$u5))];
471  InstrItinClass Itinerary = itin;
472}
473
474class MSA_SI5_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
475                       InstrItinClass itin, RegisterClass RCWD,
476                       RegisterClass RCWS> {
477  dag OutOperandList = (outs RCWD:$wd);
478  dag InOperandList = (ins RCWS:$ws, simm5:$s5);
479  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $s5");
480  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, immSExt5:$s5))];
481  InstrItinClass Itinerary = itin;
482}
483
484class MSA_I8_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
485                       InstrItinClass itin, RegisterClass RCWD,
486                       RegisterClass RCWS> {
487  dag OutOperandList = (outs RCWD:$wd);
488  dag InOperandList = (ins RCWS:$ws, uimm8:$u8);
489  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $u8");
490  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, immZExt8:$u8))];
491  InstrItinClass Itinerary = itin;
492}
493
494class MSA_I10_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
495                        InstrItinClass itin, RegisterClass RCWD> {
496  dag OutOperandList = (outs RCWD:$wd);
497  dag InOperandList = (ins simm10:$i10);
498  string AsmString = !strconcat(instr_asm, "\t$wd, $i10");
499  list<dag> Pattern = [(set RCWD:$wd, (OpNode immSExt10:$i10))];
500  InstrItinClass Itinerary = itin;
501}
502
503class MSA_2R_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
504                       InstrItinClass itin, RegisterClass RCWD,
505                       RegisterClass RCWS> {
506  dag OutOperandList = (outs RCWD:$wd);
507  dag InOperandList = (ins RCWS:$ws);
508  string AsmString = !strconcat(instr_asm, "\t$wd, $ws");
509  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws))];
510  InstrItinClass Itinerary = itin;
511}
512
513class MSA_2RF_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
514                        InstrItinClass itin, RegisterClass RCWD,
515                        RegisterClass RCWS> :
516  MSA_2R_DESC_BASE<instr_asm, OpNode, itin, RCWD, RCWS>;
517
518
519class MSA_3R_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
520                       InstrItinClass itin, RegisterClass RCWD,
521                       RegisterClass RCWS,  RegisterClass RCWT = RCWS> {
522  dag OutOperandList = (outs RCWD:$wd);
523  dag InOperandList = (ins RCWS:$ws, RCWT:$wt);
524  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $wt");
525  list<dag> Pattern = [(set RCWD:$wd, (OpNode RCWS:$ws, RCWT:$wt))];
526  InstrItinClass Itinerary = itin;
527}
528
529class MSA_3R_4R_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
530                          InstrItinClass itin, RegisterClass RCWD,
531                          RegisterClass RCWS,  RegisterClass RCWT = RCWS> {
532  dag OutOperandList = (outs RCWD:$wd);
533  dag InOperandList = (ins RCWD:$wd_in, RCWS:$ws, RCWT:$wt);
534  string AsmString = !strconcat(instr_asm, "\t$wd, $ws, $wt");
535  list<dag> Pattern = [(set RCWD:$wd,
536                       (OpNode RCWD:$wd_in, RCWS:$ws, RCWT:$wt))];
537  InstrItinClass Itinerary = itin;
538  string Constraints = "$wd = $wd_in";
539}
540
541class MSA_3RF_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
542                        InstrItinClass itin, RegisterClass RCWD,
543                        RegisterClass RCWS,  RegisterClass RCWT = RCWS> :
544  MSA_3R_DESC_BASE<instr_asm, OpNode, itin, RCWD, RCWS, RCWT>;
545
546class MSA_3RF_4RF_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
547                            InstrItinClass itin, RegisterClass RCWD,
548                            RegisterClass RCWS,  RegisterClass RCWT = RCWS> :
549  MSA_3R_4R_DESC_BASE<instr_asm, OpNode, itin, RCWD, RCWS, RCWT>;
550
551class MSA_INSERT_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
552                           InstrItinClass itin, RegisterClass RCD,
553                           RegisterClass RCWS> {
554  dag OutOperandList = (outs RCD:$wd);
555  dag InOperandList = (ins RCD:$wd_in, uimm6:$n, RCWS:$rs);
556  string AsmString = !strconcat(instr_asm, "\t$wd[$n], $rs");
557  list<dag> Pattern = [(set RCD:$wd, (OpNode RCD:$wd_in,
558                                             immZExt6:$n,
559                                             RCWS:$rs))];
560  InstrItinClass Itinerary = itin;
561  string Constraints = "$wd = $wd_in";
562}
563
564class ADD_A_B_DESC : MSA_3R_DESC_BASE<"add_a.b", int_mips_add_a_b, NoItinerary,
565                                      MSA128, MSA128>, IsCommutable;
566class ADD_A_H_DESC : MSA_3R_DESC_BASE<"add_a.h", int_mips_add_a_h, NoItinerary,
567                                      MSA128, MSA128>, IsCommutable;
568class ADD_A_W_DESC : MSA_3R_DESC_BASE<"add_a.w", int_mips_add_a_w, NoItinerary,
569                                      MSA128, MSA128>, IsCommutable;
570class ADD_A_D_DESC : MSA_3R_DESC_BASE<"add_a.d", int_mips_add_a_d, NoItinerary,
571                                      MSA128, MSA128>, IsCommutable;
572
573class ADDS_A_B_DESC : MSA_3R_DESC_BASE<"adds_a.b", int_mips_adds_a_b,
574                                       NoItinerary, MSA128, MSA128>,
575                                       IsCommutable;
576class ADDS_A_H_DESC : MSA_3R_DESC_BASE<"adds_a.h", int_mips_adds_a_h,
577                                       NoItinerary, MSA128, MSA128>,
578                                       IsCommutable;
579class ADDS_A_W_DESC : MSA_3R_DESC_BASE<"adds_a.w", int_mips_adds_a_w,
580                                       NoItinerary, MSA128, MSA128>,
581                                       IsCommutable;
582class ADDS_A_D_DESC : MSA_3R_DESC_BASE<"adds_a.d", int_mips_adds_a_d,
583                                       NoItinerary, MSA128, MSA128>,
584                                       IsCommutable;
585
586class ADDS_S_B_DESC : MSA_3R_DESC_BASE<"adds_s.b", int_mips_adds_s_b,
587                                       NoItinerary, MSA128, MSA128>,
588                                       IsCommutable;
589class ADDS_S_H_DESC : MSA_3R_DESC_BASE<"adds_s.h", int_mips_adds_s_h,
590                                       NoItinerary, MSA128, MSA128>,
591                                       IsCommutable;
592class ADDS_S_W_DESC : MSA_3R_DESC_BASE<"adds_s.w", int_mips_adds_s_w,
593                                       NoItinerary, MSA128, MSA128>,
594                                       IsCommutable;
595class ADDS_S_D_DESC : MSA_3R_DESC_BASE<"adds_s.d", int_mips_adds_s_d,
596                                       NoItinerary, MSA128, MSA128>,
597                                       IsCommutable;
598
599class ADDS_U_B_DESC : MSA_3R_DESC_BASE<"adds_u.b", int_mips_adds_u_b,
600                                       NoItinerary, MSA128, MSA128>,
601                                       IsCommutable;
602class ADDS_U_H_DESC : MSA_3R_DESC_BASE<"adds_u.h", int_mips_adds_u_h,
603                                       NoItinerary, MSA128, MSA128>,
604                                       IsCommutable;
605class ADDS_U_W_DESC : MSA_3R_DESC_BASE<"adds_u.w", int_mips_adds_u_w,
606                                       NoItinerary, MSA128, MSA128>,
607                                       IsCommutable;
608class ADDS_U_D_DESC : MSA_3R_DESC_BASE<"adds_u.d", int_mips_adds_u_d,
609                                       NoItinerary, MSA128, MSA128>,
610                                       IsCommutable;
611
612class ADDV_B_DESC : MSA_3R_DESC_BASE<"addv.b", int_mips_addv_b, NoItinerary,
613                                     MSA128, MSA128>, IsCommutable;
614class ADDV_H_DESC : MSA_3R_DESC_BASE<"addv.h", int_mips_addv_h, NoItinerary,
615                                     MSA128, MSA128>, IsCommutable;
616class ADDV_W_DESC : MSA_3R_DESC_BASE<"addv.w", int_mips_addv_w, NoItinerary,
617                                     MSA128, MSA128>, IsCommutable;
618class ADDV_D_DESC : MSA_3R_DESC_BASE<"addv.d", int_mips_addv_d, NoItinerary,
619                                     MSA128, MSA128>, IsCommutable;
620
621class ADDVI_B_DESC : MSA_I5_DESC_BASE<"addvi.b", int_mips_addvi_b, NoItinerary,
622                                      MSA128, MSA128>;
623class ADDVI_H_DESC : MSA_I5_DESC_BASE<"addvi.h", int_mips_addvi_h, NoItinerary,
624                                      MSA128, MSA128>;
625class ADDVI_W_DESC : MSA_I5_DESC_BASE<"addvi.w", int_mips_addvi_w, NoItinerary,
626                                      MSA128, MSA128>;
627class ADDVI_D_DESC : MSA_I5_DESC_BASE<"addvi.d", int_mips_addvi_d, NoItinerary,
628                                      MSA128, MSA128>;
629
630class ANDI_B_DESC : MSA_I8_DESC_BASE<"andi.b", int_mips_andi_b, NoItinerary,
631                                     MSA128, MSA128>;
632
633class ASUB_S_B_DESC : MSA_3R_DESC_BASE<"asub_s.b", int_mips_asub_s_b,
634                                       NoItinerary, MSA128, MSA128>;
635class ASUB_S_H_DESC : MSA_3R_DESC_BASE<"asub_s.h", int_mips_asub_s_h,
636                                       NoItinerary, MSA128, MSA128>;
637class ASUB_S_W_DESC : MSA_3R_DESC_BASE<"asub_s.w", int_mips_asub_s_w,
638                                       NoItinerary, MSA128, MSA128>;
639class ASUB_S_D_DESC : MSA_3R_DESC_BASE<"asub_s.d", int_mips_asub_s_d,
640                                       NoItinerary, MSA128, MSA128>;
641
642class ASUB_U_B_DESC : MSA_3R_DESC_BASE<"asub_u.b", int_mips_asub_u_b,
643                                       NoItinerary, MSA128, MSA128>;
644class ASUB_U_H_DESC : MSA_3R_DESC_BASE<"asub_u.h", int_mips_asub_u_h,
645                                       NoItinerary, MSA128, MSA128>;
646class ASUB_U_W_DESC : MSA_3R_DESC_BASE<"asub_u.w", int_mips_asub_u_w,
647                                       NoItinerary, MSA128, MSA128>;
648class ASUB_U_D_DESC : MSA_3R_DESC_BASE<"asub_u.d", int_mips_asub_u_d,
649                                       NoItinerary, MSA128, MSA128>;
650
651class AVE_S_B_DESC : MSA_3R_DESC_BASE<"ave_s.b", int_mips_ave_s_b, NoItinerary,
652                                       MSA128, MSA128>, IsCommutable;
653class AVE_S_H_DESC : MSA_3R_DESC_BASE<"ave_s.h", int_mips_ave_s_h, NoItinerary,
654                                       MSA128, MSA128>, IsCommutable;
655class AVE_S_W_DESC : MSA_3R_DESC_BASE<"ave_s.w", int_mips_ave_s_w, NoItinerary,
656                                       MSA128, MSA128>, IsCommutable;
657class AVE_S_D_DESC : MSA_3R_DESC_BASE<"ave_s.d", int_mips_ave_s_d, NoItinerary,
658                                       MSA128, MSA128>, IsCommutable;
659
660class AVE_U_B_DESC : MSA_3R_DESC_BASE<"ave_u.b", int_mips_ave_u_b, NoItinerary,
661                                       MSA128, MSA128>, IsCommutable;
662class AVE_U_H_DESC : MSA_3R_DESC_BASE<"ave_u.h", int_mips_ave_u_h, NoItinerary,
663                                       MSA128, MSA128>, IsCommutable;
664class AVE_U_W_DESC : MSA_3R_DESC_BASE<"ave_u.w", int_mips_ave_u_w, NoItinerary,
665                                       MSA128, MSA128>, IsCommutable;
666class AVE_U_D_DESC : MSA_3R_DESC_BASE<"ave_u.d", int_mips_ave_u_d, NoItinerary,
667                                       MSA128, MSA128>, IsCommutable;
668
669class AVER_S_B_DESC : MSA_3R_DESC_BASE<"aver_s.b", int_mips_aver_s_b,
670                                       NoItinerary, MSA128, MSA128>,
671                                       IsCommutable;
672class AVER_S_H_DESC : MSA_3R_DESC_BASE<"aver_s.h", int_mips_aver_s_h,
673                                       NoItinerary, MSA128, MSA128>,
674                                       IsCommutable;
675class AVER_S_W_DESC : MSA_3R_DESC_BASE<"aver_s.w", int_mips_aver_s_w,
676                                       NoItinerary, MSA128, MSA128>,
677                                       IsCommutable;
678class AVER_S_D_DESC : MSA_3R_DESC_BASE<"aver_s.d", int_mips_aver_s_d,
679                                       NoItinerary, MSA128, MSA128>,
680                                       IsCommutable;
681
682class AVER_U_B_DESC : MSA_3R_DESC_BASE<"aver_u.b", int_mips_aver_u_b,
683                                       NoItinerary, MSA128, MSA128>,
684                                       IsCommutable;
685class AVER_U_H_DESC : MSA_3R_DESC_BASE<"aver_u.h", int_mips_aver_u_h,
686                                       NoItinerary, MSA128, MSA128>,
687                                       IsCommutable;
688class AVER_U_W_DESC : MSA_3R_DESC_BASE<"aver_u.w", int_mips_aver_u_w,
689                                       NoItinerary, MSA128, MSA128>,
690                                       IsCommutable;
691class AVER_U_D_DESC : MSA_3R_DESC_BASE<"aver_u.d", int_mips_aver_u_d,
692                                       NoItinerary, MSA128, MSA128>,
693                                       IsCommutable;
694
695class BCLR_B_DESC : MSA_3R_DESC_BASE<"bclr.b", int_mips_bclr_b, NoItinerary,
696                                     MSA128, MSA128>;
697class BCLR_H_DESC : MSA_3R_DESC_BASE<"bclr.h", int_mips_bclr_h, NoItinerary,
698                                     MSA128, MSA128>;
699class BCLR_W_DESC : MSA_3R_DESC_BASE<"bclr.w", int_mips_bclr_w, NoItinerary,
700                                     MSA128, MSA128>;
701class BCLR_D_DESC : MSA_3R_DESC_BASE<"bclr.d", int_mips_bclr_d, NoItinerary,
702                                     MSA128, MSA128>;
703
704class BCLRI_B_DESC : MSA_BIT_B_DESC_BASE<"bclri.b", int_mips_bclri_b,
705                                         NoItinerary, MSA128, MSA128>;
706class BCLRI_H_DESC : MSA_BIT_H_DESC_BASE<"bclri.h", int_mips_bclri_h,
707                                         NoItinerary, MSA128, MSA128>;
708class BCLRI_W_DESC : MSA_BIT_W_DESC_BASE<"bclri.w", int_mips_bclri_w,
709                                         NoItinerary, MSA128, MSA128>;
710class BCLRI_D_DESC : MSA_BIT_D_DESC_BASE<"bclri.d", int_mips_bclri_d,
711                                         NoItinerary, MSA128, MSA128>;
712
713class BINSL_B_DESC : MSA_3R_DESC_BASE<"binsl.b", int_mips_binsl_b, NoItinerary,
714                                      MSA128, MSA128>;
715class BINSL_H_DESC : MSA_3R_DESC_BASE<"binsl.h", int_mips_binsl_h, NoItinerary,
716                                      MSA128, MSA128>;
717class BINSL_W_DESC : MSA_3R_DESC_BASE<"binsl.w", int_mips_binsl_w, NoItinerary,
718                                      MSA128, MSA128>;
719class BINSL_D_DESC : MSA_3R_DESC_BASE<"binsl.d", int_mips_binsl_d, NoItinerary,
720                                      MSA128, MSA128>;
721
722class BINSLI_B_DESC : MSA_BIT_B_DESC_BASE<"binsli.b", int_mips_binsli_b,
723                                          NoItinerary, MSA128, MSA128>;
724class BINSLI_H_DESC : MSA_BIT_H_DESC_BASE<"binsli.h", int_mips_binsli_h,
725                                          NoItinerary, MSA128, MSA128>;
726class BINSLI_W_DESC : MSA_BIT_W_DESC_BASE<"binsli.w", int_mips_binsli_w,
727                                          NoItinerary, MSA128, MSA128>;
728class BINSLI_D_DESC : MSA_BIT_D_DESC_BASE<"binsli.d", int_mips_binsli_d,
729                                          NoItinerary, MSA128, MSA128>;
730
731class BINSR_B_DESC : MSA_3R_DESC_BASE<"binsr.b", int_mips_binsr_b, NoItinerary,
732                                      MSA128, MSA128>;
733class BINSR_H_DESC : MSA_3R_DESC_BASE<"binsr.h", int_mips_binsr_h, NoItinerary,
734                                      MSA128, MSA128>;
735class BINSR_W_DESC : MSA_3R_DESC_BASE<"binsr.w", int_mips_binsr_w, NoItinerary,
736                                      MSA128, MSA128>;
737class BINSR_D_DESC : MSA_3R_DESC_BASE<"binsr.d", int_mips_binsr_d, NoItinerary,
738                                      MSA128, MSA128>;
739
740class BINSRI_B_DESC : MSA_BIT_B_DESC_BASE<"binsri.b", int_mips_binsri_b,
741                                          NoItinerary, MSA128, MSA128>;
742class BINSRI_H_DESC : MSA_BIT_H_DESC_BASE<"binsri.h", int_mips_binsri_h,
743                                          NoItinerary, MSA128, MSA128>;
744class BINSRI_W_DESC : MSA_BIT_W_DESC_BASE<"binsri.w", int_mips_binsri_w,
745                                          NoItinerary, MSA128, MSA128>;
746class BINSRI_D_DESC : MSA_BIT_D_DESC_BASE<"binsri.d", int_mips_binsri_d,
747                                          NoItinerary, MSA128, MSA128>;
748
749class BMNZI_B_DESC : MSA_I8_DESC_BASE<"bmnzi.b", int_mips_bmnzi_b, NoItinerary,
750                                      MSA128, MSA128>;
751
752class BMZI_B_DESC : MSA_I8_DESC_BASE<"bmzi.b", int_mips_bmzi_b, NoItinerary,
753                                     MSA128, MSA128>;
754
755class BNEG_B_DESC : MSA_3R_DESC_BASE<"bneg.b", int_mips_bneg_b, NoItinerary,
756                                     MSA128, MSA128>;
757class BNEG_H_DESC : MSA_3R_DESC_BASE<"bneg.h", int_mips_bneg_h, NoItinerary,
758                                     MSA128, MSA128>;
759class BNEG_W_DESC : MSA_3R_DESC_BASE<"bneg.w", int_mips_bneg_w, NoItinerary,
760                                     MSA128, MSA128>;
761class BNEG_D_DESC : MSA_3R_DESC_BASE<"bneg.d", int_mips_bneg_d, NoItinerary,
762                                     MSA128, MSA128>;
763
764class BNEGI_B_DESC : MSA_BIT_B_DESC_BASE<"bnegi.b", int_mips_bnegi_b,
765                                         NoItinerary, MSA128, MSA128>;
766class BNEGI_H_DESC : MSA_BIT_H_DESC_BASE<"bnegi.h", int_mips_bnegi_h,
767                                         NoItinerary, MSA128, MSA128>;
768class BNEGI_W_DESC : MSA_BIT_W_DESC_BASE<"bnegi.w", int_mips_bnegi_w,
769                                         NoItinerary, MSA128, MSA128>;
770class BNEGI_D_DESC : MSA_BIT_D_DESC_BASE<"bnegi.d", int_mips_bnegi_d,
771                                         NoItinerary, MSA128, MSA128>;
772
773class BSELI_B_DESC : MSA_I8_DESC_BASE<"bseli.b", int_mips_bseli_b, NoItinerary,
774                                      MSA128, MSA128>;
775
776class BSET_B_DESC : MSA_3R_DESC_BASE<"bset.b", int_mips_bset_b, NoItinerary,
777                                     MSA128, MSA128>;
778class BSET_H_DESC : MSA_3R_DESC_BASE<"bset.h", int_mips_bset_h, NoItinerary,
779                                     MSA128, MSA128>;
780class BSET_W_DESC : MSA_3R_DESC_BASE<"bset.w", int_mips_bset_w, NoItinerary,
781                                     MSA128, MSA128>;
782class BSET_D_DESC : MSA_3R_DESC_BASE<"bset.d", int_mips_bset_d, NoItinerary,
783                                     MSA128, MSA128>;
784
785class BSETI_B_DESC : MSA_BIT_B_DESC_BASE<"bseti.b", int_mips_bseti_b,
786                                         NoItinerary, MSA128, MSA128>;
787class BSETI_H_DESC : MSA_BIT_H_DESC_BASE<"bseti.h", int_mips_bseti_h,
788                                         NoItinerary, MSA128, MSA128>;
789class BSETI_W_DESC : MSA_BIT_W_DESC_BASE<"bseti.w", int_mips_bseti_w,
790                                         NoItinerary, MSA128, MSA128>;
791class BSETI_D_DESC : MSA_BIT_D_DESC_BASE<"bseti.d", int_mips_bseti_d,
792                                         NoItinerary, MSA128, MSA128>;
793
794class CEQ_B_DESC : MSA_3R_DESC_BASE<"ceq.b", int_mips_ceq_b, NoItinerary,
795                                    MSA128, MSA128>, IsCommutable;
796class CEQ_H_DESC : MSA_3R_DESC_BASE<"ceq.h", int_mips_ceq_h, NoItinerary,
797                                    MSA128, MSA128>, IsCommutable;
798class CEQ_W_DESC : MSA_3R_DESC_BASE<"ceq.w", int_mips_ceq_w, NoItinerary,
799                                    MSA128, MSA128>, IsCommutable;
800class CEQ_D_DESC : MSA_3R_DESC_BASE<"ceq.d", int_mips_ceq_d, NoItinerary,
801                                    MSA128, MSA128>, IsCommutable;
802
803class CEQI_B_DESC : MSA_SI5_DESC_BASE<"ceqi.b", int_mips_ceqi_b, NoItinerary,
804                                      MSA128, MSA128>;
805class CEQI_H_DESC : MSA_SI5_DESC_BASE<"ceqi.h", int_mips_ceqi_h, NoItinerary,
806                                      MSA128, MSA128>;
807class CEQI_W_DESC : MSA_SI5_DESC_BASE<"ceqi.w", int_mips_ceqi_w, NoItinerary,
808                                      MSA128, MSA128>;
809class CEQI_D_DESC : MSA_SI5_DESC_BASE<"ceqi.d", int_mips_ceqi_d, NoItinerary,
810                                      MSA128, MSA128>;
811
812class CLE_S_B_DESC : MSA_3R_DESC_BASE<"cle_s.b", int_mips_cle_s_b, NoItinerary,
813                                      MSA128, MSA128>;
814class CLE_S_H_DESC : MSA_3R_DESC_BASE<"cle_s.h", int_mips_cle_s_h, NoItinerary,
815                                      MSA128, MSA128>;
816class CLE_S_W_DESC : MSA_3R_DESC_BASE<"cle_s.w", int_mips_cle_s_w, NoItinerary,
817                                      MSA128, MSA128>;
818class CLE_S_D_DESC : MSA_3R_DESC_BASE<"cle_s.d", int_mips_cle_s_d, NoItinerary,
819                                      MSA128, MSA128>;
820
821class CLE_U_B_DESC : MSA_3R_DESC_BASE<"cle_u.b", int_mips_cle_u_b, NoItinerary,
822                                      MSA128, MSA128>;
823class CLE_U_H_DESC : MSA_3R_DESC_BASE<"cle_u.h", int_mips_cle_u_h, NoItinerary,
824                                      MSA128, MSA128>;
825class CLE_U_W_DESC : MSA_3R_DESC_BASE<"cle_u.w", int_mips_cle_u_w, NoItinerary,
826                                      MSA128, MSA128>;
827class CLE_U_D_DESC : MSA_3R_DESC_BASE<"cle_u.d", int_mips_cle_u_d, NoItinerary,
828                                      MSA128, MSA128>;
829
830class CLEI_S_B_DESC : MSA_SI5_DESC_BASE<"clei_s.b", int_mips_clei_s_b,
831                                        NoItinerary, MSA128, MSA128>;
832class CLEI_S_H_DESC : MSA_SI5_DESC_BASE<"clei_s.h", int_mips_clei_s_h,
833                                        NoItinerary, MSA128, MSA128>;
834class CLEI_S_W_DESC : MSA_SI5_DESC_BASE<"clei_s.w", int_mips_clei_s_w,
835                                        NoItinerary, MSA128, MSA128>;
836class CLEI_S_D_DESC : MSA_SI5_DESC_BASE<"clei_s.d", int_mips_clei_s_d,
837                                        NoItinerary, MSA128, MSA128>;
838
839class CLEI_U_B_DESC : MSA_SI5_DESC_BASE<"clei_u.b", int_mips_clei_u_b,
840                                        NoItinerary, MSA128, MSA128>;
841class CLEI_U_H_DESC : MSA_SI5_DESC_BASE<"clei_u.h", int_mips_clei_u_h,
842                                        NoItinerary, MSA128, MSA128>;
843class CLEI_U_W_DESC : MSA_SI5_DESC_BASE<"clei_u.w", int_mips_clei_u_w,
844                                        NoItinerary, MSA128, MSA128>;
845class CLEI_U_D_DESC : MSA_SI5_DESC_BASE<"clei_u.d", int_mips_clei_u_d,
846                                        NoItinerary, MSA128, MSA128>;
847
848class CLT_S_B_DESC : MSA_3R_DESC_BASE<"clt_s.b", int_mips_clt_s_b, NoItinerary,
849                                      MSA128, MSA128>;
850class CLT_S_H_DESC : MSA_3R_DESC_BASE<"clt_s.h", int_mips_clt_s_h, NoItinerary,
851                                      MSA128, MSA128>;
852class CLT_S_W_DESC : MSA_3R_DESC_BASE<"clt_s.w", int_mips_clt_s_w, NoItinerary,
853                                      MSA128, MSA128>;
854class CLT_S_D_DESC : MSA_3R_DESC_BASE<"clt_s.d", int_mips_clt_s_d, NoItinerary,
855                                      MSA128, MSA128>;
856
857class CLT_U_B_DESC : MSA_3R_DESC_BASE<"clt_u.b", int_mips_clt_u_b, NoItinerary,
858                                      MSA128, MSA128>;
859class CLT_U_H_DESC : MSA_3R_DESC_BASE<"clt_u.h", int_mips_clt_u_h, NoItinerary,
860                                      MSA128, MSA128>;
861class CLT_U_W_DESC : MSA_3R_DESC_BASE<"clt_u.w", int_mips_clt_u_w, NoItinerary,
862                                      MSA128, MSA128>;
863class CLT_U_D_DESC : MSA_3R_DESC_BASE<"clt_u.d", int_mips_clt_u_d, NoItinerary,
864                                      MSA128, MSA128>;
865
866class CLTI_S_B_DESC : MSA_SI5_DESC_BASE<"clti_s.b", int_mips_clti_s_b,
867                                        NoItinerary, MSA128, MSA128>;
868class CLTI_S_H_DESC : MSA_SI5_DESC_BASE<"clti_s.h", int_mips_clti_s_h,
869                                        NoItinerary, MSA128, MSA128>;
870class CLTI_S_W_DESC : MSA_SI5_DESC_BASE<"clti_s.w", int_mips_clti_s_w,
871                                        NoItinerary, MSA128, MSA128>;
872class CLTI_S_D_DESC : MSA_SI5_DESC_BASE<"clti_s.d", int_mips_clti_s_d,
873                                        NoItinerary, MSA128, MSA128>;
874
875class CLTI_U_B_DESC : MSA_SI5_DESC_BASE<"clti_u.b", int_mips_clti_u_b,
876                                        NoItinerary, MSA128, MSA128>;
877class CLTI_U_H_DESC : MSA_SI5_DESC_BASE<"clti_u.h", int_mips_clti_u_h,
878                                        NoItinerary, MSA128, MSA128>;
879class CLTI_U_W_DESC : MSA_SI5_DESC_BASE<"clti_u.w", int_mips_clti_u_w,
880                                        NoItinerary, MSA128, MSA128>;
881class CLTI_U_D_DESC : MSA_SI5_DESC_BASE<"clti_u.d", int_mips_clti_u_d,
882                                        NoItinerary, MSA128, MSA128>;
883
884class COPY_S_B_DESC : MSA_COPY_DESC_BASE<"copy_s.b", int_mips_copy_s_b,
885                                         NoItinerary, GPR32, MSA128>;
886class COPY_S_H_DESC : MSA_COPY_DESC_BASE<"copy_s.h", int_mips_copy_s_h,
887                                         NoItinerary, GPR32, MSA128>;
888class COPY_S_W_DESC : MSA_COPY_DESC_BASE<"copy_s.w", int_mips_copy_s_w,
889                                         NoItinerary, GPR32, MSA128>;
890
891class COPY_U_B_DESC : MSA_COPY_DESC_BASE<"copy_u.b", int_mips_copy_u_b,
892                                         NoItinerary, GPR32, MSA128>;
893class COPY_U_H_DESC : MSA_COPY_DESC_BASE<"copy_u.h", int_mips_copy_u_h,
894                                         NoItinerary, GPR32, MSA128>;
895class COPY_U_W_DESC : MSA_COPY_DESC_BASE<"copy_u.w", int_mips_copy_u_w,
896                                         NoItinerary, GPR32, MSA128>;
897
898class DIV_S_B_DESC : MSA_3R_DESC_BASE<"div_s.b", int_mips_div_s_b, NoItinerary,
899                                      MSA128, MSA128>;
900class DIV_S_H_DESC : MSA_3R_DESC_BASE<"div_s.h", int_mips_div_s_h, NoItinerary,
901                                      MSA128, MSA128>;
902class DIV_S_W_DESC : MSA_3R_DESC_BASE<"div_s.w", int_mips_div_s_w, NoItinerary,
903                                      MSA128, MSA128>;
904class DIV_S_D_DESC : MSA_3R_DESC_BASE<"div_s.d", int_mips_div_s_d, NoItinerary,
905                                      MSA128, MSA128>;
906
907class DIV_U_B_DESC : MSA_3R_DESC_BASE<"div_u.b", int_mips_div_u_b, NoItinerary,
908                                      MSA128, MSA128>;
909class DIV_U_H_DESC : MSA_3R_DESC_BASE<"div_u.h", int_mips_div_u_h, NoItinerary,
910                                      MSA128, MSA128>;
911class DIV_U_W_DESC : MSA_3R_DESC_BASE<"div_u.w", int_mips_div_u_w, NoItinerary,
912                                      MSA128, MSA128>;
913class DIV_U_D_DESC : MSA_3R_DESC_BASE<"div_u.d", int_mips_div_u_d, NoItinerary,
914                                      MSA128, MSA128>;
915
916class DOTP_S_B_DESC : MSA_3R_DESC_BASE<"dotp_s.b", int_mips_dotp_s_b,
917                                       NoItinerary, MSA128, MSA128>,
918                                       IsCommutable;
919class DOTP_S_H_DESC : MSA_3R_DESC_BASE<"dotp_s.h", int_mips_dotp_s_h,
920                                       NoItinerary, MSA128, MSA128>,
921                                       IsCommutable;
922class DOTP_S_W_DESC : MSA_3R_DESC_BASE<"dotp_s.w", int_mips_dotp_s_w,
923                                       NoItinerary, MSA128, MSA128>,
924                                       IsCommutable;
925class DOTP_S_D_DESC : MSA_3R_DESC_BASE<"dotp_s.d", int_mips_dotp_s_d,
926                                       NoItinerary, MSA128, MSA128>,
927                                       IsCommutable;
928
929class DOTP_U_B_DESC : MSA_3R_DESC_BASE<"dotp_u.b", int_mips_dotp_u_b,
930                                       NoItinerary, MSA128, MSA128>,
931                                       IsCommutable;
932class DOTP_U_H_DESC : MSA_3R_DESC_BASE<"dotp_u.h", int_mips_dotp_u_h,
933                                       NoItinerary, MSA128, MSA128>,
934                                       IsCommutable;
935class DOTP_U_W_DESC : MSA_3R_DESC_BASE<"dotp_u.w", int_mips_dotp_u_w,
936                                       NoItinerary, MSA128, MSA128>,
937                                       IsCommutable;
938class DOTP_U_D_DESC : MSA_3R_DESC_BASE<"dotp_u.d", int_mips_dotp_u_d,
939                                       NoItinerary, MSA128, MSA128>,
940                                       IsCommutable;
941
942class DPADD_S_H_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.h", int_mips_dpadd_s_h,
943                                           NoItinerary, MSA128, MSA128>,
944                                           IsCommutable;
945class DPADD_S_W_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.w", int_mips_dpadd_s_w,
946                                           NoItinerary, MSA128, MSA128>,
947                                           IsCommutable;
948class DPADD_S_D_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.d", int_mips_dpadd_s_d,
949                                           NoItinerary, MSA128, MSA128>,
950                                           IsCommutable;
951
952class DPADD_U_H_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.h", int_mips_dpadd_u_h,
953                                           NoItinerary, MSA128, MSA128>,
954                                           IsCommutable;
955class DPADD_U_W_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.w", int_mips_dpadd_u_w,
956                                           NoItinerary, MSA128, MSA128>,
957                                           IsCommutable;
958class DPADD_U_D_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.d", int_mips_dpadd_u_d,
959                                           NoItinerary, MSA128, MSA128>,
960                                           IsCommutable;
961
962class DPSUB_S_H_DESC : MSA_3R_4R_DESC_BASE<"dpsub_s.h", int_mips_dpsub_s_h,
963                                           NoItinerary, MSA128, MSA128>;
964class DPSUB_S_W_DESC : MSA_3R_4R_DESC_BASE<"dpsub_s.w", int_mips_dpsub_s_w,
965                                           NoItinerary, MSA128, MSA128>;
966class DPSUB_S_D_DESC : MSA_3R_4R_DESC_BASE<"dpsub_s.d", int_mips_dpsub_s_d,
967                                           NoItinerary, MSA128, MSA128>;
968
969class DPSUB_U_H_DESC : MSA_3R_4R_DESC_BASE<"dpsub_u.h", int_mips_dpsub_u_h,
970                                           NoItinerary, MSA128, MSA128>;
971class DPSUB_U_W_DESC : MSA_3R_4R_DESC_BASE<"dpsub_u.w", int_mips_dpsub_u_w,
972                                           NoItinerary, MSA128, MSA128>;
973class DPSUB_U_D_DESC : MSA_3R_4R_DESC_BASE<"dpsub_u.d", int_mips_dpsub_u_d,
974                                           NoItinerary, MSA128, MSA128>;
975
976class FADD_W_DESC : MSA_3RF_DESC_BASE<"fadd.w", int_mips_fadd_w,
977                                      NoItinerary, MSA128, MSA128>,
978                                      IsCommutable;
979class FADD_D_DESC : MSA_3RF_DESC_BASE<"fadd.d", int_mips_fadd_d,
980                                      NoItinerary, MSA128, MSA128>,
981                                      IsCommutable;
982
983class FCEQ_W_DESC : MSA_3RF_DESC_BASE<"fceq.w", int_mips_fceq_w,
984                                      NoItinerary, MSA128, MSA128>,
985                                      IsCommutable;
986class FCEQ_D_DESC : MSA_3RF_DESC_BASE<"fceq.d", int_mips_fceq_d,
987                                      NoItinerary, MSA128, MSA128>,
988                                      IsCommutable;
989
990class FCGE_W_DESC : MSA_3RF_DESC_BASE<"fcge.w", int_mips_fcge_w,
991                                      NoItinerary, MSA128, MSA128>;
992class FCGE_D_DESC : MSA_3RF_DESC_BASE<"fcge.d", int_mips_fcge_d,
993                                      NoItinerary, MSA128, MSA128>;
994
995class FCGT_W_DESC : MSA_3RF_DESC_BASE<"fcgt.w", int_mips_fcgt_w,
996                                      NoItinerary, MSA128, MSA128>;
997class FCGT_D_DESC : MSA_3RF_DESC_BASE<"fcgt.d", int_mips_fcgt_d,
998                                      NoItinerary, MSA128, MSA128>;
999
1000class FCLASS_W_DESC : MSA_2RF_DESC_BASE<"fclass.w", int_mips_fclass_w,
1001                                        NoItinerary, MSA128, MSA128>;
1002class FCLASS_D_DESC : MSA_2RF_DESC_BASE<"fclass.d", int_mips_fclass_d,
1003                                        NoItinerary, MSA128, MSA128>;
1004
1005class FCLE_W_DESC : MSA_3RF_DESC_BASE<"fcle.w", int_mips_fcle_w,
1006                                      NoItinerary, MSA128, MSA128>;
1007class FCLE_D_DESC : MSA_3RF_DESC_BASE<"fcle.d", int_mips_fcle_d,
1008                                      NoItinerary, MSA128, MSA128>;
1009
1010class FCLT_W_DESC : MSA_3RF_DESC_BASE<"fclt.w", int_mips_fclt_w,
1011                                      NoItinerary, MSA128, MSA128>;
1012class FCLT_D_DESC : MSA_3RF_DESC_BASE<"fclt.d", int_mips_fclt_d,
1013                                      NoItinerary, MSA128, MSA128>;
1014
1015class FCNE_W_DESC : MSA_3RF_DESC_BASE<"fcne.w", int_mips_fcne_w,
1016                                      NoItinerary, MSA128, MSA128>,
1017                                      IsCommutable;
1018class FCNE_D_DESC : MSA_3RF_DESC_BASE<"fcne.d", int_mips_fcne_d,
1019                                      NoItinerary, MSA128, MSA128>,
1020                                      IsCommutable;
1021
1022class FCUN_W_DESC : MSA_3RF_DESC_BASE<"fcun.w", int_mips_fcun_w,
1023                                      NoItinerary, MSA128, MSA128>,
1024                                      IsCommutable;
1025class FCUN_D_DESC : MSA_3RF_DESC_BASE<"fcun.d", int_mips_fcun_d,
1026                                      NoItinerary, MSA128, MSA128>,
1027                                      IsCommutable;
1028
1029class FDIV_W_DESC : MSA_3RF_DESC_BASE<"fdiv.w", int_mips_fdiv_w,
1030                                      NoItinerary, MSA128, MSA128>;
1031class FDIV_D_DESC : MSA_3RF_DESC_BASE<"fdiv.d", int_mips_fdiv_d,
1032                                      NoItinerary, MSA128, MSA128>;
1033
1034class FEXDO_H_DESC : MSA_3RF_DESC_BASE<"fexdo.h", int_mips_fexdo_h,
1035                                       NoItinerary, MSA128, MSA128>;
1036class FEXDO_W_DESC : MSA_3RF_DESC_BASE<"fexdo.w", int_mips_fexdo_w,
1037                                       NoItinerary, MSA128, MSA128>;
1038
1039class FEXP2_W_DESC : MSA_3RF_DESC_BASE<"fexp2.w", int_mips_fexp2_w,
1040                                       NoItinerary, MSA128, MSA128>;
1041class FEXP2_D_DESC : MSA_3RF_DESC_BASE<"fexp2.d", int_mips_fexp2_d,
1042                                       NoItinerary, MSA128, MSA128>;
1043
1044class FEXUPL_W_DESC : MSA_2RF_DESC_BASE<"fexupl.w", int_mips_fexupl_w,
1045                                        NoItinerary, MSA128, MSA128>;
1046class FEXUPL_D_DESC : MSA_2RF_DESC_BASE<"fexupl.d", int_mips_fexupl_d,
1047                                        NoItinerary, MSA128, MSA128>;
1048
1049class FEXUPR_W_DESC : MSA_2RF_DESC_BASE<"fexupr.w", int_mips_fexupr_w,
1050                                        NoItinerary, MSA128, MSA128>;
1051class FEXUPR_D_DESC : MSA_2RF_DESC_BASE<"fexupr.d", int_mips_fexupr_d,
1052                                        NoItinerary, MSA128, MSA128>;
1053
1054class FFINT_S_W_DESC : MSA_2RF_DESC_BASE<"ffint_s.w", int_mips_ffint_s_w,
1055                                         NoItinerary, MSA128, MSA128>;
1056class FFINT_S_D_DESC : MSA_2RF_DESC_BASE<"ffint_s.d", int_mips_ffint_s_d,
1057                                         NoItinerary, MSA128, MSA128>;
1058
1059class FFINT_U_W_DESC : MSA_2RF_DESC_BASE<"ffint_u.w", int_mips_ffint_u_w,
1060                                         NoItinerary, MSA128, MSA128>;
1061class FFINT_U_D_DESC : MSA_2RF_DESC_BASE<"ffint_u.d", int_mips_ffint_u_d,
1062                                         NoItinerary, MSA128, MSA128>;
1063
1064class FFQL_W_DESC : MSA_2RF_DESC_BASE<"ffql.w", int_mips_ffql_w,
1065                                      NoItinerary, MSA128, MSA128>;
1066class FFQL_D_DESC : MSA_2RF_DESC_BASE<"ffql.d", int_mips_ffql_d,
1067                                      NoItinerary, MSA128, MSA128>;
1068
1069class FFQR_W_DESC : MSA_2RF_DESC_BASE<"ffqr.w", int_mips_ffqr_w,
1070                                      NoItinerary, MSA128, MSA128>;
1071class FFQR_D_DESC : MSA_2RF_DESC_BASE<"ffqr.d", int_mips_ffqr_d,
1072                                      NoItinerary, MSA128, MSA128>;
1073
1074class FILL_B_DESC : MSA_2R_DESC_BASE<"fill.b", int_mips_fill_b,
1075                                     NoItinerary, MSA128, GPR32>;
1076class FILL_H_DESC : MSA_2R_DESC_BASE<"fill.h", int_mips_fill_h,
1077                                     NoItinerary, MSA128, GPR32>;
1078class FILL_W_DESC : MSA_2R_DESC_BASE<"fill.w", int_mips_fill_w,
1079                                     NoItinerary, MSA128, GPR32>;
1080
1081class FLOG2_W_DESC : MSA_2RF_DESC_BASE<"flog2.w", int_mips_flog2_w,
1082                                       NoItinerary, MSA128, MSA128>;
1083class FLOG2_D_DESC : MSA_2RF_DESC_BASE<"flog2.d", int_mips_flog2_d,
1084                                       NoItinerary, MSA128, MSA128>;
1085
1086class FMADD_W_DESC : MSA_3RF_4RF_DESC_BASE<"fmadd.w", int_mips_fmadd_w,
1087                                           NoItinerary, MSA128, MSA128>;
1088class FMADD_D_DESC : MSA_3RF_4RF_DESC_BASE<"fmadd.d", int_mips_fmadd_d,
1089                                           NoItinerary, MSA128, MSA128>;
1090
1091class FMAX_W_DESC : MSA_3RF_DESC_BASE<"fmax.w", int_mips_fmax_w,
1092                                      NoItinerary, MSA128, MSA128>;
1093class FMAX_D_DESC : MSA_3RF_DESC_BASE<"fmax.d", int_mips_fmax_d,
1094                                      NoItinerary, MSA128, MSA128>;
1095
1096class FMAX_A_W_DESC : MSA_3RF_DESC_BASE<"fmax_a.w", int_mips_fmax_a_w,
1097                                        NoItinerary, MSA128, MSA128>;
1098class FMAX_A_D_DESC : MSA_3RF_DESC_BASE<"fmax_a.d", int_mips_fmax_a_d,
1099                                        NoItinerary, MSA128, MSA128>;
1100
1101class FMIN_W_DESC : MSA_3RF_DESC_BASE<"fmin.w", int_mips_fmin_w,
1102                                      NoItinerary, MSA128, MSA128>;
1103class FMIN_D_DESC : MSA_3RF_DESC_BASE<"fmin.d", int_mips_fmin_d,
1104                                      NoItinerary, MSA128, MSA128>;
1105
1106class FMIN_A_W_DESC : MSA_3RF_DESC_BASE<"fmin_a.w", int_mips_fmin_a_w,
1107                                        NoItinerary, MSA128, MSA128>;
1108class FMIN_A_D_DESC : MSA_3RF_DESC_BASE<"fmin_a.d", int_mips_fmin_a_d,
1109                                        NoItinerary, MSA128, MSA128>;
1110
1111class FMSUB_W_DESC : MSA_3RF_4RF_DESC_BASE<"fmsub.w", int_mips_fmsub_w,
1112                                           NoItinerary, MSA128, MSA128>;
1113class FMSUB_D_DESC : MSA_3RF_4RF_DESC_BASE<"fmsub.d", int_mips_fmsub_d,
1114                                           NoItinerary, MSA128, MSA128>;
1115
1116class FMUL_W_DESC : MSA_3RF_DESC_BASE<"fmul.w", int_mips_fmul_w,
1117                                      NoItinerary, MSA128, MSA128>;
1118class FMUL_D_DESC : MSA_3RF_DESC_BASE<"fmul.d", int_mips_fmul_d,
1119                                      NoItinerary, MSA128, MSA128>;
1120
1121class FRINT_W_DESC : MSA_2RF_DESC_BASE<"frint.w", int_mips_frint_w,
1122                                       NoItinerary, MSA128, MSA128>;
1123class FRINT_D_DESC : MSA_2RF_DESC_BASE<"frint.d", int_mips_frint_d,
1124                                       NoItinerary, MSA128, MSA128>;
1125
1126class FRCP_W_DESC : MSA_2RF_DESC_BASE<"frcp.w", int_mips_frcp_w,
1127                                       NoItinerary, MSA128, MSA128>;
1128class FRCP_D_DESC : MSA_2RF_DESC_BASE<"frcp.d", int_mips_frcp_d,
1129                                       NoItinerary, MSA128, MSA128>;
1130
1131class FRSQRT_W_DESC : MSA_2RF_DESC_BASE<"frsqrt.w", int_mips_frsqrt_w,
1132                                        NoItinerary, MSA128, MSA128>;
1133class FRSQRT_D_DESC : MSA_2RF_DESC_BASE<"frsqrt.d", int_mips_frsqrt_d,
1134                                        NoItinerary, MSA128, MSA128>;
1135
1136class FSEQ_W_DESC : MSA_3RF_DESC_BASE<"fseq.w", int_mips_fseq_w,
1137                                      NoItinerary, MSA128, MSA128>;
1138class FSEQ_D_DESC : MSA_3RF_DESC_BASE<"fseq.d", int_mips_fseq_d,
1139                                      NoItinerary, MSA128, MSA128>;
1140
1141class FSGE_W_DESC : MSA_3RF_DESC_BASE<"fsge.w", int_mips_fsge_w,
1142                                      NoItinerary, MSA128, MSA128>;
1143class FSGE_D_DESC : MSA_3RF_DESC_BASE<"fsge.d", int_mips_fsge_d,
1144                                      NoItinerary, MSA128, MSA128>;
1145
1146class FSGT_W_DESC : MSA_3RF_DESC_BASE<"fsgt.w", int_mips_fsgt_w,
1147                                      NoItinerary, MSA128, MSA128>;
1148class FSGT_D_DESC : MSA_3RF_DESC_BASE<"fsgt.d", int_mips_fsgt_d,
1149                                      NoItinerary, MSA128, MSA128>;
1150
1151class FSLE_W_DESC : MSA_3RF_DESC_BASE<"fsle.w", int_mips_fsle_w,
1152                                      NoItinerary, MSA128, MSA128>;
1153class FSLE_D_DESC : MSA_3RF_DESC_BASE<"fsle.d", int_mips_fsle_d,
1154                                      NoItinerary, MSA128, MSA128>;
1155
1156class FSLT_W_DESC : MSA_3RF_DESC_BASE<"fslt.w", int_mips_fslt_w,
1157                                      NoItinerary, MSA128, MSA128>;
1158class FSLT_D_DESC : MSA_3RF_DESC_BASE<"fslt.d", int_mips_fslt_d,
1159                                      NoItinerary, MSA128, MSA128>;
1160
1161class FSNE_W_DESC : MSA_3RF_DESC_BASE<"fsne.w", int_mips_fsne_w,
1162                                      NoItinerary, MSA128, MSA128>;
1163class FSNE_D_DESC : MSA_3RF_DESC_BASE<"fsne.d", int_mips_fsne_d,
1164                                      NoItinerary, MSA128, MSA128>;
1165
1166class FSQRT_W_DESC : MSA_2RF_DESC_BASE<"fsqrt.w", int_mips_fsqrt_w,
1167                                       NoItinerary, MSA128, MSA128>;
1168class FSQRT_D_DESC : MSA_2RF_DESC_BASE<"fsqrt.d", int_mips_fsqrt_d,
1169                                       NoItinerary, MSA128, MSA128>;
1170
1171class FSUB_W_DESC : MSA_3RF_DESC_BASE<"fsub.w", int_mips_fsub_w,
1172                                      NoItinerary, MSA128, MSA128>;
1173class FSUB_D_DESC : MSA_3RF_DESC_BASE<"fsub.d", int_mips_fsub_d,
1174                                      NoItinerary, MSA128, MSA128>;
1175
1176class FTINT_S_W_DESC : MSA_2RF_DESC_BASE<"ftint_s.w", int_mips_ftint_s_w,
1177                                         NoItinerary, MSA128, MSA128>;
1178class FTINT_S_D_DESC : MSA_2RF_DESC_BASE<"ftint_s.d", int_mips_ftint_s_d,
1179                                         NoItinerary, MSA128, MSA128>;
1180
1181class FTINT_U_W_DESC : MSA_2RF_DESC_BASE<"ftint_u.w", int_mips_ftint_u_w,
1182                                         NoItinerary, MSA128, MSA128>;
1183class FTINT_U_D_DESC : MSA_2RF_DESC_BASE<"ftint_u.d", int_mips_ftint_u_d,
1184                                         NoItinerary, MSA128, MSA128>;
1185
1186class FTQ_H_DESC : MSA_3RF_DESC_BASE<"ftq.h", int_mips_ftq_h,
1187                                     NoItinerary, MSA128, MSA128>;
1188class FTQ_W_DESC : MSA_3RF_DESC_BASE<"ftq.w", int_mips_ftq_w,
1189                                     NoItinerary, MSA128, MSA128>;
1190
1191class ILVEV_B_DESC : MSA_3R_DESC_BASE<"ilvev.b", int_mips_ilvev_b, NoItinerary,
1192                                      MSA128, MSA128>;
1193class ILVEV_H_DESC : MSA_3R_DESC_BASE<"ilvev.h", int_mips_ilvev_h, NoItinerary,
1194                                      MSA128, MSA128>;
1195class ILVEV_W_DESC : MSA_3R_DESC_BASE<"ilvev.w", int_mips_ilvev_w, NoItinerary,
1196                                      MSA128, MSA128>;
1197class ILVEV_D_DESC : MSA_3R_DESC_BASE<"ilvev.d", int_mips_ilvev_d, NoItinerary,
1198                                      MSA128, MSA128>;
1199
1200class ILVL_B_DESC : MSA_3R_DESC_BASE<"ilvl.b", int_mips_ilvl_b, NoItinerary,
1201                                     MSA128, MSA128>;
1202class ILVL_H_DESC : MSA_3R_DESC_BASE<"ilvl.h", int_mips_ilvl_h, NoItinerary,
1203                                     MSA128, MSA128>;
1204class ILVL_W_DESC : MSA_3R_DESC_BASE<"ilvl.w", int_mips_ilvl_w, NoItinerary,
1205                                     MSA128, MSA128>;
1206class ILVL_D_DESC : MSA_3R_DESC_BASE<"ilvl.d", int_mips_ilvl_d, NoItinerary,
1207                                     MSA128, MSA128>;
1208
1209class ILVOD_B_DESC : MSA_3R_DESC_BASE<"ilvod.b", int_mips_ilvod_b, NoItinerary,
1210                                      MSA128, MSA128>;
1211class ILVOD_H_DESC : MSA_3R_DESC_BASE<"ilvod.h", int_mips_ilvod_h, NoItinerary,
1212                                      MSA128, MSA128>;
1213class ILVOD_W_DESC : MSA_3R_DESC_BASE<"ilvod.w", int_mips_ilvod_w, NoItinerary,
1214                                      MSA128, MSA128>;
1215class ILVOD_D_DESC : MSA_3R_DESC_BASE<"ilvod.d", int_mips_ilvod_d, NoItinerary,
1216                                      MSA128, MSA128>;
1217
1218class ILVR_B_DESC : MSA_3R_DESC_BASE<"ilvr.b", int_mips_ilvr_b, NoItinerary,
1219                                     MSA128, MSA128>;
1220class ILVR_H_DESC : MSA_3R_DESC_BASE<"ilvr.h", int_mips_ilvr_h, NoItinerary,
1221                                     MSA128, MSA128>;
1222class ILVR_W_DESC : MSA_3R_DESC_BASE<"ilvr.w", int_mips_ilvr_w, NoItinerary,
1223                                     MSA128, MSA128>;
1224class ILVR_D_DESC : MSA_3R_DESC_BASE<"ilvr.d", int_mips_ilvr_d, NoItinerary,
1225                                     MSA128, MSA128>;
1226
1227class INSERT_B_DESC : MSA_INSERT_DESC_BASE<"insert.b", int_mips_insert_b,
1228                                           NoItinerary, MSA128, GPR32>;
1229class INSERT_H_DESC : MSA_INSERT_DESC_BASE<"insert.h", int_mips_insert_h,
1230                                           NoItinerary, MSA128, GPR32>;
1231class INSERT_W_DESC : MSA_INSERT_DESC_BASE<"insert.w", int_mips_insert_w,
1232                                           NoItinerary, MSA128, GPR32>;
1233
1234class LD_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
1235                   ValueType TyNode, InstrItinClass itin, RegisterClass RCWD,
1236                   Operand MemOpnd = mem, ComplexPattern Addr = addr> {
1237  dag OutOperandList = (outs RCWD:$wd);
1238  dag InOperandList = (ins MemOpnd:$addr);
1239  string AsmString = !strconcat(instr_asm, "\t$wd, $addr");
1240  list<dag> Pattern = [(set RCWD:$wd, (TyNode (OpNode Addr:$addr)))];
1241  InstrItinClass Itinerary = itin;
1242}
1243
1244class LD_B_DESC : LD_DESC_BASE<"ld.b", load, v16i8, NoItinerary, MSA128>;
1245class LD_H_DESC : LD_DESC_BASE<"ld.h", load, v8i16, NoItinerary, MSA128>;
1246class LD_W_DESC : LD_DESC_BASE<"ld.w", load, v4i32, NoItinerary, MSA128>;
1247class LD_D_DESC : LD_DESC_BASE<"ld.d", load, v2i64, NoItinerary, MSA128>;
1248
1249class LDI_B_DESC : MSA_I10_DESC_BASE<"ldi.b", int_mips_ldi_b,
1250                                     NoItinerary, MSA128>;
1251class LDI_H_DESC : MSA_I10_DESC_BASE<"ldi.h", int_mips_ldi_h,
1252                                     NoItinerary, MSA128>;
1253class LDI_W_DESC : MSA_I10_DESC_BASE<"ldi.w", int_mips_ldi_w,
1254                                     NoItinerary, MSA128>;
1255class LDI_D_DESC : MSA_I10_DESC_BASE<"ldi.d", int_mips_ldi_d,
1256                                     NoItinerary, MSA128>;
1257
1258class ST_DESC_BASE<string instr_asm, SDPatternOperator OpNode,
1259                   ValueType TyNode, InstrItinClass itin, RegisterClass RCWD,
1260                   Operand MemOpnd = mem, ComplexPattern Addr = addr> {
1261  dag OutOperandList = (outs);
1262  dag InOperandList = (ins RCWD:$wd, MemOpnd:$addr);
1263  string AsmString = !strconcat(instr_asm, "\t$wd, $addr");
1264  list<dag> Pattern = [(OpNode (TyNode RCWD:$wd), Addr:$addr)];
1265  InstrItinClass Itinerary = itin;
1266}
1267
1268// Load/Store
1269class ST_B_DESC : ST_DESC_BASE<"st.b", store, v16i8, NoItinerary, MSA128>;
1270class ST_H_DESC : ST_DESC_BASE<"st.h", store, v8i16, NoItinerary, MSA128>;
1271class ST_W_DESC : ST_DESC_BASE<"st.w", store, v4i32, NoItinerary, MSA128>;
1272class ST_D_DESC : ST_DESC_BASE<"st.d", store, v2i64, NoItinerary, MSA128>;
1273
1274// Instruction defs.
1275def ADD_A_B : ADD_A_B_ENC, ADD_A_B_DESC, Requires<[HasMSA]>;
1276def ADD_A_H : ADD_A_H_ENC, ADD_A_H_DESC, Requires<[HasMSA]>;
1277def ADD_A_W : ADD_A_W_ENC, ADD_A_W_DESC, Requires<[HasMSA]>;
1278def ADD_A_D : ADD_A_D_ENC, ADD_A_D_DESC, Requires<[HasMSA]>;
1279
1280def ADDS_A_B : ADDS_A_B_ENC, ADDS_A_B_DESC, Requires<[HasMSA]>;
1281def ADDS_A_H : ADDS_A_H_ENC, ADDS_A_H_DESC, Requires<[HasMSA]>;
1282def ADDS_A_W : ADDS_A_W_ENC, ADDS_A_W_DESC, Requires<[HasMSA]>;
1283def ADDS_A_D : ADDS_A_D_ENC, ADDS_A_D_DESC, Requires<[HasMSA]>;
1284
1285def ADDS_S_B : ADDS_S_B_ENC, ADDS_S_B_DESC, Requires<[HasMSA]>;
1286def ADDS_S_H : ADDS_S_H_ENC, ADDS_S_H_DESC, Requires<[HasMSA]>;
1287def ADDS_S_W : ADDS_S_W_ENC, ADDS_S_W_DESC, Requires<[HasMSA]>;
1288def ADDS_S_D : ADDS_S_D_ENC, ADDS_S_D_DESC, Requires<[HasMSA]>;
1289
1290def ADDS_U_B : ADDS_U_B_ENC, ADDS_U_B_DESC, Requires<[HasMSA]>;
1291def ADDS_U_H : ADDS_U_H_ENC, ADDS_U_H_DESC, Requires<[HasMSA]>;
1292def ADDS_U_W : ADDS_U_W_ENC, ADDS_U_W_DESC, Requires<[HasMSA]>;
1293def ADDS_U_D : ADDS_U_D_ENC, ADDS_U_D_DESC, Requires<[HasMSA]>;
1294
1295def ADDV_B : ADDV_B_ENC, ADDV_B_DESC, Requires<[HasMSA]>;
1296def ADDV_H : ADDV_H_ENC, ADDV_H_DESC, Requires<[HasMSA]>;
1297def ADDV_W : ADDV_W_ENC, ADDV_W_DESC, Requires<[HasMSA]>;
1298def ADDV_D : ADDV_D_ENC, ADDV_D_DESC, Requires<[HasMSA]>;
1299
1300def ADDVI_B : ADDVI_B_ENC, ADDVI_B_DESC, Requires<[HasMSA]>;
1301def ADDVI_H : ADDVI_H_ENC, ADDVI_H_DESC, Requires<[HasMSA]>;
1302def ADDVI_W : ADDVI_W_ENC, ADDVI_W_DESC, Requires<[HasMSA]>;
1303def ADDVI_D : ADDVI_D_ENC, ADDVI_D_DESC, Requires<[HasMSA]>;
1304
1305def ANDI_B : ANDI_B_ENC, ANDI_B_DESC, Requires<[HasMSA]>;
1306
1307def ASUB_S_B : ASUB_S_B_ENC, ASUB_S_B_DESC, Requires<[HasMSA]>;
1308def ASUB_S_H : ASUB_S_H_ENC, ASUB_S_H_DESC, Requires<[HasMSA]>;
1309def ASUB_S_W : ASUB_S_W_ENC, ASUB_S_W_DESC, Requires<[HasMSA]>;
1310def ASUB_S_D : ASUB_S_D_ENC, ASUB_S_D_DESC, Requires<[HasMSA]>;
1311
1312def ASUB_U_B : ASUB_U_B_ENC, ASUB_U_B_DESC, Requires<[HasMSA]>;
1313def ASUB_U_H : ASUB_U_H_ENC, ASUB_U_H_DESC, Requires<[HasMSA]>;
1314def ASUB_U_W : ASUB_U_W_ENC, ASUB_U_W_DESC, Requires<[HasMSA]>;
1315def ASUB_U_D : ASUB_U_D_ENC, ASUB_U_D_DESC, Requires<[HasMSA]>;
1316
1317def AVE_S_B : AVE_S_B_ENC, AVE_S_B_DESC, Requires<[HasMSA]>;
1318def AVE_S_H : AVE_S_H_ENC, AVE_S_H_DESC, Requires<[HasMSA]>;
1319def AVE_S_W : AVE_S_W_ENC, AVE_S_W_DESC, Requires<[HasMSA]>;
1320def AVE_S_D : AVE_S_D_ENC, AVE_S_D_DESC, Requires<[HasMSA]>;
1321
1322def AVE_U_B : AVE_U_B_ENC, AVE_U_B_DESC, Requires<[HasMSA]>;
1323def AVE_U_H : AVE_U_H_ENC, AVE_U_H_DESC, Requires<[HasMSA]>;
1324def AVE_U_W : AVE_U_W_ENC, AVE_U_W_DESC, Requires<[HasMSA]>;
1325def AVE_U_D : AVE_U_D_ENC, AVE_U_D_DESC, Requires<[HasMSA]>;
1326
1327def AVER_S_B : AVER_S_B_ENC, AVER_S_B_DESC, Requires<[HasMSA]>;
1328def AVER_S_H : AVER_S_H_ENC, AVER_S_H_DESC, Requires<[HasMSA]>;
1329def AVER_S_W : AVER_S_W_ENC, AVER_S_W_DESC, Requires<[HasMSA]>;
1330def AVER_S_D : AVER_S_D_ENC, AVER_S_D_DESC, Requires<[HasMSA]>;
1331
1332def AVER_U_B : AVER_U_B_ENC, AVER_U_B_DESC, Requires<[HasMSA]>;
1333def AVER_U_H : AVER_U_H_ENC, AVER_U_H_DESC, Requires<[HasMSA]>;
1334def AVER_U_W : AVER_U_W_ENC, AVER_U_W_DESC, Requires<[HasMSA]>;
1335def AVER_U_D : AVER_U_D_ENC, AVER_U_D_DESC, Requires<[HasMSA]>;
1336
1337def BCLR_B : BCLR_B_ENC, BCLR_B_DESC, Requires<[HasMSA]>;
1338def BCLR_H : BCLR_H_ENC, BCLR_H_DESC, Requires<[HasMSA]>;
1339def BCLR_W : BCLR_W_ENC, BCLR_W_DESC, Requires<[HasMSA]>;
1340def BCLR_D : BCLR_D_ENC, BCLR_D_DESC, Requires<[HasMSA]>;
1341
1342def BCLRI_B : BCLRI_B_ENC, BCLRI_B_DESC, Requires<[HasMSA]>;
1343def BCLRI_H : BCLRI_H_ENC, BCLRI_H_DESC, Requires<[HasMSA]>;
1344def BCLRI_W : BCLRI_W_ENC, BCLRI_W_DESC, Requires<[HasMSA]>;
1345def BCLRI_D : BCLRI_D_ENC, BCLRI_D_DESC, Requires<[HasMSA]>;
1346
1347def BINSL_B : BINSL_B_ENC, BINSL_B_DESC, Requires<[HasMSA]>;
1348def BINSL_H : BINSL_H_ENC, BINSL_H_DESC, Requires<[HasMSA]>;
1349def BINSL_W : BINSL_W_ENC, BINSL_W_DESC, Requires<[HasMSA]>;
1350def BINSL_D : BINSL_D_ENC, BINSL_D_DESC, Requires<[HasMSA]>;
1351
1352def BINSLI_B : BINSLI_B_ENC, BINSLI_B_DESC, Requires<[HasMSA]>;
1353def BINSLI_H : BINSLI_H_ENC, BINSLI_H_DESC, Requires<[HasMSA]>;
1354def BINSLI_W : BINSLI_W_ENC, BINSLI_W_DESC, Requires<[HasMSA]>;
1355def BINSLI_D : BINSLI_D_ENC, BINSLI_D_DESC, Requires<[HasMSA]>;
1356
1357def BINSR_B : BINSR_B_ENC, BINSR_B_DESC, Requires<[HasMSA]>;
1358def BINSR_H : BINSR_H_ENC, BINSR_H_DESC, Requires<[HasMSA]>;
1359def BINSR_W : BINSR_W_ENC, BINSR_W_DESC, Requires<[HasMSA]>;
1360def BINSR_D : BINSR_D_ENC, BINSR_D_DESC, Requires<[HasMSA]>;
1361
1362def BINSRI_B : BINSRI_B_ENC, BINSRI_B_DESC, Requires<[HasMSA]>;
1363def BINSRI_H : BINSRI_H_ENC, BINSRI_H_DESC, Requires<[HasMSA]>;
1364def BINSRI_W : BINSRI_W_ENC, BINSRI_W_DESC, Requires<[HasMSA]>;
1365def BINSRI_D : BINSRI_D_ENC, BINSRI_D_DESC, Requires<[HasMSA]>;
1366
1367def BMNZI_B : BMNZI_B_ENC, BMNZI_B_DESC, Requires<[HasMSA]>;
1368
1369def BMZI_B : BMZI_B_ENC, BMZI_B_DESC, Requires<[HasMSA]>;
1370
1371def BNEG_B : BNEG_B_ENC, BNEG_B_DESC, Requires<[HasMSA]>;
1372def BNEG_H : BNEG_H_ENC, BNEG_H_DESC, Requires<[HasMSA]>;
1373def BNEG_W : BNEG_W_ENC, BNEG_W_DESC, Requires<[HasMSA]>;
1374def BNEG_D : BNEG_D_ENC, BNEG_D_DESC, Requires<[HasMSA]>;
1375
1376def BNEGI_B : BNEGI_B_ENC, BNEGI_B_DESC, Requires<[HasMSA]>;
1377def BNEGI_H : BNEGI_H_ENC, BNEGI_H_DESC, Requires<[HasMSA]>;
1378def BNEGI_W : BNEGI_W_ENC, BNEGI_W_DESC, Requires<[HasMSA]>;
1379def BNEGI_D : BNEGI_D_ENC, BNEGI_D_DESC, Requires<[HasMSA]>;
1380
1381def BSELI_B : BSELI_B_ENC, BSELI_B_DESC, Requires<[HasMSA]>;
1382
1383def BSET_B : BSET_B_ENC, BSET_B_DESC, Requires<[HasMSA]>;
1384def BSET_H : BSET_H_ENC, BSET_H_DESC, Requires<[HasMSA]>;
1385def BSET_W : BSET_W_ENC, BSET_W_DESC, Requires<[HasMSA]>;
1386def BSET_D : BSET_D_ENC, BSET_D_DESC, Requires<[HasMSA]>;
1387
1388def BSETI_B : BSETI_B_ENC, BSETI_B_DESC, Requires<[HasMSA]>;
1389def BSETI_H : BSETI_H_ENC, BSETI_H_DESC, Requires<[HasMSA]>;
1390def BSETI_W : BSETI_W_ENC, BSETI_W_DESC, Requires<[HasMSA]>;
1391def BSETI_D : BSETI_D_ENC, BSETI_D_DESC, Requires<[HasMSA]>;
1392
1393def CEQ_B : CEQ_B_ENC, CEQ_B_DESC, Requires<[HasMSA]>;
1394def CEQ_H : CEQ_H_ENC, CEQ_H_DESC, Requires<[HasMSA]>;
1395def CEQ_W : CEQ_W_ENC, CEQ_W_DESC, Requires<[HasMSA]>;
1396def CEQ_D : CEQ_D_ENC, CEQ_D_DESC, Requires<[HasMSA]>;
1397
1398def CEQI_B : CEQI_B_ENC, CEQI_B_DESC, Requires<[HasMSA]>;
1399def CEQI_H : CEQI_H_ENC, CEQI_H_DESC, Requires<[HasMSA]>;
1400def CEQI_W : CEQI_W_ENC, CEQI_W_DESC, Requires<[HasMSA]>;
1401def CEQI_D : CEQI_D_ENC, CEQI_D_DESC, Requires<[HasMSA]>;
1402
1403def CLE_S_B : CLE_S_B_ENC, CLE_S_B_DESC, Requires<[HasMSA]>;
1404def CLE_S_H : CLE_S_H_ENC, CLE_S_H_DESC, Requires<[HasMSA]>;
1405def CLE_S_W : CLE_S_W_ENC, CLE_S_W_DESC, Requires<[HasMSA]>;
1406def CLE_S_D : CLE_S_D_ENC, CLE_S_D_DESC, Requires<[HasMSA]>;
1407
1408def CLE_U_B : CLE_U_B_ENC, CLE_U_B_DESC, Requires<[HasMSA]>;
1409def CLE_U_H : CLE_U_H_ENC, CLE_U_H_DESC, Requires<[HasMSA]>;
1410def CLE_U_W : CLE_U_W_ENC, CLE_U_W_DESC, Requires<[HasMSA]>;
1411def CLE_U_D : CLE_U_D_ENC, CLE_U_D_DESC, Requires<[HasMSA]>;
1412
1413def CLEI_S_B : CLEI_S_B_ENC, CLEI_S_B_DESC, Requires<[HasMSA]>;
1414def CLEI_S_H : CLEI_S_H_ENC, CLEI_S_H_DESC, Requires<[HasMSA]>;
1415def CLEI_S_W : CLEI_S_W_ENC, CLEI_S_W_DESC, Requires<[HasMSA]>;
1416def CLEI_S_D : CLEI_S_D_ENC, CLEI_S_D_DESC, Requires<[HasMSA]>;
1417
1418def CLEI_U_B : CLEI_U_B_ENC, CLEI_U_B_DESC, Requires<[HasMSA]>;
1419def CLEI_U_H : CLEI_U_H_ENC, CLEI_U_H_DESC, Requires<[HasMSA]>;
1420def CLEI_U_W : CLEI_U_W_ENC, CLEI_U_W_DESC, Requires<[HasMSA]>;
1421def CLEI_U_D : CLEI_U_D_ENC, CLEI_U_D_DESC, Requires<[HasMSA]>;
1422
1423def CLT_S_B : CLT_S_B_ENC, CLT_S_B_DESC, Requires<[HasMSA]>;
1424def CLT_S_H : CLT_S_H_ENC, CLT_S_H_DESC, Requires<[HasMSA]>;
1425def CLT_S_W : CLT_S_W_ENC, CLT_S_W_DESC, Requires<[HasMSA]>;
1426def CLT_S_D : CLT_S_D_ENC, CLT_S_D_DESC, Requires<[HasMSA]>;
1427
1428def CLT_U_B : CLT_U_B_ENC, CLT_U_B_DESC, Requires<[HasMSA]>;
1429def CLT_U_H : CLT_U_H_ENC, CLT_U_H_DESC, Requires<[HasMSA]>;
1430def CLT_U_W : CLT_U_W_ENC, CLT_U_W_DESC, Requires<[HasMSA]>;
1431def CLT_U_D : CLT_U_D_ENC, CLT_U_D_DESC, Requires<[HasMSA]>;
1432
1433def CLTI_S_B : CLTI_S_B_ENC, CLTI_S_B_DESC, Requires<[HasMSA]>;
1434def CLTI_S_H : CLTI_S_H_ENC, CLTI_S_H_DESC, Requires<[HasMSA]>;
1435def CLTI_S_W : CLTI_S_W_ENC, CLTI_S_W_DESC, Requires<[HasMSA]>;
1436def CLTI_S_D : CLTI_S_D_ENC, CLTI_S_D_DESC, Requires<[HasMSA]>;
1437
1438def CLTI_U_B : CLTI_U_B_ENC, CLTI_U_B_DESC, Requires<[HasMSA]>;
1439def CLTI_U_H : CLTI_U_H_ENC, CLTI_U_H_DESC, Requires<[HasMSA]>;
1440def CLTI_U_W : CLTI_U_W_ENC, CLTI_U_W_DESC, Requires<[HasMSA]>;
1441def CLTI_U_D : CLTI_U_D_ENC, CLTI_U_D_DESC, Requires<[HasMSA]>;
1442
1443def COPY_S_B : COPY_S_B_ENC, COPY_S_B_DESC, Requires<[HasMSA]>;
1444def COPY_S_H : COPY_S_H_ENC, COPY_S_H_DESC, Requires<[HasMSA]>;
1445def COPY_S_W : COPY_S_W_ENC, COPY_S_W_DESC, Requires<[HasMSA]>;
1446
1447def COPY_U_B : COPY_U_B_ENC, COPY_U_B_DESC, Requires<[HasMSA]>;
1448def COPY_U_H : COPY_U_H_ENC, COPY_U_H_DESC, Requires<[HasMSA]>;
1449def COPY_U_W : COPY_U_W_ENC, COPY_U_W_DESC, Requires<[HasMSA]>;
1450
1451def DIV_S_B : DIV_S_B_ENC, DIV_S_B_DESC, Requires<[HasMSA]>;
1452def DIV_S_H : DIV_S_H_ENC, DIV_S_H_DESC, Requires<[HasMSA]>;
1453def DIV_S_W : DIV_S_W_ENC, DIV_S_W_DESC, Requires<[HasMSA]>;
1454def DIV_S_D : DIV_S_D_ENC, DIV_S_D_DESC, Requires<[HasMSA]>;
1455
1456def DIV_U_B : DIV_U_B_ENC, DIV_U_B_DESC, Requires<[HasMSA]>;
1457def DIV_U_H : DIV_U_H_ENC, DIV_U_H_DESC, Requires<[HasMSA]>;
1458def DIV_U_W : DIV_U_W_ENC, DIV_U_W_DESC, Requires<[HasMSA]>;
1459def DIV_U_D : DIV_U_D_ENC, DIV_U_D_DESC, Requires<[HasMSA]>;
1460
1461def DOTP_S_B : DOTP_S_B_ENC, DOTP_S_B_DESC, Requires<[HasMSA]>;
1462def DOTP_S_H : DOTP_S_H_ENC, DOTP_S_H_DESC, Requires<[HasMSA]>;
1463def DOTP_S_W : DOTP_S_W_ENC, DOTP_S_W_DESC, Requires<[HasMSA]>;
1464def DOTP_S_D : DOTP_S_D_ENC, DOTP_S_D_DESC, Requires<[HasMSA]>;
1465
1466def DOTP_U_B : DOTP_U_B_ENC, DOTP_U_B_DESC, Requires<[HasMSA]>;
1467def DOTP_U_H : DOTP_U_H_ENC, DOTP_U_H_DESC, Requires<[HasMSA]>;
1468def DOTP_U_W : DOTP_U_W_ENC, DOTP_U_W_DESC, Requires<[HasMSA]>;
1469def DOTP_U_D : DOTP_U_D_ENC, DOTP_U_D_DESC, Requires<[HasMSA]>;
1470
1471def DPADD_S_H : DPADD_S_H_ENC, DPADD_S_H_DESC, Requires<[HasMSA]>;
1472def DPADD_S_W : DPADD_S_W_ENC, DPADD_S_W_DESC, Requires<[HasMSA]>;
1473def DPADD_S_D : DPADD_S_D_ENC, DPADD_S_D_DESC, Requires<[HasMSA]>;
1474
1475def DPADD_U_H : DPADD_U_H_ENC, DPADD_U_H_DESC, Requires<[HasMSA]>;
1476def DPADD_U_W : DPADD_U_W_ENC, DPADD_U_W_DESC, Requires<[HasMSA]>;
1477def DPADD_U_D : DPADD_U_D_ENC, DPADD_U_D_DESC, Requires<[HasMSA]>;
1478
1479def DPSUB_S_H : DPSUB_S_H_ENC, DPSUB_S_H_DESC, Requires<[HasMSA]>;
1480def DPSUB_S_W : DPSUB_S_W_ENC, DPSUB_S_W_DESC, Requires<[HasMSA]>;
1481def DPSUB_S_D : DPSUB_S_D_ENC, DPSUB_S_D_DESC, Requires<[HasMSA]>;
1482
1483def DPSUB_U_H : DPSUB_U_H_ENC, DPSUB_U_H_DESC, Requires<[HasMSA]>;
1484def DPSUB_U_W : DPSUB_U_W_ENC, DPSUB_U_W_DESC, Requires<[HasMSA]>;
1485def DPSUB_U_D : DPSUB_U_D_ENC, DPSUB_U_D_DESC, Requires<[HasMSA]>;
1486
1487def FADD_W : FADD_W_ENC, FADD_W_DESC, Requires<[HasMSA]>;
1488def FADD_D : FADD_D_ENC, FADD_D_DESC, Requires<[HasMSA]>;
1489
1490def FCEQ_W : FCEQ_W_ENC, FCEQ_W_DESC, Requires<[HasMSA]>;
1491def FCEQ_D : FCEQ_D_ENC, FCEQ_D_DESC, Requires<[HasMSA]>;
1492
1493def FCLE_W : FCLE_W_ENC, FCLE_W_DESC, Requires<[HasMSA]>;
1494def FCLE_D : FCLE_D_ENC, FCLE_D_DESC, Requires<[HasMSA]>;
1495
1496def FCLT_W : FCLT_W_ENC, FCLT_W_DESC, Requires<[HasMSA]>;
1497def FCLT_D : FCLT_D_ENC, FCLT_D_DESC, Requires<[HasMSA]>;
1498
1499def FCLASS_W : FCLASS_W_ENC, FCLASS_W_DESC, Requires<[HasMSA]>;
1500def FCLASS_D : FCLASS_D_ENC, FCLASS_D_DESC, Requires<[HasMSA]>;
1501
1502def FCGE_W : FCGE_W_ENC, FCGE_W_DESC, Requires<[HasMSA]>;
1503def FCGE_D : FCGE_D_ENC, FCGE_D_DESC, Requires<[HasMSA]>;
1504
1505def FCGT_W : FCGT_W_ENC, FCGT_W_DESC, Requires<[HasMSA]>;
1506def FCGT_D : FCGT_D_ENC, FCGT_D_DESC, Requires<[HasMSA]>;
1507
1508def FCNE_W : FCNE_W_ENC, FCNE_W_DESC, Requires<[HasMSA]>;
1509def FCNE_D : FCNE_D_ENC, FCNE_D_DESC, Requires<[HasMSA]>;
1510
1511def FCUN_W : FCUN_W_ENC, FCUN_W_DESC, Requires<[HasMSA]>;
1512def FCUN_D : FCUN_D_ENC, FCUN_D_DESC, Requires<[HasMSA]>;
1513
1514def FDIV_W : FDIV_W_ENC, FDIV_W_DESC, Requires<[HasMSA]>;
1515def FDIV_D : FDIV_D_ENC, FDIV_D_DESC, Requires<[HasMSA]>;
1516
1517def FEXDO_H : FEXDO_H_ENC, FEXDO_H_DESC, Requires<[HasMSA]>;
1518def FEXDO_W : FEXDO_W_ENC, FEXDO_W_DESC, Requires<[HasMSA]>;
1519
1520def FEXP2_W : FEXP2_W_ENC, FEXP2_W_DESC, Requires<[HasMSA]>;
1521def FEXP2_D : FEXP2_D_ENC, FEXP2_D_DESC, Requires<[HasMSA]>;
1522
1523def FEXUPL_W : FEXUPL_W_ENC, FEXUPL_W_DESC, Requires<[HasMSA]>;
1524def FEXUPL_D : FEXUPL_D_ENC, FEXUPL_D_DESC, Requires<[HasMSA]>;
1525
1526def FEXUPR_W : FEXUPR_W_ENC, FEXUPR_W_DESC, Requires<[HasMSA]>;
1527def FEXUPR_D : FEXUPR_D_ENC, FEXUPR_D_DESC, Requires<[HasMSA]>;
1528
1529def FFINT_S_W : FFINT_S_W_ENC, FFINT_S_W_DESC, Requires<[HasMSA]>;
1530def FFINT_S_D : FFINT_S_D_ENC, FFINT_S_D_DESC, Requires<[HasMSA]>;
1531
1532def FFINT_U_W : FFINT_U_W_ENC, FFINT_U_W_DESC, Requires<[HasMSA]>;
1533def FFINT_U_D : FFINT_U_D_ENC, FFINT_U_D_DESC, Requires<[HasMSA]>;
1534
1535def FFQL_W : FFQL_W_ENC, FFQL_W_DESC, Requires<[HasMSA]>;
1536def FFQL_D : FFQL_D_ENC, FFQL_D_DESC, Requires<[HasMSA]>;
1537
1538def FFQR_W : FFQR_W_ENC, FFQR_W_DESC, Requires<[HasMSA]>;
1539def FFQR_D : FFQR_D_ENC, FFQR_D_DESC, Requires<[HasMSA]>;
1540
1541def FILL_B : FILL_B_ENC, FILL_B_DESC, Requires<[HasMSA]>;
1542def FILL_H : FILL_H_ENC, FILL_H_DESC, Requires<[HasMSA]>;
1543def FILL_W : FILL_W_ENC, FILL_W_DESC, Requires<[HasMSA]>;
1544
1545def FLOG2_W : FLOG2_W_ENC, FLOG2_W_DESC, Requires<[HasMSA]>;
1546def FLOG2_D : FLOG2_D_ENC, FLOG2_D_DESC, Requires<[HasMSA]>;
1547
1548def FMADD_W : FMADD_W_ENC, FMADD_W_DESC, Requires<[HasMSA]>;
1549def FMADD_D : FMADD_D_ENC, FMADD_D_DESC, Requires<[HasMSA]>;
1550
1551def FMAX_W : FMAX_W_ENC, FMAX_W_DESC, Requires<[HasMSA]>;
1552def FMAX_D : FMAX_D_ENC, FMAX_D_DESC, Requires<[HasMSA]>;
1553
1554def FMAX_A_W : FMAX_A_W_ENC, FMAX_A_W_DESC, Requires<[HasMSA]>;
1555def FMAX_A_D : FMAX_A_D_ENC, FMAX_A_D_DESC, Requires<[HasMSA]>;
1556
1557def FMIN_W : FMIN_W_ENC, FMIN_W_DESC, Requires<[HasMSA]>;
1558def FMIN_D : FMIN_D_ENC, FMIN_D_DESC, Requires<[HasMSA]>;
1559
1560def FMIN_A_W : FMIN_A_W_ENC, FMIN_A_W_DESC, Requires<[HasMSA]>;
1561def FMIN_A_D : FMIN_A_D_ENC, FMIN_A_D_DESC, Requires<[HasMSA]>;
1562
1563def FMSUB_W : FMSUB_W_ENC, FMSUB_W_DESC, Requires<[HasMSA]>;
1564def FMSUB_D : FMSUB_D_ENC, FMSUB_D_DESC, Requires<[HasMSA]>;
1565
1566def FMUL_W : FMUL_W_ENC, FMUL_W_DESC, Requires<[HasMSA]>;
1567def FMUL_D : FMUL_D_ENC, FMUL_D_DESC, Requires<[HasMSA]>;
1568
1569def FRINT_W : FRINT_W_ENC, FRINT_W_DESC, Requires<[HasMSA]>;
1570def FRINT_D : FRINT_D_ENC, FRINT_D_DESC, Requires<[HasMSA]>;
1571
1572def FRCP_W : FRCP_W_ENC, FRCP_W_DESC, Requires<[HasMSA]>;
1573def FRCP_D : FRCP_D_ENC, FRCP_D_DESC, Requires<[HasMSA]>;
1574
1575def FRSQRT_W : FRSQRT_W_ENC, FRSQRT_W_DESC, Requires<[HasMSA]>;
1576def FRSQRT_D : FRSQRT_D_ENC, FRSQRT_D_DESC, Requires<[HasMSA]>;
1577
1578def FSEQ_W : FSEQ_W_ENC, FSEQ_W_DESC, Requires<[HasMSA]>;
1579def FSEQ_D : FSEQ_D_ENC, FSEQ_D_DESC, Requires<[HasMSA]>;
1580
1581def FSLE_W : FSLE_W_ENC, FSLE_W_DESC, Requires<[HasMSA]>;
1582def FSLE_D : FSLE_D_ENC, FSLE_D_DESC, Requires<[HasMSA]>;
1583
1584def FSLT_W : FSLT_W_ENC, FSLT_W_DESC, Requires<[HasMSA]>;
1585def FSLT_D : FSLT_D_ENC, FSLT_D_DESC, Requires<[HasMSA]>;
1586
1587def FSGE_W : FSGE_W_ENC, FSGE_W_DESC, Requires<[HasMSA]>;
1588def FSGE_D : FSGE_D_ENC, FSGE_D_DESC, Requires<[HasMSA]>;
1589
1590def FSGT_W : FSGT_W_ENC, FSGT_W_DESC, Requires<[HasMSA]>;
1591def FSGT_D : FSGT_D_ENC, FSGT_D_DESC, Requires<[HasMSA]>;
1592
1593def FSNE_W : FSNE_W_ENC, FSNE_W_DESC, Requires<[HasMSA]>;
1594def FSNE_D : FSNE_D_ENC, FSNE_D_DESC, Requires<[HasMSA]>;
1595
1596def FSQRT_W : FSQRT_W_ENC, FSQRT_W_DESC, Requires<[HasMSA]>;
1597def FSQRT_D : FSQRT_D_ENC, FSQRT_D_DESC, Requires<[HasMSA]>;
1598
1599def FSUB_W : FSUB_W_ENC, FSUB_W_DESC, Requires<[HasMSA]>;
1600def FSUB_D : FSUB_D_ENC, FSUB_D_DESC, Requires<[HasMSA]>;
1601
1602def FTINT_S_W : FTINT_S_W_ENC, FTINT_S_W_DESC, Requires<[HasMSA]>;
1603def FTINT_S_D : FTINT_S_D_ENC, FTINT_S_D_DESC, Requires<[HasMSA]>;
1604
1605def FTINT_U_W : FTINT_U_W_ENC, FTINT_U_W_DESC, Requires<[HasMSA]>;
1606def FTINT_U_D : FTINT_U_D_ENC, FTINT_U_D_DESC, Requires<[HasMSA]>;
1607
1608def FTQ_H : FTQ_H_ENC, FTQ_H_DESC, Requires<[HasMSA]>;
1609def FTQ_W : FTQ_W_ENC, FTQ_W_DESC, Requires<[HasMSA]>;
1610
1611def ILVEV_B : ILVEV_B_ENC, ILVEV_B_DESC, Requires<[HasMSA]>;
1612def ILVEV_H : ILVEV_H_ENC, ILVEV_H_DESC, Requires<[HasMSA]>;
1613def ILVEV_W : ILVEV_W_ENC, ILVEV_W_DESC, Requires<[HasMSA]>;
1614def ILVEV_D : ILVEV_D_ENC, ILVEV_D_DESC, Requires<[HasMSA]>;
1615
1616def ILVL_B : ILVL_B_ENC, ILVL_B_DESC, Requires<[HasMSA]>;
1617def ILVL_H : ILVL_H_ENC, ILVL_H_DESC, Requires<[HasMSA]>;
1618def ILVL_W : ILVL_W_ENC, ILVL_W_DESC, Requires<[HasMSA]>;
1619def ILVL_D : ILVL_D_ENC, ILVL_D_DESC, Requires<[HasMSA]>;
1620
1621def ILVOD_B : ILVOD_B_ENC, ILVOD_B_DESC, Requires<[HasMSA]>;
1622def ILVOD_H : ILVOD_H_ENC, ILVOD_H_DESC, Requires<[HasMSA]>;
1623def ILVOD_W : ILVOD_W_ENC, ILVOD_W_DESC, Requires<[HasMSA]>;
1624def ILVOD_D : ILVOD_D_ENC, ILVOD_D_DESC, Requires<[HasMSA]>;
1625
1626def ILVR_B : ILVR_B_ENC, ILVR_B_DESC, Requires<[HasMSA]>;
1627def ILVR_H : ILVR_H_ENC, ILVR_H_DESC, Requires<[HasMSA]>;
1628def ILVR_W : ILVR_W_ENC, ILVR_W_DESC, Requires<[HasMSA]>;
1629def ILVR_D : ILVR_D_ENC, ILVR_D_DESC, Requires<[HasMSA]>;
1630
1631def INSERT_B : INSERT_B_ENC, INSERT_B_DESC, Requires<[HasMSA]>;
1632def INSERT_H : INSERT_H_ENC, INSERT_H_DESC, Requires<[HasMSA]>;
1633def INSERT_W : INSERT_W_ENC, INSERT_W_DESC, Requires<[HasMSA]>;
1634
1635def LD_B: LD_B_ENC, LD_B_DESC, Requires<[HasMSA]>;
1636def LD_H: LD_H_ENC, LD_H_DESC, Requires<[HasMSA]>;
1637def LD_W: LD_W_ENC, LD_W_DESC, Requires<[HasMSA]>;
1638def LD_D: LD_D_ENC, LD_D_DESC, Requires<[HasMSA]>;
1639
1640def LDI_B : LDI_B_ENC, LDI_B_DESC, Requires<[HasMSA]>;
1641def LDI_H : LDI_H_ENC, LDI_H_DESC, Requires<[HasMSA]>;
1642def LDI_W : LDI_W_ENC, LDI_W_DESC, Requires<[HasMSA]>;
1643
1644def ST_B: ST_B_ENC, ST_B_DESC, Requires<[HasMSA]>;
1645def ST_H: ST_H_ENC, ST_H_DESC, Requires<[HasMSA]>;
1646def ST_W: ST_W_ENC, ST_W_DESC, Requires<[HasMSA]>;
1647def ST_D: ST_D_ENC, ST_D_DESC, Requires<[HasMSA]>;
1648
1649// Patterns.
1650class MSAPat<dag pattern, dag result, Predicate pred = HasMSA> :
1651  Pat<pattern, result>, Requires<[pred]>;
1652
1653def LD_FH : MSAPat<(v8f16 (load addr:$addr)),
1654                   (LD_H addr:$addr)>;
1655def LD_FW : MSAPat<(v4f32 (load addr:$addr)),
1656                   (LD_W addr:$addr)>;
1657def LD_FD : MSAPat<(v2f64 (load addr:$addr)),
1658                   (LD_D addr:$addr)>;
1659
1660def ST_FH : MSAPat<(store (v8f16 MSA128:$ws), addr:$addr),
1661                   (ST_H MSA128:$ws, addr:$addr)>;
1662def ST_FW : MSAPat<(store (v4f32 MSA128:$ws), addr:$addr),
1663                   (ST_W MSA128:$ws, addr:$addr)>;
1664def ST_FD : MSAPat<(store (v2f64 MSA128:$ws), addr:$addr),
1665                   (ST_D MSA128:$ws, addr:$addr)>;
1666