X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcompiler%2Fppc%2Fcall.lisp;h=a67ea1833c8fa89d09723f3069ad6203894b81e7;hb=8886298f2c0e50e595cf481c426b6331ab898a23;hp=94f1c4ab45ca132f634afb3fc6678df930ce4edb;hpb=52cfe54802db8736f1f4e2b67764c43bba9b78b3;p=sbcl.git diff --git a/src/compiler/ppc/call.lisp b/src/compiler/ppc/call.lisp index 94f1c4a..a67ea18 100644 --- a/src/compiler/ppc/call.lisp +++ b/src/compiler/ppc/call.lisp @@ -138,7 +138,7 @@ (inst word 0)) (let* ((entry-point (gen-label))) (emit-label entry-point) - (inst compute-code-from-fn code-tn lip-tn entry-point temp)) + (inst compute-code-from-lip code-tn lip-tn entry-point temp)) ;; FIXME alpha port has a ### note here saying we should "save it ;; on the stack" so that GC sees it. No idea what "it" is -dan 20020110 ;; Build our stack frames. @@ -1043,11 +1043,9 @@ default-value-8 (emit-label loop) ;; *--dst = *--src, --count - (inst addi src src (- n-word-bytes)) + (inst lwzu temp src (- n-word-bytes)) (inst addic. count count (- (fixnumize 1))) - (loadw temp src) - (inst addi dst dst (- n-word-bytes)) - (storew temp dst) + (inst stwu temp dst (- n-word-bytes)) (inst bgt loop) (emit-label do-regs) @@ -1092,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. @@ -1103,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.