From 3b1cf7c1ca1c14b0c5306662d0792a7e98c59c1b Mon Sep 17 00:00:00 2001 From: rtoy <rtoy> Date: Fri, 23 Jul 2010 11:53:37 +0000 Subject: [PATCH] In the vops realpart/complex-double-float and realpart/complex-single-float, remove the unused temp register. Change the xor temp temp instruction to xor r r instruction so that the result has zeroes in the unused parts of the register. Bug and fix from Alexander Donkov. --- compiler/x86/float-sse2.lisp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/compiler/x86/float-sse2.lisp b/compiler/x86/float-sse2.lisp index 04d6fe468..c1054a01f 100644 --- a/compiler/x86/float-sse2.lisp +++ b/compiler/x86/float-sse2.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman or slisp-group@cs.cmu.edu. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/x86/float-sse2.lisp,v 1.15 2010/07/21 16:52:28 rtoy Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/x86/float-sse2.lisp,v 1.16 2010/07/23 11:53:37 rtoy Exp $") ;;; ;;; ********************************************************************** ;;; @@ -1390,13 +1390,12 @@ (:arg-types complex-single-float) (:results (r :scs (single-reg))) (:result-types single-float) - (:temporary (:sc complex-single-reg) temp) (:policy :fast-safe) (:note _N"complex float realpart") (:generator 3 (sc-case x (complex-single-reg - (inst xorps temp temp) ; temp = 0|0|0|0 + (inst xorps r r) ; temp = 0|0|0|0 (inst movss r x)) ; r = 0|0|0|x (complex-single-stack (inst movss r (ea-for-csf-real-stack x))) @@ -1409,13 +1408,12 @@ (:arg-types complex-double-float) (:results (r :scs (double-reg))) (:result-types double-float) - (:temporary (:sc complex-double-reg) temp) (:policy :fast-safe) (:note _N"complex float realpart") (:generator 3 (sc-case x (complex-double-reg - (inst xorpd temp temp) ; temp = 0|0 + (inst xorpd r r) ; temp = 0|0 (inst movsd r x)) ; r = 0|x (complex-double-stack (inst movsd r (ea-for-cdf-real-stack x))) -- GitLab