1 //===- MipsMSAInstrInfo.td - MSA ASE instructions -*- tablegen ------------*-=//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file describes Mips MSA ASE instructions.
12 //===----------------------------------------------------------------------===//
14 def immSExt5 : ImmLeaf<i32, [{return isInt<5>(Imm);}]>;
15 def immSExt10: ImmLeaf<i32, [{return isInt<10>(Imm);}]>;
17 def uimm3 : Operand<i32> {
18 let PrintMethod = "printUnsignedImm";
21 def uimm4 : Operand<i32> {
22 let PrintMethod = "printUnsignedImm";
25 def uimm6 : Operand<i32> {
26 let PrintMethod = "printUnsignedImm";
29 def uimm8 : Operand<i32> {
30 let PrintMethod = "printUnsignedImm";
33 def simm5 : Operand<i32>;
35 def simm10 : Operand<i32>;
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>;
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>;
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>;
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>;
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>;
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>;
68 class ANDI_B_ENC : MSA_I8_FMT<0b00, 0b000000>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
130 class BMNZI_B_ENC : MSA_I8_FMT<0b00, 0b000001>;
132 class BMZI_B_ENC : MSA_I8_FMT<0b01, 0b000001>;
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>;
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>;
144 class BSELI_B_ENC : MSA_I8_FMT<0b10, 0b000001>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
250 class FADD_W_ENC : MSA_3RF_FMT<0b0000, 0b0, 0b011011>;
251 class FADD_D_ENC : MSA_3RF_FMT<0b0000, 0b1, 0b011011>;
253 class FCEQ_W_ENC : MSA_3RF_FMT<0b0010, 0b0, 0b011010>;
254 class FCEQ_D_ENC : MSA_3RF_FMT<0b0010, 0b1, 0b011010>;
256 class FCGE_W_ENC : MSA_3RF_FMT<0b0101, 0b0, 0b011010>;
257 class FCGE_D_ENC : MSA_3RF_FMT<0b0101, 0b1, 0b011010>;
259 class FCGT_W_ENC : MSA_3RF_FMT<0b0111, 0b0, 0b011010>;
260 class FCGT_D_ENC : MSA_3RF_FMT<0b0111, 0b1, 0b011010>;
262 class FCLASS_W_ENC : MSA_2RF_FMT<0b110010000, 0b0, 0b011110>;
263 class FCLASS_D_ENC : MSA_2RF_FMT<0b110010000, 0b1, 0b011110>;
265 class FCLE_W_ENC : MSA_3RF_FMT<0b0110, 0b0, 0b011010>;
266 class FCLE_D_ENC : MSA_3RF_FMT<0b0110, 0b1, 0b011010>;
268 class FCLT_W_ENC : MSA_3RF_FMT<0b0100, 0b0, 0b011010>;
269 class FCLT_D_ENC : MSA_3RF_FMT<0b0100, 0b1, 0b011010>;
271 class FCNE_W_ENC : MSA_3RF_FMT<0b0011, 0b0, 0b011010>;
272 class FCNE_D_ENC : MSA_3RF_FMT<0b0011, 0b1, 0b011010>;
274 class FCUN_W_ENC : MSA_3RF_FMT<0b0001, 0b0, 0b011010>;
275 class FCUN_D_ENC : MSA_3RF_FMT<0b0001, 0b1, 0b011010>;
277 class FDIV_W_ENC : MSA_3RF_FMT<0b0011, 0b0, 0b011011>;
278 class FDIV_D_ENC : MSA_3RF_FMT<0b0011, 0b1, 0b011011>;
280 class FEXDO_H_ENC : MSA_3RF_FMT<0b1000, 0b0, 0b011011>;
281 class FEXDO_W_ENC : MSA_3RF_FMT<0b1000, 0b1, 0b011011>;
283 class FEXP2_W_ENC : MSA_3RF_FMT<0b0111, 0b0, 0b011011>;
284 class FEXP2_D_ENC : MSA_3RF_FMT<0b0111, 0b1, 0b011011>;
286 class FEXUPL_W_ENC : MSA_2RF_FMT<0b110011000, 0b0, 0b011110>;
287 class FEXUPL_D_ENC : MSA_2RF_FMT<0b110011000, 0b1, 0b011110>;
289 class FEXUPR_W_ENC : MSA_2RF_FMT<0b110011001, 0b0, 0b011110>;
290 class FEXUPR_D_ENC : MSA_2RF_FMT<0b110011001, 0b1, 0b011110>;
292 class FFINT_S_W_ENC : MSA_2RF_FMT<0b110011110, 0b0, 0b011110>;
293 class FFINT_S_D_ENC : MSA_2RF_FMT<0b110011110, 0b1, 0b011110>;
295 class FFINT_U_W_ENC : MSA_2RF_FMT<0b110011111, 0b0, 0b011110>;
296 class FFINT_U_D_ENC : MSA_2RF_FMT<0b110011111, 0b1, 0b011110>;
298 class FFQL_W_ENC : MSA_2RF_FMT<0b110011010, 0b0, 0b011110>;
299 class FFQL_D_ENC : MSA_2RF_FMT<0b110011010, 0b1, 0b011110>;
301 class FFQR_W_ENC : MSA_2RF_FMT<0b110011011, 0b0, 0b011110>;
302 class FFQR_D_ENC : MSA_2RF_FMT<0b110011011, 0b1, 0b011110>;
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>;
308 class FLOG2_W_ENC : MSA_2RF_FMT<0b110010111, 0b0, 0b011110>;
309 class FLOG2_D_ENC : MSA_2RF_FMT<0b110010111, 0b1, 0b011110>;
311 class FMADD_W_ENC : MSA_3RF_FMT<0b0100, 0b0, 0b011011>;
312 class FMADD_D_ENC : MSA_3RF_FMT<0b0100, 0b1, 0b011011>;
314 class FMAX_W_ENC : MSA_3RF_FMT<0b1110, 0b0, 0b011011>;
315 class FMAX_D_ENC : MSA_3RF_FMT<0b1110, 0b1, 0b011011>;
317 class FMAX_A_W_ENC : MSA_3RF_FMT<0b1111, 0b0, 0b011011>;
318 class FMAX_A_D_ENC : MSA_3RF_FMT<0b1111, 0b1, 0b011011>;
320 class FMIN_W_ENC : MSA_3RF_FMT<0b1100, 0b0, 0b011011>;
321 class FMIN_D_ENC : MSA_3RF_FMT<0b1100, 0b1, 0b011011>;
323 class FMIN_A_W_ENC : MSA_3RF_FMT<0b1101, 0b0, 0b011011>;
324 class FMIN_A_D_ENC : MSA_3RF_FMT<0b1101, 0b1, 0b011011>;
326 class FMSUB_W_ENC : MSA_3RF_FMT<0b0101, 0b0, 0b011011>;
327 class FMSUB_D_ENC : MSA_3RF_FMT<0b0101, 0b1, 0b011011>;
329 class FMUL_W_ENC : MSA_3RF_FMT<0b0010, 0b0, 0b011011>;
330 class FMUL_D_ENC : MSA_3RF_FMT<0b0010, 0b1, 0b011011>;
332 class FRINT_W_ENC : MSA_2RF_FMT<0b110010110, 0b0, 0b011110>;
333 class FRINT_D_ENC : MSA_2RF_FMT<0b110010110, 0b1, 0b011110>;
335 class FRCP_W_ENC : MSA_2RF_FMT<0b110010101, 0b0, 0b011110>;
336 class FRCP_D_ENC : MSA_2RF_FMT<0b110010101, 0b1, 0b011110>;
338 class FRSQRT_W_ENC : MSA_2RF_FMT<0b110010100, 0b0, 0b011110>;
339 class FRSQRT_D_ENC : MSA_2RF_FMT<0b110010100, 0b1, 0b011110>;
341 class FSEQ_W_ENC : MSA_3RF_FMT<0b1010, 0b0, 0b011010>;
342 class FSEQ_D_ENC : MSA_3RF_FMT<0b1010, 0b1, 0b011010>;
344 class FSGE_W_ENC : MSA_3RF_FMT<0b1101, 0b0, 0b011010>;
345 class FSGE_D_ENC : MSA_3RF_FMT<0b1101, 0b1, 0b011010>;
347 class FSGT_W_ENC : MSA_3RF_FMT<0b1111, 0b0, 0b011010>;
348 class FSGT_D_ENC : MSA_3RF_FMT<0b1111, 0b1, 0b011010>;
350 class FSLE_W_ENC : MSA_3RF_FMT<0b1110, 0b0, 0b011010>;
351 class FSLE_D_ENC : MSA_3RF_FMT<0b1110, 0b1, 0b011010>;
353 class FSLT_W_ENC : MSA_3RF_FMT<0b1100, 0b0, 0b011010>;
354 class FSLT_D_ENC : MSA_3RF_FMT<0b1100, 0b1, 0b011010>;
356 class FSNE_W_ENC : MSA_3RF_FMT<0b1011, 0b0, 0b011010>;
357 class FSNE_D_ENC : MSA_3RF_FMT<0b1011, 0b1, 0b011010>;
359 class FSQRT_W_ENC : MSA_2RF_FMT<0b110010011, 0b0, 0b011110>;
360 class FSQRT_D_ENC : MSA_2RF_FMT<0b110010011, 0b1, 0b011110>;
362 class FSUB_W_ENC : MSA_3RF_FMT<0b0001, 0b0, 0b011011>;
363 class FSUB_D_ENC : MSA_3RF_FMT<0b0001, 0b1, 0b011011>;
365 class FTINT_S_W_ENC : MSA_2RF_FMT<0b110011100, 0b0, 0b011110>;
366 class FTINT_S_D_ENC : MSA_2RF_FMT<0b110011100, 0b1, 0b011110>;
368 class FTINT_U_W_ENC : MSA_2RF_FMT<0b110011101, 0b0, 0b011110>;
369 class FTINT_U_D_ENC : MSA_2RF_FMT<0b110011101, 0b1, 0b011110>;
371 class FTQ_H_ENC : MSA_3RF_FMT<0b1010, 0b0, 0b011011>;
372 class FTQ_W_ENC : MSA_3RF_FMT<0b1010, 0b1, 0b011011>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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;
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>;
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;
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";
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>;
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>;
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,
560 InstrItinClass Itinerary = itin;
561 string Constraints = "$wd = $wd_in";
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;
573 class ADDS_A_B_DESC : MSA_3R_DESC_BASE<"adds_a.b", int_mips_adds_a_b,
574 NoItinerary, MSA128, MSA128>,
576 class ADDS_A_H_DESC : MSA_3R_DESC_BASE<"adds_a.h", int_mips_adds_a_h,
577 NoItinerary, MSA128, MSA128>,
579 class ADDS_A_W_DESC : MSA_3R_DESC_BASE<"adds_a.w", int_mips_adds_a_w,
580 NoItinerary, MSA128, MSA128>,
582 class ADDS_A_D_DESC : MSA_3R_DESC_BASE<"adds_a.d", int_mips_adds_a_d,
583 NoItinerary, MSA128, MSA128>,
586 class ADDS_S_B_DESC : MSA_3R_DESC_BASE<"adds_s.b", int_mips_adds_s_b,
587 NoItinerary, MSA128, MSA128>,
589 class ADDS_S_H_DESC : MSA_3R_DESC_BASE<"adds_s.h", int_mips_adds_s_h,
590 NoItinerary, MSA128, MSA128>,
592 class ADDS_S_W_DESC : MSA_3R_DESC_BASE<"adds_s.w", int_mips_adds_s_w,
593 NoItinerary, MSA128, MSA128>,
595 class ADDS_S_D_DESC : MSA_3R_DESC_BASE<"adds_s.d", int_mips_adds_s_d,
596 NoItinerary, MSA128, MSA128>,
599 class ADDS_U_B_DESC : MSA_3R_DESC_BASE<"adds_u.b", int_mips_adds_u_b,
600 NoItinerary, MSA128, MSA128>,
602 class ADDS_U_H_DESC : MSA_3R_DESC_BASE<"adds_u.h", int_mips_adds_u_h,
603 NoItinerary, MSA128, MSA128>,
605 class ADDS_U_W_DESC : MSA_3R_DESC_BASE<"adds_u.w", int_mips_adds_u_w,
606 NoItinerary, MSA128, MSA128>,
608 class ADDS_U_D_DESC : MSA_3R_DESC_BASE<"adds_u.d", int_mips_adds_u_d,
609 NoItinerary, MSA128, MSA128>,
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;
621 class ADDVI_B_DESC : MSA_I5_DESC_BASE<"addvi.b", int_mips_addvi_b, NoItinerary,
623 class ADDVI_H_DESC : MSA_I5_DESC_BASE<"addvi.h", int_mips_addvi_h, NoItinerary,
625 class ADDVI_W_DESC : MSA_I5_DESC_BASE<"addvi.w", int_mips_addvi_w, NoItinerary,
627 class ADDVI_D_DESC : MSA_I5_DESC_BASE<"addvi.d", int_mips_addvi_d, NoItinerary,
630 class ANDI_B_DESC : MSA_I8_DESC_BASE<"andi.b", int_mips_andi_b, NoItinerary,
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>;
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>;
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;
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;
669 class AVER_S_B_DESC : MSA_3R_DESC_BASE<"aver_s.b", int_mips_aver_s_b,
670 NoItinerary, MSA128, MSA128>,
672 class AVER_S_H_DESC : MSA_3R_DESC_BASE<"aver_s.h", int_mips_aver_s_h,
673 NoItinerary, MSA128, MSA128>,
675 class AVER_S_W_DESC : MSA_3R_DESC_BASE<"aver_s.w", int_mips_aver_s_w,
676 NoItinerary, MSA128, MSA128>,
678 class AVER_S_D_DESC : MSA_3R_DESC_BASE<"aver_s.d", int_mips_aver_s_d,
679 NoItinerary, MSA128, MSA128>,
682 class AVER_U_B_DESC : MSA_3R_DESC_BASE<"aver_u.b", int_mips_aver_u_b,
683 NoItinerary, MSA128, MSA128>,
685 class AVER_U_H_DESC : MSA_3R_DESC_BASE<"aver_u.h", int_mips_aver_u_h,
686 NoItinerary, MSA128, MSA128>,
688 class AVER_U_W_DESC : MSA_3R_DESC_BASE<"aver_u.w", int_mips_aver_u_w,
689 NoItinerary, MSA128, MSA128>,
691 class AVER_U_D_DESC : MSA_3R_DESC_BASE<"aver_u.d", int_mips_aver_u_d,
692 NoItinerary, MSA128, MSA128>,
695 class BCLR_B_DESC : MSA_3R_DESC_BASE<"bclr.b", int_mips_bclr_b, NoItinerary,
697 class BCLR_H_DESC : MSA_3R_DESC_BASE<"bclr.h", int_mips_bclr_h, NoItinerary,
699 class BCLR_W_DESC : MSA_3R_DESC_BASE<"bclr.w", int_mips_bclr_w, NoItinerary,
701 class BCLR_D_DESC : MSA_3R_DESC_BASE<"bclr.d", int_mips_bclr_d, NoItinerary,
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>;
713 class BINSL_B_DESC : MSA_3R_DESC_BASE<"binsl.b", int_mips_binsl_b, NoItinerary,
715 class BINSL_H_DESC : MSA_3R_DESC_BASE<"binsl.h", int_mips_binsl_h, NoItinerary,
717 class BINSL_W_DESC : MSA_3R_DESC_BASE<"binsl.w", int_mips_binsl_w, NoItinerary,
719 class BINSL_D_DESC : MSA_3R_DESC_BASE<"binsl.d", int_mips_binsl_d, NoItinerary,
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>;
731 class BINSR_B_DESC : MSA_3R_DESC_BASE<"binsr.b", int_mips_binsr_b, NoItinerary,
733 class BINSR_H_DESC : MSA_3R_DESC_BASE<"binsr.h", int_mips_binsr_h, NoItinerary,
735 class BINSR_W_DESC : MSA_3R_DESC_BASE<"binsr.w", int_mips_binsr_w, NoItinerary,
737 class BINSR_D_DESC : MSA_3R_DESC_BASE<"binsr.d", int_mips_binsr_d, NoItinerary,
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>;
749 class BMNZI_B_DESC : MSA_I8_DESC_BASE<"bmnzi.b", int_mips_bmnzi_b, NoItinerary,
752 class BMZI_B_DESC : MSA_I8_DESC_BASE<"bmzi.b", int_mips_bmzi_b, NoItinerary,
755 class BNEG_B_DESC : MSA_3R_DESC_BASE<"bneg.b", int_mips_bneg_b, NoItinerary,
757 class BNEG_H_DESC : MSA_3R_DESC_BASE<"bneg.h", int_mips_bneg_h, NoItinerary,
759 class BNEG_W_DESC : MSA_3R_DESC_BASE<"bneg.w", int_mips_bneg_w, NoItinerary,
761 class BNEG_D_DESC : MSA_3R_DESC_BASE<"bneg.d", int_mips_bneg_d, NoItinerary,
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>;
773 class BSELI_B_DESC : MSA_I8_DESC_BASE<"bseli.b", int_mips_bseli_b, NoItinerary,
776 class BSET_B_DESC : MSA_3R_DESC_BASE<"bset.b", int_mips_bset_b, NoItinerary,
778 class BSET_H_DESC : MSA_3R_DESC_BASE<"bset.h", int_mips_bset_h, NoItinerary,
780 class BSET_W_DESC : MSA_3R_DESC_BASE<"bset.w", int_mips_bset_w, NoItinerary,
782 class BSET_D_DESC : MSA_3R_DESC_BASE<"bset.d", int_mips_bset_d, NoItinerary,
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>;
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;
803 class CEQI_B_DESC : MSA_SI5_DESC_BASE<"ceqi.b", int_mips_ceqi_b, NoItinerary,
805 class CEQI_H_DESC : MSA_SI5_DESC_BASE<"ceqi.h", int_mips_ceqi_h, NoItinerary,
807 class CEQI_W_DESC : MSA_SI5_DESC_BASE<"ceqi.w", int_mips_ceqi_w, NoItinerary,
809 class CEQI_D_DESC : MSA_SI5_DESC_BASE<"ceqi.d", int_mips_ceqi_d, NoItinerary,
812 class CLE_S_B_DESC : MSA_3R_DESC_BASE<"cle_s.b", int_mips_cle_s_b, NoItinerary,
814 class CLE_S_H_DESC : MSA_3R_DESC_BASE<"cle_s.h", int_mips_cle_s_h, NoItinerary,
816 class CLE_S_W_DESC : MSA_3R_DESC_BASE<"cle_s.w", int_mips_cle_s_w, NoItinerary,
818 class CLE_S_D_DESC : MSA_3R_DESC_BASE<"cle_s.d", int_mips_cle_s_d, NoItinerary,
821 class CLE_U_B_DESC : MSA_3R_DESC_BASE<"cle_u.b", int_mips_cle_u_b, NoItinerary,
823 class CLE_U_H_DESC : MSA_3R_DESC_BASE<"cle_u.h", int_mips_cle_u_h, NoItinerary,
825 class CLE_U_W_DESC : MSA_3R_DESC_BASE<"cle_u.w", int_mips_cle_u_w, NoItinerary,
827 class CLE_U_D_DESC : MSA_3R_DESC_BASE<"cle_u.d", int_mips_cle_u_d, NoItinerary,
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>;
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>;
848 class CLT_S_B_DESC : MSA_3R_DESC_BASE<"clt_s.b", int_mips_clt_s_b, NoItinerary,
850 class CLT_S_H_DESC : MSA_3R_DESC_BASE<"clt_s.h", int_mips_clt_s_h, NoItinerary,
852 class CLT_S_W_DESC : MSA_3R_DESC_BASE<"clt_s.w", int_mips_clt_s_w, NoItinerary,
854 class CLT_S_D_DESC : MSA_3R_DESC_BASE<"clt_s.d", int_mips_clt_s_d, NoItinerary,
857 class CLT_U_B_DESC : MSA_3R_DESC_BASE<"clt_u.b", int_mips_clt_u_b, NoItinerary,
859 class CLT_U_H_DESC : MSA_3R_DESC_BASE<"clt_u.h", int_mips_clt_u_h, NoItinerary,
861 class CLT_U_W_DESC : MSA_3R_DESC_BASE<"clt_u.w", int_mips_clt_u_w, NoItinerary,
863 class CLT_U_D_DESC : MSA_3R_DESC_BASE<"clt_u.d", int_mips_clt_u_d, NoItinerary,
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>;
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>;
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>;
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>;
898 class DIV_S_B_DESC : MSA_3R_DESC_BASE<"div_s.b", int_mips_div_s_b, NoItinerary,
900 class DIV_S_H_DESC : MSA_3R_DESC_BASE<"div_s.h", int_mips_div_s_h, NoItinerary,
902 class DIV_S_W_DESC : MSA_3R_DESC_BASE<"div_s.w", int_mips_div_s_w, NoItinerary,
904 class DIV_S_D_DESC : MSA_3R_DESC_BASE<"div_s.d", int_mips_div_s_d, NoItinerary,
907 class DIV_U_B_DESC : MSA_3R_DESC_BASE<"div_u.b", int_mips_div_u_b, NoItinerary,
909 class DIV_U_H_DESC : MSA_3R_DESC_BASE<"div_u.h", int_mips_div_u_h, NoItinerary,
911 class DIV_U_W_DESC : MSA_3R_DESC_BASE<"div_u.w", int_mips_div_u_w, NoItinerary,
913 class DIV_U_D_DESC : MSA_3R_DESC_BASE<"div_u.d", int_mips_div_u_d, NoItinerary,
916 class DOTP_S_B_DESC : MSA_3R_DESC_BASE<"dotp_s.b", int_mips_dotp_s_b,
917 NoItinerary, MSA128, MSA128>,
919 class DOTP_S_H_DESC : MSA_3R_DESC_BASE<"dotp_s.h", int_mips_dotp_s_h,
920 NoItinerary, MSA128, MSA128>,
922 class DOTP_S_W_DESC : MSA_3R_DESC_BASE<"dotp_s.w", int_mips_dotp_s_w,
923 NoItinerary, MSA128, MSA128>,
925 class DOTP_S_D_DESC : MSA_3R_DESC_BASE<"dotp_s.d", int_mips_dotp_s_d,
926 NoItinerary, MSA128, MSA128>,
929 class DOTP_U_B_DESC : MSA_3R_DESC_BASE<"dotp_u.b", int_mips_dotp_u_b,
930 NoItinerary, MSA128, MSA128>,
932 class DOTP_U_H_DESC : MSA_3R_DESC_BASE<"dotp_u.h", int_mips_dotp_u_h,
933 NoItinerary, MSA128, MSA128>,
935 class DOTP_U_W_DESC : MSA_3R_DESC_BASE<"dotp_u.w", int_mips_dotp_u_w,
936 NoItinerary, MSA128, MSA128>,
938 class DOTP_U_D_DESC : MSA_3R_DESC_BASE<"dotp_u.d", int_mips_dotp_u_d,
939 NoItinerary, MSA128, MSA128>,
942 class DPADD_S_H_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.h", int_mips_dpadd_s_h,
943 NoItinerary, MSA128, MSA128>,
945 class DPADD_S_W_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.w", int_mips_dpadd_s_w,
946 NoItinerary, MSA128, MSA128>,
948 class DPADD_S_D_DESC : MSA_3R_4R_DESC_BASE<"dpadd_s.d", int_mips_dpadd_s_d,
949 NoItinerary, MSA128, MSA128>,
952 class DPADD_U_H_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.h", int_mips_dpadd_u_h,
953 NoItinerary, MSA128, MSA128>,
955 class DPADD_U_W_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.w", int_mips_dpadd_u_w,
956 NoItinerary, MSA128, MSA128>,
958 class DPADD_U_D_DESC : MSA_3R_4R_DESC_BASE<"dpadd_u.d", int_mips_dpadd_u_d,
959 NoItinerary, MSA128, MSA128>,
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>;
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>;
976 class FADD_W_DESC : MSA_3RF_DESC_BASE<"fadd.w", int_mips_fadd_w,
977 NoItinerary, MSA128, MSA128>,
979 class FADD_D_DESC : MSA_3RF_DESC_BASE<"fadd.d", int_mips_fadd_d,
980 NoItinerary, MSA128, MSA128>,
983 class FCEQ_W_DESC : MSA_3RF_DESC_BASE<"fceq.w", int_mips_fceq_w,
984 NoItinerary, MSA128, MSA128>,
986 class FCEQ_D_DESC : MSA_3RF_DESC_BASE<"fceq.d", int_mips_fceq_d,
987 NoItinerary, MSA128, MSA128>,
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>;
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>;
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>;
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>;
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>;
1015 class FCNE_W_DESC : MSA_3RF_DESC_BASE<"fcne.w", int_mips_fcne_w,
1016 NoItinerary, MSA128, MSA128>,
1018 class FCNE_D_DESC : MSA_3RF_DESC_BASE<"fcne.d", int_mips_fcne_d,
1019 NoItinerary, MSA128, MSA128>,
1022 class FCUN_W_DESC : MSA_3RF_DESC_BASE<"fcun.w", int_mips_fcun_w,
1023 NoItinerary, MSA128, MSA128>,
1025 class FCUN_D_DESC : MSA_3RF_DESC_BASE<"fcun.d", int_mips_fcun_d,
1026 NoItinerary, MSA128, MSA128>,
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
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>;
1191 class ILVEV_B_DESC : MSA_3R_DESC_BASE<"ilvev.b", int_mips_ilvev_b, NoItinerary,
1193 class ILVEV_H_DESC : MSA_3R_DESC_BASE<"ilvev.h", int_mips_ilvev_h, NoItinerary,
1195 class ILVEV_W_DESC : MSA_3R_DESC_BASE<"ilvev.w", int_mips_ilvev_w, NoItinerary,
1197 class ILVEV_D_DESC : MSA_3R_DESC_BASE<"ilvev.d", int_mips_ilvev_d, NoItinerary,
1200 class ILVL_B_DESC : MSA_3R_DESC_BASE<"ilvl.b", int_mips_ilvl_b, NoItinerary,
1202 class ILVL_H_DESC : MSA_3R_DESC_BASE<"ilvl.h", int_mips_ilvl_h, NoItinerary,
1204 class ILVL_W_DESC : MSA_3R_DESC_BASE<"ilvl.w", int_mips_ilvl_w, NoItinerary,
1206 class ILVL_D_DESC : MSA_3R_DESC_BASE<"ilvl.d", int_mips_ilvl_d, NoItinerary,
1209 class ILVOD_B_DESC : MSA_3R_DESC_BASE<"ilvod.b", int_mips_ilvod_b, NoItinerary,
1211 class ILVOD_H_DESC : MSA_3R_DESC_BASE<"ilvod.h", int_mips_ilvod_h, NoItinerary,
1213 class ILVOD_W_DESC : MSA_3R_DESC_BASE<"ilvod.w", int_mips_ilvod_w, NoItinerary,
1215 class ILVOD_D_DESC : MSA_3R_DESC_BASE<"ilvod.d", int_mips_ilvod_d, NoItinerary,
1218 class ILVR_B_DESC : MSA_3R_DESC_BASE<"ilvr.b", int_mips_ilvr_b, NoItinerary,
1220 class ILVR_H_DESC : MSA_3R_DESC_BASE<"ilvr.h", int_mips_ilvr_h, NoItinerary,
1222 class ILVR_W_DESC : MSA_3R_DESC_BASE<"ilvr.w", int_mips_ilvr_w, NoItinerary,
1224 class ILVR_D_DESC : MSA_3R_DESC_BASE<"ilvr.d", int_mips_ilvr_d, NoItinerary,
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>;
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;
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>;
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>;
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;
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>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
1305 def ANDI_B : ANDI_B_ENC, ANDI_B_DESC, Requires<[HasMSA]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
1367 def BMNZI_B : BMNZI_B_ENC, BMNZI_B_DESC, Requires<[HasMSA]>;
1369 def BMZI_B : BMZI_B_ENC, BMZI_B_DESC, Requires<[HasMSA]>;
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]>;
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]>;
1381 def BSELI_B : BSELI_B_ENC, BSELI_B_DESC, Requires<[HasMSA]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
1487 def FADD_W : FADD_W_ENC, FADD_W_DESC, Requires<[HasMSA]>;
1488 def FADD_D : FADD_D_ENC, FADD_D_DESC, Requires<[HasMSA]>;
1490 def FCEQ_W : FCEQ_W_ENC, FCEQ_W_DESC, Requires<[HasMSA]>;
1491 def FCEQ_D : FCEQ_D_ENC, FCEQ_D_DESC, Requires<[HasMSA]>;
1493 def FCLE_W : FCLE_W_ENC, FCLE_W_DESC, Requires<[HasMSA]>;
1494 def FCLE_D : FCLE_D_ENC, FCLE_D_DESC, Requires<[HasMSA]>;
1496 def FCLT_W : FCLT_W_ENC, FCLT_W_DESC, Requires<[HasMSA]>;
1497 def FCLT_D : FCLT_D_ENC, FCLT_D_DESC, Requires<[HasMSA]>;
1499 def FCLASS_W : FCLASS_W_ENC, FCLASS_W_DESC, Requires<[HasMSA]>;
1500 def FCLASS_D : FCLASS_D_ENC, FCLASS_D_DESC, Requires<[HasMSA]>;
1502 def FCGE_W : FCGE_W_ENC, FCGE_W_DESC, Requires<[HasMSA]>;
1503 def FCGE_D : FCGE_D_ENC, FCGE_D_DESC, Requires<[HasMSA]>;
1505 def FCGT_W : FCGT_W_ENC, FCGT_W_DESC, Requires<[HasMSA]>;
1506 def FCGT_D : FCGT_D_ENC, FCGT_D_DESC, Requires<[HasMSA]>;
1508 def FCNE_W : FCNE_W_ENC, FCNE_W_DESC, Requires<[HasMSA]>;
1509 def FCNE_D : FCNE_D_ENC, FCNE_D_DESC, Requires<[HasMSA]>;
1511 def FCUN_W : FCUN_W_ENC, FCUN_W_DESC, Requires<[HasMSA]>;
1512 def FCUN_D : FCUN_D_ENC, FCUN_D_DESC, Requires<[HasMSA]>;
1514 def FDIV_W : FDIV_W_ENC, FDIV_W_DESC, Requires<[HasMSA]>;
1515 def FDIV_D : FDIV_D_ENC, FDIV_D_DESC, Requires<[HasMSA]>;
1517 def FEXDO_H : FEXDO_H_ENC, FEXDO_H_DESC, Requires<[HasMSA]>;
1518 def FEXDO_W : FEXDO_W_ENC, FEXDO_W_DESC, Requires<[HasMSA]>;
1520 def FEXP2_W : FEXP2_W_ENC, FEXP2_W_DESC, Requires<[HasMSA]>;
1521 def FEXP2_D : FEXP2_D_ENC, FEXP2_D_DESC, Requires<[HasMSA]>;
1523 def FEXUPL_W : FEXUPL_W_ENC, FEXUPL_W_DESC, Requires<[HasMSA]>;
1524 def FEXUPL_D : FEXUPL_D_ENC, FEXUPL_D_DESC, Requires<[HasMSA]>;
1526 def FEXUPR_W : FEXUPR_W_ENC, FEXUPR_W_DESC, Requires<[HasMSA]>;
1527 def FEXUPR_D : FEXUPR_D_ENC, FEXUPR_D_DESC, Requires<[HasMSA]>;
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]>;
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]>;
1535 def FFQL_W : FFQL_W_ENC, FFQL_W_DESC, Requires<[HasMSA]>;
1536 def FFQL_D : FFQL_D_ENC, FFQL_D_DESC, Requires<[HasMSA]>;
1538 def FFQR_W : FFQR_W_ENC, FFQR_W_DESC, Requires<[HasMSA]>;
1539 def FFQR_D : FFQR_D_ENC, FFQR_D_DESC, Requires<[HasMSA]>;
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]>;
1545 def FLOG2_W : FLOG2_W_ENC, FLOG2_W_DESC, Requires<[HasMSA]>;
1546 def FLOG2_D : FLOG2_D_ENC, FLOG2_D_DESC, Requires<[HasMSA]>;
1548 def FMADD_W : FMADD_W_ENC, FMADD_W_DESC, Requires<[HasMSA]>;
1549 def FMADD_D : FMADD_D_ENC, FMADD_D_DESC, Requires<[HasMSA]>;
1551 def FMAX_W : FMAX_W_ENC, FMAX_W_DESC, Requires<[HasMSA]>;
1552 def FMAX_D : FMAX_D_ENC, FMAX_D_DESC, Requires<[HasMSA]>;
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]>;
1557 def FMIN_W : FMIN_W_ENC, FMIN_W_DESC, Requires<[HasMSA]>;
1558 def FMIN_D : FMIN_D_ENC, FMIN_D_DESC, Requires<[HasMSA]>;
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]>;
1563 def FMSUB_W : FMSUB_W_ENC, FMSUB_W_DESC, Requires<[HasMSA]>;
1564 def FMSUB_D : FMSUB_D_ENC, FMSUB_D_DESC, Requires<[HasMSA]>;
1566 def FMUL_W : FMUL_W_ENC, FMUL_W_DESC, Requires<[HasMSA]>;
1567 def FMUL_D : FMUL_D_ENC, FMUL_D_DESC, Requires<[HasMSA]>;
1569 def FRINT_W : FRINT_W_ENC, FRINT_W_DESC, Requires<[HasMSA]>;
1570 def FRINT_D : FRINT_D_ENC, FRINT_D_DESC, Requires<[HasMSA]>;
1572 def FRCP_W : FRCP_W_ENC, FRCP_W_DESC, Requires<[HasMSA]>;
1573 def FRCP_D : FRCP_D_ENC, FRCP_D_DESC, Requires<[HasMSA]>;
1575 def FRSQRT_W : FRSQRT_W_ENC, FRSQRT_W_DESC, Requires<[HasMSA]>;
1576 def FRSQRT_D : FRSQRT_D_ENC, FRSQRT_D_DESC, Requires<[HasMSA]>;
1578 def FSEQ_W : FSEQ_W_ENC, FSEQ_W_DESC, Requires<[HasMSA]>;
1579 def FSEQ_D : FSEQ_D_ENC, FSEQ_D_DESC, Requires<[HasMSA]>;
1581 def FSLE_W : FSLE_W_ENC, FSLE_W_DESC, Requires<[HasMSA]>;
1582 def FSLE_D : FSLE_D_ENC, FSLE_D_DESC, Requires<[HasMSA]>;
1584 def FSLT_W : FSLT_W_ENC, FSLT_W_DESC, Requires<[HasMSA]>;
1585 def FSLT_D : FSLT_D_ENC, FSLT_D_DESC, Requires<[HasMSA]>;
1587 def FSGE_W : FSGE_W_ENC, FSGE_W_DESC, Requires<[HasMSA]>;
1588 def FSGE_D : FSGE_D_ENC, FSGE_D_DESC, Requires<[HasMSA]>;
1590 def FSGT_W : FSGT_W_ENC, FSGT_W_DESC, Requires<[HasMSA]>;
1591 def FSGT_D : FSGT_D_ENC, FSGT_D_DESC, Requires<[HasMSA]>;
1593 def FSNE_W : FSNE_W_ENC, FSNE_W_DESC, Requires<[HasMSA]>;
1594 def FSNE_D : FSNE_D_ENC, FSNE_D_DESC, Requires<[HasMSA]>;
1596 def FSQRT_W : FSQRT_W_ENC, FSQRT_W_DESC, Requires<[HasMSA]>;
1597 def FSQRT_D : FSQRT_D_ENC, FSQRT_D_DESC, Requires<[HasMSA]>;
1599 def FSUB_W : FSUB_W_ENC, FSUB_W_DESC, Requires<[HasMSA]>;
1600 def FSUB_D : FSUB_D_ENC, FSUB_D_DESC, Requires<[HasMSA]>;
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]>;
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]>;
1608 def FTQ_H : FTQ_H_ENC, FTQ_H_DESC, Requires<[HasMSA]>;
1609 def FTQ_W : FTQ_W_ENC, FTQ_W_DESC, Requires<[HasMSA]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
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]>;
1650 class MSAPat<dag pattern, dag result, Predicate pred = HasMSA> :
1651 Pat<pattern, result>, Requires<[pred]>;
1653 def LD_FH : MSAPat<(v8f16 (load addr:$addr)),
1655 def LD_FW : MSAPat<(v4f32 (load addr:$addr)),
1657 def LD_FD : MSAPat<(v2f64 (load addr:$addr)),
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)>;