(define-move-fun (load-fp-zero 1) (vop x y)
((fp-single-zero) (single-reg)
(fp-double-zero) (double-reg))
- (identity x) ; KLUDGE: IDENTITY as IGNORABLE...
- (inst movq y fp-double-zero-tn))
+ (identity x)
+ (sc-case y
+ (single-reg (inst xorps y y))
+ (double-reg (inst xorpd y y))))
(define-move-fun (load-single 2) (vop x y)
((single-stack) (single-reg))
(frob * mulss */single-float 4 mulsd */double-float 5 t)
(frob / divss //single-float 12 divsd //double-float 19 nil))
-
+(define-vop (fsqrt)
+ (:args (x :scs (double-reg)))
+ (:results (y :scs (double-reg)))
+ (:translate %sqrt)
+ (:policy :fast-safe)
+ (:arg-types double-float)
+ (:result-types double-float)
+ (:note "inline float arithmetic")
+ (:vop-var vop)
+ (:save-p :compute-only)
+ (:generator 1
+ (note-this-location vop :internal-error)
+ (inst sqrtsd y x)))
\f
(macrolet ((frob ((name translate sc type) &body body)
`(define-vop (,name)
(unless (location= imag r-imag)
(inst movss r-imag imag))))
(complex-single-stack
- (inst movss (ea-for-csf-real-stack r) real)
+ (unless (location= real r)
+ (inst movss (ea-for-csf-real-stack r) real))
(inst movss (ea-for-csf-imag-stack r) imag)))))
(define-vop (make-complex-double-float)
(unless (location= imag r-imag)
(inst movsd r-imag imag))))
(complex-double-stack
- (inst movsd (ea-for-cdf-real-stack r) real)
+ (unless (location= real r)
+ (inst movsd (ea-for-cdf-real-stack r) real))
(inst movsd (ea-for-cdf-imag-stack r) imag)))))
(define-vop (complex-float-value)