aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Earnshaw <rearnsha@arm.com>2018-08-01 08:16:38 +0000
committerRichard Earnshaw <rearnsha@gcc.gnu.org>2018-08-01 08:16:38 +0000
commit31e962f2dd67eef0f148b60696df9d95cc1dd713 (patch)
treef062402e6442ac356e0f274656bcad1c4f5e332e
parent71f10c42d09badbc3a847bdc0755b6d320eb6bc2 (diff)
downloadgcc-31e962f2dd67eef0f148b60696df9d95cc1dd713.zip
gcc-31e962f2dd67eef0f148b60696df9d95cc1dd713.tar.gz
gcc-31e962f2dd67eef0f148b60696df9d95cc1dd713.tar.bz2
x86 - add speculation_barrier pattern
This patch adds a speculation barrier for x86, based on my understanding of the required mitigation for that CPU, which is to use an lfence instruction. This patch needs some review by an x86 expert and if adjustments are needed, I'd appreciate it if they could be picked up by the port maintainer. This is supposed to serve as an example of how to deploy the new __builtin_speculation_safe_value() intrinsic on this architecture. * config/i386/i386.md (unspecv): Add UNSPECV_SPECULATION_BARRIER. (speculation_barrier): New insn. From-SVN: r263196
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.md10
2 files changed, 15 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b934f43..6b2e93b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+2018-08-01 Richard Earnshaw <rearnsha@arm.com>
+
+ * config/i386/i386.md (unspecv): Add UNSPECV_SPECULATION_BARRIER.
+ (speculation_barrier): New insn.
+
2018-08-01 Richard Biener <rguenther@suse.de>
PR bootstrap/86724
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 559ad93..73948c1 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -301,6 +301,9 @@
;; For CLDEMOTE support
UNSPECV_CLDEMOTE
+
+ ;; For Speculation Barrier support
+ UNSPECV_SPECULATION_BARRIER
])
;; Constants to represent rounding modes in the ROUND instruction
@@ -20979,6 +20982,13 @@
[(set_attr "type" "other")
(set_attr "memory" "unknown")])
+(define_insn "speculation_barrier"
+ [(unspec_volatile [(const_int 0)] UNSPECV_SPECULATION_BARRIER)]
+ ""
+ "lfence"
+ [(set_attr "type" "other")
+ (set_attr "length" "3")])
+
(include "mmx.md")
(include "sse.md")
(include "sync.md")