123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889 |
- //=======-- PPCInstrSPE.td - The PowerPC SPE Extension -*- tablegen -*-=======//
- //
- // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
- // See https://llvm.org/LICENSE.txt for license information.
- // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
- //
- //===----------------------------------------------------------------------===//
- //
- // This file describes the Signal Processing Engine extension to
- // the PowerPC instruction set.
- //
- //===----------------------------------------------------------------------===//
- class EFXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
- InstrItinClass itin, list<dag> pattern> :
- I<4, OOL, IOL, asmstr, itin> {
- bits<5> RT;
- bits<5> RA;
- bits<5> RB;
- let Pattern = pattern;
- let Inst{6-10} = RT;
- let Inst{11-15} = RA;
- let Inst{16-20} = RB;
- let Inst{21-31} = xo;
- }
- class EFXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
- InstrItinClass itin, list<dag> pattern> :
- EFXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
- let RB = 0;
- }
- class EFXForm_2a<bits<11> xo, dag OOL, dag IOL, string asmstr,
- InstrItinClass itin, list<dag> pattern> :
- EFXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
- let RA = 0;
- }
- class EFXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
- InstrItinClass itin> :
- I<4, OOL, IOL, asmstr, itin> {
- bits<3> crD;
- bits<5> RA;
- bits<5> RB;
- let Inst{6-8} = crD;
- let Inst{9-10} = 0;
- let Inst{11-15} = RA;
- let Inst{16-20} = RB;
- let Inst{21-31} = xo;
- }
- class EVXForm_1<bits<11> xo, dag OOL, dag IOL, string asmstr,
- InstrItinClass itin, list<dag> pattern> :
- I<4, OOL, IOL, asmstr, itin> {
- bits<5> RT;
- bits<5> RA;
- bits<5> RB;
- let Pattern = pattern;
- let Inst{6-10} = RT;
- let Inst{11-15} = RA;
- let Inst{16-20} = RB;
- let Inst{21-31} = xo;
- }
- class EVXForm_2<bits<11> xo, dag OOL, dag IOL, string asmstr,
- InstrItinClass itin, list<dag> pattern> :
- EVXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
- let RB = 0;
- }
- class EVXForm_2a<bits<11> xo, dag OOL, dag IOL, string asmstr,
- InstrItinClass itin, list<dag> pattern> :
- EVXForm_1<xo, OOL, IOL, asmstr, itin, pattern> {
- let RA = 0;
- }
- class EVXForm_3<bits<11> xo, dag OOL, dag IOL, string asmstr,
- InstrItinClass itin, list<dag> pattern> :
- I<4, OOL, IOL, asmstr, itin> {
- bits<3> crD;
- bits<5> RA;
- bits<5> RB;
- let Pattern = pattern;
- let Inst{6-8} = crD;
- let Inst{9-10} = 0;
- let Inst{11-15} = RA;
- let Inst{16-20} = RB;
- let Inst{21-31} = xo;
- }
- class EVXForm_4<bits<8> xo, dag OOL, dag IOL, string asmstr,
- InstrItinClass itin, list<dag> pattern> :
- I<4, OOL, IOL, asmstr, itin> {
- bits<3> crD;
- bits<5> RA;
- bits<5> RB;
- bits<5> RT;
- let Pattern = pattern;
- let Inst{6-10} = RT;
- let Inst{11-15} = RA;
- let Inst{16-20} = RB;
- let Inst{21-28} = xo;
- let Inst{29-31} = crD;
- }
- class EVXForm_D<bits<11> xo, dag OOL, dag IOL, string asmstr,
- InstrItinClass itin, list<dag> pattern> :
- I<4, OOL, IOL, asmstr, itin> {
- bits<5> RT;
- bits<21> D;
- let Pattern = pattern;
- let Inst{6-10} = RT;
- let Inst{20} = D{0};
- let Inst{19} = D{1};
- let Inst{18} = D{2};
- let Inst{17} = D{3};
- let Inst{16} = D{4};
- let Inst{15} = D{5};
- let Inst{14} = D{6};
- let Inst{13} = D{7};
- let Inst{12} = D{8};
- let Inst{11} = D{9};
- let Inst{11-20} = D{0-9};
- let Inst{21-31} = xo;
- }
- let DecoderNamespace = "SPE", Predicates = [HasSPE] in {
- def BRINC : EVXForm_1<527, (outs gprc:$RT), (ins gprc:$RA, gprc:$RB),
- "brinc $RT, $RA, $RB", IIC_IntSimple, []>;
- // Double-precision floating point
- def EFDABS : EFXForm_2<740, (outs sperc:$RT), (ins sperc:$RA),
- "efdabs $RT, $RA", IIC_FPDGeneral,
- [(set f64:$RT, (fabs f64:$RA))]>;
- def EFDADD : EFXForm_1<736, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "efdadd $RT, $RA, $RB", IIC_FPAddSub,
- [(set f64:$RT, (any_fadd f64:$RA, f64:$RB))]>;
- def EFDCFS : EFXForm_2a<751, (outs sperc:$RT), (ins spe4rc:$RB),
- "efdcfs $RT, $RB", IIC_FPDGeneral,
- [(set f64:$RT, (any_fpextend f32:$RB))]>;
- def EFDCFSF : EFXForm_2a<755, (outs sperc:$RT), (ins spe4rc:$RB),
- "efdcfsf $RT, $RB", IIC_FPDGeneral, []>;
- def EFDCFSI : EFXForm_2a<753, (outs sperc:$RT), (ins gprc:$RB),
- "efdcfsi $RT, $RB", IIC_FPDGeneral,
- [(set f64:$RT, (any_sint_to_fp i32:$RB))]>;
- def EFDCFSID : EFXForm_2a<739, (outs sperc:$RT), (ins gprc:$RB),
- "efdcfsid $RT, $RB", IIC_FPDGeneral,
- []>;
- def EFDCFUF : EFXForm_2a<754, (outs sperc:$RT), (ins spe4rc:$RB),
- "efdcfuf $RT, $RB", IIC_FPDGeneral, []>;
- def EFDCFUI : EFXForm_2a<752, (outs sperc:$RT), (ins gprc:$RB),
- "efdcfui $RT, $RB", IIC_FPDGeneral,
- [(set f64:$RT, (any_uint_to_fp i32:$RB))]>;
- def EFDCFUID : EFXForm_2a<738, (outs sperc:$RT), (ins gprc:$RB),
- "efdcfuid $RT, $RB", IIC_FPDGeneral,
- []>;
- let isCompare = 1 in {
- def EFDCMPEQ : EFXForm_3<750, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "efdcmpeq $crD, $RA, $RB", IIC_FPDGeneral>;
- def EFDCMPGT : EFXForm_3<748, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "efdcmpgt $crD, $RA, $RB", IIC_FPDGeneral>;
- def EFDCMPLT : EFXForm_3<749, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "efdcmplt $crD, $RA, $RB", IIC_FPDGeneral>;
- }
- def EFDCTSF : EFXForm_2a<759, (outs sperc:$RT), (ins spe4rc:$RB),
- "efdctsf $RT, $RB", IIC_FPDGeneral, []>;
- def EFDCTSI : EFXForm_2a<757, (outs gprc:$RT), (ins sperc:$RB),
- "efdctsi $RT, $RB", IIC_FPDGeneral,
- []>;
- def EFDCTSIDZ : EFXForm_2a<747, (outs gprc:$RT), (ins sperc:$RB),
- "efdctsidz $RT, $RB", IIC_FPDGeneral,
- []>;
- def EFDCTSIZ : EFXForm_2a<762, (outs gprc:$RT), (ins sperc:$RB),
- "efdctsiz $RT, $RB", IIC_FPDGeneral,
- [(set i32:$RT, (any_fp_to_sint f64:$RB))]>;
- def EFDCTUF : EFXForm_2a<758, (outs sperc:$RT), (ins spe4rc:$RB),
- "efdctuf $RT, $RB", IIC_FPDGeneral, []>;
- def EFDCTUI : EFXForm_2a<756, (outs gprc:$RT), (ins sperc:$RB),
- "efdctui $RT, $RB", IIC_FPDGeneral,
- []>;
- def EFDCTUIDZ : EFXForm_2a<746, (outs gprc:$RT), (ins sperc:$RB),
- "efdctuidz $RT, $RB", IIC_FPDGeneral,
- []>;
- def EFDCTUIZ : EFXForm_2a<760, (outs gprc:$RT), (ins sperc:$RB),
- "efdctuiz $RT, $RB", IIC_FPDGeneral,
- [(set i32:$RT, (any_fp_to_uint f64:$RB))]>;
- def EFDDIV : EFXForm_1<745, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "efddiv $RT, $RA, $RB", IIC_FPDivD,
- [(set f64:$RT, (any_fdiv f64:$RA, f64:$RB))]>;
- def EFDMUL : EFXForm_1<744, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "efdmul $RT, $RA, $RB", IIC_FPDGeneral,
- [(set f64:$RT, (any_fmul f64:$RA, f64:$RB))]>;
- def EFDNABS : EFXForm_2<741, (outs sperc:$RT), (ins sperc:$RA),
- "efdnabs $RT, $RA", IIC_FPDGeneral,
- [(set f64:$RT, (fneg (fabs f64:$RA)))]>;
- def EFDNEG : EFXForm_2<742, (outs sperc:$RT), (ins sperc:$RA),
- "efdneg $RT, $RA", IIC_FPDGeneral,
- [(set f64:$RT, (fneg f64:$RA))]>;
- def EFDSUB : EFXForm_1<737, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "efdsub $RT, $RA, $RB", IIC_FPDGeneral,
- [(set f64:$RT, (any_fsub f64:$RA, f64:$RB))]>;
- let isCompare = 1 in {
- def EFDTSTEQ : EFXForm_3<766, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "efdtsteq $crD, $RA, $RB", IIC_FPDGeneral>;
- def EFDTSTGT : EFXForm_3<764, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "efdtstgt $crD, $RA, $RB", IIC_FPDGeneral>;
- def EFDTSTLT : EFXForm_3<765, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "efdtstlt $crD, $RA, $RB", IIC_FPDGeneral>;
- }
- // Single-precision floating point
- def EFSABS : EFXForm_2<708, (outs spe4rc:$RT), (ins spe4rc:$RA),
- "efsabs $RT, $RA", IIC_FPSGeneral,
- [(set f32:$RT, (fabs f32:$RA))]>;
- def EFSADD : EFXForm_1<704, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
- "efsadd $RT, $RA, $RB", IIC_FPAddSub,
- [(set f32:$RT, (any_fadd f32:$RA, f32:$RB))]>;
- def EFSCFD : EFXForm_2a<719, (outs spe4rc:$RT), (ins sperc:$RB),
- "efscfd $RT, $RB", IIC_FPSGeneral,
- [(set f32:$RT, (any_fpround f64:$RB))]>;
- def EFSCFSF : EFXForm_2a<723, (outs spe4rc:$RT), (ins spe4rc:$RB),
- "efscfsf $RT, $RB", IIC_FPSGeneral, []>;
- def EFSCFSI : EFXForm_2a<721, (outs spe4rc:$RT), (ins gprc:$RB),
- "efscfsi $RT, $RB", IIC_FPSGeneral,
- [(set f32:$RT, (any_sint_to_fp i32:$RB))]>;
- def EFSCFUF : EFXForm_2a<722, (outs spe4rc:$RT), (ins spe4rc:$RB),
- "efscfuf $RT, $RB", IIC_FPSGeneral, []>;
- def EFSCFUI : EFXForm_2a<720, (outs spe4rc:$RT), (ins gprc:$RB),
- "efscfui $RT, $RB", IIC_FPSGeneral,
- [(set f32:$RT, (any_uint_to_fp i32:$RB))]>;
- let isCompare = 1 in {
- def EFSCMPEQ : EFXForm_3<718, (outs crrc:$crD), (ins spe4rc:$RA, spe4rc:$RB),
- "efscmpeq $crD, $RA, $RB", IIC_FPCompare>;
- def EFSCMPGT : EFXForm_3<716, (outs crrc:$crD), (ins spe4rc:$RA, spe4rc:$RB),
- "efscmpgt $crD, $RA, $RB", IIC_FPCompare>;
- def EFSCMPLT : EFXForm_3<717, (outs crrc:$crD), (ins spe4rc:$RA, spe4rc:$RB),
- "efscmplt $crD, $RA, $RB", IIC_FPCompare>;
- }
- def EFSCTSF : EFXForm_2a<727, (outs spe4rc:$RT), (ins spe4rc:$RB),
- "efsctsf $RT, $RB", IIC_FPSGeneral, []>;
- def EFSCTSI : EFXForm_2a<725, (outs gprc:$RT), (ins spe4rc:$RB),
- "efsctsi $RT, $RB", IIC_FPSGeneral,
- []>;
- def EFSCTSIZ : EFXForm_2a<730, (outs gprc:$RT), (ins spe4rc:$RB),
- "efsctsiz $RT, $RB", IIC_FPSGeneral,
- [(set i32:$RT, (any_fp_to_sint f32:$RB))]>;
- def EFSCTUF : EFXForm_2a<726, (outs sperc:$RT), (ins spe4rc:$RB),
- "efsctuf $RT, $RB", IIC_FPSGeneral, []>;
- def EFSCTUI : EFXForm_2a<724, (outs gprc:$RT), (ins spe4rc:$RB),
- "efsctui $RT, $RB", IIC_FPSGeneral,
- []>;
- def EFSCTUIZ : EFXForm_2a<728, (outs gprc:$RT), (ins spe4rc:$RB),
- "efsctuiz $RT, $RB", IIC_FPSGeneral,
- [(set i32:$RT, (any_fp_to_uint f32:$RB))]>;
- def EFSDIV : EFXForm_1<713, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
- "efsdiv $RT, $RA, $RB", IIC_FPDivD,
- [(set f32:$RT, (any_fdiv f32:$RA, f32:$RB))]>;
- def EFSMUL : EFXForm_1<712, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
- "efsmul $RT, $RA, $RB", IIC_FPGeneral,
- [(set f32:$RT, (any_fmul f32:$RA, f32:$RB))]>;
- def EFSNABS : EFXForm_2<709, (outs spe4rc:$RT), (ins spe4rc:$RA),
- "efsnabs $RT, $RA", IIC_FPGeneral,
- [(set f32:$RT, (fneg (fabs f32:$RA)))]>;
- def EFSNEG : EFXForm_2<710, (outs spe4rc:$RT), (ins spe4rc:$RA),
- "efsneg $RT, $RA", IIC_FPGeneral,
- [(set f32:$RT, (fneg f32:$RA))]>;
- def EFSSUB : EFXForm_1<705, (outs spe4rc:$RT), (ins spe4rc:$RA, spe4rc:$RB),
- "efssub $RT, $RA, $RB", IIC_FPSGeneral,
- [(set f32:$RT, (any_fsub f32:$RA, f32:$RB))]>;
- let isCompare = 1 in {
- def EFSTSTEQ : EFXForm_3<734, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "efststeq $crD, $RA, $RB", IIC_FPCompare>;
- def EFSTSTGT : EFXForm_3<732, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "efststgt $crD, $RA, $RB", IIC_FPCompare>;
- def EFSTSTLT : EFXForm_3<733, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "efststlt $crD, $RA, $RB", IIC_FPCompare>;
- }
- // SPE Vector operations
- def EVABS : EVXForm_2<520, (outs sperc:$RT), (ins sperc:$RA),
- "evabs $RT, $RA", IIC_VecGeneral,
- []>;
- def EVADDIW : EVXForm_1<514, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
- "evaddiw $RT, $RB, $RA", IIC_VecGeneral, []>;
- def EVADDSMIAAW : EVXForm_2<1225, (outs sperc:$RT), (ins sperc:$RA),
- "evaddsmiaaw $RT, $RA", IIC_VecComplex, []>;
- def EVADDSSIAAW : EVXForm_2<1217, (outs sperc:$RT), (ins sperc:$RA),
- "evaddssiaaw $RT, $RA", IIC_VecComplex, []>;
- def EVADDUSIAAW : EVXForm_2<1216, (outs sperc:$RT), (ins sperc:$RA),
- "evaddusiaaw $RT, $RA", IIC_VecComplex, []>;
- def EVADDUMIAAW : EVXForm_2<1224, (outs sperc:$RT), (ins sperc:$RA),
- "evaddumiaaw $RT, $RA", IIC_VecComplex, []>;
- def EVADDW : EVXForm_1<512, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evaddw $RT, $RA, $RB", IIC_VecGeneral,
- []>;
- def EVAND : EVXForm_1<529, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evand $RT, $RA, $RB", IIC_VecGeneral,
- []>;
- def EVANDC : EVXForm_1<530, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evandc $RT, $RA, $RB", IIC_VecGeneral,
- []>;
- let isCompare = 1 in {
- def EVCMPEQ : EVXForm_3<564, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "evcmpeq $crD, $RA, $RB", IIC_VecGeneral, []>;
- def EVCMPGTS : EVXForm_3<561, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "evcmpgts $crD, $RA, $RB", IIC_VecGeneral, []>;
- def EVCMPGTU : EVXForm_3<560, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "evcmpgtu $crD, $RA, $RB", IIC_VecGeneral, []>;
- def EVCMPLTS : EVXForm_3<563, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "evcmplts $crD, $RA, $RB", IIC_VecGeneral, []>;
- def EVCMPLTU : EVXForm_3<562, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "evcmpltu $crD, $RA, $RB", IIC_VecGeneral, []>;
- }
- def EVCNTLSW : EVXForm_2<526, (outs sperc:$RT), (ins sperc:$RA),
- "evcntlsw $RT, $RA", IIC_VecGeneral, []>;
- def EVCNTLZW : EVXForm_2<525, (outs sperc:$RT), (ins sperc:$RA),
- "evcntlzw $RT, $RA", IIC_VecGeneral,
- []>;
- def EVDIVWS : EVXForm_1<1222, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evdivws $RT, $RA, $RB", IIC_VecComplex,
- []>;
- def EVDIVWU : EVXForm_1<1223, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evdivwu $RT, $RA, $RB", IIC_VecComplex,
- []>;
- def EVEQV : EVXForm_1<537, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "eveqv $RT, $RA, $RB", IIC_VecGeneral,
- []>;
- def EVEXTSB : EVXForm_2<522, (outs sperc:$RT), (ins sperc:$RA),
- "evextsb $RT, $RA", IIC_VecGeneral,
- []>;
- def EVEXTSH : EVXForm_2<523, (outs sperc:$RT), (ins sperc:$RA),
- "evextsh $RT, $RA", IIC_VecGeneral,
- []>;
- def EVFSABS : EVXForm_2<644, (outs sperc:$RT), (ins sperc:$RA),
- "evfsabs $RT, $RA", IIC_VecGeneral,
- []>;
- def EVFSADD : EVXForm_1<640, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evfsadd $RT, $RA, $RB", IIC_VecComplex,
- []>;
- def EVFSCFSF : EVXForm_2a<659, (outs sperc:$RT), (ins sperc:$RB),
- "evfscfsf $RT, $RB", IIC_VecComplex, []>;
- def EVFSCFSI : EVXForm_2a<657, (outs sperc:$RT), (ins sperc:$RB),
- "evfscfsi $RT, $RB", IIC_VecComplex,
- []>;
- def EVFSCFUF : EVXForm_2a<658, (outs sperc:$RT), (ins sperc:$RB),
- "evfscfuf $RT, $RB", IIC_VecComplex, []>;
- def EVFSCFUI : EVXForm_2a<650, (outs sperc:$RT), (ins sperc:$RB),
- "evfscfui $RT, $RB", IIC_VecComplex,
- []>;
- let isCompare = 1 in {
- def EVFSCMPEQ : EVXForm_3<654, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "evfscmpeq $crD, $RA, $RB", IIC_FPSGeneral, []>;
- def EVFSCMPGT : EVXForm_3<652, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "evfscmpgt $crD, $RA, $RB", IIC_FPSGeneral, []>;
- def EVFSCMPLT : EVXForm_3<653, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "evfscmplt $crD, $RA, $RB", IIC_FPSGeneral, []>;
- }
- def EVFSCTSF : EVXForm_2a<663, (outs sperc:$RT), (ins sperc:$RB),
- "evfsctsf $RT, $RB", IIC_VecComplex, []>;
- def EVFSCTSI : EVXForm_2a<661, (outs sperc:$RT), (ins sperc:$RB),
- "evfsctsi $RT, $RB", IIC_VecComplex,
- []>;
- def EVFSCTSIZ : EVXForm_2a<666, (outs sperc:$RT), (ins sperc:$RB),
- "evfsctsiz $RT, $RB", IIC_VecComplex,
- []>;
- def EVFSCTUF : EVXForm_2a<662, (outs sperc:$RT), (ins sperc:$RB),
- "evfsctsf $RT, $RB", IIC_VecComplex, []>;
- def EVFSCTUI : EVXForm_2a<660, (outs sperc:$RT), (ins sperc:$RB),
- "evfsctui $RT, $RB", IIC_VecComplex,
- []>;
- def EVFSCTUIZ : EVXForm_2a<664, (outs sperc:$RT), (ins sperc:$RB),
- "evfsctsiz $RT, $RB", IIC_VecComplex,
- []>;
- def EVFSDIV : EVXForm_1<649, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evfsdiv $RT, $RA, $RB", IIC_FPDivD,
- []>;
- def EVFSMUL : EVXForm_1<648, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evfsmul $RT, $RA, $RB", IIC_VecComplex,
- []>;
- def EVFSNABS : EVXForm_2<645, (outs sperc:$RT), (ins sperc:$RA),
- "evfsnabs $RT, $RA", IIC_VecGeneral,
- []>;
- def EVFSNEG : EVXForm_2<646, (outs sperc:$RT), (ins sperc:$RA),
- "evfsneg $RT, $RA", IIC_VecGeneral,
- []>;
- def EVFSSUB : EVXForm_1<641, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evfssub $RT, $RA, $RB", IIC_VecComplex,
- []>;
- let isCompare = 1 in {
- def EVFSTSTEQ : EVXForm_3<670, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "evfststeq $crD, $RA, $RB", IIC_VecGeneral, []>;
- def EVFSTSTGT : EVXForm_3<668, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "evfststgt $crD, $RA, $RB", IIC_VecGeneral, []>;
- def EVFSTSTLT : EVXForm_3<669, (outs crrc:$crD), (ins sperc:$RA, sperc:$RB),
- "evfststlt $crD, $RA, $RB", IIC_VecGeneral, []>;
- }
- def EVLDD : EVXForm_D<769, (outs sperc:$RT), (ins spe8dis:$dst),
- "evldd $RT, $dst", IIC_LdStLoad,
- [(set f64:$RT, (load iaddr:$dst))]>;
- def EVLDDX : EVXForm_1<768, (outs sperc:$RT), (ins memrr:$src),
- "evlddx $RT, $src", IIC_LdStLoad,
- [(set f64:$RT, (load xaddr:$src))]>;
- def EVLDH : EVXForm_D<773, (outs sperc:$RT), (ins spe8dis:$dst),
- "evldh $RT, $dst", IIC_LdStLoad, []>;
- def EVLDHX : EVXForm_1<772, (outs sperc:$RT), (ins memrr:$src),
- "evldhx $RT, $src", IIC_LdStLoad, []>;
- def EVLDW : EVXForm_D<771, (outs sperc:$RT), (ins spe8dis:$dst),
- "evldw $RT, $dst", IIC_LdStLoad,
- []>;
- def EVLDWX : EVXForm_1<770, (outs sperc:$RT), (ins memrr:$src),
- "evldwx $RT, $src", IIC_LdStLoad,
- []>;
- def EVLHHESPLAT : EVXForm_D<777, (outs sperc:$RT), (ins spe2dis:$dst),
- "evlhhesplat $RT, $dst", IIC_LdStLoad, []>;
- def EVLHHESPLATX : EVXForm_1<776, (outs sperc:$RT), (ins memrr:$src),
- "evlhhesplatx $RT, $src", IIC_LdStLoad, []>;
- def EVLHHOUSPLAT : EVXForm_D<781, (outs sperc:$RT), (ins spe2dis:$dst),
- "evlhhousplat $RT, $dst", IIC_LdStLoad, []>;
- def EVLHHOUSPLATX : EVXForm_1<780, (outs sperc:$RT), (ins memrr:$src),
- "evlhhousplatx $RT, $src", IIC_LdStLoad, []>;
- def EVLHHOSSPLAT : EVXForm_D<783, (outs sperc:$RT), (ins spe2dis:$dst),
- "evlhhossplat $RT, $dst", IIC_LdStLoad, []>;
- def EVLHHOSSPLATX : EVXForm_1<782, (outs sperc:$RT), (ins memrr:$src),
- "evlhhossplatx $RT, $src", IIC_LdStLoad, []>;
- def EVLWHE : EVXForm_D<785, (outs sperc:$RT), (ins spe4dis:$dst),
- "evlwhe $RT, $dst", IIC_LdStLoad, []>;
- def EVLWHEX : EVXForm_1<784, (outs sperc:$RT), (ins memrr:$src),
- "evlwhex $RT, $src", IIC_LdStLoad, []>;
- def EVLWHOS : EVXForm_D<791, (outs sperc:$RT), (ins spe4dis:$dst),
- "evlwhos $RT, $dst", IIC_LdStLoad, []>;
- def EVLWHOSX : EVXForm_1<790, (outs sperc:$RT), (ins memrr:$src),
- "evlwhosx $RT, $src", IIC_LdStLoad, []>;
- def EVLWHOU : EVXForm_D<789, (outs sperc:$RT), (ins spe4dis:$dst),
- "evlwhou $RT, $dst", IIC_LdStLoad, []>;
- def EVLWHOUX : EVXForm_1<788, (outs sperc:$RT), (ins memrr:$src),
- "evlwhoux $RT, $src", IIC_LdStLoad, []>;
- def EVLWHSPLAT : EVXForm_D<797, (outs sperc:$RT), (ins spe4dis:$dst),
- "evlwhsplat $RT, $dst", IIC_LdStLoad, []>;
- def EVLWHSPLATX : EVXForm_1<796, (outs sperc:$RT), (ins memrr:$src),
- "evlwhsplatx $RT, $src", IIC_LdStLoad, []>;
- def EVLWWSPLAT : EVXForm_D<793, (outs sperc:$RT), (ins spe4dis:$dst),
- "evlwwsplat $RT, $dst", IIC_LdStLoad, []>;
- def EVLWWSPLATX : EVXForm_1<792, (outs sperc:$RT), (ins memrr:$src),
- "evlwwsplatx $RT, $src", IIC_LdStLoad, []>;
- def EVMERGEHI : EVXForm_1<556, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmergehi $RT, $RA, $RB", IIC_VecGeneral, []>;
- def EVMERGELO : EVXForm_1<557, (outs sperc:$RT), (ins gprc:$RA, gprc:$RB),
- "evmergelo $RT, $RA, $RB", IIC_VecGeneral, []>;
- def EVMERGEHILO : EVXForm_1<558, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmergehilo $RT, $RA, $RB", IIC_VecGeneral, []>;
- def EVMERGELOHI : EVXForm_1<559, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmergelohi $RT, $RA, $RB", IIC_VecGeneral, []>;
- def EVMHEGSMFAA : EVXForm_1<1323, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhegsmfaa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHEGSMFAN : EVXForm_1<1451, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhegsmfan $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHEGSMIAA : EVXForm_1<1321, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhegsmiaa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHEGSMIAN : EVXForm_1<1449, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhegsmian $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHEGUMIAA : EVXForm_1<1320, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhegumiaa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHEGUMIAN : EVXForm_1<1448, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhegumian $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHESMF : EVXForm_1<1035, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhesmf $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHESMFA : EVXForm_1<1067, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhesmfa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHESMFAAW : EVXForm_1<1291, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhesmfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHESMFANW : EVXForm_1<1419, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhesmfanw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHESMI : EVXForm_1<1033, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhesmi $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHESMIA : EVXForm_1<1065, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhesmia $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHESMIAAW : EVXForm_1<1289, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhesmiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHESMIANW : EVXForm_1<1417, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhesmianw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHESSF : EVXForm_1<1027, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhessf $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHESSFA : EVXForm_1<1059, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhessfa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHESSFAAW : EVXForm_1<1283, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhessfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHESSFANW : EVXForm_1<1411, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhessfanw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHESSIAAW : EVXForm_1<1281, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhessiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHESSIANW : EVXForm_1<1409, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhessianw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHEUMI : EVXForm_1<1032, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmheumi $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHEUMIA : EVXForm_1<1064, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmheumia $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHEUMIAAW : EVXForm_1<1288, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmheumiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHEUMIANW : EVXForm_1<1416, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmheumianw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHEUSIAAW : EVXForm_1<1280, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmheusiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHEUSIANW : EVXForm_1<1408, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmheusianw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOGSMFAA : EVXForm_1<1327, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhogsmfaa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOGSMFAN : EVXForm_1<1455, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhogsmfan $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOGSMIAA : EVXForm_1<1325, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhogsmiaa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOGSMIAN : EVXForm_1<1453, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhogsmian $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOGUMIAA : EVXForm_1<1324, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhogumiaa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOGUMIAN : EVXForm_1<1452, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhogumian $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOSMF : EVXForm_1<1039, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhosmf $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOSMFA : EVXForm_1<1071, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhosmfa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOSMFAAW : EVXForm_1<1295, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhosmfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOSMFANW : EVXForm_1<1423, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhosmfanw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOSMI : EVXForm_1<1037, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhosmi $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOSMIA : EVXForm_1<1069, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhosmia $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOSMIAAW : EVXForm_1<1293, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhosmiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOSMIANW : EVXForm_1<1421, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhosmianw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOSSF : EVXForm_1<1031, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhossf $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOSSFA : EVXForm_1<1063, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhossfa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOSSFAAW : EVXForm_1<1287, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhossfaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOSSFANW : EVXForm_1<1415, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhossfanw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOSSIAAW : EVXForm_1<1285, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhossiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOSSIANW : EVXForm_1<1413, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhossianw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOUMI : EVXForm_1<1036, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhoumi $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOUMIA : EVXForm_1<1068, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhoumia $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOUMIAAW : EVXForm_1<1292, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhoumiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOUMIANW : EVXForm_1<1420, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhoumianw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOUSIAAW : EVXForm_1<1284, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhousiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMHOUSIANW : EVXForm_1<1412, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmhousianw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMRA : EVXForm_2<1220, (outs sperc:$RT), (ins sperc:$RA),
- "evmra $RT, $RA", IIC_VecComplex, []>;
- def EVMWHSMF : EVXForm_1<1103, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwhsmf $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWHSMFA : EVXForm_1<1135, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwhsmfa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWHSMI : EVXForm_1<1101, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwhsmi $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWHSMIA : EVXForm_1<1133, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwhsmia $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWHSSF : EVXForm_1<1095, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwhssf $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWHSSFA : EVXForm_1<1127, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwhssfa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWHUMI : EVXForm_1<1100, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwhumi $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWHUMIA : EVXForm_1<1132, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwhumia $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWLSMIAAW : EVXForm_1<1353, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwlsmiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWLSMIANW : EVXForm_1<1481, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwlsmianw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWLSSIAAW : EVXForm_1<1345, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwlssiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWLSSIANW : EVXForm_1<1473, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwlssianw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWLUMI : EVXForm_1<1096, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwlumi $RT, $RA, $RB", IIC_VecComplex,
- []>;
- def EVMWLUMIA : EVXForm_1<1128, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwlumia $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWLUMIAAW : EVXForm_1<1352, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwlumiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWLUMIANW : EVXForm_1<1480, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwlumianw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWLUSIAAW : EVXForm_1<1344, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwlusiaaw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWLUSIANW : EVXForm_1<1472, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwlusianw $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWSMF : EVXForm_1<1115, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwsmf $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWSMFA : EVXForm_1<1147, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwsmfa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWSMFAA : EVXForm_1<1371, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwsmfaa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWSMFAN : EVXForm_1<1499, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwsmfan $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWSMI : EVXForm_1<1113, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwsmi $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWSMIA : EVXForm_1<1145, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwsmia $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWSMIAA : EVXForm_1<1369, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwsmiaa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWSMIAN : EVXForm_1<1497, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwsmian $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWSSF : EVXForm_1<1107, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwssf $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWSSFA : EVXForm_1<1139, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwssfa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWSSFAA : EVXForm_1<1363, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwssfaa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWSSFAN : EVXForm_1<1491, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwssfan $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWUMI : EVXForm_1<1112, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwumi $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWUMIA : EVXForm_1<1144, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwumia $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWUMIAA : EVXForm_1<1368, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwumiaa $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVMWUMIAN : EVXForm_1<1496, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evmwumian $RT, $RA, $RB", IIC_VecComplex, []>;
- def EVNAND : EVXForm_1<542, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evnand $RT, $RA, $RB", IIC_VecGeneral,
- []>;
- def EVNEG : EVXForm_2<521, (outs sperc:$RT), (ins sperc:$RA),
- "evneg $RT, $RA", IIC_VecGeneral,
- []>;
- def EVNOR : EVXForm_1<536, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evnor $RT, $RA, $RB", IIC_VecGeneral,
- []>;
- def EVOR : EVXForm_1<535, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evor $RT, $RA, $RB", IIC_VecGeneral,
- []>;
- def EVORC : EVXForm_1<539, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evorc $RT, $RA, $RB", IIC_VecGeneral,
- []>;
- def EVRLWI : EVXForm_1<554, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
- "evrlwi $RT, $RA, $RB", IIC_VecGeneral, []>;
- def EVRLW : EVXForm_1<552, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evrlw $RT, $RA, $RB", IIC_VecGeneral,
- []>;
- def EVRNDW : EVXForm_2<524, (outs sperc:$RT), (ins sperc:$RA),
- "evrndw $RT, $RA", IIC_VecGeneral, []>;
- def EVSEL : EVXForm_4<79, (outs sperc:$RT),
- (ins sperc:$RA, sperc:$RB, crrc:$crD),
- "evsel crD,$RT,$RA,$RB", IIC_VecGeneral, []>;
- def EVSLWI : EVXForm_1<550, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
- "evslwi $RT, $RA, $RB", IIC_VecGeneral, []>;
- def EVSLW : EVXForm_1<548, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evslw $RT, $RA, $RB", IIC_VecGeneral,
- []>;
- def EVSPLATFI : EVXForm_2<555, (outs sperc:$RT), (ins s5imm:$RA),
- "evsplatfi $RT, $RA", IIC_VecGeneral, []>;
- def EVSPLATI : EVXForm_2<553, (outs sperc:$RT), (ins s5imm:$RA),
- "evsplati $RT, $RA", IIC_VecGeneral, []>;
- def EVSRWIS : EVXForm_1<547, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
- "evsrwis $RT, $RA, $RB", IIC_VecGeneral, []>;
- def EVSRWIU : EVXForm_1<546, (outs sperc:$RT), (ins sperc:$RA, u5imm:$RB),
- "evsrwiu $RT, $RA, $RB", IIC_VecGeneral, []>;
- def EVSRWS : EVXForm_1<545, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evsrws $RT, $RA, $RB", IIC_VecGeneral,
- []>;
- def EVSRWU : EVXForm_1<544, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evsrwu $RT, $RA, $RB", IIC_VecGeneral,
- []>;
- def EVSTDD : EVXForm_D<801, (outs), (ins sperc:$RT, spe8dis:$dst),
- "evstdd $RT, $dst", IIC_LdStStore,
- [(store f64:$RT, iaddr:$dst)]>;
- def EVSTDDX : EVXForm_1<800, (outs), (ins sperc:$RT, memrr:$dst),
- "evstddx $RT, $dst", IIC_LdStStore,
- [(store f64:$RT, xaddr:$dst)]>;
- def EVSTDH : EVXForm_D<805, (outs), (ins sperc:$RT, spe8dis:$dst),
- "evstdh $RT, $dst", IIC_LdStStore, []>;
- def EVSTDHX : EVXForm_1<804, (outs), (ins sperc:$RT, memrr:$dst),
- "evstdhx $RT, $dst", IIC_LdStStore, []>;
- def EVSTDW : EVXForm_D<803, (outs), (ins sperc:$RT, spe8dis:$dst),
- "evstdw $RT, $dst", IIC_LdStStore,
- []>;
- def EVSTDWX : EVXForm_1<802, (outs), (ins sperc:$RT, memrr:$dst),
- "evstdwx $RT, $dst", IIC_LdStStore,
- []>;
- def EVSTWHE : EVXForm_D<817, (outs), (ins sperc:$RT, spe4dis:$dst),
- "evstwhe $RT, $dst", IIC_LdStStore, []>;
- def EVSTWHEX : EVXForm_1<816, (outs), (ins sperc:$RT, memrr:$dst),
- "evstwhex $RT, $dst", IIC_LdStStore, []>;
- def EVSTWHO : EVXForm_D<821, (outs), (ins sperc:$RT, spe4dis:$dst),
- "evstwho $RT, $dst", IIC_LdStStore, []>;
- def EVSTWHOX : EVXForm_1<820, (outs), (ins sperc:$RT, memrr:$dst),
- "evstwhox $RT, $dst", IIC_LdStStore, []>;
- def EVSTWWE : EVXForm_D<825, (outs), (ins sperc:$RT, spe4dis:$dst),
- "evstwwe $RT, $dst", IIC_LdStStore, []>;
- def EVSTWWEX : EVXForm_1<824, (outs), (ins sperc:$RT, memrr:$dst),
- "evstwwex $RT, $dst", IIC_LdStStore, []>;
- def EVSTWWO : EVXForm_D<829, (outs), (ins sperc:$RT, spe4dis:$dst),
- "evstwwo $RT, $dst", IIC_LdStStore, []>;
- def EVSTWWOX : EVXForm_1<828, (outs), (ins sperc:$RT, memrr:$dst),
- "evstwwox $RT, $dst", IIC_LdStStore, []>;
- def EVSUBFSSIAAW : EVXForm_2<1219, (outs sperc:$RT), (ins sperc:$RA),
- "evsubfssiaaw $RT, $RA", IIC_VecComplex, []>;
- def EVSUBFSMIAAW : EVXForm_2<1227, (outs sperc:$RT), (ins sperc:$RA),
- "evsubfsmiaaw $RT, $RA", IIC_VecComplex, []>;
- def EVSUBFUMIAAW : EVXForm_2<1226, (outs sperc:$RT), (ins sperc:$RA),
- "evsubfumiaaw $RT, $RA", IIC_VecComplex, []>;
- def EVSUBFUSIAAW : EVXForm_2<1218, (outs sperc:$RT), (ins sperc:$RA),
- "evsubfusiaaw $RT, $RA", IIC_VecComplex, []>;
- def EVSUBFW : EVXForm_1<516, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evsubfw $RT, $RA, $RB", IIC_VecGeneral,
- []>;
- def EVSUBIFW : EVXForm_1<518, (outs sperc:$RT), (ins u5imm:$RA, sperc:$RB),
- "evsubifw $RT, $RA, $RB", IIC_VecGeneral, []>;
- def EVXOR : EVXForm_1<534, (outs sperc:$RT), (ins sperc:$RA, sperc:$RB),
- "evxor $RT, $RA, $RB", IIC_VecGeneral,
- []>;
- let isAsmParserOnly = 1 in {
- // Identical to the integer Load/Stores, but to handle floats
- def SPELWZ : DForm_1<32, (outs spe4rc:$rD), (ins memri:$src),
- "lwz $rD, $src", IIC_LdStLoad,
- [(set f32:$rD, (load iaddr:$src))]>;
- def SPELWZX : XForm_1<31, 23, (outs spe4rc:$rD), (ins memrr:$src),
- "lwzx $rD, $src", IIC_LdStLoad,
- [(set f32:$rD, (load xaddr:$src))]>;
- def SPESTW : DForm_1<36, (outs), (ins spe4rc:$rS, memri:$src),
- "stw $rS, $src", IIC_LdStStore,
- [(store f32:$rS, iaddr:$src)]>;
- def SPESTWX : XForm_8<31, 151, (outs), (ins spe4rc:$rS, memrr:$dst),
- "stwx $rS, $dst", IIC_LdStStore,
- [(store f32:$rS, xaddr:$dst)]>;
- }
- } // HasSPE
- let Predicates = [HasSPE] in {
- def SELECT_CC_SPE4 : PPCCustomInserterPseudo<(outs spe4rc:$dst),
- (ins crrc:$cond, spe4rc:$T, spe4rc:$F,
- i32imm:$BROPC), "#SELECT_CC_SPE4",
- []>;
- def SELECT_CC_SPE : PPCCustomInserterPseudo<(outs sperc:$dst),
- (ins crrc:$cond, sperc:$T, sperc:$F, i32imm:$BROPC),
- "#SELECT_CC_SPE",
- []>;
- def SELECT_SPE4 : PPCCustomInserterPseudo<(outs spe4rc:$dst), (ins crbitrc:$cond,
- spe4rc:$T, spe4rc:$F), "#SELECT_SPE4",
- [(set f32:$dst, (select i1:$cond, f32:$T, f32:$F))]>;
- def SELECT_SPE : PPCCustomInserterPseudo<(outs sperc:$dst), (ins crbitrc:$cond,
- sperc:$T, sperc:$F), "#SELECT_SPE",
- [(set f64:$dst, (select i1:$cond, f64:$T, f64:$F))]>;
- def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETLT)),
- (SELECT_SPE4 (CRANDC $lhs, $rhs), $tval, $fval)>;
- def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETULT)),
- (SELECT_SPE4 (CRANDC $rhs, $lhs), $tval, $fval)>;
- def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETLE)),
- (SELECT_SPE4 (CRORC $lhs, $rhs), $tval, $fval)>;
- def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETULE)),
- (SELECT_SPE4 (CRORC $rhs, $lhs), $tval, $fval)>;
- def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETEQ)),
- (SELECT_SPE4 (CREQV $lhs, $rhs), $tval, $fval)>;
- def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETGE)),
- (SELECT_SPE4 (CRORC $rhs, $lhs), $tval, $fval)>;
- def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETUGE)),
- (SELECT_SPE4 (CRORC $lhs, $rhs), $tval, $fval)>;
- def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETGT)),
- (SELECT_SPE4 (CRANDC $rhs, $lhs), $tval, $fval)>;
- def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETUGT)),
- (SELECT_SPE4 (CRANDC $lhs, $rhs), $tval, $fval)>;
- def : Pat<(f32 (selectcc i1:$lhs, i1:$rhs, f32:$tval, f32:$fval, SETNE)),
- (SELECT_SPE4 (CRXOR $lhs, $rhs), $tval, $fval)>;
- def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETLT)),
- (SELECT_SPE (CRANDC $lhs, $rhs), $tval, $fval)>;
- def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETULT)),
- (SELECT_SPE (CRANDC $rhs, $lhs), $tval, $fval)>;
- def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETLE)),
- (SELECT_SPE (CRORC $lhs, $rhs), $tval, $fval)>;
- def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETULE)),
- (SELECT_SPE (CRORC $rhs, $lhs), $tval, $fval)>;
- def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETEQ)),
- (SELECT_SPE (CREQV $lhs, $rhs), $tval, $fval)>;
- def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETGE)),
- (SELECT_SPE (CRORC $rhs, $lhs), $tval, $fval)>;
- def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETUGE)),
- (SELECT_SPE (CRORC $lhs, $rhs), $tval, $fval)>;
- def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETGT)),
- (SELECT_SPE (CRANDC $rhs, $lhs), $tval, $fval)>;
- def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETUGT)),
- (SELECT_SPE (CRANDC $lhs, $rhs), $tval, $fval)>;
- def : Pat<(f64 (selectcc i1:$lhs, i1:$rhs, f64:$tval, f64:$fval, SETNE)),
- (SELECT_SPE (CRXOR $lhs, $rhs), $tval, $fval)>;
- def : Pat<(f64 (PPCbuild_spe64 i32:$rB, i32:$rA)),
- (f64 (COPY_TO_REGCLASS (EVMERGELO $rA, $rB), SPERC))>;
- def : Pat<(i32 (PPCextract_spe f64:$rA, 1)),
- (i32 (EXTRACT_SUBREG (EVMERGEHI $rA, $rA), sub_32))>;
- def : Pat<(i32 (PPCextract_spe f64:$rA, 0)),
- (i32 (EXTRACT_SUBREG $rA, sub_32))>;
- }
|