diff --git a/src/code/ppc32.c b/src/code/ppc32.c index 86949e1746909b7e33f9f27addf293cc8938ba00..d9482d95b46117f67eb560d8660668b42a65d75a 100644 --- a/src/code/ppc32.c +++ b/src/code/ppc32.c @@ -1,5 +1,5 @@ /* - * $Id: ppc32.c,v 1.11 2001/08/16 21:35:41 marcus Exp $ + * $Id: ppc32.c,v 1.12 2001/09/19 22:30:40 marcus Exp $ * * Machine code generator for 32 bit PowerPC * @@ -338,6 +338,15 @@ void ppc32_mark(void) INCR_MARK_SP_REG(sizeof(struct svalue *)); } +static void ppc32_escape_catch(void) +{ + extern void *do_escape_catch_label; + void *pc; + __asm__("\tmflr %0" : "=r" (pc)); + Pike_fp->pc = pc; + goto *do_escape_catch_label; +} + void ins_f_byte(unsigned int b) { void *addr; @@ -400,6 +409,10 @@ void ins_f_byte(unsigned int b) SET_REG(PPC_REG_ARG1, 2); addr = (void *)f_add; break; + + case F_ESCAPE_CATCH - F_OFFSET: + addr = (void *)ppc32_escape_catch; + break; } #endif