PPCInstrFormats.td revision a606b70cf5167e37b92a2b41a0fc0e280ac6aaa3
1//===- PowerPCInstrFormats.td - PowerPC Instruction Formats --*- tablegen -*-=// 2// 3// The LLVM Compiler Infrastructure 4// 5// This file was developed by the LLVM research group and is distributed under 6// the University of Illinois Open Source License. See LICENSE.TXT for details. 7// 8//===----------------------------------------------------------------------===// 9 10//===----------------------------------------------------------------------===// 11// 12// PowerPC instruction formats 13 14class I<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin> 15 : Instruction { 16 field bits<32> Inst; 17 18 bit PPC64 = 0; // Default value, override with isPPC64 19 20 let Name = ""; 21 let Namespace = "PPC"; 22 let Inst{0-5} = opcode; 23 let OperandList = OL; 24 let AsmString = asmstr; 25 let Itinerary = itin; 26 27 /// These fields correspond to the fields in PPCInstrInfo.h. Any changes to 28 /// these must be reflected there! See comments there for what these are. 29 bits<1> PPC970_First = 0; 30 bits<1> PPC970_Single = 0; 31 bits<1> PPC970_Cracked = 0; 32 bits<3> PPC970_Unit = 0; 33} 34 35class PPC970_DGroup_First { bits<1> PPC970_First = 1; } 36class PPC970_DGroup_Single { bits<1> PPC970_Single = 1; } 37class PPC970_DGroup_Cracked { bits<1> PPC970_Cracked = 1; } 38class PPC970_MicroCode; 39 40class PPC970_Unit_Pseudo { bits<3> PPC970_Unit = 0; } 41class PPC970_Unit_FXU { bits<3> PPC970_Unit = 1; } 42class PPC970_Unit_LSU { bits<3> PPC970_Unit = 2; } 43class PPC970_Unit_FPU { bits<3> PPC970_Unit = 3; } 44class PPC970_Unit_CRU { bits<3> PPC970_Unit = 4; } 45class PPC970_Unit_VALU { bits<3> PPC970_Unit = 5; } 46class PPC970_Unit_VPERM { bits<3> PPC970_Unit = 6; } 47class PPC970_Unit_BRU { bits<3> PPC970_Unit = 7; } 48 49 50// 1.7.1 I-Form 51class IForm<bits<6> opcode, bit aa, bit lk, dag OL, string asmstr, 52 InstrItinClass itin, list<dag> pattern> 53 : I<opcode, OL, asmstr, itin> { 54 let Pattern = pattern; 55 bits<24> LI; 56 57 let Inst{6-29} = LI; 58 let Inst{30} = aa; 59 let Inst{31} = lk; 60} 61 62// 1.7.2 B-Form 63class BForm<bits<6> opcode, bit aa, bit lk, bits<5> bo, bits<2> bicode, dag OL, 64 string asmstr, InstrItinClass itin> 65 : I<opcode, OL, asmstr, itin> { 66 bits<3> CR; 67 bits<14> BD; 68 69 let Inst{6-10} = bo; 70 let Inst{11-13} = CR; 71 let Inst{14-15} = bicode; 72 let Inst{16-29} = BD; 73 let Inst{30} = aa; 74 let Inst{31} = lk; 75} 76 77// 1.7.4 D-Form 78class DForm_base<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin, 79 list<dag> pattern> 80 : I<opcode, OL, asmstr, itin> { 81 bits<5> A; 82 bits<5> B; 83 bits<16> C; 84 85 let Pattern = pattern; 86 87 let Inst{6-10} = A; 88 let Inst{11-15} = B; 89 let Inst{16-31} = C; 90} 91 92class DForm_1<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin, 93 list<dag> pattern> 94 : I<opcode, OL, asmstr, itin> { 95 bits<5> A; 96 bits<16> C; 97 bits<5> B; 98 99 let Pattern = pattern; 100 101 let Inst{6-10} = A; 102 let Inst{11-15} = B; 103 let Inst{16-31} = C; 104} 105 106class DForm_2<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin, 107 list<dag> pattern> 108 : DForm_base<opcode, OL, asmstr, itin, pattern>; 109 110class DForm_2_r0<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin, 111 list<dag> pattern> 112 : I<opcode, OL, asmstr, itin> { 113 bits<5> A; 114 bits<16> B; 115 116 let Pattern = pattern; 117 118 let Inst{6-10} = A; 119 let Inst{11-15} = 0; 120 let Inst{16-31} = B; 121} 122 123// Currently we make the use/def reg distinction in ISel, not tablegen 124class DForm_3<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin, 125 list<dag> pattern> 126 : DForm_1<opcode, OL, asmstr, itin, pattern>; 127 128class DForm_4<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin, 129 list<dag> pattern> 130 : I<opcode, OL, asmstr, itin> { 131 bits<5> B; 132 bits<5> A; 133 bits<16> C; 134 135 let Pattern = pattern; 136 137 let Inst{6-10} = A; 138 let Inst{11-15} = B; 139 let Inst{16-31} = C; 140} 141 142class DForm_4_zero<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin, 143 list<dag> pattern> 144 : DForm_1<opcode, OL, asmstr, itin, pattern> { 145 let A = 0; 146 let B = 0; 147 let C = 0; 148} 149 150class DForm_5<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin> 151 : I<opcode, OL, asmstr, itin> { 152 bits<3> BF; 153 bits<1> L; 154 bits<5> RA; 155 bits<16> I; 156 157 let Inst{6-8} = BF; 158 let Inst{9} = 0; 159 let Inst{10} = L; 160 let Inst{11-15} = RA; 161 let Inst{16-31} = I; 162} 163 164class DForm_5_ext<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin> 165 : DForm_5<opcode, OL, asmstr, itin> { 166 let L = PPC64; 167} 168 169class DForm_6<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin> 170 : DForm_5<opcode, OL, asmstr, itin>; 171 172class DForm_6_ext<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin> 173 : DForm_6<opcode, OL, asmstr, itin> { 174 let L = PPC64; 175} 176 177class DForm_8<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin, 178 list<dag> pattern> 179 : DForm_1<opcode, OL, asmstr, itin, pattern> { 180} 181 182class DForm_9<bits<6> opcode, dag OL, string asmstr, InstrItinClass itin, 183 list<dag> pattern> 184 : DForm_1<opcode, OL, asmstr, itin, pattern> { 185} 186 187// 1.7.5 DS-Form 188class DSForm_1<bits<6> opcode, bits<2> xo, dag OL, string asmstr, 189 InstrItinClass itin, list<dag> pattern> 190 : I<opcode, OL, asmstr, itin> { 191 bits<5> RST; 192 bits<14> DS; 193 bits<5> RA; 194 195 let Pattern = pattern; 196 197 let Inst{6-10} = RST; 198 let Inst{11-15} = RA; 199 let Inst{16-29} = DS; 200 let Inst{30-31} = xo; 201} 202 203class DSForm_2<bits<6> opcode, bits<2> xo, dag OL, string asmstr, 204 InstrItinClass itin, list<dag> pattern> 205 : DSForm_1<opcode, xo, OL, asmstr, itin, pattern>; 206 207// 1.7.6 X-Form 208class XForm_base_r3xo<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 209 InstrItinClass itin, list<dag> pattern> 210 : I<opcode, OL, asmstr, itin> { 211 bits<5> RST; 212 bits<5> A; 213 bits<5> B; 214 215 let Pattern = pattern; 216 217 bit RC = 0; // set by isDOT 218 219 let Inst{6-10} = RST; 220 let Inst{11-15} = A; 221 let Inst{16-20} = B; 222 let Inst{21-30} = xo; 223 let Inst{31} = RC; 224} 225 226// This is the same as XForm_base_r3xo, but the first two operands are swapped 227// when code is emitted. 228class XForm_base_r3xo_swapped 229 <bits<6> opcode, bits<10> xo, dag OL, string asmstr, 230 InstrItinClass itin> 231 : I<opcode, OL, asmstr, itin> { 232 bits<5> A; 233 bits<5> RST; 234 bits<5> B; 235 236 bit RC = 0; // set by isDOT 237 238 let Inst{6-10} = RST; 239 let Inst{11-15} = A; 240 let Inst{16-20} = B; 241 let Inst{21-30} = xo; 242 let Inst{31} = RC; 243} 244 245 246class XForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 247 InstrItinClass itin, list<dag> pattern> 248 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern>; 249 250class XForm_6<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 251 InstrItinClass itin, list<dag> pattern> 252 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> { 253 let Pattern = pattern; 254} 255 256class XForm_8<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 257 InstrItinClass itin, list<dag> pattern> 258 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern>; 259 260class XForm_10<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 261 InstrItinClass itin, list<dag> pattern> 262 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> { 263 let Pattern = pattern; 264} 265 266class XForm_11<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 267 InstrItinClass itin, list<dag> pattern> 268 : XForm_base_r3xo_swapped<opcode, xo, OL, asmstr, itin> { 269 let B = 0; 270 let Pattern = pattern; 271} 272 273class XForm_16<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 274 InstrItinClass itin> 275 : I<opcode, OL, asmstr, itin> { 276 bits<3> BF; 277 bits<1> L; 278 bits<5> RA; 279 bits<5> RB; 280 281 let Inst{6-8} = BF; 282 let Inst{9} = 0; 283 let Inst{10} = L; 284 let Inst{11-15} = RA; 285 let Inst{16-20} = RB; 286 let Inst{21-30} = xo; 287 let Inst{31} = 0; 288} 289 290class XForm_16_ext<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 291 InstrItinClass itin> 292 : XForm_16<opcode, xo, OL, asmstr, itin> { 293 let L = PPC64; 294} 295 296class XForm_17<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 297 InstrItinClass itin> 298 : I<opcode, OL, asmstr, itin> { 299 bits<3> BF; 300 bits<5> FRA; 301 bits<5> FRB; 302 303 let Inst{6-8} = BF; 304 let Inst{9-10} = 0; 305 let Inst{11-15} = FRA; 306 let Inst{16-20} = FRB; 307 let Inst{21-30} = xo; 308 let Inst{31} = 0; 309} 310 311class XForm_25<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 312 InstrItinClass itin, list<dag> pattern> 313 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern> { 314} 315 316class XForm_26<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 317 InstrItinClass itin, list<dag> pattern> 318 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern> { 319 let A = 0; 320} 321 322class XForm_28<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 323 InstrItinClass itin, list<dag> pattern> 324 : XForm_base_r3xo<opcode, xo, OL, asmstr, itin, pattern> { 325} 326 327// DCB_Form - Form X instruction, used for dcb* instructions. 328class DCB_Form<bits<10> xo, bits<5> immfield, dag OL, string asmstr, 329 InstrItinClass itin, list<dag> pattern> 330 : I<31, OL, asmstr, itin> { 331 bits<5> A; 332 bits<5> B; 333 334 let Pattern = pattern; 335 336 let Inst{6-10} = immfield; 337 let Inst{11-15} = A; 338 let Inst{16-20} = B; 339 let Inst{21-30} = xo; 340 let Inst{31} = 0; 341} 342 343 344// DSS_Form - Form X instruction, used for altivec dss* instructions. 345class DSS_Form<bits<10> xo, dag OL, string asmstr, 346 InstrItinClass itin, list<dag> pattern> 347 : I<31, OL, asmstr, itin> { 348 bits<1> T; 349 bits<2> STRM; 350 bits<5> A; 351 bits<5> B; 352 353 let Pattern = pattern; 354 355 let Inst{6} = T; 356 let Inst{7-8} = 0; 357 let Inst{9-10} = STRM; 358 let Inst{11-15} = A; 359 let Inst{16-20} = B; 360 let Inst{21-30} = xo; 361 let Inst{31} = 0; 362} 363 364// 1.7.7 XL-Form 365class XLForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 366 InstrItinClass itin> 367 : I<opcode, OL, asmstr, itin> { 368 bits<3> CRD; 369 bits<2> CRDb; 370 bits<3> CRA; 371 bits<2> CRAb; 372 bits<3> CRB; 373 bits<2> CRBb; 374 375 let Inst{6-8} = CRD; 376 let Inst{9-10} = CRDb; 377 let Inst{11-13} = CRA; 378 let Inst{14-15} = CRAb; 379 let Inst{16-18} = CRB; 380 let Inst{19-20} = CRBb; 381 let Inst{21-30} = xo; 382 let Inst{31} = 0; 383} 384 385class XLForm_2<bits<6> opcode, bits<10> xo, bit lk, dag OL, string asmstr, 386 InstrItinClass itin, list<dag> pattern> 387 : I<opcode, OL, asmstr, itin> { 388 bits<5> BO; 389 bits<5> BI; 390 bits<2> BH; 391 392 let Pattern = pattern; 393 394 let Inst{6-10} = BO; 395 let Inst{11-15} = BI; 396 let Inst{16-18} = 0; 397 let Inst{19-20} = BH; 398 let Inst{21-30} = xo; 399 let Inst{31} = lk; 400} 401 402class XLForm_2_ext<bits<6> opcode, bits<10> xo, bits<5> bo, bits<5> bi, bit lk, 403 dag OL, string asmstr, InstrItinClass itin, list<dag> pattern> 404 : XLForm_2<opcode, xo, lk, OL, asmstr, itin, pattern> { 405 let BO = bo; 406 let BI = bi; 407 let BH = 0; 408} 409 410class XLForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 411 InstrItinClass itin> 412 : I<opcode, OL, asmstr, itin> { 413 bits<3> BF; 414 bits<3> BFA; 415 416 let Inst{6-8} = BF; 417 let Inst{9-10} = 0; 418 let Inst{11-13} = BFA; 419 let Inst{14-15} = 0; 420 let Inst{16-20} = 0; 421 let Inst{21-30} = xo; 422 let Inst{31} = 0; 423} 424 425// 1.7.8 XFX-Form 426class XFXForm_1<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 427 InstrItinClass itin> 428 : I<opcode, OL, asmstr, itin> { 429 bits<5> RT; 430 bits<10> SPR; 431 432 let Inst{6-10} = RT; 433 let Inst{11} = SPR{4}; 434 let Inst{12} = SPR{3}; 435 let Inst{13} = SPR{2}; 436 let Inst{14} = SPR{1}; 437 let Inst{15} = SPR{0}; 438 let Inst{16} = SPR{9}; 439 let Inst{17} = SPR{8}; 440 let Inst{18} = SPR{7}; 441 let Inst{19} = SPR{6}; 442 let Inst{20} = SPR{5}; 443 let Inst{21-30} = xo; 444 let Inst{31} = 0; 445} 446 447class XFXForm_1_ext<bits<6> opcode, bits<10> xo, bits<10> spr, 448 dag OL, string asmstr, InstrItinClass itin> 449 : XFXForm_1<opcode, xo, OL, asmstr, itin> { 450 let SPR = spr; 451} 452 453class XFXForm_3<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 454 InstrItinClass itin> 455 : I<opcode, OL, asmstr, itin> { 456 bits<5> RT; 457 458 let Inst{6-10} = RT; 459 let Inst{11-20} = 0; 460 let Inst{21-30} = xo; 461 let Inst{31} = 0; 462} 463 464class XFXForm_5<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 465 InstrItinClass itin> 466 : I<opcode, OL, asmstr, itin> { 467 bits<8> FXM; 468 bits<5> ST; 469 470 let Inst{6-10} = ST; 471 let Inst{11} = 0; 472 let Inst{12-19} = FXM; 473 let Inst{20} = 0; 474 let Inst{21-30} = xo; 475 let Inst{31} = 0; 476} 477 478class XFXForm_5a<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 479 InstrItinClass itin> 480 : I<opcode, OL, asmstr, itin> { 481 bits<5> ST; 482 bits<8> FXM; 483 484 let Inst{6-10} = ST; 485 let Inst{11} = 1; 486 let Inst{12-19} = FXM; 487 let Inst{20} = 0; 488 let Inst{21-30} = xo; 489 let Inst{31} = 0; 490} 491 492class XFXForm_7<bits<6> opcode, bits<10> xo, dag OL, string asmstr, 493 InstrItinClass itin> 494 : XFXForm_1<opcode, xo, OL, asmstr, itin>; 495 496class XFXForm_7_ext<bits<6> opcode, bits<10> xo, bits<10> spr, 497 dag OL, string asmstr, InstrItinClass itin> 498 : XFXForm_7<opcode, xo, OL, asmstr, itin> { 499 let SPR = spr; 500} 501 502// 1.7.10 XS-Form 503class XSForm_1<bits<6> opcode, bits<9> xo, dag OL, string asmstr, 504 InstrItinClass itin, list<dag> pattern> 505 : I<opcode, OL, asmstr, itin> { 506 bits<5> RS; 507 bits<5> A; 508 bits<6> SH; 509 510 bit RC = 0; // set by isDOT 511 let Pattern = pattern; 512 513 let Inst{6-10} = RS; 514 let Inst{11-15} = A; 515 let Inst{16-20} = SH{1-5}; 516 let Inst{21-29} = xo; 517 let Inst{30} = SH{0}; 518 let Inst{31} = RC; 519} 520 521// 1.7.11 XO-Form 522class XOForm_1<bits<6> opcode, bits<9> xo, bit oe, dag OL, string asmstr, 523 InstrItinClass itin, list<dag> pattern> 524 : I<opcode, OL, asmstr, itin> { 525 bits<5> RT; 526 bits<5> RA; 527 bits<5> RB; 528 529 let Pattern = pattern; 530 531 bit RC = 0; // set by isDOT 532 533 let Inst{6-10} = RT; 534 let Inst{11-15} = RA; 535 let Inst{16-20} = RB; 536 let Inst{21} = oe; 537 let Inst{22-30} = xo; 538 let Inst{31} = RC; 539} 540 541class XOForm_3<bits<6> opcode, bits<9> xo, bit oe, 542 dag OL, string asmstr, InstrItinClass itin, list<dag> pattern> 543 : XOForm_1<opcode, xo, oe, OL, asmstr, itin, pattern> { 544 let RB = 0; 545} 546 547// 1.7.12 A-Form 548class AForm_1<bits<6> opcode, bits<5> xo, dag OL, string asmstr, 549 InstrItinClass itin, list<dag> pattern> 550 : I<opcode, OL, asmstr, itin> { 551 bits<5> FRT; 552 bits<5> FRA; 553 bits<5> FRC; 554 bits<5> FRB; 555 556 let Pattern = pattern; 557 558 bit RC = 0; // set by isDOT 559 560 let Inst{6-10} = FRT; 561 let Inst{11-15} = FRA; 562 let Inst{16-20} = FRB; 563 let Inst{21-25} = FRC; 564 let Inst{26-30} = xo; 565 let Inst{31} = RC; 566} 567 568class AForm_2<bits<6> opcode, bits<5> xo, dag OL, string asmstr, 569 InstrItinClass itin, list<dag> pattern> 570 : AForm_1<opcode, xo, OL, asmstr, itin, pattern> { 571 let FRC = 0; 572} 573 574class AForm_3<bits<6> opcode, bits<5> xo, dag OL, string asmstr, 575 InstrItinClass itin, list<dag> pattern> 576 : AForm_1<opcode, xo, OL, asmstr, itin, pattern> { 577 let FRB = 0; 578} 579 580// 1.7.13 M-Form 581class MForm_1<bits<6> opcode, dag OL, string asmstr, 582 InstrItinClass itin, list<dag> pattern> 583 : I<opcode, OL, asmstr, itin> { 584 bits<5> RA; 585 bits<5> RS; 586 bits<5> RB; 587 bits<5> MB; 588 bits<5> ME; 589 590 let Pattern = pattern; 591 592 bit RC = 0; // set by isDOT 593 594 let Inst{6-10} = RS; 595 let Inst{11-15} = RA; 596 let Inst{16-20} = RB; 597 let Inst{21-25} = MB; 598 let Inst{26-30} = ME; 599 let Inst{31} = RC; 600} 601 602class MForm_2<bits<6> opcode, dag OL, string asmstr, 603 InstrItinClass itin, list<dag> pattern> 604 : MForm_1<opcode, OL, asmstr, itin, pattern> { 605} 606 607// 1.7.14 MD-Form 608class MDForm_1<bits<6> opcode, bits<3> xo, dag OL, string asmstr, 609 InstrItinClass itin, list<dag> pattern> 610 : I<opcode, OL, asmstr, itin> { 611 bits<5> RA; 612 bits<5> RS; 613 bits<6> SH; 614 bits<6> MBE; 615 616 let Pattern = pattern; 617 618 bit RC = 0; // set by isDOT 619 620 let Inst{6-10} = RS; 621 let Inst{11-15} = RA; 622 let Inst{16-20} = { SH{4}, SH{3}, SH{2}, SH{1}, SH{0} }; 623 let Inst{21-26} = { MBE{4}, MBE{3}, MBE{2}, MBE{1}, MBE{0}, MBE{5} }; 624 let Inst{27-29} = xo; 625 let Inst{30} = SH{5}; 626 let Inst{31} = RC; 627} 628 629 630 631// E-1 VA-Form 632 633// VAForm_1 - DACB ordering. 634class VAForm_1<bits<6> xo, dag OL, string asmstr, 635 InstrItinClass itin, list<dag> pattern> 636 : I<4, OL, asmstr, itin> { 637 bits<5> VD; 638 bits<5> VA; 639 bits<5> VC; 640 bits<5> VB; 641 642 let Pattern = pattern; 643 644 let Inst{6-10} = VD; 645 let Inst{11-15} = VA; 646 let Inst{16-20} = VB; 647 let Inst{21-25} = VC; 648 let Inst{26-31} = xo; 649} 650 651// VAForm_1a - DABC ordering. 652class VAForm_1a<bits<6> xo, dag OL, string asmstr, 653 InstrItinClass itin, list<dag> pattern> 654 : I<4, OL, asmstr, itin> { 655 bits<5> VD; 656 bits<5> VA; 657 bits<5> VB; 658 bits<5> VC; 659 660 let Pattern = pattern; 661 662 let Inst{6-10} = VD; 663 let Inst{11-15} = VA; 664 let Inst{16-20} = VB; 665 let Inst{21-25} = VC; 666 let Inst{26-31} = xo; 667} 668 669class VAForm_2<bits<6> xo, dag OL, string asmstr, 670 InstrItinClass itin, list<dag> pattern> 671 : I<4, OL, asmstr, itin> { 672 bits<5> VD; 673 bits<5> VA; 674 bits<5> VB; 675 bits<4> SH; 676 677 let Pattern = pattern; 678 679 let Inst{6-10} = VD; 680 let Inst{11-15} = VA; 681 let Inst{16-20} = VB; 682 let Inst{21} = 0; 683 let Inst{22-25} = SH; 684 let Inst{26-31} = xo; 685} 686 687// E-2 VX-Form 688class VXForm_1<bits<11> xo, dag OL, string asmstr, 689 InstrItinClass itin, list<dag> pattern> 690 : I<4, OL, asmstr, itin> { 691 bits<5> VD; 692 bits<5> VA; 693 bits<5> VB; 694 695 let Pattern = pattern; 696 697 let Inst{6-10} = VD; 698 let Inst{11-15} = VA; 699 let Inst{16-20} = VB; 700 let Inst{21-31} = xo; 701} 702 703class VXForm_setzero<bits<11> xo, dag OL, string asmstr, 704 InstrItinClass itin, list<dag> pattern> 705 : VXForm_1<xo, OL, asmstr, itin, pattern> { 706 let VA = VD; 707 let VB = VD; 708} 709 710 711class VXForm_2<bits<11> xo, dag OL, string asmstr, 712 InstrItinClass itin, list<dag> pattern> 713 : I<4, OL, asmstr, itin> { 714 bits<5> VD; 715 bits<5> VB; 716 717 let Pattern = pattern; 718 719 let Inst{6-10} = VD; 720 let Inst{11-15} = 0; 721 let Inst{16-20} = VB; 722 let Inst{21-31} = xo; 723} 724 725class VXForm_3<bits<11> xo, dag OL, string asmstr, 726 InstrItinClass itin, list<dag> pattern> 727 : I<4, OL, asmstr, itin> { 728 bits<5> VD; 729 bits<5> IMM; 730 731 let Pattern = pattern; 732 733 let Inst{6-10} = VD; 734 let Inst{11-15} = IMM; 735 let Inst{16-20} = 0; 736 let Inst{21-31} = xo; 737} 738 739/// VXForm_4 - VX instructions with "VD,0,0" register fields, like mfvscr. 740class VXForm_4<bits<11> xo, dag OL, string asmstr, 741 InstrItinClass itin, list<dag> pattern> 742 : I<4, OL, asmstr, itin> { 743 bits<5> VD; 744 745 let Pattern = pattern; 746 747 let Inst{6-10} = VD; 748 let Inst{11-15} = 0; 749 let Inst{16-20} = 0; 750 let Inst{21-31} = xo; 751} 752 753/// VXForm_5 - VX instructions with "0,0,VB" register fields, like mtvscr. 754class VXForm_5<bits<11> xo, dag OL, string asmstr, 755 InstrItinClass itin, list<dag> pattern> 756 : I<4, OL, asmstr, itin> { 757 bits<5> VB; 758 759 let Pattern = pattern; 760 761 let Inst{6-10} = 0; 762 let Inst{11-15} = 0; 763 let Inst{16-20} = VB; 764 let Inst{21-31} = xo; 765} 766 767// E-4 VXR-Form 768class VXRForm_1<bits<10> xo, dag OL, string asmstr, 769 InstrItinClass itin, list<dag> pattern> 770 : I<4, OL, asmstr, itin> { 771 bits<5> VD; 772 bits<5> VA; 773 bits<5> VB; 774 bit RC = 0; 775 776 let Pattern = pattern; 777 778 let Inst{6-10} = VD; 779 let Inst{11-15} = VA; 780 let Inst{16-20} = VB; 781 let Inst{21} = RC; 782 let Inst{22-31} = xo; 783} 784 785//===----------------------------------------------------------------------===// 786class Pseudo<dag OL, string asmstr, list<dag> pattern> 787 : I<0, OL, asmstr, NoItinerary> { 788 let PPC64 = 0; 789 let Pattern = pattern; 790 let Inst{31-0} = 0; 791} 792