- ;; (move result nil-value)
- (inst mov result nil-value))
- ((and star (= num 1))
- (move result (tn-ref-tn things)))
- (t
- (macrolet
- ((store-car (tn list &optional (slot cons-car-slot))
- `(let ((reg
- (sc-case ,tn
- ((any-reg descriptor-reg) ,tn)
- ((control-stack)
- (move temp ,tn)
- temp))))
- (storew reg ,list ,slot list-pointer-lowtag))))
- (let ((cons-cells (if star (1- num) num)))
- (pseudo-atomic
- (allocation res (* (pad-data-block cons-size) cons-cells) node)
- (inst lea res
- (make-ea :byte :base res :disp list-pointer-lowtag))
- (move ptr res)
- (dotimes (i (1- cons-cells))
- (store-car (tn-ref-tn things) ptr)
- (setf things (tn-ref-across things))
- (inst add ptr (pad-data-block cons-size))
- (storew ptr ptr (- cons-cdr-slot cons-size)
- list-pointer-lowtag))
- (store-car (tn-ref-tn things) ptr)
- (cond (star
- (setf things (tn-ref-across things))
- (store-car (tn-ref-tn things) ptr cons-cdr-slot))
- (t
- (storew nil-value ptr cons-cdr-slot
- list-pointer-lowtag)))
- (aver (null (tn-ref-across things)))))
- (move result res))))))
+ ;; (move result nil-value)
+ (inst mov result nil-value))
+ ((and star (= num 1))
+ (move result (tn-ref-tn things)))
+ (t
+ (macrolet
+ ((store-car (tn list &optional (slot cons-car-slot))
+ `(let ((reg
+ (sc-case ,tn
+ ((any-reg descriptor-reg) ,tn)
+ ((control-stack)
+ (move temp ,tn)
+ temp))))
+ (storew reg ,list ,slot list-pointer-lowtag))))
+ (let ((cons-cells (if star (1- num) num)))
+ (pseudo-atomic
+ (allocation res (* (pad-data-block cons-size) cons-cells) node
+ (awhen (sb!c::node-lvar node)
+ (sb!c::lvar-dynamic-extent it)))
+ (inst lea res
+ (make-ea :byte :base res :disp list-pointer-lowtag))
+ (move ptr res)
+ (dotimes (i (1- cons-cells))
+ (store-car (tn-ref-tn things) ptr)
+ (setf things (tn-ref-across things))
+ (inst add ptr (pad-data-block cons-size))
+ (storew ptr ptr (- cons-cdr-slot cons-size)
+ list-pointer-lowtag))
+ (store-car (tn-ref-tn things) ptr)
+ (cond (star
+ (setf things (tn-ref-across things))
+ (store-car (tn-ref-tn things) ptr cons-cdr-slot))
+ (t
+ (storew nil-value ptr cons-cdr-slot
+ list-pointer-lowtag)))
+ (aver (null (tn-ref-across things)))))
+ (move result res))))))