summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-07-02 09:10:06 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-07-02 09:10:06 +0000
commitfcd18fd5c1158b46593c702df80025096f5e21c9 (patch)
treeb6a81cfe29399ed1c10198b66232176889d13d6c
parent8b9a7b4e6f26a41e30c4a1dd0528a07b39ea2747 (diff)
downloadruby-fcd18fd5c1158b46593c702df80025096f5e21c9.tar.gz
ruby-fcd18fd5c1158b46593c702df80025096f5e21c9.tar.xz
ruby-fcd18fd5c1158b46593c702df80025096f5e21c9.zip
* defines.h (FLUSH_REGISTER_WINDOWS): defined for IA64.
(flush_register_windows): declare flush_register_windows. * eval.c (flush_register_windows): new function. git-svn-id: http://svn.ruby-lang.org/repos/ruby/branches/ruby_1_8@8699 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog7
-rw-r--r--defines.h7
-rw-r--r--eval.c10
3 files changed, 24 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 7f9e5f5f2..6a2b94dab 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+Sat Jul 2 17:06:23 2005 Tanaka Akira <akr@m17n.org>
+
+ * 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 <matz@ruby-lang.org>
* bignum.c (get2comp): revert all prior changes, and calculate
diff --git a/defines.h b/defines.h
index b5d0ed6e1..7b650c3a7 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 287d00bf4..d5529f08b 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
+