From e87360009c1bca2e6a84b6edf7414c88eb4964c9 Mon Sep 17 00:00:00 2001 From: ngoto Date: Wed, 4 Jan 2012 07:04:22 +0000 Subject: [PATCH] sparc.c was missing in r34199 git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@34209 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- sparc.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 sparc.c diff --git a/sparc.c b/sparc.c new file mode 100644 index 0000000000..e5f7985e19 --- /dev/null +++ b/sparc.c @@ -0,0 +1,30 @@ +/******************************************************************** + Flush register windows on sparc. + + This function is in a separate file to prevent inlining. The "flushw" + assembler instruction used on sparcv9 flushes all register windows + except the current one, so if it is inlined, the current register + window of the process executing the instruction will not be flushed + correctly. + + See http://bugs.ruby-lang.org/issues/5244 for discussion. +*********************************************************************/ +void rb_sparc_flush_register_windows(void) +{ + asm +#ifdef __GNUC__ + __volatile__ +#endif + +/* This condition should be in sync with one in configure.in */ +#if defined(__sparcv9) || defined(__sparc_v9__) || defined(__arch64__) +# ifdef __GNUC__ + ("flushw" : : : "%o7") +# else + ("flushw") +# endif /* __GNUC__ */ +#else + ("ta 0x03") +#endif + ; +}