mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-07 14:33:15 +00:00
Use a combination of sethi and or to build arbitrary immediates.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24780 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
57dd3bc460
commit
b71f9f8488
@ -39,6 +39,10 @@ def simm13 : PatLeaf<(imm), [{
|
||||
return (((int)N->getValue() << (32-13)) >> (32-13)) == (int)N->getValue();
|
||||
}]>;
|
||||
|
||||
def LO10 : SDNodeXForm<imm, [{
|
||||
return CurDAG->getTargetConstant((unsigned)N->getValue() & 1023, MVT::i32);
|
||||
}]>;
|
||||
|
||||
def HI22 : SDNodeXForm<imm, [{
|
||||
// Transformation function: shift the immediate value down into the low bits.
|
||||
return CurDAG->getTargetConstant((unsigned)N->getValue() >> 10, MVT::i32);
|
||||
@ -580,3 +584,6 @@ def FCMPED : F3_3<2, 0b110101, 0b001010110,
|
||||
// Small immediates.
|
||||
def : Pat<(i32 simm13:$val),
|
||||
(ORri G0, imm:$val)>;
|
||||
// Arbitrary immediates.
|
||||
def : Pat<(i32 imm:$val),
|
||||
(ORri (SETHIi (HI22 imm:$val)), (LO10 imm:$val))>;
|
@ -39,6 +39,10 @@ def simm13 : PatLeaf<(imm), [{
|
||||
return (((int)N->getValue() << (32-13)) >> (32-13)) == (int)N->getValue();
|
||||
}]>;
|
||||
|
||||
def LO10 : SDNodeXForm<imm, [{
|
||||
return CurDAG->getTargetConstant((unsigned)N->getValue() & 1023, MVT::i32);
|
||||
}]>;
|
||||
|
||||
def HI22 : SDNodeXForm<imm, [{
|
||||
// Transformation function: shift the immediate value down into the low bits.
|
||||
return CurDAG->getTargetConstant((unsigned)N->getValue() >> 10, MVT::i32);
|
||||
@ -580,3 +584,6 @@ def FCMPED : F3_3<2, 0b110101, 0b001010110,
|
||||
// Small immediates.
|
||||
def : Pat<(i32 simm13:$val),
|
||||
(ORri G0, imm:$val)>;
|
||||
// Arbitrary immediates.
|
||||
def : Pat<(i32 imm:$val),
|
||||
(ORri (SETHIi (HI22 imm:$val)), (LO10 imm:$val))>;
|
Loading…
x
Reference in New Issue
Block a user