complex-offset)
other-pointer-lowtag))))))
-(define-vop (data-vector-ref/simple-array-single-float)
+(define-vop (data-vector-ref-with-offset/simple-array-single-float)
(:note "inline array access")
(:translate data-vector-ref-with-offset)
(:policy :fast-safe)
(inst shr dword-index 1)
(inst movss value (make-ea-for-float-ref object dword-index offset 4))))
-(define-vop (data-vector-ref-c/simple-array-single-float)
+(define-vop (data-vector-ref-c-with-offset/simple-array-single-float)
(:note "inline array access")
(:translate data-vector-ref-with-offset)
(:policy :fast-safe)
(:generator 4
(inst movss value (make-ea-for-float-ref object index offset 4))))
-(define-vop (data-vector-set/simple-array-single-float)
+(define-vop (data-vector-set-with-offset/simple-array-single-float)
(:note "inline array store")
(:translate data-vector-set-with-offset)
(:policy :fast-safe)
(move dword-index index)
(inst shr dword-index 1)
(inst movss (make-ea-for-float-ref object dword-index offset 4) value)
- (unless (location= result value)
- (inst movss result value))))
+ (move result value)))
-(define-vop (data-vector-set-c/simple-array-single-float)
+(define-vop (data-vector-set-c-with-offset/simple-array-single-float)
(:note "inline array store")
(:translate data-vector-set-with-offset)
(:policy :fast-safe)
(:result-types single-float)
(:generator 4
(inst movss (make-ea-for-float-ref object index offset 4) value)
- (unless (location= result value)
- (inst movss result value))))
+ (move result value)))
-(define-vop (data-vector-ref/simple-array-double-float)
+(define-vop (data-vector-ref-with-offset/simple-array-double-float)
(:note "inline array access")
(:translate data-vector-ref-with-offset)
(:policy :fast-safe)
(:generator 6
(inst movsd value (make-ea-for-float-ref object index offset 8))))
-(define-vop (data-vector-set/simple-array-double-float)
+(define-vop (data-vector-set-with-offset/simple-array-double-float)
(:note "inline array store")
(:translate data-vector-set-with-offset)
(:policy :fast-safe)
(:result-types double-float)
(:generator 20
(inst movsd (make-ea-for-float-ref object index offset 8) value)
- (unless (location= result value)
- (inst movsd result value))))
+ (move result value)))
-(define-vop (data-vector-set-c/simple-array-double-float)
+(define-vop (data-vector-set-c-with-offset/simple-array-double-float)
(:note "inline array store")
(:translate data-vector-set-with-offset)
(:policy :fast-safe)
(:result-types double-float)
(:generator 19
(inst movsd (make-ea-for-float-ref object index offset 8) value)
- (unless (location= result value)
- (inst movsd result value))))
+ (move result value)))
;;; complex float variants
-(define-vop (data-vector-ref/simple-array-complex-single-float)
+(define-vop (data-vector-ref-with-offset/simple-array-complex-single-float)
(:note "inline array access")
(:translate data-vector-ref-with-offset)
(:policy :fast-safe)
(:results (value :scs (complex-single-reg)))
(:result-types complex-single-float)
(:generator 5
- (let ((real-tn (complex-single-reg-real-tn value)))
- (inst movss real-tn (make-ea-for-float-ref object index offset 8)))
- (let ((imag-tn (complex-single-reg-imag-tn value)))
- (inst movss imag-tn (make-ea-for-float-ref object index offset 8
- :complex-offset 4)))))
+ (inst movq value (make-ea-for-float-ref object index offset 8))))
-(define-vop (data-vector-ref-c/simple-array-complex-single-float)
+(define-vop (data-vector-ref-c-with-offset/simple-array-complex-single-float)
(:note "inline array access")
(:translate data-vector-ref-with-offset)
(:policy :fast-safe)
(:results (value :scs (complex-single-reg)))
(:result-types complex-single-float)
(:generator 4
- (let ((real-tn (complex-single-reg-real-tn value)))
- (inst movss real-tn (make-ea-for-float-ref object index offset 8)))
- (let ((imag-tn (complex-single-reg-imag-tn value)))
- (inst movss imag-tn (make-ea-for-float-ref object index offset 8
- :complex-offset 4)))))
+ (inst movq value (make-ea-for-float-ref object index offset 8))))
-(define-vop (data-vector-set/simple-array-complex-single-float)
+(define-vop (data-vector-set-with-offset/simple-array-complex-single-float)
(:note "inline array store")
(:translate data-vector-set-with-offset)
(:policy :fast-safe)
(:results (result :scs (complex-single-reg)))
(:result-types complex-single-float)
(:generator 5
- (let ((value-real (complex-single-reg-real-tn value))
- (result-real (complex-single-reg-real-tn result)))
- (inst movss (make-ea-for-float-ref object index offset 8) value-real)
- (unless (location= value-real result-real)
- (inst movss result-real value-real)))
- (let ((value-imag (complex-single-reg-imag-tn value))
- (result-imag (complex-single-reg-imag-tn result)))
- (inst movss (make-ea-for-float-ref object index offset 8
- :complex-offset 4)
- value-imag)
- (unless (location= value-imag result-imag)
- (inst movss result-imag value-imag)))))
-
-(define-vop (data-vector-set-c/simple-array-complex-single-float)
+ (move result value)
+ (inst movq (make-ea-for-float-ref object index offset 8) value)))
+
+(define-vop (data-vector-set-c-with-offset/simple-array-complex-single-float)
(:note "inline array store")
(:translate data-vector-set-with-offset)
(:policy :fast-safe)
(:results (result :scs (complex-single-reg)))
(:result-types complex-single-float)
(:generator 4
- (let ((value-real (complex-single-reg-real-tn value))
- (result-real (complex-single-reg-real-tn result)))
- (inst movss (make-ea-for-float-ref object index offset 8) value-real)
- (unless (location= value-real result-real)
- (inst movss result-real value-real)))
- (let ((value-imag (complex-single-reg-imag-tn value))
- (result-imag (complex-single-reg-imag-tn result)))
- (inst movss (make-ea-for-float-ref object index offset 8
- :complex-offset 4)
- value-imag)
- (unless (location= value-imag result-imag)
- (inst movss result-imag value-imag)))))
-
-(define-vop (data-vector-ref/simple-array-complex-double-float)
+ (move result value)
+ (inst movq (make-ea-for-float-ref object index offset 8) value)))
+
+(define-vop (data-vector-ref-with-offset/simple-array-complex-double-float)
(:note "inline array access")
(:translate data-vector-ref-with-offset)
(:policy :fast-safe)
(:results (value :scs (complex-double-reg)))
(:result-types complex-double-float)
(:generator 7
- (let ((real-tn (complex-double-reg-real-tn value)))
- (inst movsd real-tn (make-ea-for-float-ref object index offset 16 :scale 2)))
- (let ((imag-tn (complex-double-reg-imag-tn value)))
- (inst movsd imag-tn (make-ea-for-float-ref object index offset 16 :scale 2
- :complex-offset 8)))))
+ (inst movapd value (make-ea-for-float-ref object index offset 16 :scale 2))))
-(define-vop (data-vector-ref-c/simple-array-complex-double-float)
+(define-vop (data-vector-ref-c-with-offset/simple-array-complex-double-float)
(:note "inline array access")
(:translate data-vector-ref-with-offset)
(:policy :fast-safe)
(:results (value :scs (complex-double-reg)))
(:result-types complex-double-float)
(:generator 6
- (let ((real-tn (complex-double-reg-real-tn value)))
- (inst movsd real-tn (make-ea-for-float-ref object index offset 16 :scale 2)))
- (let ((imag-tn (complex-double-reg-imag-tn value)))
- (inst movsd imag-tn (make-ea-for-float-ref object index offset 16 :scale 2
- :complex-offset 8)))))
+ (inst movapd value (make-ea-for-float-ref object index offset 16 :scale 2))))
-(define-vop (data-vector-set/simple-array-complex-double-float)
+(define-vop (data-vector-set-with-offset/simple-array-complex-double-float)
(:note "inline array store")
(:translate data-vector-set-with-offset)
(:policy :fast-safe)
(:results (result :scs (complex-double-reg)))
(:result-types complex-double-float)
(:generator 20
- (let ((value-real (complex-double-reg-real-tn value))
- (result-real (complex-double-reg-real-tn result)))
- (inst movsd (make-ea-for-float-ref object index offset 16 :scale 2)
- value-real)
- (unless (location= value-real result-real)
- (inst movsd result-real value-real)))
- (let ((value-imag (complex-double-reg-imag-tn value))
- (result-imag (complex-double-reg-imag-tn result)))
- (inst movsd (make-ea-for-float-ref object index offset 16 :scale 2
- :complex-offset 8)
- value-imag)
- (unless (location= value-imag result-imag)
- (inst movsd result-imag value-imag)))))
-
-(define-vop (data-vector-set-c/simple-array-complex-double-float)
+ (inst movapd (make-ea-for-float-ref object index offset 16 :scale 2) value)
+ (move result value)))
+
+(define-vop (data-vector-set-c-with-offset/simple-array-complex-double-float)
(:note "inline array store")
(:translate data-vector-set-with-offset)
(:policy :fast-safe)
(:results (result :scs (complex-double-reg)))
(:result-types complex-double-float)
(:generator 19
- (let ((value-real (complex-double-reg-real-tn value))
- (result-real (complex-double-reg-real-tn result)))
- (inst movsd (make-ea-for-float-ref object index offset 16 :scale 2)
- value-real)
- (unless (location= value-real result-real)
- (inst movsd result-real value-real)))
- (let ((value-imag (complex-double-reg-imag-tn value))
- (result-imag (complex-double-reg-imag-tn result)))
- (inst movsd (make-ea-for-float-ref object index offset 16 :scale 2
- :complex-offset 8)
- value-imag)
- (unless (location= value-imag result-imag)
- (inst movsd result-imag value-imag)))))
+ (inst movapd (make-ea-for-float-ref object index offset 16 :scale 2) value)
+ (move result value)))
\f
(macrolet ((define-data-vector-frobs (ptype mov-inst type
8-bit-tns-p &rest scs)
`(progn
- (define-vop (,(symbolicate "DATA-VECTOR-REF/" ptype))
+ (define-vop (,(symbolicate "DATA-VECTOR-REF-WITH-OFFSET/" ptype))
(:translate data-vector-ref-with-offset)
(:policy :fast-safe)
(:args (object :scs (descriptor-reg))
:disp (- (+ (* vector-data-offset n-word-bytes)
offset)
other-pointer-lowtag)))))
- (define-vop (,(symbolicate "DATA-VECTOR-REF-C/" ptype))
+ (define-vop (,(symbolicate "DATA-VECTOR-REF-C-WITH-OFFSET/" ptype))
(:translate data-vector-ref-with-offset)
(:policy :fast-safe)
(:args (object :scs (descriptor-reg)))
:disp (- (+ (* vector-data-offset n-word-bytes)
index offset)
other-pointer-lowtag)))))
- (define-vop (,(symbolicate "DATA-VECTOR-SET/" ptype))
+ (define-vop (,(symbolicate "DATA-VECTOR-SET-WITH-OFFSET/" ptype))
(:translate data-vector-set-with-offset)
(:policy :fast-safe)
(:args (object :scs (descriptor-reg) :to (:eval 0))
other-pointer-lowtag))
,(if 8-bit-tns-p 'value 'al-tn))
(move result ,(if 8-bit-tns-p 'value 'rax))))
- (define-vop (,(symbolicate "DATA-VECTOR-SET-C/" ptype))
+ (define-vop (,(symbolicate "DATA-VECTOR-SET-C-WITH-OFFSET/" ptype))
(:translate data-vector-set-with-offset)
(:policy :fast-safe)
(:args (object :scs (descriptor-reg) :to (:eval 0))
;;; unsigned-byte-16
(macrolet ((define-data-vector-frobs (ptype mov-inst type &rest scs)
`(progn
- (define-vop (,(symbolicate "DATA-VECTOR-REF/" ptype))
+ (define-vop (,(symbolicate "DATA-VECTOR-REF-WITH-OFFSET/" ptype))
(:translate data-vector-ref-with-offset)
(:policy :fast-safe)
(:args (object :scs (descriptor-reg))
:disp (- (+ (* vector-data-offset n-word-bytes)
(* offset 2))
other-pointer-lowtag)))))
- (define-vop (,(symbolicate "DATA-VECTOR-REF-C/" ptype))
+ (define-vop (,(symbolicate "DATA-VECTOR-REF-C-WITH-OFFSET/" ptype))
(:translate data-vector-ref-with-offset)
(:policy :fast-safe)
(:args (object :scs (descriptor-reg)))
(* 2 index)
(* 2 offset))
other-pointer-lowtag)))))
- (define-vop (,(symbolicate "DATA-VECTOR-SET/" ptype))
+ (define-vop (,(symbolicate "DATA-VECTOR-SET-WITH-OFFSET/" ptype))
(:translate data-vector-set-with-offset)
(:policy :fast-safe)
(:args (object :scs (descriptor-reg) :to (:eval 0))
ax-tn)
(move result eax)))
- (define-vop (,(symbolicate "DATA-VECTOR-SET-C/" ptype))
+ (define-vop (,(symbolicate "DATA-VECTOR-SET-C-WITH-OFFSET/" ptype))
(:translate data-vector-set-with-offset)
(:policy :fast-safe)
(:args (object :scs (descriptor-reg) :to (:eval 0))
(macrolet ((define-data-vector-frobs (ptype mov-inst type &rest scs)
`(progn
- (define-vop (,(symbolicate "DATA-VECTOR-REF/" ptype))
+ (define-vop (,(symbolicate "DATA-VECTOR-REF-WITH-OFFSET/" ptype))
(:translate data-vector-ref-with-offset)
(:policy :fast-safe)
(:args (object :scs (descriptor-reg))
:disp (- (+ (* vector-data-offset n-word-bytes)
(* offset 4))
other-pointer-lowtag)))))
- (define-vop (,(symbolicate "DATA-VECTOR-REF-C/" ptype))
+ (define-vop (,(symbolicate "DATA-VECTOR-REF-C-WITH-OFFSET/" ptype))
(:translate data-vector-ref-with-offset)
(:policy :fast-safe)
(:args (object :scs (descriptor-reg)))
(* 4 index)
(* 4 offset))
other-pointer-lowtag)))))
- (define-vop (,(symbolicate "DATA-VECTOR-SET/" ptype))
+ (define-vop (,(symbolicate "DATA-VECTOR-SET-WITH-OFFSET/" ptype))
(:translate data-vector-set-with-offset)
(:policy :fast-safe)
(:args (object :scs (descriptor-reg) :to (:eval 0))
eax-tn)
(move result rax)))
- (define-vop (,(symbolicate "DATA-VECTOR-SET-C/" ptype))
+ (define-vop (,(symbolicate "DATA-VECTOR-SET-C-WITH-OFFSET/" ptype))
(:translate data-vector-set-with-offset)
(:policy :fast-safe)
(:args (object :scs (descriptor-reg) :to (:eval 0))