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/