diff --git a/compiler/mips/cell.lisp b/compiler/mips/cell.lisp index f7f6317852d36d57e7af14578d5a2d617ef0073e..01b8428d9a71b786a4253a5f9f789bcf0681a123 100644 --- a/compiler/mips/cell.lisp +++ b/compiler/mips/cell.lisp @@ -7,7 +7,7 @@ ;;; Scott Fahlman or slisp-group@cs.cmu.edu. ;;; (ext:file-comment - "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/cell.lisp,v 1.61 1992/12/13 15:23:10 wlott Exp $") + "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/mips/cell.lisp,v 1.62 1992/12/16 13:58:00 wlott Exp $") ;;; ;;; ********************************************************************** ;;; @@ -35,13 +35,17 @@ (define-vop (set-slot) (:args (object :scs (descriptor-reg)) (value :scs (descriptor-reg any-reg))) - (:info name offset lowtag) + (:info name offset lowtag #+gengc remember) (:ignore name) (:results) (:generator 1 + #+gengc + (if remember + (storew-and-remember-slot value object offset lowtag) + (storew value object offset lowtag)) + #-gengc (storew value object offset lowtag))) - ;;;; Symbol hacking VOPs: @@ -102,6 +106,9 @@ ;;;; Fdefinition (fdefn) objects. +(define-vop (fdefn-function cell-ref) + (:variant fdefn-function-slot-slot other-pointer-type)) + (define-vop (safe-fdefn-function) (:args (object :scs (descriptor-reg) :target obj-temp)) (:results (value :scs (descriptor-reg any-reg))) @@ -134,8 +141,10 @@ function-pointer-type)) (inst li lip (make-fixup "closure_tramp" :foreign)) (emit-label normal-fn) - (storew function fdefn fdefn-function-slot other-pointer-type) (storew lip fdefn fdefn-raw-addr-slot other-pointer-type) + (#+gengc storew-and-remember-object #-gengc storew + function fdefn fdefn-function-slot + other-pointer-type) (move result function)))) (define-vop (fdefn-makunbound) @@ -167,7 +176,8 @@ (inst addu bsp-tn bsp-tn (* 2 word-bytes)) (storew temp bsp-tn (- binding-value-slot binding-size)) (storew symbol bsp-tn (- binding-symbol-slot binding-size)) - (storew val symbol symbol-value-slot other-pointer-type))) + (#+gengc storew-and-remember-slot #-gengc storew + val symbol symbol-value-slot other-pointer-type))) (define-vop (unbind) @@ -175,7 +185,8 @@ (:generator 0 (loadw symbol bsp-tn (- binding-symbol-slot binding-size)) (loadw value bsp-tn (- binding-value-slot binding-size)) - (storew value symbol symbol-value-slot other-pointer-type) + (#+gengc storew-and-remember-slot #-gengc + value symbol symbol-value-slot other-pointer-type) (storew zero-tn bsp-tn (- binding-symbol-slot binding-size)) (inst addu bsp-tn bsp-tn (* -2 word-bytes)))) @@ -195,7 +206,8 @@ (loadw symbol bsp-tn (- binding-symbol-slot binding-size)) (inst beq symbol zero-tn skip) (loadw value bsp-tn (- binding-value-slot binding-size)) - (storew value symbol symbol-value-slot other-pointer-type) + (#+gengc storew-and-remember-slot #-gengc + value symbol symbol-value-slot other-pointer-type) (storew zero-tn bsp-tn (- binding-symbol-slot binding-size)) (emit-label skip)