X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fmips%2Falloc.lisp;h=4c37b2cce358809fd37e2e307b0548a0277eda17;hb=6dc30bee17d029acf6bb6da730f03e63b2a01948;hp=9d1461bc327613805e214f50ebf9ab1aed97d409;hpb=c8123594e0119507f2ba57fdf88561e1476c8deb;p=sbcl.git diff --git a/src/compiler/mips/alloc.lisp b/src/compiler/mips/alloc.lisp index 9d1461b..4c37b2c 100644 --- a/src/compiler/mips/alloc.lisp +++ b/src/compiler/mips/alloc.lisp @@ -239,7 +239,12 @@ (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)))))