diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2021-02-16 20:13:02 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2021-02-16 20:13:02 +0000 |
| commit | b60736ec1405bb0a8dd40989f67ef4c93da068ab (patch) | |
| tree | 5c43fbb7c9fc45f0f87e0e6795a86267dbd12f9d /llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp | |
| parent | cfca06d7963fa0909f90483b42a6d7d194d01e08 (diff) | |
Diffstat (limited to 'llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp')
| -rw-r--r-- | llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp index 05f870b90ecd..52577d75ddf5 100644 --- a/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp +++ b/llvm/lib/Target/ARM/AsmParser/ARMAsmParser.cpp @@ -3087,7 +3087,6 @@ public: // This is container for the immediate that we will create the constant // pool from addExpr(Inst, getConstantPoolImm()); - return; } void addMemTBBOperands(MCInst &Inst, unsigned N) const { @@ -6240,10 +6239,9 @@ bool ARMAsmParser::parsePrefix(ARMMCExpr::VariantKind &RefKind) { StringRef IDVal = Parser.getTok().getIdentifier(); const auto &Prefix = - std::find_if(std::begin(PrefixEntries), std::end(PrefixEntries), - [&IDVal](const PrefixEntry &PE) { - return PE.Spelling == IDVal; - }); + llvm::find_if(PrefixEntries, [&IDVal](const PrefixEntry &PE) { + return PE.Spelling == IDVal; + }); if (Prefix == std::end(PrefixEntries)) { Error(Parser.getTok().getLoc(), "unexpected prefix in operand"); return true; @@ -10309,11 +10307,14 @@ bool ARMAsmParser::processInstruction(MCInst &Inst, !HasWideQualifier) { // The operands aren't the same for tMOV[S]r... (no cc_out) MCInst TmpInst; - TmpInst.setOpcode(Inst.getOperand(4).getReg() ? ARM::tMOVSr : ARM::tMOVr); + unsigned Op = Inst.getOperand(4).getReg() ? ARM::tMOVSr : ARM::tMOVr; + TmpInst.setOpcode(Op); TmpInst.addOperand(Inst.getOperand(0)); TmpInst.addOperand(Inst.getOperand(1)); - TmpInst.addOperand(Inst.getOperand(2)); - TmpInst.addOperand(Inst.getOperand(3)); + if (Op == ARM::tMOVr) { + TmpInst.addOperand(Inst.getOperand(2)); + TmpInst.addOperand(Inst.getOperand(3)); + } Inst = TmpInst; return true; } @@ -10598,6 +10599,12 @@ unsigned ARMAsmParser::checkTargetMatchPredicate(MCInst &Inst) { (isThumb() && !hasV8Ops())) return Match_InvalidOperand; break; + case ARM::t2TBB: + case ARM::t2TBH: + // Rn = sp is only allowed with ARMv8-A + if (!hasV8Ops() && (Inst.getOperand(0).getReg() == ARM::SP)) + return Match_RequiresV8; + break; default: break; } @@ -11128,7 +11135,8 @@ bool ARMAsmParser::parseDirectiveArch(SMLoc L) { bool WasThumb = isThumb(); Triple T; MCSubtargetInfo &STI = copySTI(); - STI.setDefaultFeatures("", ("+" + ARM::getArchName(ID)).str()); + STI.setDefaultFeatures("", /*TuneCPU*/ "", + ("+" + ARM::getArchName(ID)).str()); setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits())); FixModeAfterArchChange(WasThumb, L); @@ -11241,7 +11249,7 @@ bool ARMAsmParser::parseDirectiveCPU(SMLoc L) { bool WasThumb = isThumb(); MCSubtargetInfo &STI = copySTI(); - STI.setDefaultFeatures(CPU, ""); + STI.setDefaultFeatures(CPU, /*TuneCPU*/ CPU, ""); setAvailableFeatures(ComputeAvailableFeatures(STI.getFeatureBits())); FixModeAfterArchChange(WasThumb, L); |
