X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Falpha%2Fcall.lisp;h=63e2de378b9098e5c296d76f85ae4d2900b380cd;hb=b63c4fb9b98fa8188e17ba926e150ba417a74635;hp=a16471805f8d72cdaa0612b3795949c4126e9e47;hpb=70c980b4c9285f4d518c80d314baac0da511c1bf;p=sbcl.git diff --git a/src/compiler/alpha/call.lisp b/src/compiler/alpha/call.lisp index a164718..63e2de3 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)) @@ -1104,9 +1109,7 @@ default-value-8 (define-vop (listify-rest-args) (:args (context-arg :target context :scs (descriptor-reg)) (count-arg :target count :scs (any-reg))) - (:info dx) - (:ignore dx) - (:arg-types * tagged-num (:constant t)) + (:arg-types * tagged-num) (:temporary (:scs (any-reg) :from (:argument 0)) context) (:temporary (:scs (any-reg) :from (:argument 1)) count) (:temporary (:scs (descriptor-reg) :from :eval) temp dst)