ruby-changes:1785
From: ko1@a...
Date: 26 Aug 2007 06:05:30 +0900
Subject: [ruby-changes:1785] ko1 - Ruby:r13276 (trunk): * insnhelper.ci (vm_setup_method): reorder code for branch prediction.
ko1 2007-08-26 06:05:20 +0900 (Sun, 26 Aug 2007) New Revision: 13276 Modified files: trunk/ChangeLog trunk/insnhelper.ci Log: * insnhelper.ci (vm_setup_method): reorder code for branch prediction. http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/insnhelper.ci?r1=13276&r2=13275 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ChangeLog?r1=13276&r2=13275 Index: ChangeLog =================================================================== --- ChangeLog (revision 13275) +++ ChangeLog (revision 13276) @@ -1,3 +1,7 @@ +Sun Aug 26 06:04:13 2007 Koichi Sasada <ko1@a...> + + * insnhelper.ci (vm_setup_method): reorder code for branch prediction. + Sun Aug 26 05:54:49 2007 Koichi Sasada <ko1@a...> * insnhelper.ci (vm_call_method): fix to relaxant safe level check Index: insnhelper.ci =================================================================== --- insnhelper.ci (revision 13275) +++ insnhelper.ci (revision 13276) @@ -425,18 +425,10 @@ /* stack overflow check */ CHECK_STACK_OVERFLOW(cfp, iseq->stack_max + 0x10); - if (flag & VM_CALL_TAILCALL_BIT) { - VALUE *p_rsp; - cfp = ++th->cfp; /* pop cf */ - p_rsp = th->cfp->sp; + if (LIKELY(!(flag & VM_CALL_TAILCALL_BIT))) { + if (0) printf("local_size: %d, arg_size: %d\n", + iseq->local_size, iseq->arg_size); - /* copy arguments */ - for (i=0; i < (sp - rsp); i++) { - p_rsp[i] = rsp[i]; - } - - sp -= rsp - p_rsp; - /* clear local variables */ for (i = 0; i < iseq->local_size - iseq->arg_size; i++) { *sp++ = Qnil; @@ -445,11 +437,21 @@ vm_push_frame(th, iseq, FRAME_MAGIC_METHOD, recv, (VALUE) blockptr, iseq->iseq_encoded + opt_pc, sp, 0, 0); + + cfp->sp = rsp - 1 /* recv */; } else { - if (0) printf("local_size: %d, arg_size: %d\n", - iseq->local_size, iseq->arg_size); + VALUE *p_rsp; + cfp = ++th->cfp; /* pop cf */ + p_rsp = th->cfp->sp; + /* copy arguments */ + for (i=0; i < (sp - rsp); i++) { + p_rsp[i] = rsp[i]; + } + + sp -= rsp - p_rsp; + /* clear local variables */ for (i = 0; i < iseq->local_size - iseq->arg_size; i++) { *sp++ = Qnil; @@ -458,8 +460,6 @@ vm_push_frame(th, iseq, FRAME_MAGIC_METHOD, recv, (VALUE) blockptr, iseq->iseq_encoded + opt_pc, sp, 0, 0); - - cfp->sp = rsp - 1 /* recv */; } } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml