diff --git a/ChangeLog b/ChangeLog index 7f9e5f5f20..6a2b94dab3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Sat Jul 2 17:06:23 2005 Tanaka Akira + + * defines.h (FLUSH_REGISTER_WINDOWS): defined for IA64. + (flush_register_windows): declare flush_register_windows. + + * eval.c (flush_register_windows): new function. + Fri Jul 1 17:48:52 2005 Yukihiro Matsumoto * bignum.c (get2comp): revert all prior changes, and calculate diff --git a/defines.h b/defines.h index b5d0ed6e1c..7b650c3a7c 100644 --- a/defines.h +++ b/defines.h @@ -224,6 +224,13 @@ flush_register_windows(void) ; } # define FLUSH_REGISTER_WINDOWS flush_register_windows() +#elif defined(__ia64__) +void flush_register_windows(void) +# if ( __GNUC__ == 3 && __GNUC_MINOR__ > 0 ) || __GNUC__ > 3 +__attribute__ ((noinline)) +# endif + ; +# define FLUSH_REGISTER_WINDOWS flush_register_windows() #else # define FLUSH_REGISTER_WINDOWS ((void)0) #endif diff --git a/eval.c b/eval.c index 287d00bf40..d5529f08b4 100644 --- a/eval.c +++ b/eval.c @@ -12823,3 +12823,13 @@ rb_throw(tag, val) argv[1] = val; rb_f_throw(2, argv); } + +/* flush_register_windows must not be inlined because flushrs doesn't flush + * current frame in register stack. */ +#ifdef __ia64__ +void flush_register_windows(void) +{ + __asm__ ("flushrs"); +} +#endif +