[前][次][番号順一覧][スレッド一覧]

ruby-changes:64202

From: Koichi <ko1@a...>
Date: Wed, 16 Dec 2020 14:20:53 +0900 (JST)
Subject: [ruby-changes:64202] 98dca85573 (master): tuning vm_setivar_slowpath() more.

https://git.ruby-lang.org/ruby.git/commit/?id=98dca85573

From 98dca855736c9fb8d4edef8b33a5df1cfe67ebb7 Mon Sep 17 00:00:00 2001
From: Koichi Sasada <ko1@a...>
Date: Wed, 16 Dec 2020 14:13:32 +0900
Subject: tuning vm_setivar_slowpath() more.

specify inline/noinline code for is_attr condition.

diff --git a/vm_insnhelper.c b/vm_insnhelper.c
index 3b56353..e8c9719 100644
--- a/vm_insnhelper.c
+++ b/vm_insnhelper.c
@@ -1190,8 +1190,9 @@ vm_getivar(VALUE obj, ID id, const rb_iseq_t *iseq, IVC ic, const struct rb_call https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L1190
     }
 }
 
-
-NOINLINE(static VALUE vm_setivar_slowpath(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr));
+ALWAYS_INLINE(static VALUE vm_setivar_slowpath(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr));
+NOINLINE(static VALUE vm_setivar_slowpath_ivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic));
+NOINLINE(static VALUE vm_setivar_slowpath_attr(VALUE obj, ID id, VALUE val, const struct rb_callcache *cc));
 
 static VALUE
 vm_setivar_slowpath(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
@@ -1232,6 +1233,18 @@ vm_setivar_slowpath(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L1233
     return rb_ivar_set(obj, id, val);
 }
 
+static VALUE
+vm_setivar_slowpath_ivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic)
+{
+    return vm_setivar_slowpath(obj, id, val, iseq, ic, NULL, false);
+}
+
+static VALUE
+vm_setivar_slowpath_attr(VALUE obj, ID id, VALUE val, const struct rb_callcache *cc)
+{
+    return vm_setivar_slowpath(obj, id, val, NULL, NULL, cc, true);
+}
+
 static inline VALUE
 vm_setivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const struct rb_callcache *cc, int is_attr)
 {
@@ -1259,7 +1272,12 @@ vm_setivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const str https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L1272
 	RB_DEBUG_COUNTER_INC(ivar_set_ic_miss_noobject);
     }
 #endif /* OPT_IC_FOR_IVAR */
-    return vm_setivar_slowpath(obj, id, val, iseq, ic, cc, is_attr);
+    if (is_attr) {
+        return vm_setivar_slowpath_attr(obj, id, val, cc);
+    }
+    else {
+        return vm_setivar_slowpath_ivar(obj, id, val, iseq, ic);
+    }
 }
 
 static inline VALUE
-- 
cgit v0.10.2


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]