In article <E1JZcI7-0004I5-Nl / x61.netlab.jp>,
  Yukihiro Matsumoto <matz / ruby-lang.org> writes:

> http://blogs.sun.com/d/entry/ruby_performance_gains_on_sparc
>
> によるとSPARCではEXEC_TAGの前のFLUSH_REGISTER_WINDOWSは不要
> のようです。で、これを実際に行っているのは今までSPARCとIA64
> だけだったのですが、手近にIA64サーバがある人は、EXEC_TAG()か
> らFLUSH_REGISTER_WINDOWSを削っても動作するかどうか確認してい
> ただけませんか?

1.8 と 1.9 で試してみましたが、make test, test-all はとくに
変化しませんね。

あとは、その 2箇所に FLUSH_REGISTER_WINDOWS を入れた knu さ
んに尋ねるとか。

1.8:
Index: eval.c
===================================================================
--- eval.c	(revision 15781)
+++ eval.c	(working copy)
@@ -1028,7 +1028,7 @@ static struct tag *prot_tag;
 #define PROT_LAMBDA INT2FIX(2)	/* 5 */
 #define PROT_YIELD  INT2FIX(3)	/* 7 */
 
-#define EXEC_TAG()    (FLUSH_REGISTER_WINDOWS, ruby_setjmp(((void)0), prot_tag->buf))
+#define EXEC_TAG()    (ruby_setjmp(((void)0), prot_tag->buf))
 
 #define JUMP_TAG(st) do {		\
     ruby_frame = prot_tag->frame;	\
@@ -10330,7 +10330,7 @@ rb_thread_switch(n)
 }
 
 #define THREAD_SAVE_CONTEXT(th) \
-    (rb_thread_switch((FLUSH_REGISTER_WINDOWS, ruby_setjmp(rb_thread_save_context(th), (th)->context))))
+    (rb_thread_switch((ruby_setjmp(rb_thread_save_context(th), (th)->context))))
 
 NORETURN(static void rb_thread_restore_context _((rb_thread_t,int)));
 NORETURN(NOINLINE(static void rb_thread_restore_context_0(rb_thread_t,int,void*)));

1.9:
Index: eval_intern.h
===================================================================
--- eval_intern.h	(revision 15777)
+++ eval_intern.h	(working copy)
@@ -143,7 +143,7 @@ char *strrchr(const char *, const char);
 #define POP_TAG()      TH_POP_TAG()
 
 #define TH_EXEC_TAG() \
-  (FLUSH_REGISTER_WINDOWS, ruby_setjmp(_th->tag->buf))
+  (ruby_setjmp(_th->tag->buf))
 
 #define EXEC_TAG() \
   TH_EXEC_TAG()
-- 
[田中 哲][たなか あきら][Tanaka Akira]