summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/Mips/AsmParser
diff options
context:
space:
mode:
authorZlatko Buljan <Zlatko.Buljan@imgtec.com>2016-07-11 07:41:56 +0000
committerZlatko Buljan <Zlatko.Buljan@imgtec.com>2016-07-11 07:41:56 +0000
commitcba9f80ba87610b5f46f1baccbad548f2f15f0c6 (patch)
tree411fa795b35aae5c553f76318cae14e0cde3c0a0 /llvm/lib/Target/Mips/AsmParser
parent4d61a3c2d8864bec52e4d2ca700cbbbc10e5797f (diff)
downloadbcm5719-llvm-cba9f80ba87610b5f46f1baccbad548f2f15f0c6.tar.gz
bcm5719-llvm-cba9f80ba87610b5f46f1baccbad548f2f15f0c6.zip
[mips][microMIPS] Implement LDC1, SDC1, LDC2, SDC2, LWC1, SWC1, LWC2 and SWC2 instructions and add CodeGen support
Differential Revision: http://reviews.llvm.org/D18824 llvm-svn: 275050
Diffstat (limited to 'llvm/lib/Target/Mips/AsmParser')
-rw-r--r--llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp15
1 files changed, 11 insertions, 4 deletions
diff --git a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
index 53a3cf08a38..b51d0200b0b 100644
--- a/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
+++ b/llvm/lib/Target/Mips/AsmParser/MipsAsmParser.cpp
@@ -1063,10 +1063,17 @@ public:
// and determine whether a Value is a constant or not.
template <unsigned Bits, unsigned ShiftAmount = 0>
bool isMemWithSimmOffset() const {
- return isMem() && getMemBase()->isGPRAsmReg() &&
- (isa<MCTargetExpr>(getMemOff()) ||
- (isConstantMemOff() &&
- isShiftedInt<Bits, ShiftAmount>(getConstantMemOff())));
+ if (!isMem())
+ return false;
+ if (!getMemBase()->isGPRAsmReg())
+ return false;
+ if (isa<MCTargetExpr>(getMemOff()) ||
+ (isConstantMemOff() &&
+ isShiftedInt<Bits, ShiftAmount>(getConstantMemOff())))
+ return true;
+ MCValue Res;
+ bool IsReloc = getMemOff()->evaluateAsRelocatable(Res, nullptr, nullptr);
+ return IsReloc && isShiftedInt<Bits, ShiftAmount>(Res.getConstant());
}
bool isMemWithGRPMM16Base() const {
return isMem() && getMemBase()->isMM16AsmReg();
OpenPOWER on IntegriCloud