2004-08-02 16:54:54 +00:00
|
|
|
//===- PowerPCInstrFormats.td - PowerPC Instruction Formats --*- tablegen -*-=//
|
|
|
|
//
|
|
|
|
// The LLVM Compiler Infrastructure
|
|
|
|
//
|
|
|
|
// This file was developed by the LLVM research group and is distributed under
|
|
|
|
// the University of Illinois Open Source License. See LICENSE.TXT for details.
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
class Format<bits<5> val> {
|
|
|
|
bits<5> Value = val;
|
|
|
|
}
|
|
|
|
|
|
|
|
def Pseudo: Format<0>;
|
|
|
|
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 PCRelimm14 : Format<8>;
|
|
|
|
def Imm14 : Format<9>;
|
|
|
|
def Imm2 : Format<10>;
|
|
|
|
def Crf : Format<11>;
|
|
|
|
def Imm3 : Format<12>;
|
|
|
|
def Imm1 : Format<13>;
|
|
|
|
def Fpr : Format<14>;
|
|
|
|
def Imm4 : Format<15>;
|
|
|
|
def Imm8 : Format<16>;
|
|
|
|
def Disimm16 : Format<17>;
|
|
|
|
def Disimm14 : Format<18>;
|
|
|
|
def Spr : Format<19>;
|
|
|
|
def Sgr : Format<20>;
|
|
|
|
def Imm15 : Format<21>;
|
|
|
|
def Vpr : Format<22>;
|
|
|
|
|
|
|
|
class PPC32Inst : Instruction {
|
|
|
|
field bits<32> Inst;
|
|
|
|
bits<3> ArgCount;
|
|
|
|
bits<5> Arg0Type;
|
|
|
|
bits<5> Arg1Type;
|
|
|
|
bits<5> Arg2Type;
|
|
|
|
bits<5> Arg3Type;
|
|
|
|
bits<5> Arg4Type;
|
|
|
|
bit PPC64;
|
|
|
|
bit VMX;
|
|
|
|
|
|
|
|
let Namespace = "PPC32";
|
|
|
|
}
|
|
|
|
|
2004-08-02 21:56:35 +00:00
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// PowerPC instruction formats
|
|
|
|
|
|
|
|
class PPC32I<string name, bits<6> opcode, bit ppc64, bit vmx> : Instruction {
|
|
|
|
field bits<32> Inst;
|
|
|
|
field bits<6> Opcode = opcode;
|
|
|
|
|
|
|
|
bits<3> ArgCount;
|
|
|
|
bits<5> Arg0Type;
|
|
|
|
bits<5> Arg1Type;
|
|
|
|
bits<5> Arg2Type;
|
|
|
|
bits<5> Arg3Type;
|
|
|
|
bits<5> Arg4Type;
|
|
|
|
bit PPC64 = ppc64;
|
|
|
|
bit VMX = vmx;
|
|
|
|
|
|
|
|
let Name = name;
|
|
|
|
let Inst{0-5} = Opcode;
|
|
|
|
}
|
2004-08-02 16:54:54 +00:00
|
|
|
|
2004-08-02 21:56:35 +00:00
|
|
|
class XForm_base_r3xo<string name, bits<6> opcode, bits<10> xo, bit ppc64,
|
|
|
|
bit vmx> : PPC32I<name, opcode, ppc64, vmx> {
|
|
|
|
let ArgCount = 3;
|
|
|
|
field bits<5> A;
|
|
|
|
field bits<5> B;
|
|
|
|
field bits<5> C;
|
|
|
|
field bits<10> D = xo;
|
|
|
|
field bit Rc = 0;
|
|
|
|
|
|
|
|
let ArgCount = 3;
|
|
|
|
let Arg0Type = Gpr.Value;
|
|
|
|
let Arg1Type = Gpr.Value;
|
|
|
|
let Arg2Type = Gpr.Value;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
|
|
|
|
let Inst{6-10} = A;
|
|
|
|
let Inst{11-15} = B;
|
|
|
|
let Inst{16-20} = C;
|
|
|
|
let Inst{21-30} = D;
|
|
|
|
let Inst{31} = Rc;
|
|
|
|
}
|
2004-08-02 16:54:54 +00:00
|
|
|
|
2004-08-02 21:56:35 +00:00
|
|
|
class XForm_6<string name, bits<6> opcode, bits<10> xo, bit rc, bit ppc64,
|
|
|
|
bit vmx> : XForm_base_r3xo<name, opcode, xo, ppc64, vmx> {
|
|
|
|
let Rc = rc;
|
|
|
|
}
|
2004-08-02 16:54:54 +00:00
|
|
|
|
2004-08-02 21:56:35 +00:00
|
|
|
class XForm_7<string name, bits<6> opcode, bits<10> xo, bit ppc64, bit vmx>
|
|
|
|
: XForm_6<name, opcode, xo, 1, 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, ppc64, vmx> {
|
|
|
|
let Rc = rc;
|
|
|
|
let Arg2Type = Imm5.Value;
|
|
|
|
}
|
|
|
|
|
|
|
|
class DForm_base<string name, bits<6> opcode, bit ppc64, bit vmx>
|
|
|
|
: PPC32I<name, opcode, ppc64, vmx> {
|
|
|
|
field bits<5> A;
|
|
|
|
field bits<5> B;
|
|
|
|
field bits<16> C;
|
|
|
|
|
|
|
|
let ArgCount = 3;
|
|
|
|
let Arg0Type = Gpr.Value;
|
|
|
|
let Arg1Type = Gpr.Value;
|
|
|
|
let Arg2Type = Simm16.Value;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
|
|
|
|
let Inst{6-10} = A;
|
|
|
|
let Inst{11-15} = B;
|
|
|
|
let Inst{16-31} = C;
|
|
|
|
}
|
|
|
|
|
|
|
|
class DForm_1<string name, bits<6> opcode, bit ppc64, bit vmx>
|
|
|
|
: DForm_base<name, opcode, ppc64, vmx> {
|
|
|
|
let Arg2Type = Zimm16.Value;
|
|
|
|
}
|
|
|
|
|
|
|
|
class DForm_2<string name, bits<6> opcode, bit ppc64, bit vmx>
|
|
|
|
: DForm_base<name, opcode, ppc64, vmx>;
|
|
|
|
|
|
|
|
class DForm_2_r0<string name, bits<6> opcode, bit ppc64, bit vmx>
|
|
|
|
: DForm_base<name, opcode, ppc64, vmx> {
|
|
|
|
let Arg1Type = Gpr0.Value;
|
2004-08-02 16:54:54 +00:00
|
|
|
}
|
|
|
|
|
2004-08-02 21:56:35 +00:00
|
|
|
// Currently we make the use/def reg distinction in ISel, not tablegen
|
|
|
|
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_1<name, opcode, ppc64, vmx>;
|
|
|
|
|
|
|
|
class DForm_7<string name, bits<6> opcode, bit ppc64, bit vmx>
|
|
|
|
: DForm_base<name, opcode, ppc64, vmx> {
|
|
|
|
let Arg1Type = Imm5.Value;
|
|
|
|
}
|
|
|
|
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
2004-08-02 16:54:54 +00:00
|
|
|
class PPC32InstPattern1 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<5> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 2;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = 0;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
bits<16> operand1;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {20-16} = opconstant1;
|
|
|
|
let Inst {25-21} = operand0;
|
|
|
|
let Inst {15-0} = operand1;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern2 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<11> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 3;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = OperandType2.Value;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
bits<5> operand1;
|
|
|
|
bits<5> operand2;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {10-0} = opconstant1;
|
|
|
|
let Inst {25-21} = operand0;
|
|
|
|
let Inst {20-16} = operand1;
|
|
|
|
let Inst {15-11} = operand2;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern3 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<16> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 2;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = 0;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
bits<5> operand1;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {15-0} = opconstant1;
|
|
|
|
let Inst {25-21} = operand0;
|
|
|
|
let Inst {20-16} = operand1;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern6 <string name, Format OperandType0, bits<6> opconstant0, bits<2> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 1;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = 0;
|
|
|
|
let Arg2Type = 0;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<24> operand0;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {1-0} = opconstant1;
|
|
|
|
let Inst {25-2} = operand0;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern7 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<2> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 3;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = OperandType2.Value;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
bits<5> operand1;
|
|
|
|
bits<14> operand2;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {1-0} = opconstant1;
|
|
|
|
let Inst {25-21} = operand0;
|
|
|
|
let Inst {20-16} = operand1;
|
|
|
|
let Inst {15-2} = operand2;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern9 <string name, Format OperandType0, Format OperandType1, bits<11> opconstant0, bits<2> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 2;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = 0;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
bits<14> operand1;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-21} = opconstant0;
|
|
|
|
let Inst {1-0} = opconstant1;
|
|
|
|
let Inst {20-16} = operand0;
|
|
|
|
let Inst {15-2} = operand1;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern11 <string name, Format OperandType0, bits<19> opconstant0, bits<11> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 1;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = 0;
|
|
|
|
let Arg2Type = 0;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<2> operand0;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-13} = opconstant0;
|
|
|
|
let Inst {10-0} = opconstant1;
|
|
|
|
let Inst {12-11} = operand0;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern13 <string name, Format OperandType0, Format OperandType1, Format OperandType2, Format OperandType3, bits<6> opconstant0, bits<1> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 4;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = OperandType2.Value;
|
|
|
|
let Arg3Type = OperandType3.Value;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<3> operand0;
|
|
|
|
bits<1> operand1;
|
|
|
|
bits<5> operand2;
|
|
|
|
bits<16> operand3;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {22} = opconstant1;
|
|
|
|
let Inst {25-23} = operand0;
|
|
|
|
let Inst {21} = operand1;
|
|
|
|
let Inst {20-16} = operand2;
|
|
|
|
let Inst {15-0} = operand3;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern14 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<2> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 3;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = OperandType2.Value;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<3> operand0;
|
|
|
|
bits<5> operand1;
|
|
|
|
bits<16> operand2;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {22-21} = opconstant1;
|
|
|
|
let Inst {25-23} = operand0;
|
|
|
|
let Inst {20-16} = operand1;
|
|
|
|
let Inst {15-0} = operand2;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern15 <string name, Format OperandType0, Format OperandType1, Format OperandType2, Format OperandType3, bits<6> opconstant0, bits<1> opconstant1, bits<11> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 4;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = OperandType2.Value;
|
|
|
|
let Arg3Type = OperandType3.Value;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<3> operand0;
|
|
|
|
bits<1> operand1;
|
|
|
|
bits<5> operand2;
|
|
|
|
bits<5> operand3;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {22} = opconstant1;
|
|
|
|
let Inst {10-0} = opconstant2;
|
|
|
|
let Inst {25-23} = operand0;
|
|
|
|
let Inst {21} = operand1;
|
|
|
|
let Inst {20-16} = operand2;
|
|
|
|
let Inst {15-11} = operand3;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern16 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<2> opconstant1, bits<11> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 3;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = OperandType2.Value;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<3> operand0;
|
|
|
|
bits<5> operand1;
|
|
|
|
bits<5> operand2;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {22-21} = opconstant1;
|
|
|
|
let Inst {10-0} = opconstant2;
|
|
|
|
let Inst {25-23} = operand0;
|
|
|
|
let Inst {20-16} = operand1;
|
|
|
|
let Inst {15-11} = operand2;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern17 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<16> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 2;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = 0;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
bits<5> operand1;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {15-0} = opconstant1;
|
|
|
|
let Inst {20-16} = operand0;
|
|
|
|
let Inst {25-21} = operand1;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern18 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<5> opconstant1, bits<6> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 3;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = OperandType2.Value;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
bits<5> operand1;
|
|
|
|
bits<5> operand2;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {15-11} = opconstant1;
|
|
|
|
let Inst {5-0} = opconstant2;
|
|
|
|
let Inst {25-21} = operand0;
|
|
|
|
let Inst {20-16} = operand1;
|
|
|
|
let Inst {10-6} = operand2;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern19 <string name, Format OperandType0, Format OperandType1, Format OperandType2, Format OperandType3, bits<6> opconstant0, bits<6> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 4;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = OperandType2.Value;
|
|
|
|
let Arg3Type = OperandType3.Value;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
bits<5> operand1;
|
|
|
|
bits<5> operand2;
|
|
|
|
bits<5> operand3;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {5-0} = opconstant1;
|
|
|
|
let Inst {25-21} = operand0;
|
|
|
|
let Inst {20-16} = operand1;
|
|
|
|
let Inst {10-6} = operand2;
|
|
|
|
let Inst {15-11} = operand3;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern20 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<5> opconstant1, bits<11> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 2;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = 0;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
bits<5> operand1;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {20-16} = opconstant1;
|
|
|
|
let Inst {10-0} = opconstant2;
|
|
|
|
let Inst {25-21} = operand0;
|
|
|
|
let Inst {15-11} = operand1;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern21 <string name, Format OperandType0, bits<6> opconstant0, bits<21> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 1;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = 0;
|
|
|
|
let Arg2Type = 0;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {20-0} = opconstant1;
|
|
|
|
let Inst {25-21} = operand0;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern25 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 3;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = OperandType2.Value;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
bits<16> operand1;
|
|
|
|
bits<5> operand2;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {25-21} = operand0;
|
|
|
|
let Inst {15-0} = operand1;
|
|
|
|
let Inst {20-16} = operand2;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern32 <string name, Format OperandType0, Format OperandType1, bits<6> opconstant0, bits<1> opconstant1, bits<12> opconstant2, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 2;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = 0;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
bits<8> operand1;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {20} = opconstant1;
|
|
|
|
let Inst {11-0} = opconstant2;
|
|
|
|
let Inst {25-21} = operand0;
|
|
|
|
let Inst {19-12} = operand1;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern33 <string name, bits<32> opconstant0, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 0;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = 0;
|
|
|
|
let Arg1Type = 0;
|
|
|
|
let Arg2Type = 0;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-0} = opconstant0;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern34 <string name, Format OperandType0, Format OperandType1, Format OperandType2, Format OperandType3, Format OperandType4, bits<6> opconstant0, bits<1> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 5;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = OperandType2.Value;
|
|
|
|
let Arg3Type = OperandType3.Value;
|
|
|
|
let Arg4Type = OperandType4.Value;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
bits<5> operand1;
|
|
|
|
bits<5> operand2;
|
|
|
|
bits<5> operand3;
|
|
|
|
bits<5> operand4;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {0} = opconstant1;
|
|
|
|
let Inst {20-16} = operand0;
|
|
|
|
let Inst {25-21} = operand1;
|
|
|
|
let Inst {15-11} = operand2;
|
|
|
|
let Inst {10-6} = operand3;
|
|
|
|
let Inst {5-1} = operand4;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPattern35 <string name, Format OperandType0, Format OperandType1, Format OperandType2, bits<6> opconstant0, bits<11> opconstant1, bit ppc64, bit vmx> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 3;
|
|
|
|
let PPC64 = ppc64;
|
|
|
|
let VMX =vmx;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType1.Value;
|
|
|
|
let Arg2Type = OperandType2.Value;
|
|
|
|
let Arg3Type = 0;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
bits<5> operand1;
|
|
|
|
bits<5> operand2;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-26} = opconstant0;
|
|
|
|
let Inst {10-0} = opconstant1;
|
|
|
|
let Inst {25-21} = operand0;
|
|
|
|
let Inst {15-11} = operand1;
|
|
|
|
let Inst {20-16} = operand2;
|
|
|
|
}
|
|
|
|
|
|
|
|
class PPC32InstPatternPseudo <string name, Format OperandType0> : PPC32Inst {
|
|
|
|
let Name = name;
|
|
|
|
let ArgCount = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
|
|
|
|
let Arg0Type = OperandType0.Value;
|
|
|
|
let Arg1Type = OperandType0.Value;
|
|
|
|
let Arg2Type = OperandType0.Value;
|
|
|
|
let Arg3Type = OperandType0.Value;
|
|
|
|
let Arg4Type = 0;
|
|
|
|
let PPC64 = 0;
|
|
|
|
let VMX = 0;
|
|
|
|
bits<5> operand0;
|
|
|
|
bits<5> operand1;
|
|
|
|
bits<5> operand2;
|
|
|
|
bits<4> operand3;
|
|
|
|
|
|
|
|
|
|
|
|
let Inst {31-0} = 0;
|
|
|
|
}
|