X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fx86%2Farray.lisp;h=392646338d9621ff077ce2f162c51d710f34b4be;hb=b28aadc5bd34a0d9fa0ff15c52b2b4164d955831;hp=08634b26ed8cf119d953421f1b505a3f7e8b1c43;hpb=999a6b045da3f759a5af5a4d7f7dda952d794452;p=sbcl.git diff --git a/src/compiler/x86/array.lisp b/src/compiler/x86/array.lisp index 08634b2..3926463 100644 --- a/src/compiler/x86/array.lisp +++ b/src/compiler/x86/array.lisp @@ -206,7 +206,7 @@ (:note "inline array store") (:translate data-vector-set) (:policy :fast-safe) - (:args (object :scs (descriptor-reg)) + (:args (object :scs (descriptor-reg) :to (:argument 2)) (index :scs (unsigned-reg) :target ecx) (value :scs (unsigned-reg immediate) :target result)) (:arg-types ,type positive-fixnum positive-fixnum) @@ -214,7 +214,7 @@ (:result-types positive-fixnum) (:temporary (:sc unsigned-reg) word-index) (:temporary (:sc unsigned-reg) old) - (:temporary (:sc unsigned-reg :offset ecx-offset) ecx) + (:temporary (:sc unsigned-reg :offset ecx-offset :from (:argument 1)) ecx) (:generator 25 (move word-index index) (inst shr word-index ,bit-shift) @@ -634,7 +634,8 @@ movzx nil unsigned-reg signed-reg) (define-data-vector-frobs simple-array-signed-byte-8 tagged-num movsx nil signed-reg) - (define-data-vector-frobs simple-base-string character mov + (define-data-vector-frobs simple-base-string character + #!+sb-unicode movzx #!-sb-unicode mov #!+sb-unicode nil #!-sb-unicode t character-reg)) ;;; {un,}signed-byte-16 @@ -657,8 +658,8 @@ (inst ,ref-inst value (make-ea :word :base object :disp (- (+ (* vector-data-offset n-word-bytes) - (* 2 (+ offset (tn-value index))) - other-pointer-lowtag))))) + (* 2 (+ offset (tn-value index)))) + other-pointer-lowtag)))) (t (inst ,ref-inst value (make-ea :word :base object :index index :scale 2 @@ -707,14 +708,11 @@ ;;; These vops are useful for accessing the bits of a vector ;;; irrespective of what type of vector it is. -(define-full-reffer raw-bits * 0 other-pointer-lowtag (unsigned-reg) - unsigned-num %raw-bits) -(define-full-setter set-raw-bits * 0 other-pointer-lowtag (unsigned-reg) - unsigned-num %set-raw-bits) -(define-full-reffer vector-raw-bits * vector-data-offset other-pointer-lowtag - (unsigned-reg) unsigned-num %vector-raw-bits) -(define-full-setter set-vector-raw-bits * vector-data-offset other-pointer-lowtag - (unsigned-reg) unsigned-num %set-vector-raw-bits) +(define-full-reffer+offset raw-bits-with-offset * 0 other-pointer-lowtag (unsigned-reg) + unsigned-num %raw-bits-with-offset) +(define-full-setter+offset set-raw-bits-with-offset * 0 other-pointer-lowtag (unsigned-reg) + unsigned-num %set-raw-bits-with-offset) + ;;;; miscellaneous array VOPs