X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Falpha%2Fvalues.lisp;h=c0fc37ff9b5952d8ad2987ca7a849b39b42d9f5f;hb=aa7b669779e8e88349938ca962229f31ead08af2;hp=766f1f0395e5737ac092e83ae7416a3678c95c30;hpb=1e5296127f5b384a2171646747021ebeee73b801;p=sbcl.git diff --git a/src/compiler/alpha/values.lisp b/src/compiler/alpha/values.lisp index 766f1f0..c0fc37f 100644 --- a/src/compiler/alpha/values.lisp +++ b/src/compiler/alpha/values.lisp @@ -123,8 +123,9 @@ ;;; them as function arguments. (define-vop (%more-arg-values) (:args (context :scs (descriptor-reg any-reg) :target src) + (skip :scs (any-reg zero immediate)) (num :scs (any-reg) :target count)) - (:arg-types * positive-fixnum) + (:arg-types * positive-fixnum positive-fixnum) (:temporary (:sc any-reg :from (:argument 0)) src) (:temporary (:sc any-reg :from (:argument 2)) dst) (:temporary (:sc descriptor-reg :from (:argument 1)) temp) @@ -132,7 +133,13 @@ (:results (start :scs (any-reg)) (count :scs (any-reg))) (:generator 20 - (move context src) + (sc-case skip + (zero + (move context src)) + (immediate + (inst lda src (* (tn-value skip) n-word-bytes) context)) + (any-reg + (inst addq context skip src))) (move num count) (inst move csp-tn start) (inst beq num done)