projects
/
sbcl.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
1.0.31.23: OAOOize external-format support
[sbcl.git]
/
src
/
assembly
/
ppc
/
arith.lisp
diff --git
a/src/assembly/ppc/arith.lisp
b/src/assembly/ppc/arith.lisp
index
0abf902
..
5f99d5a
100644
(file)
--- a/
src/assembly/ppc/arith.lisp
+++ b/
src/assembly/ppc/arith.lisp
@@
-153,17
+153,14
@@
CONS-BIGNUM
;; Allocate a BIGNUM for the result.
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)))
(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)
;; 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)
(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)
@@
-199,7
+196,7
@@
`((inst srawi x x 2)))
(inst mullw res x y))))
(frob unsigned-* "unsigned *" 40 unsigned-num unsigned-reg)
`((inst srawi x x 2)))
(inst mullw res x y))))
(frob unsigned-* "unsigned *" 40 unsigned-num unsigned-reg)
- (frob signed-* "unsigned *" 41 signed-num signed-reg)
+ (frob signed-* "signed *" 41 signed-num signed-reg)
(frob fixnum-* "fixnum *" 30 tagged-num any-reg))
(frob fixnum-* "fixnum *" 30 tagged-num any-reg))
@@
-220,7
+217,7
@@
(:res quo any-reg nl2-offset)
(:res rem any-reg nl0-offset))
(aver (location= rem dividend))
(: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))
dividend divisor)))
(inst cmpwi divisor 0)
(inst beq error))
@@
-245,7
+242,7
@@
(:res rem any-reg nl0-offset))
(aver (location= rem dividend))
(: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))
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))
(: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))
dividend divisor)))
(inst cmpwi divisor 0)
(inst beq error))