X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FTarget%2FCellSPU%2FSPUInstrFormats.td;h=bdbe2552dcdd154b38853a08b98812a3d41ff904;hb=4d83b79c76044e3f3cefd2a6c1b0b792266935c8;hp=7221ab2dc8ed660ec1e24b0d758a258fa2af5d2b;hpb=7358c193fd2c7e6cc844f72e2203cbdb7692759f;p=oota-llvm.git diff --git a/lib/Target/CellSPU/SPUInstrFormats.td b/lib/Target/CellSPU/SPUInstrFormats.td index 7221ab2dc8e..bdbe2552dcd 100644 --- a/lib/Target/CellSPU/SPUInstrFormats.td +++ b/lib/Target/CellSPU/SPUInstrFormats.td @@ -14,7 +14,7 @@ // This was kiped from the PPC instruction formats (seemed like a good idea...) -class I +class SPUInstr : Instruction { field bits<32> Inst; @@ -28,7 +28,7 @@ class I // RR Format class RRForm opcode, dag OOL, dag IOL, string asmstr, InstrItinClass itin, list pattern> - : I { + : SPUInstr { bits<7> RA; bits<7> RB; bits<7> RT; @@ -70,7 +70,7 @@ let RT = 0 in { // RRR Format class RRRForm opcode, dag OOL, dag IOL, string asmstr, InstrItinClass itin, list pattern> - : I + : SPUInstr { bits<7> RA; bits<7> RB; @@ -89,7 +89,7 @@ class RRRForm opcode, dag OOL, dag IOL, string asmstr, // RI7 Format class RI7Form opcode, dag OOL, dag IOL, string asmstr, InstrItinClass itin, list pattern> - : I + : SPUInstr { bits<7> i7; bits<7> RA; @@ -106,7 +106,7 @@ class RI7Form opcode, dag OOL, dag IOL, string asmstr, // CVTIntFp Format class CVTIntFPForm opcode, dag OOL, dag IOL, string asmstr, InstrItinClass itin, list pattern> - : I + : SPUInstr { bits<7> RA; bits<7> RT; @@ -120,9 +120,8 @@ class CVTIntFPForm opcode, dag OOL, dag IOL, string asmstr, } let RA = 0 in { - class BICondForm opcode, string asmstr, list pattern> - : RRForm + class BICondForm opcode, dag OOL, dag IOL, string asmstr, list pattern> + : RRForm { } let RT = 0 in { @@ -149,7 +148,7 @@ let RA = 0 in { // Branch indirect external data forms: class BISLEDForm DE_flag, string asmstr, list pattern> - : I<(outs), (ins indcalltarget:$func), asmstr, BranchResolv> + : SPUInstr<(outs), (ins indcalltarget:$func), asmstr, BranchResolv> { bits<7> Rcalldest; @@ -166,7 +165,7 @@ class BISLEDForm DE_flag, string asmstr, list pattern> // RI10 Format class RI10Form opcode, dag OOL, dag IOL, string asmstr, InstrItinClass itin, list pattern> - : I + : SPUInstr { bits<10> i10; bits<7> RA; @@ -182,43 +181,27 @@ class RI10Form opcode, dag OOL, dag IOL, string asmstr, // RI10 Format, where the constant is zero (or effectively ignored by the // SPU) -class RI10Form_1 opcode, dag OOL, dag IOL, string asmstr, - InstrItinClass itin, list pattern> - : I -{ - bits<7> RA; - bits<7> RT; - - let Pattern = pattern; - - let Inst{0-7} = opcode; - let Inst{8-17} = 0; - let Inst{18-24} = RA; - let Inst{25-31} = RT; +let i10 = 0 in { + class RI10Form_1 opcode, dag OOL, dag IOL, string asmstr, + InstrItinClass itin, list pattern> + : RI10Form + { } } // RI10 Format, where RT is ignored. // This format is used primarily by the Halt If ... Immediate set of // instructions -class RI10Form_2 opcode, dag OOL, dag IOL, string asmstr, - InstrItinClass itin, list pattern> - : I -{ - bits<10> i10; - bits<7> RA; - - let Pattern = pattern; - - let Inst{0-7} = opcode; - let Inst{8-17} = i10; - let Inst{18-24} = RA; - let Inst{25-31} = 0; +let RT = 0 in { + class RI10Form_2 opcode, dag OOL, dag IOL, string asmstr, + InstrItinClass itin, list pattern> + : RI10Form + { } } // RI16 Format class RI16Form opcode, dag OOL, dag IOL, string asmstr, InstrItinClass itin, list pattern> - : I + : SPUInstr { bits<16> i16; bits<7> RT; @@ -247,10 +230,14 @@ let RT = 0 in { { } } +//===----------------------------------------------------------------------===// +// Specialized versions of RI16: +//===----------------------------------------------------------------------===// + // RI18 Format class RI18Form opcode, dag OOL, dag IOL, string asmstr, InstrItinClass itin, list pattern> - : I + : SPUInstr { bits<18> i18; bits<7> RT; @@ -302,7 +289,32 @@ class RR_Int_v4i32 opcode, string opc, InstrItinClass itin, //===----------------------------------------------------------------------===// class Pseudo pattern> - : I { + : SPUInstr { + let OutOperandList = OOL; + let InOperandList = IOL; + let AsmString = asmstr; let Pattern = pattern; let Inst{31-0} = 0; } + +//===----------------------------------------------------------------------===// +// Branch hint formats +//===----------------------------------------------------------------------===// +// For hbrr and hbra +class HBI16Form opcode, dag IOL, string asmstr> + : Instruction { + field bits<32> Inst; + bits<16>i16; + bits<9>RO; + + let Namespace = "SPU"; + let InOperandList = IOL; + let OutOperandList = (outs); //no output + let AsmString = asmstr; + let Itinerary = BranchHints; + + let Inst{0-6} = opcode; + let Inst{7-8} = RO{8-7}; + let Inst{9-24} = i16; + let Inst{25-31} = RO{6-0}; +}