diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-25 21:05:20 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2007-08-25 21:05:20 +0000 |
commit | 2ca7ad139f651baa6b8093f0f51fc0358e47b2c9 (patch) | |
tree | 9d84c761e42c9542d9c6d7c0aaa7a1ba35330bd2 /insnhelper.ci | |
parent | 343c363d5b1374f3aca6f9ba6d755a156d03f3f5 (diff) | |
download | ruby-2ca7ad139f651baa6b8093f0f51fc0358e47b2c9.tar.gz |
* insnhelper.ci (vm_setup_method): reorder code for branch prediction.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@13276 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'insnhelper.ci')
-rw-r--r-- | insnhelper.ci | 30 |
1 files changed, 15 insertions, 15 deletions
diff --git a/insnhelper.ci b/insnhelper.ci index 7f1a8ef6f2..d0c9306ea0 100644 --- a/insnhelper.ci +++ b/insnhelper.ci @@ -425,17 +425,9 @@ vm_setup_method(rb_thread_t *th, rb_control_frame_t *cfp, /* 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; - - /* copy arguments */ - for (i=0; i < (sp - rsp); i++) { - p_rsp[i] = rsp[i]; - } - - sp -= rsp - p_rsp; + if (LIKELY(!(flag & VM_CALL_TAILCALL_BIT))) { + if (0) printf("local_size: %d, arg_size: %d\n", + iseq->local_size, iseq->arg_size); /* clear local variables */ for (i = 0; i < iseq->local_size - iseq->arg_size; i++) { @@ -445,10 +437,20 @@ vm_setup_method(rb_thread_t *th, rb_control_frame_t *cfp, 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++) { @@ -458,8 +460,6 @@ vm_setup_method(rb_thread_t *th, rb_control_frame_t *cfp, vm_push_frame(th, iseq, FRAME_MAGIC_METHOD, recv, (VALUE) blockptr, iseq->iseq_encoded + opt_pc, sp, 0, 0); - - cfp->sp = rsp - 1 /* recv */; } } |