mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-03 14:21:30 +00:00
[mips][mips64r6] [ls][wd]c2 were re-encoded with 11-bit signed immediates rather than 16-bit in MIPS32r6/MIPS64r6
Summary: The error message for the invalid.s cases isn't very helpful. It happens because there is an instruction with a wider immediate that would have matched if the NotMips32r6 predicate were true. I have some WIP to improve the message but it affects most error messages for removed/re-encoded instructions on MIPS32r6/MIPS64r6 and should therefore be a separate commit. Depens on D4115 Reviewers: zoran.jovanovic, jkolek, vmedic Reviewed By: vmedic Differential Revision: http://reviews.llvm.org/D4117 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@211012 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -620,6 +620,12 @@ public:
|
||||
return Kind == k_Token;
|
||||
}
|
||||
bool isMem() const override { return Kind == k_Memory; }
|
||||
bool isConstantMemOff() const {
|
||||
return isMem() && dyn_cast<MCConstantExpr>(getMemOff());
|
||||
}
|
||||
template <unsigned Bits> bool isMemWithSimmOffset() const {
|
||||
return isMem() && isConstantMemOff() && isInt<Bits>(getConstantMemOff());
|
||||
}
|
||||
bool isInvNum() const { return Kind == k_Immediate; }
|
||||
bool isLSAImm() const {
|
||||
if (!isConstantImm())
|
||||
@@ -664,6 +670,10 @@ public:
|
||||
return Mem.Off;
|
||||
}
|
||||
|
||||
int64_t getConstantMemOff() const {
|
||||
return static_cast<const MCConstantExpr *>(getMemOff())->getValue();
|
||||
}
|
||||
|
||||
static std::unique_ptr<MipsOperand> CreateToken(StringRef Str, SMLoc S,
|
||||
MipsAsmParser &Parser) {
|
||||
auto Op = make_unique<MipsOperand>(k_Token, Parser);
|
||||
|
||||
Reference in New Issue
Block a user