diff options
| author | Pablo Barrio <pablo.barrio@arm.com> | 2018-12-03 14:00:47 +0000 |
|---|---|---|
| committer | Pablo Barrio <pablo.barrio@arm.com> | 2018-12-03 14:00:47 +0000 |
| commit | a17f855698d91c28a6e8d05b19f3638e256d911e (patch) | |
| tree | 1dfa1afda191e770688c7f5723c3438aab8fd1f8 /llvm/lib | |
| parent | a5235af980e55774882d6567fa1ca94caaf24ce6 (diff) | |
| download | bcm5719-llvm-a17f855698d91c28a6e8d05b19f3638e256d911e.tar.gz bcm5719-llvm-a17f855698d91c28a6e8d05b19f3638e256d911e.zip | |
[AArch64] Add command-line option for SSBS
Summary:
SSBS (Speculative Store Bypass Safe) is only mandatory from 8.5
onwards but is optional from Armv8.0-A. This patch adds a command
line option to enable SSBS, as it was previously only possible to
enable by selecting -march=armv8.5-a.
Similar patch upstream in GNU binutils:
https://sourceware.org/ml/binutils/2018-09/msg00274.html
Reviewers: olista01, samparker, aemerson
Reviewed By: samparker
Subscribers: javed.absar, kristof.beyls, kristina, llvm-commits
Differential Revision: https://reviews.llvm.org/D54629
llvm-svn: 348137
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64.td | 5 | ||||
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64Subtarget.h | 2 | ||||
| -rw-r--r-- | llvm/lib/Target/AArch64/AArch64SystemOperands.td | 4 |
3 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/Target/AArch64/AArch64.td b/llvm/lib/Target/AArch64/AArch64.td index a092c63325f..e331fee7144 100644 --- a/llvm/lib/Target/AArch64/AArch64.td +++ b/llvm/lib/Target/AArch64/AArch64.td @@ -306,6 +306,9 @@ def FeatureFRInt3264 : SubtargetFeature<"fptoint", "HasFRInt3264", "true", def FeatureSpecRestrict : SubtargetFeature<"specrestrict", "HasSpecRestrict", "true", "Enable architectural speculation restriction" >; +def FeatureSSBS : SubtargetFeature<"ssbs", "HasSSBS", + "true", "Enable Speculative Store Bypass Safe bit" >; + def FeatureSpecCtrl : SubtargetFeature<"specctrl", "HasSpecCtrl", "true", "Enable speculation control barrier" >; @@ -349,7 +352,7 @@ def HasV8_4aOps : SubtargetFeature<"v8.4a", "HasV8_4aOps", "true", def HasV8_5aOps : SubtargetFeature< "v8.5a", "HasV8_5aOps", "true", "Support ARM v8.5a instructions", [HasV8_4aOps, FeatureAltFPCmp, FeatureFRInt3264, FeatureSpecRestrict, - FeatureSpecCtrl, FeaturePredCtrl, FeatureCacheDeepPersist, + FeatureSSBS, FeatureSpecCtrl, FeaturePredCtrl, FeatureCacheDeepPersist, FeatureBranchTargetId] >; diff --git a/llvm/lib/Target/AArch64/AArch64Subtarget.h b/llvm/lib/Target/AArch64/AArch64Subtarget.h index c5850e80274..5e0657d5431 100644 --- a/llvm/lib/Target/AArch64/AArch64Subtarget.h +++ b/llvm/lib/Target/AArch64/AArch64Subtarget.h @@ -127,6 +127,7 @@ protected: bool HasFRInt3264 = false; bool HasSpecRestrict = false; bool HasSpecCtrl = false; + bool HasSSBS = false; bool HasPredCtrl = false; bool HasCCDP = false; bool HasBTI = false; @@ -355,6 +356,7 @@ public: bool hasFRInt3264() const { return HasFRInt3264; } bool hasSpecRestrict() const { return HasSpecRestrict; } bool hasSpecCtrl() const { return HasSpecCtrl; } + bool hasSSBS() const { return HasSSBS; } bool hasPredCtrl() const { return HasPredCtrl; } bool hasCCDP() const { return HasCCDP; } bool hasBTI() const { return HasBTI; } diff --git a/llvm/lib/Target/AArch64/AArch64SystemOperands.td b/llvm/lib/Target/AArch64/AArch64SystemOperands.td index f562bba1d2e..60d48e4d99d 100644 --- a/llvm/lib/Target/AArch64/AArch64SystemOperands.td +++ b/llvm/lib/Target/AArch64/AArch64SystemOperands.td @@ -343,7 +343,7 @@ def : PState<"UAO", 0b00011>; let Requires = [{ {AArch64::FeatureDIT} }] in def : PState<"DIT", 0b11010>; // v8.5a Spectre Mitigation -let Requires = [{ {AArch64::FeatureSpecRestrict} }] in +let Requires = [{ {AArch64::FeatureSSBS} }] in def : PState<"SSBS", 0b11001>; // v8.5a Memory Tagging Extension let Requires = [{ {AArch64::FeatureMTE} }] in @@ -1444,7 +1444,7 @@ def : RWSysReg<"ZCR_EL12", 0b11, 0b101, 0b0001, 0b0010, 0b000>; // V8.5a Spectre mitigation SSBS register // Op0 Op1 CRn CRm Op2 -let Requires = [{ {AArch64::FeatureSpecRestrict} }] in +let Requires = [{ {AArch64::FeatureSSBS} }] in def : RWSysReg<"SSBS", 0b11, 0b011, 0b0100, 0b0010, 0b110>; // v8.5a Memory Tagging Extension |

