- (assemble ()
- ;; Allocate a cons (2 words) for each item.
- (inst clrrwi result alloc-tn n-lowtag-bits)
- (inst ori result result list-pointer-lowtag)
- (move dst result)
- (inst slwi temp count 1)
- (inst add alloc-tn alloc-tn temp)
- (inst b enter)
-
- ;; Compute the next cons and store it in the current one.
- LOOP
- (inst addi dst dst (* 2 n-word-bytes))
- (storew dst dst -1 list-pointer-lowtag)
-
- ;; Grab one value.
- ENTER
- (loadw temp context)
- (inst addi context context n-word-bytes)
-
- ;; Dec count, and if != zero, go back for more.
- (inst addic. count count (- (fixnumize 1)))
- ;; Store the value into the car of the current cons (in the delay
- ;; slot).
- (storew temp dst 0 list-pointer-lowtag)
- (inst bgt loop)
-
-
- ;; NIL out the last cons.
- (storew null-tn dst 1 list-pointer-lowtag)))
- DONE))
+ (when dx-p
+ (align-csp temp))
+ ;; Allocate a cons (2 words) for each item.
+ (inst clrrwi result alloc-area-tn n-lowtag-bits)
+ (inst ori result result list-pointer-lowtag)
+ (move dst result)
+ (inst slwi temp count 1)
+ (inst add alloc-area-tn alloc-area-tn temp)
+ (inst b enter)
+
+ ;; Compute the next cons and store it in the current one.
+ (emit-label loop)
+ (inst addi dst dst (* 2 n-word-bytes))
+ (storew dst dst -1 list-pointer-lowtag)
+
+ ;; Grab one value.
+ (emit-label enter)
+ (loadw temp context)
+ (inst addi context context n-word-bytes)
+
+ ;; Dec count, and if != zero, go back for more.
+ (inst addic. count count (- (fixnumize 1)))
+ ;; Store the value into the car of the current cons (in the delay
+ ;; slot).
+ (storew temp dst 0 list-pointer-lowtag)
+ (inst bgt loop)
+
+ ;; NIL out the last cons.
+ (storew null-tn dst 1 list-pointer-lowtag))
+ (emit-label done))))