diff --git a/lisp/lispregs.h b/lisp/lispregs.h
index 0de3d3c7ff659884906db9fdf1cdd9f10fb016f7..a70cf046dd12fcc2a8c9167ea085b9a8fdf40abb 100644
--- a/lisp/lispregs.h
+++ b/lisp/lispregs.h
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/lispregs.h,v 1.6 2004/07/13 00:26:22 pmai Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/lispregs.h,v 1.7 2004/07/30 00:53:41 rtoy Exp $ */
 
 #if defined(mips) || defined(irix)
 #include "mips-lispregs.h"
@@ -35,6 +35,15 @@
 /* This matches the definition of sc-offset in code/debug-info.lisp */
 #define SC_OFFSET(sc,offset) (((offset) << 5) | (sc))
 
+/*
+ * Macros to compute the SC_OFFSET value.  See read-var-integer and
+ * sc-offset and friends in debug-info.lisp
+ */
+#define	SC_OFFSET_HI(sc, regnum)	((SC_OFFSET(sc,regnum)) >> 8)
+#define	SC_OFFSET_LO(sc, regnum)	((SC_OFFSET(sc,regnum)) & 0xff)
+
+
+
 #ifndef LANGUAGE_ASSEMBLY
 extern char *lisp_register_names[];
 #endif
diff --git a/lisp/ppc-assem.S b/lisp/ppc-assem.S
index c65f229994660d7bdadacf4208217c4bc6ca5def..9b46c538bd2f07e0c1d99cb728a1a73b94527549 100644
--- a/lisp/ppc-assem.S
+++ b/lisp/ppc-assem.S
@@ -397,6 +397,10 @@ lra:
 	.globl _undefined_tramp
 	.byte 0,0,0,type_FunctionHeader
 
+	/*
+	 * The next 4 bytes are the encoding for a PPC jump instruction.
+	 * The jump should go to the twllei instruction below.
+	 */
 	.byte 18<<2
 _undefined_tramp:	
 	.byte 0,0,24
@@ -406,11 +410,18 @@ _undefined_tramp:
 	.long NIL
 	.long NIL
 	twllei reg_ZERO,trap_Cerror
+        /* Number of argument bytes */
 	.byte 4
 	.byte UNDEFINED_SYMBOL_ERROR
+        /* Escape to create 16bit number from following two bytes, 
+	   in little-endian order */
 	.byte 254
+	.byte SC_OFFSET_LO(sc_DescriptorReg, reg_FDEFN_NUM)
+	.byte SC_OFFSET_HI(sc_DescriptorReg, reg_FDEFN_NUM)
+	/*
 	.byte sc_DescriptorReg+0x40
 	.byte 1
+	*/
 	.align 2
 #ifdef PPC_FUN_HACK_MAYBE
 1:	lwz reg_CODE,FDEFN_RAW_ADDR_OFFSET(reg_CNAME)
diff --git a/lisp/ppc-lispregs.h b/lisp/ppc-lispregs.h
index 152e5d1285a3764b760ccf8044e57371c69e3a9c..73b0b8c5a3393c294d990feb0656d63d62670aa9 100644
--- a/lisp/ppc-lispregs.h
+++ b/lisp/ppc-lispregs.h
@@ -8,6 +8,8 @@
 #define REG(num) num
 #endif
 
+#define REG_NUM(num) num
+
 #define NREGS 32
 
 #define reg_ZERO      REG(0)	/* Should alwasy contain 0 in lisp */
@@ -43,6 +45,44 @@
 #define reg_L2        REG(30)	/* Last lisp temp reg */
 #define reg_LIP       REG(31)	/* Lisp Interior Pointer, e.g., locative */
 
+/*
+ * Same as above, but we just want the register number, not the
+ * register name
+ */
+
+#define reg_ZERO_NUM      0	/* Should alwasy contain 0 in lisp */
+#define reg_NSP_NUM       1	/* The number/C stack pointer */
+#define reg_POLL_NUM      2	/* Lisp preemption/Mystery SVR4 ABI reg */
+#define reg_NL0_NUM       3	/* FF param/result 1 */
+#define reg_NL1_NUM       4	/* FF param/result 2 */
+#define reg_NL2_NUM       5	/* FF param 3 */
+#define reg_NL3_NUM       6
+#define reg_NL4_NUM       7
+#define reg_NL5_NUM       8
+#define reg_NL6_NUM       9
+#define reg_FDEFN_NUM     10	/* Last (8th) FF param */
+#define reg_NARGS_NUM     11
+#define reg_CFUNC_NUM     12	/* Silly to blow a reg on FF-name */
+#define reg_NFP_NUM       13	/* Lisp may save around FF-call */
+#define reg_BSP_NUM       14	/* Binding stack pointer */
+#define reg_CFP_NUM       15	/* Control/value stack frame pointer */
+#define reg_CSP_NUM       16	/* Control/value stack top */
+#define reg_ALLOC_NUM     17	/* (Global) dynamic free pointer */
+#define reg_NULL_NUM      18	/* NIL and globals nearby */
+#define reg_CODE_NUM      19	/* Current function object */
+#define reg_CNAME_NUM     20	/* Current function name */
+#define reg_LEXENV_NUM    21	/* And why burn a register for this ? */
+#define reg_OCFP_NUM      22	/* The caller's reg_CFP_NUM */
+#define reg_LRA_NUM       23	/* Tagged lisp return address */
+#define reg_A0_NUM        24	/* First function arg/return value */
+#define reg_A1_NUM        25	/* Second. */
+#define reg_A2_NUM        26	/*  */
+#define reg_A3_NUM        27	/* Last of (only) 4 arg regs */
+#define reg_L0_NUM	  28	/* Tagged temp regs */
+#define reg_L1_NUM        29
+#define reg_L2_NUM        30	/* Last lisp temp reg */
+#define reg_LIP_NUM       31	/* Lisp Interior Pointer, e.g., locative */
+
 #define REGNAMES \
         "ZERO",		"NSP",	        "POLL",		"NL0", \
 	"NL1",		"NL2",		"NL3P",		"NL4", \
diff --git a/lisp/sparc-lispregs.h b/lisp/sparc-lispregs.h
index ff24f164f9b0f897238b8685ad5ae604d664ff01..6b79de38da7c8e2ccd416fbf05bd4628119a497f 100644
--- a/lisp/sparc-lispregs.h
+++ b/lisp/sparc-lispregs.h
@@ -1,4 +1,4 @@
-/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/sparc-lispregs.h,v 1.6 2002/11/13 17:14:18 toy Exp $ */
+/* $Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/lisp/sparc-lispregs.h,v 1.7 2004/07/30 00:53:41 rtoy Exp $ */
 
 
 
@@ -107,13 +107,6 @@
 #define reg_LIP		IREG(7)
 #define reg_LIP_NUM	IREG_NUM(7)
 
-/*
- * Macros to compute the SC_OFFSET value.  See read-var-integer and
- * sc-offset and friends in debug-info.lisp
- */
-#define	SC_OFFSET_HI(sc, reg)	((SC_OFFSET(sc,reg)) >> 8)
-#define	SC_OFFSET_LO(sc, reg)	((SC_OFFSET(sc,reg)) & 0xff)
-
 #define REGNAMES \
 	"ZERO",		"ALLOC",	"NULL",		"CSP", \
 	"CFP",		"BSP",		"%g6",		"%g7", \