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)
|