diff options
author | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-04-23 09:16:51 +0000 |
---|---|---|
committer | naruse <naruse@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-04-23 09:16:51 +0000 |
commit | 8e3646e2af137b702a3c69556ee89b5173ca37dd (patch) | |
tree | bfbd8c553d8a2460d97de63ea19b76a1ba4db022 /ChangeLog | |
parent | f9cefe2f9b7fcde71a145acd7158fd4128d5e4bc (diff) | |
download | ruby-8e3646e2af137b702a3c69556ee89b5173ca37dd.tar.gz |
* vm_insnhelper.c (vm_getivar): specify inline instead of static inline.
vm_getivar is called by vm_call_ivar and vm_getinstancevariable.
At least with GCC 4.8 and 5.3 on Linux, they are inlining it into
vm_call_ivar but not vm_getinstancevariable.
By `inline`, they correctly inline it and gains performance.
Speedup ratio: compare with the result of `ruby 2.4.0dev (2016-04-23
trunk 54727) [x86_64-linux]' (greater is better)
name built-ruby
loop_whileloop 1.001
vm1_ivar* 1.189
vm1_ivar_set* 1.024
Note tha `inline`'s meaning is different between old GCC
and C99. Old GCC's inline means C99's extern inline.
https://gcc.gnu.org/onlinedocs/gcc/Inline.html
Since Ruby specify -std=iso9899:1999, it works like C99.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54728 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ChangeLog')
-rw-r--r-- | ChangeLog | 20 |
1 files changed, 20 insertions, 0 deletions
@@ -1,3 +1,23 @@ +Sat Apr 23 18:01:21 2016 NARUSE, Yui <naruse@ruby-lang.org> + + * vm_insnhelper.c (vm_getivar): specify inline instead of static inline. + vm_getivar is called by vm_call_ivar and vm_getinstancevariable. + At least with GCC 4.8 and 5.3 on Linux, they are inlining it into + vm_call_ivar but not vm_getinstancevariable. + By `inline`, they correctly inline it and gains performance. + + Speedup ratio: compare with the result of `ruby 2.4.0dev (2016-04-23 + trunk 54727) [x86_64-linux]' (greater is better) + name built-ruby + loop_whileloop 1.001 + vm1_ivar* 1.189 + vm1_ivar_set* 1.024 + + Note tha `inline`'s meaning is different between old GCC + and C99. Old GCC's inline means C99's extern inline. + https://gcc.gnu.org/onlinedocs/gcc/Inline.html + Since Ruby specify -std=iso9899:1999, it works like C99. + Sat Apr 23 16:11:39 2016 NARUSE, Yui <naruse@ruby-lang.org> * include/ruby/ruby.h (rb_mul_size_overflow): use UNLIKELY |