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