X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fppc%2Farith.lisp;h=fd5fad9a338444e58d358ba02514ff127941788f;hb=3a0f3612dc2bbf3e4e8e7395bcbbf8cd1791b963;hp=ea9fc110e877b08a20c505b0fdbf645b594f1a55;hpb=b6094d5640a59f36d2f727df08b271c422aa9e1c;p=sbcl.git diff --git a/src/assembly/ppc/arith.lisp b/src/assembly/ppc/arith.lisp index ea9fc11..fd5fad9 100644 --- a/src/assembly/ppc/arith.lisp +++ b/src/assembly/ppc/arith.lisp @@ -153,17 +153,14 @@ CONS-BIGNUM ;; Allocate a BIGNUM for the result. - (pseudo-atomic (pa-flag :extra (pad-data-block (1+ bignum-digits-offset))) + (with-fixed-allocation (res pa-flag temp bignum-widetag + (+ bignum-digits-offset 2)) (let ((one-word (gen-label))) - (inst ori res alloc-tn other-pointer-lowtag) ;; We start out assuming that we need one word. Is that correct? (inst srawi temp lo 31) (inst xor. temp temp hi) (inst li temp (logior (ash 1 n-widetag-bits) bignum-widetag)) (inst beq one-word) - ;; Nope, we need two, so allocate the additional space. - (inst addi alloc-tn alloc-tn (- (pad-data-block (+ 2 bignum-digits-offset)) - (pad-data-block (1+ bignum-digits-offset)))) (inst li temp (logior (ash 2 n-widetag-bits) bignum-widetag)) (storew hi res (1+ bignum-digits-offset) other-pointer-lowtag) (emit-label one-word)