diff options
author | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-09-01 00:57:00 +0000 |
---|---|---|
committer | akr <akr@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2013-09-01 00:57:00 +0000 |
commit | 7bb549d6b597b581a2f95496928612f2059e2df2 (patch) | |
tree | ec199c9556c74423f010c8bf0a32692e122dae0b /bignum.c | |
parent | 8bd7af6794007dab448d71b78a13f0c1625858e9 (diff) | |
download | ruby-7bb549d6b597b581a2f95496928612f2059e2df2.tar.gz |
* internal.h (bit_length): Moved from bignum.c.
(nlz_int): Ditto.
(nlz_long): Ditto.
(nlz_long_long): Ditto.
(nlz_int128): Ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42750 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'bignum.c')
-rw-r--r-- | bignum.c | 126 |
1 files changed, 0 insertions, 126 deletions
@@ -154,115 +154,6 @@ static VALUE bigsq(VALUE x); static void bigdivmod(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp); static inline VALUE power_cache_get_power(int base, int power_level, size_t *numdigits_ret); -static int -nlz_int(unsigned int x) -{ -#if defined(HAVE_BUILTIN___BUILTIN_CLZ) - if (x == 0) return SIZEOF_INT * CHAR_BIT; - return __builtin_clz(x); -#else - unsigned int y; -# if 64 < SIZEOF_INT * CHAR_BIT - int n = 128; -# elif 32 < SIZEOF_INT * CHAR_BIT - int n = 64; -# else - int n = 32; -# endif -# if 64 < SIZEOF_INT * CHAR_BIT - y = x >> 64; if (y) {n -= 64; x = y;} -# endif -# if 32 < SIZEOF_INT * CHAR_BIT - y = x >> 32; if (y) {n -= 32; x = y;} -# endif - y = x >> 16; if (y) {n -= 16; x = y;} - y = x >> 8; if (y) {n -= 8; x = y;} - y = x >> 4; if (y) {n -= 4; x = y;} - y = x >> 2; if (y) {n -= 2; x = y;} - y = x >> 1; if (y) {return n - 2;} - return (int)(n - x); -#endif -} - -static int -nlz_long(unsigned long x) -{ -#if defined(HAVE_BUILTIN___BUILTIN_CLZL) - if (x == 0) return SIZEOF_LONG * CHAR_BIT; - return __builtin_clzl(x); -#else - unsigned long y; -# if 64 < SIZEOF_LONG * CHAR_BIT - int n = 128; -# elif 32 < SIZEOF_LONG * CHAR_BIT - int n = 64; -# else - int n = 32; -# endif -# if 64 < SIZEOF_LONG * CHAR_BIT - y = x >> 64; if (y) {n -= 64; x = y;} -# endif -# if 32 < SIZEOF_LONG * CHAR_BIT - y = x >> 32; if (y) {n -= 32; x = y;} -# endif - y = x >> 16; if (y) {n -= 16; x = y;} - y = x >> 8; if (y) {n -= 8; x = y;} - y = x >> 4; if (y) {n -= 4; x = y;} - y = x >> 2; if (y) {n -= 2; x = y;} - y = x >> 1; if (y) {return n - 2;} - return (int)(n - x); -#endif -} - -#ifdef HAVE_LONG_LONG -static int -nlz_long_long(unsigned LONG_LONG x) -{ -#if defined(HAVE_BUILTIN___BUILTIN_CLZLL) - if (x == 0) return SIZEOF_LONG_LONG * CHAR_BIT; - return __builtin_clzll(x); -#else - unsigned LONG_LONG y; -# if 64 < SIZEOF_LONG_LONG * CHAR_BIT - int n = 128; -# elif 32 < SIZEOF_LONG_LONG * CHAR_BIT - int n = 64; -# else - int n = 32; -# endif -# if 64 < SIZEOF_LONG_LONG * CHAR_BIT - y = x >> 64; if (y) {n -= 64; x = y;} -# endif -# if 32 < SIZEOF_LONG_LONG * CHAR_BIT - y = x >> 32; if (y) {n -= 32; x = y;} -# endif - y = x >> 16; if (y) {n -= 16; x = y;} - y = x >> 8; if (y) {n -= 8; x = y;} - y = x >> 4; if (y) {n -= 4; x = y;} - y = x >> 2; if (y) {n -= 2; x = y;} - y = x >> 1; if (y) {return n - 2;} - return (int)(n - x); -#endif -} -#endif - -#ifdef HAVE_UINT128_T -static int -nlz_int128(uint128_t x) -{ - uint128_t y; - int n = 128; - y = x >> 64; if (y) {n -= 64; x = y;} - y = x >> 32; if (y) {n -= 32; x = y;} - y = x >> 16; if (y) {n -= 16; x = y;} - y = x >> 8; if (y) {n -= 8; x = y;} - y = x >> 4; if (y) {n -= 4; x = y;} - y = x >> 2; if (y) {n -= 2; x = y;} - y = x >> 1; if (y) {return n - 2;} - return (int)(n - x); -} -#endif - #if SIZEOF_BDIGITS <= SIZEOF_INT static int nlz(BDIGIT x) { return nlz_int((unsigned int)x) - (SIZEOF_INT-SIZEOF_BDIGITS) * CHAR_BIT; } #elif SIZEOF_BDIGITS <= SIZEOF_LONG @@ -273,23 +164,6 @@ static int nlz(BDIGIT x) { return nlz_long_long((unsigned LONG_LONG)x) - (SIZEOF static int nlz(BDIGIT x) { return nlz_int128((uint128_t)x) - (SIZEOF_INT128_T-SIZEOF_BDIGITS) * CHAR_BIT; } #endif -#if defined(HAVE_UINT128_T) -# define bit_length(x) \ - (sizeof(x) <= SIZEOF_INT ? SIZEOF_INT * CHAR_BIT - nlz_int(x) : \ - sizeof(x) <= SIZEOF_LONG ? SIZEOF_LONG * CHAR_BIT - nlz_long(x) : \ - sizeof(x) <= SIZEOF_LONG_LONG ? SIZEOF_LONG_LONG * CHAR_BIT - nlz_long_long(x) : \ - SIZEOF_INT128_T * CHAR_BIT - nlz_int128(x)) -#elif defined(HAVE_LONG_LONG) -# define bit_length(x) \ - (sizeof(x) <= SIZEOF_INT ? SIZEOF_INT * CHAR_BIT - nlz_int(x) : \ - sizeof(x) <= SIZEOF_LONG ? SIZEOF_LONG * CHAR_BIT - nlz_long(x) : \ - SIZEOF_LONG_LONG * CHAR_BIT - nlz_long_long(x)) -#else -# define bit_length(x) \ - (sizeof(x) <= SIZEOF_INT ? SIZEOF_INT * CHAR_BIT - nlz_int(x) : \ - SIZEOF_LONG * CHAR_BIT - nlz_long(x)) -#endif - #define U16(a) ((uint16_t)(a)) #define U32(a) ((uint32_t)(a)) #ifdef HAVE_UINT64_T |