(define-vop (make-unbound-marker)
(:args)
- (:results (result :scs (any-reg)))
+ (:results (result :scs (descriptor-reg any-reg)))
(:generator 1
(inst li result unbound-marker-widetag)))
(inst or result csp-tn lowtag)
(inst addu csp-tn (pad-data-block words)))
(t
- (inst or result alloc-tn lowtag)))
+ ;; The pseudo-atomic bit in alloc-tn is set. If the
+ ;; lowtag also has a 1 bit in the same position, we're all
+ ;; set. Otherwise, we need to subtract the pseudo-atomic
+ ;; bit.
+ (inst or result alloc-tn (if (logbitp 0 lowtag) lowtag
+ (1- lowtag)))))
(when type
(inst li temp (logior (ash (1- words) n-widetag-bits) type))
(storew temp result 0 lowtag)))))
(:temporary (:sc non-descriptor-reg :offset nl4-offset) pa-flag)
(:generator 6
(inst addu bytes extra (* (1+ words) n-word-bytes))
- (inst sll header bytes (- n-widetag-bits 2))
+ (inst sll header bytes (- n-widetag-bits n-fixnum-tag-bits))
(inst addu header header (+ (ash -2 n-widetag-bits) type))
(inst srl bytes bytes n-lowtag-bits)
(inst sll bytes bytes n-lowtag-bits)