aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp')
-rw-r--r--llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp28
1 files changed, 26 insertions, 2 deletions
diff --git a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp
index 5c3e26e..3e4c110 100644
--- a/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp
+++ b/llvm/lib/Target/AArch64/MCTargetDesc/AArch64InstPrinter.cpp
@@ -1034,7 +1034,7 @@ bool AArch64InstPrinter::printSysAlias(const MCInst *MI,
if (!GIC || !GIC->haveFeatures(STI.getFeatureBits()))
return false;
- NeedsReg = true;
+ NeedsReg = GIC->NeedsReg;
Ins = "gic\t";
Name = std::string(GIC->Name);
} else {
@@ -1047,6 +1047,18 @@ bool AArch64InstPrinter::printSysAlias(const MCInst *MI,
Ins = "gsb\t";
Name = std::string(GSB->Name);
}
+ } else if (CnVal == 10) {
+ // PLBI aliases
+ const AArch64PLBI::PLBI *PLBI = AArch64PLBI::lookupPLBIByEncoding(Encoding);
+ if (!PLBI || !PLBI->haveFeatures(STI.getFeatureBits()))
+ return false;
+
+ NeedsReg = PLBI->NeedsReg;
+ if (STI.hasFeature(AArch64::FeatureAll) ||
+ STI.hasFeature(AArch64::FeatureTLBID))
+ OptionalReg = PLBI->OptionalReg;
+ Ins = "plbi\t";
+ Name = std::string(PLBI->Name);
} else
return false;
@@ -1114,7 +1126,6 @@ bool AArch64InstPrinter::printSyslAlias(const MCInst *MI,
} else
return false;
- std::string Str;
llvm::transform(Name, Name.begin(), ::tolower);
O << '\t' << Ins << '\t' << Reg.str() << ", " << Name;
@@ -1609,6 +1620,19 @@ void AArch64InstPrinter::printCMHPriorityHintOp(const MCInst *MI,
AArch64CMHPriorityHint::lookupCMHPriorityHintByEncoding(priorityhint_op);
if (PHint)
O << PHint->Name;
+ else
+ markup(O, Markup::Immediate) << '#' << formatImm(priorityhint_op);
+}
+
+void AArch64InstPrinter::printTIndexHintOp(const MCInst *MI, unsigned OpNum,
+ const MCSubtargetInfo &STI,
+ raw_ostream &O) {
+ unsigned tindexhintop = MI->getOperand(OpNum).getImm();
+ auto TIndex = AArch64TIndexHint::lookupTIndexByEncoding(tindexhintop);
+ if (TIndex)
+ O << TIndex->Name;
+ else
+ markup(O, Markup::Immediate) << '#' << formatImm(tindexhintop);
}
void AArch64InstPrinter::printFPImmOperand(const MCInst *MI, unsigned OpNum,