X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fsparc%2Farith.lisp;fp=src%2Fassembly%2Fsparc%2Farith.lisp;h=d3b52d24a99ca38acce43ea753c46212af806548;hb=1d06300e09f767a38bbe6d5b38232ca334ab1913;hp=18a8659724a1fdfb443f917d21f500cedb91953f;hpb=3e77276ea06f6b0f46f7def5e018b66369e52107;p=sbcl.git diff --git a/src/assembly/sparc/arith.lisp b/src/assembly/sparc/arith.lisp index 18a8659..d3b52d2 100644 --- a/src/assembly/sparc/arith.lisp +++ b/src/assembly/sparc/arith.lisp @@ -171,31 +171,12 @@ (inst srl lo n-fixnum-tag-bits) (inst or lo temp) (inst sra hi n-fixnum-tag-bits) - ;; Allocate a BIGNUM for the result. - #+nil - (pseudo-atomic (:extra (pad-data-block (1+ bignum-digits-offset))) - (let ((one-word (gen-label))) - (inst or res alloc-tn other-pointer-lowtag) - ;; We start out assuming that we need one word. Is that correct? - (inst sra temp lo 31) - (inst xorcc temp hi) - (inst b :eq one-word) - (inst li temp (logior (ash 1 n-widetag-bits) bignum-widetag)) - ;; Nope, we need two, so allocate the addition space. - (inst add 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) - (storew temp res 0 other-pointer-lowtag) - (storew lo res bignum-digits-offset other-pointer-lowtag))) ;; Always allocate 2 words for the bignum result, even if we only ;; need one. The copying GC will take care of the extra word if it ;; isn't needed. (with-fixed-allocation (res temp bignum-widetag (+ 2 bignum-digits-offset)) (let ((one-word (gen-label))) - (inst or res alloc-tn other-pointer-lowtag) ;; We start out assuming that we need one word. Is that correct? (inst sra temp lo 31) (inst xorcc temp hi)