Index: /trunk/source/lisp-kernel/x86-gc.c
===================================================================
--- /trunk/source/lisp-kernel/x86-gc.c	(revision 12814)
+++ /trunk/source/lisp-kernel/x86-gc.c	(revision 12815)
@@ -2909,4 +2909,5 @@
 }
 
+#ifdef X8664
 static void
 wp_update_xp(ExceptionInformation *xp, LispObj old, LispObj new)
@@ -2914,5 +2915,4 @@
   natural *regs = (natural *)xpGPRvector(xp);
 
-#ifdef X8664
   wp_maybe_update(&regs[Iarg_z], old, new);
   wp_maybe_update(&regs[Iarg_y], old, new);
@@ -2926,5 +2926,4 @@
   wp_maybe_update(&regs[Itemp1], old, new);
   wp_maybe_update(&regs[Itemp2], old, new);
-#endif
 
 #if 0
@@ -2935,6 +2934,28 @@
   update_locref(&(regs[Iip]));
 #endif
-
-}
+}
+#else
+static void
+wp_update_xp(ExceptionInformation *xp, LispObj old, LispObj new, natural node_regs_mask)
+{
+  natural *regs = (natural *)xpGPRvector(xp);
+
+  if (node_regs_mask & (1<<0)) wp_maybe_update(&regs[REG_EAX], old, new);
+  if (node_regs_mask & (1<<1)) wp_maybe_update(&regs[REG_ECX], old, new);
+
+  if (regs[REG_EFL] & EFL_DF) {
+    /* then EDX is an imm reg */
+    ;
+  } else
+    if (node_regs_mask & (1<<2)) wp_maybe_update(&regs[REG_EDX], old, new);
+
+  if (node_regs_mask & (1<<3)) wp_maybe_update(&regs[REG_EBX], old, new);
+  if (node_regs_mask & (1<<4)) wp_maybe_update(&regs[REG_ESP], old, new);
+  if (node_regs_mask & (1<<5)) wp_maybe_update(&regs[REG_EBP], old, new);
+  if (node_regs_mask & (1<<6)) wp_maybe_update(&regs[REG_ESI], old, new);
+  if (node_regs_mask & (1<<7)) wp_maybe_update(&regs[REG_EDI], old, new);
+  /* we shouldn't watch functions, so no need to update PC */
+}
+#endif
 
 static void
@@ -2944,13 +2965,24 @@
   ExceptionInformation *xp;
 
-#ifdef X8664
   xp = tcr->gc_context;
   if (xp) {
+#ifdef X8664
     wp_update_xp(xp, old, new);
+#else
+    wp_update_xp(xp, old, new, tcr->node_regs_mask);
+    wp_maybe_update(&tcr->save0, old, new);
+    wp_maybe_update(&tcr->save1, old, new);
+    wp_maybe_update(&tcr->save2, old, new);
+    wp_maybe_update(&tcr->save3, old, new);
+    wp_maybe_update(&tcr->next_method_context, old, new);
+#endif
   }
   for (xframes = tcr->xframe; xframes; xframes = xframes->prev) {
+#ifdef X8664
     wp_update_xp(xframes->curr, old, new);
-  }
-#endif
+#else
+    wp_update_xp(xframes->curr, old, new, xframes->node_regs_mask);
+#endif
+  }
 }
 
