: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))
:foreign)))))))))
(values))
-(defmacro with-fixed-allocation ((result-tn type-code size &optional inline)
+;;; Allocate an other-pointer object of fixed SIZE with a single word
+;;; header having the specified WIDETAG value. The result is placed in
+;;; RESULT-TN.
+(defmacro with-fixed-allocation ((result-tn widetag size &optional inline)
&rest forms)
- #!+sb-doc
- "Allocate an other-pointer object of fixed Size with a single
- word header having the specified Type-Code. The result is placed in
- Result-TN."
`(pseudo-atomic
(allocation ,result-tn (pad-data-block ,size) ,inline)
- (storew (logior (ash (1- ,size) sb!vm:type-bits) ,type-code) ,result-tn)
+ (storew (logior (ash (1- ,size) sb!vm:n-widetag-bits) ,widetag)
+ ,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
(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
'*pseudo-atomic-atomic*)
(ash symbol-value-slot word-shift)
- (- other-pointer-type)))
+ (- other-pointer-lowtag)))
(fixnumize 1)))
,@forms
(when *enable-pseudo-atomic*
(static-symbol-offset
'*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
(static-symbol-offset
'*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)