Index: /branches/ia32/compiler/X86/x862.lisp
===================================================================
--- /branches/ia32/compiler/X86/x862.lisp	(revision 9580)
+++ /branches/ia32/compiler/X86/x862.lisp	(revision 9581)
@@ -7961,21 +7961,21 @@
                       (and offval (logtest 3 offval) (setq offval nil))
                       (and absptr (logtest 3 absptr) (setq absptr nil))))) 
-	   (with-additional-imm-reg ()
-	     (cond
-	       (fixnump
-		(with-imm-target () (dest :signed-natural)
-		  (cond
-		    (absptr                              
+	   (cond
+	     (fixnump
+	      (with-imm-target () (dest :signed-natural)
+		(cond
+		  (absptr                              
+		   (target-arch-case
+		    (:x8632 (! mem-ref-c-absolute-fullword dest absptr))
+		    (:x8664 (! mem-ref-c-absolute-doubleword dest  absptr))))
+		  (offval
+		   (with-imm-target () (src-reg :address)
+		     (x862-one-targeted-reg-form seg ptr src-reg)
 		     (target-arch-case
-		      (:x8632 (! mem-ref-c-absolute-fullword dest absptr))
-		      (:x8664 (! mem-ref-c-absolute-doubleword dest  absptr))))
-		    (offval
-		     (with-imm-target () (src-reg :address)
-		       (x862-one-targeted-reg-form seg ptr src-reg)
-		       (target-arch-case
-			(:x8632 (! mem-ref-c-fullword dest src-reg offval))
-			(:x8664 (! mem-ref-c-doubleword dest src-reg offval)))))
-		    (t
-		     (with-imm-target () (src-reg :address)
+		      (:x8632 (! mem-ref-c-fullword dest src-reg offval))
+		      (:x8664 (! mem-ref-c-doubleword dest src-reg offval)))))
+		  (t
+		   (with-imm-target () (src-reg :address)
+		     (with-additional-imm-reg ()
 		       (with-imm-target (src-reg) (offset-reg :signed-natural)
 			 (x862-one-targeted-reg-form seg ptr src-reg)
@@ -7992,18 +7992,19 @@
 			 (target-arch-case
 			  (:x8632 (! mem-ref-fullword dest src-reg offset-reg))
-			  (:x8664 (! mem-ref-doubleword dest src-reg offset-reg)))))))
-		  (if (node-reg-p vreg)
-		    (! box-fixnum vreg dest)
-		    (<- dest))))
-	       (signed
-		(with-imm-target () (dest :signed-natural)
-		  (cond
-		    (absptr
-		     (case size
-		       (8 (! mem-ref-c-absolute-signed-doubleword dest absptr))
-		       (4 (! mem-ref-c-absolute-signed-fullword dest  absptr))
-		       (2 (! mem-ref-c-absolute-s16 dest absptr))
-		       (1 (! mem-ref-c-absolute-s8 dest absptr))))
-		    (offval
+			  (:x8664 (! mem-ref-doubleword dest src-reg offset-reg))))))))
+		(if (node-reg-p vreg)
+		  (! box-fixnum vreg dest)
+		  (<- dest))))
+	     (signed
+	      (with-imm-target () (dest :signed-natural)
+		(cond
+		  (absptr
+		   (case size
+		     (8 (! mem-ref-c-absolute-signed-doubleword dest absptr))
+		     (4 (! mem-ref-c-absolute-signed-fullword dest  absptr))
+		     (2 (! mem-ref-c-absolute-s16 dest absptr))
+		     (1 (! mem-ref-c-absolute-s8 dest absptr))))
+		  (offval
+		   (with-additional-imm-reg ()
 		     (with-imm-target (dest) (src-reg :address)
 		       (x862-one-targeted-reg-form seg ptr src-reg)
@@ -8012,7 +8013,8 @@
 			 (4 (! mem-ref-c-signed-fullword dest src-reg offval))
 			 (2 (! mem-ref-c-s16 dest src-reg offval))
-			 (1 (! mem-ref-c-s8 dest src-reg offval)))))
-		    (t
-		     (with-imm-target () (src-reg :address)
+			 (1 (! mem-ref-c-s8 dest src-reg offval))))))
+		  (t
+		   (with-imm-target () (src-reg :address)
+		     (with-additional-imm-reg ()
 		       (with-imm-target (src-reg) (offset-reg :signed-natural)
 			 (x862-one-targeted-reg-form seg ptr src-reg)
@@ -8031,23 +8033,24 @@
 			   (4 (! mem-ref-signed-fullword dest src-reg offset-reg))
 			   (2 (! mem-ref-s16 dest src-reg offset-reg))
-			   (1 (! mem-ref-s8 dest src-reg offset-reg)))))))
-		  (if (node-reg-p vreg)
-		    (case size
-		      ((1 2) (! box-fixnum vreg dest))
-		      (4 (target-arch-case
-			  (:x8632 (<- dest))
-			  (:x8664 (! box-fixnum vreg dest))))
-		      (8 (<- dest)))
-		    (<- dest))))
-	       (t
-		(with-imm-target () (dest :natural)
-		  (cond
-		    (absptr
-		     (case size
-		       (8 (! mem-ref-c-absolute-doubleword dest absptr))
-		       (4 (! mem-ref-c-absolute-fullword dest absptr))
-		       (2 (! mem-ref-c-absolute-u16 dest absptr))
-		       (1 (! mem-ref-c-absolute-u8 dest absptr))))
-		    (offval
+			   (1 (! mem-ref-s8 dest src-reg offset-reg))))))))
+		(if (node-reg-p vreg)
+		  (case size
+		    ((1 2) (! box-fixnum vreg dest))
+		    (4 (target-arch-case
+			(:x8632 (<- dest))
+			(:x8664 (! box-fixnum vreg dest))))
+		    (8 (<- dest)))
+		  (<- dest))))
+	     (t
+	      (with-imm-target () (dest :natural)
+		(cond
+		  (absptr
+		   (case size
+		     (8 (! mem-ref-c-absolute-doubleword dest absptr))
+		     (4 (! mem-ref-c-absolute-fullword dest absptr))
+		     (2 (! mem-ref-c-absolute-u16 dest absptr))
+		     (1 (! mem-ref-c-absolute-u8 dest absptr))))
+		  (offval
+		   (with-additional-imm-reg ()
 		     (with-imm-target (dest) (src-reg :address)
 		       (x862-one-targeted-reg-form seg ptr src-reg)
@@ -8056,6 +8059,7 @@
 			 (4 (! mem-ref-c-fullword dest src-reg offval))
 			 (2 (! mem-ref-c-u16 dest src-reg offval))
-			 (1 (! mem-ref-c-u8 dest src-reg offval)))))
-		    (t
+			 (1 (! mem-ref-c-u8 dest src-reg offval))))))
+		  (t
+		   (with-additional-imm-reg ()
 		     (with-imm-target () (src-reg :address)
 		       (with-imm-target (src-reg) (offset-reg :signed-natural)
@@ -8075,13 +8079,13 @@
 			   (4 (! mem-ref-fullword dest src-reg offset-reg))
 			   (2 (! mem-ref-u16 dest src-reg offset-reg))
-			   (1 (! mem-ref-u8 dest src-reg offset-reg)))))))
-		  (<- (set-regspec-mode 
-		       dest 
-		       (gpr-mode-name-value
-			(case size
-			  (8 :u64)
-			  (4 :u32)
-			  (2 :u16)
-			  (1 :u8)))))))))
+			   (1 (! mem-ref-u8 dest src-reg offset-reg))))))))
+		(<- (set-regspec-mode 
+		     dest 
+		     (gpr-mode-name-value
+		      (case size
+			(8 :u64)
+			(4 :u32)
+			(2 :u16)
+			(1 :u8))))))))
            (^)))))
 
