1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 04:22:57 +02:00

Use sethi to build large immediates with zeros at the bottom

llvm-svn: 24779
This commit is contained in:
Chris Lattner 2005-12-17 19:37:00 +00:00
parent 5893b95caa
commit 39740d3207
2 changed files with 14 additions and 3 deletions

View File

@ -21,11 +21,12 @@ class F2 : InstV8 { // Format 2 instructions
// Specific F2 classes: SparcV8 manual, page 44 // Specific F2 classes: SparcV8 manual, page 44
// //
class F2_1<bits<3> op2Val, dag ops, string asmstr> : F2 { class F2_1<bits<3> op2Val, dag ops, string asmstr, list<dag> pattern> : F2 {
bits<5> rd; bits<5> rd;
dag OperandList = ops; dag OperandList = ops;
let AsmString = asmstr; let AsmString = asmstr;
let Pattern = pattern;
let op2 = op2Val; let op2 = op2Val;

View File

@ -39,6 +39,15 @@ def simm13 : PatLeaf<(imm), [{
return (((int)N->getValue() << (32-13)) >> (32-13)) == (int)N->getValue(); return (((int)N->getValue() << (32-13)) >> (32-13)) == (int)N->getValue();
}]>; }]>;
def HI22 : SDNodeXForm<imm, [{
// Transformation function: shift the immediate value down into the low bits.
return CurDAG->getTargetConstant((unsigned)N->getValue() >> 10, MVT::i32);
}]>;
def SETHIimm : PatLeaf<(imm), [{
return (((unsigned)N->getValue() >> 10) << 10) == (unsigned)N->getValue();
}], HI22>;
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
// Instructions // Instructions
//===----------------------------------------------------------------------===// //===----------------------------------------------------------------------===//
@ -160,12 +169,13 @@ def STDFQri : F3_2<3, 0b100110,
// Section B.9 - SETHI Instruction, p. 104 // Section B.9 - SETHI Instruction, p. 104
def SETHIi: F2_1<0b100, def SETHIi: F2_1<0b100,
(ops IntRegs:$dst, i32imm:$src), (ops IntRegs:$dst, i32imm:$src),
"sethi $src, $dst">; "sethi $src, $dst",
[(set IntRegs:$dst, SETHIimm:$src)]>;
// Section B.10 - NOP Instruction, p. 105 // Section B.10 - NOP Instruction, p. 105
// (It's a special case of SETHI) // (It's a special case of SETHI)
let rd = 0, imm22 = 0 in let rd = 0, imm22 = 0 in
def NOP : F2_1<0b100, (ops), "nop">; def NOP : F2_1<0b100, (ops), "nop", []>;
// Section B.11 - Logical Instructions, p. 106 // Section B.11 - Logical Instructions, p. 106
def ANDrr : F3_1<2, 0b000001, def ANDrr : F3_1<2, 0b000001,