summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-07-02 08:11:24 +0000
committerakr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2005-07-02 08:11:24 +0000
commit23c88ad3de4ec62224c2d36becfdffab48ff2ed2 (patch)
tree4d2f52d97b4623dbd90c25ecba4537bbfdd73e4d
parent55f24fc6a5c50cdea243c7a8c718e6b994b555f5 (diff)
downloadruby-23c88ad3de4ec62224c2d36becfdffab48ff2ed2.tar.gz
ruby-23c88ad3de4ec62224c2d36becfdffab48ff2ed2.tar.xz
ruby-23c88ad3de4ec62224c2d36becfdffab48ff2ed2.zip
* defines.h (FLUSH_REGISTER_WINDOWS): defined for IA64.
(flush_register_windows): declare flush_register_windows. * eval.c (flush_register_windows): new function. * ruby.h (NOINLINE): move up to be effective in defines.h. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@8696 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog9
-rw-r--r--defines.h3
-rw-r--r--eval.c10
-rw-r--r--ruby.h8
4 files changed, 27 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 919e1daa1..2a1e4d70c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+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.
+
+ * ruby.h (NOINLINE): move up to be effective in defines.h.
+
Sat Jul 2 15:19:41 2005 Tanaka Akira <akr@m17n.org>
* configure.in: check select_large_fdset.
diff --git a/defines.h b/defines.h
index d0aa208b4..619edbe28 100644
--- a/defines.h
+++ b/defines.h
@@ -229,6 +229,9 @@ flush_register_windows(void)
;
}
# define FLUSH_REGISTER_WINDOWS flush_register_windows()
+#elif defined(__ia64__)
+NOINLINE(void flush_register_windows(void));
+# define FLUSH_REGISTER_WINDOWS flush_register_windows()
#else
# define FLUSH_REGISTER_WINDOWS ((void)0)
#endif
diff --git a/eval.c b/eval.c
index 4b946c0e6..63fbec723 100644
--- a/eval.c
+++ b/eval.c
@@ -13410,3 +13410,13 @@ rb_exec_recursive(func, obj, arg)
return result;
}
}
+
+/* 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
+
diff --git a/ruby.h b/ruby.h
index e32109950..71f769eb1 100644
--- a/ruby.h
+++ b/ruby.h
@@ -19,6 +19,11 @@ extern "C" {
#endif
#include "config.h"
+
+#ifndef NOINLINE
+# define NOINLINE(x) x
+#endif
+
#include "defines.h"
#ifdef HAVE_STDLIB_H
@@ -59,9 +64,6 @@ extern "C" {
#ifndef DEPRECATED
# define DEPRECATED(x) x
#endif
-#ifndef NOINLINE
-# define NOINLINE(x) x
-#endif
#if defined(HAVE_ALLOCA_H)
#include <alloca.h>