diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-06-24 14:31:49 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-06-24 14:31:49 +0000 |
commit | 13f1fbc09a0984ad7779d5819785597f20241d19 (patch) | |
tree | 821c43b3eaa7fe2723071673665fe096c9fc62bf | |
parent | 66ee8a17852bb7657712afd3ac088a8b9b293d71 (diff) | |
download | ruby-13f1fbc09a0984ad7779d5819785597f20241d19.tar.gz |
* bignum.c (integer_unpack_single_bdigit): Refine code to filling
higher bits and use BIGLO.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41603 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | bignum.c | 6 |
2 files changed, 9 insertions, 2 deletions
@@ -1,3 +1,8 @@ +Mon Jun 24 23:30:31 2013 Tanaka Akira <akr@fsij.org> + + * bignum.c (integer_unpack_single_bdigit): Refine code to filling + higher bits and use BIGLO. + Mon Jun 24 22:26:31 2013 Hiroshi Shirosaki <h.shirosaki@gmail.com> * test/rinda/test_rinda.rb (RingIPv6#prepare_ipv6): @@ -1350,8 +1350,10 @@ integer_unpack_single_bdigit(BDIGIT u, size_t size, int flags, BDIGIT *dp) sign = (flags & INTEGER_PACK_NEGATIVE) ? ((size == SIZEOF_BDIGITS && u == 0) ? -2 : -1) : ((u >> (size * CHAR_BIT - 1)) ? -1 : 1); - if (sign < 0) - u = (BDIGIT)(-(u | LSHIFTX((~(BDIGIT)0), size * CHAR_BIT))); + if (sign < 0) { + u |= LSHIFTX(BDIGMAX, size * CHAR_BIT); + u = BIGLO(-u); + } } else sign = (flags & INTEGER_PACK_NEGATIVE) ? -1 : 1; |