1.0.7.1: dynamic extent value cells
[sbcl.git] / src / compiler / x86-64 / alloc.lisp
index 7138cdd..c89b135 100644 (file)
     (inst lea result (make-ea :byte :base result :disp other-pointer-lowtag))
     (storew type result 0 other-pointer-lowtag)
     (storew length result vector-length-slot other-pointer-lowtag)
-    (inst xor zero zero)
+    (zeroize zero)
     (inst rep)
     (inst stos zero)))
 
             (make-ea :byte :base result :disp fun-pointer-lowtag))
       (storew (logior (ash (1- size) n-widetag-bits) closure-header-widetag)
               result 0 fun-pointer-lowtag))
-    (storew result result closure-self-slot fun-pointer-lowtag)
     (loadw temp function closure-fun-slot fun-pointer-lowtag)
     (storew temp result closure-fun-slot fun-pointer-lowtag))))
 
 (define-vop (make-value-cell)
   (:args (value :scs (descriptor-reg any-reg) :to :result))
   (:results (result :scs (descriptor-reg) :from :eval))
+  (:info stack-allocate-p)
   (:node-var node)
   (:generator 10
     (with-fixed-allocation
-        (result value-cell-header-widetag value-cell-size node)
+        (result value-cell-header-widetag value-cell-size node stack-allocate-p)
       (storew value result value-cell-value-slot other-pointer-lowtag))))
 \f
 ;;;; automatic allocators for primitive objects
   (:generator 1
     (inst mov result unbound-marker-widetag)))
 
+(define-vop (make-funcallable-instance-tramp)
+  (:args)
+  (:results (result :scs (any-reg)))
+  (:generator 1
+    (inst lea result (make-fixup "funcallable_instance_tramp" :foreign))))
+
 (define-vop (fixed-alloc)
   (:args)
   (:info name words type lowtag)