Index: /trunk/ccl/compiler/PPC/ppc2.lisp
===================================================================
--- /trunk/ccl/compiler/PPC/ppc2.lisp	(revision 6286)
+++ /trunk/ccl/compiler/PPC/ppc2.lisp	(revision 6287)
@@ -1582,25 +1582,30 @@
                                             j ($ ppc::arg_y)
                                             new val-reg))))
-        (when safe      
-          (when (typep safe 'fixnum)
-            (! trap-unless-simple-array-2
-               src
-               (dpb safe target::arrayH.flags-cell-subtag-byte
-                    (ash 1 $arh_simple_bit))
-               (nx-error-for-simple-2d-array-type type-keyword)))
-          (unless i-known-fixnum
-            (! trap-unless-fixnum unscaled-i))
-          (unless j-known-fixnum
-            (! trap-unless-fixnum unscaled-j)))
-        (with-imm-target () dim1
-          (let* ((idx-reg ($ ppc::arg_y)))
-            (unless constidx
-              (if safe                  
-                (! check-2d-bound dim1 unscaled-i unscaled-j src)
-                (! 2d-dim1 dim1 src))
-              (! 2d-unscaled-index idx-reg dim1 unscaled-i unscaled-j))
-            (let* ((v ($ ppc::arg_x)))
-              (! array-data-vector-ref v src)
-              (ppc2-vset1 seg vreg xfer type-keyword v idx-reg constidx val-reg (ppc2-unboxed-reg-for-aset seg type-keyword val-reg safe constval) constval needs-memoization))))))))
+        (let* ((*available-backend-imm-temps* *available-backend-imm-temps*))
+          (when (and (= (hard-regspec-class val-reg) hard-reg-class-gpr)
+                     (logbitp (hard-regspec-value val-reg)
+                              *backend-imm-temps*))
+            (use-imm-temp (hard-regspec-value val-reg)))
+          (when safe      
+            (when (typep safe 'fixnum)
+              (! trap-unless-simple-array-2
+                 src
+                 (dpb safe target::arrayH.flags-cell-subtag-byte
+                      (ash 1 $arh_simple_bit))
+                 (nx-error-for-simple-2d-array-type type-keyword)))
+            (unless i-known-fixnum
+              (! trap-unless-fixnum unscaled-i))
+            (unless j-known-fixnum
+              (! trap-unless-fixnum unscaled-j)))
+          (with-imm-target () dim1
+            (let* ((idx-reg ($ ppc::arg_y)))
+              (unless constidx
+                (if safe                  
+                  (! check-2d-bound dim1 unscaled-i unscaled-j src)
+                  (! 2d-dim1 dim1 src))
+                (! 2d-unscaled-index idx-reg dim1 unscaled-i unscaled-j))
+              (let* ((v ($ ppc::arg_x)))
+                (! array-data-vector-ref v src)
+                (ppc2-vset1 seg vreg xfer type-keyword v idx-reg constidx val-reg (ppc2-unboxed-reg-for-aset seg type-keyword val-reg safe constval) constval needs-memoization)))))))))
 
 
@@ -1643,33 +1648,39 @@
              (ppc2-one-untargeted-reg-form seg array ($ ppc::arg_z)))
             (ppc2-four-targeted-reg-forms seg
-                                            i ($ ppc::temp0)
-                                            j ($ ppc::arg_x)
-                                            k ($ ppc::arg_y)
-                                            new val-reg)
+                                          i ($ ppc::temp0)
+                                          j ($ ppc::arg_x)
+                                          k ($ ppc::arg_y)
+                                          new val-reg)
             (ppc2-pop-register seg src)))
-        (when safe      
-          (when (typep safe 'fixnum)
-            (! trap-unless-simple-array-3
-               src
-               (dpb safe target::arrayH.flags-cell-subtag-byte
-                    (ash 1 $arh_simple_bit))
-               (nx-error-for-simple-3d-array-type type-keyword)))
-          (unless i-known-fixnum
-            (! trap-unless-fixnum unscaled-i))
-          (unless j-known-fixnum
-            (! trap-unless-fixnum unscaled-j))
-          (unless k-known-fixnum
-            (! trap-unless-fixnum unscaled-k)))
-        (with-imm-target () dim1
-          (with-imm-target (dim1) dim2
-            (let* ((idx-reg ($ ppc::arg_y)))
-              (unless constidx
-                (if safe                  
-                  (! check-3d-bound dim1 dim2 unscaled-i unscaled-j unscaled-k src)
-                  (! 3d-dims dim1 dim2 src))
-                (! 3d-unscaled-index idx-reg dim1 dim2 unscaled-i unscaled-j unscaled-k))
-              (let* ((v ($ ppc::arg_x)))
-                (! array-data-vector-ref v src)
-                (ppc2-vset1 seg vreg xfer type-keyword v idx-reg constidx val-reg (ppc2-unboxed-reg-for-aset seg type-keyword val-reg safe constval) constval needs-memoization)))))))))
+        (let* ((*available-backend-imm-temps* *available-backend-imm-temps*))
+          (when (and (= (hard-regspec-class val-reg) hard-reg-class-gpr)
+                     (logbitp (hard-regspec-value val-reg)
+                              *backend-imm-temps*))
+            (use-imm-temp (hard-regspec-value val-reg)))
+
+          (when safe      
+            (when (typep safe 'fixnum)
+              (! trap-unless-simple-array-3
+                 src
+                 (dpb safe target::arrayH.flags-cell-subtag-byte
+                      (ash 1 $arh_simple_bit))
+                 (nx-error-for-simple-3d-array-type type-keyword)))
+            (unless i-known-fixnum
+              (! trap-unless-fixnum unscaled-i))
+            (unless j-known-fixnum
+              (! trap-unless-fixnum unscaled-j))
+            (unless k-known-fixnum
+              (! trap-unless-fixnum unscaled-k)))
+          (with-imm-target () dim1
+            (with-imm-target (dim1) dim2
+              (let* ((idx-reg ($ ppc::arg_y)))
+                (unless constidx
+                  (if safe                  
+                    (! check-3d-bound dim1 dim2 unscaled-i unscaled-j unscaled-k src)
+                    (! 3d-dims dim1 dim2 src))
+                  (! 3d-unscaled-index idx-reg dim1 dim2 unscaled-i unscaled-j unscaled-k))
+                (let* ((v ($ ppc::arg_x)))
+                  (! array-data-vector-ref v src)
+                  (ppc2-vset1 seg vreg xfer type-keyword v idx-reg constidx val-reg (ppc2-unboxed-reg-for-aset seg type-keyword val-reg safe constval) constval needs-memoization))))))))))
 
 (defun ppc2-aref2 (seg vreg xfer array i j safe typekeyword &optional dim0 dim1)
