0.8.10.30:
authorChristophe Rhodes <csr21@cam.ac.uk>
Mon, 17 May 2004 16:33:04 +0000 (16:33 +0000)
committerChristophe Rhodes <csr21@cam.ac.uk>
Mon, 17 May 2004 16:33:04 +0000 (16:33 +0000)
Fix yet another Alpha backend bug
... functions returning large numbers of values (> 63) can now
be compiled

NEWS
src/compiler/alpha/call.lisp
tests/compiler.impure-cload.lisp
version.lisp-expr

diff --git a/NEWS b/NEWS
index c042a50..c278247 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2453,6 +2453,9 @@ changes in sbcl-0.8.11 relative to sbcl-0.8.10:
     ** SXHASH is specified (infelicitously) to respect similarity,
        which means that (SXHASH 0.0) must equal (SXHASH -0.0).  Make
        it so.  (thanks to Markus Ziegler)
+    ** on the Alpha, the compiler succeeds in compiling functions
+       returning a known number of arguments greater than 63.
+
 
 planned incompatible changes in 0.8.x:
   * (not done yet, but planned:) When the profiling interface settles
index a164718..538853b 100644 (file)
@@ -946,7 +946,12 @@ default-value-8
     ;; restore the frame pointer and clear as much of the control
     ;; stack as possible.
     (move ocfp cfp-tn)
-    (inst addq val-ptr (* nvals n-word-bytes) csp-tn)
+    ;; ADDQ only accepts immediates of type (UNSIGNED-BYTE 8).  Here,
+    ;; instead of adding (* NVALS N-WORD-BYTES), we use NARGS that
+    ;; we've carefully set up, but protect ourselves by averring that
+    ;; FIXNUMIZEation and multiplication by N-WORD-BYTES is the same.
+    (aver (= (* nvals n-word-bytes) (fixnumize nvals)))
+    (inst addq val-ptr nargs csp-tn)
     ;; pre-default any argument register that need it.
     (when (< nvals register-arg-count)
       (dolist (reg (subseq (list a0 a1 a2 a3 a4 a5) nvals))
index b0514a8..956c43c 100644 (file)
   (assert (= (length list) 8))
   (assert (null (nth 7 list))))
 
+;;; failed on Alpha prior to sbcl-0.8.10.30
+(defun lotso-values ()
+  (values 0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9
+         0 1 2 3 4 5 6 7 8 9))
+
 ;;; bug 313: source transforms were "lisp-1"
 (defun srctran-lisp1-1 (cadr) (if (functionp cadr) (funcall cadr 1) nil))
 (assert (eql (funcall (eval #'srctran-lisp1-1) #'identity) 1))
index a7bdd84..a063d72 100644 (file)
@@ -17,4 +17,4 @@
 ;;; checkins which aren't released. (And occasionally for internal
 ;;; versions, especially for internal versions off the main CVS
 ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.10.29"
+"0.8.10.30"