summaryrefslogtreecommitdiff
path: root/deps
diff options
context:
space:
mode:
authorjasnell <jasnell@gmail.com>2019-02-08 09:18:29 -0800
committerjasnell <jasnell@gmail.com>2019-02-08 09:20:56 -0800
commitd999b55d61f5b7ba5b0cd244d246c49c96ca6afb (patch)
tree2cd7ec6b86268060a91440fcb6e69b8b35d0e14c /deps
parentbcdd228f90b3e9e428b584814e7d52627616456a (diff)
downloadandroid-node-v8-d999b55d61f5b7ba5b0cd244d246c49c96ca6afb.tar.gz
android-node-v8-d999b55d61f5b7ba5b0cd244d246c49c96ca6afb.tar.bz2
android-node-v8-d999b55d61f5b7ba5b0cd244d246c49c96ca6afb.zip
deps: float fix for building HdrHistogram on Win x86
From: https://github.com/mcollina/native-hdr-histogram/commit/c63e97151dcff9b9aed1d8ea5e4f5964c69be32fideps: PR-URL: https://github.com/nodejs/node/pull/25378 Reviewed-By: Matteo Collina <matteo.collina@gmail.com> Reviewed-By: Gireesh Punathil <gpunathi@in.ibm.com> Reviewed-By: Stephen Belanger <admin@stephenbelanger.com> Reviewed-By: Richard Lau <riclau@uk.ibm.com> Reviewed-By: Anna Henningsen <anna@addaleax.net>
Diffstat (limited to 'deps')
-rw-r--r--deps/histogram/src/hdr_histogram.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/deps/histogram/src/hdr_histogram.c b/deps/histogram/src/hdr_histogram.c
index 1d7343442d..d9565b802e 100644
--- a/deps/histogram/src/hdr_histogram.c
+++ b/deps/histogram/src/hdr_histogram.c
@@ -91,14 +91,29 @@ static int64_t power(int64_t base, int64_t exp)
}
#if defined(_MSC_VER)
-#pragma intrinsic(_BitScanReverse64)
+# if defined(_WIN64)
+# pragma intrinsic(_BitScanReverse64)
+# else
+# pragma intrinsic(_BitScanReverse)
+# endif
#endif
static int32_t get_bucket_index(const struct hdr_histogram* h, int64_t value)
{
#if defined(_MSC_VER)
uint32_t leading_zero = 0;
- _BitScanReverse64(&leading_zero, value | h->sub_bucket_mask);
+ int64_t masked_value = value | h->sub_bucket_mask;
+# if defined(_WIN64)
+ _BitScanReverse64(&leading_zero, masked_value);
+# else
+ uint32_t high = masked_value >> 32;
+ if (_BitScanReverse(&leading_zero, high)) {
+ leading_zero += 32;
+ } else {
+ uint32_t low = masked_value & 0x00000000FFFFFFFF;
+ _BitScanReverse(&leading_zero, low);
+ }
+# endif
int32_t pow2ceiling = 64 - (63 - leading_zero); /* smallest power of 2 containing value */
#else
int32_t pow2ceiling = 64 - __builtin_clzll(value | h->sub_bucket_mask); /* smallest power of 2 containing value */