(inst jmp :ne done)
;; Pick off fixnums.
- (inst and al-tn 3)
+ (inst and al-tn fixnum-tag-mask)
(inst jmp :e done)
;; must be an other immediate
(:results (res :scs (any-reg descriptor-reg) :from (:argument 0)))
(:generator 2
(move res val)
- (inst shl res (- n-widetag-bits 2))
+ (inst shl res (- n-widetag-bits n-fixnum-tag-bits))
(inst or res (sc-case type
(unsigned-reg type)
(immediate (tn-value type))))))
(:info index)
(:generator 0
(inst inc (make-ea-for-vector-data count-vector :offset index))))
+\f
+;;;; 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))
+
+#!+memory-barrier-vops
+(define-vop (%write-barrier)
+ (:policy :fast-safe)
+ (:translate %write-barrier)
+ (:generator 3))
+
+#!+memory-barrier-vops
+(define-vop (%data-dependency-barrier)
+ (:policy :fast-safe)
+ (:translate %data-dependency-barrier)
+ (:generator 3))
+
+(define-vop (pause)
+ (:translate spin-loop-hint)
+ (:policy :fast-safe)
+ (:generator 0
+ (inst pause)))