xref: /freebsd/contrib/llvm-project/llvm/lib/Target/PowerPC/PPCInstrSPE.td (revision 06c3fb2749bda94cb5201f81ffdb8fa6c3161b2e)
10b57cec5SDimitry Andric//=======-- PPCInstrSPE.td - The PowerPC SPE Extension -*- tablegen -*-=======//
20b57cec5SDimitry Andric//
30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric//
70b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric//
90b57cec5SDimitry Andric// This file describes the Signal Processing Engine extension to
100b57cec5SDimitry Andric// the PowerPC instruction set.
110b57cec5SDimitry Andric//
120b57cec5SDimitry Andric//===----------------------------------------------------------------------===//
130b57cec5SDimitry Andric
140b57cec5SDimitry Andricclass EFXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
150b57cec5SDimitry Andric               InstrItinClass itin, list<dag> pattern> :
160b57cec5SDimitry Andric               I<4, OOL, IOL, asmstr, itin> {
170b57cec5SDimitry Andric  bits<5> RT;
180b57cec5SDimitry Andric  bits<5> RA;
190b57cec5SDimitry Andric  bits<5> RB;
200b57cec5SDimitry Andric
210b57cec5SDimitry Andric  let Pattern = pattern;
220b57cec5SDimitry Andric
230b57cec5SDimitry Andric  let Inst{6-10}  = RT;
240b57cec5SDimitry Andric  let Inst{11-15} = RA;
250b57cec5SDimitry Andric  let Inst{16-20} = RB;
260b57cec5SDimitry Andric  let Inst{21-31} = xo;
270b57cec5SDimitry Andric}
280b57cec5SDimitry Andric
290b57cec5SDimitry Andricclass EFXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
300b57cec5SDimitry Andric               InstrItinClass itin, list<dag> pattern> :
310b57cec5SDimitry Andric               EFXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
320b57cec5SDimitry Andric  let RB = 0;
330b57cec5SDimitry Andric}
340b57cec5SDimitry Andric
350b57cec5SDimitry Andricclass EFXForm_2a<bits<11> xo, dag OOL, dag IOL, string asmstr,
360b57cec5SDimitry Andric               InstrItinClass itin, list<dag> pattern> :
370b57cec5SDimitry Andric               EFXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
380b57cec5SDimitry Andric  let RA = 0;
390b57cec5SDimitry Andric}
400b57cec5SDimitry Andric
410b57cec5SDimitry Andricclass EFXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
420b57cec5SDimitry Andric              InstrItinClass itin> :
430b57cec5SDimitry Andric              I<4, OOL, IOL, asmstr, itin> {
440b57cec5SDimitry Andric  bits<3> crD;
450b57cec5SDimitry Andric  bits<5> RA;
460b57cec5SDimitry Andric  bits<5> RB;
470b57cec5SDimitry Andric
480b57cec5SDimitry Andric  let Inst{6-8}  = crD;
490b57cec5SDimitry Andric  let Inst{9-10}  = 0;
500b57cec5SDimitry Andric  let Inst{11-15} = RA;
510b57cec5SDimitry Andric  let Inst{16-20} = RB;
520b57cec5SDimitry Andric  let Inst{21-31} = xo;
530b57cec5SDimitry Andric}
540b57cec5SDimitry Andric
550b57cec5SDimitry Andricclass EVXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
560b57cec5SDimitry Andric               InstrItinClass itin, list<dag> pattern> :
570b57cec5SDimitry Andric               I<4, OOL, IOL, asmstr, itin> {
580b57cec5SDimitry Andric  bits<5> RT;
590b57cec5SDimitry Andric  bits<5> RA;
600b57cec5SDimitry Andric  bits<5> RB;
610b57cec5SDimitry Andric
620b57cec5SDimitry Andric  let Pattern = pattern;
630b57cec5SDimitry Andric
640b57cec5SDimitry Andric  let Inst{6-10}  = RT;
650b57cec5SDimitry Andric  let Inst{11-15} = RA;
660b57cec5SDimitry Andric  let Inst{16-20} = RB;
670b57cec5SDimitry Andric  let Inst{21-31} = xo;
680b57cec5SDimitry Andric}
690b57cec5SDimitry Andric
700b57cec5SDimitry Andricclass EVXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
710b57cec5SDimitry Andric               InstrItinClass itin, list<dag> pattern> :
720b57cec5SDimitry Andric               EVXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
730b57cec5SDimitry Andric  let RB = 0;
740b57cec5SDimitry Andric}
750b57cec5SDimitry Andric
760b57cec5SDimitry Andricclass EVXForm_2a<bits<11> xo, dag OOL, dag IOL, string asmstr,
770b57cec5SDimitry Andric               InstrItinClass itin, list<dag> pattern> :
780b57cec5SDimitry Andric               EVXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
790b57cec5SDimitry Andric  let RA = 0;
800b57cec5SDimitry Andric}
810b57cec5SDimitry Andric
820b57cec5SDimitry Andricclass EVXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
830b57cec5SDimitry Andric              InstrItinClass itin, list<dag> pattern> :
840b57cec5SDimitry Andric              I<4, OOL, IOL, asmstr, itin> {
850b57cec5SDimitry Andric  bits<3> crD;
860b57cec5SDimitry Andric  bits<5> RA;
870b57cec5SDimitry Andric  bits<5> RB;
880b57cec5SDimitry Andric
890b57cec5SDimitry Andric  let Pattern = pattern;
900b57cec5SDimitry Andric
910b57cec5SDimitry Andric  let Inst{6-8}  = crD;
920b57cec5SDimitry Andric  let Inst{9-10}  = 0;
930b57cec5SDimitry Andric  let Inst{11-15} = RA;
940b57cec5SDimitry Andric  let Inst{16-20} = RB;
950b57cec5SDimitry Andric  let Inst{21-31} = xo;
960b57cec5SDimitry Andric}
970b57cec5SDimitry Andric
980b57cec5SDimitry Andricclass EVXForm_4<bits<8> xo, dag OOL, dag IOL, string asmstr,
990b57cec5SDimitry Andric               InstrItinClass itin, list<dag> pattern> :
1000b57cec5SDimitry Andric               I<4, OOL, IOL, asmstr, itin> {
1010b57cec5SDimitry Andric  bits<3> crD;
1020b57cec5SDimitry Andric  bits<5> RA;
1030b57cec5SDimitry Andric  bits<5> RB;
1040b57cec5SDimitry Andric  bits<5> RT;
1050b57cec5SDimitry Andric
1060b57cec5SDimitry Andric  let Pattern = pattern;
1070b57cec5SDimitry Andric
1080b57cec5SDimitry Andric  let Inst{6-10}  = RT;
1090b57cec5SDimitry Andric  let Inst{11-15} = RA;
1100b57cec5SDimitry Andric  let Inst{16-20} = RB;
1110b57cec5SDimitry Andric  let Inst{21-28} = xo;
1120b57cec5SDimitry Andric  let Inst{29-31} = crD;
1130b57cec5SDimitry Andric}
1140b57cec5SDimitry Andric
1150b57cec5SDimitry Andricclass EVXForm_D<bits<11> xo, dag OOL, dag IOL, string asmstr,
1160b57cec5SDimitry Andric               InstrItinClass itin, list<dag> pattern> :
1170b57cec5SDimitry Andric               I<4, OOL, IOL, asmstr, itin> {
1180b57cec5SDimitry Andric  bits<5> RT;
119*06c3fb27SDimitry Andric  bits<5> RA;
120*06c3fb27SDimitry Andric  bits<5> D;
1210b57cec5SDimitry Andric
1220b57cec5SDimitry Andric  let Pattern = pattern;
1230b57cec5SDimitry Andric
1240b57cec5SDimitry Andric  let Inst{6-10}  = RT;
125*06c3fb27SDimitry Andric  let Inst{11-15} = RA;
126*06c3fb27SDimitry Andric  let Inst{16-20} = D;
1270b57cec5SDimitry Andric  let Inst{21-31} = xo;
1280b57cec5SDimitry Andric}
1290b57cec5SDimitry Andric
1300b57cec5SDimitry Andriclet DecoderNamespace = "SPE", Predicates = [HasSPE] in {
1310b57cec5SDimitry Andric
1320b57cec5SDimitry Andricdef BRINC          : EVXForm_1<527, (outs gprc:$RT), (ins gprc:$RA, gprc:$RB),
1330b57cec5SDimitry Andric                               "brinc $RT, $RA, $RB", IIC_IntSimple, []>;
1340b57cec5SDimitry Andric
1350b57cec5SDimitry Andric// Double-precision floating point
1360b57cec5SDimitry Andricdef EFDABS         : EFXForm_2<740, (outs sperc:$RT), (ins sperc:$RA),
1370b57cec5SDimitry Andric                                "efdabs $RT, $RA", IIC_FPDGeneral,
1380b57cec5SDimitry Andric                                [(set f64:$RT, (fabs f64:$RA))]>;
1390b57cec5SDimitry Andric
1400b57cec5SDimitry Andricdef EFDADD         : EFXForm_1<736, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
1410b57cec5SDimitry Andric                                "efdadd $RT, $RA, $RB", IIC_FPAddSub,
142fe6060f1SDimitry Andric                                [(set f64:$RT, (any_fadd f64:$RA, f64:$RB))]>;
1430b57cec5SDimitry Andric
1440b57cec5SDimitry Andricdef EFDCFS         : EFXForm_2a<751, (outs sperc:$RT), (ins spe4rc:$RB),
1450b57cec5SDimitry Andric                                "efdcfs $RT, $RB", IIC_FPDGeneral,
146fe6060f1SDimitry Andric                                [(set f64:$RT, (any_fpextend f32:$RB))]>;
1470b57cec5SDimitry Andric
1480b57cec5SDimitry Andricdef EFDCFSF        : EFXForm_2a<755, (outs sperc:$RT), (ins spe4rc:$RB),
1490b57cec5SDimitry Andric                                "efdcfsf $RT, $RB", IIC_FPDGeneral, []>;
1500b57cec5SDimitry Andric
1510b57cec5SDimitry Andricdef EFDCFSI        : EFXForm_2a<753, (outs sperc:$RT), (ins gprc:$RB),
1520b57cec5SDimitry Andric                                "efdcfsi $RT, $RB", IIC_FPDGeneral,
1535ffd83dbSDimitry Andric                                [(set f64:$RT, (any_sint_to_fp i32:$RB))]>;
1540b57cec5SDimitry Andric
1550b57cec5SDimitry Andricdef EFDCFSID       : EFXForm_2a<739, (outs sperc:$RT), (ins gprc:$RB),
1560b57cec5SDimitry Andric                                "efdcfsid $RT, $RB", IIC_FPDGeneral,
1570b57cec5SDimitry Andric                                []>;
1580b57cec5SDimitry Andric
1590b57cec5SDimitry Andricdef EFDCFUF        : EFXForm_2a<754, (outs sperc:$RT), (ins spe4rc:$RB),
1600b57cec5SDimitry Andric                                "efdcfuf $RT, $RB", IIC_FPDGeneral, []>;
1610b57cec5SDimitry Andric
1620b57cec5SDimitry Andricdef EFDCFUI        : EFXForm_2a<752, (outs sperc:$RT), (ins gprc:$RB),
1630b57cec5SDimitry Andric                                "efdcfui $RT, $RB", IIC_FPDGeneral,
1645ffd83dbSDimitry Andric                                [(set f64:$RT, (any_uint_to_fp i32:$RB))]>;
1650b57cec5SDimitry Andric
1660b57cec5SDimitry Andricdef EFDCFUID       : EFXForm_2a<738, (outs sperc:$RT), (ins gprc:$RB),
1670b57cec5SDimitry Andric                                "efdcfuid $RT, $RB", IIC_FPDGeneral,
1680b57cec5SDimitry Andric                                []>;
1690b57cec5SDimitry Andric
1700b57cec5SDimitry Andriclet isCompare = 1 in {
1710b57cec5SDimitry Andricdef EFDCMPEQ       : EFXForm_3<750, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
1720b57cec5SDimitry Andric                               "efdcmpeq $crD, $RA, $RB", IIC_FPDGeneral>;
1730b57cec5SDimitry Andricdef EFDCMPGT       : EFXForm_3<748, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
1740b57cec5SDimitry Andric                               "efdcmpgt $crD, $RA, $RB", IIC_FPDGeneral>;
1750b57cec5SDimitry Andricdef EFDCMPLT       : EFXForm_3<749, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
1760b57cec5SDimitry Andric                               "efdcmplt $crD, $RA, $RB", IIC_FPDGeneral>;
1770b57cec5SDimitry Andric}
1780b57cec5SDimitry Andric
1790b57cec5SDimitry Andricdef EFDCTSF        : EFXForm_2a<759, (outs sperc:$RT), (ins spe4rc:$RB),
1800b57cec5SDimitry Andric                                "efdctsf $RT, $RB", IIC_FPDGeneral, []>;
1810b57cec5SDimitry Andric
1820b57cec5SDimitry Andricdef EFDCTSI        : EFXForm_2a<757, (outs gprc:$RT), (ins sperc:$RB),
1830b57cec5SDimitry Andric                                "efdctsi $RT, $RB", IIC_FPDGeneral,
1840b57cec5SDimitry Andric                                []>;
1850b57cec5SDimitry Andric
1860b57cec5SDimitry Andricdef EFDCTSIDZ      : EFXForm_2a<747, (outs gprc:$RT), (ins sperc:$RB),
1870b57cec5SDimitry Andric                                "efdctsidz $RT, $RB", IIC_FPDGeneral,
1880b57cec5SDimitry Andric                                []>;
1890b57cec5SDimitry Andric
1900b57cec5SDimitry Andricdef EFDCTSIZ       : EFXForm_2a<762, (outs gprc:$RT), (ins sperc:$RB),
1910b57cec5SDimitry Andric                                "efdctsiz $RT, $RB", IIC_FPDGeneral,
1925ffd83dbSDimitry Andric                                [(set i32:$RT, (any_fp_to_sint f64:$RB))]>;
1930b57cec5SDimitry Andric
1940b57cec5SDimitry Andricdef EFDCTUF        : EFXForm_2a<758, (outs sperc:$RT), (ins spe4rc:$RB),
1950b57cec5SDimitry Andric                                "efdctuf $RT, $RB", IIC_FPDGeneral, []>;
1960b57cec5SDimitry Andric
1970b57cec5SDimitry Andricdef EFDCTUI        : EFXForm_2a<756, (outs gprc:$RT), (ins sperc:$RB),
1980b57cec5SDimitry Andric                                "efdctui $RT, $RB", IIC_FPDGeneral,
1990b57cec5SDimitry Andric                                []>;
2000b57cec5SDimitry Andric
2010b57cec5SDimitry Andricdef EFDCTUIDZ      : EFXForm_2a<746, (outs gprc:$RT), (ins sperc:$RB),
2020b57cec5SDimitry Andric                                "efdctuidz $RT, $RB", IIC_FPDGeneral,
2030b57cec5SDimitry Andric                                []>;
2040b57cec5SDimitry Andric
2050b57cec5SDimitry Andricdef EFDCTUIZ       : EFXForm_2a<760, (outs gprc:$RT), (ins sperc:$RB),
2060b57cec5SDimitry Andric                                "efdctuiz $RT, $RB", IIC_FPDGeneral,
2075ffd83dbSDimitry Andric                                [(set i32:$RT, (any_fp_to_uint f64:$RB))]>;
2080b57cec5SDimitry Andric
2090b57cec5SDimitry Andricdef EFDDIV         : EFXForm_1<745, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
2100b57cec5SDimitry Andric                               "efddiv $RT, $RA, $RB", IIC_FPDivD,
211fe6060f1SDimitry Andric                               [(set f64:$RT, (any_fdiv f64:$RA, f64:$RB))]>;
2120b57cec5SDimitry Andric
2130b57cec5SDimitry Andricdef EFDMUL         : EFXForm_1<744, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
2140b57cec5SDimitry Andric                               "efdmul $RT, $RA, $RB", IIC_FPDGeneral,
215fe6060f1SDimitry Andric                               [(set f64:$RT, (any_fmul f64:$RA, f64:$RB))]>;
2160b57cec5SDimitry Andric
2170b57cec5SDimitry Andricdef EFDNABS        : EFXForm_2<741, (outs sperc:$RT), (ins sperc:$RA),
2180b57cec5SDimitry Andric                               "efdnabs $RT, $RA", IIC_FPDGeneral,
2190b57cec5SDimitry Andric                               [(set f64:$RT, (fneg (fabs f64:$RA)))]>;
2200b57cec5SDimitry Andric
2210b57cec5SDimitry Andricdef EFDNEG         : EFXForm_2<742, (outs sperc:$RT), (ins sperc:$RA),
2220b57cec5SDimitry Andric                               "efdneg $RT, $RA", IIC_FPDGeneral,
2230b57cec5SDimitry Andric                               [(set f64:$RT, (fneg f64:$RA))]>;
2240b57cec5SDimitry Andric
2250b57cec5SDimitry Andricdef EFDSUB         : EFXForm_1<737, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
2260b57cec5SDimitry Andric                               "efdsub $RT, $RA, $RB", IIC_FPDGeneral,
227fe6060f1SDimitry Andric                               [(set f64:$RT, (any_fsub f64:$RA, f64:$RB))]>;
2280b57cec5SDimitry Andric
2290b57cec5SDimitry Andriclet isCompare = 1 in {
2300b57cec5SDimitry Andricdef EFDTSTEQ       : EFXForm_3<766, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
2310b57cec5SDimitry Andric                               "efdtsteq $crD, $RA, $RB", IIC_FPDGeneral>;
2320b57cec5SDimitry Andricdef EFDTSTGT       : EFXForm_3<764, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
2330b57cec5SDimitry Andric                               "efdtstgt $crD, $RA, $RB", IIC_FPDGeneral>;
2340b57cec5SDimitry Andricdef EFDTSTLT       : EFXForm_3<765, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
2350b57cec5SDimitry Andric                               "efdtstlt $crD, $RA, $RB", IIC_FPDGeneral>;
2360b57cec5SDimitry Andric}
2370b57cec5SDimitry Andric
2380b57cec5SDimitry Andric// Single-precision floating point
2390b57cec5SDimitry Andricdef EFSABS         : EFXForm_2<708, (outs spe4rc:$RT), (ins spe4rc:$RA),
2400b57cec5SDimitry Andric                                "efsabs $RT, $RA", IIC_FPSGeneral,
2410b57cec5SDimitry Andric                                [(set f32:$RT, (fabs f32:$RA))]>;
2420b57cec5SDimitry Andric
2430b57cec5SDimitry Andricdef EFSADD         : EFXForm_1<704, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
2440b57cec5SDimitry Andric                                "efsadd $RT, $RA, $RB", IIC_FPAddSub,
245fe6060f1SDimitry Andric                                [(set f32:$RT, (any_fadd f32:$RA, f32:$RB))]>;
2460b57cec5SDimitry Andric
2470b57cec5SDimitry Andricdef EFSCFD         : EFXForm_2a<719, (outs spe4rc:$RT), (ins sperc:$RB),
2480b57cec5SDimitry Andric                                "efscfd $RT, $RB", IIC_FPSGeneral,
249fe6060f1SDimitry Andric                                [(set f32:$RT, (any_fpround f64:$RB))]>;
2500b57cec5SDimitry Andric
2510b57cec5SDimitry Andricdef EFSCFSF        : EFXForm_2a<723, (outs spe4rc:$RT), (ins spe4rc:$RB),
2520b57cec5SDimitry Andric                                "efscfsf $RT, $RB", IIC_FPSGeneral, []>;
2530b57cec5SDimitry Andric
2540b57cec5SDimitry Andricdef EFSCFSI        : EFXForm_2a<721, (outs spe4rc:$RT), (ins gprc:$RB),
2550b57cec5SDimitry Andric                                "efscfsi $RT, $RB", IIC_FPSGeneral,
2565ffd83dbSDimitry Andric                                [(set f32:$RT, (any_sint_to_fp i32:$RB))]>;
2570b57cec5SDimitry Andric
2580b57cec5SDimitry Andricdef EFSCFUF        : EFXForm_2a<722, (outs spe4rc:$RT), (ins spe4rc:$RB),
2590b57cec5SDimitry Andric                                "efscfuf $RT, $RB", IIC_FPSGeneral, []>;
2600b57cec5SDimitry Andric
2610b57cec5SDimitry Andricdef EFSCFUI        : EFXForm_2a<720, (outs spe4rc:$RT), (ins gprc:$RB),
2620b57cec5SDimitry Andric                                "efscfui $RT, $RB", IIC_FPSGeneral,
2635ffd83dbSDimitry Andric                                [(set f32:$RT, (any_uint_to_fp i32:$RB))]>;
2640b57cec5SDimitry Andric
2650b57cec5SDimitry Andriclet isCompare = 1 in {
2660b57cec5SDimitry Andricdef EFSCMPEQ       : EFXForm_3<718, (outs crrc:$crD), (ins spe4rc:$RA, spe4rc:$RB),
2670b57cec5SDimitry Andric                               "efscmpeq $crD, $RA, $RB", IIC_FPCompare>;
2680b57cec5SDimitry Andricdef EFSCMPGT       : EFXForm_3<716, (outs crrc:$crD), (ins spe4rc:$RA, spe4rc:$RB),
2690b57cec5SDimitry Andric                               "efscmpgt $crD, $RA, $RB", IIC_FPCompare>;
2700b57cec5SDimitry Andricdef EFSCMPLT       : EFXForm_3<717, (outs crrc:$crD), (ins spe4rc:$RA, spe4rc:$RB),
2710b57cec5SDimitry Andric                               "efscmplt $crD, $RA, $RB", IIC_FPCompare>;
2720b57cec5SDimitry Andric}
2730b57cec5SDimitry Andric
2740b57cec5SDimitry Andricdef EFSCTSF        : EFXForm_2a<727, (outs spe4rc:$RT), (ins spe4rc:$RB),
2750b57cec5SDimitry Andric                                "efsctsf $RT, $RB", IIC_FPSGeneral, []>;
2760b57cec5SDimitry Andric
2770b57cec5SDimitry Andricdef EFSCTSI        : EFXForm_2a<725, (outs gprc:$RT), (ins spe4rc:$RB),
2780b57cec5SDimitry Andric                                "efsctsi $RT, $RB", IIC_FPSGeneral,
2790b57cec5SDimitry Andric                                []>;
2800b57cec5SDimitry Andric
2810b57cec5SDimitry Andricdef EFSCTSIZ       : EFXForm_2a<730, (outs gprc:$RT), (ins spe4rc:$RB),
2820b57cec5SDimitry Andric                                "efsctsiz $RT, $RB", IIC_FPSGeneral,
2835ffd83dbSDimitry Andric                                [(set i32:$RT, (any_fp_to_sint f32:$RB))]>;
2840b57cec5SDimitry Andric
2850b57cec5SDimitry Andricdef EFSCTUF        : EFXForm_2a<726, (outs sperc:$RT), (ins spe4rc:$RB),
2860b57cec5SDimitry Andric                                "efsctuf $RT, $RB", IIC_FPSGeneral, []>;
2870b57cec5SDimitry Andric
2880b57cec5SDimitry Andricdef EFSCTUI        : EFXForm_2a<724, (outs gprc:$RT), (ins spe4rc:$RB),
2890b57cec5SDimitry Andric                                "efsctui $RT, $RB", IIC_FPSGeneral,
2900b57cec5SDimitry Andric                                []>;
2910b57cec5SDimitry Andric
2920b57cec5SDimitry Andricdef EFSCTUIZ       : EFXForm_2a<728, (outs gprc:$RT), (ins spe4rc:$RB),
2930b57cec5SDimitry Andric                                "efsctuiz $RT, $RB", IIC_FPSGeneral,
2945ffd83dbSDimitry Andric                                [(set i32:$RT, (any_fp_to_uint f32:$RB))]>;
2950b57cec5SDimitry Andric
2960b57cec5SDimitry Andricdef EFSDIV         : EFXForm_1<713, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
2970b57cec5SDimitry Andric                               "efsdiv $RT, $RA, $RB", IIC_FPDivD,
298fe6060f1SDimitry Andric                               [(set f32:$RT, (any_fdiv f32:$RA, f32:$RB))]>;
2990b57cec5SDimitry Andric
3000b57cec5SDimitry Andricdef EFSMUL         : EFXForm_1<712, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
3010b57cec5SDimitry Andric                               "efsmul $RT, $RA, $RB", IIC_FPGeneral,
302fe6060f1SDimitry Andric                               [(set f32:$RT, (any_fmul f32:$RA, f32:$RB))]>;
3030b57cec5SDimitry Andric
3040b57cec5SDimitry Andricdef EFSNABS        : EFXForm_2<709, (outs spe4rc:$RT), (ins spe4rc:$RA),
3050b57cec5SDimitry Andric                               "efsnabs $RT, $RA", IIC_FPGeneral,
3060b57cec5SDimitry Andric                               [(set f32:$RT, (fneg (fabs f32:$RA)))]>;
3070b57cec5SDimitry Andric
3080b57cec5SDimitry Andricdef EFSNEG         : EFXForm_2<710, (outs spe4rc:$RT), (ins spe4rc:$RA),
3090b57cec5SDimitry Andric                               "efsneg $RT, $RA", IIC_FPGeneral,
3100b57cec5SDimitry Andric                               [(set f32:$RT, (fneg f32:$RA))]>;
3110b57cec5SDimitry Andric
3120b57cec5SDimitry Andricdef EFSSUB         : EFXForm_1<705, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
3130b57cec5SDimitry Andric                               "efssub $RT, $RA, $RB", IIC_FPSGeneral,
314fe6060f1SDimitry Andric                               [(set f32:$RT, (any_fsub f32:$RA, f32:$RB))]>;
3150b57cec5SDimitry Andric
3160b57cec5SDimitry Andriclet isCompare = 1 in {
3170b57cec5SDimitry Andricdef EFSTSTEQ       : EFXForm_3<734, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
3180b57cec5SDimitry Andric                               "efststeq $crD, $RA, $RB", IIC_FPCompare>;
3190b57cec5SDimitry Andricdef EFSTSTGT       : EFXForm_3<732, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
3200b57cec5SDimitry Andric                               "efststgt $crD, $RA, $RB", IIC_FPCompare>;
3210b57cec5SDimitry Andricdef EFSTSTLT       : EFXForm_3<733, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
3220b57cec5SDimitry Andric                               "efststlt $crD, $RA, $RB", IIC_FPCompare>;
3230b57cec5SDimitry Andric}
3240b57cec5SDimitry Andric
3250b57cec5SDimitry Andric// SPE Vector operations
3260b57cec5SDimitry Andric
3270b57cec5SDimitry Andricdef EVABS          : EVXForm_2<520, (outs sperc:$RT), (ins sperc:$RA),
3280b57cec5SDimitry Andric                               "evabs $RT, $RA", IIC_VecGeneral,
3290b57cec5SDimitry Andric                               []>;
3300b57cec5SDimitry Andric
3310b57cec5SDimitry Andricdef EVADDIW        : EVXForm_1<514, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
3320b57cec5SDimitry Andric                               "evaddiw $RT, $RB, $RA", IIC_VecGeneral, []>;
3330b57cec5SDimitry Andricdef EVADDSMIAAW    : EVXForm_2<1225, (outs sperc:$RT), (ins sperc:$RA),
3340b57cec5SDimitry Andric                               "evaddsmiaaw $RT, $RA", IIC_VecComplex, []>;
3350b57cec5SDimitry Andricdef EVADDSSIAAW    : EVXForm_2<1217, (outs sperc:$RT), (ins sperc:$RA),
3360b57cec5SDimitry Andric                               "evaddssiaaw $RT, $RA", IIC_VecComplex, []>;
3370b57cec5SDimitry Andricdef EVADDUSIAAW    : EVXForm_2<1216, (outs sperc:$RT), (ins sperc:$RA),
3380b57cec5SDimitry Andric                               "evaddusiaaw $RT, $RA", IIC_VecComplex, []>;
3390b57cec5SDimitry Andricdef EVADDUMIAAW    : EVXForm_2<1224, (outs sperc:$RT), (ins sperc:$RA),
3400b57cec5SDimitry Andric                               "evaddumiaaw $RT, $RA", IIC_VecComplex, []>;
3410b57cec5SDimitry Andricdef EVADDW         : EVXForm_1<512, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
3420b57cec5SDimitry Andric                               "evaddw $RT, $RA, $RB", IIC_VecGeneral,
3430b57cec5SDimitry Andric                               []>;
3440b57cec5SDimitry Andric
3450b57cec5SDimitry Andricdef EVAND          : EVXForm_1<529, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
3460b57cec5SDimitry Andric                               "evand $RT, $RA, $RB", IIC_VecGeneral,
3470b57cec5SDimitry Andric                               []>;
3480b57cec5SDimitry Andricdef EVANDC         : EVXForm_1<530, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
3490b57cec5SDimitry Andric                               "evandc $RT, $RA, $RB", IIC_VecGeneral,
3500b57cec5SDimitry Andric                               []>;
3510b57cec5SDimitry Andric
3520b57cec5SDimitry Andriclet isCompare = 1 in {
3530b57cec5SDimitry Andricdef EVCMPEQ        : EVXForm_3<564, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
3540b57cec5SDimitry Andric                               "evcmpeq $crD, $RA, $RB", IIC_VecGeneral, []>;
3550b57cec5SDimitry Andricdef EVCMPGTS       : EVXForm_3<561, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
3560b57cec5SDimitry Andric                               "evcmpgts $crD, $RA, $RB", IIC_VecGeneral, []>;
3570b57cec5SDimitry Andricdef EVCMPGTU       : EVXForm_3<560, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
3580b57cec5SDimitry Andric                               "evcmpgtu $crD, $RA, $RB", IIC_VecGeneral, []>;
3590b57cec5SDimitry Andricdef EVCMPLTS       : EVXForm_3<563, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
3600b57cec5SDimitry Andric                               "evcmplts $crD, $RA, $RB", IIC_VecGeneral, []>;
3610b57cec5SDimitry Andricdef EVCMPLTU       : EVXForm_3<562, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
3620b57cec5SDimitry Andric                               "evcmpltu $crD, $RA, $RB", IIC_VecGeneral, []>;
3630b57cec5SDimitry Andric}
3640b57cec5SDimitry Andric
3650b57cec5SDimitry Andricdef EVCNTLSW       : EVXForm_2<526, (outs sperc:$RT), (ins sperc:$RA),
3660b57cec5SDimitry Andric                               "evcntlsw $RT, $RA", IIC_VecGeneral, []>;
3670b57cec5SDimitry Andricdef EVCNTLZW       : EVXForm_2<525, (outs sperc:$RT), (ins sperc:$RA),
3680b57cec5SDimitry Andric                               "evcntlzw $RT, $RA", IIC_VecGeneral,
3690b57cec5SDimitry Andric                               []>;
3700b57cec5SDimitry Andric
3710b57cec5SDimitry Andricdef EVDIVWS        : EVXForm_1<1222, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
3720b57cec5SDimitry Andric                               "evdivws $RT, $RA, $RB", IIC_VecComplex,
3730b57cec5SDimitry Andric                               []>;
3740b57cec5SDimitry Andricdef EVDIVWU        : EVXForm_1<1223, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
3750b57cec5SDimitry Andric                               "evdivwu $RT, $RA, $RB", IIC_VecComplex,
3760b57cec5SDimitry Andric                               []>;
3770b57cec5SDimitry Andric
3780b57cec5SDimitry Andricdef EVEQV          : EVXForm_1<537, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
3790b57cec5SDimitry Andric                               "eveqv $RT, $RA, $RB", IIC_VecGeneral,
3800b57cec5SDimitry Andric                               []>;
3810b57cec5SDimitry Andric
3820b57cec5SDimitry Andricdef EVEXTSB        : EVXForm_2<522, (outs sperc:$RT), (ins sperc:$RA),
3830b57cec5SDimitry Andric                               "evextsb $RT, $RA", IIC_VecGeneral,
3840b57cec5SDimitry Andric                               []>;
3850b57cec5SDimitry Andricdef EVEXTSH        : EVXForm_2<523, (outs sperc:$RT), (ins sperc:$RA),
3860b57cec5SDimitry Andric                               "evextsh $RT, $RA", IIC_VecGeneral,
3870b57cec5SDimitry Andric                               []>;
3880b57cec5SDimitry Andric
3890b57cec5SDimitry Andricdef EVFSABS        : EVXForm_2<644, (outs sperc:$RT), (ins sperc:$RA),
3900b57cec5SDimitry Andric                               "evfsabs $RT, $RA", IIC_VecGeneral,
3910b57cec5SDimitry Andric                               []>;
3920b57cec5SDimitry Andricdef EVFSADD        : EVXForm_1<640, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
3930b57cec5SDimitry Andric                               "evfsadd $RT, $RA, $RB", IIC_VecComplex,
3940b57cec5SDimitry Andric                               []>;
3950b57cec5SDimitry Andricdef EVFSCFSF       : EVXForm_2a<659, (outs sperc:$RT), (ins sperc:$RB),
3960b57cec5SDimitry Andric                                "evfscfsf $RT, $RB", IIC_VecComplex, []>;
3970b57cec5SDimitry Andricdef EVFSCFSI       : EVXForm_2a<657, (outs sperc:$RT), (ins sperc:$RB),
3980b57cec5SDimitry Andric                                "evfscfsi $RT, $RB", IIC_VecComplex,
3990b57cec5SDimitry Andric                                []>;
4000b57cec5SDimitry Andricdef EVFSCFUF       : EVXForm_2a<658, (outs sperc:$RT), (ins sperc:$RB),
4010b57cec5SDimitry Andric                                "evfscfuf $RT, $RB", IIC_VecComplex, []>;
4020b57cec5SDimitry Andricdef EVFSCFUI       : EVXForm_2a<650, (outs sperc:$RT), (ins sperc:$RB),
4030b57cec5SDimitry Andric                                "evfscfui $RT, $RB", IIC_VecComplex,
4040b57cec5SDimitry Andric                                []>;
4050b57cec5SDimitry Andriclet isCompare = 1 in {
4060b57cec5SDimitry Andricdef EVFSCMPEQ      : EVXForm_3<654, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
4070b57cec5SDimitry Andric                               "evfscmpeq $crD, $RA, $RB", IIC_FPSGeneral, []>;
4080b57cec5SDimitry Andricdef EVFSCMPGT      : EVXForm_3<652, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
4090b57cec5SDimitry Andric                               "evfscmpgt $crD, $RA, $RB", IIC_FPSGeneral, []>;
4100b57cec5SDimitry Andricdef EVFSCMPLT      : EVXForm_3<653, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
4110b57cec5SDimitry Andric                               "evfscmplt $crD, $RA, $RB", IIC_FPSGeneral, []>;
4120b57cec5SDimitry Andric}
4130b57cec5SDimitry Andric
4140b57cec5SDimitry Andricdef EVFSCTSF        : EVXForm_2a<663, (outs sperc:$RT), (ins sperc:$RB),
4150b57cec5SDimitry Andric                                "evfsctsf $RT, $RB", IIC_VecComplex, []>;
4160b57cec5SDimitry Andricdef EVFSCTSI        : EVXForm_2a<661, (outs sperc:$RT), (ins sperc:$RB),
4170b57cec5SDimitry Andric                                "evfsctsi $RT, $RB", IIC_VecComplex,
4180b57cec5SDimitry Andric                                []>;
4190b57cec5SDimitry Andricdef EVFSCTSIZ       : EVXForm_2a<666, (outs sperc:$RT), (ins sperc:$RB),
4200b57cec5SDimitry Andric                                "evfsctsiz $RT, $RB", IIC_VecComplex,
4210b57cec5SDimitry Andric                                []>;
4220b57cec5SDimitry Andricdef EVFSCTUF        : EVXForm_2a<662, (outs sperc:$RT), (ins sperc:$RB),
4230b57cec5SDimitry Andric                                "evfsctsf $RT, $RB", IIC_VecComplex, []>;
4240b57cec5SDimitry Andricdef EVFSCTUI        : EVXForm_2a<660, (outs sperc:$RT), (ins sperc:$RB),
4250b57cec5SDimitry Andric                                "evfsctui $RT, $RB", IIC_VecComplex,
4260b57cec5SDimitry Andric                                []>;
4270b57cec5SDimitry Andricdef EVFSCTUIZ       : EVXForm_2a<664, (outs sperc:$RT), (ins sperc:$RB),
4280b57cec5SDimitry Andric                                "evfsctsiz $RT, $RB", IIC_VecComplex,
4290b57cec5SDimitry Andric                                []>;
4300b57cec5SDimitry Andricdef EVFSDIV         : EVXForm_1<649, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
4310b57cec5SDimitry Andric                               "evfsdiv $RT, $RA, $RB", IIC_FPDivD,
4320b57cec5SDimitry Andric                               []>;
4330b57cec5SDimitry Andricdef EVFSMUL         : EVXForm_1<648, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
4340b57cec5SDimitry Andric                               "evfsmul $RT, $RA, $RB", IIC_VecComplex,
4350b57cec5SDimitry Andric                               []>;
4360b57cec5SDimitry Andricdef EVFSNABS        : EVXForm_2<645, (outs sperc:$RT), (ins sperc:$RA),
4370b57cec5SDimitry Andric                               "evfsnabs $RT, $RA", IIC_VecGeneral,
4380b57cec5SDimitry Andric                               []>;
4390b57cec5SDimitry Andricdef EVFSNEG         : EVXForm_2<646, (outs sperc:$RT), (ins sperc:$RA),
4400b57cec5SDimitry Andric                               "evfsneg $RT, $RA", IIC_VecGeneral,
4410b57cec5SDimitry Andric                               []>;
4420b57cec5SDimitry Andricdef EVFSSUB         : EVXForm_1<641, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
4430b57cec5SDimitry Andric                               "evfssub $RT, $RA, $RB", IIC_VecComplex,
4440b57cec5SDimitry Andric                               []>;
4450b57cec5SDimitry Andric
4460b57cec5SDimitry Andriclet isCompare = 1 in {
4470b57cec5SDimitry Andricdef EVFSTSTEQ       : EVXForm_3<670, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
4480b57cec5SDimitry Andric                               "evfststeq $crD, $RA, $RB", IIC_VecGeneral, []>;
4490b57cec5SDimitry Andricdef EVFSTSTGT       : EVXForm_3<668, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
4500b57cec5SDimitry Andric                               "evfststgt $crD, $RA, $RB", IIC_VecGeneral, []>;
4510b57cec5SDimitry Andricdef EVFSTSTLT       : EVXForm_3<669, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
4520b57cec5SDimitry Andric                               "evfststlt $crD, $RA, $RB", IIC_VecGeneral, []>;
4530b57cec5SDimitry Andric}
4540b57cec5SDimitry Andric
455*06c3fb27SDimitry Andricdef EVLDD          : EVXForm_D<769, (outs sperc:$RT), (ins (spe8dis $D, $RA):$dst),
4560b57cec5SDimitry Andric                               "evldd $RT, $dst", IIC_LdStLoad,
4570b57cec5SDimitry Andric                               [(set f64:$RT, (load iaddr:$dst))]>;
458*06c3fb27SDimitry Andricdef EVLDDX         : EVXForm_1<768, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
4590b57cec5SDimitry Andric                               "evlddx $RT, $src", IIC_LdStLoad,
4600b57cec5SDimitry Andric                               [(set f64:$RT, (load xaddr:$src))]>;
461*06c3fb27SDimitry Andricdef EVLDH          : EVXForm_D<773, (outs sperc:$RT), (ins (spe8dis $D, $RA):$dst),
4620b57cec5SDimitry Andric                               "evldh $RT, $dst", IIC_LdStLoad, []>;
463*06c3fb27SDimitry Andricdef EVLDHX         : EVXForm_1<772, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
4640b57cec5SDimitry Andric                               "evldhx $RT, $src", IIC_LdStLoad, []>;
465*06c3fb27SDimitry Andricdef EVLDW          : EVXForm_D<771, (outs sperc:$RT), (ins (spe8dis $D, $RA):$dst),
4660b57cec5SDimitry Andric                               "evldw $RT, $dst", IIC_LdStLoad,
4670b57cec5SDimitry Andric                               []>;
468*06c3fb27SDimitry Andricdef EVLDWX         : EVXForm_1<770, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
4690b57cec5SDimitry Andric                               "evldwx $RT, $src", IIC_LdStLoad,
4700b57cec5SDimitry Andric                               []>;
471*06c3fb27SDimitry Andricdef EVLHHESPLAT    : EVXForm_D<777, (outs sperc:$RT), (ins (spe2dis $D, $RA):$dst),
4720b57cec5SDimitry Andric                               "evlhhesplat $RT, $dst", IIC_LdStLoad, []>;
473*06c3fb27SDimitry Andricdef EVLHHESPLATX   : EVXForm_1<776, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
4740b57cec5SDimitry Andric                               "evlhhesplatx $RT, $src", IIC_LdStLoad, []>;
475*06c3fb27SDimitry Andricdef EVLHHOUSPLAT   : EVXForm_D<781, (outs sperc:$RT), (ins (spe2dis $D, $RA):$dst),
4760b57cec5SDimitry Andric                               "evlhhousplat $RT, $dst", IIC_LdStLoad, []>;
477*06c3fb27SDimitry Andricdef EVLHHOUSPLATX  : EVXForm_1<780, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
4780b57cec5SDimitry Andric                               "evlhhousplatx $RT, $src", IIC_LdStLoad, []>;
479*06c3fb27SDimitry Andricdef EVLHHOSSPLAT   : EVXForm_D<783, (outs sperc:$RT), (ins (spe2dis $D, $RA):$dst),
4800b57cec5SDimitry Andric                               "evlhhossplat $RT, $dst", IIC_LdStLoad, []>;
481*06c3fb27SDimitry Andricdef EVLHHOSSPLATX  : EVXForm_1<782, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
4820b57cec5SDimitry Andric                               "evlhhossplatx $RT, $src", IIC_LdStLoad, []>;
483*06c3fb27SDimitry Andricdef EVLWHE         : EVXForm_D<785, (outs sperc:$RT), (ins (spe4dis $D, $RA):$dst),
4840b57cec5SDimitry Andric                               "evlwhe $RT, $dst", IIC_LdStLoad, []>;
485*06c3fb27SDimitry Andricdef EVLWHEX        : EVXForm_1<784, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
4860b57cec5SDimitry Andric                               "evlwhex $RT, $src", IIC_LdStLoad, []>;
487*06c3fb27SDimitry Andricdef EVLWHOS        : EVXForm_D<791, (outs sperc:$RT), (ins (spe4dis $D, $RA):$dst),
4880b57cec5SDimitry Andric                               "evlwhos $RT, $dst", IIC_LdStLoad, []>;
489*06c3fb27SDimitry Andricdef EVLWHOSX       : EVXForm_1<790, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
4900b57cec5SDimitry Andric                               "evlwhosx $RT, $src", IIC_LdStLoad, []>;
491*06c3fb27SDimitry Andricdef EVLWHOU        : EVXForm_D<789, (outs sperc:$RT), (ins (spe4dis $D, $RA):$dst),
4920b57cec5SDimitry Andric                               "evlwhou $RT, $dst", IIC_LdStLoad, []>;
493*06c3fb27SDimitry Andricdef EVLWHOUX       : EVXForm_1<788, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
4940b57cec5SDimitry Andric                               "evlwhoux $RT, $src", IIC_LdStLoad, []>;
495*06c3fb27SDimitry Andricdef EVLWHSPLAT     : EVXForm_D<797, (outs sperc:$RT), (ins (spe4dis $D, $RA):$dst),
4960b57cec5SDimitry Andric                               "evlwhsplat $RT, $dst", IIC_LdStLoad, []>;
497*06c3fb27SDimitry Andricdef EVLWHSPLATX    : EVXForm_1<796, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
4980b57cec5SDimitry Andric                               "evlwhsplatx $RT, $src", IIC_LdStLoad, []>;
499*06c3fb27SDimitry Andricdef EVLWWSPLAT     : EVXForm_D<793, (outs sperc:$RT), (ins (spe4dis $D, $RA):$dst),
5000b57cec5SDimitry Andric                               "evlwwsplat $RT, $dst", IIC_LdStLoad, []>;
501*06c3fb27SDimitry Andricdef EVLWWSPLATX    : EVXForm_1<792, (outs sperc:$RT), (ins (memrr $RA, $RB):$src),
5020b57cec5SDimitry Andric                               "evlwwsplatx $RT, $src", IIC_LdStLoad, []>;
5030b57cec5SDimitry Andric
5040b57cec5SDimitry Andricdef EVMERGEHI      : EVXForm_1<556, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5050b57cec5SDimitry Andric                               "evmergehi $RT, $RA, $RB", IIC_VecGeneral, []>;
5060b57cec5SDimitry Andricdef EVMERGELO      : EVXForm_1<557, (outs sperc:$RT), (ins gprc:$RA, gprc:$RB),
5070b57cec5SDimitry Andric                               "evmergelo $RT, $RA, $RB", IIC_VecGeneral, []>;
5080b57cec5SDimitry Andricdef EVMERGEHILO    : EVXForm_1<558, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5090b57cec5SDimitry Andric                               "evmergehilo $RT, $RA, $RB", IIC_VecGeneral, []>;
5100b57cec5SDimitry Andricdef EVMERGELOHI    : EVXForm_1<559, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5110b57cec5SDimitry Andric                               "evmergelohi $RT, $RA, $RB", IIC_VecGeneral, []>;
5120b57cec5SDimitry Andric
5130b57cec5SDimitry Andricdef EVMHEGSMFAA    : EVXForm_1<1323, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5140b57cec5SDimitry Andric                               "evmhegsmfaa $RT, $RA, $RB", IIC_VecComplex, []>;
5150b57cec5SDimitry Andricdef EVMHEGSMFAN    : EVXForm_1<1451, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5160b57cec5SDimitry Andric                               "evmhegsmfan $RT, $RA, $RB", IIC_VecComplex, []>;
5170b57cec5SDimitry Andricdef EVMHEGSMIAA    : EVXForm_1<1321, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5180b57cec5SDimitry Andric                               "evmhegsmiaa $RT, $RA, $RB", IIC_VecComplex, []>;
5190b57cec5SDimitry Andricdef EVMHEGSMIAN    : EVXForm_1<1449, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5200b57cec5SDimitry Andric                               "evmhegsmian $RT, $RA, $RB", IIC_VecComplex, []>;
5210b57cec5SDimitry Andricdef EVMHEGUMIAA    : EVXForm_1<1320, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5220b57cec5SDimitry Andric                               "evmhegumiaa $RT, $RA, $RB", IIC_VecComplex, []>;
5230b57cec5SDimitry Andricdef EVMHEGUMIAN    : EVXForm_1<1448, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5240b57cec5SDimitry Andric                               "evmhegumian $RT, $RA, $RB", IIC_VecComplex, []>;
5250b57cec5SDimitry Andric
5260b57cec5SDimitry Andricdef EVMHESMF       : EVXForm_1<1035, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5270b57cec5SDimitry Andric                               "evmhesmf $RT, $RA, $RB", IIC_VecComplex, []>;
5280b57cec5SDimitry Andricdef EVMHESMFA      : EVXForm_1<1067, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5290b57cec5SDimitry Andric                               "evmhesmfa $RT, $RA, $RB", IIC_VecComplex, []>;
5300b57cec5SDimitry Andricdef EVMHESMFAAW    : EVXForm_1<1291, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5310b57cec5SDimitry Andric                               "evmhesmfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
5320b57cec5SDimitry Andricdef EVMHESMFANW    : EVXForm_1<1419, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5330b57cec5SDimitry Andric                               "evmhesmfanw $RT, $RA, $RB", IIC_VecComplex, []>;
5340b57cec5SDimitry Andricdef EVMHESMI       : EVXForm_1<1033, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5350b57cec5SDimitry Andric                               "evmhesmi $RT, $RA, $RB", IIC_VecComplex, []>;
5360b57cec5SDimitry Andricdef EVMHESMIA      : EVXForm_1<1065, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5370b57cec5SDimitry Andric                               "evmhesmia $RT, $RA, $RB", IIC_VecComplex, []>;
5380b57cec5SDimitry Andricdef EVMHESMIAAW    : EVXForm_1<1289, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5390b57cec5SDimitry Andric                               "evmhesmiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
5400b57cec5SDimitry Andricdef EVMHESMIANW    : EVXForm_1<1417, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5410b57cec5SDimitry Andric                               "evmhesmianw $RT, $RA, $RB", IIC_VecComplex, []>;
5420b57cec5SDimitry Andricdef EVMHESSF       : EVXForm_1<1027, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5430b57cec5SDimitry Andric                               "evmhessf $RT, $RA, $RB", IIC_VecComplex, []>;
5440b57cec5SDimitry Andricdef EVMHESSFA      : EVXForm_1<1059, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5450b57cec5SDimitry Andric                               "evmhessfa $RT, $RA, $RB", IIC_VecComplex, []>;
5460b57cec5SDimitry Andricdef EVMHESSFAAW    : EVXForm_1<1283, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5470b57cec5SDimitry Andric                               "evmhessfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
5480b57cec5SDimitry Andricdef EVMHESSFANW    : EVXForm_1<1411, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5490b57cec5SDimitry Andric                               "evmhessfanw $RT, $RA, $RB", IIC_VecComplex, []>;
5500b57cec5SDimitry Andricdef EVMHESSIAAW    : EVXForm_1<1281, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5510b57cec5SDimitry Andric                               "evmhessiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
5520b57cec5SDimitry Andricdef EVMHESSIANW    : EVXForm_1<1409, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5530b57cec5SDimitry Andric                               "evmhessianw $RT, $RA, $RB", IIC_VecComplex, []>;
5540b57cec5SDimitry Andricdef EVMHEUMI       : EVXForm_1<1032, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5550b57cec5SDimitry Andric                               "evmheumi $RT, $RA, $RB", IIC_VecComplex, []>;
5560b57cec5SDimitry Andricdef EVMHEUMIA      : EVXForm_1<1064, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5570b57cec5SDimitry Andric                               "evmheumia $RT, $RA, $RB", IIC_VecComplex, []>;
5580b57cec5SDimitry Andricdef EVMHEUMIAAW    : EVXForm_1<1288, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5590b57cec5SDimitry Andric                               "evmheumiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
5600b57cec5SDimitry Andricdef EVMHEUMIANW    : EVXForm_1<1416, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5610b57cec5SDimitry Andric                               "evmheumianw $RT, $RA, $RB", IIC_VecComplex, []>;
5620b57cec5SDimitry Andricdef EVMHEUSIAAW    : EVXForm_1<1280, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5630b57cec5SDimitry Andric                               "evmheusiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
5640b57cec5SDimitry Andricdef EVMHEUSIANW    : EVXForm_1<1408, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5650b57cec5SDimitry Andric                               "evmheusianw $RT, $RA, $RB", IIC_VecComplex, []>;
5660b57cec5SDimitry Andricdef EVMHOGSMFAA    : EVXForm_1<1327, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5670b57cec5SDimitry Andric                               "evmhogsmfaa $RT, $RA, $RB", IIC_VecComplex, []>;
5680b57cec5SDimitry Andricdef EVMHOGSMFAN    : EVXForm_1<1455, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5690b57cec5SDimitry Andric                               "evmhogsmfan $RT, $RA, $RB", IIC_VecComplex, []>;
5700b57cec5SDimitry Andricdef EVMHOGSMIAA    : EVXForm_1<1325, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5710b57cec5SDimitry Andric                               "evmhogsmiaa $RT, $RA, $RB", IIC_VecComplex, []>;
5720b57cec5SDimitry Andricdef EVMHOGSMIAN    : EVXForm_1<1453, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5730b57cec5SDimitry Andric                               "evmhogsmian $RT, $RA, $RB", IIC_VecComplex, []>;
5740b57cec5SDimitry Andricdef EVMHOGUMIAA    : EVXForm_1<1324, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5750b57cec5SDimitry Andric                               "evmhogumiaa $RT, $RA, $RB", IIC_VecComplex, []>;
5760b57cec5SDimitry Andricdef EVMHOGUMIAN    : EVXForm_1<1452, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5770b57cec5SDimitry Andric                               "evmhogumian $RT, $RA, $RB", IIC_VecComplex, []>;
5780b57cec5SDimitry Andricdef EVMHOSMF       : EVXForm_1<1039, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5790b57cec5SDimitry Andric                               "evmhosmf $RT, $RA, $RB", IIC_VecComplex, []>;
5800b57cec5SDimitry Andricdef EVMHOSMFA      : EVXForm_1<1071, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5810b57cec5SDimitry Andric                               "evmhosmfa $RT, $RA, $RB", IIC_VecComplex, []>;
5820b57cec5SDimitry Andricdef EVMHOSMFAAW    : EVXForm_1<1295, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5830b57cec5SDimitry Andric                               "evmhosmfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
5840b57cec5SDimitry Andricdef EVMHOSMFANW    : EVXForm_1<1423, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5850b57cec5SDimitry Andric                               "evmhosmfanw $RT, $RA, $RB", IIC_VecComplex, []>;
5860b57cec5SDimitry Andricdef EVMHOSMI       : EVXForm_1<1037, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5870b57cec5SDimitry Andric                               "evmhosmi $RT, $RA, $RB", IIC_VecComplex, []>;
5880b57cec5SDimitry Andricdef EVMHOSMIA      : EVXForm_1<1069, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5890b57cec5SDimitry Andric                               "evmhosmia $RT, $RA, $RB", IIC_VecComplex, []>;
5900b57cec5SDimitry Andricdef EVMHOSMIAAW    : EVXForm_1<1293, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5910b57cec5SDimitry Andric                               "evmhosmiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
5920b57cec5SDimitry Andricdef EVMHOSMIANW    : EVXForm_1<1421, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5930b57cec5SDimitry Andric                               "evmhosmianw $RT, $RA, $RB", IIC_VecComplex, []>;
5940b57cec5SDimitry Andricdef EVMHOSSF       : EVXForm_1<1031, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5950b57cec5SDimitry Andric                               "evmhossf $RT, $RA, $RB", IIC_VecComplex, []>;
5960b57cec5SDimitry Andricdef EVMHOSSFA      : EVXForm_1<1063, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5970b57cec5SDimitry Andric                               "evmhossfa $RT, $RA, $RB", IIC_VecComplex, []>;
5980b57cec5SDimitry Andricdef EVMHOSSFAAW    : EVXForm_1<1287, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
5990b57cec5SDimitry Andric                               "evmhossfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
6000b57cec5SDimitry Andricdef EVMHOSSFANW    : EVXForm_1<1415, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6010b57cec5SDimitry Andric                               "evmhossfanw $RT, $RA, $RB", IIC_VecComplex, []>;
6020b57cec5SDimitry Andricdef EVMHOSSIAAW    : EVXForm_1<1285, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6030b57cec5SDimitry Andric                               "evmhossiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
6040b57cec5SDimitry Andricdef EVMHOSSIANW    : EVXForm_1<1413, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6050b57cec5SDimitry Andric                               "evmhossianw $RT, $RA, $RB", IIC_VecComplex, []>;
6060b57cec5SDimitry Andricdef EVMHOUMI       : EVXForm_1<1036, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6070b57cec5SDimitry Andric                               "evmhoumi $RT, $RA, $RB", IIC_VecComplex, []>;
6080b57cec5SDimitry Andricdef EVMHOUMIA      : EVXForm_1<1068, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6090b57cec5SDimitry Andric                               "evmhoumia $RT, $RA, $RB", IIC_VecComplex, []>;
6100b57cec5SDimitry Andricdef EVMHOUMIAAW    : EVXForm_1<1292, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6110b57cec5SDimitry Andric                               "evmhoumiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
6120b57cec5SDimitry Andricdef EVMHOUMIANW    : EVXForm_1<1420, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6130b57cec5SDimitry Andric                               "evmhoumianw $RT, $RA, $RB", IIC_VecComplex, []>;
6140b57cec5SDimitry Andricdef EVMHOUSIAAW    : EVXForm_1<1284, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6150b57cec5SDimitry Andric                               "evmhousiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
6160b57cec5SDimitry Andricdef EVMHOUSIANW    : EVXForm_1<1412, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6170b57cec5SDimitry Andric                               "evmhousianw $RT, $RA, $RB", IIC_VecComplex, []>;
6180b57cec5SDimitry Andric
6190b57cec5SDimitry Andricdef EVMRA          : EVXForm_2<1220, (outs sperc:$RT), (ins sperc:$RA),
6200b57cec5SDimitry Andric                               "evmra $RT, $RA", IIC_VecComplex, []>;
6210b57cec5SDimitry Andric
6220b57cec5SDimitry Andricdef EVMWHSMF       : EVXForm_1<1103, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6230b57cec5SDimitry Andric                               "evmwhsmf $RT, $RA, $RB", IIC_VecComplex, []>;
6240b57cec5SDimitry Andricdef EVMWHSMFA      : EVXForm_1<1135, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6250b57cec5SDimitry Andric                               "evmwhsmfa $RT, $RA, $RB", IIC_VecComplex, []>;
6260b57cec5SDimitry Andricdef EVMWHSMI       : EVXForm_1<1101, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6270b57cec5SDimitry Andric                               "evmwhsmi $RT, $RA, $RB", IIC_VecComplex, []>;
6280b57cec5SDimitry Andricdef EVMWHSMIA      : EVXForm_1<1133, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6290b57cec5SDimitry Andric                               "evmwhsmia $RT, $RA, $RB", IIC_VecComplex, []>;
6300b57cec5SDimitry Andricdef EVMWHSSF       : EVXForm_1<1095, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6310b57cec5SDimitry Andric                               "evmwhssf $RT, $RA, $RB", IIC_VecComplex, []>;
6320b57cec5SDimitry Andricdef EVMWHSSFA      : EVXForm_1<1127, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6330b57cec5SDimitry Andric                               "evmwhssfa $RT, $RA, $RB", IIC_VecComplex, []>;
6340b57cec5SDimitry Andricdef EVMWHUMI       : EVXForm_1<1100, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6350b57cec5SDimitry Andric                               "evmwhumi $RT, $RA, $RB", IIC_VecComplex, []>;
6360b57cec5SDimitry Andricdef EVMWHUMIA      : EVXForm_1<1132, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6370b57cec5SDimitry Andric                               "evmwhumia $RT, $RA, $RB", IIC_VecComplex, []>;
6380b57cec5SDimitry Andricdef EVMWLSMIAAW    : EVXForm_1<1353, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6390b57cec5SDimitry Andric                               "evmwlsmiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
6400b57cec5SDimitry Andricdef EVMWLSMIANW    : EVXForm_1<1481, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6410b57cec5SDimitry Andric                               "evmwlsmianw $RT, $RA, $RB", IIC_VecComplex, []>;
6420b57cec5SDimitry Andricdef EVMWLSSIAAW    : EVXForm_1<1345, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6430b57cec5SDimitry Andric                               "evmwlssiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
6440b57cec5SDimitry Andricdef EVMWLSSIANW    : EVXForm_1<1473, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6450b57cec5SDimitry Andric                               "evmwlssianw $RT, $RA, $RB", IIC_VecComplex, []>;
6460b57cec5SDimitry Andricdef EVMWLUMI       : EVXForm_1<1096, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6470b57cec5SDimitry Andric                               "evmwlumi $RT, $RA, $RB", IIC_VecComplex,
6480b57cec5SDimitry Andric                               []>;
6490b57cec5SDimitry Andricdef EVMWLUMIA      : EVXForm_1<1128, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6500b57cec5SDimitry Andric                               "evmwlumia $RT, $RA, $RB", IIC_VecComplex, []>;
6510b57cec5SDimitry Andricdef EVMWLUMIAAW    : EVXForm_1<1352, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6520b57cec5SDimitry Andric                               "evmwlumiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
6530b57cec5SDimitry Andricdef EVMWLUMIANW    : EVXForm_1<1480, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6540b57cec5SDimitry Andric                               "evmwlumianw $RT, $RA, $RB", IIC_VecComplex, []>;
6550b57cec5SDimitry Andricdef EVMWLUSIAAW    : EVXForm_1<1344, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6560b57cec5SDimitry Andric                               "evmwlusiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
6570b57cec5SDimitry Andricdef EVMWLUSIANW    : EVXForm_1<1472, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6580b57cec5SDimitry Andric                               "evmwlusianw $RT, $RA, $RB", IIC_VecComplex, []>;
6590b57cec5SDimitry Andricdef EVMWSMF        : EVXForm_1<1115, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6600b57cec5SDimitry Andric                               "evmwsmf $RT, $RA, $RB", IIC_VecComplex, []>;
6610b57cec5SDimitry Andricdef EVMWSMFA       : EVXForm_1<1147, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6620b57cec5SDimitry Andric                               "evmwsmfa $RT, $RA, $RB", IIC_VecComplex, []>;
6630b57cec5SDimitry Andricdef EVMWSMFAA      : EVXForm_1<1371, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6640b57cec5SDimitry Andric                               "evmwsmfaa $RT, $RA, $RB", IIC_VecComplex, []>;
6650b57cec5SDimitry Andricdef EVMWSMFAN      : EVXForm_1<1499, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6660b57cec5SDimitry Andric                               "evmwsmfan $RT, $RA, $RB", IIC_VecComplex, []>;
6670b57cec5SDimitry Andricdef EVMWSMI        : EVXForm_1<1113, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6680b57cec5SDimitry Andric                               "evmwsmi $RT, $RA, $RB", IIC_VecComplex, []>;
6690b57cec5SDimitry Andricdef EVMWSMIA       : EVXForm_1<1145, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6700b57cec5SDimitry Andric                               "evmwsmia $RT, $RA, $RB", IIC_VecComplex, []>;
6710b57cec5SDimitry Andricdef EVMWSMIAA      : EVXForm_1<1369, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6720b57cec5SDimitry Andric                               "evmwsmiaa $RT, $RA, $RB", IIC_VecComplex, []>;
6730b57cec5SDimitry Andricdef EVMWSMIAN      : EVXForm_1<1497, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6740b57cec5SDimitry Andric                               "evmwsmian $RT, $RA, $RB", IIC_VecComplex, []>;
6750b57cec5SDimitry Andricdef EVMWSSF        : EVXForm_1<1107, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6760b57cec5SDimitry Andric                               "evmwssf $RT, $RA, $RB", IIC_VecComplex, []>;
6770b57cec5SDimitry Andricdef EVMWSSFA       : EVXForm_1<1139, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6780b57cec5SDimitry Andric                               "evmwssfa $RT, $RA, $RB", IIC_VecComplex, []>;
6790b57cec5SDimitry Andricdef EVMWSSFAA      : EVXForm_1<1363, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6800b57cec5SDimitry Andric                               "evmwssfaa $RT, $RA, $RB", IIC_VecComplex, []>;
6810b57cec5SDimitry Andricdef EVMWSSFAN      : EVXForm_1<1491, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6820b57cec5SDimitry Andric                               "evmwssfan $RT, $RA, $RB", IIC_VecComplex, []>;
6830b57cec5SDimitry Andricdef EVMWUMI        : EVXForm_1<1112, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6840b57cec5SDimitry Andric                               "evmwumi $RT, $RA, $RB", IIC_VecComplex, []>;
6850b57cec5SDimitry Andricdef EVMWUMIA       : EVXForm_1<1144, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6860b57cec5SDimitry Andric                               "evmwumia $RT, $RA, $RB", IIC_VecComplex, []>;
6870b57cec5SDimitry Andricdef EVMWUMIAA      : EVXForm_1<1368, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6880b57cec5SDimitry Andric                               "evmwumiaa $RT, $RA, $RB", IIC_VecComplex, []>;
6890b57cec5SDimitry Andricdef EVMWUMIAN      : EVXForm_1<1496, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6900b57cec5SDimitry Andric                               "evmwumian $RT, $RA, $RB", IIC_VecComplex, []>;
6910b57cec5SDimitry Andric
6920b57cec5SDimitry Andric
6930b57cec5SDimitry Andricdef EVNAND         : EVXForm_1<542, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
6940b57cec5SDimitry Andric                               "evnand $RT, $RA, $RB", IIC_VecGeneral,
6950b57cec5SDimitry Andric                               []>;
6960b57cec5SDimitry Andric
6970b57cec5SDimitry Andricdef EVNEG          : EVXForm_2<521, (outs sperc:$RT), (ins sperc:$RA),
6980b57cec5SDimitry Andric                               "evneg $RT, $RA", IIC_VecGeneral,
6990b57cec5SDimitry Andric                               []>;
7000b57cec5SDimitry Andric
7010b57cec5SDimitry Andricdef EVNOR          : EVXForm_1<536, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
7020b57cec5SDimitry Andric                               "evnor $RT, $RA, $RB", IIC_VecGeneral,
7030b57cec5SDimitry Andric                               []>;
7040b57cec5SDimitry Andricdef EVOR           : EVXForm_1<535, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
7050b57cec5SDimitry Andric                               "evor $RT, $RA, $RB", IIC_VecGeneral,
7060b57cec5SDimitry Andric                               []>;
7070b57cec5SDimitry Andricdef EVORC          : EVXForm_1<539, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
7080b57cec5SDimitry Andric                               "evorc $RT, $RA, $RB", IIC_VecGeneral,
7090b57cec5SDimitry Andric                               []>;
7100b57cec5SDimitry Andric
7110b57cec5SDimitry Andricdef EVRLWI         : EVXForm_1<554, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
7120b57cec5SDimitry Andric                               "evrlwi $RT, $RA, $RB", IIC_VecGeneral, []>;
7130b57cec5SDimitry Andricdef EVRLW          : EVXForm_1<552, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
7140b57cec5SDimitry Andric                               "evrlw $RT, $RA, $RB", IIC_VecGeneral,
7150b57cec5SDimitry Andric                               []>;
7160b57cec5SDimitry Andric
7170b57cec5SDimitry Andricdef EVRNDW         : EVXForm_2<524, (outs sperc:$RT), (ins sperc:$RA),
7180b57cec5SDimitry Andric                               "evrndw $RT, $RA", IIC_VecGeneral, []>;
7190b57cec5SDimitry Andric
7200b57cec5SDimitry Andricdef EVSEL          : EVXForm_4<79, (outs sperc:$RT),
7210b57cec5SDimitry Andric                               (ins sperc:$RA, sperc:$RB, crrc:$crD),
7220b57cec5SDimitry Andric                               "evsel crD,$RT,$RA,$RB", IIC_VecGeneral, []>;
7230b57cec5SDimitry Andric
7240b57cec5SDimitry Andricdef EVSLWI         : EVXForm_1<550, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
7250b57cec5SDimitry Andric                               "evslwi $RT, $RA, $RB", IIC_VecGeneral, []>;
7260b57cec5SDimitry Andricdef EVSLW          : EVXForm_1<548, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
7270b57cec5SDimitry Andric                               "evslw $RT, $RA, $RB", IIC_VecGeneral,
7280b57cec5SDimitry Andric                               []>;
7290b57cec5SDimitry Andric
7300b57cec5SDimitry Andricdef EVSPLATFI      : EVXForm_2<555, (outs sperc:$RT), (ins s5imm:$RA),
7310b57cec5SDimitry Andric                               "evsplatfi $RT, $RA", IIC_VecGeneral, []>;
7320b57cec5SDimitry Andricdef EVSPLATI       : EVXForm_2<553, (outs sperc:$RT), (ins s5imm:$RA),
7330b57cec5SDimitry Andric                               "evsplati $RT, $RA", IIC_VecGeneral, []>;
7340b57cec5SDimitry Andric
7350b57cec5SDimitry Andricdef EVSRWIS        : EVXForm_1<547, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
7360b57cec5SDimitry Andric                               "evsrwis $RT, $RA, $RB", IIC_VecGeneral, []>;
7370b57cec5SDimitry Andricdef EVSRWIU        : EVXForm_1<546, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
7380b57cec5SDimitry Andric                               "evsrwiu $RT, $RA, $RB", IIC_VecGeneral, []>;
7390b57cec5SDimitry Andricdef EVSRWS         : EVXForm_1<545, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
7400b57cec5SDimitry Andric                               "evsrws $RT, $RA, $RB", IIC_VecGeneral,
7410b57cec5SDimitry Andric                               []>;
7420b57cec5SDimitry Andricdef EVSRWU         : EVXForm_1<544, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
7430b57cec5SDimitry Andric                               "evsrwu $RT, $RA, $RB", IIC_VecGeneral,
7440b57cec5SDimitry Andric                               []>;
7450b57cec5SDimitry Andric
746*06c3fb27SDimitry Andricdef EVSTDD         : EVXForm_D<801, (outs), (ins sperc:$RT, (spe8dis $D, $RA):$dst),
7470b57cec5SDimitry Andric                               "evstdd $RT, $dst", IIC_LdStStore,
7480b57cec5SDimitry Andric                               [(store f64:$RT, iaddr:$dst)]>;
749*06c3fb27SDimitry Andricdef EVSTDDX        : EVXForm_1<800, (outs), (ins sperc:$RT, (memrr $RA, $RB):$dst),
7500b57cec5SDimitry Andric                               "evstddx $RT, $dst", IIC_LdStStore,
7510b57cec5SDimitry Andric                               [(store f64:$RT, xaddr:$dst)]>;
752*06c3fb27SDimitry Andricdef EVSTDH         : EVXForm_D<805, (outs), (ins sperc:$RT, (spe8dis $D, $RA):$dst),
7530b57cec5SDimitry Andric                               "evstdh $RT, $dst", IIC_LdStStore, []>;
754*06c3fb27SDimitry Andricdef EVSTDHX        : EVXForm_1<804, (outs), (ins sperc:$RT, (memrr $RA, $RB):$dst),
7550b57cec5SDimitry Andric                               "evstdhx $RT, $dst", IIC_LdStStore, []>;
756*06c3fb27SDimitry Andricdef EVSTDW         : EVXForm_D<803, (outs), (ins sperc:$RT, (spe8dis $D, $RA):$dst),
7570b57cec5SDimitry Andric                               "evstdw $RT, $dst", IIC_LdStStore,
7580b57cec5SDimitry Andric                               []>;
759*06c3fb27SDimitry Andricdef EVSTDWX        : EVXForm_1<802, (outs), (ins sperc:$RT, (memrr $RA, $RB):$dst),
7600b57cec5SDimitry Andric                               "evstdwx $RT, $dst", IIC_LdStStore,
7610b57cec5SDimitry Andric                               []>;
762*06c3fb27SDimitry Andricdef EVSTWHE        : EVXForm_D<817, (outs), (ins sperc:$RT, (spe4dis $D, $RA):$dst),
7630b57cec5SDimitry Andric                               "evstwhe $RT, $dst", IIC_LdStStore, []>;
764*06c3fb27SDimitry Andricdef EVSTWHEX       : EVXForm_1<816, (outs), (ins sperc:$RT, (memrr $RA, $RB):$dst),
7650b57cec5SDimitry Andric                               "evstwhex $RT, $dst", IIC_LdStStore, []>;
766*06c3fb27SDimitry Andricdef EVSTWHO        : EVXForm_D<821, (outs), (ins sperc:$RT, (spe4dis $D, $RA):$dst),
7670b57cec5SDimitry Andric                               "evstwho $RT, $dst", IIC_LdStStore, []>;
768*06c3fb27SDimitry Andricdef EVSTWHOX       : EVXForm_1<820, (outs), (ins sperc:$RT, (memrr $RA, $RB):$dst),
7690b57cec5SDimitry Andric                               "evstwhox $RT, $dst", IIC_LdStStore, []>;
770*06c3fb27SDimitry Andricdef EVSTWWE        : EVXForm_D<825, (outs), (ins sperc:$RT, (spe4dis $D, $RA):$dst),
7710b57cec5SDimitry Andric                               "evstwwe $RT, $dst", IIC_LdStStore, []>;
772*06c3fb27SDimitry Andricdef EVSTWWEX       : EVXForm_1<824, (outs), (ins sperc:$RT, (memrr $RA, $RB):$dst),
7730b57cec5SDimitry Andric                               "evstwwex $RT, $dst", IIC_LdStStore, []>;
774*06c3fb27SDimitry Andricdef EVSTWWO        : EVXForm_D<829, (outs), (ins sperc:$RT, (spe4dis $D, $RA):$dst),
7750b57cec5SDimitry Andric                               "evstwwo $RT, $dst", IIC_LdStStore, []>;
776*06c3fb27SDimitry Andricdef EVSTWWOX       : EVXForm_1<828, (outs), (ins sperc:$RT, (memrr $RA, $RB):$dst),
7770b57cec5SDimitry Andric                               "evstwwox $RT, $dst", IIC_LdStStore, []>;
7780b57cec5SDimitry Andric
7790b57cec5SDimitry Andricdef EVSUBFSSIAAW   : EVXForm_2<1219, (outs sperc:$RT), (ins sperc:$RA),
7800b57cec5SDimitry Andric                               "evsubfssiaaw $RT, $RA", IIC_VecComplex, []>;
7810b57cec5SDimitry Andricdef EVSUBFSMIAAW   : EVXForm_2<1227, (outs sperc:$RT), (ins sperc:$RA),
7820b57cec5SDimitry Andric                               "evsubfsmiaaw $RT, $RA", IIC_VecComplex, []>;
7830b57cec5SDimitry Andricdef EVSUBFUMIAAW   : EVXForm_2<1226, (outs sperc:$RT), (ins sperc:$RA),
7840b57cec5SDimitry Andric                               "evsubfumiaaw $RT, $RA", IIC_VecComplex, []>;
7850b57cec5SDimitry Andricdef EVSUBFUSIAAW   : EVXForm_2<1218, (outs sperc:$RT), (ins sperc:$RA),
7860b57cec5SDimitry Andric                               "evsubfusiaaw $RT, $RA", IIC_VecComplex, []>;
7870b57cec5SDimitry Andricdef EVSUBFW        : EVXForm_1<516, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
7880b57cec5SDimitry Andric                               "evsubfw $RT, $RA, $RB", IIC_VecGeneral,
7890b57cec5SDimitry Andric                               []>;
7900b57cec5SDimitry Andricdef EVSUBIFW       : EVXForm_1<518, (outs sperc:$RT), (ins u5imm:$RA, sperc:$RB),
7910b57cec5SDimitry Andric                               "evsubifw $RT, $RA, $RB", IIC_VecGeneral, []>;
7920b57cec5SDimitry Andricdef EVXOR          : EVXForm_1<534, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
7930b57cec5SDimitry Andric                               "evxor $RT, $RA, $RB", IIC_VecGeneral,
7940b57cec5SDimitry Andric                               []>;
7950b57cec5SDimitry Andric
7960b57cec5SDimitry Andriclet isAsmParserOnly = 1 in {
7970b57cec5SDimitry Andric// Identical to the integer Load/Stores, but to handle floats
798*06c3fb27SDimitry Andricdef SPELWZ        : DForm_1<32, (outs spe4rc:$RST), (ins (memri $D, $RA):$addr),
799*06c3fb27SDimitry Andric                            "lwz $RST, $addr", IIC_LdStLoad,
800*06c3fb27SDimitry Andric                            [(set f32:$RST, (load iaddr:$addr))]>;
801*06c3fb27SDimitry Andricdef SPELWZX       : XForm_1<31,  23, (outs spe4rc:$RST), (ins (memrr $RA, $RB):$addr),
802*06c3fb27SDimitry Andric                            "lwzx $RST, $addr", IIC_LdStLoad,
803*06c3fb27SDimitry Andric                            [(set f32:$RST, (load xaddr:$addr))]>;
804*06c3fb27SDimitry Andricdef SPESTW        : DForm_1<36, (outs), (ins spe4rc:$RST, (memri $D, $RA):$addr),
805*06c3fb27SDimitry Andric                            "stw $RST, $addr", IIC_LdStStore,
806*06c3fb27SDimitry Andric                            [(store f32:$RST, iaddr:$addr)]>;
807*06c3fb27SDimitry Andricdef SPESTWX       : XForm_8<31, 151, (outs), (ins spe4rc:$RST, (memrr $RA, $RB):$addr),
808*06c3fb27SDimitry Andric                           "stwx $RST, $addr", IIC_LdStStore,
809*06c3fb27SDimitry Andric                           [(store f32:$RST, xaddr:$addr)]>;
8100b57cec5SDimitry Andric}
8110b57cec5SDimitry Andric
8120b57cec5SDimitry Andric} // HasSPE
8130b57cec5SDimitry Andric
8140b57cec5SDimitry Andriclet Predicates = [HasSPE] in {
8150b57cec5SDimitry Andricdef SELECT_CC_SPE4 : PPCCustomInserterPseudo<(outs spe4rc:$dst),
8160b57cec5SDimitry Andric                            (ins crrc:$cond, spe4rc:$T, spe4rc:$F,
8170b57cec5SDimitry Andric                            i32imm:$BROPC), "#SELECT_CC_SPE4",
8180b57cec5SDimitry Andric                            []>;
8190b57cec5SDimitry Andricdef SELECT_CC_SPE  : PPCCustomInserterPseudo<(outs sperc:$dst),
8200b57cec5SDimitry Andric                            (ins crrc:$cond, sperc:$T, sperc:$F, i32imm:$BROPC),
8210b57cec5SDimitry Andric                            "#SELECT_CC_SPE",
8220b57cec5SDimitry Andric                            []>;
8230b57cec5SDimitry Andricdef SELECT_SPE4  : PPCCustomInserterPseudo<(outs spe4rc:$dst), (ins crbitrc:$cond,
8240b57cec5SDimitry Andric                          spe4rc:$T, spe4rc:$F), "#SELECT_SPE4",
8250b57cec5SDimitry Andric                          [(set f32:$dst, (select i1:$cond, f32:$T, f32:$F))]>;
8260b57cec5SDimitry Andricdef SELECT_SPE   : PPCCustomInserterPseudo<(outs sperc:$dst), (ins crbitrc:$cond,
8270b57cec5SDimitry Andric                          sperc:$T, sperc:$F), "#SELECT_SPE",
8280b57cec5SDimitry Andric                          [(set f64:$dst, (select i1:$cond, f64:$T, f64:$F))]>;
8290b57cec5SDimitry Andric
8300b57cec5SDimitry Andricdef : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETLT)),
8310b57cec5SDimitry Andric          (SELECT_SPE4 (CRANDC $lhs, $rhs), $tval, $fval)>;
8320b57cec5SDimitry Andricdef : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETULT)),
8330b57cec5SDimitry Andric          (SELECT_SPE4 (CRANDC $rhs, $lhs), $tval, $fval)>;
8340b57cec5SDimitry Andricdef : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETLE)),
8350b57cec5SDimitry Andric          (SELECT_SPE4 (CRORC  $lhs, $rhs), $tval, $fval)>;
8360b57cec5SDimitry Andricdef : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETULE)),
8370b57cec5SDimitry Andric          (SELECT_SPE4 (CRORC  $rhs, $lhs), $tval, $fval)>;
8380b57cec5SDimitry Andricdef : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETEQ)),
8390b57cec5SDimitry Andric          (SELECT_SPE4 (CREQV $lhs, $rhs), $tval, $fval)>;
8400b57cec5SDimitry Andricdef : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETGE)),
8410b57cec5SDimitry Andric          (SELECT_SPE4 (CRORC  $rhs, $lhs), $tval, $fval)>;
8420b57cec5SDimitry Andricdef : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETUGE)),
8430b57cec5SDimitry Andric          (SELECT_SPE4 (CRORC  $lhs, $rhs), $tval, $fval)>;
8440b57cec5SDimitry Andricdef : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETGT)),
8450b57cec5SDimitry Andric          (SELECT_SPE4 (CRANDC $rhs, $lhs), $tval, $fval)>;
8460b57cec5SDimitry Andricdef : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETUGT)),
8470b57cec5SDimitry Andric          (SELECT_SPE4 (CRANDC $lhs, $rhs), $tval, $fval)>;
8480b57cec5SDimitry Andricdef : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETNE)),
8490b57cec5SDimitry Andric          (SELECT_SPE4 (CRXOR $lhs, $rhs), $tval, $fval)>;
8500b57cec5SDimitry Andric
8510b57cec5SDimitry Andricdef : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETLT)),
8520b57cec5SDimitry Andric          (SELECT_SPE (CRANDC $lhs, $rhs), $tval, $fval)>;
8530b57cec5SDimitry Andricdef : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETULT)),
8540b57cec5SDimitry Andric          (SELECT_SPE (CRANDC $rhs, $lhs), $tval, $fval)>;
8550b57cec5SDimitry Andricdef : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETLE)),
8560b57cec5SDimitry Andric          (SELECT_SPE (CRORC  $lhs, $rhs), $tval, $fval)>;
8570b57cec5SDimitry Andricdef : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETULE)),
8580b57cec5SDimitry Andric          (SELECT_SPE (CRORC  $rhs, $lhs), $tval, $fval)>;
8590b57cec5SDimitry Andricdef : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETEQ)),
8600b57cec5SDimitry Andric          (SELECT_SPE (CREQV $lhs, $rhs), $tval, $fval)>;
8610b57cec5SDimitry Andricdef : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETGE)),
8620b57cec5SDimitry Andric          (SELECT_SPE (CRORC  $rhs, $lhs), $tval, $fval)>;
8630b57cec5SDimitry Andricdef : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETUGE)),
8640b57cec5SDimitry Andric          (SELECT_SPE (CRORC  $lhs, $rhs), $tval, $fval)>;
8650b57cec5SDimitry Andricdef : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETGT)),
8660b57cec5SDimitry Andric          (SELECT_SPE (CRANDC $rhs, $lhs), $tval, $fval)>;
8670b57cec5SDimitry Andricdef : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETUGT)),
8680b57cec5SDimitry Andric          (SELECT_SPE (CRANDC $lhs, $rhs), $tval, $fval)>;
8690b57cec5SDimitry Andricdef : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETNE)),
8700b57cec5SDimitry Andric          (SELECT_SPE (CRXOR $lhs, $rhs), $tval, $fval)>;
8710b57cec5SDimitry Andric
8720b57cec5SDimitry Andric
8730b57cec5SDimitry Andricdef : Pat<(f64 (PPCbuild_spe64 i32:$rB, i32:$rA)),
8740b57cec5SDimitry Andric          (f64 (COPY_TO_REGCLASS (EVMERGELO $rA, $rB), SPERC))>;
8750b57cec5SDimitry Andric
8760b57cec5SDimitry Andricdef : Pat<(i32 (PPCextract_spe f64:$rA, 1)),
8770b57cec5SDimitry Andric          (i32 (EXTRACT_SUBREG (EVMERGEHI $rA, $rA), sub_32))>;
8780b57cec5SDimitry Andricdef : Pat<(i32 (PPCextract_spe f64:$rA, 0)),
8790b57cec5SDimitry Andric          (i32 (EXTRACT_SUBREG $rA, sub_32))>;
8800b57cec5SDimitry Andric
8810b57cec5SDimitry Andric}
882