PPCInstrFuture.td 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. //===-- PPCInstrFuture.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.
  11. //
  12. //===----------------------------------------------------------------------===//
  13. class XOForm_RTAB5_L1<bits<6> opcode, bits<9> xo, dag OOL, dag IOL,
  14. string asmstr, list<dag> pattern>
  15. : I<opcode, OOL, IOL, asmstr, NoItinerary> {
  16. bits<5> RT;
  17. bits<5> RA;
  18. bits<5> RB;
  19. bit L;
  20. let Pattern = pattern;
  21. bit RC = 0; // set by isRecordForm
  22. let Inst{6-10} = RT;
  23. let Inst{11-15} = RA;
  24. let Inst{16-20} = RB;
  25. let Inst{21} = L;
  26. let Inst{22-30} = xo;
  27. let Inst{31} = RC;
  28. }
  29. multiclass XOForm_RTAB5_L1r<bits<6> opcode, bits<9> xo, dag OOL, dag IOL,
  30. string asmbase, string asmstr,
  31. list<dag> pattern> {
  32. let BaseName = asmbase in {
  33. def NAME : XOForm_RTAB5_L1<opcode, xo, OOL, IOL,
  34. !strconcat(asmbase, !strconcat(" ", asmstr)),
  35. pattern>, RecFormRel;
  36. let Defs = [CR0] in
  37. def _rec : XOForm_RTAB5_L1<opcode, xo, OOL, IOL,
  38. !strconcat(asmbase, !strconcat(". ", asmstr)),
  39. []>, isRecordForm, RecFormRel;
  40. }
  41. }
  42. let Predicates = [IsISAFuture] in {
  43. defm SUBFUS : XOForm_RTAB5_L1r<31, 72, (outs g8rc:$RT),
  44. (ins g8rc:$RA, g8rc:$RB, u1imm:$L),
  45. "subfus", "$RT, $L, $RA, $RB", []>;
  46. }
  47. let Predicates = [HasVSX, IsISAFuture] in {
  48. let mayLoad = 1 in {
  49. def LXVRL : XX1Form_memOp<31, 525, (outs vsrc:$XT), (ins memr:$src, g8rc:$rB),
  50. "lxvrl $XT, $src, $rB", IIC_LdStLoad, []>;
  51. def LXVRLL : XX1Form_memOp<31, 557, (outs vsrc:$XT), (ins memr:$src, g8rc:$rB),
  52. "lxvrll $XT, $src, $rB", IIC_LdStLoad, []>;
  53. def LXVPRL : XForm_XTp5_XAB5<31, 589, (outs vsrprc:$XTp),
  54. (ins memr:$src, g8rc:$rB),
  55. "lxvprl $XTp, $src, $rB", IIC_LdStLFD, []>;
  56. def LXVPRLL : XForm_XTp5_XAB5<31, 621, (outs vsrprc:$XTp),
  57. (ins memr:$src, g8rc:$rB),
  58. "lxvprll $XTp, $src, $rB", IIC_LdStLFD, []>;
  59. }
  60. let mayStore = 1 in {
  61. def STXVRL : XX1Form_memOp<31, 653, (outs),
  62. (ins vsrc:$XT, memr:$dst, g8rc:$rB),
  63. "stxvrl $XT, $dst, $rB", IIC_LdStLoad, []>;
  64. def STXVRLL : XX1Form_memOp<31, 685, (outs),
  65. (ins vsrc:$XT, memr:$dst, g8rc:$rB),
  66. "stxvrll $XT, $dst, $rB", IIC_LdStLoad, []>;
  67. def STXVPRL : XForm_XTp5_XAB5<31, 717, (outs),
  68. (ins vsrprc:$XTp, memr:$src, g8rc:$rB),
  69. "stxvprl $XTp, $src, $rB", IIC_LdStLFD, []>;
  70. def STXVPRLL : XForm_XTp5_XAB5<31, 749, (outs),
  71. (ins vsrprc:$XTp, memr:$src, g8rc:$rB),
  72. "stxvprll $XTp, $src, $rB", IIC_LdStLFD, []>;
  73. }
  74. }