X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fppc%2Farith.lisp;h=5f99d5ab708ffbe4933d3f6486ef54039ea939ef;hb=95591ed483dbb8c0846c129953acac1554f28809;hp=ea9fc110e877b08a20c505b0fdbf645b594f1a55;hpb=b6094d5640a59f36d2f727df08b271c422aa9e1c;p=sbcl.git diff --git a/src/assembly/ppc/arith.lisp b/src/assembly/ppc/arith.lisp index ea9fc11..5f99d5a 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) @@ -220,7 +217,7 @@ (:res quo any-reg nl2-offset) (:res rem any-reg nl0-offset)) (aver (location= rem dividend)) - (let ((error (generate-error-code nil division-by-zero-error + (let ((error (generate-error-code nil 'division-by-zero-error dividend divisor))) (inst cmpwi divisor 0) (inst beq error)) @@ -245,7 +242,7 @@ (:res rem any-reg nl0-offset)) (aver (location= rem dividend)) - (let ((error (generate-error-code nil division-by-zero-error + (let ((error (generate-error-code nil 'division-by-zero-error dividend divisor))) (inst cmpwi divisor 0) (inst beq error)) @@ -270,7 +267,7 @@ (:res quo signed-reg nl2-offset) (:res rem signed-reg nl0-offset)) - (let ((error (generate-error-code nil division-by-zero-error + (let ((error (generate-error-code nil 'division-by-zero-error dividend divisor))) (inst cmpwi divisor 0) (inst beq error))