From e2ae57e6839f264cd6c1b6bea66e7a373122db85 Mon Sep 17 00:00:00 2001 From: Nathan Froyd Date: Tue, 16 Feb 2010 04:45:25 +0000 Subject: [PATCH] 1.0.35.17: micro-optimize x86-64 MOVE-TO-SINGLE Sometimes we move a descriptor -> float -> stack. Teach MOVE-TO-SINGLE how to do descriptor -> stack in one step. --- src/compiler/x86-64/float.lisp | 12 +++++++++--- version.lisp-expr | 2 +- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/compiler/x86-64/float.lisp b/src/compiler/x86-64/float.lisp index 6943574..6f0a27f 100644 --- a/src/compiler/x86-64/float.lisp +++ b/src/compiler/x86-64/float.lisp @@ -194,14 +194,20 @@ (define-vop (move-to-single) (:args (x :scs (descriptor-reg) :target tmp)) (:temporary (:sc unsigned-reg) tmp) - (:results (y :scs (single-reg))) + (:results (y :scs (single-reg single-stack))) (:note "pointer to float coercion") (:generator 2 (move tmp x) (inst shr tmp 32) - (inst movd y tmp))) + (sc-case y + (single-reg + (inst movd y tmp)) + (single-stack + (let ((slot (make-ea :dword :base rbp-tn + :disp (frame-byte-offset (tn-offset y))))) + (inst mov slot (reg-in-size tmp :dword))))))) -(define-move-vop move-to-single :move (descriptor-reg) (single-reg)) +(define-move-vop move-to-single :move (descriptor-reg) (single-reg single-stack)) (define-vop (move-to-double) (:args (x :scs (descriptor-reg))) diff --git a/version.lisp-expr b/version.lisp-expr index 63e68dd..725a600 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.35.16" +"1.0.35.17" -- 1.7.10.4