1.0.33.20: MORE CONSTANTIFICATION
[sbcl.git] / src / compiler / mips / alloc.lisp
index 9d1461b..88d5d74 100644 (file)
              (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)