0.9.13.52: Windows installer tweaks
[sbcl.git] / src / compiler / ppc / call.lisp
index 94f1c4a..a67ea18 100644 (file)
       (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.