X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fsparc%2Fvalues.lisp;h=a7ac2b1cbf5c8db962d10fa4f8313c5b2ba95fad;hb=5fca28334e00c7e1ad159924ac2db4a3e1c9e354;hp=468176edc5041ad028f6349dbfe019840d1cd836;hpb=1e5296127f5b384a2171646747021ebeee73b801;p=sbcl.git diff --git a/src/compiler/sparc/values.lisp b/src/compiler/sparc/values.lisp index 468176e..a7ac2b1 100644 --- a/src/compiler/sparc/values.lisp +++ b/src/compiler/sparc/values.lisp @@ -141,8 +141,9 @@ ;;; 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) @@ -150,7 +151,13 @@ (:results (start :scs (any-reg)) (count :scs (any-reg))) (:generator 20 - (move src context) + (sc-case skip + (zero + (move src context)) + (immediate + (inst add src context (* (tn-value skip) n-word-bytes))) + (any-reg + (inst add src context skip))) (inst orcc count zero-tn num) (inst b :eq done) (inst move start csp-tn)