0)
("no" "maybe" "yes" "yes"))
+(define-optimization-quality stack-allocate-vector
+ (cond ((= stack-allocate-dynamic-extent 0) 0)
+ ((= safety 0) 3)
+ (t 2))
+ ("no" "maybe" "one page" "yes"))
+
(define-optimization-quality float-accuracy
3
("degraded" "full" "full" "full"))
:values-documentation ',documentation)))
(if acons
(setf (cdr acons) item)
- (push `(,',name . ,item) *policy-dependent-qualities*)))
+ (setf *policy-dependent-qualities*
+ (nconc *policy-dependent-qualities* (list `(,',name . ,item))))))
',name))
(:variant t))
\f
;;;; special-purpose inline allocators
-(defoptimizer (allocate-vector stack-allocate-result) ((type length words))
- t)
+(defoptimizer (allocate-vector stack-allocate-result)
+ ((type length words) node)
+ (ecase (policy node sb!c::stack-allocate-vector)
+ (0 nil)
+ ((1 2)
+ ;; a vector object should fit in one page
+ (values-subtypep (sb!c::lvar-derived-type words)
+ (load-time-value
+ (specifier-type `(integer 0 ,(- (/ *backend-page-size*
+ n-word-bytes)
+ vector-data-offset))))))
+ (3 t)))
(define-vop (allocate-vector)
(:args (type :scs (unsigned-reg))
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.8.21.47"
+"0.8.21.48"