X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fcompiler%2Fx86-64%2Fcell.lisp;h=2c22d081320787738e1fd2a0144ddd92db137231;hb=2e5263a05f55e2b56a3194ad7853e9ae18ad69af;hp=632e19e1fab875f9ee86771d2e9ee5cc4d5e1c07;hpb=a157ed0be79751f85b8243c06102eea95af06aa3;p=sbcl.git diff --git a/src/compiler/x86-64/cell.lisp b/src/compiler/x86-64/cell.lisp index 632e19e..2c22d08 100644 --- a/src/compiler/x86-64/cell.lisp +++ b/src/compiler/x86-64/cell.lisp @@ -452,6 +452,12 @@ (define-vop (closure-init slot-set) (:variant closure-info-offset fun-pointer-lowtag)) + +(define-vop (closure-init-from-fp) + (:args (object :scs (descriptor-reg))) + (:info offset) + (:generator 4 + (storew rbp-tn object (+ closure-info-offset offset) fun-pointer-lowtag))) ;;;; value cell hackery @@ -530,7 +536,7 @@ (:generator 5 (loadw tmp object 0 instance-pointer-lowtag) (inst shr tmp n-widetag-bits) - (inst shl tmp 3) + (inst shl tmp n-fixnum-tag-bits) (inst sub tmp index) (inst mov value (make-ea-for-raw-slot object index tmp)))) @@ -563,7 +569,7 @@ (:generator 5 (loadw tmp object 0 instance-pointer-lowtag) (inst shr tmp n-widetag-bits) - (inst shl tmp 3) + (inst shl tmp n-fixnum-tag-bits) (inst sub tmp index) (inst mov (make-ea-for-raw-slot object index tmp) value) (move result value))) @@ -599,11 +605,11 @@ (:translate %raw-instance-atomic-incf/word) (:policy :fast-safe) (:args (object :scs (descriptor-reg)) - (diff :scs (signed-reg) :target result)) + (diff :scs (unsigned-reg) :target result)) (:arg-types * (:constant (load/store-index #.n-word-bytes #.instance-pointer-lowtag #.instance-slots-offset)) - signed-num) + unsigned-num) (:info index) (:temporary (:sc unsigned-reg) tmp) (:results (result :scs (unsigned-reg))) @@ -626,7 +632,7 @@ (:generator 5 (loadw tmp object 0 instance-pointer-lowtag) (inst shr tmp n-widetag-bits) - (inst shl tmp 3) + (inst shl tmp n-fixnum-tag-bits) (inst sub tmp index) (inst movss value (make-ea-for-raw-slot object index tmp)))) @@ -659,7 +665,7 @@ (:generator 5 (loadw tmp object 0 instance-pointer-lowtag) (inst shr tmp n-widetag-bits) - (inst shl tmp 3) + (inst shl tmp n-fixnum-tag-bits) (inst sub tmp index) (inst movss (make-ea-for-raw-slot object index tmp) value) (move result value))) @@ -703,7 +709,7 @@ (:generator 5 (loadw tmp object 0 instance-pointer-lowtag) (inst shr tmp n-widetag-bits) - (inst shl tmp 3) + (inst shl tmp n-fixnum-tag-bits) (inst sub tmp index) (inst movsd value (make-ea-for-raw-slot object index tmp)))) @@ -736,7 +742,7 @@ (:generator 5 (loadw tmp object 0 instance-pointer-lowtag) (inst shr tmp n-widetag-bits) - (inst shl tmp 3) + (inst shl tmp n-fixnum-tag-bits) (inst sub tmp index) (inst movsd (make-ea-for-raw-slot object index tmp) value) (move result value))) @@ -780,7 +786,7 @@ (:generator 5 (loadw tmp object 0 instance-pointer-lowtag) (inst shr tmp n-widetag-bits) - (inst shl tmp 3) + (inst shl tmp n-fixnum-tag-bits) (inst sub tmp index) (inst movq value (make-ea-for-raw-slot object index tmp)))) @@ -813,7 +819,7 @@ (:generator 5 (loadw tmp object 0 instance-pointer-lowtag) (inst shr tmp n-widetag-bits) - (inst shl tmp 3) + (inst shl tmp n-fixnum-tag-bits) (inst sub tmp index) (move result value) (inst movq (make-ea-for-raw-slot object index tmp) value))) @@ -857,7 +863,7 @@ (:generator 5 (loadw tmp object 0 instance-pointer-lowtag) (inst shr tmp n-widetag-bits) - (inst shl tmp 3) + (inst shl tmp n-fixnum-tag-bits) (inst sub tmp index) (inst movdqu value (make-ea-for-raw-slot object index tmp -8)))) @@ -890,7 +896,7 @@ (:generator 5 (loadw tmp object 0 instance-pointer-lowtag) (inst shr tmp n-widetag-bits) - (inst shl tmp 3) + (inst shl tmp n-fixnum-tag-bits) (inst sub tmp index) (move result value) (inst movdqu (make-ea-for-raw-slot object index tmp -8) value)))