Project

General

Profile

« Previous | Next » 

Revision 1e791f43

Added by naruse (Yui NARUSE) about 9 years ago

  • insns.def (opt_plus): use - 1 instead of & (~1) to allow
    compilers to use x86 LEA instruction (3 operand).
    Even if 3 operand LEA's latency is 3 cycle after SandyBridge,
    it reduces code size and can be faster because of super scalar.

  • insns.def (opt_plus): calculate and use rb_int2big.
    On positive Fixnum overflow, recv - 1 + obj doesn't carry
    because recv's msb and obj's msb are 0, and resulted msb is 1.
    Therefore simply rshift and cast as signed long works fine.
    On negative Fixnum overflow, it will carry because both arguments'
    msb are 1, and resulted msb is also 1.
    In this case it needs to restore carried sign bit after rshift.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55515 b2dd03c8-39d4-4d8f-98ff-823fe69b080e