def Gpr : Format<1>;
def Gpr0 : Format<2>;
def Simm16 : Format<3>;
-def Zimm16 : Format<4>;
def PCRelimm24 : Format<5>;
def Imm24 : Format<6>;
def Imm5 : Format<7>;
def Sgr : Format<20>;
def Imm15 : Format<21>;
def Vpr : Format<22>;
+def Imm6 : Format<23>;
//===----------------------------------------------------------------------===//
//
class DForm_3<string name, bits<6> opcode, bit ppc64, bit vmx>
: DForm_1<name, opcode, ppc64, vmx>;
-class DForm_4<string name, bits<6> opcode, bit ppc64, bit vmx>
- : DForm_base<name, opcode, ppc64, vmx> {
- let Arg2Type = Zimm16.Value;
+class DForm_4<bits<6> opcode, bit ppc64, bit vmx,
+ dag OL, string asmstr> : DForm_base<"", opcode, ppc64, vmx> {
+ let OperandList = OL;
+ let AsmString = asmstr;
}
-class DForm_4_zero<string name, bits<6> opcode, bit ppc64, bit vmx>
- : DForm_1<name, opcode, ppc64, vmx> {
+class DForm_4_zero<string name, bits<6> opcode, bit ppc64, bit vmx,
+ dag OL, string asmstr> : DForm_1<"", opcode, ppc64, vmx> {
let ArgCount = 0;
let Arg0Type = 0;
let Arg1Type = 0;
let A = 0;
let B = 0;
let C = 0;
+ let OperandList = OL;
+ let AsmString = asmstr;
}
class DForm_5<string name, bits<6> opcode, bit ppc64, bit vmx>
class DForm_5_ext<string name, bits<6> opcode, bit ppc64, bit vmx>
: DForm_5<name, opcode, ppc64, vmx> {
- let L = 0;
+ let L = ppc64;
let ArgCount = 3;
let Arg0Type = Imm3.Value;
let Arg1Type = Gpr.Value;
let Arg3Type = 0;
}
-class DForm_6<string name, bits<6> opcode, bit ppc64, bit vmx>
- : DForm_5<name, opcode, ppc64, vmx> {
- let Arg3Type = Zimm16.Value;
+class DForm_6<bits<6> opcode, bit ppc64, bit vmx,
+ dag OL, string asmstr>
+ : DForm_5<"", opcode, ppc64, vmx> {
+ let OperandList = OL;
+ let AsmString = asmstr;
}
-class DForm_6_ext<string name, bits<6> opcode, bit ppc64, bit vmx>
- : DForm_6<name, opcode, ppc64, vmx> {
- let L = 0;
+class DForm_6_ext<bits<6> opcode, bit ppc64, bit vmx,
+ dag OL, string asmstr>
+ : DForm_6<opcode, ppc64, vmx, OL, asmstr> {
+ let L = ppc64;
let ArgCount = 3;
let Arg0Type = Imm3.Value;
let Arg1Type = Gpr.Value;
: DSForm_1<name, opcode, xo, ppc64, vmx>;
// 1.7.6 X-Form
-class XForm_base_r3xo<string name, bits<6> opcode, bits<10> xo, bit rc,
- bit ppc64, bit vmx> : I<name, opcode, ppc64, vmx> {
+class XForm_base_r3xo<bits<6> opcode, bits<10> xo, bit rc, bit ppc64, bit vmx,
+ dag OL, string asmstr> : I<"", opcode, ppc64, vmx> {
field bits<5> RST;
field bits<5> A;
field bits<5> B;
let Inst{16-20} = B;
let Inst{21-30} = xo;
let Inst{31} = rc;
+ let OperandList = OL;
+ let AsmString = asmstr;
}
-class XForm_1<string name, bits<6> opcode, bits<10> xo, bit ppc64,
- bit vmx> : XForm_base_r3xo<name, opcode, xo, 0, ppc64, vmx>;
-class XForm_5<string name, bits<6> opcode, bits<10> xo, bit ppc64,
- bit vmx> : XForm_base_r3xo<name, opcode, xo, 0, ppc64, vmx> {
+class XForm_1<bits<6> opcode, bits<10> xo, bit ppc64, bit vmx,
+ dag OL, string asmstr>
+ : XForm_base_r3xo<opcode, xo, 0, ppc64, vmx, OL, asmstr>;
+
+class XForm_5<bits<6> opcode, bits<10> xo, bit ppc64, bit vmx,
+ dag OL, string asmstr>
+ : XForm_base_r3xo<opcode, xo, 0, ppc64, vmx, OL, asmstr> {
let ArgCount = 1;
let Arg1Type = 0;
let Arg2Type = 0;
let B = 0;
}
-class XForm_6<string name, bits<6> opcode, bits<10> xo, bit rc, bit ppc64,
- bit vmx> : XForm_base_r3xo<name, opcode, xo, rc, ppc64, vmx>;
+class XForm_6<bits<6> opcode, bits<10> xo, bit rc, bit ppc64, bit vmx,
+ dag OL, string asmstr>
+ : XForm_base_r3xo<opcode, xo, rc, ppc64, vmx, OL, asmstr>;
-class XForm_7<string name, bits<6> opcode, bits<10> xo, bit ppc64, bit vmx>
- : XForm_base_r3xo<name, opcode, xo, 1, ppc64, vmx>;
+class XForm_8<bits<6> opcode, bits<10> xo, bit ppc64, bit vmx,
+ dag OL, string asmstr>
+ : XForm_base_r3xo<opcode, xo, 0, ppc64, vmx, OL, asmstr>;
-class XForm_8<string name, bits<6> opcode, bits<10> xo, bit ppc64, bit vmx>
- : XForm_base_r3xo<name, opcode, xo, 0, ppc64, vmx>;
-
-class XForm_10<string name, bits<6> opcode, bits<10> xo, bit rc, bit ppc64,
- bit vmx> : XForm_base_r3xo<name, opcode, xo, rc, ppc64, vmx> {
+class XForm_10<bits<6> opcode, bits<10> xo, bit rc, bit ppc64, bit vmx,
+ dag OL, string asmstr>
+ : XForm_base_r3xo<opcode, xo, rc, ppc64, vmx, OL, asmstr> {
let Arg2Type = Imm5.Value;
}
-class XForm_11<string name, bits<6> opcode, bits<10> xo, bit rc, bit ppc64,
- bit vmx> : XForm_base_r3xo<name, opcode, xo, rc, ppc64, vmx> {
+class XForm_11<bits<6> opcode, bits<10> xo, bit rc, bit ppc64, bit vmx,
+ dag OL, string asmstr>
+ : XForm_base_r3xo<opcode, xo, rc, ppc64, vmx, OL, asmstr> {
let ArgCount = 2;
let Arg2Type = 0;
let B = 0;
class XForm_16_ext<string name, bits<6> opcode, bits<10> xo, bit ppc64, bit vmx>
: XForm_16<name, opcode, xo, ppc64, vmx> {
- let L = 0;
+ let L = ppc64;
}
class XForm_17<string name, bits<6> opcode, bits<10> xo, bit ppc64, bit vmx>
let Inst{31} = 0;
}
-class XForm_25<string name, bits<6> opcode, bits<10> xo, bit ppc64,
- bit vmx> : XForm_base_r3xo<name, opcode, xo, 0, ppc64, vmx> {
+class XForm_25<bits<6> opcode, bits<10> xo, bit ppc64, bit vmx,
+ dag OL, string asmstr>
+ : XForm_base_r3xo<opcode, xo, 0, ppc64, vmx, OL, asmstr> {
let Arg0Type = Fpr.Value;
let Arg1Type = Gpr0.Value;
}
-class XForm_26<string name, bits<6> opcode, bits<10> xo, bit rc, bit ppc64,
- bit vmx> : XForm_base_r3xo<name, opcode, xo, rc, ppc64, vmx> {
+class XForm_26<bits<6> opcode, bits<10> xo, bit rc, bit ppc64, bit vmx,
+ dag OL, string asmstr>
+ : XForm_base_r3xo<opcode, xo, rc, ppc64, vmx, OL, asmstr> {
let ArgCount = 2;
let Arg0Type = Fpr.Value;
let Arg1Type = Fpr.Value;
let A = 0;
}
-class XForm_28<string name, bits<6> opcode, bits<10> xo, bit ppc64,
- bit vmx> : XForm_base_r3xo<name, opcode, xo, 0, ppc64, vmx> {
+class XForm_28<bits<6> opcode, bits<10> xo, bit ppc64, bit vmx,
+ dag OL, string asmstr>
+ : XForm_base_r3xo<opcode, xo, 0, ppc64, vmx, OL, asmstr> {
let Arg0Type = Fpr.Value;
let Arg1Type = Gpr0.Value;
}
// 1.7.7 XL-Form
-class XLForm_1<string name, bits<6> opcode, bits<10> xo, bit ppc64, bit vmx>
- : XForm_base_r3xo<name, opcode, xo, 0, ppc64, vmx> {
+class XLForm_1<bits<6> opcode, bits<10> xo, bit ppc64, bit vmx,
+ dag OL, string asmstr>
+ : XForm_base_r3xo<opcode, xo, 0, ppc64, vmx, OL, asmstr> {
let Arg0Type = Imm5.Value;
let Arg1Type = Imm5.Value;
let Arg2Type = Imm5.Value;
let SPR = spr;
}
+// 1.7.10 XS-Form
+class XSForm_1<string name, bits<6> opcode, bits<9> xo, bit rc,
+ bit ppc64, bit vmx> : I<name, opcode, ppc64, vmx> {
+ field bits<5> RS;
+ field bits<5> A;
+ field bits<6> SH;
+
+ let ArgCount = 3;
+ let Arg0Type = Gpr.Value;
+ let Arg1Type = Gpr.Value;
+ let Arg2Type = Imm6.Value;
+ let Arg3Type = 0;
+ let Arg4Type = 0;
+
+ let Inst{6-10} = RS;
+ let Inst{11-15} = A;
+ let Inst{16-20} = SH{1-5};
+ let Inst{21-29} = xo;
+ let Inst{30} = SH{0};
+ let Inst{31} = rc;
+}
+
// 1.7.11 XO-Form
class XOForm_1<string name, bits<6> opcode, bits<9> xo, bit oe, bit rc,
bit ppc64, bit vmx> : I<name, opcode, ppc64, vmx> {
let Arg2Type = Imm5.Value;
}
+// 1.7.14 MD-Form
+class MDForm_1<string name, bits<6> opcode, bits<3> xo, bit rc, bit ppc64, bit vmx>
+ : I<name, opcode, ppc64, vmx> {
+ let ArgCount = 4;
+ field bits<5> RS;
+ field bits<5> RA;
+ field bits<6> SH;
+ field bits<6> MBE;
+
+ let Arg0Type = Gpr.Value;
+ let Arg1Type = Gpr.Value;
+ let Arg2Type = Imm6.Value;
+ let Arg3Type = Imm6.Value;
+ let Arg4Type = 0;
+
+ let Inst{6-10} = RS;
+ let Inst{11-15} = RA;
+ let Inst{16-20} = SH{1-5};
+ let Inst{21-26} = MBE;
+ let Inst{27-29} = xo;
+ let Inst{30} = SH{0};
+ let Inst{31} = rc;
+}
+
//===----------------------------------------------------------------------===//
class Pseudo<string name> : I<name, 0, 0, 0> {