;; to ensure it'll work even if the GC moves ENTER-ALIEN-CALLBACK.
;; Skip any SB-THREAD TLS magic, since we don't expecte anyone
;; to rebind the variable. -- JES, 2006-01-01
- (inst mov eax (+ nil-value (static-symbol-offset
- 'sb!alien::*enter-alien-callback*)))
- (loadw eax eax symbol-value-slot other-pointer-lowtag)
+ (load-symbol-value eax sb!alien::*enter-alien-callback*)
(inst push eax) ; function
(inst mov eax (foreign-symbol-address "funcall3"))
(inst call eax)
(defmacro load-symbol (reg symbol)
`(inst mov ,reg (+ nil-value (static-symbol-offset ,symbol))))
-(defmacro make-ea-for-symbol-value (symbol)
+(defmacro make-ea-for-symbol-value (symbol &optional (width :dword))
(declare (type symbol symbol))
- `(make-ea :dword
+ `(make-ea ,width
:disp (+ nil-value
(static-symbol-offset ',symbol)
(ash symbol-value-slot word-shift)
(defmacro pseudo-atomic (&rest forms)
(with-unique-names (label)
`(let ((,label (gen-label)))
- ;; FIXME: The MAKE-EA noise should become a MACROLET macro
- ;; or something. (perhaps SVLB, for static variable low
- ;; byte)
- (inst or (make-ea :byte :disp (+ nil-value
- (static-symbol-offset
- '*pseudo-atomic-bits*)
- (ash symbol-value-slot word-shift)
- (- other-pointer-lowtag)))
+ (inst or (make-ea-for-symbol-value *pseudo-atomic-bits* :byte)
(fixnumize 1))
,@forms
- (inst xor (make-ea :byte :disp (+ nil-value
- (static-symbol-offset
- '*pseudo-atomic-bits*)
- (ash symbol-value-slot word-shift)
- (- other-pointer-lowtag)))
+ (inst xor (make-ea-for-symbol-value *pseudo-atomic-bits* :byte)
(fixnumize 1))
(inst jmp :z ,label)
;; if PAI was set, interrupts were disabled at the same
;;; 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.4.81"
+"1.0.4.82"