aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortmm1 <tmm1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-12-19 02:27:36 +0000
committertmm1 <tmm1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-12-19 02:27:36 +0000
commit4cd675ea9edeaeee7a640dd10037b92318ad6844 (patch)
tree2a7854ec3957bcf1e205b823113fd1060f77c436
parent9797647e2546d44126e5d955e394c300a48d4201 (diff)
downloadruby-4cd675ea9edeaeee7a640dd10037b92318ad6844.tar.gz
vm_insnhelper.c: optimize for loop
* vm_insnhelper.c (vm_call_iseq_setup_normal): simple for loop condition optimization. this area shows up as a hotspot in VM profiles. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@44285 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog6
-rw-r--r--vm_insnhelper.c6
2 files changed, 9 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index 5642e5d5a1..6ab9eccaa2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+Thu Dec 19 11:23:49 2013 Aman Gupta <ruby@tmm1.net>
+
+ * vm_insnhelper.c (vm_call_iseq_setup_normal): simple for loop
+ condition optimization. this area shows up as a hotspot in VM
+ profiles.
+
Thu Dec 19 10:50:13 2013 Koichi Sasada <ko1@atdot.net>
* gc.c (newobj_of): don't need to RBASIC_SET_CLASS() which includes WB
diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index 08915c8b96..94da4b1c52 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -1228,13 +1228,13 @@ vm_call_iseq_setup_2(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *c
static inline VALUE
vm_call_iseq_setup_normal(rb_thread_t *th, rb_control_frame_t *cfp, rb_call_info_t *ci)
{
- int i;
+ int i, local_size;
VALUE *argv = cfp->sp - ci->argc;
rb_iseq_t *iseq = ci->me->def->body.iseq;
VALUE *sp = argv + iseq->arg_size;
- /* clear local variables */
- for (i = 0; i < iseq->local_size - iseq->arg_size; i++) {
+ /* clear local variables (arg_size...local_size) */
+ for (i = iseq->arg_size, local_size = iseq->local_size; i < local_size; i++) {
*sp++ = Qnil;
}