mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* bignum.c (rb_big2ulong): the old logic seems to try to avoid
calculating `-(long)(num-1)-1` if `num` is not LONG_MIN. (Note that `-LONG_MIN` may be larger than LONG_MAX) But C compilers can optimize it into single NEG instruction. Therefore those two conditions can be single if-body. * bignum.c (rb_big2long): ditto. * bignum.c (rb_big2ull): ditto. * bignum.c (rb_big2ll): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@55528 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
c9df0f82b7
commit
236b5e9778
2 changed files with 22 additions and 16 deletions
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
|||
Wed Jun 29 03:34:41 2016 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* bignum.c (rb_big2ulong): the old logic seems to try to avoid
|
||||
calculating `-(long)(num-1)-1` if `num` is not LONG_MIN. (Note that
|
||||
`-LONG_MIN` may be larger than LONG_MAX) But C compilers can
|
||||
optimize it into single NEG instruction.
|
||||
Therefore those two conditions can be single if-body.
|
||||
|
||||
* bignum.c (rb_big2long): ditto.
|
||||
|
||||
* bignum.c (rb_big2ull): ditto.
|
||||
|
||||
* bignum.c (rb_big2ll): ditto.
|
||||
|
||||
Tue Jun 28 22:55:00 2016 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||
|
||||
* lib/pstore.rb (PStore::CHECKSUM_ALGO): extract the algorithm for
|
||||
|
|
24
bignum.c
24
bignum.c
|
@ -5079,10 +5079,8 @@ rb_big2ulong(VALUE x)
|
|||
return num;
|
||||
}
|
||||
else {
|
||||
if (num <= LONG_MAX)
|
||||
return -(long)num;
|
||||
if (num == 1+(unsigned long)(-(LONG_MIN+1)))
|
||||
return LONG_MIN;
|
||||
if (num <= 1+(unsigned long)(-(LONG_MIN+1)))
|
||||
return -(long)(num-1)-1;
|
||||
}
|
||||
rb_raise(rb_eRangeError, "bignum out of range of unsigned long");
|
||||
}
|
||||
|
@ -5097,10 +5095,8 @@ rb_big2long(VALUE x)
|
|||
return num;
|
||||
}
|
||||
else {
|
||||
if (num <= LONG_MAX)
|
||||
return -(long)num;
|
||||
if (num == 1+(unsigned long)(-(LONG_MIN+1)))
|
||||
return LONG_MIN;
|
||||
if (num <= 1+(unsigned long)(-(LONG_MIN+1)))
|
||||
return -(long)(num-1)-1;
|
||||
}
|
||||
rb_raise(rb_eRangeError, "bignum too big to convert into `long'");
|
||||
}
|
||||
|
@ -5139,10 +5135,8 @@ rb_big2ull(VALUE x)
|
|||
return num;
|
||||
}
|
||||
else {
|
||||
if (num <= LLONG_MAX)
|
||||
return -(LONG_LONG)num;
|
||||
if (num == 1+(unsigned LONG_LONG)(-(LLONG_MIN+1)))
|
||||
return LLONG_MIN;
|
||||
if (num <= 1+(unsigned LONG_LONG)(-(LLONG_MIN+1)))
|
||||
return -(LONG_LONG)(num-1)-1;
|
||||
}
|
||||
rb_raise(rb_eRangeError, "bignum out of range of unsigned long long");
|
||||
}
|
||||
|
@ -5157,10 +5151,8 @@ rb_big2ll(VALUE x)
|
|||
return num;
|
||||
}
|
||||
else {
|
||||
if (num <= LLONG_MAX)
|
||||
return -(LONG_LONG)num;
|
||||
if (num == 1+(unsigned LONG_LONG)(-(LLONG_MIN+1)))
|
||||
return LLONG_MIN;
|
||||
if (num <= 1+(unsigned LONG_LONG)(-(LLONG_MIN+1)))
|
||||
return -(LONG_LONG)(num-1)-1;
|
||||
}
|
||||
rb_raise(rb_eRangeError, "bignum too big to convert into `long long'");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue