X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FMips%2FMips16InstrFormats.td;h=da3a1f114af39f9b5e454ee3f715a6c9069dc151;hb=7225e27b4cd9a3e33478264caac765bf31e3179a;hp=6babee918d5f4f800a6a22c308794bc133866ddc;hpb=fef904d0e824a2c587f8c1063b6c4fbf47fec898;p=oota-llvm.git diff --git a/lib/Target/Mips/Mips16InstrFormats.td b/lib/Target/Mips/Mips16InstrFormats.td index 6babee918d5..da3a1f114af 100644 --- a/lib/Target/Mips/Mips16InstrFormats.td +++ b/lib/Target/Mips/Mips16InstrFormats.td @@ -29,45 +29,13 @@ // //===----------------------------------------------------------------------===// -// Format specifies the encoding used by the instruction. This is part of the -// ad-hoc solution used to emit machine instruction encodings by our machine -// code emitter. -// -class Format16 val> { - bits<5> Value = val; -} - -def Pseudo16 : Format16<0>; -def FrmI16 : Format16<1>; -def FrmRI16 : Format16<2>; -def FrmRR16 : Format16<3>; -def FrmRRI16 : Format16<4>; -def FrmRRR16 : Format16<5>; -def FrmRRI_A16 : Format16<6>; -def FrmSHIFT16 : Format16<7>; -def FrmI8_TYPE16 : Format16<8>; -def FrmI8_MOVR3216 : Format16<9>; -def FrmI8_MOV32R16 : Format16<10>; -def FrmI8_SVRS16 : Format16<11>; -def FrmJAL16 : Format16<12>; -def FrmJALX16 : Format16<13>; -def FrmEXT_I16 : Format16<14>; -def FrmASMACRO16 : Format16<15>; -def FrmEXT_RI16 : Format16<16>; -def FrmEXT_RRI16 : Format16<17>; -def FrmEXT_RRI_A16 : Format16<18>; -def FrmEXT_SHIFT16 : Format16<19>; -def FrmEXT_I816 : Format16<20>; -def FrmEXT_I8_SVRS16 : Format16<21>; -def FrmOther16 : Format16<22>; // Instruction w/ a custom format // Base class for Mips 16 Format // This class does not depend on the instruction size // class MipsInst16_Base pattern, - InstrItinClass itin, Format16 f>: Instruction + InstrItinClass itin>: Instruction { - Format16 Form = f; let Namespace = "Mips"; @@ -78,14 +46,6 @@ class MipsInst16_Base pattern, let Pattern = pattern; let Itinerary = itin; - // - // Attributes specific to Mips instructions... - // - bits<5> FormBits = Form.Value; - - // TSFlags layout should be kept in sync with MipsInstrInfo.h. - let TSFlags{4-0} = FormBits; - let Predicates = [InMips16Mode]; } @@ -93,30 +53,35 @@ class MipsInst16_Base pattern, // Generic Mips 16 Format // class MipsInst16 pattern, - InstrItinClass itin, Format16 f>: - MipsInst16_Base + InstrItinClass itin>: + MipsInst16_Base { field bits<16> Inst; bits<5> Opcode = 0; // Top 5 bits are the 'opcode' field let Inst{15-11} = Opcode; + + let Size=2; + field bits<16> SoftFail = 0; } // // For 32 bit extended instruction forms. // class MipsInst16_32 pattern, - InstrItinClass itin, Format16 f>: - MipsInst16_Base + InstrItinClass itin>: + MipsInst16_Base { field bits<32> Inst; + let Size=4; + field bits<32> SoftFail = 0; } class MipsInst16_EXTEND pattern, - InstrItinClass itin, Format16 f>: - MipsInst16_32 + InstrItinClass itin>: + MipsInst16_32 { let Inst{31-27} = 0b11110; } @@ -125,7 +90,7 @@ class MipsInst16_EXTEND pattern, // Mips Pseudo Instructions Format class MipsPseudo16 pattern>: - MipsInst16 { + MipsInst16 { let isCodeGenOnly = 1; let isPseudo = 1; } @@ -137,7 +102,7 @@ class MipsPseudo16 pattern>: class FI16 op, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16 + MipsInst16 { bits<11> imm11; @@ -152,7 +117,7 @@ class FI16 op, dag outs, dag ins, string asmstr, list pattern, class FRI16 op, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16 + MipsInst16 { bits<3> rx; bits<8> imm8; @@ -169,7 +134,7 @@ class FRI16 op, dag outs, dag ins, string asmstr, class FRR16 _funct, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16 + MipsInst16 { bits<3> rx; bits<3> ry; @@ -183,12 +148,26 @@ class FRR16 _funct, dag outs, dag ins, string asmstr, let Inst{4-0} = funct; } +class FRRBreak16 pattern, InstrItinClass itin>: + MipsInst16 +{ + bits<6> Code; + bits<5> funct; + + let Opcode = 0b11101; + let funct = 0b00101; + + let Inst{10-5} = Code; + let Inst{4-0} = funct; +} + // // For conversion functions. // class FRR_SF16 _funct, bits<3> _subfunct, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16 + MipsInst16 { bits<3> rx; bits<3> subfunct; @@ -208,7 +187,7 @@ class FRR_SF16 _funct, bits<3> _subfunct, dag outs, dag ins, // class FC16 _funct, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16 + MipsInst16 { bits<6> _code; // code is a keyword in tablegen bits<5> funct; @@ -226,7 +205,7 @@ class FC16 _funct, dag outs, dag ins, string asmstr, class FRR16_JALRC _nd, bits<1> _l, bits<1> r_a, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16 + MipsInst16 { bits<3> rx; bits<1> nd; @@ -252,7 +231,7 @@ class FRR16_JALRC _nd, bits<1> _l, bits<1> r_a, class FRRI16 op, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16 + MipsInst16 { bits<3> rx; bits<3> ry; @@ -272,7 +251,7 @@ class FRRI16 op, dag outs, dag ins, string asmstr, class FRRR16 _f, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16 + MipsInst16 { bits<3> rx; bits<3> ry; @@ -294,7 +273,7 @@ class FRRR16 _f, dag outs, dag ins, string asmstr, class FRRI_A16 _f, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16 + MipsInst16 { bits<3> rx; bits<3> ry; @@ -316,7 +295,7 @@ class FRRI_A16 _f, dag outs, dag ins, string asmstr, class FSHIFT16 _f, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16 + MipsInst16 { bits<3> rx; bits<3> ry; @@ -338,7 +317,7 @@ class FSHIFT16 _f, dag outs, dag ins, string asmstr, class FI816 _func, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16 + MipsInst16 { bits<3> func; bits<8> imm8; @@ -356,7 +335,7 @@ class FI816 _func, dag outs, dag ins, string asmstr, class FI8_MOVR3216 pattern, InstrItinClass itin>: - MipsInst16 + MipsInst16 { bits<4> ry; @@ -378,7 +357,7 @@ class FI8_MOVR3216 pattern, InstrItinClass itin>: - MipsInst16 + MipsInst16 { bits<3> func; @@ -402,7 +381,7 @@ class FI8_MOV32R16 _s, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16 + MipsInst16 { bits<1> s; bits<1> ra = 0; @@ -429,7 +408,7 @@ class FI8_SVRS16 _s, dag outs, dag ins, string asmstr, class FJAL16 _X, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16_32 + MipsInst16_32 { bits<1> X; bits<26> imm26; @@ -452,7 +431,7 @@ class FJAL16 _X, dag outs, dag ins, string asmstr, class FEXT_I16 _eop, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16_EXTEND + MipsInst16_EXTEND { bits<16> imm16; bits<5> eop; @@ -474,7 +453,7 @@ class FEXT_I16 _eop, dag outs, dag ins, string asmstr, class FASMACRO16 pattern, InstrItinClass itin>: - MipsInst16_EXTEND + MipsInst16_EXTEND { bits<3> select; bits<3> p4; @@ -503,7 +482,7 @@ class FASMACRO16 _op, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16_EXTEND + MipsInst16_EXTEND { bits<16> imm16; bits<5> op; @@ -527,16 +506,18 @@ class FEXT_RI16 _op, dag outs, dag ins, string asmstr, class FEXT_RRI16 _op, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16_EXTEND + MipsInst16_EXTEND { + bits<5> op; bits<16> imm16; bits<3> rx; bits<3> ry; + let op=_op; let Inst{26-21} = imm16{10-5}; let Inst{20-16} = imm16{15-11}; - let Inst{15-11} = _op; + let Inst{15-11} = op; let Inst{10-8} = rx; let Inst{7-5} = ry; let Inst{4-0} = imm16{4-0}; @@ -550,7 +531,7 @@ class FEXT_RRI16 _op, dag outs, dag ins, string asmstr, class FEXT_RRI_A16 _f, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16_EXTEND + MipsInst16_EXTEND { bits<15> imm15; bits<3> rx; @@ -576,7 +557,7 @@ class FEXT_RRI_A16 _f, dag outs, dag ins, string asmstr, class FEXT_SHIFT16 _f, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16_EXTEND + MipsInst16_EXTEND { bits<6> sa6; bits<3> rx; @@ -603,7 +584,7 @@ class FEXT_SHIFT16 _f, dag outs, dag ins, string asmstr, class FEXT_I816 _funct, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16_EXTEND + MipsInst16_EXTEND { bits<16> imm16; bits<5> I8; @@ -628,7 +609,7 @@ class FEXT_I816 _funct, dag outs, dag ins, string asmstr, class FEXT_I8_SVRS16 s_, dag outs, dag ins, string asmstr, list pattern, InstrItinClass itin>: - MipsInst16_EXTEND + MipsInst16_EXTEND { bits<3> xsregs =0; bits<8> framesize =0; @@ -657,5 +638,3 @@ class FEXT_I8_SVRS16 s_, dag outs, dag ins, string asmstr, } - -