From: Juho S. <js...@us...> - 2004-11-28 04:03:38
|
Update of /cvsroot/sbcl/sbcl/src/assembly/x86-64 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv30514/src/assembly/x86-64 Modified Files: Tag: x86-64-again-branch arith.lisp Log Message: 0.8.15.14.x86-64-again-branch.14: * Fix fixnum multiplication overflow. * Replace some #!+/-alpha with suitable SB-VM::N-FOO. * Fix + cleanup float %NEGATE / ABS. * Sign-extend the result of foo-float-bits (to for example get correct MINUSP results from them). * Add ANDPS SSE2 instruction. * Add missing simple-vector widetags to case-statements in maybe_adjust_large_object and possibly_valid_dynamic_space_pointer. Index: arith.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/assembly/x86-64/Attic/arith.lisp,v retrieving revision 1.1.4.2 retrieving revision 1.1.4.3 diff -u -d -r1.1.4.2 -r1.1.4.3 --- arith.lisp 18 Nov 2004 04:46:42 -0000 1.1.4.2 +++ arith.lisp 28 Nov 2004 02:26:26 -0000 1.1.4.3 @@ -90,19 +90,19 @@ OKAY) (define-generic-arith-routine (* 30) - (move rax x) ; must use eax for 64-bit result - (inst sar rax 3) ; remove *4 fixnum bias - (inst imul y) ; result in edx:eax + (move rax x) ; must use eax for 64-bit result + (inst sar rax 3) ; remove *4 fixnum bias + (inst imul y) ; result in edx:eax (inst jmp :no okay) ; still fixnum ;; zzz jrd changed edx to ebx in here, as edx isn't listed as a temp, above ;; pfw says that loses big -- edx is target for arg x and result res ;; note that 'edx' is not defined -- using x (inst shrd rax x 3) ; high bits from edx - (inst sar x 3) ; now shift edx too + (inst sar x 3) ; now shift edx too - (move rcx x) ; save high bits from cdq - (inst cdq) ; edx:eax <- sign-extend of eax + (move rcx x) ; save high bits from cqo + (inst cqo) ; edx:eax <- sign-extend of eax (inst cmp x rcx) (inst jmp :e SINGLE-WORD-BIGNUM) |