From: Alexey D. <ade...@us...> - 2003-08-16 06:54:37
|
Update of /cvsroot/sbcl/sbcl/src/compiler In directory sc8-pr-cvs1:/tmp/cvs-serv15452/src/compiler Modified Files: ir1opt.lisp srctran.lisp Log Message: 0.8.2.32: * Provide cross-compiler versions of several internal functions; * BIGNUM-LOGNOT VOP is the same as LOGNOT-MOD32. Index: ir1opt.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/ir1opt.lisp,v retrieving revision 1.70 retrieving revision 1.71 diff -u -d -r1.70 -r1.71 --- ir1opt.lisp 18 Jul 2003 05:47:23 -0000 1.70 +++ ir1opt.lisp 16 Aug 2003 06:48:39 -0000 1.71 @@ -753,7 +753,11 @@ ;; cross-compiler can't fold it because the ;; cross-compiler doesn't know how to evaluate it. #+sb-xc-host - (fboundp (combination-fun-source-name node))) + (or (fboundp (combination-fun-source-name node)) + (progn (format t ";;; !!! Unbound fun: (~S~{ ~S~})~%" + (combination-fun-source-name node) + (mapcar #'continuation-value args)) + nil))) (constant-fold-call node) (return-from ir1-optimize-combination))) Index: srctran.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/srctran.lisp,v retrieving revision 1.74 retrieving revision 1.75 diff -u -d -r1.74 -r1.75 --- srctran.lisp 15 Aug 2003 18:07:07 -0000 1.74 +++ srctran.lisp 16 Aug 2003 06:48:39 -0000 1.75 @@ -2442,18 +2442,20 @@ ;;; Modular functions -;;; (ldb (byte s 0) (foo x y ...)) = +;;; (ldb (byte s 0) (foo x y ...)) = ;;; (ldb (byte s 0) (foo (ldb (byte s 0) x) y ...)) ;;; -;;; and similar for other arguments. If -;;; -;;; (ldb (byte s 0) (foo x y ...)) = -;;; (foo (ldb (byte s 0) x) (ldb (byte s 0) y) ...) -;;; -;;; the function FOO is :GOOD. +;;; and similar for other arguments. ;;; Try to recursively cut all uses of the continuation CONT to WIDTH ;;; bits. +;;; +;;; For good functions, we just recursively cut arguments; their +;;; "goodness" means that the result will not increase (in the +;;; (unsigned-byte +infinity) sense). An ordinary modular function is +;;; replaced with the version, cutting its result to WIDTH or more +;;; bits. If we have changed anything, we need to flush old derived +;;; types, because they have nothing in common with the new code. (defun cut-to-width (cont width) (declare (type continuation cont) (type (integer 0) width)) (labels ((reoptimize-node (node name) |