From d4d54599b5acc39f97ff880507388687b684d36a Mon Sep 17 00:00:00 2001 From: Alastair Bridgewater Date: Wed, 4 Aug 2010 18:02:45 +0000 Subject: [PATCH] 1.0.41.5: x86: Implement memory-barrier-vops. * Add the VOPs for the various memory-barriers. * Add the memory-barrier-vops feature to local-target-features on x86 in make-config.sh. --- make-config.sh | 1 + src/compiler/x86/system.lisp | 35 +++++++++++++++++++++++++++++++++++ version.lisp-expr | 2 +- 3 files changed, 37 insertions(+), 1 deletion(-) diff --git a/make-config.sh b/make-config.sh index 0db1ead..4506091 100644 --- a/make-config.sh +++ b/make-config.sh @@ -300,6 +300,7 @@ if [ "$sbcl_arch" = "x86" ]; then printf ' :stack-allocatable-closures :stack-allocatable-vectors' >> $ltf printf ' :stack-allocatable-lists :stack-allocatable-fixed-objects' >> $ltf printf ' :alien-callbacks :cycle-counter :inline-constants ' >> $ltf + printf ' :memory-barrier-vops' >> $ltf case "$sbcl_os" in linux | freebsd | netbsd | openbsd | sunos | darwin | win32) printf ' :linkage-table' >> $ltf diff --git a/src/compiler/x86/system.lisp b/src/compiler/x86/system.lisp index 9b66ca0..77981e8 100644 --- a/src/compiler/x86/system.lisp +++ b/src/compiler/x86/system.lisp @@ -352,3 +352,38 @@ number of CPU cycles elapsed as secondary value. EXPERIMENTAL." (:info index) (:generator 0 (inst inc (make-ea-for-vector-data count-vector :offset index)))) + +;;;; Memory barrier support + +#!+memory-barrier-vops +(define-vop (%compiler-barrier) + (:policy :fast-safe) + (:translate %compiler-barrier) + (:generator 3)) + +#!+memory-barrier-vops +(define-vop (%memory-barrier) + (:policy :fast-safe) + (:translate %memory-barrier) + (:generator 3 + (inst add (make-ea :dword :base esp-tn) 0 :lock))) + +#!+memory-barrier-vops +(define-vop (%read-barrier) + (:policy :fast-safe) + (:translate %read-barrier) + (:generator 3 + (inst add (make-ea :dword :base esp-tn) 0 :lock))) + +#!+memory-barrier-vops +(define-vop (%write-barrier) + (:policy :fast-safe) + (:translate %write-barrier) + (:generator 3 + (inst add (make-ea :dword :base esp-tn) 0 :lock))) + +#!+memory-barrier-vops +(define-vop (%data-dependency-barrier) + (:policy :fast-safe) + (:translate %data-dependency-barrier) + (:generator 3)) diff --git a/version.lisp-expr b/version.lisp-expr index 8dab7a7..852a041 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"1.0.41.4" +"1.0.41.5" -- 1.7.10.4