diff options
author | Takashi Kokubun <[email protected]> | 2020-12-22 22:23:45 -0800 |
---|---|---|
committer | Takashi Kokubun <[email protected]> | 2020-12-22 22:32:19 -0800 |
commit | dbb4f1996939d0ce977e6b37579e28dd886428ff (patch) | |
tree | c78f48a6f20b742c265596ea580e1fab318c239b /integer.rb | |
parent | daec109f423e54094800e083fc8a8ca5cbceb866 (diff) |
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
```
Diffstat (limited to 'integer.rb')
-rw-r--r-- | integer.rb | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/integer.rb b/integer.rb index b9cde8f390..d18494f42f 100644 --- a/integer.rb +++ b/integer.rb @@ -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)' |