[Mips][msa] Added the simple builtins (fadd to ftq)
[oota-llvm.git] / lib / Target / Mips / MipsMSAInstrInfo.td
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
14 def immSExt5 : ImmLeaf<i32, [{return isInt<5>(Imm);}]>;
15 def immSExt10: ImmLeaf<i32, [{return isInt<10>(Imm);}]>;
16
17 def uimm3 : Operand<i32> {
18   let PrintMethod = "printUnsignedImm";
19 }
20
21 def uimm4 : Operand<i32> {
22   let PrintMethod = "printUnsignedImm";
23 }
24
25 def uimm6 : Operand<i32> {
26   let PrintMethod = "printUnsignedImm";
27 }
28
29 def uimm8 : Operand<i32> {
30   let PrintMethod = "printUnsignedImm";
31 }
32
33 def simm5 : Operand<i32>;
34
35 def simm10 : Operand<i32>;
36
37 // Instruction encoding.
38 class ADD_A_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b010000>;
39 class ADD_A_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b010000>;
40 class ADD_A_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b010000>;
41 class ADD_A_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b010000>;
42
43 class ADDS_A_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b010000>;
44 class ADDS_A_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b010000>;
45 class ADDS_A_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b010000>;
46 class ADDS_A_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b010000>;
47
48 class ADDS_S_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b010000>;
49 class ADDS_S_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b010000>;
50 class ADDS_S_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b010000>;
51 class ADDS_S_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b010000>;
52
53 class ADDS_U_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b010000>;
54 class ADDS_U_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b010000>;
55 class ADDS_U_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b010000>;
56 class ADDS_U_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b010000>;
57
58 class ADDV_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b001110>;
59 class ADDV_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b001110>;
60 class ADDV_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b001110>;
61 class ADDV_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b001110>;
62
63 class ADDVI_B_ENC : MSA_I5_FMT<0b000, 0b00, 0b000110>;
64 class ADDVI_H_ENC : MSA_I5_FMT<0b000, 0b01, 0b000110>;
65 class ADDVI_W_ENC : MSA_I5_FMT<0b000, 0b10, 0b000110>;
66 class ADDVI_D_ENC : MSA_I5_FMT<0b000, 0b11, 0b000110>;
67
68 class ANDI_B_ENC : MSA_I8_FMT<0b00, 0b000000>;
69
70 class ASUB_S_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b010001>;
71 class ASUB_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010001>;
72 class ASUB_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010001>;
73 class ASUB_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010001>;
74
75 class ASUB_U_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b010001>;
76 class ASUB_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010001>;
77 class ASUB_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010001>;
78 class ASUB_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010001>;
79
80 class AVE_S_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b010000>;
81 class AVE_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010000>;
82 class AVE_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010000>;
83 class AVE_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010000>;
84
85 class AVE_U_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b010000>;
86 class AVE_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010000>;
87 class AVE_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010000>;
88 class AVE_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010000>;
89
90 class AVER_S_B_ENC : MSA_3R_FMT<0b110, 0b00, 0b010000>;
91 class AVER_S_H_ENC : MSA_3R_FMT<0b110, 0b01, 0b010000>;
92 class AVER_S_W_ENC : MSA_3R_FMT<0b110, 0b10, 0b010000>;
93 class AVER_S_D_ENC : MSA_3R_FMT<0b110, 0b11, 0b010000>;
94
95 class AVER_U_B_ENC : MSA_3R_FMT<0b111, 0b00, 0b010000>;
96 class AVER_U_H_ENC : MSA_3R_FMT<0b111, 0b01, 0b010000>;
97 class AVER_U_W_ENC : MSA_3R_FMT<0b111, 0b10, 0b010000>;
98 class AVER_U_D_ENC : MSA_3R_FMT<0b111, 0b11, 0b010000>;
99
100 class BCLR_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b001101>;
101 class BCLR_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b001101>;
102 class BCLR_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b001101>;
103 class BCLR_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b001101>;
104
105 class BCLRI_B_ENC : MSA_BIT_B_FMT<0b011, 0b001001>;
106 class BCLRI_H_ENC : MSA_BIT_H_FMT<0b011, 0b001001>;
107 class BCLRI_W_ENC : MSA_BIT_W_FMT<0b011, 0b001001>;
108 class BCLRI_D_ENC : MSA_BIT_D_FMT<0b011, 0b001001>;
109
110 class BINSL_B_ENC : MSA_3R_FMT<0b110, 0b00, 0b001101>;
111 class BINSL_H_ENC : MSA_3R_FMT<0b110, 0b01, 0b001101>;
112 class BINSL_W_ENC : MSA_3R_FMT<0b110, 0b10, 0b001101>;
113 class BINSL_D_ENC : MSA_3R_FMT<0b110, 0b11, 0b001101>;
114
115 class BINSLI_B_ENC : MSA_BIT_B_FMT<0b110, 0b001001>;
116 class BINSLI_H_ENC : MSA_BIT_H_FMT<0b110, 0b001001>;
117 class BINSLI_W_ENC : MSA_BIT_W_FMT<0b110, 0b001001>;
118 class BINSLI_D_ENC : MSA_BIT_D_FMT<0b110, 0b001001>;
119
120 class BINSR_B_ENC : MSA_3R_FMT<0b111, 0b00, 0b001101>;
121 class BINSR_H_ENC : MSA_3R_FMT<0b111, 0b01, 0b001101>;
122 class BINSR_W_ENC : MSA_3R_FMT<0b111, 0b10, 0b001101>;
123 class BINSR_D_ENC : MSA_3R_FMT<0b111, 0b11, 0b001101>;
124
125 class BINSRI_B_ENC : MSA_BIT_B_FMT<0b111, 0b001001>;
126 class BINSRI_H_ENC : MSA_BIT_H_FMT<0b111, 0b001001>;
127 class BINSRI_W_ENC : MSA_BIT_W_FMT<0b111, 0b001001>;
128 class BINSRI_D_ENC : MSA_BIT_D_FMT<0b111, 0b001001>;
129
130 class BMNZI_B_ENC : MSA_I8_FMT<0b00, 0b000001>;
131
132 class BMZI_B_ENC : MSA_I8_FMT<0b01, 0b000001>;
133
134 class BNEG_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b001101>;
135 class BNEG_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b001101>;
136 class BNEG_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b001101>;
137 class BNEG_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b001101>;
138
139 class BNEGI_B_ENC : MSA_BIT_B_FMT<0b101, 0b001001>;
140 class BNEGI_H_ENC : MSA_BIT_H_FMT<0b101, 0b001001>;
141 class BNEGI_W_ENC : MSA_BIT_W_FMT<0b101, 0b001001>;
142 class BNEGI_D_ENC : MSA_BIT_D_FMT<0b101, 0b001001>;
143
144 class BSELI_B_ENC : MSA_I8_FMT<0b10, 0b000001>;
145
146 class BSET_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b001101>;
147 class BSET_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b001101>;
148 class BSET_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b001101>;
149 class BSET_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b001101>;
150
151 class BSETI_B_ENC : MSA_BIT_B_FMT<0b100, 0b001001>;
152 class BSETI_H_ENC : MSA_BIT_H_FMT<0b100, 0b001001>;
153 class BSETI_W_ENC : MSA_BIT_W_FMT<0b100, 0b001001>;
154 class BSETI_D_ENC : MSA_BIT_D_FMT<0b100, 0b001001>;
155
156 class CEQ_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b001111>;
157 class CEQ_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b001111>;
158 class CEQ_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b001111>;
159 class CEQ_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b001111>;
160
161 class CEQI_B_ENC : MSA_I5_FMT<0b000, 0b00, 0b000111>;
162 class CEQI_H_ENC : MSA_I5_FMT<0b000, 0b01, 0b000111>;
163 class CEQI_W_ENC : MSA_I5_FMT<0b000, 0b10, 0b000111>;
164 class CEQI_D_ENC : MSA_I5_FMT<0b000, 0b11, 0b000111>;
165
166 class CLE_S_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b001111>;
167 class CLE_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b001111>;
168 class CLE_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b001111>;
169 class CLE_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b001111>;
170
171 class CLE_U_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b001111>;
172 class CLE_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b001111>;
173 class CLE_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b001111>;
174 class CLE_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b001111>;
175
176 class CLEI_S_B_ENC : MSA_I5_FMT<0b100, 0b00, 0b000111>;
177 class CLEI_S_H_ENC : MSA_I5_FMT<0b100, 0b01, 0b000111>;
178 class CLEI_S_W_ENC : MSA_I5_FMT<0b100, 0b10, 0b000111>;
179 class CLEI_S_D_ENC : MSA_I5_FMT<0b100, 0b11, 0b000111>;
180
181 class CLEI_U_B_ENC : MSA_I5_FMT<0b101, 0b00, 0b000111>;
182 class CLEI_U_H_ENC : MSA_I5_FMT<0b101, 0b01, 0b000111>;
183 class CLEI_U_W_ENC : MSA_I5_FMT<0b101, 0b10, 0b000111>;
184 class CLEI_U_D_ENC : MSA_I5_FMT<0b101, 0b11, 0b000111>;
185
186 class CLT_S_B_ENC : MSA_3R_FMT<0b010, 0b00, 0b001111>;
187 class CLT_S_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b001111>;
188 class CLT_S_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b001111>;
189 class CLT_S_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b001111>;
190
191 class CLT_U_B_ENC : MSA_3R_FMT<0b011, 0b00, 0b001111>;
192 class CLT_U_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b001111>;
193 class CLT_U_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b001111>;
194 class CLT_U_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b001111>;
195
196 class CLTI_S_B_ENC : MSA_I5_FMT<0b010, 0b00, 0b000111>;
197 class CLTI_S_H_ENC : MSA_I5_FMT<0b010, 0b01, 0b000111>;
198 class CLTI_S_W_ENC : MSA_I5_FMT<0b010, 0b10, 0b000111>;
199 class CLTI_S_D_ENC : MSA_I5_FMT<0b010, 0b11, 0b000111>;
200
201 class CLTI_U_B_ENC : MSA_I5_FMT<0b011, 0b00, 0b000111>;
202 class CLTI_U_H_ENC : MSA_I5_FMT<0b011, 0b01, 0b000111>;
203 class CLTI_U_W_ENC : MSA_I5_FMT<0b011, 0b10, 0b000111>;
204 class CLTI_U_D_ENC : MSA_I5_FMT<0b011, 0b11, 0b000111>;
205
206 class COPY_S_B_ENC : MSA_ELM_B_FMT<0b0010, 0b011001>;
207 class COPY_S_H_ENC : MSA_ELM_H_FMT<0b0010, 0b011001>;
208 class COPY_S_W_ENC : MSA_ELM_W_FMT<0b0010, 0b011001>;
209
210 class COPY_U_B_ENC : MSA_ELM_B_FMT<0b0011, 0b011001>;
211 class COPY_U_H_ENC : MSA_ELM_H_FMT<0b0011, 0b011001>;
212 class COPY_U_W_ENC : MSA_ELM_W_FMT<0b0011, 0b011001>;
213
214 class DIV_S_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b010010>;
215 class DIV_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010010>;
216 class DIV_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010010>;
217 class DIV_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010010>;
218
219 class DIV_U_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b010010>;
220 class DIV_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010010>;
221 class DIV_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010010>;
222 class DIV_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010010>;
223
224 class DOTP_S_B_ENC : MSA_3R_FMT<0b000, 0b00, 0b010011>;
225 class DOTP_S_H_ENC : MSA_3R_FMT<0b000, 0b01, 0b010011>;
226 class DOTP_S_W_ENC : MSA_3R_FMT<0b000, 0b10, 0b010011>;
227 class DOTP_S_D_ENC : MSA_3R_FMT<0b000, 0b11, 0b010011>;
228
229 class DOTP_U_B_ENC : MSA_3R_FMT<0b001, 0b00, 0b010011>;
230 class DOTP_U_H_ENC : MSA_3R_FMT<0b001, 0b01, 0b010011>;
231 class DOTP_U_W_ENC : MSA_3R_FMT<0b001, 0b10, 0b010011>;
232 class DOTP_U_D_ENC : MSA_3R_FMT<0b001, 0b11, 0b010011>;
233
234 class DPADD_S_H_ENC : MSA_3R_FMT<0b010, 0b01, 0b010011>;
235 class DPADD_S_W_ENC : MSA_3R_FMT<0b010, 0b10, 0b010011>;
236 class DPADD_S_D_ENC : MSA_3R_FMT<0b010, 0b11, 0b010011>;
237
238 class DPADD_U_H_ENC : MSA_3R_FMT<0b011, 0b01, 0b010011>;
239 class DPADD_U_W_ENC : MSA_3R_FMT<0b011, 0b10, 0b010011>;
240 class DPADD_U_D_ENC : MSA_3R_FMT<0b011, 0b11, 0b010011>;
241
242 class DPSUB_S_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010011>;
243 class DPSUB_S_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010011>;
244 class DPSUB_S_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010011>;
245
246 class DPSUB_U_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010011>;
247 class DPSUB_U_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010011>;
248 class DPSUB_U_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010011>;
249
250 class FADD_W_ENC : MSA_3RF_FMT<0b0000, 0b0, 0b011011>;
251 class FADD_D_ENC : MSA_3RF_FMT<0b0000, 0b1, 0b011011>;
252
253 class FCEQ_W_ENC : MSA_3RF_FMT<0b0010, 0b0, 0b011010>;
254 class FCEQ_D_ENC : MSA_3RF_FMT<0b0010, 0b1, 0b011010>;
255
256 class FCGE_W_ENC : MSA_3RF_FMT<0b0101, 0b0, 0b011010>;
257 class FCGE_D_ENC : MSA_3RF_FMT<0b0101, 0b1, 0b011010>;
258
259 class FCGT_W_ENC : MSA_3RF_FMT<0b0111, 0b0, 0b011010>;
260 class FCGT_D_ENC : MSA_3RF_FMT<0b0111, 0b1, 0b011010>;
261
262 class FCLASS_W_ENC : MSA_2RF_FMT<0b110010000, 0b0, 0b011110>;
263 class FCLASS_D_ENC : MSA_2RF_FMT<0b110010000, 0b1, 0b011110>;
264
265 class FCLE_W_ENC : MSA_3RF_FMT<0b0110, 0b0, 0b011010>;
266 class FCLE_D_ENC : MSA_3RF_FMT<0b0110, 0b1, 0b011010>;
267
268 class FCLT_W_ENC : MSA_3RF_FMT<0b0100, 0b0, 0b011010>;
269 class FCLT_D_ENC : MSA_3RF_FMT<0b0100, 0b1, 0b011010>;
270
271 class FCNE_W_ENC : MSA_3RF_FMT<0b0011, 0b0, 0b011010>;
272 class FCNE_D_ENC : MSA_3RF_FMT<0b0011, 0b1, 0b011010>;
273
274 class FCUN_W_ENC : MSA_3RF_FMT<0b0001, 0b0, 0b011010>;
275 class FCUN_D_ENC : MSA_3RF_FMT<0b0001, 0b1, 0b011010>;
276
277 class FDIV_W_ENC : MSA_3RF_FMT<0b0011, 0b0, 0b011011>;
278 class FDIV_D_ENC : MSA_3RF_FMT<0b0011, 0b1, 0b011011>;
279
280 class FEXDO_H_ENC : MSA_3RF_FMT<0b1000, 0b0, 0b011011>;
281 class FEXDO_W_ENC : MSA_3RF_FMT<0b1000, 0b1, 0b011011>;
282
283 class FEXP2_W_ENC : MSA_3RF_FMT<0b0111, 0b0, 0b011011>;
284 class FEXP2_D_ENC : MSA_3RF_FMT<0b0111, 0b1, 0b011011>;
285
286 class FEXUPL_W_ENC : MSA_2RF_FMT<0b110011000, 0b0, 0b011110>;
287 class FEXUPL_D_ENC : MSA_2RF_FMT<0b110011000, 0b1, 0b011110>;
288
289 class FEXUPR_W_ENC : MSA_2RF_FMT<0b110011001, 0b0, 0b011110>;
290 class FEXUPR_D_ENC : MSA_2RF_FMT<0b110011001, 0b1, 0b011110>;
291
292 class FFINT_S_W_ENC : MSA_2RF_FMT<0b110011110, 0b0, 0b011110>;
293 class FFINT_S_D_ENC : MSA_2RF_FMT<0b110011110, 0b1, 0b011110>;
294
295 class FFINT_U_W_ENC : MSA_2RF_FMT<0b110011111, 0b0, 0b011110>;
296 class FFINT_U_D_ENC : MSA_2RF_FMT<0b110011111, 0b1, 0b011110>;
297
298 class FFQL_W_ENC : MSA_2RF_FMT<0b110011010, 0b0, 0b011110>;
299 class FFQL_D_ENC : MSA_2RF_FMT<0b110011010, 0b1, 0b011110>;
300
301 class FFQR_W_ENC : MSA_2RF_FMT<0b110011011, 0b0, 0b011110>;
302 class FFQR_D_ENC : MSA_2RF_FMT<0b110011011, 0b1, 0b011110>;
303
304 class FILL_B_ENC : MSA_2R_FMT<0b11000000, 0b00, 0b011110>;
305 class FILL_H_ENC : MSA_2R_FMT<0b11000000, 0b01, 0b011110>;
306 class FILL_W_ENC : MSA_2R_FMT<0b11000000, 0b10, 0b011110>;
307
308 class FLOG2_W_ENC : MSA_2RF_FMT<0b110010111, 0b0, 0b011110>;
309 class FLOG2_D_ENC : MSA_2RF_FMT<0b110010111, 0b1, 0b011110>;
310
311 class FMADD_W_ENC : MSA_3RF_FMT<0b0100, 0b0, 0b011011>;
312 class FMADD_D_ENC : MSA_3RF_FMT<0b0100, 0b1, 0b011011>;
313
314 class FMAX_W_ENC : MSA_3RF_FMT<0b1110, 0b0, 0b011011>;
315 class FMAX_D_ENC : MSA_3RF_FMT<0b1110, 0b1, 0b011011>;
316
317 class FMAX_A_W_ENC : MSA_3RF_FMT<0b1111, 0b0, 0b011011>;
318 class FMAX_A_D_ENC : MSA_3RF_FMT<0b1111, 0b1, 0b011011>;
319
320 class FMIN_W_ENC : MSA_3RF_FMT<0b1100, 0b0, 0b011011>;
321 class FMIN_D_ENC : MSA_3RF_FMT<0b1100, 0b1, 0b011011>;
322
323 class FMIN_A_W_ENC : MSA_3RF_FMT<0b1101, 0b0, 0b011011>;
324 class FMIN_A_D_ENC : MSA_3RF_FMT<0b1101, 0b1, 0b011011>;
325
326 class FMSUB_W_ENC : MSA_3RF_FMT<0b0101, 0b0, 0b011011>;
327 class FMSUB_D_ENC : MSA_3RF_FMT<0b0101, 0b1, 0b011011>;
328
329 class FMUL_W_ENC : MSA_3RF_FMT<0b0010, 0b0, 0b011011>;
330 class FMUL_D_ENC : MSA_3RF_FMT<0b0010, 0b1, 0b011011>;
331
332 class FRINT_W_ENC : MSA_2RF_FMT<0b110010110, 0b0, 0b011110>;
333 class FRINT_D_ENC : MSA_2RF_FMT<0b110010110, 0b1, 0b011110>;
334
335 class FRCP_W_ENC : MSA_2RF_FMT<0b110010101, 0b0, 0b011110>;
336 class FRCP_D_ENC : MSA_2RF_FMT<0b110010101, 0b1, 0b011110>;
337
338 class FRSQRT_W_ENC : MSA_2RF_FMT<0b110010100, 0b0, 0b011110>;
339 class FRSQRT_D_ENC : MSA_2RF_FMT<0b110010100, 0b1, 0b011110>;
340
341 class FSEQ_W_ENC : MSA_3RF_FMT<0b1010, 0b0, 0b011010>;
342 class FSEQ_D_ENC : MSA_3RF_FMT<0b1010, 0b1, 0b011010>;
343
344 class FSGE_W_ENC : MSA_3RF_FMT<0b1101, 0b0, 0b011010>;
345 class FSGE_D_ENC : MSA_3RF_FMT<0b1101, 0b1, 0b011010>;
346
347 class FSGT_W_ENC : MSA_3RF_FMT<0b1111, 0b0, 0b011010>;
348 class FSGT_D_ENC : MSA_3RF_FMT<0b1111, 0b1, 0b011010>;
349
350 class FSLE_W_ENC : MSA_3RF_FMT<0b1110, 0b0, 0b011010>;
351 class FSLE_D_ENC : MSA_3RF_FMT<0b1110, 0b1, 0b011010>;
352
353 class FSLT_W_ENC : MSA_3RF_FMT<0b1100, 0b0, 0b011010>;
354 class FSLT_D_ENC : MSA_3RF_FMT<0b1100, 0b1, 0b011010>;
355
356 class FSNE_W_ENC : MSA_3RF_FMT<0b1011, 0b0, 0b011010>;
357 class FSNE_D_ENC : MSA_3RF_FMT<0b1011, 0b1, 0b011010>;
358
359 class FSQRT_W_ENC : MSA_2RF_FMT<0b110010011, 0b0, 0b011110>;
360 class FSQRT_D_ENC : MSA_2RF_FMT<0b110010011, 0b1, 0b011110>;
361
362 class FSUB_W_ENC : MSA_3RF_FMT<0b0001, 0b0, 0b011011>;
363 class FSUB_D_ENC : MSA_3RF_FMT<0b0001, 0b1, 0b011011>;
364
365 class FTINT_S_W_ENC : MSA_2RF_FMT<0b110011100, 0b0, 0b011110>;
366 class FTINT_S_D_ENC : MSA_2RF_FMT<0b110011100, 0b1, 0b011110>;
367
368 class FTINT_U_W_ENC : MSA_2RF_FMT<0b110011101, 0b0, 0b011110>;
369 class FTINT_U_D_ENC : MSA_2RF_FMT<0b110011101, 0b1, 0b011110>;
370
371 class FTQ_H_ENC : MSA_3RF_FMT<0b1010, 0b0, 0b011011>;
372 class FTQ_W_ENC : MSA_3RF_FMT<0b1010, 0b1, 0b011011>;
373
374 class ILVEV_B_ENC : MSA_3R_FMT<0b110, 0b00, 0b010100>;
375 class ILVEV_H_ENC : MSA_3R_FMT<0b110, 0b01, 0b010100>;
376 class ILVEV_W_ENC : MSA_3R_FMT<0b110, 0b10, 0b010100>;
377 class ILVEV_D_ENC : MSA_3R_FMT<0b110, 0b11, 0b010100>;
378
379 class ILVL_B_ENC : MSA_3R_FMT<0b100, 0b00, 0b010100>;
380 class ILVL_H_ENC : MSA_3R_FMT<0b100, 0b01, 0b010100>;
381 class ILVL_W_ENC : MSA_3R_FMT<0b100, 0b10, 0b010100>;
382 class ILVL_D_ENC : MSA_3R_FMT<0b100, 0b11, 0b010100>;
383
384 class ILVOD_B_ENC : MSA_3R_FMT<0b111, 0b00, 0b010100>;
385 class ILVOD_H_ENC : MSA_3R_FMT<0b111, 0b01, 0b010100>;
386 class ILVOD_W_ENC : MSA_3R_FMT<0b111, 0b10, 0b010100>;
387 class ILVOD_D_ENC : MSA_3R_FMT<0b111, 0b11, 0b010100>;
388
389 class ILVR_B_ENC : MSA_3R_FMT<0b101, 0b00, 0b010100>;
390 class ILVR_H_ENC : MSA_3R_FMT<0b101, 0b01, 0b010100>;
391 class ILVR_W_ENC : MSA_3R_FMT<0b101, 0b10, 0b010100>;
392 class ILVR_D_ENC : MSA_3R_FMT<0b101, 0b11, 0b010100>;
393
394 class INSERT_B_ENC : MSA_ELM_B_FMT<0b0100, 0b011001>;
395 class INSERT_H_ENC : MSA_ELM_H_FMT<0b0100, 0b011001>;
396 class INSERT_W_ENC : MSA_ELM_W_FMT<0b0100, 0b011001>;
397
398 class LD_B_ENC   : MSA_I5_FMT<0b110, 0b00, 0b000111>;
399 class LD_H_ENC   : MSA_I5_FMT<0b110, 0b01, 0b000111>;
400 class LD_W_ENC   : MSA_I5_FMT<0b110, 0b10, 0b000111>;
401 class LD_D_ENC   : MSA_I5_FMT<0b110, 0b11, 0b000111>;
402
403 class LDI_B_ENC   : MSA_I10_FMT<0b010, 0b00, 0b001100>;
404 class LDI_H_ENC   : MSA_I10_FMT<0b010, 0b01, 0b001100>;
405 class LDI_W_ENC   : MSA_I10_FMT<0b010, 0b10, 0b001100>;
406 class LDI_D_ENC   : MSA_I10_FMT<0b010, 0b11, 0b001100>;
407
408 class ST_B_ENC   : MSA_I5_FMT<0b111, 0b00, 0b000111>;
409 class ST_H_ENC   : MSA_I5_FMT<0b111, 0b01, 0b000111>;
410 class ST_W_ENC   : MSA_I5_FMT<0b111, 0b10, 0b000111>;
411 class ST_D_ENC   : MSA_I5_FMT<0b111, 0b11, 0b000111>;
412
413 // Instruction desc.
414 class 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
424 class 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
434 class 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
444 class 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
454 class 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
464 class 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
474 class 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
484 class 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
494 class 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
503 class 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
513 class 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
519 class 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
529 class 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
541 class 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
546 class 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
551 class 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
564 class ADD_A_B_DESC : MSA_3R_DESC_BASE<"add_a.b", int_mips_add_a_b, NoItinerary,
565                                       MSA128, MSA128>, IsCommutable;
566 class ADD_A_H_DESC : MSA_3R_DESC_BASE<"add_a.h", int_mips_add_a_h, NoItinerary,
567                                       MSA128, MSA128>, IsCommutable;
568 class ADD_A_W_DESC : MSA_3R_DESC_BASE<"add_a.w", int_mips_add_a_w, NoItinerary,
569                                       MSA128, MSA128>, IsCommutable;
570 class ADD_A_D_DESC : MSA_3R_DESC_BASE<"add_a.d", int_mips_add_a_d, NoItinerary,
571                                       MSA128, MSA128>, IsCommutable;
572
573 class ADDS_A_B_DESC : MSA_3R_DESC_BASE<"adds_a.b", int_mips_adds_a_b,
574                                        NoItinerary, MSA128, MSA128>,
575                                        IsCommutable;
576 class ADDS_A_H_DESC : MSA_3R_DESC_BASE<"adds_a.h", int_mips_adds_a_h,
577                                        NoItinerary, MSA128, MSA128>,
578                                        IsCommutable;
579 class ADDS_A_W_DESC : MSA_3R_DESC_BASE<"adds_a.w", int_mips_adds_a_w,
580                                        NoItinerary, MSA128, MSA128>,
581                                        IsCommutable;
582 class ADDS_A_D_DESC : MSA_3R_DESC_BASE<"adds_a.d", int_mips_adds_a_d,
583                                        NoItinerary, MSA128, MSA128>,
584                                        IsCommutable;
585
586 class ADDS_S_B_DESC : MSA_3R_DESC_BASE<"adds_s.b", int_mips_adds_s_b,
587                                        NoItinerary, MSA128, MSA128>,
588                                        IsCommutable;
589 class ADDS_S_H_DESC : MSA_3R_DESC_BASE<"adds_s.h", int_mips_adds_s_h,
590                                        NoItinerary, MSA128, MSA128>,
591                                        IsCommutable;
592 class ADDS_S_W_DESC : MSA_3R_DESC_BASE<"adds_s.w", int_mips_adds_s_w,
593                                        NoItinerary, MSA128, MSA128>,
594                                        IsCommutable;
595 class ADDS_S_D_DESC : MSA_3R_DESC_BASE<"adds_s.d", int_mips_adds_s_d,
596                                        NoItinerary, MSA128, MSA128>,
597                                        IsCommutable;
598
599 class ADDS_U_B_DESC : MSA_3R_DESC_BASE<"adds_u.b", int_mips_adds_u_b,
600                                        NoItinerary, MSA128, MSA128>,
601                                        IsCommutable;
602 class ADDS_U_H_DESC : MSA_3R_DESC_BASE<"adds_u.h", int_mips_adds_u_h,
603                                        NoItinerary, MSA128, MSA128>,
604                                        IsCommutable;
605 class ADDS_U_W_DESC : MSA_3R_DESC_BASE<"adds_u.w", int_mips_adds_u_w,
606                                        NoItinerary, MSA128, MSA128>,
607                                        IsCommutable;
608 class ADDS_U_D_DESC : MSA_3R_DESC_BASE<"adds_u.d", int_mips_adds_u_d,
609                                        NoItinerary, MSA128, MSA128>,
610                                        IsCommutable;
611
612 class ADDV_B_DESC : MSA_3R_DESC_BASE<"addv.b", int_mips_addv_b, NoItinerary,
613                                      MSA128, MSA128>, IsCommutable;
614 class ADDV_H_DESC : MSA_3R_DESC_BASE<"addv.h", int_mips_addv_h, NoItinerary,
615                                      MSA128, MSA128>, IsCommutable;
616 class ADDV_W_DESC : MSA_3R_DESC_BASE<"addv.w", int_mips_addv_w, NoItinerary,
617                                      MSA128, MSA128>, IsCommutable;
618 class ADDV_D_DESC : MSA_3R_DESC_BASE<"addv.d", int_mips_addv_d, NoItinerary,
619                                      MSA128, MSA128>, IsCommutable;
620
621 class ADDVI_B_DESC : MSA_I5_DESC_BASE<"addvi.b", int_mips_addvi_b, NoItinerary,
622                                       MSA128, MSA128>;
623 class ADDVI_H_DESC : MSA_I5_DESC_BASE<"addvi.h", int_mips_addvi_h, NoItinerary,
624                                       MSA128, MSA128>;
625 class ADDVI_W_DESC : MSA_I5_DESC_BASE<"addvi.w", int_mips_addvi_w, NoItinerary,
626                                       MSA128, MSA128>;
627 class ADDVI_D_DESC : MSA_I5_DESC_BASE<"addvi.d", int_mips_addvi_d, NoItinerary,
628                                       MSA128, MSA128>;
629
630 class ANDI_B_DESC : MSA_I8_DESC_BASE<"andi.b", int_mips_andi_b, NoItinerary,
631                                      MSA128, MSA128>;
632
633 class ASUB_S_B_DESC : MSA_3R_DESC_BASE<"asub_s.b", int_mips_asub_s_b,
634                                        NoItinerary, MSA128, MSA128>;
635 class ASUB_S_H_DESC : MSA_3R_DESC_BASE<"asub_s.h", int_mips_asub_s_h,
636                                        NoItinerary, MSA128, MSA128>;
637 class ASUB_S_W_DESC : MSA_3R_DESC_BASE<"asub_s.w", int_mips_asub_s_w,
638                                        NoItinerary, MSA128, MSA128>;
639 class ASUB_S_D_DESC : MSA_3R_DESC_BASE<"asub_s.d", int_mips_asub_s_d,
640                                        NoItinerary, MSA128, MSA128>;
641
642 class ASUB_U_B_DESC : MSA_3R_DESC_BASE<"asub_u.b", int_mips_asub_u_b,
643                                        NoItinerary, MSA128, MSA128>;
644 class ASUB_U_H_DESC : MSA_3R_DESC_BASE<"asub_u.h", int_mips_asub_u_h,
645                                        NoItinerary, MSA128, MSA128>;
646 class ASUB_U_W_DESC : MSA_3R_DESC_BASE<"asub_u.w", int_mips_asub_u_w,
647                                        NoItinerary, MSA128, MSA128>;
648 class ASUB_U_D_DESC : MSA_3R_DESC_BASE<"asub_u.d", int_mips_asub_u_d,
649                                        NoItinerary, MSA128, MSA128>;
650
651 class AVE_S_B_DESC : MSA_3R_DESC_BASE<"ave_s.b", int_mips_ave_s_b, NoItinerary,
652                                        MSA128, MSA128>, IsCommutable;
653 class AVE_S_H_DESC : MSA_3R_DESC_BASE<"ave_s.h", int_mips_ave_s_h, NoItinerary,
654                                        MSA128, MSA128>, IsCommutable;
655 class AVE_S_W_DESC : MSA_3R_DESC_BASE<"ave_s.w", int_mips_ave_s_w, NoItinerary,
656                                        MSA128, MSA128>, IsCommutable;
657 class AVE_S_D_DESC : MSA_3R_DESC_BASE<"ave_s.d", int_mips_ave_s_d, NoItinerary,
658                                        MSA128, MSA128>, IsCommutable;
659
660 class AVE_U_B_DESC : MSA_3R_DESC_BASE<"ave_u.b", int_mips_ave_u_b, NoItinerary,
661                                        MSA128, MSA128>, IsCommutable;
662 class AVE_U_H_DESC : MSA_3R_DESC_BASE<"ave_u.h", int_mips_ave_u_h, NoItinerary,
663                                        MSA128, MSA128>, IsCommutable;
664 class AVE_U_W_DESC : MSA_3R_DESC_BASE<"ave_u.w", int_mips_ave_u_w, NoItinerary,
665                                        MSA128, MSA128>, IsCommutable;
666 class AVE_U_D_DESC : MSA_3R_DESC_BASE<"ave_u.d", int_mips_ave_u_d, NoItinerary,
667                                        MSA128, MSA128>, IsCommutable;
668
669 class AVER_S_B_DESC : MSA_3R_DESC_BASE<"aver_s.b", int_mips_aver_s_b,
670                                        NoItinerary, MSA128, MSA128>,
671                                        IsCommutable;
672 class AVER_S_H_DESC : MSA_3R_DESC_BASE<"aver_s.h", int_mips_aver_s_h,
673                                        NoItinerary, MSA128, MSA128>,
674                                        IsCommutable;
675 class AVER_S_W_DESC : MSA_3R_DESC_BASE<"aver_s.w", int_mips_aver_s_w,
676                                        NoItinerary, MSA128, MSA128>,
677                                        IsCommutable;
678 class AVER_S_D_DESC : MSA_3R_DESC_BASE<"aver_s.d", int_mips_aver_s_d,
679                                        NoItinerary, MSA128, MSA128>,
680                                        IsCommutable;
681
682 class AVER_U_B_DESC : MSA_3R_DESC_BASE<"aver_u.b", int_mips_aver_u_b,
683                                        NoItinerary, MSA128, MSA128>,
684                                        IsCommutable;
685 class AVER_U_H_DESC : MSA_3R_DESC_BASE<"aver_u.h", int_mips_aver_u_h,
686                                        NoItinerary, MSA128, MSA128>,
687                                        IsCommutable;
688 class AVER_U_W_DESC : MSA_3R_DESC_BASE<"aver_u.w", int_mips_aver_u_w,
689                                        NoItinerary, MSA128, MSA128>,
690                                        IsCommutable;
691 class AVER_U_D_DESC : MSA_3R_DESC_BASE<"aver_u.d", int_mips_aver_u_d,
692                                        NoItinerary, MSA128, MSA128>,
693                                        IsCommutable;
694
695 class BCLR_B_DESC : MSA_3R_DESC_BASE<"bclr.b", int_mips_bclr_b, NoItinerary,
696                                      MSA128, MSA128>;
697 class BCLR_H_DESC : MSA_3R_DESC_BASE<"bclr.h", int_mips_bclr_h, NoItinerary,
698                                      MSA128, MSA128>;
699 class BCLR_W_DESC : MSA_3R_DESC_BASE<"bclr.w", int_mips_bclr_w, NoItinerary,
700                                      MSA128, MSA128>;
701 class BCLR_D_DESC : MSA_3R_DESC_BASE<"bclr.d", int_mips_bclr_d, NoItinerary,
702                                      MSA128, MSA128>;
703
704 class BCLRI_B_DESC : MSA_BIT_B_DESC_BASE<"bclri.b", int_mips_bclri_b,
705                                          NoItinerary, MSA128, MSA128>;
706 class BCLRI_H_DESC : MSA_BIT_H_DESC_BASE<"bclri.h", int_mips_bclri_h,
707                                          NoItinerary, MSA128, MSA128>;
708 class BCLRI_W_DESC : MSA_BIT_W_DESC_BASE<"bclri.w", int_mips_bclri_w,
709                                          NoItinerary, MSA128, MSA128>;
710 class BCLRI_D_DESC : MSA_BIT_D_DESC_BASE<"bclri.d", int_mips_bclri_d,
711                                          NoItinerary, MSA128, MSA128>;
712
713 class BINSL_B_DESC : MSA_3R_DESC_BASE<"binsl.b", int_mips_binsl_b, NoItinerary,
714                                       MSA128, MSA128>;
715 class BINSL_H_DESC : MSA_3R_DESC_BASE<"binsl.h", int_mips_binsl_h, NoItinerary,
716                                       MSA128, MSA128>;
717 class BINSL_W_DESC : MSA_3R_DESC_BASE<"binsl.w", int_mips_binsl_w, NoItinerary,
718                                       MSA128, MSA128>;
719 class BINSL_D_DESC : MSA_3R_DESC_BASE<"binsl.d", int_mips_binsl_d, NoItinerary,
720                                       MSA128, MSA128>;
721
722 class BINSLI_B_DESC : MSA_BIT_B_DESC_BASE<"binsli.b", int_mips_binsli_b,
723                                           NoItinerary, MSA128, MSA128>;
724 class BINSLI_H_DESC : MSA_BIT_H_DESC_BASE<"binsli.h", int_mips_binsli_h,
725                                           NoItinerary, MSA128, MSA128>;
726 class BINSLI_W_DESC : MSA_BIT_W_DESC_BASE<"binsli.w", int_mips_binsli_w,
727                                           NoItinerary, MSA128, MSA128>;
728 class BINSLI_D_DESC : MSA_BIT_D_DESC_BASE<"binsli.d", int_mips_binsli_d,
729                                           NoItinerary, MSA128, MSA128>;
730
731 class BINSR_B_DESC : MSA_3R_DESC_BASE<"binsr.b", int_mips_binsr_b, NoItinerary,
732                                       MSA128, MSA128>;
733 class BINSR_H_DESC : MSA_3R_DESC_BASE<"binsr.h", int_mips_binsr_h, NoItinerary,
734                                       MSA128, MSA128>;
735 class BINSR_W_DESC : MSA_3R_DESC_BASE<"binsr.w", int_mips_binsr_w, NoItinerary,
736                                       MSA128, MSA128>;
737 class BINSR_D_DESC : MSA_3R_DESC_BASE<"binsr.d", int_mips_binsr_d, NoItinerary,
738                                       MSA128, MSA128>;
739
740 class BINSRI_B_DESC : MSA_BIT_B_DESC_BASE<"binsri.b", int_mips_binsri_b,
741                                           NoItinerary, MSA128, MSA128>;
742 class BINSRI_H_DESC : MSA_BIT_H_DESC_BASE<"binsri.h", int_mips_binsri_h,
743                                           NoItinerary, MSA128, MSA128>;
744 class BINSRI_W_DESC : MSA_BIT_W_DESC_BASE<"binsri.w", int_mips_binsri_w,
745                                           NoItinerary, MSA128, MSA128>;
746 class BINSRI_D_DESC : MSA_BIT_D_DESC_BASE<"binsri.d", int_mips_binsri_d,
747                                           NoItinerary, MSA128, MSA128>;
748
749 class BMNZI_B_DESC : MSA_I8_DESC_BASE<"bmnzi.b", int_mips_bmnzi_b, NoItinerary,
750                                       MSA128, MSA128>;
751
752 class BMZI_B_DESC : MSA_I8_DESC_BASE<"bmzi.b", int_mips_bmzi_b, NoItinerary,
753                                      MSA128, MSA128>;
754
755 class BNEG_B_DESC : MSA_3R_DESC_BASE<"bneg.b", int_mips_bneg_b, NoItinerary,
756                                      MSA128, MSA128>;
757 class BNEG_H_DESC : MSA_3R_DESC_BASE<"bneg.h", int_mips_bneg_h, NoItinerary,
758                                      MSA128, MSA128>;
759 class BNEG_W_DESC : MSA_3R_DESC_BASE<"bneg.w", int_mips_bneg_w, NoItinerary,
760                                      MSA128, MSA128>;
761 class BNEG_D_DESC : MSA_3R_DESC_BASE<"bneg.d", int_mips_bneg_d, NoItinerary,
762                                      MSA128, MSA128>;
763
764 class BNEGI_B_DESC : MSA_BIT_B_DESC_BASE<"bnegi.b", int_mips_bnegi_b,
765                                          NoItinerary, MSA128, MSA128>;
766 class BNEGI_H_DESC : MSA_BIT_H_DESC_BASE<"bnegi.h", int_mips_bnegi_h,
767                                          NoItinerary, MSA128, MSA128>;
768 class BNEGI_W_DESC : MSA_BIT_W_DESC_BASE<"bnegi.w", int_mips_bnegi_w,
769                                          NoItinerary, MSA128, MSA128>;
770 class BNEGI_D_DESC : MSA_BIT_D_DESC_BASE<"bnegi.d", int_mips_bnegi_d,
771                                          NoItinerary, MSA128, MSA128>;
772
773 class BSELI_B_DESC : MSA_I8_DESC_BASE<"bseli.b", int_mips_bseli_b, NoItinerary,
774                                       MSA128, MSA128>;
775
776 class BSET_B_DESC : MSA_3R_DESC_BASE<"bset.b", int_mips_bset_b, NoItinerary,
777                                      MSA128, MSA128>;
778 class BSET_H_DESC : MSA_3R_DESC_BASE<"bset.h", int_mips_bset_h, NoItinerary,
779                                      MSA128, MSA128>;
780 class BSET_W_DESC : MSA_3R_DESC_BASE<"bset.w", int_mips_bset_w, NoItinerary,
781                                      MSA128, MSA128>;
782 class BSET_D_DESC : MSA_3R_DESC_BASE<"bset.d", int_mips_bset_d, NoItinerary,
783                                      MSA128, MSA128>;
784
785 class BSETI_B_DESC : MSA_BIT_B_DESC_BASE<"bseti.b", int_mips_bseti_b,
786                                          NoItinerary, MSA128, MSA128>;
787 class BSETI_H_DESC : MSA_BIT_H_DESC_BASE<"bseti.h", int_mips_bseti_h,
788                                          NoItinerary, MSA128, MSA128>;
789 class BSETI_W_DESC : MSA_BIT_W_DESC_BASE<"bseti.w", int_mips_bseti_w,
790                                          NoItinerary, MSA128, MSA128>;
791 class BSETI_D_DESC : MSA_BIT_D_DESC_BASE<"bseti.d", int_mips_bseti_d,
792                                          NoItinerary, MSA128, MSA128>;
793
794 class CEQ_B_DESC : MSA_3R_DESC_BASE<"ceq.b", int_mips_ceq_b, NoItinerary,
795                                     MSA128, MSA128>, IsCommutable;
796 class CEQ_H_DESC : MSA_3R_DESC_BASE<"ceq.h", int_mips_ceq_h, NoItinerary,
797                                     MSA128, MSA128>, IsCommutable;
798 class CEQ_W_DESC : MSA_3R_DESC_BASE<"ceq.w", int_mips_ceq_w, NoItinerary,
799                                     MSA128, MSA128>, IsCommutable;
800 class CEQ_D_DESC : MSA_3R_DESC_BASE<"ceq.d", int_mips_ceq_d, NoItinerary,
801                                     MSA128, MSA128>, IsCommutable;
802
803 class CEQI_B_DESC : MSA_SI5_DESC_BASE<"ceqi.b", int_mips_ceqi_b, NoItinerary,
804                                       MSA128, MSA128>;
805 class CEQI_H_DESC : MSA_SI5_DESC_BASE<"ceqi.h", int_mips_ceqi_h, NoItinerary,
806                                       MSA128, MSA128>;
807 class CEQI_W_DESC : MSA_SI5_DESC_BASE<"ceqi.w", int_mips_ceqi_w, NoItinerary,
808                                       MSA128, MSA128>;
809 class CEQI_D_DESC : MSA_SI5_DESC_BASE<"ceqi.d", int_mips_ceqi_d, NoItinerary,
810                                       MSA128, MSA128>;
811
812 class CLE_S_B_DESC : MSA_3R_DESC_BASE<"cle_s.b", int_mips_cle_s_b, NoItinerary,
813                                       MSA128, MSA128>;
814 class CLE_S_H_DESC : MSA_3R_DESC_BASE<"cle_s.h", int_mips_cle_s_h, NoItinerary,
815                                       MSA128, MSA128>;
816 class CLE_S_W_DESC : MSA_3R_DESC_BASE<"cle_s.w", int_mips_cle_s_w, NoItinerary,
817                                       MSA128, MSA128>;
818 class CLE_S_D_DESC : MSA_3R_DESC_BASE<"cle_s.d", int_mips_cle_s_d, NoItinerary,
819                                       MSA128, MSA128>;
820
821 class CLE_U_B_DESC : MSA_3R_DESC_BASE<"cle_u.b", int_mips_cle_u_b, NoItinerary,
822                                       MSA128, MSA128>;
823 class CLE_U_H_DESC : MSA_3R_DESC_BASE<"cle_u.h", int_mips_cle_u_h, NoItinerary,
824                                       MSA128, MSA128>;
825 class CLE_U_W_DESC : MSA_3R_DESC_BASE<"cle_u.w", int_mips_cle_u_w, NoItinerary,
826                                       MSA128, MSA128>;
827 class CLE_U_D_DESC : MSA_3R_DESC_BASE<"cle_u.d", int_mips_cle_u_d, NoItinerary,
828                                       MSA128, MSA128>;
829
830 class CLEI_S_B_DESC : MSA_SI5_DESC_BASE<"clei_s.b", int_mips_clei_s_b,
831                                         NoItinerary, MSA128, MSA128>;
832 class CLEI_S_H_DESC : MSA_SI5_DESC_BASE<"clei_s.h", int_mips_clei_s_h,
833                                         NoItinerary, MSA128, MSA128>;
834 class CLEI_S_W_DESC : MSA_SI5_DESC_BASE<"clei_s.w", int_mips_clei_s_w,
835                                         NoItinerary, MSA128, MSA128>;
836 class CLEI_S_D_DESC : MSA_SI5_DESC_BASE<"clei_s.d", int_mips_clei_s_d,
837                                         NoItinerary, MSA128, MSA128>;
838
839 class CLEI_U_B_DESC : MSA_SI5_DESC_BASE<"clei_u.b", int_mips_clei_u_b,
840                                         NoItinerary, MSA128, MSA128>;
841 class CLEI_U_H_DESC : MSA_SI5_DESC_BASE<"clei_u.h", int_mips_clei_u_h,
842                                         NoItinerary, MSA128, MSA128>;
843 class CLEI_U_W_DESC : MSA_SI5_DESC_BASE<"clei_u.w", int_mips_clei_u_w,
844                                         NoItinerary, MSA128, MSA128>;
845 class CLEI_U_D_DESC : MSA_SI5_DESC_BASE<"clei_u.d", int_mips_clei_u_d,
846                                         NoItinerary, MSA128, MSA128>;
847
848 class CLT_S_B_DESC : MSA_3R_DESC_BASE<"clt_s.b", int_mips_clt_s_b, NoItinerary,
849                                       MSA128, MSA128>;
850 class CLT_S_H_DESC : MSA_3R_DESC_BASE<"clt_s.h", int_mips_clt_s_h, NoItinerary,
851                                       MSA128, MSA128>;
852 class CLT_S_W_DESC : MSA_3R_DESC_BASE<"clt_s.w", int_mips_clt_s_w, NoItinerary,
853                                       MSA128, MSA128>;
854 class CLT_S_D_DESC : MSA_3R_DESC_BASE<"clt_s.d", int_mips_clt_s_d, NoItinerary,
855                                       MSA128, MSA128>;
856
857 class CLT_U_B_DESC : MSA_3R_DESC_BASE<"clt_u.b", int_mips_clt_u_b, NoItinerary,
858                                       MSA128, MSA128>;
859 class CLT_U_H_DESC : MSA_3R_DESC_BASE<"clt_u.h", int_mips_clt_u_h, NoItinerary,
860                                       MSA128, MSA128>;
861 class CLT_U_W_DESC : MSA_3R_DESC_BASE<"clt_u.w", int_mips_clt_u_w, NoItinerary,
862                                       MSA128, MSA128>;
863 class CLT_U_D_DESC : MSA_3R_DESC_BASE<"clt_u.d", int_mips_clt_u_d, NoItinerary,
864                                       MSA128, MSA128>;
865
866 class CLTI_S_B_DESC : MSA_SI5_DESC_BASE<"clti_s.b", int_mips_clti_s_b,
867                                         NoItinerary, MSA128, MSA128>;
868 class CLTI_S_H_DESC : MSA_SI5_DESC_BASE<"clti_s.h", int_mips_clti_s_h,
869                                         NoItinerary, MSA128, MSA128>;
870 class CLTI_S_W_DESC : MSA_SI5_DESC_BASE<"clti_s.w", int_mips_clti_s_w,
871                                         NoItinerary, MSA128, MSA128>;
872 class CLTI_S_D_DESC : MSA_SI5_DESC_BASE<"clti_s.d", int_mips_clti_s_d,
873                                         NoItinerary, MSA128, MSA128>;
874
875 class CLTI_U_B_DESC : MSA_SI5_DESC_BASE<"clti_u.b", int_mips_clti_u_b,
876                                         NoItinerary, MSA128, MSA128>;
877 class CLTI_U_H_DESC : MSA_SI5_DESC_BASE<"clti_u.h", int_mips_clti_u_h,
878                                         NoItinerary, MSA128, MSA128>;
879 class CLTI_U_W_DESC : MSA_SI5_DESC_BASE<"clti_u.w", int_mips_clti_u_w,
880                                         NoItinerary, MSA128, MSA128>;
881 class CLTI_U_D_DESC : MSA_SI5_DESC_BASE<"clti_u.d", int_mips_clti_u_d,
882                                         NoItinerary, MSA128, MSA128>;
883
884 class COPY_S_B_DESC : MSA_COPY_DESC_BASE<"copy_s.b", int_mips_copy_s_b,
885                                          NoItinerary, GPR32, MSA128>;
886 class COPY_S_H_DESC : MSA_COPY_DESC_BASE<"copy_s.h", int_mips_copy_s_h,
887                                          NoItinerary, GPR32, MSA128>;
888 class COPY_S_W_DESC : MSA_COPY_DESC_BASE<"copy_s.w", int_mips_copy_s_w,
889                                          NoItinerary, GPR32, MSA128>;
890
891 class COPY_U_B_DESC : MSA_COPY_DESC_BASE<"copy_u.b", int_mips_copy_u_b,
892                                          NoItinerary, GPR32, MSA128>;
893 class COPY_U_H_DESC : MSA_COPY_DESC_BASE<"copy_u.h", int_mips_copy_u_h,
894                                          NoItinerary, GPR32, MSA128>;
895 class COPY_U_W_DESC : MSA_COPY_DESC_BASE<"copy_u.w", int_mips_copy_u_w,
896                                          NoItinerary, GPR32, MSA128>;
897
898 class DIV_S_B_DESC : MSA_3R_DESC_BASE<"div_s.b", int_mips_div_s_b, NoItinerary,
899                                       MSA128, MSA128>;
900 class DIV_S_H_DESC : MSA_3R_DESC_BASE<"div_s.h", int_mips_div_s_h, NoItinerary,
901                                       MSA128, MSA128>;
902 class DIV_S_W_DESC : MSA_3R_DESC_BASE<"div_s.w", int_mips_div_s_w, NoItinerary,
903                                       MSA128, MSA128>;
904 class DIV_S_D_DESC : MSA_3R_DESC_BASE<"div_s.d", int_mips_div_s_d, NoItinerary,
905                                       MSA128, MSA128>;
906
907 class DIV_U_B_DESC : MSA_3R_DESC_BASE<"div_u.b", int_mips_div_u_b, NoItinerary,
908                                       MSA128, MSA128>;
909 class DIV_U_H_DESC : MSA_3R_DESC_BASE<"div_u.h", int_mips_div_u_h, NoItinerary,
910                                       MSA128, MSA128>;
911 class DIV_U_W_DESC : MSA_3R_DESC_BASE<"div_u.w", int_mips_div_u_w, NoItinerary,
912                                       MSA128, MSA128>;
913 class DIV_U_D_DESC : MSA_3R_DESC_BASE<"div_u.d", int_mips_div_u_d, NoItinerary,
914                                       MSA128, MSA128>;
915
916 class DOTP_S_B_DESC : MSA_3R_DESC_BASE<"dotp_s.b", int_mips_dotp_s_b,
917                                        NoItinerary, MSA128, MSA128>,
918                                        IsCommutable;
919 class DOTP_S_H_DESC : MSA_3R_DESC_BASE<"dotp_s.h", int_mips_dotp_s_h,
920                                        NoItinerary, MSA128, MSA128>,
921                                        IsCommutable;
922 class DOTP_S_W_DESC : MSA_3R_DESC_BASE<"dotp_s.w", int_mips_dotp_s_w,
923                                        NoItinerary, MSA128, MSA128>,
924                                        IsCommutable;
925 class DOTP_S_D_DESC : MSA_3R_DESC_BASE<"dotp_s.d", int_mips_dotp_s_d,
926                                        NoItinerary, MSA128, MSA128>,
927                                        IsCommutable;
928
929 class DOTP_U_B_DESC : MSA_3R_DESC_BASE<"dotp_u.b", int_mips_dotp_u_b,
930                                        NoItinerary, MSA128, MSA128>,
931                                        IsCommutable;
932 class DOTP_U_H_DESC : MSA_3R_DESC_BASE<"dotp_u.h", int_mips_dotp_u_h,
933                                        NoItinerary, MSA128, MSA128>,
934                                        IsCommutable;
935 class DOTP_U_W_DESC : MSA_3R_DESC_BASE<"dotp_u.w", int_mips_dotp_u_w,
936                                        NoItinerary, MSA128, MSA128>,
937                                        IsCommutable;
938 class DOTP_U_D_DESC : MSA_3R_DESC_BASE<"dotp_u.d", int_mips_dotp_u_d,
939                                        NoItinerary, MSA128, MSA128>,
940                                        IsCommutable;
941
942 class DPADD_S_H_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.h", int_mips_dpadd_s_h,
943                                            NoItinerary, MSA128, MSA128>,
944                                            IsCommutable;
945 class DPADD_S_W_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.w", int_mips_dpadd_s_w,
946                                            NoItinerary, MSA128, MSA128>,
947                                            IsCommutable;
948 class DPADD_S_D_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.d", int_mips_dpadd_s_d,
949                                            NoItinerary, MSA128, MSA128>,
950                                            IsCommutable;
951
952 class DPADD_U_H_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.h", int_mips_dpadd_u_h,
953                                            NoItinerary, MSA128, MSA128>,
954                                            IsCommutable;
955 class DPADD_U_W_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.w", int_mips_dpadd_u_w,
956                                            NoItinerary, MSA128, MSA128>,
957                                            IsCommutable;
958 class DPADD_U_D_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.d", int_mips_dpadd_u_d,
959                                            NoItinerary, MSA128, MSA128>,
960                                            IsCommutable;
961
962 class DPSUB_S_H_DESC : MSA_3R_4R_DESC_BASE<"dpsub_s.h", int_mips_dpsub_s_h,
963                                            NoItinerary, MSA128, MSA128>;
964 class DPSUB_S_W_DESC : MSA_3R_4R_DESC_BASE<"dpsub_s.w", int_mips_dpsub_s_w,
965                                            NoItinerary, MSA128, MSA128>;
966 class DPSUB_S_D_DESC : MSA_3R_4R_DESC_BASE<"dpsub_s.d", int_mips_dpsub_s_d,
967                                            NoItinerary, MSA128, MSA128>;
968
969 class DPSUB_U_H_DESC : MSA_3R_4R_DESC_BASE<"dpsub_u.h", int_mips_dpsub_u_h,
970                                            NoItinerary, MSA128, MSA128>;
971 class DPSUB_U_W_DESC : MSA_3R_4R_DESC_BASE<"dpsub_u.w", int_mips_dpsub_u_w,
972                                            NoItinerary, MSA128, MSA128>;
973 class DPSUB_U_D_DESC : MSA_3R_4R_DESC_BASE<"dpsub_u.d", int_mips_dpsub_u_d,
974                                            NoItinerary, MSA128, MSA128>;
975
976 class FADD_W_DESC : MSA_3RF_DESC_BASE<"fadd.w", int_mips_fadd_w,
977                                       NoItinerary, MSA128, MSA128>,
978                                       IsCommutable;
979 class FADD_D_DESC : MSA_3RF_DESC_BASE<"fadd.d", int_mips_fadd_d,
980                                       NoItinerary, MSA128, MSA128>,
981                                       IsCommutable;
982
983 class FCEQ_W_DESC : MSA_3RF_DESC_BASE<"fceq.w", int_mips_fceq_w,
984                                       NoItinerary, MSA128, MSA128>,
985                                       IsCommutable;
986 class FCEQ_D_DESC : MSA_3RF_DESC_BASE<"fceq.d", int_mips_fceq_d,
987                                       NoItinerary, MSA128, MSA128>,
988                                       IsCommutable;
989
990 class FCGE_W_DESC : MSA_3RF_DESC_BASE<"fcge.w", int_mips_fcge_w,
991                                       NoItinerary, MSA128, MSA128>;
992 class FCGE_D_DESC : MSA_3RF_DESC_BASE<"fcge.d", int_mips_fcge_d,
993                                       NoItinerary, MSA128, MSA128>;
994
995 class FCGT_W_DESC : MSA_3RF_DESC_BASE<"fcgt.w", int_mips_fcgt_w,
996                                       NoItinerary, MSA128, MSA128>;
997 class FCGT_D_DESC : MSA_3RF_DESC_BASE<"fcgt.d", int_mips_fcgt_d,
998                                       NoItinerary, MSA128, MSA128>;
999
1000 class FCLASS_W_DESC : MSA_2RF_DESC_BASE<"fclass.w", int_mips_fclass_w,
1001                                         NoItinerary, MSA128, MSA128>;
1002 class FCLASS_D_DESC : MSA_2RF_DESC_BASE<"fclass.d", int_mips_fclass_d,
1003                                         NoItinerary, MSA128, MSA128>;
1004
1005 class FCLE_W_DESC : MSA_3RF_DESC_BASE<"fcle.w", int_mips_fcle_w,
1006                                       NoItinerary, MSA128, MSA128>;
1007 class FCLE_D_DESC : MSA_3RF_DESC_BASE<"fcle.d", int_mips_fcle_d,
1008                                       NoItinerary, MSA128, MSA128>;
1009
1010 class FCLT_W_DESC : MSA_3RF_DESC_BASE<"fclt.w", int_mips_fclt_w,
1011                                       NoItinerary, MSA128, MSA128>;
1012 class FCLT_D_DESC : MSA_3RF_DESC_BASE<"fclt.d", int_mips_fclt_d,
1013                                       NoItinerary, MSA128, MSA128>;
1014
1015 class FCNE_W_DESC : MSA_3RF_DESC_BASE<"fcne.w", int_mips_fcne_w,
1016                                       NoItinerary, MSA128, MSA128>,
1017                                       IsCommutable;
1018 class FCNE_D_DESC : MSA_3RF_DESC_BASE<"fcne.d", int_mips_fcne_d,
1019                                       NoItinerary, MSA128, MSA128>,
1020                                       IsCommutable;
1021
1022 class FCUN_W_DESC : MSA_3RF_DESC_BASE<"fcun.w", int_mips_fcun_w,
1023                                       NoItinerary, MSA128, MSA128>,
1024                                       IsCommutable;
1025 class FCUN_D_DESC : MSA_3RF_DESC_BASE<"fcun.d", int_mips_fcun_d,
1026                                       NoItinerary, MSA128, MSA128>,
1027                                       IsCommutable;
1028
1029 class FDIV_W_DESC : MSA_3RF_DESC_BASE<"fdiv.w", int_mips_fdiv_w,
1030                                       NoItinerary, MSA128, MSA128>;
1031 class FDIV_D_DESC : MSA_3RF_DESC_BASE<"fdiv.d", int_mips_fdiv_d,
1032                                       NoItinerary, MSA128, MSA128>;
1033
1034 class FEXDO_H_DESC : MSA_3RF_DESC_BASE<"fexdo.h", int_mips_fexdo_h,
1035                                        NoItinerary, MSA128, MSA128>;
1036 class FEXDO_W_DESC : MSA_3RF_DESC_BASE<"fexdo.w", int_mips_fexdo_w,
1037                                        NoItinerary, MSA128, MSA128>;
1038
1039 class FEXP2_W_DESC : MSA_3RF_DESC_BASE<"fexp2.w", int_mips_fexp2_w,
1040                                        NoItinerary, MSA128, MSA128>;
1041 class FEXP2_D_DESC : MSA_3RF_DESC_BASE<"fexp2.d", int_mips_fexp2_d,
1042                                        NoItinerary, MSA128, MSA128>;
1043
1044 class FEXUPL_W_DESC : MSA_2RF_DESC_BASE<"fexupl.w", int_mips_fexupl_w,
1045                                         NoItinerary, MSA128, MSA128>;
1046 class FEXUPL_D_DESC : MSA_2RF_DESC_BASE<"fexupl.d", int_mips_fexupl_d,
1047                                         NoItinerary, MSA128, MSA128>;
1048
1049 class FEXUPR_W_DESC : MSA_2RF_DESC_BASE<"fexupr.w", int_mips_fexupr_w,
1050                                         NoItinerary, MSA128, MSA128>;
1051 class FEXUPR_D_DESC : MSA_2RF_DESC_BASE<"fexupr.d", int_mips_fexupr_d,
1052                                         NoItinerary, MSA128, MSA128>;
1053
1054 class FFINT_S_W_DESC : MSA_2RF_DESC_BASE<"ffint_s.w", int_mips_ffint_s_w,
1055                                          NoItinerary, MSA128, MSA128>;
1056 class FFINT_S_D_DESC : MSA_2RF_DESC_BASE<"ffint_s.d", int_mips_ffint_s_d,
1057                                          NoItinerary, MSA128, MSA128>;
1058
1059 class FFINT_U_W_DESC : MSA_2RF_DESC_BASE<"ffint_u.w", int_mips_ffint_u_w,
1060                                          NoItinerary, MSA128, MSA128>;
1061 class FFINT_U_D_DESC : MSA_2RF_DESC_BASE<"ffint_u.d", int_mips_ffint_u_d,
1062                                          NoItinerary, MSA128, MSA128>;
1063
1064 class FFQL_W_DESC : MSA_2RF_DESC_BASE<"ffql.w", int_mips_ffql_w,
1065                                       NoItinerary, MSA128, MSA128>;
1066 class FFQL_D_DESC : MSA_2RF_DESC_BASE<"ffql.d", int_mips_ffql_d,
1067                                       NoItinerary, MSA128, MSA128>;
1068
1069 class FFQR_W_DESC : MSA_2RF_DESC_BASE<"ffqr.w", int_mips_ffqr_w,
1070                                       NoItinerary, MSA128, MSA128>;
1071 class FFQR_D_DESC : MSA_2RF_DESC_BASE<"ffqr.d", int_mips_ffqr_d,
1072                                       NoItinerary, MSA128, MSA128>;
1073
1074 class FILL_B_DESC : MSA_2R_DESC_BASE<"fill.b", int_mips_fill_b,
1075                                      NoItinerary, MSA128, GPR32>;
1076 class FILL_H_DESC : MSA_2R_DESC_BASE<"fill.h", int_mips_fill_h,
1077                                      NoItinerary, MSA128, GPR32>;
1078 class FILL_W_DESC : MSA_2R_DESC_BASE<"fill.w", int_mips_fill_w,
1079                                      NoItinerary, MSA128, GPR32>;
1080
1081 class FLOG2_W_DESC : MSA_2RF_DESC_BASE<"flog2.w", int_mips_flog2_w,
1082                                        NoItinerary, MSA128, MSA128>;
1083 class FLOG2_D_DESC : MSA_2RF_DESC_BASE<"flog2.d", int_mips_flog2_d,
1084                                        NoItinerary, MSA128, MSA128>;
1085
1086 class FMADD_W_DESC : MSA_3RF_4RF_DESC_BASE<"fmadd.w", int_mips_fmadd_w,
1087                                            NoItinerary, MSA128, MSA128>;
1088 class FMADD_D_DESC : MSA_3RF_4RF_DESC_BASE<"fmadd.d", int_mips_fmadd_d,
1089                                            NoItinerary, MSA128, MSA128>;
1090
1091 class FMAX_W_DESC : MSA_3RF_DESC_BASE<"fmax.w", int_mips_fmax_w,
1092                                       NoItinerary, MSA128, MSA128>;
1093 class FMAX_D_DESC : MSA_3RF_DESC_BASE<"fmax.d", int_mips_fmax_d,
1094                                       NoItinerary, MSA128, MSA128>;
1095
1096 class FMAX_A_W_DESC : MSA_3RF_DESC_BASE<"fmax_a.w", int_mips_fmax_a_w,
1097                                         NoItinerary, MSA128, MSA128>;
1098 class FMAX_A_D_DESC : MSA_3RF_DESC_BASE<"fmax_a.d", int_mips_fmax_a_d,
1099                                         NoItinerary, MSA128, MSA128>;
1100
1101 class FMIN_W_DESC : MSA_3RF_DESC_BASE<"fmin.w", int_mips_fmin_w,
1102                                       NoItinerary, MSA128, MSA128>;
1103 class FMIN_D_DESC : MSA_3RF_DESC_BASE<"fmin.d", int_mips_fmin_d,
1104                                       NoItinerary, MSA128, MSA128>;
1105
1106 class FMIN_A_W_DESC : MSA_3RF_DESC_BASE<"fmin_a.w", int_mips_fmin_a_w,
1107                                         NoItinerary, MSA128, MSA128>;
1108 class FMIN_A_D_DESC : MSA_3RF_DESC_BASE<"fmin_a.d", int_mips_fmin_a_d,
1109                                         NoItinerary, MSA128, MSA128>;
1110
1111 class FMSUB_W_DESC : MSA_3RF_4RF_DESC_BASE<"fmsub.w", int_mips_fmsub_w,
1112                                            NoItinerary, MSA128, MSA128>;
1113 class FMSUB_D_DESC : MSA_3RF_4RF_DESC_BASE<"fmsub.d", int_mips_fmsub_d,
1114                                            NoItinerary, MSA128, MSA128>;
1115
1116 class FMUL_W_DESC : MSA_3RF_DESC_BASE<"fmul.w", int_mips_fmul_w,
1117                                       NoItinerary, MSA128, MSA128>;
1118 class FMUL_D_DESC : MSA_3RF_DESC_BASE<"fmul.d", int_mips_fmul_d,
1119                                       NoItinerary, MSA128, MSA128>;
1120
1121 class FRINT_W_DESC : MSA_2RF_DESC_BASE<"frint.w", int_mips_frint_w,
1122                                        NoItinerary, MSA128, MSA128>;
1123 class FRINT_D_DESC : MSA_2RF_DESC_BASE<"frint.d", int_mips_frint_d,
1124                                        NoItinerary, MSA128, MSA128>;
1125
1126 class FRCP_W_DESC : MSA_2RF_DESC_BASE<"frcp.w", int_mips_frcp_w,
1127                                        NoItinerary, MSA128, MSA128>;
1128 class FRCP_D_DESC : MSA_2RF_DESC_BASE<"frcp.d", int_mips_frcp_d,
1129                                        NoItinerary, MSA128, MSA128>;
1130
1131 class FRSQRT_W_DESC : MSA_2RF_DESC_BASE<"frsqrt.w", int_mips_frsqrt_w,
1132                                         NoItinerary, MSA128, MSA128>;
1133 class FRSQRT_D_DESC : MSA_2RF_DESC_BASE<"frsqrt.d", int_mips_frsqrt_d,
1134                                         NoItinerary, MSA128, MSA128>;
1135
1136 class FSEQ_W_DESC : MSA_3RF_DESC_BASE<"fseq.w", int_mips_fseq_w,
1137                                       NoItinerary, MSA128, MSA128>;
1138 class FSEQ_D_DESC : MSA_3RF_DESC_BASE<"fseq.d", int_mips_fseq_d,
1139                                       NoItinerary, MSA128, MSA128>;
1140
1141 class FSGE_W_DESC : MSA_3RF_DESC_BASE<"fsge.w", int_mips_fsge_w,
1142                                       NoItinerary, MSA128, MSA128>;
1143 class FSGE_D_DESC : MSA_3RF_DESC_BASE<"fsge.d", int_mips_fsge_d,
1144                                       NoItinerary, MSA128, MSA128>;
1145
1146 class FSGT_W_DESC : MSA_3RF_DESC_BASE<"fsgt.w", int_mips_fsgt_w,
1147                                       NoItinerary, MSA128, MSA128>;
1148 class FSGT_D_DESC : MSA_3RF_DESC_BASE<"fsgt.d", int_mips_fsgt_d,
1149                                       NoItinerary, MSA128, MSA128>;
1150
1151 class FSLE_W_DESC : MSA_3RF_DESC_BASE<"fsle.w", int_mips_fsle_w,
1152                                       NoItinerary, MSA128, MSA128>;
1153 class FSLE_D_DESC : MSA_3RF_DESC_BASE<"fsle.d", int_mips_fsle_d,
1154                                       NoItinerary, MSA128, MSA128>;
1155
1156 class FSLT_W_DESC : MSA_3RF_DESC_BASE<"fslt.w", int_mips_fslt_w,
1157                                       NoItinerary, MSA128, MSA128>;
1158 class FSLT_D_DESC : MSA_3RF_DESC_BASE<"fslt.d", int_mips_fslt_d,
1159                                       NoItinerary, MSA128, MSA128>;
1160
1161 class FSNE_W_DESC : MSA_3RF_DESC_BASE<"fsne.w", int_mips_fsne_w,
1162                                       NoItinerary, MSA128, MSA128>;
1163 class FSNE_D_DESC : MSA_3RF_DESC_BASE<"fsne.d", int_mips_fsne_d,
1164                                       NoItinerary, MSA128, MSA128>;
1165
1166 class FSQRT_W_DESC : MSA_2RF_DESC_BASE<"fsqrt.w", int_mips_fsqrt_w,
1167                                        NoItinerary, MSA128, MSA128>;
1168 class FSQRT_D_DESC : MSA_2RF_DESC_BASE<"fsqrt.d", int_mips_fsqrt_d,
1169                                        NoItinerary, MSA128, MSA128>;
1170
1171 class FSUB_W_DESC : MSA_3RF_DESC_BASE<"fsub.w", int_mips_fsub_w,
1172                                       NoItinerary, MSA128, MSA128>;
1173 class FSUB_D_DESC : MSA_3RF_DESC_BASE<"fsub.d", int_mips_fsub_d,
1174                                       NoItinerary, MSA128, MSA128>;
1175
1176 class FTINT_S_W_DESC : MSA_2RF_DESC_BASE<"ftint_s.w", int_mips_ftint_s_w,
1177                                          NoItinerary, MSA128, MSA128>;
1178 class FTINT_S_D_DESC : MSA_2RF_DESC_BASE<"ftint_s.d", int_mips_ftint_s_d,
1179                                          NoItinerary, MSA128, MSA128>;
1180
1181 class FTINT_U_W_DESC : MSA_2RF_DESC_BASE<"ftint_u.w", int_mips_ftint_u_w,
1182                                          NoItinerary, MSA128, MSA128>;
1183 class FTINT_U_D_DESC : MSA_2RF_DESC_BASE<"ftint_u.d", int_mips_ftint_u_d,
1184                                          NoItinerary, MSA128, MSA128>;
1185
1186 class FTQ_H_DESC : MSA_3RF_DESC_BASE<"ftq.h", int_mips_ftq_h,
1187                                      NoItinerary, MSA128, MSA128>;
1188 class FTQ_W_DESC : MSA_3RF_DESC_BASE<"ftq.w", int_mips_ftq_w,
1189                                      NoItinerary, MSA128, MSA128>;
1190
1191 class ILVEV_B_DESC : MSA_3R_DESC_BASE<"ilvev.b", int_mips_ilvev_b, NoItinerary,
1192                                       MSA128, MSA128>;
1193 class ILVEV_H_DESC : MSA_3R_DESC_BASE<"ilvev.h", int_mips_ilvev_h, NoItinerary,
1194                                       MSA128, MSA128>;
1195 class ILVEV_W_DESC : MSA_3R_DESC_BASE<"ilvev.w", int_mips_ilvev_w, NoItinerary,
1196                                       MSA128, MSA128>;
1197 class ILVEV_D_DESC : MSA_3R_DESC_BASE<"ilvev.d", int_mips_ilvev_d, NoItinerary,
1198                                       MSA128, MSA128>;
1199
1200 class ILVL_B_DESC : MSA_3R_DESC_BASE<"ilvl.b", int_mips_ilvl_b, NoItinerary,
1201                                      MSA128, MSA128>;
1202 class ILVL_H_DESC : MSA_3R_DESC_BASE<"ilvl.h", int_mips_ilvl_h, NoItinerary,
1203                                      MSA128, MSA128>;
1204 class ILVL_W_DESC : MSA_3R_DESC_BASE<"ilvl.w", int_mips_ilvl_w, NoItinerary,
1205                                      MSA128, MSA128>;
1206 class ILVL_D_DESC : MSA_3R_DESC_BASE<"ilvl.d", int_mips_ilvl_d, NoItinerary,
1207                                      MSA128, MSA128>;
1208
1209 class ILVOD_B_DESC : MSA_3R_DESC_BASE<"ilvod.b", int_mips_ilvod_b, NoItinerary,
1210                                       MSA128, MSA128>;
1211 class ILVOD_H_DESC : MSA_3R_DESC_BASE<"ilvod.h", int_mips_ilvod_h, NoItinerary,
1212                                       MSA128, MSA128>;
1213 class ILVOD_W_DESC : MSA_3R_DESC_BASE<"ilvod.w", int_mips_ilvod_w, NoItinerary,
1214                                       MSA128, MSA128>;
1215 class ILVOD_D_DESC : MSA_3R_DESC_BASE<"ilvod.d", int_mips_ilvod_d, NoItinerary,
1216                                       MSA128, MSA128>;
1217
1218 class ILVR_B_DESC : MSA_3R_DESC_BASE<"ilvr.b", int_mips_ilvr_b, NoItinerary,
1219                                      MSA128, MSA128>;
1220 class ILVR_H_DESC : MSA_3R_DESC_BASE<"ilvr.h", int_mips_ilvr_h, NoItinerary,
1221                                      MSA128, MSA128>;
1222 class ILVR_W_DESC : MSA_3R_DESC_BASE<"ilvr.w", int_mips_ilvr_w, NoItinerary,
1223                                      MSA128, MSA128>;
1224 class ILVR_D_DESC : MSA_3R_DESC_BASE<"ilvr.d", int_mips_ilvr_d, NoItinerary,
1225                                      MSA128, MSA128>;
1226
1227 class INSERT_B_DESC : MSA_INSERT_DESC_BASE<"insert.b", int_mips_insert_b,
1228                                            NoItinerary, MSA128, GPR32>;
1229 class INSERT_H_DESC : MSA_INSERT_DESC_BASE<"insert.h", int_mips_insert_h,
1230                                            NoItinerary, MSA128, GPR32>;
1231 class INSERT_W_DESC : MSA_INSERT_DESC_BASE<"insert.w", int_mips_insert_w,
1232                                            NoItinerary, MSA128, GPR32>;
1233
1234 class 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
1244 class LD_B_DESC : LD_DESC_BASE<"ld.b", load, v16i8, NoItinerary, MSA128>;
1245 class LD_H_DESC : LD_DESC_BASE<"ld.h", load, v8i16, NoItinerary, MSA128>;
1246 class LD_W_DESC : LD_DESC_BASE<"ld.w", load, v4i32, NoItinerary, MSA128>;
1247 class LD_D_DESC : LD_DESC_BASE<"ld.d", load, v2i64, NoItinerary, MSA128>;
1248
1249 class LDI_B_DESC : MSA_I10_DESC_BASE<"ldi.b", int_mips_ldi_b,
1250                                      NoItinerary, MSA128>;
1251 class LDI_H_DESC : MSA_I10_DESC_BASE<"ldi.h", int_mips_ldi_h,
1252                                      NoItinerary, MSA128>;
1253 class LDI_W_DESC : MSA_I10_DESC_BASE<"ldi.w", int_mips_ldi_w,
1254                                      NoItinerary, MSA128>;
1255 class LDI_D_DESC : MSA_I10_DESC_BASE<"ldi.d", int_mips_ldi_d,
1256                                      NoItinerary, MSA128>;
1257
1258 class 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
1269 class ST_B_DESC : ST_DESC_BASE<"st.b", store, v16i8, NoItinerary, MSA128>;
1270 class ST_H_DESC : ST_DESC_BASE<"st.h", store, v8i16, NoItinerary, MSA128>;
1271 class ST_W_DESC : ST_DESC_BASE<"st.w", store, v4i32, NoItinerary, MSA128>;
1272 class ST_D_DESC : ST_DESC_BASE<"st.d", store, v2i64, NoItinerary, MSA128>;
1273
1274 // Instruction defs.
1275 def ADD_A_B : ADD_A_B_ENC, ADD_A_B_DESC, Requires<[HasMSA]>;
1276 def ADD_A_H : ADD_A_H_ENC, ADD_A_H_DESC, Requires<[HasMSA]>;
1277 def ADD_A_W : ADD_A_W_ENC, ADD_A_W_DESC, Requires<[HasMSA]>;
1278 def ADD_A_D : ADD_A_D_ENC, ADD_A_D_DESC, Requires<[HasMSA]>;
1279
1280 def ADDS_A_B : ADDS_A_B_ENC, ADDS_A_B_DESC, Requires<[HasMSA]>;
1281 def ADDS_A_H : ADDS_A_H_ENC, ADDS_A_H_DESC, Requires<[HasMSA]>;
1282 def ADDS_A_W : ADDS_A_W_ENC, ADDS_A_W_DESC, Requires<[HasMSA]>;
1283 def ADDS_A_D : ADDS_A_D_ENC, ADDS_A_D_DESC, Requires<[HasMSA]>;
1284
1285 def ADDS_S_B : ADDS_S_B_ENC, ADDS_S_B_DESC, Requires<[HasMSA]>;
1286 def ADDS_S_H : ADDS_S_H_ENC, ADDS_S_H_DESC, Requires<[HasMSA]>;
1287 def ADDS_S_W : ADDS_S_W_ENC, ADDS_S_W_DESC, Requires<[HasMSA]>;
1288 def ADDS_S_D : ADDS_S_D_ENC, ADDS_S_D_DESC, Requires<[HasMSA]>;
1289
1290 def ADDS_U_B : ADDS_U_B_ENC, ADDS_U_B_DESC, Requires<[HasMSA]>;
1291 def ADDS_U_H : ADDS_U_H_ENC, ADDS_U_H_DESC, Requires<[HasMSA]>;
1292 def ADDS_U_W : ADDS_U_W_ENC, ADDS_U_W_DESC, Requires<[HasMSA]>;
1293 def ADDS_U_D : ADDS_U_D_ENC, ADDS_U_D_DESC, Requires<[HasMSA]>;
1294
1295 def ADDV_B : ADDV_B_ENC, ADDV_B_DESC, Requires<[HasMSA]>;
1296 def ADDV_H : ADDV_H_ENC, ADDV_H_DESC, Requires<[HasMSA]>;
1297 def ADDV_W : ADDV_W_ENC, ADDV_W_DESC, Requires<[HasMSA]>;
1298 def ADDV_D : ADDV_D_ENC, ADDV_D_DESC, Requires<[HasMSA]>;
1299
1300 def ADDVI_B : ADDVI_B_ENC, ADDVI_B_DESC, Requires<[HasMSA]>;
1301 def ADDVI_H : ADDVI_H_ENC, ADDVI_H_DESC, Requires<[HasMSA]>;
1302 def ADDVI_W : ADDVI_W_ENC, ADDVI_W_DESC, Requires<[HasMSA]>;
1303 def ADDVI_D : ADDVI_D_ENC, ADDVI_D_DESC, Requires<[HasMSA]>;
1304
1305 def ANDI_B : ANDI_B_ENC, ANDI_B_DESC, Requires<[HasMSA]>;
1306
1307 def ASUB_S_B : ASUB_S_B_ENC, ASUB_S_B_DESC, Requires<[HasMSA]>;
1308 def ASUB_S_H : ASUB_S_H_ENC, ASUB_S_H_DESC, Requires<[HasMSA]>;
1309 def ASUB_S_W : ASUB_S_W_ENC, ASUB_S_W_DESC, Requires<[HasMSA]>;
1310 def ASUB_S_D : ASUB_S_D_ENC, ASUB_S_D_DESC, Requires<[HasMSA]>;
1311
1312 def ASUB_U_B : ASUB_U_B_ENC, ASUB_U_B_DESC, Requires<[HasMSA]>;
1313 def ASUB_U_H : ASUB_U_H_ENC, ASUB_U_H_DESC, Requires<[HasMSA]>;
1314 def ASUB_U_W : ASUB_U_W_ENC, ASUB_U_W_DESC, Requires<[HasMSA]>;
1315 def ASUB_U_D : ASUB_U_D_ENC, ASUB_U_D_DESC, Requires<[HasMSA]>;
1316
1317 def AVE_S_B : AVE_S_B_ENC, AVE_S_B_DESC, Requires<[HasMSA]>;
1318 def AVE_S_H : AVE_S_H_ENC, AVE_S_H_DESC, Requires<[HasMSA]>;
1319 def AVE_S_W : AVE_S_W_ENC, AVE_S_W_DESC, Requires<[HasMSA]>;
1320 def AVE_S_D : AVE_S_D_ENC, AVE_S_D_DESC, Requires<[HasMSA]>;
1321
1322 def AVE_U_B : AVE_U_B_ENC, AVE_U_B_DESC, Requires<[HasMSA]>;
1323 def AVE_U_H : AVE_U_H_ENC, AVE_U_H_DESC, Requires<[HasMSA]>;
1324 def AVE_U_W : AVE_U_W_ENC, AVE_U_W_DESC, Requires<[HasMSA]>;
1325 def AVE_U_D : AVE_U_D_ENC, AVE_U_D_DESC, Requires<[HasMSA]>;
1326
1327 def AVER_S_B : AVER_S_B_ENC, AVER_S_B_DESC, Requires<[HasMSA]>;
1328 def AVER_S_H : AVER_S_H_ENC, AVER_S_H_DESC, Requires<[HasMSA]>;
1329 def AVER_S_W : AVER_S_W_ENC, AVER_S_W_DESC, Requires<[HasMSA]>;
1330 def AVER_S_D : AVER_S_D_ENC, AVER_S_D_DESC, Requires<[HasMSA]>;
1331
1332 def AVER_U_B : AVER_U_B_ENC, AVER_U_B_DESC, Requires<[HasMSA]>;
1333 def AVER_U_H : AVER_U_H_ENC, AVER_U_H_DESC, Requires<[HasMSA]>;
1334 def AVER_U_W : AVER_U_W_ENC, AVER_U_W_DESC, Requires<[HasMSA]>;
1335 def AVER_U_D : AVER_U_D_ENC, AVER_U_D_DESC, Requires<[HasMSA]>;
1336
1337 def BCLR_B : BCLR_B_ENC, BCLR_B_DESC, Requires<[HasMSA]>;
1338 def BCLR_H : BCLR_H_ENC, BCLR_H_DESC, Requires<[HasMSA]>;
1339 def BCLR_W : BCLR_W_ENC, BCLR_W_DESC, Requires<[HasMSA]>;
1340 def BCLR_D : BCLR_D_ENC, BCLR_D_DESC, Requires<[HasMSA]>;
1341
1342 def BCLRI_B : BCLRI_B_ENC, BCLRI_B_DESC, Requires<[HasMSA]>;
1343 def BCLRI_H : BCLRI_H_ENC, BCLRI_H_DESC, Requires<[HasMSA]>;
1344 def BCLRI_W : BCLRI_W_ENC, BCLRI_W_DESC, Requires<[HasMSA]>;
1345 def BCLRI_D : BCLRI_D_ENC, BCLRI_D_DESC, Requires<[HasMSA]>;
1346
1347 def BINSL_B : BINSL_B_ENC, BINSL_B_DESC, Requires<[HasMSA]>;
1348 def BINSL_H : BINSL_H_ENC, BINSL_H_DESC, Requires<[HasMSA]>;
1349 def BINSL_W : BINSL_W_ENC, BINSL_W_DESC, Requires<[HasMSA]>;
1350 def BINSL_D : BINSL_D_ENC, BINSL_D_DESC, Requires<[HasMSA]>;
1351
1352 def BINSLI_B : BINSLI_B_ENC, BINSLI_B_DESC, Requires<[HasMSA]>;
1353 def BINSLI_H : BINSLI_H_ENC, BINSLI_H_DESC, Requires<[HasMSA]>;
1354 def BINSLI_W : BINSLI_W_ENC, BINSLI_W_DESC, Requires<[HasMSA]>;
1355 def BINSLI_D : BINSLI_D_ENC, BINSLI_D_DESC, Requires<[HasMSA]>;
1356
1357 def BINSR_B : BINSR_B_ENC, BINSR_B_DESC, Requires<[HasMSA]>;
1358 def BINSR_H : BINSR_H_ENC, BINSR_H_DESC, Requires<[HasMSA]>;
1359 def BINSR_W : BINSR_W_ENC, BINSR_W_DESC, Requires<[HasMSA]>;
1360 def BINSR_D : BINSR_D_ENC, BINSR_D_DESC, Requires<[HasMSA]>;
1361
1362 def BINSRI_B : BINSRI_B_ENC, BINSRI_B_DESC, Requires<[HasMSA]>;
1363 def BINSRI_H : BINSRI_H_ENC, BINSRI_H_DESC, Requires<[HasMSA]>;
1364 def BINSRI_W : BINSRI_W_ENC, BINSRI_W_DESC, Requires<[HasMSA]>;
1365 def BINSRI_D : BINSRI_D_ENC, BINSRI_D_DESC, Requires<[HasMSA]>;
1366
1367 def BMNZI_B : BMNZI_B_ENC, BMNZI_B_DESC, Requires<[HasMSA]>;
1368
1369 def BMZI_B : BMZI_B_ENC, BMZI_B_DESC, Requires<[HasMSA]>;
1370
1371 def BNEG_B : BNEG_B_ENC, BNEG_B_DESC, Requires<[HasMSA]>;
1372 def BNEG_H : BNEG_H_ENC, BNEG_H_DESC, Requires<[HasMSA]>;
1373 def BNEG_W : BNEG_W_ENC, BNEG_W_DESC, Requires<[HasMSA]>;
1374 def BNEG_D : BNEG_D_ENC, BNEG_D_DESC, Requires<[HasMSA]>;
1375
1376 def BNEGI_B : BNEGI_B_ENC, BNEGI_B_DESC, Requires<[HasMSA]>;
1377 def BNEGI_H : BNEGI_H_ENC, BNEGI_H_DESC, Requires<[HasMSA]>;
1378 def BNEGI_W : BNEGI_W_ENC, BNEGI_W_DESC, Requires<[HasMSA]>;
1379 def BNEGI_D : BNEGI_D_ENC, BNEGI_D_DESC, Requires<[HasMSA]>;
1380
1381 def BSELI_B : BSELI_B_ENC, BSELI_B_DESC, Requires<[HasMSA]>;
1382
1383 def BSET_B : BSET_B_ENC, BSET_B_DESC, Requires<[HasMSA]>;
1384 def BSET_H : BSET_H_ENC, BSET_H_DESC, Requires<[HasMSA]>;
1385 def BSET_W : BSET_W_ENC, BSET_W_DESC, Requires<[HasMSA]>;
1386 def BSET_D : BSET_D_ENC, BSET_D_DESC, Requires<[HasMSA]>;
1387
1388 def BSETI_B : BSETI_B_ENC, BSETI_B_DESC, Requires<[HasMSA]>;
1389 def BSETI_H : BSETI_H_ENC, BSETI_H_DESC, Requires<[HasMSA]>;
1390 def BSETI_W : BSETI_W_ENC, BSETI_W_DESC, Requires<[HasMSA]>;
1391 def BSETI_D : BSETI_D_ENC, BSETI_D_DESC, Requires<[HasMSA]>;
1392
1393 def CEQ_B : CEQ_B_ENC, CEQ_B_DESC, Requires<[HasMSA]>;
1394 def CEQ_H : CEQ_H_ENC, CEQ_H_DESC, Requires<[HasMSA]>;
1395 def CEQ_W : CEQ_W_ENC, CEQ_W_DESC, Requires<[HasMSA]>;
1396 def CEQ_D : CEQ_D_ENC, CEQ_D_DESC, Requires<[HasMSA]>;
1397
1398 def CEQI_B : CEQI_B_ENC, CEQI_B_DESC, Requires<[HasMSA]>;
1399 def CEQI_H : CEQI_H_ENC, CEQI_H_DESC, Requires<[HasMSA]>;
1400 def CEQI_W : CEQI_W_ENC, CEQI_W_DESC, Requires<[HasMSA]>;
1401 def CEQI_D : CEQI_D_ENC, CEQI_D_DESC, Requires<[HasMSA]>;
1402
1403 def CLE_S_B : CLE_S_B_ENC, CLE_S_B_DESC, Requires<[HasMSA]>;
1404 def CLE_S_H : CLE_S_H_ENC, CLE_S_H_DESC, Requires<[HasMSA]>;
1405 def CLE_S_W : CLE_S_W_ENC, CLE_S_W_DESC, Requires<[HasMSA]>;
1406 def CLE_S_D : CLE_S_D_ENC, CLE_S_D_DESC, Requires<[HasMSA]>;
1407
1408 def CLE_U_B : CLE_U_B_ENC, CLE_U_B_DESC, Requires<[HasMSA]>;
1409 def CLE_U_H : CLE_U_H_ENC, CLE_U_H_DESC, Requires<[HasMSA]>;
1410 def CLE_U_W : CLE_U_W_ENC, CLE_U_W_DESC, Requires<[HasMSA]>;
1411 def CLE_U_D : CLE_U_D_ENC, CLE_U_D_DESC, Requires<[HasMSA]>;
1412
1413 def CLEI_S_B : CLEI_S_B_ENC, CLEI_S_B_DESC, Requires<[HasMSA]>;
1414 def CLEI_S_H : CLEI_S_H_ENC, CLEI_S_H_DESC, Requires<[HasMSA]>;
1415 def CLEI_S_W : CLEI_S_W_ENC, CLEI_S_W_DESC, Requires<[HasMSA]>;
1416 def CLEI_S_D : CLEI_S_D_ENC, CLEI_S_D_DESC, Requires<[HasMSA]>;
1417
1418 def CLEI_U_B : CLEI_U_B_ENC, CLEI_U_B_DESC, Requires<[HasMSA]>;
1419 def CLEI_U_H : CLEI_U_H_ENC, CLEI_U_H_DESC, Requires<[HasMSA]>;
1420 def CLEI_U_W : CLEI_U_W_ENC, CLEI_U_W_DESC, Requires<[HasMSA]>;
1421 def CLEI_U_D : CLEI_U_D_ENC, CLEI_U_D_DESC, Requires<[HasMSA]>;
1422
1423 def CLT_S_B : CLT_S_B_ENC, CLT_S_B_DESC, Requires<[HasMSA]>;
1424 def CLT_S_H : CLT_S_H_ENC, CLT_S_H_DESC, Requires<[HasMSA]>;
1425 def CLT_S_W : CLT_S_W_ENC, CLT_S_W_DESC, Requires<[HasMSA]>;
1426 def CLT_S_D : CLT_S_D_ENC, CLT_S_D_DESC, Requires<[HasMSA]>;
1427
1428 def CLT_U_B : CLT_U_B_ENC, CLT_U_B_DESC, Requires<[HasMSA]>;
1429 def CLT_U_H : CLT_U_H_ENC, CLT_U_H_DESC, Requires<[HasMSA]>;
1430 def CLT_U_W : CLT_U_W_ENC, CLT_U_W_DESC, Requires<[HasMSA]>;
1431 def CLT_U_D : CLT_U_D_ENC, CLT_U_D_DESC, Requires<[HasMSA]>;
1432
1433 def CLTI_S_B : CLTI_S_B_ENC, CLTI_S_B_DESC, Requires<[HasMSA]>;
1434 def CLTI_S_H : CLTI_S_H_ENC, CLTI_S_H_DESC, Requires<[HasMSA]>;
1435 def CLTI_S_W : CLTI_S_W_ENC, CLTI_S_W_DESC, Requires<[HasMSA]>;
1436 def CLTI_S_D : CLTI_S_D_ENC, CLTI_S_D_DESC, Requires<[HasMSA]>;
1437
1438 def CLTI_U_B : CLTI_U_B_ENC, CLTI_U_B_DESC, Requires<[HasMSA]>;
1439 def CLTI_U_H : CLTI_U_H_ENC, CLTI_U_H_DESC, Requires<[HasMSA]>;
1440 def CLTI_U_W : CLTI_U_W_ENC, CLTI_U_W_DESC, Requires<[HasMSA]>;
1441 def CLTI_U_D : CLTI_U_D_ENC, CLTI_U_D_DESC, Requires<[HasMSA]>;
1442
1443 def COPY_S_B : COPY_S_B_ENC, COPY_S_B_DESC, Requires<[HasMSA]>;
1444 def COPY_S_H : COPY_S_H_ENC, COPY_S_H_DESC, Requires<[HasMSA]>;
1445 def COPY_S_W : COPY_S_W_ENC, COPY_S_W_DESC, Requires<[HasMSA]>;
1446
1447 def COPY_U_B : COPY_U_B_ENC, COPY_U_B_DESC, Requires<[HasMSA]>;
1448 def COPY_U_H : COPY_U_H_ENC, COPY_U_H_DESC, Requires<[HasMSA]>;
1449 def COPY_U_W : COPY_U_W_ENC, COPY_U_W_DESC, Requires<[HasMSA]>;
1450
1451 def DIV_S_B : DIV_S_B_ENC, DIV_S_B_DESC, Requires<[HasMSA]>;
1452 def DIV_S_H : DIV_S_H_ENC, DIV_S_H_DESC, Requires<[HasMSA]>;
1453 def DIV_S_W : DIV_S_W_ENC, DIV_S_W_DESC, Requires<[HasMSA]>;
1454 def DIV_S_D : DIV_S_D_ENC, DIV_S_D_DESC, Requires<[HasMSA]>;
1455
1456 def DIV_U_B : DIV_U_B_ENC, DIV_U_B_DESC, Requires<[HasMSA]>;
1457 def DIV_U_H : DIV_U_H_ENC, DIV_U_H_DESC, Requires<[HasMSA]>;
1458 def DIV_U_W : DIV_U_W_ENC, DIV_U_W_DESC, Requires<[HasMSA]>;
1459 def DIV_U_D : DIV_U_D_ENC, DIV_U_D_DESC, Requires<[HasMSA]>;
1460
1461 def DOTP_S_B : DOTP_S_B_ENC, DOTP_S_B_DESC, Requires<[HasMSA]>;
1462 def DOTP_S_H : DOTP_S_H_ENC, DOTP_S_H_DESC, Requires<[HasMSA]>;
1463 def DOTP_S_W : DOTP_S_W_ENC, DOTP_S_W_DESC, Requires<[HasMSA]>;
1464 def DOTP_S_D : DOTP_S_D_ENC, DOTP_S_D_DESC, Requires<[HasMSA]>;
1465
1466 def DOTP_U_B : DOTP_U_B_ENC, DOTP_U_B_DESC, Requires<[HasMSA]>;
1467 def DOTP_U_H : DOTP_U_H_ENC, DOTP_U_H_DESC, Requires<[HasMSA]>;
1468 def DOTP_U_W : DOTP_U_W_ENC, DOTP_U_W_DESC, Requires<[HasMSA]>;
1469 def DOTP_U_D : DOTP_U_D_ENC, DOTP_U_D_DESC, Requires<[HasMSA]>;
1470
1471 def DPADD_S_H : DPADD_S_H_ENC, DPADD_S_H_DESC, Requires<[HasMSA]>;
1472 def DPADD_S_W : DPADD_S_W_ENC, DPADD_S_W_DESC, Requires<[HasMSA]>;
1473 def DPADD_S_D : DPADD_S_D_ENC, DPADD_S_D_DESC, Requires<[HasMSA]>;
1474
1475 def DPADD_U_H : DPADD_U_H_ENC, DPADD_U_H_DESC, Requires<[HasMSA]>;
1476 def DPADD_U_W : DPADD_U_W_ENC, DPADD_U_W_DESC, Requires<[HasMSA]>;
1477 def DPADD_U_D : DPADD_U_D_ENC, DPADD_U_D_DESC, Requires<[HasMSA]>;
1478
1479 def DPSUB_S_H : DPSUB_S_H_ENC, DPSUB_S_H_DESC, Requires<[HasMSA]>;
1480 def DPSUB_S_W : DPSUB_S_W_ENC, DPSUB_S_W_DESC, Requires<[HasMSA]>;
1481 def DPSUB_S_D : DPSUB_S_D_ENC, DPSUB_S_D_DESC, Requires<[HasMSA]>;
1482
1483 def DPSUB_U_H : DPSUB_U_H_ENC, DPSUB_U_H_DESC, Requires<[HasMSA]>;
1484 def DPSUB_U_W : DPSUB_U_W_ENC, DPSUB_U_W_DESC, Requires<[HasMSA]>;
1485 def DPSUB_U_D : DPSUB_U_D_ENC, DPSUB_U_D_DESC, Requires<[HasMSA]>;
1486
1487 def FADD_W : FADD_W_ENC, FADD_W_DESC, Requires<[HasMSA]>;
1488 def FADD_D : FADD_D_ENC, FADD_D_DESC, Requires<[HasMSA]>;
1489
1490 def FCEQ_W : FCEQ_W_ENC, FCEQ_W_DESC, Requires<[HasMSA]>;
1491 def FCEQ_D : FCEQ_D_ENC, FCEQ_D_DESC, Requires<[HasMSA]>;
1492
1493 def FCLE_W : FCLE_W_ENC, FCLE_W_DESC, Requires<[HasMSA]>;
1494 def FCLE_D : FCLE_D_ENC, FCLE_D_DESC, Requires<[HasMSA]>;
1495
1496 def FCLT_W : FCLT_W_ENC, FCLT_W_DESC, Requires<[HasMSA]>;
1497 def FCLT_D : FCLT_D_ENC, FCLT_D_DESC, Requires<[HasMSA]>;
1498
1499 def FCLASS_W : FCLASS_W_ENC, FCLASS_W_DESC, Requires<[HasMSA]>;
1500 def FCLASS_D : FCLASS_D_ENC, FCLASS_D_DESC, Requires<[HasMSA]>;
1501
1502 def FCGE_W : FCGE_W_ENC, FCGE_W_DESC, Requires<[HasMSA]>;
1503 def FCGE_D : FCGE_D_ENC, FCGE_D_DESC, Requires<[HasMSA]>;
1504
1505 def FCGT_W : FCGT_W_ENC, FCGT_W_DESC, Requires<[HasMSA]>;
1506 def FCGT_D : FCGT_D_ENC, FCGT_D_DESC, Requires<[HasMSA]>;
1507
1508 def FCNE_W : FCNE_W_ENC, FCNE_W_DESC, Requires<[HasMSA]>;
1509 def FCNE_D : FCNE_D_ENC, FCNE_D_DESC, Requires<[HasMSA]>;
1510
1511 def FCUN_W : FCUN_W_ENC, FCUN_W_DESC, Requires<[HasMSA]>;
1512 def FCUN_D : FCUN_D_ENC, FCUN_D_DESC, Requires<[HasMSA]>;
1513
1514 def FDIV_W : FDIV_W_ENC, FDIV_W_DESC, Requires<[HasMSA]>;
1515 def FDIV_D : FDIV_D_ENC, FDIV_D_DESC, Requires<[HasMSA]>;
1516
1517 def FEXDO_H : FEXDO_H_ENC, FEXDO_H_DESC, Requires<[HasMSA]>;
1518 def FEXDO_W : FEXDO_W_ENC, FEXDO_W_DESC, Requires<[HasMSA]>;
1519
1520 def FEXP2_W : FEXP2_W_ENC, FEXP2_W_DESC, Requires<[HasMSA]>;
1521 def FEXP2_D : FEXP2_D_ENC, FEXP2_D_DESC, Requires<[HasMSA]>;
1522
1523 def FEXUPL_W : FEXUPL_W_ENC, FEXUPL_W_DESC, Requires<[HasMSA]>;
1524 def FEXUPL_D : FEXUPL_D_ENC, FEXUPL_D_DESC, Requires<[HasMSA]>;
1525
1526 def FEXUPR_W : FEXUPR_W_ENC, FEXUPR_W_DESC, Requires<[HasMSA]>;
1527 def FEXUPR_D : FEXUPR_D_ENC, FEXUPR_D_DESC, Requires<[HasMSA]>;
1528
1529 def FFINT_S_W : FFINT_S_W_ENC, FFINT_S_W_DESC, Requires<[HasMSA]>;
1530 def FFINT_S_D : FFINT_S_D_ENC, FFINT_S_D_DESC, Requires<[HasMSA]>;
1531
1532 def FFINT_U_W : FFINT_U_W_ENC, FFINT_U_W_DESC, Requires<[HasMSA]>;
1533 def FFINT_U_D : FFINT_U_D_ENC, FFINT_U_D_DESC, Requires<[HasMSA]>;
1534
1535 def FFQL_W : FFQL_W_ENC, FFQL_W_DESC, Requires<[HasMSA]>;
1536 def FFQL_D : FFQL_D_ENC, FFQL_D_DESC, Requires<[HasMSA]>;
1537
1538 def FFQR_W : FFQR_W_ENC, FFQR_W_DESC, Requires<[HasMSA]>;
1539 def FFQR_D : FFQR_D_ENC, FFQR_D_DESC, Requires<[HasMSA]>;
1540
1541 def FILL_B : FILL_B_ENC, FILL_B_DESC, Requires<[HasMSA]>;
1542 def FILL_H : FILL_H_ENC, FILL_H_DESC, Requires<[HasMSA]>;
1543 def FILL_W : FILL_W_ENC, FILL_W_DESC, Requires<[HasMSA]>;
1544
1545 def FLOG2_W : FLOG2_W_ENC, FLOG2_W_DESC, Requires<[HasMSA]>;
1546 def FLOG2_D : FLOG2_D_ENC, FLOG2_D_DESC, Requires<[HasMSA]>;
1547
1548 def FMADD_W : FMADD_W_ENC, FMADD_W_DESC, Requires<[HasMSA]>;
1549 def FMADD_D : FMADD_D_ENC, FMADD_D_DESC, Requires<[HasMSA]>;
1550
1551 def FMAX_W : FMAX_W_ENC, FMAX_W_DESC, Requires<[HasMSA]>;
1552 def FMAX_D : FMAX_D_ENC, FMAX_D_DESC, Requires<[HasMSA]>;
1553
1554 def FMAX_A_W : FMAX_A_W_ENC, FMAX_A_W_DESC, Requires<[HasMSA]>;
1555 def FMAX_A_D : FMAX_A_D_ENC, FMAX_A_D_DESC, Requires<[HasMSA]>;
1556
1557 def FMIN_W : FMIN_W_ENC, FMIN_W_DESC, Requires<[HasMSA]>;
1558 def FMIN_D : FMIN_D_ENC, FMIN_D_DESC, Requires<[HasMSA]>;
1559
1560 def FMIN_A_W : FMIN_A_W_ENC, FMIN_A_W_DESC, Requires<[HasMSA]>;
1561 def FMIN_A_D : FMIN_A_D_ENC, FMIN_A_D_DESC, Requires<[HasMSA]>;
1562
1563 def FMSUB_W : FMSUB_W_ENC, FMSUB_W_DESC, Requires<[HasMSA]>;
1564 def FMSUB_D : FMSUB_D_ENC, FMSUB_D_DESC, Requires<[HasMSA]>;
1565
1566 def FMUL_W : FMUL_W_ENC, FMUL_W_DESC, Requires<[HasMSA]>;
1567 def FMUL_D : FMUL_D_ENC, FMUL_D_DESC, Requires<[HasMSA]>;
1568
1569 def FRINT_W : FRINT_W_ENC, FRINT_W_DESC, Requires<[HasMSA]>;
1570 def FRINT_D : FRINT_D_ENC, FRINT_D_DESC, Requires<[HasMSA]>;
1571
1572 def FRCP_W : FRCP_W_ENC, FRCP_W_DESC, Requires<[HasMSA]>;
1573 def FRCP_D : FRCP_D_ENC, FRCP_D_DESC, Requires<[HasMSA]>;
1574
1575 def FRSQRT_W : FRSQRT_W_ENC, FRSQRT_W_DESC, Requires<[HasMSA]>;
1576 def FRSQRT_D : FRSQRT_D_ENC, FRSQRT_D_DESC, Requires<[HasMSA]>;
1577
1578 def FSEQ_W : FSEQ_W_ENC, FSEQ_W_DESC, Requires<[HasMSA]>;
1579 def FSEQ_D : FSEQ_D_ENC, FSEQ_D_DESC, Requires<[HasMSA]>;
1580
1581 def FSLE_W : FSLE_W_ENC, FSLE_W_DESC, Requires<[HasMSA]>;
1582 def FSLE_D : FSLE_D_ENC, FSLE_D_DESC, Requires<[HasMSA]>;
1583
1584 def FSLT_W : FSLT_W_ENC, FSLT_W_DESC, Requires<[HasMSA]>;
1585 def FSLT_D : FSLT_D_ENC, FSLT_D_DESC, Requires<[HasMSA]>;
1586
1587 def FSGE_W : FSGE_W_ENC, FSGE_W_DESC, Requires<[HasMSA]>;
1588 def FSGE_D : FSGE_D_ENC, FSGE_D_DESC, Requires<[HasMSA]>;
1589
1590 def FSGT_W : FSGT_W_ENC, FSGT_W_DESC, Requires<[HasMSA]>;
1591 def FSGT_D : FSGT_D_ENC, FSGT_D_DESC, Requires<[HasMSA]>;
1592
1593 def FSNE_W : FSNE_W_ENC, FSNE_W_DESC, Requires<[HasMSA]>;
1594 def FSNE_D : FSNE_D_ENC, FSNE_D_DESC, Requires<[HasMSA]>;
1595
1596 def FSQRT_W : FSQRT_W_ENC, FSQRT_W_DESC, Requires<[HasMSA]>;
1597 def FSQRT_D : FSQRT_D_ENC, FSQRT_D_DESC, Requires<[HasMSA]>;
1598
1599 def FSUB_W : FSUB_W_ENC, FSUB_W_DESC, Requires<[HasMSA]>;
1600 def FSUB_D : FSUB_D_ENC, FSUB_D_DESC, Requires<[HasMSA]>;
1601
1602 def FTINT_S_W : FTINT_S_W_ENC, FTINT_S_W_DESC, Requires<[HasMSA]>;
1603 def FTINT_S_D : FTINT_S_D_ENC, FTINT_S_D_DESC, Requires<[HasMSA]>;
1604
1605 def FTINT_U_W : FTINT_U_W_ENC, FTINT_U_W_DESC, Requires<[HasMSA]>;
1606 def FTINT_U_D : FTINT_U_D_ENC, FTINT_U_D_DESC, Requires<[HasMSA]>;
1607
1608 def FTQ_H : FTQ_H_ENC, FTQ_H_DESC, Requires<[HasMSA]>;
1609 def FTQ_W : FTQ_W_ENC, FTQ_W_DESC, Requires<[HasMSA]>;
1610
1611 def ILVEV_B : ILVEV_B_ENC, ILVEV_B_DESC, Requires<[HasMSA]>;
1612 def ILVEV_H : ILVEV_H_ENC, ILVEV_H_DESC, Requires<[HasMSA]>;
1613 def ILVEV_W : ILVEV_W_ENC, ILVEV_W_DESC, Requires<[HasMSA]>;
1614 def ILVEV_D : ILVEV_D_ENC, ILVEV_D_DESC, Requires<[HasMSA]>;
1615
1616 def ILVL_B : ILVL_B_ENC, ILVL_B_DESC, Requires<[HasMSA]>;
1617 def ILVL_H : ILVL_H_ENC, ILVL_H_DESC, Requires<[HasMSA]>;
1618 def ILVL_W : ILVL_W_ENC, ILVL_W_DESC, Requires<[HasMSA]>;
1619 def ILVL_D : ILVL_D_ENC, ILVL_D_DESC, Requires<[HasMSA]>;
1620
1621 def ILVOD_B : ILVOD_B_ENC, ILVOD_B_DESC, Requires<[HasMSA]>;
1622 def ILVOD_H : ILVOD_H_ENC, ILVOD_H_DESC, Requires<[HasMSA]>;
1623 def ILVOD_W : ILVOD_W_ENC, ILVOD_W_DESC, Requires<[HasMSA]>;
1624 def ILVOD_D : ILVOD_D_ENC, ILVOD_D_DESC, Requires<[HasMSA]>;
1625
1626 def ILVR_B : ILVR_B_ENC, ILVR_B_DESC, Requires<[HasMSA]>;
1627 def ILVR_H : ILVR_H_ENC, ILVR_H_DESC, Requires<[HasMSA]>;
1628 def ILVR_W : ILVR_W_ENC, ILVR_W_DESC, Requires<[HasMSA]>;
1629 def ILVR_D : ILVR_D_ENC, ILVR_D_DESC, Requires<[HasMSA]>;
1630
1631 def INSERT_B : INSERT_B_ENC, INSERT_B_DESC, Requires<[HasMSA]>;
1632 def INSERT_H : INSERT_H_ENC, INSERT_H_DESC, Requires<[HasMSA]>;
1633 def INSERT_W : INSERT_W_ENC, INSERT_W_DESC, Requires<[HasMSA]>;
1634
1635 def LD_B: LD_B_ENC, LD_B_DESC, Requires<[HasMSA]>;
1636 def LD_H: LD_H_ENC, LD_H_DESC, Requires<[HasMSA]>;
1637 def LD_W: LD_W_ENC, LD_W_DESC, Requires<[HasMSA]>;
1638 def LD_D: LD_D_ENC, LD_D_DESC, Requires<[HasMSA]>;
1639
1640 def LDI_B : LDI_B_ENC, LDI_B_DESC, Requires<[HasMSA]>;
1641 def LDI_H : LDI_H_ENC, LDI_H_DESC, Requires<[HasMSA]>;
1642 def LDI_W : LDI_W_ENC, LDI_W_DESC, Requires<[HasMSA]>;
1643
1644 def ST_B: ST_B_ENC, ST_B_DESC, Requires<[HasMSA]>;
1645 def ST_H: ST_H_ENC, ST_H_DESC, Requires<[HasMSA]>;
1646 def ST_W: ST_W_ENC, ST_W_DESC, Requires<[HasMSA]>;
1647 def ST_D: ST_D_ENC, ST_D_DESC, Requires<[HasMSA]>;
1648
1649 // Patterns.
1650 class MSAPat<dag pattern, dag result, Predicate pred = HasMSA> :
1651   Pat<pattern, result>, Requires<[pred]>;
1652
1653 def LD_FH : MSAPat<(v8f16 (load addr:$addr)),
1654                    (LD_H addr:$addr)>;
1655 def LD_FW : MSAPat<(v4f32 (load addr:$addr)),
1656                    (LD_W addr:$addr)>;
1657 def LD_FD : MSAPat<(v2f64 (load addr:$addr)),
1658                    (LD_D addr:$addr)>;
1659
1660 def ST_FH : MSAPat<(store (v8f16 MSA128:$ws), addr:$addr),
1661                    (ST_H MSA128:$ws, addr:$addr)>;
1662 def ST_FW : MSAPat<(store (v4f32 MSA128:$ws), addr:$addr),
1663                    (ST_W MSA128:$ws, addr:$addr)>;
1664 def ST_FD : MSAPat<(store (v2f64 MSA128:$ws), addr:$addr),
1665                    (ST_D MSA128:$ws, addr:$addr)>;