Index: /trunk/ccl/compiler/X86/x862.lisp
===================================================================
--- /trunk/ccl/compiler/X86/x862.lisp	(revision 6306)
+++ /trunk/ccl/compiler/X86/x862.lisp	(revision 6307)
@@ -1735,10 +1735,9 @@
                                           new val-reg)
             (x862-pop-register seg src)))
-        (let* ((*available-backend-imm-temps* *available-backend-imm-temps*))
-          (when (and (= (hard-regspec-class val-reg) hard-reg-class-gpr)
+        (let* ((need-push-val-reg
+                (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)))
-        
+                              *backend-imm-temps*))))
+          (when need-push-val-reg (x862-push-register seg val-reg))
           (when safe      
             (when (typep safe 'fixnum)
@@ -1767,4 +1766,6 @@
                 (let* ((v ($ x8664::arg_x)))
                   (! array-data-vector-ref v src)
+                  (when need-push-val-reg
+                    (x862-pop-register seg val-reg))
                   (x862-vset1 seg vreg xfer type-keyword v idx-reg constidx val-reg (x862-unboxed-reg-for-aset seg type-keyword val-reg safe constval) constval needs-memoization))))))))))
 
