PPCInstrFutureMMA.td 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. //===-- PPCInstrFutureMMA.td - Future Instruction Set ------*- 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 instructions introduced for the Future CPU for MMA.
  11. //
  12. //===----------------------------------------------------------------------===//
  13. class XX3Form_AT3_XABp5_P1<bits<6> opcode, bits<8> xo, dag OOL, dag IOL,
  14. string asmstr, list<dag> pattern>
  15. : I<opcode, OOL, IOL, asmstr, NoItinerary> {
  16. bits<3> AT;
  17. bits<5> XAp;
  18. bits<5> XBp;
  19. bits<1> P;
  20. let Pattern = pattern;
  21. let Inst{6-8} = AT{2-0};
  22. let Inst{9-10} = 0;
  23. let Inst{11-14} = XAp{3-0};
  24. let Inst{15} = P;
  25. let Inst{16-19} = XBp{3-0};
  26. let Inst{20} = 0;
  27. let Inst{21-28} = xo;
  28. let Inst{29} = XAp{4};
  29. let Inst{30} = XBp{4};
  30. let Inst{31} = 0;
  31. }
  32. class XX2Form_AT3_XBp5_P2<bits<6> opcode, bits<9> xo, dag OOL, dag IOL,
  33. string asmstr, list<dag> pattern>
  34. : I<opcode, OOL, IOL, asmstr, NoItinerary> {
  35. bits<3> AT;
  36. bits<5> XBp;
  37. bits<2> P;
  38. let Pattern = pattern;
  39. let Inst{6-8} = AT{2-0};
  40. let Inst{9-14} = 0;
  41. let Inst{15} = P{0};
  42. let Inst{16-19} = XBp{3-0};
  43. let Inst{20} = P{1};
  44. let Inst{21-29} = xo;
  45. let Inst{30} = XBp{4};
  46. let Inst{31} = 0;
  47. }
  48. class XForm_ATB3<bits<6> opcode, bits<5> o, bits<10> xo, dag OOL, dag IOL,
  49. string asmstr, list<dag> pattern>
  50. : I <opcode, OOL, IOL, asmstr, NoItinerary> {
  51. bits<3> AT;
  52. bits<3> AB;
  53. let Pattern = pattern;
  54. let Inst{6-8} = AT{2-0};
  55. let Inst{9-10} = 0;
  56. let Inst{11-15} = o;
  57. let Inst{16-18} = AB{2-0};
  58. let Inst{19-20} = 0;
  59. let Inst{21-30} = xo;
  60. let Inst{31} = 0;
  61. }
  62. let Predicates = [IsISAFuture] in {
  63. def DMXXEXTFDMR512 : XX3Form_AT3_XABp5_P1<60, 226,
  64. (outs vsrprc:$XAp, vsrprc:$XBp),
  65. (ins wacc:$AT),
  66. "dmxxextfdmr512 $AT, $XAp, $XBp, 0", []> {
  67. let P = 0;
  68. }
  69. def DMXXEXTFDMR512_HI : XX3Form_AT3_XABp5_P1<60, 226,
  70. (outs vsrprc:$XAp, vsrprc:$XBp),
  71. (ins wacc_hi:$AT),
  72. "dmxxextfdmr512 $AT, $XAp, $XBp, 1", []> {
  73. let P = 1;
  74. }
  75. def DMXXINSTFDMR512 : XX3Form_AT3_XABp5_P1<60, 234, (outs wacc:$AT),
  76. (ins vsrprc:$XAp, vsrprc:$XBp),
  77. "dmxxinstfdmr512 $AT, $XAp, $XBp, 0", []> {
  78. let P = 0;
  79. }
  80. def DMXXINSTFDMR512_HI : XX3Form_AT3_XABp5_P1<60, 234, (outs wacc_hi:$AT),
  81. (ins vsrprc:$XAp, vsrprc:$XBp),
  82. "dmxxinstfdmr512 $AT, $XAp, $XBp, 1", []> {
  83. let P = 1;
  84. }
  85. def DMXXEXTFDMR256 : XX2Form_AT3_XBp5_P2<60, 484, (outs vsrprc:$XBp),
  86. (ins dmrrowp:$AT, u2imm:$P),
  87. "dmxxextfdmr256 $AT, $XBp, $P", []>;
  88. def DMXXINSTFDMR256 : XX2Form_AT3_XBp5_P2<60, 485, (outs dmrrowp:$AT),
  89. (ins vsrprc:$XBp, u2imm:$P),
  90. "dmxxinstfdmr256 $AT, $XBp, $P", []>;
  91. def DMMR : XForm_ATB3<31, 6, 177, (outs dmr:$AT), (ins dmr:$AB),
  92. "dmmr $AT, $AB", []>;
  93. def DMXOR : XForm_ATB3<31, 7, 177, (outs dmr:$AT), (ins dmr:$ATi, dmr:$AB),
  94. "dmxor $AT, $AB", []>,
  95. RegConstraint<"$ATi = $AT">, NoEncode<"$ATi">;
  96. def DMSETDMRZ : XForm_AT3<31, 2, 177, (outs dmr:$AT), (ins),
  97. "dmsetdmrz $AT", NoItinerary, []>;
  98. }