1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

time.c: Improve Time#to_i performance

Time#to_i will be faster around 80% (on 64-bit platforms).

* Before
       user     system      total        real
   2.840000   0.000000   2.840000 (  2.847238)

* After
       user     system      total        real
   1.600000   0.000000   1.600000 (  1.598911)

* Test code
require 'benchmark'

Benchmark.bmbm do |x|
  x.report do
    t = Time.now
    20000000.times do
      t.to_i
    end
  end
end

* time.c (_div): new function avoid rb_funcall
  (div): replace with new _div function
  [ruby-core:80636] [Bug #13418]
  Thanks to Watson <watson1978@gmail.com> for the patch.

From: Watson <watson1978@gmail.com>

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58308 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
normal 2017-04-10 18:08:16 +00:00
parent 2c6cbcde84
commit 5d3fac0db9

12
time.c
View file

@ -103,7 +103,17 @@ mul(VALUE x, VALUE y)
return rb_funcall(x, '*', 1, y);
}
#define div(x,y) (rb_funcall((x), id_div, 1, (y)))
static VALUE
_div(VALUE x, VALUE y)
{
if (FIXNUM_P(x) && FIXNUM_P(y)) {
return rb_fix_div_fix(x, y);
}
if (RB_TYPE_P(x, T_BIGNUM))
return rb_big_div(x, y);
return rb_funcall(x, id_div, 1, y);
}
#define div(x,y) _div(x,y)
static VALUE
mod(VALUE x, VALUE y)