Simplify (and robustify) regular PACKing
[sbcl.git] / src / compiler / ppc / alloc.lisp
index e3dd0fb..f903dd4 100644 (file)
 (in-package "SB!VM")
 \f
 ;;;; LIST and LIST*
-(defoptimizer (list stack-allocate-result) ((&rest args))
-  (not (null args)))
-(defoptimizer (list* stack-allocate-result) ((&rest args))
-  (not (null (rest args))))
-
 (define-vop (list-or-list*)
   (:args (things :more t))
   (:temporary (:scs (descriptor-reg) :type list) ptr)
 
 (define-vop (make-unbound-marker)
   (:args)
-  (:results (result :scs (any-reg)))
+  (:results (result :scs (descriptor-reg any-reg)))
   (:generator 1
     (inst li result unbound-marker-widetag)))
 
 (define-vop (fixed-alloc)
   (:args)
   (:info name words type lowtag stack-allocate-p)
-  (:ignore name stack-allocate-p)
+  (:ignore name)
   (:results (result :scs (descriptor-reg)))
   (:temporary (:scs (non-descriptor-reg)) temp)
   (:temporary (:sc non-descriptor-reg :offset nl3-offset) pa-flag)
   (:generator 4
-    (with-fixed-allocation (result pa-flag temp type words :lowtag lowtag)
+    (with-fixed-allocation (result pa-flag temp type words
+                                   :lowtag lowtag
+                                   :stack-allocate-p stack-allocate-p)
       )))
 
 (define-vop (var-alloc)
   (:temporary (:sc non-descriptor-reg :offset nl3-offset) pa-flag)
   (:generator 6
     (inst addi bytes extra (* (1+ words) n-word-bytes))
-    (inst slwi header bytes (- n-widetag-bits 2))
+    (inst slwi header bytes (- n-widetag-bits n-fixnum-tag-bits))
     (inst addi header header (+ (ash -2 n-widetag-bits) type))
     (inst clrrwi bytes bytes n-lowtag-bits)
     (pseudo-atomic (pa-flag)