Index: /branches/ia32/lisp-kernel/x86-gc.c
===================================================================
--- /branches/ia32/lisp-kernel/x86-gc.c	(revision 9584)
+++ /branches/ia32/lisp-kernel/x86-gc.c	(revision 9585)
@@ -1720,5 +1720,5 @@
 #else
 void
-mark_xp(ExceptionInformation *xp, unsigned char node_regs_mask)
+mark_xp(ExceptionInformation *xp, natural node_regs_mask)
 {
   natural *regs = (natural *) xpGPRvector(xp), dnode;
@@ -1726,7 +1726,12 @@
   int i;
 
-  for (i = 0; i < 8; i++)
-    if (node_regs_mask & (1<<i))
-      mark_root(regs[i]);
+  if (node_regs_mask & (1<<0)) mark_root(regs[REG_EAX]);
+  if (node_regs_mask & (1<<1)) mark_root(regs[REG_EBX]);
+  if (node_regs_mask & (1<<2)) mark_root(regs[REG_ECX]);
+  if (node_regs_mask & (1<<3)) mark_root(regs[REG_EDX]);
+  if (node_regs_mask & (1<<4)) mark_root(regs[REG_ESP]);
+  if (node_regs_mask & (1<<5)) mark_root(regs[REG_EBP]);
+  if (node_regs_mask & (1<<6)) mark_root(regs[REG_ESI]);
+  if (node_regs_mask & (1<<7)) mark_root(regs[REG_EDI]);
 
   /* If the EIP isn't pointing into a marked function, we're probably
@@ -2372,4 +2377,5 @@
 }
 
+#ifdef X8664
 void
 forward_xp(ExceptionInformation *xp)
@@ -2377,5 +2383,4 @@
   natural *regs = (natural *) xpGPRvector(xp);
 
-#ifdef X8664
   update_noderef(&(regs[Iarg_z]));
   update_noderef(&(regs[Iarg_y]));
@@ -2390,10 +2395,20 @@
   update_noderef(&(regs[Itemp2]));
   update_locref(&(regs[Iip]));
+}
 #else
-  update_noderef(&(regs[Iarg_z]));
-  update_noderef(&(regs[Iarg_y]));
-  update_noderef(&(regs[Ifn]));
-  update_noderef(&(regs[Itemp0]));
-  update_noderef(&(regs[Itemp1]));
+void
+forward_xp(ExceptionInformation *xp, natural node_regs_mask)
+{
+  natural *regs = (natural *) xpGPRvector(xp);
+
+  if (node_regs_mask & (1<<0)) update_noderef(&regs[REG_EAX]);
+  if (node_regs_mask & (1<<1)) update_noderef(&regs[REG_EBX]);
+  if (node_regs_mask & (1<<2)) update_noderef(&regs[REG_ECX]);
+  if (node_regs_mask & (1<<3)) update_noderef(&regs[REG_EDX]);
+  if (node_regs_mask & (1<<4)) update_noderef(&regs[REG_ESP]);
+  if (node_regs_mask & (1<<5)) update_noderef(&regs[REG_EBP]);
+  if (node_regs_mask & (1<<6)) update_noderef(&regs[REG_ESI]);
+  if (node_regs_mask & (1<<7)) update_noderef(&regs[REG_EDI]);
+
   update_locref(&(regs[Iip]));
 #endif
@@ -2427,8 +2442,16 @@
   xp = tcr->gc_context;
   if (xp) {
+#ifdef X8664
     forward_xp(xp);
+#else
+    forward_xp(xp, tcr->node_regs_mask);
+#endif
   }
   for (xframes = tcr->xframe; xframes; xframes = xframes->prev) {
+#ifdef X8664
     forward_xp(xframes->curr);
+#else
+    forward_xp(xframes->curr, xframes->node_regs_mask);
+#endif
   }
 }
