diff --git a/compiler/sparc/move.lisp b/compiler/sparc/move.lisp index 24fc01571b18dc5a099de63660937f65536d1c5f..140b99236e32bbfef4dac219179e8e70af34fe17 100644 --- a/compiler/sparc/move.lisp +++ b/compiler/sparc/move.lisp @@ -5,11 +5,11 @@ ;;; Carnegie Mellon University, and has been placed in the public domain. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/move.lisp,v 1.9 2002/09/05 15:19:51 toy Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/move.lisp,v 1.10 2002/09/12 15:57:59 toy Exp $") ;;; ;;; ********************************************************************** ;;; -;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/move.lisp,v 1.9 2002/09/05 15:19:51 toy Exp $ +;;; $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/sparc/move.lisp,v 1.10 2002/09/12 15:57:59 toy Exp $ ;;; ;;; This file contains the SPARC VM definition of operand loading/saving and ;;; the Move VOP. @@ -198,6 +198,8 @@ (emit-label done)))) +;; Same as above, but we the number is sign-extended to a full 64-bit +;; length. Not really needed, I suppose. #+(and sparc-v9 sparc-v8plus) (define-vop (move-to-word/integer) (:args (x :scs (descriptor-reg))) @@ -484,7 +486,7 @@ (:args (arg :scs (signed64-reg) :target x)) (:results (y :scs (descriptor-reg))) (:temporary (:scs (signed64-reg) :from (:argument 0)) x temp) - (:note "signed quad word to integer coercion") + (:note "signed 64-bit word to integer coercion") (:generator 20 (move x arg) (let ((fixnum (gen-label)) @@ -524,7 +526,7 @@ (:args (arg :scs (unsigned64-reg) :target x)) (:results (y :scs (descriptor-reg))) (:temporary (:scs (unsigned64-reg) :from (:argument 0)) x temp) - (:note "signed quad word to integer coercion") + (:note "unsigned 64-bit word to integer coercion") (:generator 20 (move x arg) (let ((two-words (gen-label)) @@ -620,7 +622,7 @@ ;; Move untagged number arguments/return-values. (define-vop (move-64bit-word-argument) (:args (x :target y - :scs (signed64-reg unsigned64-reg)) + :scs (signed-reg signed64-reg unsigned64-reg immediate)) (fp :scs (any-reg) :load-if (not (sc-is y sap-reg)))) (:results (y)) @@ -628,7 +630,13 @@ (:generator 0 (sc-case y ((signed64-reg unsigned64-reg) - (move y x)) + (sc-case x + ((signed64-reg unsigned64-reg) + (move y x)) + (signed-reg + (inst sra y x 0)) + (immediate + (inst li64 y (tn-value x))))) ((signed64-stack unsigned64-stack) (store64 x fp (tn-offset y))))))