diff options
author | jasnell <jasnell@gmail.com> | 2019-02-08 09:18:29 -0800 |
---|---|---|
committer | jasnell <jasnell@gmail.com> | 2019-02-08 09:20:56 -0800 |
commit | d999b55d61f5b7ba5b0cd244d246c49c96ca6afb (patch) | |
tree | 2cd7ec6b86268060a91440fcb6e69b8b35d0e14c /deps | |
parent | bcdd228f90b3e9e428b584814e7d52627616456a (diff) | |
download | android-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.c | 19 |
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 */ |