X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fsparc%2Fcell.lisp;h=c9613aabcab82e96673d3926cec1cd89b17b1826;hb=57d30b9b5a4b2be52431e0a8daaf81d409d146a9;hp=9903824cce5ba3b6de96fdea393860f3ca81d8c0;hpb=52cfe54802db8736f1f4e2b67764c43bba9b78b3;p=sbcl.git diff --git a/src/compiler/sparc/cell.lisp b/src/compiler/sparc/cell.lisp index 9903824..c9613aa 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: @@ -92,6 +94,13 @@ ;; ensure this is explained in the comment in objdef.lisp (loadw res symbol symbol-hash-slot other-pointer-lowtag) (inst andn res res fixnum-tag-mask))) + +;;; On unithreaded builds these are just copies of the non-global versions. +(define-vop (%set-symbol-global-value set)) +(define-vop (symbol-global-value symbol-value) + (:translate symbol-global-value)) +(define-vop (fast-symbol-global-value fast-symbol-value) + (:translate symbol-global-value)) ;;;; FDEFINITION (fdefn) objects. (define-vop (fdefn-fun cell-ref) @@ -168,6 +177,7 @@ (loadw value bsp-tn (- binding-value-slot binding-size)) (storew value symbol symbol-value-slot other-pointer-lowtag) (storew zero-tn bsp-tn (- binding-symbol-slot binding-size)) + (storew zero-tn bsp-tn (- binding-value-slot binding-size)) (inst sub bsp-tn bsp-tn (* 2 n-word-bytes)))) (define-vop (unbind-to-here) @@ -192,6 +202,7 @@ (storew zero-tn bsp-tn (- binding-symbol-slot binding-size)) (emit-label skip) + (storew zero-tn bsp-tn (- binding-value-slot binding-size)) (inst sub bsp-tn bsp-tn (* 2 n-word-bytes)) (inst cmp where bsp-tn) (inst b :ne loop) @@ -213,15 +224,17 @@ (:variant funcallable-instance-info-offset fun-pointer-lowtag) (:translate %set-funcallable-instance-info)) -(define-vop (funcallable-instance-lexenv cell-ref) - (:variant funcallable-instance-lexenv-slot fun-pointer-lowtag)) - - (define-vop (closure-ref slot-ref) (:variant closure-info-offset fun-pointer-lowtag)) (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. @@ -244,25 +257,6 @@ (loadw temp struct 0 instance-pointer-lowtag) (inst srl res temp n-widetag-bits))) -(define-vop (instance-ref slot-ref) - (:variant instance-slots-offset instance-pointer-lowtag) - (:policy :fast-safe) - (:translate %instance-ref) - (:arg-types * (:constant index))) - -;;; This VOP has no :results; however, %instance-set must return a -;;; value. This caused, in the forward port to 0.7.x, an error in -;;; !fdefn-cold-init: "argument X is not a REAL: NIL". This VOP is -;;; commented out for now, pending the addition of checking code to -;;; the define-vop machinery to ascertain that this was indeed the -;;; problem. -- CSR, 2002-02-12 -#+nil -(define-vop (instance-set slot-set) - (:policy :fast-safe) - (:translate %instance-set) - (:variant instance-slots-offset instance-pointer-lowtag) - (:arg-types * (:constant index) *)) - (define-vop (instance-index-ref word-index-ref) (:policy :fast-safe) (:translate %instance-ref) @@ -303,7 +297,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 @@ -325,7 +319,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 @@ -347,7 +341,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 @@ -369,7 +363,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 @@ -392,7 +386,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 @@ -414,7 +408,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 @@ -437,7 +431,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 @@ -461,7 +455,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 @@ -492,7 +486,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 @@ -516,7 +510,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