X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fx86%2Fvalues.lisp;h=9519b2223ed508825cc06ab3e81d336b62c95340;hb=66cff1e1319861c080d563359afea284614b3a7f;hp=9524d436930a3c70ab06ac90a634e5a9018936f0;hpb=40e3ba03d0e1b824e4d1ae75d74246b975b70964;p=sbcl.git diff --git a/src/compiler/x86/values.lisp b/src/compiler/x86/values.lisp index 9524d43..9519b22 100644 --- a/src/compiler/x86/values.lisp +++ b/src/compiler/x86/values.lisp @@ -39,8 +39,6 @@ (inst cmp esp-tn esi) (inst jmp :be loop) DONE - ;; solaris requires DF being zero. - #!+sunos (inst cld) (inst lea esp-tn (make-ea :dword :base edi :disp n-word-bytes)) (inst sub edi esi) (loop for moved = moved-ptrs then (tn-ref-across moved) @@ -115,7 +113,7 @@ (:arg-types * positive-fixnum positive-fixnum) (:temporary (:sc any-reg :offset esi-offset :from (:argument 0)) src) (:temporary (:sc descriptor-reg :offset eax-offset) temp) - (:temporary (:sc unsigned-reg :offset ecx-offset) temp1) + (:temporary (:sc unsigned-reg :offset ecx-offset) loop-index) (:results (start :scs (any-reg)) (count :scs (any-reg))) (:generator 20 @@ -137,19 +135,19 @@ (move count num) (inst sub count skip))) - (move temp1 count) + (move loop-index count) (inst mov start esp-tn) (inst jecxz done) ; check for 0 count? - (inst shr temp1 word-shift) ; convert the fixnum to a count. + (inst sub esp-tn count) + (inst sub src count) - (inst std) ; move down the stack as more value are copied to the bottom. LOOP - (inst lods temp) - (inst push temp) - (inst loop loop) + (inst mov temp (make-ea :dword :base src :index loop-index)) + (inst sub loop-index n-word-bytes) + (inst mov (make-ea :dword :base esp-tn :index loop-index) temp) + (inst jmp :nz LOOP) DONE - ;; solaris requires DF being zero. - #!+sunos (inst cld))) + ))