X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fmips%2Fvalues.lisp;h=a04921b7040006fb7cae2e81681267a486aee992;hb=236acc699ec1b5996e04f3f30d2859803e54e5ea;hp=da859781babe843667388a74fa5141c1c6ee6c3b;hpb=1e5296127f5b384a2171646747021ebeee73b801;p=sbcl.git diff --git a/src/compiler/mips/values.lisp b/src/compiler/mips/values.lisp index da85978..a04921b 100644 --- a/src/compiler/mips/values.lisp +++ b/src/compiler/mips/values.lisp @@ -144,15 +144,22 @@ ;;; 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) (:results (start :scs (any-reg)) (count :scs (any-reg))) (:generator 20 - (move src context) + (sc-case skip + (zero + (move src context)) + (immediate + (inst addu src context (* (tn-value skip) n-word-bytes))) + (any-reg + (inst addu src context skip))) (move count num) (inst beq num done) (move start csp-tn t)