X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fx86%2Farith.lisp;h=92c270a0ea01dfcf0b200c325e35fd3a39b60259;hb=986ce2596822cc0871b609346aaf592348aca596;hp=59d1edfd707deedaf2e1c961ae23b3f6c9ead331;hpb=adf0d51d2bde8b723276bacf94641df9aa5ae561;p=sbcl.git diff --git a/src/assembly/x86/arith.lisp b/src/assembly/x86/arith.lisp index 59d1edf..92c270a 100644 --- a/src/assembly/x86/arith.lisp +++ b/src/assembly/x86/arith.lisp @@ -10,9 +10,6 @@ ;;;; files for more information. (in-package "SB!VM") - -(file-comment - "$Header$") ;;;; addition, subtraction, and multiplication @@ -46,7 +43,7 @@ (inst push ebp-tn) (inst lea ebp-tn - (make-ea :dword :base esp-tn :disp word-bytes)) + (make-ea :dword :base esp-tn :disp n-word-bytes)) (inst sub esp-tn (fixnumize 2)) (inst push eax) ; callers return addr (inst mov ecx (fixnumize 2)) ; arg count @@ -68,8 +65,8 @@ (move ecx res) - (with-fixed-allocation (res bignum-type (1+ bignum-digits-offset)) - (storew ecx res bignum-digits-offset other-pointer-type)) + (with-fixed-allocation (res bignum-widetag (1+ bignum-digits-offset)) + (storew ecx res bignum-digits-offset other-pointer-lowtag)) OKAY) @@ -88,8 +85,8 @@ (move ecx res) - (with-fixed-allocation (res bignum-type (1+ bignum-digits-offset)) - (storew ecx res bignum-digits-offset other-pointer-type)) + (with-fixed-allocation (res bignum-widetag (1+ bignum-digits-offset)) + (storew ecx res bignum-digits-offset other-pointer-lowtag)) OKAY) (define-generic-arith-routine (* 30) @@ -109,15 +106,15 @@ (inst cmp x ecx) (inst jmp :e SINGLE-WORD-BIGNUM) - (with-fixed-allocation (res bignum-type (+ bignum-digits-offset 2)) - (storew eax res bignum-digits-offset other-pointer-type) - (storew ecx res (1+ bignum-digits-offset) other-pointer-type)) + (with-fixed-allocation (res bignum-widetag (+ bignum-digits-offset 2)) + (storew eax res bignum-digits-offset other-pointer-lowtag) + (storew ecx res (1+ bignum-digits-offset) other-pointer-lowtag)) (inst jmp DONE) SINGLE-WORD-BIGNUM - (with-fixed-allocation (res bignum-type (1+ bignum-digits-offset)) - (storew eax res bignum-digits-offset other-pointer-type)) + (with-fixed-allocation (res bignum-widetag (1+ bignum-digits-offset)) + (storew eax res bignum-digits-offset other-pointer-lowtag)) (inst jmp DONE) OKAY @@ -142,7 +139,7 @@ (inst pop eax) (inst push ebp-tn) - (inst lea ebp-tn (make-ea :dword :base esp-tn :disp word-bytes)) + (inst lea ebp-tn (make-ea :dword :base esp-tn :disp n-word-bytes)) (inst sub esp-tn (fixnumize 2)) (inst push eax) (inst mov ecx (fixnumize 1)) ; arg count @@ -156,8 +153,8 @@ (inst shr res 2) ; sign bit is data - remove type bits (move ecx res) - (with-fixed-allocation (res bignum-type (1+ bignum-digits-offset)) - (storew ecx res bignum-digits-offset other-pointer-type)) + (with-fixed-allocation (res bignum-widetag (1+ bignum-digits-offset)) + (storew ecx res bignum-digits-offset other-pointer-lowtag)) OKAY) @@ -190,7 +187,9 @@ TAIL-CALL-TO-STATIC-FN (inst pop eax) (inst push ebp-tn) - (inst lea ebp-tn (make-ea :dword :base esp-tn :disp word-bytes)) + (inst lea ebp-tn (make-ea :dword + :base esp-tn + :disp n-word-bytes)) (inst sub esp-tn (fixnumize 2)) ; FIXME: Push 2 words on stack, ; weirdly? (inst push eax) @@ -251,7 +250,7 @@ DO-STATIC-FN (inst pop eax) (inst push ebp-tn) - (inst lea ebp-tn (make-ea :dword :base esp-tn :disp word-bytes)) + (inst lea ebp-tn (make-ea :dword :base esp-tn :disp n-word-bytes)) (inst sub esp-tn (fixnumize 2)) (inst push eax) (inst mov ecx (fixnumize 2)) @@ -292,7 +291,7 @@ DO-STATIC-FN (inst pop eax) (inst push ebp-tn) - (inst lea ebp-tn (make-ea :dword :base esp-tn :disp word-bytes)) + (inst lea ebp-tn (make-ea :dword :base esp-tn :disp n-word-bytes)) (inst sub esp-tn (fixnumize 2)) (inst push eax) (inst mov ecx (fixnumize 2)) @@ -336,13 +335,13 @@ (inst xor k k) LOOP1 (inst mov y (make-ea :dword :base state :index k :scale 4 - :disp (- (* (+ 3 sb!vm:vector-data-offset) - sb!vm:word-bytes) - sb!vm:other-pointer-type))) + :disp (- (* (+ 3 vector-data-offset) + n-word-bytes) + other-pointer-lowtag))) (inst mov tmp (make-ea :dword :base state :index k :scale 4 - :disp (- (* (+ 1 3 sb!vm:vector-data-offset) - sb!vm:word-bytes) - sb!vm:other-pointer-type))) + :disp (- (* (+ 1 3 vector-data-offset) + n-word-bytes) + other-pointer-lowtag))) (inst and y #x80000000) (inst and tmp #x7fffffff) (inst or y tmp) @@ -351,26 +350,26 @@ (inst xor y #x9908b0df) SKIP1 (inst xor y (make-ea :dword :base state :index k :scale 4 - :disp (- (* (+ 397 3 sb!vm:vector-data-offset) - sb!vm:word-bytes) - sb!vm:other-pointer-type))) + :disp (- (* (+ 397 3 vector-data-offset) + n-word-bytes) + other-pointer-lowtag))) (inst mov (make-ea :dword :base state :index k :scale 4 - :disp (- (* (+ 3 sb!vm:vector-data-offset) - sb!vm:word-bytes) - sb!vm:other-pointer-type)) + :disp (- (* (+ 3 vector-data-offset) + n-word-bytes) + other-pointer-lowtag)) y) (inst inc k) (inst cmp k (- 624 397)) (inst jmp :b loop1) LOOP2 (inst mov y (make-ea :dword :base state :index k :scale 4 - :disp (- (* (+ 3 sb!vm:vector-data-offset) - sb!vm:word-bytes) - sb!vm:other-pointer-type))) + :disp (- (* (+ 3 vector-data-offset) + n-word-bytes) + other-pointer-lowtag))) (inst mov tmp (make-ea :dword :base state :index k :scale 4 - :disp (- (* (+ 1 3 sb!vm:vector-data-offset) - sb!vm:word-bytes) - sb!vm:other-pointer-type))) + :disp (- (* (+ 1 3 vector-data-offset) + n-word-bytes) + other-pointer-lowtag))) (inst and y #x80000000) (inst and tmp #x7fffffff) (inst or y tmp) @@ -379,26 +378,26 @@ (inst xor y #x9908b0df) SKIP2 (inst xor y (make-ea :dword :base state :index k :scale 4 - :disp (- (* (+ (- 397 624) 3 sb!vm:vector-data-offset) - sb!vm:word-bytes) - sb!vm:other-pointer-type))) + :disp (- (* (+ (- 397 624) 3 vector-data-offset) + n-word-bytes) + other-pointer-lowtag))) (inst mov (make-ea :dword :base state :index k :scale 4 - :disp (- (* (+ 3 sb!vm:vector-data-offset) - sb!vm:word-bytes) - sb!vm:other-pointer-type)) + :disp (- (* (+ 3 vector-data-offset) + n-word-bytes) + other-pointer-lowtag)) y) (inst inc k) (inst cmp k (- 624 1)) (inst jmp :b loop2) (inst mov y (make-ea :dword :base state - :disp (- (* (+ (- 624 1) 3 sb!vm:vector-data-offset) - sb!vm:word-bytes) - sb!vm:other-pointer-type))) + :disp (- (* (+ (- 624 1) 3 vector-data-offset) + n-word-bytes) + other-pointer-lowtag))) (inst mov tmp (make-ea :dword :base state - :disp (- (* (+ 0 3 sb!vm:vector-data-offset) - sb!vm:word-bytes) - sb!vm:other-pointer-type))) + :disp (- (* (+ 0 3 vector-data-offset) + n-word-bytes) + other-pointer-lowtag))) (inst and y #x80000000) (inst and tmp #x7fffffff) (inst or y tmp) @@ -407,13 +406,13 @@ (inst xor y #x9908b0df) SKIP3 (inst xor y (make-ea :dword :base state - :disp (- (* (+ (- 397 1) 3 sb!vm:vector-data-offset) - sb!vm:word-bytes) - sb!vm:other-pointer-type))) + :disp (- (* (+ (- 397 1) 3 vector-data-offset) + n-word-bytes) + other-pointer-lowtag))) (inst mov (make-ea :dword :base state - :disp (- (* (+ (- 624 1) 3 sb!vm:vector-data-offset) - sb!vm:word-bytes) - sb!vm:other-pointer-type)) + :disp (- (* (+ (- 624 1) 3 vector-data-offset) + n-word-bytes) + other-pointer-lowtag)) y) ;; Restore the temporary registers and return.