Index: /branches/ia32/lisp-kernel/x86-gc.c
===================================================================
--- /branches/ia32/lisp-kernel/x86-gc.c	(revision 9745)
+++ /branches/ia32/lisp-kernel/x86-gc.c	(revision 9746)
@@ -534,8 +534,8 @@
 #ifdef X8664
 #define RMARK_PREV_ROOT fulltag_imm_1 /* fulltag of 'undefined' value */
-#define RMARK_PREV_CAR fulltag_nil /* fulltag_nil + node_size. Coincidence ? I think not. */
+#define RMARK_PREV_CAR fulltag_nil /* fulltag_cons + node_size. Coincidence ? I think not. */
 #else
-#define RMARK_PREV_ROOT fulltag_imm
-#define RMARK_PREV_CAR fulltag_immheader
+#define RMARK_PREV_ROOT fulltag_imm /* fulltag of 'undefined' value */
+#define RMARK_PREV_CAR fulltag_odd_fixnum 
 #endif
 
@@ -811,5 +811,5 @@
       goto ClimbCar;
 
-      /* default: abort() */
+    default: abort();
     }
 
@@ -820,5 +820,9 @@
   MarkCons:
     next = deref(this,1);
+#ifdef X8632
+    this += (RMARK_PREV_CAR-fulltag_cons);
+#else
     this += node_size;
+#endif
     tag_n = fulltag_of(next);
     if (!is_node_fulltag(tag_n)) goto MarkCdr;
@@ -838,5 +842,9 @@
   MarkCdr:
     next = deref(this, 0);
+#ifdef X8632
+    this -= (RMARK_PREV_CAR-fulltag_cons);
+#else
     this -= node_size;
+#endif
     tag_n = fulltag_of(next);
     if (!is_node_fulltag(tag_n)) goto Climb;
@@ -915,6 +923,6 @@
        * we've finished marking the function vector.
        */
-      ((int *)boundary)[1] &= 0xff;
-      ((int *)boundary)[1] |= (this-(LispObj)boundary) << 8;
+      *((int *)boundary) &= 0xff;
+      *((int *)boundary) |= ((this-(LispObj)boundary) << 8);
       this = (LispObj)(base)+fulltag_misc;
       dnode = gc_area_dnode(this);
@@ -926,6 +934,6 @@
       if (subtag == subtag_function) {
         boundary = base + (unsigned short)base[1];
-	((int *)boundary)[1] &= 0xff;
-        ((int *)boundary)[1] |= (this-((LispObj)boundary)) << 8;
+	*((int *)boundary) &= 0xff;
+        *((int *)boundary) |= ((this-((LispObj)boundary)) << 8);
       }
     }
@@ -996,5 +1004,4 @@
 #else
     if ((tag_of(this) == tag_misc) &&
-	(header_subtag(this) == subtag_function) &&
         (header_subtag(next) == function_boundary_marker)) goto MarkFunctionDone;
 #endif
@@ -1029,6 +1036,6 @@
     (((int *)boundary)[1]) = 0;
 #else
-    this = ((LispObj)boundary) + ((int *)boundary)[1] >> 8;
-    ((int *)boundary)[1] &= 0xff;
+    this = ((LispObj)boundary) + ((*((int *)boundary)) >> 8);
+    ((int *)boundary)[0] &= 0xff;
     goto Climb;
 #endif
