aboutsummaryrefslogtreecommitdiffstats
path: root/bignum.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-07-10 05:58:45 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-07-10 05:58:45 +0000
commitcc47b02969fd33028f0f83d4020c565fd8ec0017 (patch)
tree87ebd6c7e76f4e836af9285c1ede2e6e7cf579d4 /bignum.c
parent94e7608b353c5c15601e35d876b674086a1bc565 (diff)
downloadruby-cc47b02969fd33028f0f83d4020c565fd8ec0017.tar.gz
bignum.c: select by preprocessor conditions
* bignum.c (maxpow_in_bdigit_dbl, maxpow_in_bdigit): select by preprocessor conditions to reduce dead code and suppress warnings. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41888 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'bignum.c')
-rw-r--r--bignum.c54
1 files changed, 24 insertions, 30 deletions
diff --git a/bignum.c b/bignum.c
index f2a61d1714..39d262e4c0 100644
--- a/bignum.c
+++ b/bignum.c
@@ -34,6 +34,14 @@ static VALUE big_three = Qnil;
#define USHORT _USHORT
#endif
+#if defined(HAVE_INT64_T) && defined(HAVE_INT128_T)
+# define SIZEOF_BDIGIT_DBL SIZEOF_INT128_T
+#elif SIZEOF_INT*2 <= SIZEOF_LONG_LONG
+# define SIZEOF_BDIGIT_DBL SIZEOF_LONG_LONG
+#else
+# define SIZEOF_BDIGIT_DBL SIZEOF_LONG
+#endif
+
#ifdef WORDS_BIGENDIAN
# define HOST_BIGENDIAN_P 1
#else
@@ -364,35 +372,28 @@ maxpow_in_bdigit_dbl(int base, int *exp_ret)
assert(2 <= base && base <= 36);
- switch (sizeof(BDIGIT_DBL)) {
- case 2:
+ {
+#if SIZEOF_BDIGIT_DBL == 0
+#elif SIZEOF_BDIGIT_DBL == 2
maxpow = maxpow16_num[base-2];
exponent = maxpow16_exp[base-2];
- break;
- case 4:
+#elif SIZEOF_BDIGIT_DBL == 4
maxpow = maxpow32_num[base-2];
exponent = maxpow32_exp[base-2];
- break;
-#ifdef HAVE_UINT64_T
- case 8:
+#elif SIZEOF_BDIGIT_DBL == 8 && defined HAVE_UINT64_T
maxpow = maxpow64_num[base-2];
exponent = maxpow64_exp[base-2];
- break;
-#endif
-#ifdef HAVE_UINT128_T
- case 16:
+#elif SIZEOF_BDIGIT_DBL == 16 && defined HAVE_UINT128_T
maxpow = maxpow128_num[base-2];
exponent = maxpow128_exp[base-2];
- break;
-#endif
- default:
+#else
maxpow = base;
exponent = 1;
while (maxpow <= BDIGIT_DBL_MAX / base) {
maxpow *= base;
exponent++;
}
- break;
+#endif
}
*exp_ret = exponent;
@@ -405,35 +406,28 @@ maxpow_in_bdigit(int base, int *exp_ret)
BDIGIT maxpow;
int exponent;
- switch (SIZEOF_BDIGITS) {
- case 2:
+ {
+#if SIZEOF_BDIGITS == 0
+#elif SIZEOF_BDIGITS == 2
maxpow = maxpow16_num[base-2];
exponent = maxpow16_exp[base-2];
- break;
- case 4:
+#elif SIZEOF_BDIGITS == 4
maxpow = maxpow32_num[base-2];
exponent = maxpow32_exp[base-2];
- break;
-#ifdef HAVE_UINT64_T
- case 8:
+#elif SIZEOF_BDIGITS == 8 && defined HAVE_UINT64_T
maxpow = maxpow64_num[base-2];
exponent = maxpow64_exp[base-2];
- break;
-#endif
-#ifdef HAVE_UINT128_T
- case 16:
+#elif SIZEOF_BDIGITS == 16 && defined HAVE_UINT128_T
maxpow = maxpow128_num[base-2];
exponent = maxpow128_exp[base-2];
- break;
-#endif
- default:
+#else
maxpow = base;
exponent = 1;
while (maxpow <= BDIGMAX / base) {
maxpow *= base;
exponent++;
}
- break;
+#endif
}
*exp_ret = exponent;