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

Allow inlining Integer#-@ and #~

```
$ benchmark-driver -v --rbenv 'before --jit;after --jit' benchmark/mjit_integer.yml --filter '(comp|uminus)'
before --jit: ruby 3.0.0dev (2020-12-23T05:41:44Z master 0dd4896175) +JIT [x86_64-linux]
after --jit: ruby 3.0.0dev (2020-12-23T06:25:41Z master 8887d78992) +JIT [x86_64-linux]
last_commit=Allow inlining Integer#-@ and #~
Calculating -------------------------------------
                     before --jit  after --jit
        mjit_comp(1)      44.006M      70.417M i/s -     40.000M times in 0.908967s 0.568042s
      mjit_uminus(1)      44.333M      68.422M i/s -     40.000M times in 0.902255s 0.584603s

Comparison:
                     mjit_comp(1)
         after --jit:  70417331.4 i/s
        before --jit:  44005980.4 i/s - 1.60x  slower

                   mjit_uminus(1)
         after --jit:  68422468.8 i/s
        before --jit:  44333371.0 i/s - 1.54x  slower
```
This commit is contained in:
Takashi Kokubun 2020-12-22 22:23:45 -08:00
parent daec109f42
commit dbb4f19969
No known key found for this signature in database
GPG key ID: 6FFC433B12EE23DD
4 changed files with 35 additions and 31 deletions

View file

@ -1,4 +1,29 @@
class Integer
# call-seq:
# -int -> integer
#
# Returns +int+, negated.
def -@
Primitive.attr! 'inline'
Primitive.cexpr! 'rb_int_uminus(self)'
end
# call-seq:
# ~int -> integer
#
# One's complement: returns a number where each bit is flipped.
#
# Inverts the bits in an Integer. As integers are conceptually of
# infinite length, the result acts as if it had an infinite number of
# one bits to the left. In hex representations, this is displayed
# as two periods to the left of the digits.
#
# sprintf("%X", ~0x1122334455) #=> "..FEEDDCCBBAA"
def ~
Primitive.attr! 'inline'
Primitive.cexpr! 'rb_int_comp(self)'
end
def abs
Primitive.attr! 'inline'
Primitive.cexpr! 'rb_int_abs(self)'