Clenup and fix encoding for Mips ins and ext instruction

llvm-svn: 137943
This commit is contained in:
Bruno Cardoso Lopes 2011-08-18 16:30:49 +00:00
parent 6ddb568ab8
commit 2b8078a2cd
1 changed files with 13 additions and 17 deletions

View File

@ -406,15 +406,13 @@ class ReadHardware: FR<0x1f, 0x3b, (outs CPURegs:$dst), (ins HWRegs:$src),
} }
// Ext and Ins // Ext and Ins
class ExtIns<bits<6> _funct, string instr_asm, dag ins, class ExtIns<bits<6> _funct, string instr_asm, dag outs, dag ins,
list<dag> pattern, InstrItinClass itin>: list<dag> pattern, InstrItinClass itin>:
FR<0x1f, _funct, (outs CPURegs:$rt), ins, FR<0x1f, _funct, outs, ins, !strconcat(instr_asm, " $rt, $rs, $pos, $sz"),
!strconcat(instr_asm, "\t$rt, $rs, $pos, $size"), pattern, itin> { pattern, itin>, Requires<[IsMips32r2]> {
bits<5> src;
bits<5> pos; bits<5> pos;
bits<5> size; bits<5> sz;
let rs = src; let rd = sz;
let rd = size;
let shamt = pos; let shamt = pos;
} }
@ -689,21 +687,19 @@ def MUL : ArithR<0x1c, 0x02, "mul", mul, IIImul, 1>, Requires<[IsMips32]>;
def RDHWR : ReadHardware; def RDHWR : ReadHardware;
let Predicates = [IsMips32r2] in { def EXT : ExtIns<0, "ext", (outs CPURegs:$rt),
(ins CPURegs:$rs, uimm16:$pos, uimm16:$sz),
def EXT : ExtIns<0, "ext", (ins CPURegs:$rs, uimm16:$pos, uimm16:$size), [(set CPURegs:$rt,
[(set CPURegs:$rt, (MipsExt CPURegs:$rs, immZExt5:$pos, immZExt5:$sz))],
(MipsExt CPURegs:$rs, immZExt5:$pos, immZExt5:$size))],
NoItinerary>; NoItinerary>;
let Constraints = "$src = $rt" in let Constraints = "$src = $rt" in
def INS : ExtIns<4, "ins", def INS : ExtIns<4, "ins", (outs CPURegs:$rt),
(ins CPURegs:$rs, uimm16:$pos, uimm16:$size, CPURegs:$src), (ins CPURegs:$rs, uimm16:$pos, uimm16:$sz, CPURegs:$src),
[(set CPURegs:$rt, [(set CPURegs:$rt,
(MipsIns CPURegs:$rs, immZExt5:$pos, immZExt5:$size, (MipsIns CPURegs:$rs, immZExt5:$pos, immZExt5:$sz,
CPURegs:$src))], CPURegs:$src))],
NoItinerary>; NoItinerary>;
}
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// Arbitrary patterns that map to one or more instructions // Arbitrary patterns that map to one or more instructions