This is the mail archive of the mailing list for the GCC project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH 10/11] 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

	* config/i386/ (unspecv): Add UNSPECV_SPECULATION_BARRIER.
	(speculation_barrier): New insn.
 gcc/config/i386/ | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/gcc/config/i386/ b/gcc/config/i386/
index 559ad93..73948c1 100644
--- a/gcc/config/i386/
+++ b/gcc/config/i386/
@@ -301,6 +301,9 @@ (define_c_enum "unspecv" [
   ;; For CLDEMOTE support
+  ;; For Speculation Barrier support
 ;; Constants to represent rounding modes in the ROUND instruction
@@ -20979,6 +20982,13 @@ (define_insn "cldemote"
   [(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 "")
 (include "")
 (include "")

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]