- (let ((size (+ length closure-info-offset)))
- (inst li temp (logior (ash (1- size) n-widetag-bits) closure-header-widetag))
- (pseudo-atomic (pa-flag :extra (pad-data-block size))
- (inst or result alloc-tn fun-pointer-lowtag)
+ (let* ((size (+ length closure-info-offset))
+ (alloc-size (pad-data-block size)))
+ (pseudo-atomic (pa-flag :extra (if stack-allocate-p 0 alloc-size))
+ (cond (stack-allocate-p
+ (align-csp result)
+ (inst srl result csp-tn n-lowtag-bits)
+ (inst addu csp-tn alloc-size))
+ (t
+ (inst srl result alloc-tn n-lowtag-bits)))
+ (inst sll result n-lowtag-bits)
+ (inst or result fun-pointer-lowtag)
+ (inst li temp (logior (ash (1- size) n-widetag-bits)
+ closure-header-widetag))