From: Nathan F. <nf...@us...> - 2004-12-08 16:31:55
|
Update of /cvsroot/sbcl/sbcl/src/code In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20188/src/code Modified Files: numbers.lisp Log Message: 0.8.17.24: Reinstate fixnum arithmetic when possible by defining modular arithmetic mechanisms for (UNSIGNED-BYTE 29) ... this feels like a big, ugly hack, since the compiler is (presumably) smart enough to do this when modular arithmetic was not present; ... move some EVAL-WHEN macros into a MACROLET while we're at it; ... builds and passes tests on x86/Linux; will probably build properly on other platforms, but will fail tests in (at least) tests/arith.pure. These test failures seem harmless enough and will be fixed in another revision or two. Index: numbers.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/numbers.lisp,v retrieving revision 1.37 retrieving revision 1.38 diff -u -d -r1.37 -r1.38 --- numbers.lisp 26 Oct 2004 17:51:14 -0000 1.37 +++ numbers.lisp 8 Dec 2004 16:31:42 -0000 1.38 @@ -1420,11 +1420,17 @@ ;;; shifts. See also the comment in (LOGAND OPTIMIZER) for more ;;; discussion of this hack. -- CSR, 2003-10-09 #!-alpha +(progn (defun sb!vm::ash-left-mod32 (integer amount) (etypecase integer ((unsigned-byte 32) (ldb (byte 32 0) (ash integer amount))) (fixnum (ldb (byte 32 0) (ash (logand integer #xffffffff) amount))) (bignum (ldb (byte 32 0) (ash (logand integer #xffffffff) amount))))) +(defun sb!vm::ash-left-mod29 (integer amount) + (etypecase integer + (fixnum (ldb (byte 29 0) (ash (logand integer #x1fffffff) amount))) + (bignum (ldb (byte 29 0) (ash (logand integer #x1fffffff) amount))))) +) ; PROGN #!+alpha (defun sb!vm::ash-left-mod64 (integer amount) (etypecase integer |