From: Tanaka Akira Date: 2008-03-15T01:34:03+09:00 Subject: [ruby-dev:34057] Re: Ruby performance gains on SPARC In article , Yukihiro Matsumoto 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]