From 999a6b045da3f759a5af5a4d7f7dda952d794452 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Mon, 29 Jan 2007 20:38:40 +0000 Subject: [PATCH] 1.0.2.5: Fix DATA-VECTOR-{REF,SET}-WITH-OFFSET for #-sb-unicode builds. --- src/compiler/x86/array.lisp | 37 ++++++++++++++++++++++++------------- version.lisp-expr | 2 +- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/src/compiler/x86/array.lisp b/src/compiler/x86/array.lisp index bcf82b5..08634b2 100644 --- a/src/compiler/x86/array.lisp +++ b/src/compiler/x86/array.lisp @@ -557,7 +557,8 @@ ;;; {un,}signed-byte-8, simple-base-string -(macrolet ((define-data-vector-frobs (ptype element-type ref-inst &rest scs) +(macrolet ((define-data-vector-frobs (ptype element-type ref-inst + 8-bit-tns-p &rest scs) `(progn (define-vop (,(symbolicate "DATA-VECTOR-REF-WITH-OFFSET/" ptype)) (:translate data-vector-ref-with-offset) @@ -590,19 +591,22 @@ (:policy :fast-safe) (:args (object :scs (descriptor-reg) :to (:eval 0)) (index :scs (unsigned-reg immediate) :to (:eval 0)) - (value :scs ,scs :target eax)) + (value :scs ,scs ,@(unless 8-bit-tns-p + '(:target eax)))) (:info offset) (:arg-types ,ptype positive-fixnum (:constant (constant-displacement other-pointer-lowtag 1 vector-data-offset)) ,element-type) - (:temporary (:sc unsigned-reg :offset eax-offset :target result - :from (:argument 2) :to (:result 0)) - eax) + ,@(unless 8-bit-tns-p + '((:temporary (:sc unsigned-reg :offset eax-offset :target result + :from (:argument 2) :to (:result 0)) + eax))) (:results (result :scs ,scs)) (:result-types ,element-type) (:generator 5 - (move eax value) + ,@(unless 8-bit-tns-p + '((move eax value))) (sc-case index (immediate (inst mov (make-ea :byte :base object @@ -610,21 +614,28 @@ (tn-value index) offset) other-pointer-lowtag)) - al-tn)) + ,(if 8-bit-tns-p + 'value + 'al-tn))) (t (inst mov (make-ea :byte :base object :index index :scale 1 :disp (- (+ (* vector-data-offset n-word-bytes) offset) other-pointer-lowtag)) - al-tn))) - (move result eax)))))) + ,(if 8-bit-tns-p + 'value + 'al-tn)))) + (move result ,(if 8-bit-tns-p + 'value + 'eax))))))) (define-data-vector-frobs simple-array-unsigned-byte-7 positive-fixnum - movzx unsigned-reg signed-reg) + movzx nil unsigned-reg signed-reg) (define-data-vector-frobs simple-array-unsigned-byte-8 positive-fixnum - movzx unsigned-reg signed-reg) + movzx nil unsigned-reg signed-reg) (define-data-vector-frobs simple-array-signed-byte-8 tagged-num - movsx signed-reg) - (define-data-vector-frobs simple-base-string character movzx character-reg)) + movsx nil signed-reg) + (define-data-vector-frobs simple-base-string character mov + #!+sb-unicode nil #!-sb-unicode t character-reg)) ;;; {un,}signed-byte-16 (macrolet ((define-data-vector-frobs (ptype element-type ref-inst &rest scs) diff --git a/version.lisp-expr b/version.lisp-expr index dbba1e1..5f37bfc 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"1.0.2.4" +"1.0.2.5" -- 1.7.10.4