diff --git a/C/errors.c b/C/errors.c index b3f4f5a3d..aeb94bc23 100644 --- a/C/errors.c +++ b/C/errors.c @@ -258,7 +258,7 @@ Abort (char *format,...) #if PUSH_REGS restore_absmi_regs(&standard_regs); #endif -#if defined(__GNUC__) && defined(hppa) +#if defined(__GNUC__) && (defined(hppa) || defined(__alpha)) /* siglongjmp resets the TR hardware register */ save_TR(); #endif diff --git a/C/exec.c b/C/exec.c index cb2aaa637..892bd6429 100644 --- a/C/exec.c +++ b/C/exec.c @@ -870,7 +870,7 @@ exec_absmi(int top) #endif yap_flags[SPY_CREEP_FLAG] = 0; CreepFlag = CalculateStackGap(); -#if defined(__GNUC__) && defined(hppa) +#if defined(__GNUC__) && (defined(hppa) || defined(__alpha)) /* siglongjmp resets the TR hardware register */ restore_TR(); #endif diff --git a/H/Regs.h b/H/Regs.h index 9035fa262..4d7e6823c 100644 --- a/H/Regs.h +++ b/H/Regs.h @@ -10,7 +10,7 @@ * File: Regs.h * * mods: * * comments: YAP abstract machine registers * -* version: $Id: Regs.h,v 1.3 2001-06-06 19:10:51 vsc Exp $ * +* version: $Id: Regs.h,v 1.4 2001-06-27 15:46:26 vsc Exp $ * *************************************************************************/ @@ -319,6 +319,14 @@ EXTERN inline void restore_B(void) { #define RECOVER_B() save_B(); B = BK_B +EXTERN inline void save_TR(void) { + REGS.TR_ = TR; +} + +EXTERN inline void restore_TR(void) { + TR = REGS.TR_; +} + #elif defined(__GNUC__) && defined(mips) #define P REGS.P_ /* prolog machine program counter */