(inst cmoveq temp 1 temp2)
(inst not temp temp)
(inst cmoveq temp 1 temp2)
- (inst sll temp2 type-bits temp2)
- (inst bis temp2 bignum-type temp2)
+ (inst sll temp2 n-widetag-bits temp2)
+ (inst bis temp2 bignum-widetag temp2)
(pseudo-atomic (:extra (pad-data-block (+ bignum-digits-offset 3)))
- (inst bis alloc-tn other-pointer-type res)
- (storew temp2 res 0 other-pointer-type)
- (storew temp3 res bignum-digits-offset other-pointer-type)
+ (inst bis alloc-tn other-pointer-lowtag res)
+ (storew temp2 res 0 other-pointer-lowtag)
+ (storew temp3 res bignum-digits-offset other-pointer-lowtag)
(inst srl temp3 32 temp)
- (storew temp res (1+ bignum-digits-offset) other-pointer-type))
+ (storew temp res (1+ bignum-digits-offset) other-pointer-lowtag))
DONE
(lisp-return lra lip :offset 2)
DO-STATIC-FUN
- (inst ldl lip (static-function-offset 'two-arg-+) null-tn)
+ (inst ldl lip (static-fun-offset 'two-arg-+) null-tn)
(inst li (fixnumize 2) nargs)
(inst move cfp-tn ocfp)
(inst move csp-tn cfp-tn)
(inst cmoveq temp 1 temp2)
(inst not temp temp)
(inst cmoveq temp 1 temp2)
- (inst sll temp2 type-bits temp2)
- (inst bis temp2 bignum-type temp2)
+ (inst sll temp2 n-widetag-bits temp2)
+ (inst bis temp2 bignum-widetag temp2)
(pseudo-atomic (:extra (pad-data-block (+ bignum-digits-offset 3)))
- (inst bis alloc-tn other-pointer-type res)
- (storew temp2 res 0 other-pointer-type)
- (storew temp3 res bignum-digits-offset other-pointer-type)
+ (inst bis alloc-tn other-pointer-lowtag res)
+ (storew temp2 res 0 other-pointer-lowtag)
+ (storew temp3 res bignum-digits-offset other-pointer-lowtag)
(inst srl temp3 32 temp)
- (storew temp res (1+ bignum-digits-offset) other-pointer-type))
+ (storew temp res (1+ bignum-digits-offset) other-pointer-lowtag))
DONE
(lisp-return lra lip :offset 2)
DO-STATIC-FUN
- (inst ldl lip (static-function-offset 'two-arg--) null-tn)
+ (inst ldl lip (static-fun-offset 'two-arg--) null-tn)
(inst li (fixnumize 2) nargs)
(inst move cfp-tn ocfp)
(inst move csp-tn cfp-tn)
(inst sra lo 32 hi)
;; Do we need one word or two? Assume two.
- (inst li (logior (ash 2 type-bits) bignum-type) temp2)
+ (inst li (logior (ash 2 n-widetag-bits) bignum-widetag) temp2)
(inst sra lo 31 temp)
(inst xor temp hi temp)
(inst bne temp two-words)
;; Only need one word, fix the header.
- (inst li (logior (ash 1 type-bits) bignum-type) temp2)
+ (inst li (logior (ash 1 n-widetag-bits) bignum-widetag) temp2)
;; Allocate one word.
(pseudo-atomic (:extra (pad-data-block (1+ bignum-digits-offset)))
- (inst bis alloc-tn other-pointer-type res)
- (storew temp2 res 0 other-pointer-type))
+ (inst bis alloc-tn other-pointer-lowtag res)
+ (storew temp2 res 0 other-pointer-lowtag))
;; Store one word
- (storew lo res bignum-digits-offset other-pointer-type)
+ (storew lo res bignum-digits-offset other-pointer-lowtag)
;; Out of here
(lisp-return lra lip :offset 2)
TWO-WORDS
;; Allocate two words.
(pseudo-atomic (:extra (pad-data-block (+ 2 bignum-digits-offset)))
- (inst bis alloc-tn other-pointer-type res)
- (storew temp2 res 0 other-pointer-type))
+ (inst bis alloc-tn other-pointer-lowtag res)
+ (storew temp2 res 0 other-pointer-lowtag))
;; Store two words.
- (storew lo res bignum-digits-offset other-pointer-type)
- (storew hi res (1+ bignum-digits-offset) other-pointer-type)
+ (storew lo res bignum-digits-offset other-pointer-lowtag)
+ (storew hi res (1+ bignum-digits-offset) other-pointer-lowtag)
;; out of here
(lisp-return lra lip :offset 2)
DO-STATIC-FUN
- (inst ldl lip (static-function-offset 'two-arg-*) null-tn)
+ (inst ldl lip (static-fun-offset 'two-arg-*) null-tn)
(inst li (fixnumize 2) nargs)
(inst move cfp-tn ocfp)
(inst move csp-tn cfp-tn)
;;;; division
(define-assembly-routine (signed-truncate
- (:note "(signed-byte 32) truncate")
+ (:note "(signed-byte 64) truncate")
(:cost 60)
(:policy :fast-safe)
(:translate truncate)
(emit-label label))
(inst move zero-tn rem)
(inst move zero-tn quo)
- (inst sll dividend 32 dividend)
- (dotimes (i 32)
+ (dotimes (i 64)
(inst srl dividend 63 temp1)
(inst sll rem 1 rem)
(inst bis temp1 rem rem)
(inst beq temp DO-COMPARE)
DO-STATIC-FN
- (inst ldl lip (static-function-offset ',static-fn) null-tn)
+ (inst ldl lip (static-fun-offset ',static-fn) null-tn)
(inst li (fixnumize 2) nargs)
(inst move cfp-tn ocfp)
(inst move csp-tn cfp-tn)
(lisp-return lra lip :offset 2)
DO-STATIC-FN
- (inst ldl lip (static-function-offset 'eql) null-tn)
+ (inst ldl lip (static-fun-offset 'eql) null-tn)
(inst li (fixnumize 2) nargs)
(inst move cfp-tn ocfp)
(inst move csp-tn cfp-tn)
(lisp-return lra lip :offset 2)
DO-STATIC-FN
- (inst ldl lip (static-function-offset 'two-arg-=) null-tn)
+ (inst ldl lip (static-fun-offset 'two-arg-=) null-tn)
(inst li (fixnumize 2) nargs)
(inst move cfp-tn ocfp)
(inst move csp-tn cfp-tn)
(lisp-return lra lip :offset 2)
DO-STATIC-FN
- (inst ldl lip (static-function-offset 'two-arg-=) null-tn)
+ (inst ldl lip (static-fun-offset 'two-arg-/=) null-tn)
(inst li (fixnumize 2) nargs)
(inst move cfp-tn ocfp)
(inst move csp-tn cfp-tn)