X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fsparc%2Fcell.lisp;h=8477eddf99e600a4d80042c67633c7d025bdb400;hb=69e6aef5e6fb3bd682c7a2cbf774034d2ea58ee8;hp=20a4a5b10898cfe8e4f8d801c7204f0894e91877;hpb=79a8e51bf4b06a5bd57bc90233605f98fee3b041;p=sbcl.git diff --git a/src/compiler/sparc/cell.lisp b/src/compiler/sparc/cell.lisp index 20a4a5b..8477edd 100644 --- a/src/compiler/sparc/cell.lisp +++ b/src/compiler/sparc/cell.lisp @@ -29,6 +29,8 @@ (:results) (:generator 1 (storew value object offset lowtag))) + +(define-vop (init-slot set-slot)) ;;;; Symbol hacking VOPs: @@ -157,6 +159,9 @@ ;;; Establish VAL as a binding for SYMBOL. Save the old value and the ;;; symbol on the binding stack and stuff the new value into the ;;; symbol. +;;; +;;; See the "Chapter 9: Specials" of the SBCL Internals Manual. + (define-vop (bind) (:args (val :scs (any-reg descriptor-reg)) (symbol :scs (descriptor-reg))) @@ -227,6 +232,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 cfp-tn object (+ closure-info-offset offset) fun-pointer-lowtag))) ;;;; value cell hackery. @@ -289,7 +300,7 @@ (:generator 5 (loadw offset object 0 instance-pointer-lowtag) (inst srl offset offset n-widetag-bits) - (inst sll offset offset 2) + (inst sll offset offset n-fixnum-tag-bits) (inst sub offset offset index) (inst add offset @@ -311,7 +322,7 @@ (:generator 5 (loadw offset object 0 instance-pointer-lowtag) (inst srl offset offset n-widetag-bits) - (inst sll offset offset 2) + (inst sll offset offset n-fixnum-tag-bits) (inst sub offset offset index) (inst add offset @@ -333,7 +344,7 @@ (:generator 5 (loadw offset object 0 instance-pointer-lowtag) (inst srl offset offset n-widetag-bits) - (inst sll offset offset 2) + (inst sll offset offset n-fixnum-tag-bits) (inst sub offset offset index) (inst add offset @@ -355,7 +366,7 @@ (:generator 5 (loadw offset object 0 instance-pointer-lowtag) (inst srl offset offset n-widetag-bits) - (inst sll offset offset 2) + (inst sll offset offset n-fixnum-tag-bits) (inst sub offset offset index) (inst add offset @@ -378,7 +389,7 @@ (:generator 5 (loadw offset object 0 instance-pointer-lowtag) (inst srl offset offset n-widetag-bits) - (inst sll offset offset 2) + (inst sll offset offset n-fixnum-tag-bits) (inst sub offset offset index) (inst add offset @@ -400,7 +411,7 @@ (:generator 5 (loadw offset object 0 instance-pointer-lowtag) (inst srl offset offset n-widetag-bits) - (inst sll offset offset 2) + (inst sll offset offset n-fixnum-tag-bits) (inst sub offset offset index) (inst add offset @@ -423,7 +434,7 @@ (:generator 5 (loadw offset object 0 instance-pointer-lowtag) (inst srl offset offset n-widetag-bits) - (inst sll offset offset 2) + (inst sll offset offset n-fixnum-tag-bits) (inst sub offset offset index) (inst add offset @@ -447,7 +458,7 @@ (:generator 5 (loadw offset object 0 instance-pointer-lowtag) (inst srl offset offset n-widetag-bits) - (inst sll offset offset 2) + (inst sll offset offset n-fixnum-tag-bits) (inst sub offset offset index) (inst add offset @@ -478,7 +489,7 @@ (:generator 5 (loadw offset object 0 instance-pointer-lowtag) (inst srl offset offset n-widetag-bits) - (inst sll offset offset 2) + (inst sll offset offset n-fixnum-tag-bits) (inst sub offset offset index) (inst add offset @@ -502,7 +513,7 @@ (:generator 5 (loadw offset object 0 instance-pointer-lowtag) (inst srl offset offset n-widetag-bits) - (inst sll offset offset 2) + (inst sll offset offset n-fixnum-tag-bits) (inst sub offset offset index) (inst add offset