deps: float fix for building HdrHistogram on Win x86
From:
c63e97151d
ideps:
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:
parent
bcdd228f90
commit
d999b55d61
19
deps/histogram/src/hdr_histogram.c
vendored
19
deps/histogram/src/hdr_histogram.c
vendored
@ -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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user