1 //=======-- PPCInstrSPE.td - The PowerPC SPE Extension -*- 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 the Signal Processing Engine extension to
11 // the PowerPC instruction set.
13 //===----------------------------------------------------------------------===//
15 class EFXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
16 InstrItinClass itin, list<dag> pattern> :
17 I<4, OOL, IOL, asmstr, itin> {
22 let Pattern = pattern;
30 class EFXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
31 InstrItinClass itin, list<dag> pattern> :
32 EFXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
36 class EFXForm_2a<bits<11> xo, dag OOL, dag IOL, string asmstr,
37 InstrItinClass itin, list<dag> pattern> :
38 EFXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
42 class EFXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
43 InstrItinClass itin> :
44 I<4, OOL, IOL, asmstr, itin> {
56 class EVXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
57 InstrItinClass itin, list<dag> pattern> :
58 I<4, OOL, IOL, asmstr, itin> {
63 let Pattern = pattern;
71 class EVXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
72 InstrItinClass itin, list<dag> pattern> :
73 EVXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
77 class EVXForm_2a<bits<11> xo, dag OOL, dag IOL, string asmstr,
78 InstrItinClass itin, list<dag> pattern> :
79 EVXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
83 class EVXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
84 InstrItinClass itin, list<dag> pattern> :
85 I<4, OOL, IOL, asmstr, itin> {
90 let Pattern = pattern;
99 class EVXForm_4<bits<8> xo, dag OOL, dag IOL, string asmstr,
100 InstrItinClass itin, list<dag> pattern> :
101 I<4, OOL, IOL, asmstr, itin> {
107 let Pattern = pattern;
110 let Inst{11-15} = RA;
111 let Inst{16-20} = RB;
112 let Inst{21-28} = xo;
113 let Inst{29-31} = crD;
116 class EVXForm_D<bits<11> xo, dag OOL, dag IOL, string asmstr,
117 InstrItinClass itin, list<dag> pattern> :
118 I<4, OOL, IOL, asmstr, itin> {
122 let Pattern = pattern;
135 let Inst{11-20} = D{0-9};
136 let Inst{21-31} = xo;
139 let DecoderNamespace = "SPE", Predicates = [HasSPE] in {
141 def BRINC : EVXForm_1<527, (outs gprc:$RT), (ins gprc:$RA, gprc:$RB),
142 "brinc $RT, $RA, $RB", IIC_IntSimple, []>;
144 // Double-precision floating point
145 def EFDABS : EFXForm_2<740, (outs sperc:$RT), (ins sperc:$RA),
146 "efdabs $RT, $RA", IIC_FPDGeneral,
147 [(set f64:$RT, (fabs f64:$RA))]>;
149 def EFDADD : EFXForm_1<736, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
150 "efdadd $RT, $RA, $RB", IIC_FPAddSub,
151 [(set f64:$RT, (fadd f64:$RA, f64:$RB))]>;
153 def EFDCFS : EFXForm_2a<751, (outs sperc:$RT), (ins spe4rc:$RB),
154 "efdcfs $RT, $RB", IIC_FPDGeneral,
155 [(set f64:$RT, (fpextend f32:$RB))]>;
157 def EFDCFSF : EFXForm_2a<755, (outs sperc:$RT), (ins spe4rc:$RB),
158 "efdcfsf $RT, $RB", IIC_FPDGeneral, []>;
160 def EFDCFSI : EFXForm_2a<753, (outs sperc:$RT), (ins gprc:$RB),
161 "efdcfsi $RT, $RB", IIC_FPDGeneral,
162 [(set f64:$RT, (sint_to_fp i32:$RB))]>;
164 def EFDCFSID : EFXForm_2a<739, (outs sperc:$RT), (ins gprc:$RB),
165 "efdcfsid $RT, $RB", IIC_FPDGeneral,
168 def EFDCFUF : EFXForm_2a<754, (outs sperc:$RT), (ins spe4rc:$RB),
169 "efdcfuf $RT, $RB", IIC_FPDGeneral, []>;
171 def EFDCFUI : EFXForm_2a<752, (outs sperc:$RT), (ins gprc:$RB),
172 "efdcfui $RT, $RB", IIC_FPDGeneral,
173 [(set f64:$RT, (uint_to_fp i32:$RB))]>;
175 def EFDCFUID : EFXForm_2a<738, (outs sperc:$RT), (ins gprc:$RB),
176 "efdcfuid $RT, $RB", IIC_FPDGeneral,
179 let isCompare = 1 in {
180 def EFDCMPEQ : EFXForm_3<750, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
181 "efdcmpeq $crD, $RA, $RB", IIC_FPDGeneral>;
182 def EFDCMPGT : EFXForm_3<748, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
183 "efdcmpgt $crD, $RA, $RB", IIC_FPDGeneral>;
184 def EFDCMPLT : EFXForm_3<749, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
185 "efdcmplt $crD, $RA, $RB", IIC_FPDGeneral>;
188 def EFDCTSF : EFXForm_2a<759, (outs sperc:$RT), (ins spe4rc:$RB),
189 "efdctsf $RT, $RB", IIC_FPDGeneral, []>;
191 def EFDCTSI : EFXForm_2a<757, (outs gprc:$RT), (ins sperc:$RB),
192 "efdctsi $RT, $RB", IIC_FPDGeneral,
195 def EFDCTSIDZ : EFXForm_2a<747, (outs gprc:$RT), (ins sperc:$RB),
196 "efdctsidz $RT, $RB", IIC_FPDGeneral,
199 def EFDCTSIZ : EFXForm_2a<762, (outs gprc:$RT), (ins sperc:$RB),
200 "efdctsiz $RT, $RB", IIC_FPDGeneral,
201 [(set i32:$RT, (fp_to_sint f64:$RB))]>;
203 def EFDCTUF : EFXForm_2a<758, (outs sperc:$RT), (ins spe4rc:$RB),
204 "efdctuf $RT, $RB", IIC_FPDGeneral, []>;
206 def EFDCTUI : EFXForm_2a<756, (outs gprc:$RT), (ins sperc:$RB),
207 "efdctui $RT, $RB", IIC_FPDGeneral,
210 def EFDCTUIDZ : EFXForm_2a<746, (outs gprc:$RT), (ins sperc:$RB),
211 "efdctuidz $RT, $RB", IIC_FPDGeneral,
214 def EFDCTUIZ : EFXForm_2a<760, (outs gprc:$RT), (ins sperc:$RB),
215 "efdctuiz $RT, $RB", IIC_FPDGeneral,
216 [(set i32:$RT, (fp_to_uint f64:$RB))]>;
218 def EFDDIV : EFXForm_1<745, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
219 "efddiv $RT, $RA, $RB", IIC_FPDivD,
220 [(set f64:$RT, (fdiv f64:$RA, f64:$RB))]>;
222 def EFDMUL : EFXForm_1<744, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
223 "efdmul $RT, $RA, $RB", IIC_FPDGeneral,
224 [(set f64:$RT, (fmul f64:$RA, f64:$RB))]>;
226 def EFDNABS : EFXForm_2<741, (outs sperc:$RT), (ins sperc:$RA),
227 "efdnabs $RT, $RA", IIC_FPDGeneral,
228 [(set f64:$RT, (fneg (fabs f64:$RA)))]>;
230 def EFDNEG : EFXForm_2<742, (outs sperc:$RT), (ins sperc:$RA),
231 "efdneg $RT, $RA", IIC_FPDGeneral,
232 [(set f64:$RT, (fneg f64:$RA))]>;
234 def EFDSUB : EFXForm_1<737, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
235 "efdsub $RT, $RA, $RB", IIC_FPDGeneral,
236 [(set f64:$RT, (fsub f64:$RA, f64:$RB))]>;
238 let isCompare = 1 in {
239 def EFDTSTEQ : EFXForm_3<766, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
240 "efdtsteq $crD, $RA, $RB", IIC_FPDGeneral>;
241 def EFDTSTGT : EFXForm_3<764, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
242 "efdtstgt $crD, $RA, $RB", IIC_FPDGeneral>;
243 def EFDTSTLT : EFXForm_3<765, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
244 "efdtstlt $crD, $RA, $RB", IIC_FPDGeneral>;
247 // Single-precision floating point
248 def EFSABS : EFXForm_2<708, (outs spe4rc:$RT), (ins spe4rc:$RA),
249 "efsabs $RT, $RA", IIC_FPSGeneral,
250 [(set f32:$RT, (fabs f32:$RA))]>;
252 def EFSADD : EFXForm_1<704, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
253 "efsadd $RT, $RA, $RB", IIC_FPAddSub,
254 [(set f32:$RT, (fadd f32:$RA, f32:$RB))]>;
256 def EFSCFD : EFXForm_2a<719, (outs spe4rc:$RT), (ins sperc:$RB),
257 "efscfd $RT, $RB", IIC_FPSGeneral,
258 [(set f32:$RT, (fpround f64:$RB))]>;
260 def EFSCFSF : EFXForm_2a<723, (outs spe4rc:$RT), (ins spe4rc:$RB),
261 "efscfsf $RT, $RB", IIC_FPSGeneral, []>;
263 def EFSCFSI : EFXForm_2a<721, (outs spe4rc:$RT), (ins gprc:$RB),
264 "efscfsi $RT, $RB", IIC_FPSGeneral,
265 [(set f32:$RT, (sint_to_fp i32:$RB))]>;
267 def EFSCFUF : EFXForm_2a<722, (outs spe4rc:$RT), (ins spe4rc:$RB),
268 "efscfuf $RT, $RB", IIC_FPSGeneral, []>;
270 def EFSCFUI : EFXForm_2a<720, (outs spe4rc:$RT), (ins gprc:$RB),
271 "efscfui $RT, $RB", IIC_FPSGeneral,
272 [(set f32:$RT, (uint_to_fp i32:$RB))]>;
274 let isCompare = 1 in {
275 def EFSCMPEQ : EFXForm_3<718, (outs crrc:$crD), (ins spe4rc:$RA, spe4rc:$RB),
276 "efscmpeq $crD, $RA, $RB", IIC_FPCompare>;
277 def EFSCMPGT : EFXForm_3<716, (outs crrc:$crD), (ins spe4rc:$RA, spe4rc:$RB),
278 "efscmpgt $crD, $RA, $RB", IIC_FPCompare>;
279 def EFSCMPLT : EFXForm_3<717, (outs crrc:$crD), (ins spe4rc:$RA, spe4rc:$RB),
280 "efscmplt $crD, $RA, $RB", IIC_FPCompare>;
283 def EFSCTSF : EFXForm_2a<727, (outs spe4rc:$RT), (ins spe4rc:$RB),
284 "efsctsf $RT, $RB", IIC_FPSGeneral, []>;
286 def EFSCTSI : EFXForm_2a<725, (outs gprc:$RT), (ins spe4rc:$RB),
287 "efsctsi $RT, $RB", IIC_FPSGeneral,
290 def EFSCTSIZ : EFXForm_2a<730, (outs gprc:$RT), (ins spe4rc:$RB),
291 "efsctsiz $RT, $RB", IIC_FPSGeneral,
292 [(set i32:$RT, (fp_to_sint f32:$RB))]>;
294 def EFSCTUF : EFXForm_2a<726, (outs sperc:$RT), (ins spe4rc:$RB),
295 "efsctuf $RT, $RB", IIC_FPSGeneral, []>;
297 def EFSCTUI : EFXForm_2a<724, (outs gprc:$RT), (ins spe4rc:$RB),
298 "efsctui $RT, $RB", IIC_FPSGeneral,
301 def EFSCTUIZ : EFXForm_2a<728, (outs gprc:$RT), (ins spe4rc:$RB),
302 "efsctuiz $RT, $RB", IIC_FPSGeneral,
303 [(set i32:$RT, (fp_to_uint f32:$RB))]>;
305 def EFSDIV : EFXForm_1<713, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
306 "efsdiv $RT, $RA, $RB", IIC_FPDivD,
307 [(set f32:$RT, (fdiv f32:$RA, f32:$RB))]>;
309 def EFSMUL : EFXForm_1<712, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
310 "efsmul $RT, $RA, $RB", IIC_FPGeneral,
311 [(set f32:$RT, (fmul f32:$RA, f32:$RB))]>;
313 def EFSNABS : EFXForm_2<709, (outs spe4rc:$RT), (ins spe4rc:$RA),
314 "efsnabs $RT, $RA", IIC_FPGeneral,
315 [(set f32:$RT, (fneg (fabs f32:$RA)))]>;
317 def EFSNEG : EFXForm_2<710, (outs spe4rc:$RT), (ins spe4rc:$RA),
318 "efsneg $RT, $RA", IIC_FPGeneral,
319 [(set f32:$RT, (fneg f32:$RA))]>;
321 def EFSSUB : EFXForm_1<705, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
322 "efssub $RT, $RA, $RB", IIC_FPSGeneral,
323 [(set f32:$RT, (fsub f32:$RA, f32:$RB))]>;
325 let isCompare = 1 in {
326 def EFSTSTEQ : EFXForm_3<734, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
327 "efststeq $crD, $RA, $RB", IIC_FPCompare>;
328 def EFSTSTGT : EFXForm_3<732, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
329 "efststgt $crD, $RA, $RB", IIC_FPCompare>;
330 def EFSTSTLT : EFXForm_3<733, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
331 "efststlt $crD, $RA, $RB", IIC_FPCompare>;
334 // SPE Vector operations
336 def EVABS : EVXForm_2<520, (outs sperc:$RT), (ins sperc:$RA),
337 "evabs $RT, $RA", IIC_VecGeneral,
340 def EVADDIW : EVXForm_1<514, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
341 "evaddiw $RT, $RB, $RA", IIC_VecGeneral, []>;
342 def EVADDSMIAAW : EVXForm_2<1225, (outs sperc:$RT), (ins sperc:$RA),
343 "evaddsmiaaw $RT, $RA", IIC_VecComplex, []>;
344 def EVADDSSIAAW : EVXForm_2<1217, (outs sperc:$RT), (ins sperc:$RA),
345 "evaddssiaaw $RT, $RA", IIC_VecComplex, []>;
346 def EVADDUSIAAW : EVXForm_2<1216, (outs sperc:$RT), (ins sperc:$RA),
347 "evaddusiaaw $RT, $RA", IIC_VecComplex, []>;
348 def EVADDUMIAAW : EVXForm_2<1224, (outs sperc:$RT), (ins sperc:$RA),
349 "evaddumiaaw $RT, $RA", IIC_VecComplex, []>;
350 def EVADDW : EVXForm_1<512, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
351 "evaddw $RT, $RA, $RB", IIC_VecGeneral,
354 def EVAND : EVXForm_1<529, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
355 "evand $RT, $RA, $RB", IIC_VecGeneral,
357 def EVANDC : EVXForm_1<530, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
358 "evandc $RT, $RA, $RB", IIC_VecGeneral,
361 let isCompare = 1 in {
362 def EVCMPEQ : EVXForm_3<564, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
363 "evcmpeq $crD, $RA, $RB", IIC_VecGeneral, []>;
364 def EVCMPGTS : EVXForm_3<561, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
365 "evcmpgts $crD, $RA, $RB", IIC_VecGeneral, []>;
366 def EVCMPGTU : EVXForm_3<560, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
367 "evcmpgtu $crD, $RA, $RB", IIC_VecGeneral, []>;
368 def EVCMPLTS : EVXForm_3<563, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
369 "evcmplts $crD, $RA, $RB", IIC_VecGeneral, []>;
370 def EVCMPLTU : EVXForm_3<562, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
371 "evcmpltu $crD, $RA, $RB", IIC_VecGeneral, []>;
374 def EVCNTLSW : EVXForm_2<526, (outs sperc:$RT), (ins sperc:$RA),
375 "evcntlsw $RT, $RA", IIC_VecGeneral, []>;
376 def EVCNTLZW : EVXForm_2<525, (outs sperc:$RT), (ins sperc:$RA),
377 "evcntlzw $RT, $RA", IIC_VecGeneral,
380 def EVDIVWS : EVXForm_1<1222, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
381 "evdivws $RT, $RA, $RB", IIC_VecComplex,
383 def EVDIVWU : EVXForm_1<1223, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
384 "evdivwu $RT, $RA, $RB", IIC_VecComplex,
387 def EVEQV : EVXForm_1<537, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
388 "eveqv $RT, $RA, $RB", IIC_VecGeneral,
391 def EVEXTSB : EVXForm_2<522, (outs sperc:$RT), (ins sperc:$RA),
392 "evextsb $RT, $RA", IIC_VecGeneral,
394 def EVEXTSH : EVXForm_2<523, (outs sperc:$RT), (ins sperc:$RA),
395 "evextsh $RT, $RA", IIC_VecGeneral,
398 def EVFSABS : EVXForm_2<644, (outs sperc:$RT), (ins sperc:$RA),
399 "evfsabs $RT, $RA", IIC_VecGeneral,
401 def EVFSADD : EVXForm_1<640, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
402 "evfsadd $RT, $RA, $RB", IIC_VecComplex,
404 def EVFSCFSF : EVXForm_2a<659, (outs sperc:$RT), (ins sperc:$RB),
405 "evfscfsf $RT, $RB", IIC_VecComplex, []>;
406 def EVFSCFSI : EVXForm_2a<657, (outs sperc:$RT), (ins sperc:$RB),
407 "evfscfsi $RT, $RB", IIC_VecComplex,
409 def EVFSCFUF : EVXForm_2a<658, (outs sperc:$RT), (ins sperc:$RB),
410 "evfscfuf $RT, $RB", IIC_VecComplex, []>;
411 def EVFSCFUI : EVXForm_2a<650, (outs sperc:$RT), (ins sperc:$RB),
412 "evfscfui $RT, $RB", IIC_VecComplex,
414 let isCompare = 1 in {
415 def EVFSCMPEQ : EVXForm_3<654, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
416 "evfscmpeq $crD, $RA, $RB", IIC_FPSGeneral, []>;
417 def EVFSCMPGT : EVXForm_3<652, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
418 "evfscmpgt $crD, $RA, $RB", IIC_FPSGeneral, []>;
419 def EVFSCMPLT : EVXForm_3<653, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
420 "evfscmplt $crD, $RA, $RB", IIC_FPSGeneral, []>;
423 def EVFSCTSF : EVXForm_2a<663, (outs sperc:$RT), (ins sperc:$RB),
424 "evfsctsf $RT, $RB", IIC_VecComplex, []>;
425 def EVFSCTSI : EVXForm_2a<661, (outs sperc:$RT), (ins sperc:$RB),
426 "evfsctsi $RT, $RB", IIC_VecComplex,
428 def EVFSCTSIZ : EVXForm_2a<666, (outs sperc:$RT), (ins sperc:$RB),
429 "evfsctsiz $RT, $RB", IIC_VecComplex,
431 def EVFSCTUF : EVXForm_2a<662, (outs sperc:$RT), (ins sperc:$RB),
432 "evfsctsf $RT, $RB", IIC_VecComplex, []>;
433 def EVFSCTUI : EVXForm_2a<660, (outs sperc:$RT), (ins sperc:$RB),
434 "evfsctui $RT, $RB", IIC_VecComplex,
436 def EVFSCTUIZ : EVXForm_2a<664, (outs sperc:$RT), (ins sperc:$RB),
437 "evfsctsiz $RT, $RB", IIC_VecComplex,
439 def EVFSDIV : EVXForm_1<649, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
440 "evfsdiv $RT, $RA, $RB", IIC_FPDivD,
442 def EVFSMUL : EVXForm_1<648, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
443 "evfsmul $RT, $RA, $RB", IIC_VecComplex,
445 def EVFSNABS : EVXForm_2<645, (outs sperc:$RT), (ins sperc:$RA),
446 "evfsnabs $RT, $RA", IIC_VecGeneral,
448 def EVFSNEG : EVXForm_2<646, (outs sperc:$RT), (ins sperc:$RA),
449 "evfsneg $RT, $RA", IIC_VecGeneral,
451 def EVFSSUB : EVXForm_1<641, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
452 "evfssub $RT, $RA, $RB", IIC_VecComplex,
455 let isCompare = 1 in {
456 def EVFSTSTEQ : EVXForm_3<670, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
457 "evfststeq $crD, $RA, $RB", IIC_VecGeneral, []>;
458 def EVFSTSTGT : EVXForm_3<668, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
459 "evfststgt $crD, $RA, $RB", IIC_VecGeneral, []>;
460 def EVFSTSTLT : EVXForm_3<669, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
461 "evfststlt $crD, $RA, $RB", IIC_VecGeneral, []>;
464 def EVLDD : EVXForm_D<769, (outs sperc:$RT), (ins spe8dis:$dst),
465 "evldd $RT, $dst", IIC_LdStLoad,
466 [(set f64:$RT, (load iaddr:$dst))]>;
467 def EVLDDX : EVXForm_1<768, (outs sperc:$RT), (ins memrr:$src),
468 "evlddx $RT, $src", IIC_LdStLoad,
469 [(set f64:$RT, (load xaddr:$src))]>;
470 def EVLDH : EVXForm_D<773, (outs sperc:$RT), (ins spe8dis:$dst),
471 "evldh $RT, $dst", IIC_LdStLoad, []>;
472 def EVLDHX : EVXForm_1<772, (outs sperc:$RT), (ins memrr:$src),
473 "evldhx $RT, $src", IIC_LdStLoad, []>;
474 def EVLDW : EVXForm_D<771, (outs sperc:$RT), (ins spe8dis:$dst),
475 "evldw $RT, $dst", IIC_LdStLoad,
477 def EVLDWX : EVXForm_1<770, (outs sperc:$RT), (ins memrr:$src),
478 "evldwx $RT, $src", IIC_LdStLoad,
480 def EVLHHESPLAT : EVXForm_D<777, (outs sperc:$RT), (ins spe2dis:$dst),
481 "evlhhesplat $RT, $dst", IIC_LdStLoad, []>;
482 def EVLHHESPLATX : EVXForm_1<776, (outs sperc:$RT), (ins memrr:$src),
483 "evlhhesplatx $RT, $src", IIC_LdStLoad, []>;
484 def EVLHHOUSPLAT : EVXForm_D<781, (outs sperc:$RT), (ins spe2dis:$dst),
485 "evlhhousplat $RT, $dst", IIC_LdStLoad, []>;
486 def EVLHHOUSPLATX : EVXForm_1<780, (outs sperc:$RT), (ins memrr:$src),
487 "evlhhousplatx $RT, $src", IIC_LdStLoad, []>;
488 def EVLHHOSSPLAT : EVXForm_D<783, (outs sperc:$RT), (ins spe2dis:$dst),
489 "evlhhossplat $RT, $dst", IIC_LdStLoad, []>;
490 def EVLHHOSSPLATX : EVXForm_1<782, (outs sperc:$RT), (ins memrr:$src),
491 "evlhhossplatx $RT, $src", IIC_LdStLoad, []>;
492 def EVLWHE : EVXForm_D<785, (outs sperc:$RT), (ins spe4dis:$dst),
493 "evlwhe $RT, $dst", IIC_LdStLoad, []>;
494 def EVLWHEX : EVXForm_1<784, (outs sperc:$RT), (ins memrr:$src),
495 "evlwhex $RT, $src", IIC_LdStLoad, []>;
496 def EVLWHOS : EVXForm_D<791, (outs sperc:$RT), (ins spe4dis:$dst),
497 "evlwhos $RT, $dst", IIC_LdStLoad, []>;
498 def EVLWHOSX : EVXForm_1<790, (outs sperc:$RT), (ins memrr:$src),
499 "evlwhosx $RT, $src", IIC_LdStLoad, []>;
500 def EVLWHOU : EVXForm_D<789, (outs sperc:$RT), (ins spe4dis:$dst),
501 "evlwhou $RT, $dst", IIC_LdStLoad, []>;
502 def EVLWHOUX : EVXForm_1<788, (outs sperc:$RT), (ins memrr:$src),
503 "evlwhoux $RT, $src", IIC_LdStLoad, []>;
504 def EVLWHSPLAT : EVXForm_D<797, (outs sperc:$RT), (ins spe4dis:$dst),
505 "evlwhsplat $RT, $dst", IIC_LdStLoad, []>;
506 def EVLWHSPLATX : EVXForm_1<796, (outs sperc:$RT), (ins memrr:$src),
507 "evlwhsplatx $RT, $src", IIC_LdStLoad, []>;
508 def EVLWWSPLAT : EVXForm_D<793, (outs sperc:$RT), (ins spe4dis:$dst),
509 "evlwwsplat $RT, $dst", IIC_LdStLoad, []>;
510 def EVLWWSPLATX : EVXForm_1<792, (outs sperc:$RT), (ins memrr:$src),
511 "evlwwsplatx $RT, $src", IIC_LdStLoad, []>;
513 def EVMERGEHI : EVXForm_1<556, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
514 "evmergehi $RT, $RA, $RB", IIC_VecGeneral, []>;
515 def EVMERGELO : EVXForm_1<557, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
516 "evmergelo $RT, $RA, $RB", IIC_VecGeneral, []>;
517 def EVMERGEHILO : EVXForm_1<558, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
518 "evmergehilo $RT, $RA, $RB", IIC_VecGeneral, []>;
519 def EVMERGELOHI : EVXForm_1<559, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
520 "evmergelohi $RT, $RA, $RB", IIC_VecGeneral, []>;
522 def EVMHEGSMFAA : EVXForm_1<1323, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
523 "evmhegsmfaa $RT, $RA, $RB", IIC_VecComplex, []>;
524 def EVMHEGSMFAN : EVXForm_1<1451, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
525 "evmhegsmfan $RT, $RA, $RB", IIC_VecComplex, []>;
526 def EVMHEGSMIAA : EVXForm_1<1321, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
527 "evmhegsmiaa $RT, $RA, $RB", IIC_VecComplex, []>;
528 def EVMHEGSMIAN : EVXForm_1<1449, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
529 "evmhegsmian $RT, $RA, $RB", IIC_VecComplex, []>;
530 def EVMHEGUMIAA : EVXForm_1<1320, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
531 "evmhegumiaa $RT, $RA, $RB", IIC_VecComplex, []>;
532 def EVMHEGUMIAN : EVXForm_1<1448, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
533 "evmhegumian $RT, $RA, $RB", IIC_VecComplex, []>;
535 def EVMHESMF : EVXForm_1<1035, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
536 "evmhesmf $RT, $RA, $RB", IIC_VecComplex, []>;
537 def EVMHESMFA : EVXForm_1<1067, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
538 "evmhesmfa $RT, $RA, $RB", IIC_VecComplex, []>;
539 def EVMHESMFAAW : EVXForm_1<1291, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
540 "evmhesmfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
541 def EVMHESMFANW : EVXForm_1<1419, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
542 "evmhesmfanw $RT, $RA, $RB", IIC_VecComplex, []>;
543 def EVMHESMI : EVXForm_1<1033, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
544 "evmhesmi $RT, $RA, $RB", IIC_VecComplex, []>;
545 def EVMHESMIA : EVXForm_1<1065, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
546 "evmhesmia $RT, $RA, $RB", IIC_VecComplex, []>;
547 def EVMHESMIAAW : EVXForm_1<1289, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
548 "evmhesmiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
549 def EVMHESMIANW : EVXForm_1<1417, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
550 "evmhesmianw $RT, $RA, $RB", IIC_VecComplex, []>;
551 def EVMHESSF : EVXForm_1<1027, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
552 "evmhessf $RT, $RA, $RB", IIC_VecComplex, []>;
553 def EVMHESSFA : EVXForm_1<1059, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
554 "evmhessfa $RT, $RA, $RB", IIC_VecComplex, []>;
555 def EVMHESSFAAW : EVXForm_1<1283, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
556 "evmhessfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
557 def EVMHESSFANW : EVXForm_1<1411, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
558 "evmhessfanw $RT, $RA, $RB", IIC_VecComplex, []>;
559 def EVMHESSIAAW : EVXForm_1<1281, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
560 "evmhessiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
561 def EVMHESSIANW : EVXForm_1<1409, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
562 "evmhessianw $RT, $RA, $RB", IIC_VecComplex, []>;
563 def EVMHEUMI : EVXForm_1<1032, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
564 "evmheumi $RT, $RA, $RB", IIC_VecComplex, []>;
565 def EVMHEUMIA : EVXForm_1<1064, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
566 "evmheumia $RT, $RA, $RB", IIC_VecComplex, []>;
567 def EVMHEUMIAAW : EVXForm_1<1288, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
568 "evmheumiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
569 def EVMHEUMIANW : EVXForm_1<1416, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
570 "evmheumianw $RT, $RA, $RB", IIC_VecComplex, []>;
571 def EVMHEUSIAAW : EVXForm_1<1280, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
572 "evmheusiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
573 def EVMHEUSIANW : EVXForm_1<1408, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
574 "evmheusianw $RT, $RA, $RB", IIC_VecComplex, []>;
575 def EVMHOGSMFAA : EVXForm_1<1327, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
576 "evmhogsmfaa $RT, $RA, $RB", IIC_VecComplex, []>;
577 def EVMHOGSMFAN : EVXForm_1<1455, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
578 "evmhogsmfan $RT, $RA, $RB", IIC_VecComplex, []>;
579 def EVMHOGSMIAA : EVXForm_1<1325, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
580 "evmhogsmiaa $RT, $RA, $RB", IIC_VecComplex, []>;
581 def EVMHOGSMIAN : EVXForm_1<1453, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
582 "evmhogsmian $RT, $RA, $RB", IIC_VecComplex, []>;
583 def EVMHOGUMIAA : EVXForm_1<1324, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
584 "evmhogumiaa $RT, $RA, $RB", IIC_VecComplex, []>;
585 def EVMHOGUMIAN : EVXForm_1<1452, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
586 "evmhogumian $RT, $RA, $RB", IIC_VecComplex, []>;
587 def EVMHOSMF : EVXForm_1<1039, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
588 "evmhosmf $RT, $RA, $RB", IIC_VecComplex, []>;
589 def EVMHOSMFA : EVXForm_1<1071, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
590 "evmhosmfa $RT, $RA, $RB", IIC_VecComplex, []>;
591 def EVMHOSMFAAW : EVXForm_1<1295, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
592 "evmhosmfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
593 def EVMHOSMFANW : EVXForm_1<1423, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
594 "evmhosmfanw $RT, $RA, $RB", IIC_VecComplex, []>;
595 def EVMHOSMI : EVXForm_1<1037, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
596 "evmhosmi $RT, $RA, $RB", IIC_VecComplex, []>;
597 def EVMHOSMIA : EVXForm_1<1069, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
598 "evmhosmia $RT, $RA, $RB", IIC_VecComplex, []>;
599 def EVMHOSMIAAW : EVXForm_1<1293, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
600 "evmhosmiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
601 def EVMHOSMIANW : EVXForm_1<1421, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
602 "evmhosmianw $RT, $RA, $RB", IIC_VecComplex, []>;
603 def EVMHOSSF : EVXForm_1<1031, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
604 "evmhossf $RT, $RA, $RB", IIC_VecComplex, []>;
605 def EVMHOSSFA : EVXForm_1<1063, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
606 "evmhossfa $RT, $RA, $RB", IIC_VecComplex, []>;
607 def EVMHOSSFAAW : EVXForm_1<1287, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
608 "evmhossfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
609 def EVMHOSSFANW : EVXForm_1<1415, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
610 "evmhossfanw $RT, $RA, $RB", IIC_VecComplex, []>;
611 def EVMHOSSIAAW : EVXForm_1<1285, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
612 "evmhossiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
613 def EVMHOSSIANW : EVXForm_1<1413, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
614 "evmhossianw $RT, $RA, $RB", IIC_VecComplex, []>;
615 def EVMHOUMI : EVXForm_1<1036, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
616 "evmhoumi $RT, $RA, $RB", IIC_VecComplex, []>;
617 def EVMHOUMIA : EVXForm_1<1068, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
618 "evmhoumia $RT, $RA, $RB", IIC_VecComplex, []>;
619 def EVMHOUMIAAW : EVXForm_1<1292, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
620 "evmhoumiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
621 def EVMHOUMIANW : EVXForm_1<1420, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
622 "evmhoumianw $RT, $RA, $RB", IIC_VecComplex, []>;
623 def EVMHOUSIAAW : EVXForm_1<1284, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
624 "evmhousiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
625 def EVMHOUSIANW : EVXForm_1<1412, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
626 "evmhousianw $RT, $RA, $RB", IIC_VecComplex, []>;
628 def EVMRA : EVXForm_2<1220, (outs sperc:$RT), (ins sperc:$RA),
629 "evmra $RT, $RA", IIC_VecComplex, []>;
631 def EVMWHSMF : EVXForm_1<1103, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
632 "evmwhsmf $RT, $RA, $RB", IIC_VecComplex, []>;
633 def EVMWHSMFA : EVXForm_1<1135, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
634 "evmwhsmfa $RT, $RA, $RB", IIC_VecComplex, []>;
635 def EVMWHSMI : EVXForm_1<1101, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
636 "evmwhsmi $RT, $RA, $RB", IIC_VecComplex, []>;
637 def EVMWHSMIA : EVXForm_1<1133, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
638 "evmwhsmia $RT, $RA, $RB", IIC_VecComplex, []>;
639 def EVMWHSSF : EVXForm_1<1095, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
640 "evmwhssf $RT, $RA, $RB", IIC_VecComplex, []>;
641 def EVMWHSSFA : EVXForm_1<1127, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
642 "evmwhssfa $RT, $RA, $RB", IIC_VecComplex, []>;
643 def EVMWHUMI : EVXForm_1<1100, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
644 "evmwhumi $RT, $RA, $RB", IIC_VecComplex, []>;
645 def EVMWHUMIA : EVXForm_1<1132, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
646 "evmwhumia $RT, $RA, $RB", IIC_VecComplex, []>;
647 def EVMWLSMIAAW : EVXForm_1<1353, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
648 "evmwlsmiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
649 def EVMWLSMIANW : EVXForm_1<1481, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
650 "evmwlsmianw $RT, $RA, $RB", IIC_VecComplex, []>;
651 def EVMWLSSIAAW : EVXForm_1<1345, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
652 "evmwlssiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
653 def EVMWLSSIANW : EVXForm_1<1473, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
654 "evmwlssianw $RT, $RA, $RB", IIC_VecComplex, []>;
655 def EVMWLUMI : EVXForm_1<1096, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
656 "evmwlumi $RT, $RA, $RB", IIC_VecComplex,
658 def EVMWLUMIA : EVXForm_1<1128, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
659 "evmwlumia $RT, $RA, $RB", IIC_VecComplex, []>;
660 def EVMWLUMIAAW : EVXForm_1<1352, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
661 "evmwlumiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
662 def EVMWLUMIANW : EVXForm_1<1480, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
663 "evmwlumianw $RT, $RA, $RB", IIC_VecComplex, []>;
664 def EVMWLUSIAAW : EVXForm_1<1344, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
665 "evmwlusiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
666 def EVMWLUSIANW : EVXForm_1<1472, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
667 "evmwlusianw $RT, $RA, $RB", IIC_VecComplex, []>;
668 def EVMWSMF : EVXForm_1<1115, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
669 "evmwsmf $RT, $RA, $RB", IIC_VecComplex, []>;
670 def EVMWSMFA : EVXForm_1<1147, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
671 "evmwsmfa $RT, $RA, $RB", IIC_VecComplex, []>;
672 def EVMWSMFAA : EVXForm_1<1371, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
673 "evmwsmfaa $RT, $RA, $RB", IIC_VecComplex, []>;
674 def EVMWSMFAN : EVXForm_1<1499, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
675 "evmwsmfan $RT, $RA, $RB", IIC_VecComplex, []>;
676 def EVMWSMI : EVXForm_1<1113, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
677 "evmwsmi $RT, $RA, $RB", IIC_VecComplex, []>;
678 def EVMWSMIA : EVXForm_1<1145, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
679 "evmwsmia $RT, $RA, $RB", IIC_VecComplex, []>;
680 def EVMWSMIAA : EVXForm_1<1369, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
681 "evmwsmiaa $RT, $RA, $RB", IIC_VecComplex, []>;
682 def EVMWSMIAN : EVXForm_1<1497, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
683 "evmwsmian $RT, $RA, $RB", IIC_VecComplex, []>;
684 def EVMWSSF : EVXForm_1<1107, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
685 "evmwssf $RT, $RA, $RB", IIC_VecComplex, []>;
686 def EVMWSSFA : EVXForm_1<1139, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
687 "evmwssfa $RT, $RA, $RB", IIC_VecComplex, []>;
688 def EVMWSSFAA : EVXForm_1<1363, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
689 "evmwssfaa $RT, $RA, $RB", IIC_VecComplex, []>;
690 def EVMWSSFAN : EVXForm_1<1491, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
691 "evmwssfan $RT, $RA, $RB", IIC_VecComplex, []>;
692 def EVMWUMI : EVXForm_1<1112, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
693 "evmwumi $RT, $RA, $RB", IIC_VecComplex, []>;
694 def EVMWUMIA : EVXForm_1<1144, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
695 "evmwumia $RT, $RA, $RB", IIC_VecComplex, []>;
696 def EVMWUMIAA : EVXForm_1<1368, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
697 "evmwumiaa $RT, $RA, $RB", IIC_VecComplex, []>;
698 def EVMWUMIAN : EVXForm_1<1496, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
699 "evmwumian $RT, $RA, $RB", IIC_VecComplex, []>;
702 def EVNAND : EVXForm_1<542, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
703 "evnand $RT, $RA, $RB", IIC_VecGeneral,
706 def EVNEG : EVXForm_2<521, (outs sperc:$RT), (ins sperc:$RA),
707 "evneg $RT, $RA", IIC_VecGeneral,
710 def EVNOR : EVXForm_1<536, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
711 "evnor $RT, $RA, $RB", IIC_VecGeneral,
713 def EVOR : EVXForm_1<535, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
714 "evor $RT, $RA, $RB", IIC_VecGeneral,
716 def EVORC : EVXForm_1<539, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
717 "evorc $RT, $RA, $RB", IIC_VecGeneral,
720 def EVRLWI : EVXForm_1<554, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
721 "evrlwi $RT, $RA, $RB", IIC_VecGeneral, []>;
722 def EVRLW : EVXForm_1<552, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
723 "evrlw $RT, $RA, $RB", IIC_VecGeneral,
726 def EVRNDW : EVXForm_2<524, (outs sperc:$RT), (ins sperc:$RA),
727 "evrndw $RT, $RA", IIC_VecGeneral, []>;
729 def EVSEL : EVXForm_4<79, (outs sperc:$RT),
730 (ins sperc:$RA, sperc:$RB, crrc:$crD),
731 "evsel crD,$RT,$RA,$RB", IIC_VecGeneral, []>;
733 def EVSLWI : EVXForm_1<550, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
734 "evslwi $RT, $RA, $RB", IIC_VecGeneral, []>;
735 def EVSLW : EVXForm_1<548, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
736 "evslw $RT, $RA, $RB", IIC_VecGeneral,
739 def EVSPLATFI : EVXForm_2<555, (outs sperc:$RT), (ins s5imm:$RA),
740 "evsplatfi $RT, $RA", IIC_VecGeneral, []>;
741 def EVSPLATI : EVXForm_2<553, (outs sperc:$RT), (ins s5imm:$RA),
742 "evsplati $RT, $RA", IIC_VecGeneral, []>;
744 def EVSRWIS : EVXForm_1<547, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
745 "evsrwis $RT, $RA, $RB", IIC_VecGeneral, []>;
746 def EVSRWIU : EVXForm_1<546, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
747 "evsrwiu $RT, $RA, $RB", IIC_VecGeneral, []>;
748 def EVSRWS : EVXForm_1<545, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
749 "evsrws $RT, $RA, $RB", IIC_VecGeneral,
751 def EVSRWU : EVXForm_1<544, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
752 "evsrwu $RT, $RA, $RB", IIC_VecGeneral,
755 def EVSTDD : EVXForm_D<801, (outs), (ins sperc:$RT, spe8dis:$dst),
756 "evstdd $RT, $dst", IIC_LdStStore,
757 [(store f64:$RT, iaddr:$dst)]>;
758 def EVSTDDX : EVXForm_1<800, (outs), (ins sperc:$RT, memrr:$dst),
759 "evstddx $RT, $dst", IIC_LdStStore,
760 [(store f64:$RT, xaddr:$dst)]>;
761 def EVSTDH : EVXForm_D<805, (outs), (ins sperc:$RT, spe8dis:$dst),
762 "evstdh $RT, $dst", IIC_LdStStore, []>;
763 def EVSTDHX : EVXForm_1<804, (outs), (ins sperc:$RT, memrr:$dst),
764 "evstdhx $RT, $dst", IIC_LdStStore, []>;
765 def EVSTDW : EVXForm_D<803, (outs), (ins sperc:$RT, spe8dis:$dst),
766 "evstdw $RT, $dst", IIC_LdStStore,
768 def EVSTDWX : EVXForm_1<802, (outs), (ins sperc:$RT, memrr:$dst),
769 "evstdwx $RT, $dst", IIC_LdStStore,
771 def EVSTWHE : EVXForm_D<817, (outs), (ins sperc:$RT, spe4dis:$dst),
772 "evstwhe $RT, $dst", IIC_LdStStore, []>;
773 def EVSTWHEX : EVXForm_1<816, (outs), (ins sperc:$RT, memrr:$dst),
774 "evstwhex $RT, $dst", IIC_LdStStore, []>;
775 def EVSTWHO : EVXForm_D<821, (outs), (ins sperc:$RT, spe4dis:$dst),
776 "evstwho $RT, $dst", IIC_LdStStore, []>;
777 def EVSTWHOX : EVXForm_1<820, (outs), (ins sperc:$RT, memrr:$dst),
778 "evstwhox $RT, $dst", IIC_LdStStore, []>;
779 def EVSTWWE : EVXForm_D<825, (outs), (ins sperc:$RT, spe4dis:$dst),
780 "evstwwe $RT, $dst", IIC_LdStStore, []>;
781 def EVSTWWEX : EVXForm_1<824, (outs), (ins sperc:$RT, memrr:$dst),
782 "evstwwex $RT, $dst", IIC_LdStStore, []>;
783 def EVSTWWO : EVXForm_D<829, (outs), (ins sperc:$RT, spe4dis:$dst),
784 "evstwwo $RT, $dst", IIC_LdStStore, []>;
785 def EVSTWWOX : EVXForm_1<828, (outs), (ins sperc:$RT, memrr:$dst),
786 "evstwwox $RT, $dst", IIC_LdStStore, []>;
788 def EVSUBFSSIAAW : EVXForm_2<1219, (outs sperc:$RT), (ins sperc:$RA),
789 "evsubfssiaaw $RT, $RA", IIC_VecComplex, []>;
790 def EVSUBFSMIAAW : EVXForm_2<1227, (outs sperc:$RT), (ins sperc:$RA),
791 "evsubfsmiaaw $RT, $RA", IIC_VecComplex, []>;
792 def EVSUBFUMIAAW : EVXForm_2<1226, (outs sperc:$RT), (ins sperc:$RA),
793 "evsubfumiaaw $RT, $RA", IIC_VecComplex, []>;
794 def EVSUBFUSIAAW : EVXForm_2<1218, (outs sperc:$RT), (ins sperc:$RA),
795 "evsubfusiaaw $RT, $RA", IIC_VecComplex, []>;
796 def EVSUBFW : EVXForm_1<516, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
797 "evsubfw $RT, $RA, $RB", IIC_VecGeneral,
799 def EVSUBIFW : EVXForm_1<518, (outs sperc:$RT), (ins u5imm:$RA, sperc:$RB),
800 "evsubifw $RT, $RA, $RB", IIC_VecGeneral, []>;
801 def EVXOR : EVXForm_1<534, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
802 "evxor $RT, $RA, $RB", IIC_VecGeneral,
805 let isAsmParserOnly = 1 in {
806 // Identical to the integer Load/Stores, but to handle floats
807 def SPELWZ : DForm_1<32, (outs spe4rc:$rD), (ins memri:$src),
808 "lwz $rD, $src", IIC_LdStLoad,
809 [(set f32:$rD, (load iaddr:$src))]>;
810 def SPELWZX : XForm_1<31, 23, (outs spe4rc:$rD), (ins memrr:$src),
811 "lwzx $rD, $src", IIC_LdStLoad,
812 [(set f32:$rD, (load xaddr:$src))]>;
813 def SPESTW : DForm_1<36, (outs), (ins spe4rc:$rS, memri:$src),
814 "stw $rS, $src", IIC_LdStStore,
815 [(store f32:$rS, iaddr:$src)]>;
816 def SPESTWX : XForm_8<31, 151, (outs), (ins spe4rc:$rS, memrr:$dst),
817 "stwx $rS, $dst", IIC_LdStStore,
818 [(store f32:$rS, xaddr:$dst)]>;
823 let Predicates = [HasSPE] in {
824 def : Pat<(f64 (extloadf32 iaddr:$src)),
825 (COPY_TO_REGCLASS (SPELWZ iaddr:$src), SPERC)>;
826 def : Pat<(f64 (extloadf32 xaddr:$src)),
827 (COPY_TO_REGCLASS (SPELWZX xaddr:$src), SPERC)>;
829 def : Pat<(f64 (fpextend f32:$src)),
830 (COPY_TO_REGCLASS $src, SPERC)>;
833 let Predicates = [HasSPE] in {
834 let usesCustomInserter = 1 in {
835 def SELECT_CC_SPE4 : Pseudo<(outs spe4rc:$dst),
836 (ins crrc:$cond, spe4rc:$T, spe4rc:$F,
837 i32imm:$BROPC), "#SELECT_CC_SPE4",
839 def SELECT_CC_SPE : Pseudo<(outs sperc:$dst),
840 (ins crrc:$cond, sperc:$T, sperc:$F, i32imm:$BROPC),
843 def SELECT_SPE4 : Pseudo<(outs spe4rc:$dst), (ins crbitrc:$cond,
844 spe4rc:$T, spe4rc:$F), "#SELECT_SPE4",
845 [(set f32:$dst, (select i1:$cond, f32:$T, f32:$F))]>;
846 def SELECT_SPE : Pseudo<(outs sperc:$dst), (ins crbitrc:$cond,
847 sperc:$T, sperc:$F), "#SELECT_SPE",
848 [(set f64:$dst, (select i1:$cond, f64:$T, f64:$F))]>;
851 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETLT)),
852 (SELECT_SPE4 (CRANDC $lhs, $rhs), $tval, $fval)>;
853 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETULT)),
854 (SELECT_SPE4 (CRANDC $rhs, $lhs), $tval, $fval)>;
855 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETLE)),
856 (SELECT_SPE4 (CRORC $lhs, $rhs), $tval, $fval)>;
857 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETULE)),
858 (SELECT_SPE4 (CRORC $rhs, $lhs), $tval, $fval)>;
859 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETEQ)),
860 (SELECT_SPE4 (CREQV $lhs, $rhs), $tval, $fval)>;
861 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETGE)),
862 (SELECT_SPE4 (CRORC $rhs, $lhs), $tval, $fval)>;
863 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETUGE)),
864 (SELECT_SPE4 (CRORC $lhs, $rhs), $tval, $fval)>;
865 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETGT)),
866 (SELECT_SPE4 (CRANDC $rhs, $lhs), $tval, $fval)>;
867 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETUGT)),
868 (SELECT_SPE4 (CRANDC $lhs, $rhs), $tval, $fval)>;
869 def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETNE)),
870 (SELECT_SPE4 (CRXOR $lhs, $rhs), $tval, $fval)>;
872 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETLT)),
873 (SELECT_SPE (CRANDC $lhs, $rhs), $tval, $fval)>;
874 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETULT)),
875 (SELECT_SPE (CRANDC $rhs, $lhs), $tval, $fval)>;
876 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETLE)),
877 (SELECT_SPE (CRORC $lhs, $rhs), $tval, $fval)>;
878 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETULE)),
879 (SELECT_SPE (CRORC $rhs, $lhs), $tval, $fval)>;
880 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETEQ)),
881 (SELECT_SPE (CREQV $lhs, $rhs), $tval, $fval)>;
882 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETGE)),
883 (SELECT_SPE (CRORC $rhs, $lhs), $tval, $fval)>;
884 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETUGE)),
885 (SELECT_SPE (CRORC $lhs, $rhs), $tval, $fval)>;
886 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETGT)),
887 (SELECT_SPE (CRANDC $rhs, $lhs), $tval, $fval)>;
888 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETUGT)),
889 (SELECT_SPE (CRANDC $lhs, $rhs), $tval, $fval)>;
890 def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETNE)),
891 (SELECT_SPE (CRXOR $lhs, $rhs), $tval, $fval)>;