:disp (+ nil-value
(static-symbol-offset ',symbol)
(ash symbol-value-slot word-shift)
- (- other-pointer-type)))))
+ (- other-pointer-lowtag)))))
(defmacro store-symbol-value (reg symbol)
`(inst mov
:disp (+ nil-value
(static-symbol-offset ',symbol)
(ash symbol-value-slot word-shift)
- (- other-pointer-type)))
+ (- other-pointer-lowtag)))
,reg))
(allocation ,result-tn (pad-data-block ,size) ,inline)
(storew (logior (ash (1- ,size) sb!vm:type-bits) ,type-code) ,result-tn)
(inst lea ,result-tn
- (make-ea :byte :base ,result-tn :disp other-pointer-type))
+ (make-ea :byte :base ,result-tn :disp other-pointer-lowtag))
,@forms))
\f
;;;; error code
;;; something to compile with :SB-NO-PSEUDO-ATOMIC.
(defvar *enable-pseudo-atomic* t)
-;;; FIXME: *PSEUDO-ATOMIC-ATOMIC* and *PSEUDO-ATOMIC-INTERRUPTED*
-;;; should be in package SB!VM or SB!KERNEL, not SB!IMPL.
-
;;; FIXME: *PSEUDO-ATOMIC-FOO* could be made into *PSEUDO-ATOMIC-BITS*,
;;; set with a single operation and cleared with SHR *PSEUDO-ATOMIC-BITS*,-2;
;;; the ATOMIC bit is bit 0, the INTERRUPTED bit is bit 1, and you check
;; something. (perhaps SVLB, for static variable low byte)
(inst mov (make-ea :byte :disp (+ nil-value
(static-symbol-offset
- 'sb!impl::*pseudo-atomic-interrupted*)
+ '*pseudo-atomic-interrupted*)
(ash symbol-value-slot word-shift)
;; FIXME: Use mask, not minus, to
;; take out type bits.
- (- other-pointer-type)))
+ (- other-pointer-lowtag)))
0)
(inst mov (make-ea :byte :disp (+ nil-value
(static-symbol-offset
- 'sb!impl::*pseudo-atomic-atomic*)
+ '*pseudo-atomic-atomic*)
(ash symbol-value-slot word-shift)
- (- other-pointer-type)))
+ (- other-pointer-lowtag)))
(fixnumize 1)))
,@forms
(when *enable-pseudo-atomic*
(inst mov (make-ea :byte :disp (+ nil-value
(static-symbol-offset
- 'sb!impl::*pseudo-atomic-atomic*)
+ '*pseudo-atomic-atomic*)
(ash symbol-value-slot word-shift)
- (- other-pointer-type)))
+ (- other-pointer-lowtag)))
0)
;; KLUDGE: Is there any requirement for interrupts to be
;; handled in order? It seems as though an interrupt coming
(inst cmp (make-ea :byte
:disp (+ nil-value
(static-symbol-offset
- 'sb!impl::*pseudo-atomic-interrupted*)
+ '*pseudo-atomic-interrupted*)
(ash symbol-value-slot word-shift)
- (- other-pointer-type)))
+ (- other-pointer-lowtag)))
0)
(inst jmp :eq ,label)
(inst break pending-interrupt-trap)