brintos

brintos / llvm-project-archived public Read only

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