From 13f1fbc09a0984ad7779d5819785597f20241d19 Mon Sep 17 00:00:00 2001 From: akr Date: Mon, 24 Jun 2013 14:31:49 +0000 Subject: [PATCH] * 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 --- ChangeLog | 5 +++++ bignum.c | 6 ++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 84ca5de3c8..a872256f05 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Mon Jun 24 23:30:31 2013 Tanaka Akira + + * bignum.c (integer_unpack_single_bdigit): Refine code to filling + higher bits and use BIGLO. + Mon Jun 24 22:26:31 2013 Hiroshi Shirosaki * test/rinda/test_rinda.rb (RingIPv6#prepare_ipv6): diff --git a/bignum.c b/bignum.c index 0bdceef045..ffd35cf5e4 100644 --- a/bignum.c +++ b/bignum.c @@ -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;