summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/H5Vprivate.h29
-rw-r--r--src/H5config.h.in3
2 files changed, 22 insertions, 10 deletions
diff --git a/src/H5Vprivate.h b/src/H5Vprivate.h
index 5848a57..0554c47 100644
--- a/src/H5Vprivate.h
+++ b/src/H5Vprivate.h
@@ -346,19 +346,28 @@ static const char LogTable256[] =
static H5_inline unsigned UNUSED
H5V_log2_gen(hsize_t n)
{
- unsigned r = 0; /* r will be log2(n) */
+ unsigned r; /* r will be log2(n) */
register unsigned int t, tt, ttt; /* temporaries */
- if((ttt = (unsigned)(n >> 32)))
- if((tt = (unsigned)(n >> 48)))
- r = (t = (unsigned)(n >> 56)) ? 56 + LogTable256[t] : 48 + LogTable256[tt & 0xFF];
+#ifdef H5_BAD_LOG2_CODE_GENERATED
+ if(n > (uint64_t)0x7fffffffffffffff)
+ r = 63;
+ else {
+ n &= (uint64_t)0x7fffffffffffffff;
+#endif /* H5_BAD_LOG2_CODE_GENERATED */
+ if((ttt = (unsigned)(n >> 32)))
+ if((tt = (unsigned)(n >> 48)))
+ r = (t = (unsigned)(n >> 56)) ? 56 + LogTable256[t] : 48 + LogTable256[tt & 0xFF];
+ else
+ r = (t = (unsigned)(n >> 40)) ? 40 + LogTable256[t] : 32 + LogTable256[ttt & 0xFF];
else
- r = (t = (unsigned)(n >> 40)) ? 40 + LogTable256[t] : 32 + LogTable256[ttt & 0xFF];
- else
- if((tt = (unsigned)(n >> 16)))
- r = (t = (unsigned)(n >> 24)) ? 24 + LogTable256[t] : 16 + LogTable256[tt & 0xFF];
- else
- r = (t = (unsigned)(n >> 8)) ? 8 + LogTable256[t] : LogTable256[n];
+ if((tt = (unsigned)(n >> 16)))
+ r = (t = (unsigned)(n >> 24)) ? 24 + LogTable256[t] : 16 + LogTable256[tt & 0xFF];
+ else
+ r = (t = (unsigned)(n >> 8)) ? 8 + LogTable256[t] : LogTable256[n];
+#ifdef H5_BAD_LOG2_CODE_GENERATED
+ } /* end else */
+#endif /* H5_BAD_LOG2_CODE_GENERATED */
return(r);
} /* H5V_log2_gen() */
diff --git a/src/H5config.h.in b/src/H5config.h.in
index 9022204..6addc39 100644
--- a/src/H5config.h.in
+++ b/src/H5config.h.in
@@ -1,5 +1,8 @@
/* src/H5config.h.in. Generated from configure.in by autoheader. */
+/* Define if your system generates wrong code for log2 routine. */
+#undef BAD_LOG2_CODE_GENERATED
+
/* Define if your system can handle converting denormalized floating-point
values. */
#undef CONVERT_DENORMAL_FLOAT