:load-if (not (and (sc-is result unsigned-stack)
(location= digit result)))))
(:result-types unsigned-num)
- (:generator 1
+ (:generator 2
(move result digit)
(move ecx count)
(inst sar result :cl)))
-;;;; the x86 VM definition of operand loading/saving and the MOVE vop
+;;;; the x86-64 VM definition of operand loading/saving and the MOVE vop
;;;; This software is part of the SBCL system. See the README file for
;;;; more information.
(define-move-fun (load-number 1) (vop x y)
((immediate) (signed-reg unsigned-reg))
- (inst mov y (tn-value x)))
+ (let ((val (tn-value x)))
+ (if (zerop val)
+ (inst xor y y)
+ (inst mov y val))))
(define-move-fun (load-character 1) (vop x y)
((immediate) (character-reg))
:load-if (not (and (sc-is result unsigned-stack)
(location= digit result)))))
(:result-types unsigned-num)
- (:generator 1
+ (:generator 2
(move result digit)
(move ecx count)
(inst sar result :cl)))
(define-move-fun (load-number 1) (vop x y)
((immediate) (signed-reg unsigned-reg))
- (inst mov y (tn-value x)))
+ (let ((val (tn-value x)))
+ (if (zerop val)
+ (inst xor y y)
+ (inst mov y val))))
(define-move-fun (load-character 1) (vop x y)
((immediate) (character-reg))
;;; 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".)
-"0.9.14.27"
+"0.9.14.28"