From: Christophe Rhodes Date: Mon, 17 May 2004 16:33:04 +0000 (+0000) Subject: 0.8.10.30: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=d42759291677be7634fb2fd86562d746f97a7a53;p=sbcl.git 0.8.10.30: Fix yet another Alpha backend bug ... functions returning large numbers of values (> 63) can now be compiled --- diff --git a/NEWS b/NEWS index c042a50..c278247 100644 --- 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 diff --git a/src/compiler/alpha/call.lisp b/src/compiler/alpha/call.lisp index a164718..538853b 100644 --- a/src/compiler/alpha/call.lisp +++ b/src/compiler/alpha/call.lisp @@ -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)) diff --git a/tests/compiler.impure-cload.lisp b/tests/compiler.impure-cload.lisp index b0514a8..956c43c 100644 --- a/tests/compiler.impure-cload.lisp +++ b/tests/compiler.impure-cload.lisp @@ -361,6 +361,19 @@ (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)) diff --git a/version.lisp-expr b/version.lisp-expr index a7bdd84..a063d72 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -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"