From: Christophe R. <cr...@us...> - 2003-09-12 11:27:42
|
Update of /cvsroot/sbcl/sbcl/src/compiler In directory sc8-pr-cvs1:/tmp/cvs-serv25283/src/compiler Modified Files: srctran.lisp Log Message: 0.8.3.55: Tweak the %DPB fix: ... on Alpha, currently N-WORD-BITS = 32 while register arithmetic is 64-bits. Extend and document the cutoff in %DEPOSIT-FIELD DERIVE-TYPE. Index: srctran.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/compiler/srctran.lisp,v retrieving revision 1.84 retrieving revision 1.85 diff -u -d -r1.84 -r1.85 --- srctran.lisp 12 Sep 2003 09:16:53 -0000 1.84 +++ srctran.lisp 12 Sep 2003 11:27:39 -0000 1.85 @@ -2358,7 +2358,17 @@ (high (numeric-type-high int)) (low (numeric-type-low int))) (when (and size-high posn-high high low - (<= (+ size-high posn-high) sb!vm:n-word-bits)) + ;; KLUDGE: we need this cutoff here, otherwise we + ;; will merrily derive the type of %DPB as + ;; (UNSIGNED-BYTE 1073741822), and then attempt to + ;; canonicalize this type to (INTEGER 0 (1- (ASH 1 + ;; 1073741822))), with hilarious consequences. We + ;; cutoff at 4*SB!VM:N-WORD-BITS to allow inference + ;; over a reasonable amount of shifting, even on + ;; the alpha/32 port, where N-WORD-BITS is 32 but + ;; machine integers are 64-bits. -- CSR, + ;; 2003-09-12 + (<= (+ size-high posn-high) (* 4 sb!vm:n-word-bits))) (let ((raw-bit-count (max (integer-length high) (integer-length low) (+ size-high posn-high)))) |