X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fassembly%2Fx86%2Farith.lisp;h=53ba95e73c691ec7044193e0ebd2401bd07f585a;hb=f84d62fd74450b5f8230f1d01addd34e1c72af98;hp=28d510fe0d3598fbcff5d52718f1618a300edd21;hpb=2973941cf214a5ea274cd0381a651ce0e1a7fab2;p=sbcl.git diff --git a/src/assembly/x86/arith.lisp b/src/assembly/x86/arith.lisp index 28d510f..53ba95e 100644 --- a/src/assembly/x86/arith.lisp +++ b/src/assembly/x86/arith.lisp @@ -40,12 +40,12 @@ (inst ret) DO-STATIC-FUN + ;; Same as: (inst enter (fixnumize 1)) (inst push ebp-tn) - (inst lea ebp-tn (make-ea :dword - :base esp-tn - :disp (* 2 n-word-bytes))) + (inst mov ebp-tn esp-tn) (inst sub esp-tn (fixnumize 1)) - (inst push (make-ea :dword :base ebp-tn :disp (- n-word-bytes))) + (inst push (make-ea :dword :base ebp-tn + :disp (frame-byte-offset return-pc-save-offset))) (inst mov ecx (fixnumize 2)) ; arg count (inst jmp (make-ea :dword @@ -130,9 +130,10 @@ (inst jmp :z FIXNUM) (inst push ebp-tn) - (inst lea ebp-tn (make-ea :dword :base esp-tn :disp (* 2 n-word-bytes))) + (inst mov ebp-tn esp-tn) (inst sub esp-tn (fixnumize 1)) - (inst push (make-ea :dword :base ebp-tn :disp (- n-word-bytes))) + (inst push (make-ea :dword :base ebp-tn + :disp (frame-byte-offset return-pc-save-offset))) (inst mov ecx (fixnumize 1)) ; arg count (inst jmp (make-ea :dword :disp (+ nil-value (static-fun-offset '%negate)))) @@ -169,13 +170,18 @@ (inst ret) DO-STATIC-FUN - (move ecx esp-tn) (inst sub esp-tn (fixnumize 3)) - (inst mov (make-ea :dword - :base ecx - :disp (frame-byte-offset ocfp-save-offset)) + (inst mov (make-ea :dword :base esp-tn + :disp (frame-byte-offset + (+ sp->fp-offset + -3 + ocfp-save-offset))) ebp-tn) - (move ebp-tn ecx) + (inst lea ebp-tn (make-ea :dword :base esp-tn + :disp (frame-byte-offset + (+ sp->fp-offset + -3 + ocfp-save-offset)))) (inst mov ecx (fixnumize 2)) (inst call (make-ea :dword :disp (+ nil-value @@ -201,17 +207,11 @@ (:temporary (:sc unsigned-reg :offset edi-offset :from (:argument 1)) edi) - - (:temporary (:sc unsigned-reg :offset ecx-offset - :from :eval) - ecx) (:conditional ,test) (:generator 10 (move edx x) (move edi y) - (inst lea ecx (make-ea :dword - :disp (make-fixup ',name :assembly-routine))) - (inst call ecx))))) + (inst call (make-fixup ',name :assembly-routine)))))) (define-cond-assem-rtn generic-< < two-arg-< :l) (define-cond-assem-rtn generic-> > two-arg-> :g)) @@ -229,7 +229,7 @@ (inst cmp ecx other-pointer-lowtag) (inst jmp :e DO-STATIC-FUN) - ;; Not both other pointers + ;; At least one fixnum (inst cmp x y) RET (inst ret) @@ -239,13 +239,18 @@ (inst cmp x y) (inst jmp :e RET) - (move ecx esp-tn) (inst sub esp-tn (fixnumize 3)) - (inst mov (make-ea :dword - :base ecx - :disp (frame-byte-offset ocfp-save-offset)) + (inst mov (make-ea :dword :base esp-tn + :disp (frame-byte-offset + (+ sp->fp-offset + -3 + ocfp-save-offset))) ebp-tn) - (move ebp-tn ecx) + (inst lea ebp-tn (make-ea :dword :base esp-tn + :disp (frame-byte-offset + (+ sp->fp-offset + -3 + ocfp-save-offset)))) (inst mov ecx (fixnumize 2)) (inst call (make-ea :dword :disp (+ nil-value (static-fun-offset 'eql)))) @@ -268,16 +273,11 @@ :from (:argument 1)) edi) - (:temporary (:sc unsigned-reg :offset ecx-offset - :from :eval) - ecx) (:conditional :e) (:generator 10 (move edx x) (move edi y) - (inst lea ecx (make-ea :dword - :disp (make-fixup 'generic-eql :assembly-routine))) - (inst call ecx))) + (inst call (make-fixup 'generic-eql :assembly-routine)))) #+sb-assembling (define-assembly-routine (generic-= @@ -296,13 +296,18 @@ (inst ret) DO-STATIC-FUN - (move ecx esp-tn) (inst sub esp-tn (fixnumize 3)) - (inst mov (make-ea :dword - :base ecx - :disp (frame-byte-offset ocfp-save-offset)) + (inst mov (make-ea :dword :base esp-tn + :disp (frame-byte-offset + (+ sp->fp-offset + -3 + ocfp-save-offset))) ebp-tn) - (move ebp-tn ecx) + (inst lea ebp-tn (make-ea :dword :base esp-tn + :disp (frame-byte-offset + (+ sp->fp-offset + -3 + ocfp-save-offset)))) (inst mov ecx (fixnumize 2)) (inst call (make-ea :dword :disp (+ nil-value (static-fun-offset 'two-arg-=)))) @@ -325,16 +330,11 @@ :from (:argument 1)) edi) - (:temporary (:sc unsigned-reg :offset ecx-offset - :from :eval) - ecx) (:conditional :e) (:generator 10 (move edx x) (move edi y) - (inst lea ecx (make-ea :dword - :disp (make-fixup 'generic-= :assembly-routine))) - (inst call ecx))) + (inst call (make-fixup 'generic-= :assembly-routine)))) ;;; Support for the Mersenne Twister, MT19937, random number generator