mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-06 04:18:00 +00:00
Proper match halfword-imm operands for mov and add
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@75920 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -66,6 +66,13 @@ def i64hh16 : PatLeaf<(i64 imm), [{
|
|||||||
return ((N->getZExtValue() & 0xFFFF000000000000ULL) == N->getZExtValue());
|
return ((N->getZExtValue() & 0xFFFF000000000000ULL) == N->getZExtValue());
|
||||||
}], HH16>;
|
}], HH16>;
|
||||||
|
|
||||||
|
def immSExt16 : PatLeaf<(i64 imm), [{
|
||||||
|
// immSExt16 predicate - true if the immediate fits in a 16-bit sign extended
|
||||||
|
// field.
|
||||||
|
uint64_t val = N->getZExtValue();
|
||||||
|
return ((int64_t)val == (int16_t)val);
|
||||||
|
}]>;
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
// Control Flow Instructions...
|
// Control Flow Instructions...
|
||||||
//
|
//
|
||||||
@@ -87,9 +94,9 @@ def MOV64rr : Pseudo<(outs GR64:$dst), (ins GR64:$src),
|
|||||||
|
|
||||||
// FIXME: Provide proper encoding!
|
// FIXME: Provide proper encoding!
|
||||||
let isReMaterializable = 1, isAsCheapAsAMove = 1 in {
|
let isReMaterializable = 1, isAsCheapAsAMove = 1 in {
|
||||||
def MOV64ri : Pseudo<(outs GR64:$dst), (ins i64imm:$src),
|
def MOV64ri16 : Pseudo<(outs GR64:$dst), (ins i64imm:$src),
|
||||||
"lghi\t{$dst, $src}",
|
"lghi\t{$dst, $src}",
|
||||||
[(set GR64:$dst, imm:$src)]>;
|
[(set GR64:$dst, immSExt16:$src)]>;
|
||||||
}
|
}
|
||||||
|
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
@@ -108,10 +115,10 @@ def ADD64rr : Pseudo<(outs GR64:$dst), (ins GR64:$src1, GR64:$src2),
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: Provide proper encoding!
|
// FIXME: Provide proper encoding!
|
||||||
def ADD64ri : Pseudo<(outs GR64:$dst), (ins GR64:$src1, i64imm:$src2),
|
def ADD64ri16 : Pseudo<(outs GR64:$dst), (ins GR64:$src1, i64imm:$src2),
|
||||||
"aghi\t{$dst, $src2}",
|
"aghi\t{$dst, $src2}",
|
||||||
[(set GR64:$dst, (add GR64:$src1, imm:$src2)),
|
[(set GR64:$dst, (add GR64:$src1, immSExt16:$src2)),
|
||||||
(implicit PSW)]>;
|
(implicit PSW)]>;
|
||||||
|
|
||||||
let isCommutable = 1 in { // X = AND Y, Z == X = AND Z, Y
|
let isCommutable = 1 in { // X = AND Y, Z == X = AND Z, Y
|
||||||
// FIXME: Provide proper encoding!
|
// FIXME: Provide proper encoding!
|
||||||
|
|||||||
Reference in New Issue
Block a user