X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fppc%2Fcall.lisp;h=a67ea1833c8fa89d09723f3069ad6203894b81e7;hb=8886298f2c0e50e595cf481c426b6331ab898a23;hp=ece3e570b192d770207542734192b0da224771aa;hpb=3fb47b51497ebc70f2be4c5792885f16bfebfd48;p=sbcl.git diff --git a/src/compiler/ppc/call.lisp b/src/compiler/ppc/call.lisp index ece3e57..a67ea18 100644 --- a/src/compiler/ppc/call.lisp +++ b/src/compiler/ppc/call.lisp @@ -1043,8 +1043,8 @@ default-value-8 (emit-label loop) ;; *--dst = *--src, --count - (inst addic. count count (- (fixnumize 1))) (inst lwzu temp src (- n-word-bytes)) + (inst addic. count count (- (fixnumize 1))) (inst stwu temp dst (- n-word-bytes)) (inst bgt loop) @@ -1090,8 +1090,7 @@ default-value-8 (let* ((enter (gen-label)) (loop (gen-label)) (done (gen-label)) - (dx-p (node-stack-allocate-p node)) - (alloc-area-tn (if dx-p csp-tn alloc-tn))) + (dx-p (node-stack-allocate-p node))) (move context context-arg) (move count count-arg) ;; Check to see if there are any arguments. @@ -1101,14 +1100,21 @@ default-value-8 ;; We need to do this atomically. (pseudo-atomic (pa-flag) - (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) + (if dx-p + (progn + (align-csp temp) + (inst clrrwi result csp-tn n-lowtag-bits) + (inst ori result result list-pointer-lowtag) + (move dst result) + (inst slwi temp count 1) + (inst add csp-tn csp-tn temp)) + (progn + (inst slwi temp count 1) + (allocation result temp list-pointer-lowtag + :temp-tn dst + :flag-tn pa-flag) + (move dst result))) (inst b enter) ;; Compute the next cons and store it in the current one.