diff options
| author | Oliver Stannard <oliver.stannard@arm.com> | 2018-09-27 13:47:40 +0000 |
|---|---|---|
| committer | Oliver Stannard <oliver.stannard@arm.com> | 2018-09-27 13:47:40 +0000 |
| commit | 224428c06a24303b2200aa98d719f080570fcb9f (patch) | |
| tree | 25c0c4961fc15264a0047b3832c0956337f57404 /llvm/lib/Target/AArch64/InstPrinter/AArch64InstPrinter.cpp | |
| parent | 382c935c4231eaf7b820cb207c9fbd0c50505181 (diff) | |
| download | bcm5719-llvm-224428c06a24303b2200aa98d719f080570fcb9f.tar.gz bcm5719-llvm-224428c06a24303b2200aa98d719f080570fcb9f.zip | |
[AArch64][v8.5A] Add prediction invalidation instructions to AArch64
This adds new system instructions which act as barriers to speculative
execution based on earlier execution within a particular execution
context.
Patch by Pablo Barrio!
Differential revision: https://reviews.llvm.org/D52479
llvm-svn: 343214
Diffstat (limited to 'llvm/lib/Target/AArch64/InstPrinter/AArch64InstPrinter.cpp')
| -rw-r--r-- | llvm/lib/Target/AArch64/InstPrinter/AArch64InstPrinter.cpp | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/llvm/lib/Target/AArch64/InstPrinter/AArch64InstPrinter.cpp b/llvm/lib/Target/AArch64/InstPrinter/AArch64InstPrinter.cpp index 26e41215afc..aa537abf6ab 100644 --- a/llvm/lib/Target/AArch64/InstPrinter/AArch64InstPrinter.cpp +++ b/llvm/lib/Target/AArch64/InstPrinter/AArch64InstPrinter.cpp @@ -775,8 +775,33 @@ bool AArch64InstPrinter::printSysAlias(const MCInst *MI, if (CnVal == 7) { switch (CmVal) { default: return false; + // Maybe IC, maybe Prediction Restriction + case 1: + switch (Op1Val) { + default: return false; + case 0: goto Search_IC; + case 3: goto Search_PRCTX; + } + // Prediction Restriction aliases + case 3: { + Search_PRCTX: + const AArch64PRCTX::PRCTX *PRCTX = AArch64PRCTX::lookupPRCTXByEncoding(Encoding >> 3); + if (!PRCTX || !PRCTX->haveFeatures(STI.getFeatureBits())) + return false; + + NeedsReg = PRCTX->NeedsReg; + switch (Op2Val) { + default: return false; + case 4: Ins = "cfp\t"; break; + case 5: Ins = "dvp\t"; break; + case 7: Ins = "cpp\t"; break; + } + Name = std::string(PRCTX->Name); + } + break; // IC aliases - case 1: case 5: { + case 5: { + Search_IC: const AArch64IC::IC *IC = AArch64IC::lookupICByEncoding(Encoding); if (!IC || !IC->haveFeatures(STI.getFeatureBits())) return false; |

