summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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;
}