Index: /branches/working-0711/ccl/lisp-kernel/x86-constants32.h
===================================================================
--- /branches/working-0711/ccl/lisp-kernel/x86-constants32.h	(revision 12992)
+++ /branches/working-0711/ccl/lisp-kernel/x86-constants32.h	(revision 12993)
@@ -97,4 +97,5 @@
 #define node_size 4
 #define node_shift 2
+#define nargregs 2
 
 #define tag_fixnum 0
Index: /branches/working-0711/ccl/lisp-kernel/x86-constants64.h
===================================================================
--- /branches/working-0711/ccl/lisp-kernel/x86-constants64.h	(revision 12992)
+++ /branches/working-0711/ccl/lisp-kernel/x86-constants64.h	(revision 12993)
@@ -129,5 +129,5 @@
 #define node_size 8L
 #define node_shift 3L
-
+#define nargregs 3L
 
 #define tag_fixnum 0L
Index: /branches/working-0711/ccl/lisp-kernel/x86-exceptions.c
===================================================================
--- /branches/working-0711/ccl/lisp-kernel/x86-exceptions.c	(revision 12992)
+++ /branches/working-0711/ccl/lisp-kernel/x86-exceptions.c	(revision 12993)
@@ -320,36 +320,28 @@
 finish_function_entry(ExceptionInformation *xp)
 {
-#ifdef X8664
-  natural nargs = (xpGPR(xp,Inargs)&0xffff)>> fixnumshift;
-#else
   natural nargs = xpGPR(xp,Inargs)>>fixnumshift;
-#endif
-  signed_natural disp;
+  signed_natural disp = nargs - nargregs;
   LispObj *vsp =  (LispObj *) xpGPR(xp,Isp), ra = *vsp++;
    
   xpGPR(xp,Isp) = (LispObj) vsp;
 
+  if (disp > 0) {               /* implies that nargs > nargregs */
+    vsp[disp] = xpGPR(xp,Ifp);
+    vsp[disp+1] = ra;
+    xpGPR(xp,Ifp) = (LispObj)(vsp+disp);
 #ifdef X8664
-  disp = nargs - 3;
-#endif
-#ifdef X8632
-  disp = nargs - 2;
-#endif
-
-#ifdef X8664
-  if (disp > 0) {               /* implies that nargs > 3 */
-    vsp[disp] = xpGPR(xp,Irbp);
-    vsp[disp+1] = ra;
-    xpGPR(xp,Irbp) = (LispObj)(vsp+disp);
     push_on_lisp_stack(xp,xpGPR(xp,Iarg_x));
+#endif
     push_on_lisp_stack(xp,xpGPR(xp,Iarg_y));
     push_on_lisp_stack(xp,xpGPR(xp,Iarg_z));
   } else {
     push_on_lisp_stack(xp,ra);
-    push_on_lisp_stack(xp,xpGPR(xp,Irbp));
-    xpGPR(xp,Irbp) = xpGPR(xp,Isp);
+    push_on_lisp_stack(xp,xpGPR(xp,Ifp));
+    xpGPR(xp,Ifp) = xpGPR(xp,Isp);
+#ifdef X8664
     if (nargs == 3) {
       push_on_lisp_stack(xp,xpGPR(xp,Iarg_x));
     }
+#endif
     if (nargs >= 2) {
       push_on_lisp_stack(xp,xpGPR(xp,Iarg_y));
@@ -359,25 +351,4 @@
     }
   }
-#endif
-#ifdef X8632
-  if (disp > 0) {               /* implies that nargs > 2 */
-    vsp[disp] = xpGPR(xp,Iebp);
-    vsp[disp+1] = ra;
-    xpGPR(xp,Iebp) = (LispObj)(vsp+disp);
-    xpGPR(xp,Isp) = (LispObj)vsp;
-    push_on_lisp_stack(xp,xpGPR(xp,Iarg_y));
-    push_on_lisp_stack(xp,xpGPR(xp,Iarg_z));
-  } else {
-    push_on_lisp_stack(xp,ra);
-    push_on_lisp_stack(xp,xpGPR(xp,Iebp));
-    xpGPR(xp,Iebp) = xpGPR(xp,Isp);
-    if (nargs == 2) {
-      push_on_lisp_stack(xp,xpGPR(xp,Iarg_y));
-    }
-    if (nargs >= 1) {
-      push_on_lisp_stack(xp,xpGPR(xp,Iarg_z));
-    }
-  }
-#endif
 }
 
