deps: float fix for building HdrHistogram on Win x86

From:
c63e97151dideps:

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>
This commit is contained in:
jasnell 2019-02-08 09:18:29 -08:00
parent bcdd228f90
commit d999b55d61
No known key found for this signature in database
GPG Key ID: 7341B15C070877AC

View File

@ -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 */