X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fx86-64%2Fmove.lisp;h=b5c628bbea651c898c82b599e73db6c8e12dc474;hb=49e8403800426f37a54d9b87353a31af36e7af40;hp=1921dfacc4b30cdc1796b4748ec0297b27508db5;hpb=8146eeb8708fbc225169707a49b32e9e977d546e;p=sbcl.git diff --git a/src/compiler/x86-64/move.lisp b/src/compiler/x86-64/move.lisp index 1921dfa..b5c628b 100644 --- a/src/compiler/x86-64/move.lisp +++ b/src/compiler/x86-64/move.lisp @@ -187,19 +187,19 @@ ;; Lisp stack (etypecase val (integer - (storew (fixnumize val) fp (- (1+ (tn-offset y))))) + (storew (fixnumize val) fp (frame-word-offset (tn-offset y)))) (symbol (storew (+ nil-value (static-symbol-offset val)) - fp (- (1+ (tn-offset y))))) + fp (frame-word-offset (tn-offset y)))) (character (storew (logior (ash (char-code val) n-widetag-bits) character-widetag) - fp (- (1+ (tn-offset y)))))))) + fp (frame-word-offset (tn-offset y))))))) (if (= (tn-offset fp) esp-offset) ;; C-call (storew x fp (tn-offset y)) ;; Lisp stack - (storew x fp (- (1+ (tn-offset y)))))))))) + (storew x fp (frame-word-offset (tn-offset y))))))))) (define-move-vop move-arg :move-arg (any-reg descriptor-reg) @@ -218,7 +218,7 @@ (:vop-var vop) (:save-p :compute-only) (:generator 666 - (error-call vop object-not-type-error x type))) + (error-call vop 'object-not-type-error x type))) ;;;; moves and coercions @@ -248,7 +248,11 @@ (:results (y :scs (signed-reg unsigned-reg))) (:note "constant load") (:generator 1 - (inst mov y (tn-value x)))) + (cond ((sb!c::tn-leaf x) + (inst mov y (tn-value x))) + (t + (inst mov y x) + (inst sar y n-fixnum-tag-bits))))) (define-move-vop move-to-word-c :move (constant) (signed-reg unsigned-reg)) @@ -405,7 +409,7 @@ ((signed-stack unsigned-stack) (if (= (tn-offset fp) esp-offset) (storew x fp (tn-offset y)) ; c-call - (storew x fp (- (1+ (tn-offset y))))))))) + (storew x fp (frame-word-offset (tn-offset y)))))))) (define-move-vop move-word-arg :move-arg (descriptor-reg any-reg signed-reg unsigned-reg) (signed-reg unsigned-reg))