Skip to content

Commit 823fd5b

Browse files
jasnelladdaleax
authored andcommitted
deps: float fix for building HdrHistogram on Win x86
From: mcollina/native-hdr-histogram@c63e97151dcff9b9aed1d8ea5e4f5964c69be32fideps: PR-URL: #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>
1 parent 2cbb7a8 commit 823fd5b

File tree

1 file changed

+17
-2
lines changed

1 file changed

+17
-2
lines changed

deps/histogram/src/hdr_histogram.c

+17-2
Original file line numberDiff line numberDiff line change
@@ -91,14 +91,29 @@ static int64_t power(int64_t base, int64_t exp)
9191
}
9292

9393
#if defined(_MSC_VER)
94-
#pragma intrinsic(_BitScanReverse64)
94+
# if defined(_WIN64)
95+
# pragma intrinsic(_BitScanReverse64)
96+
# else
97+
# pragma intrinsic(_BitScanReverse)
98+
# endif
9599
#endif
96100

97101
static int32_t get_bucket_index(const struct hdr_histogram* h, int64_t value)
98102
{
99103
#if defined(_MSC_VER)
100104
uint32_t leading_zero = 0;
101-
_BitScanReverse64(&leading_zero, value | h->sub_bucket_mask);
105+
int64_t masked_value = value | h->sub_bucket_mask;
106+
# if defined(_WIN64)
107+
_BitScanReverse64(&leading_zero, masked_value);
108+
# else
109+
uint32_t high = masked_value >> 32;
110+
if (_BitScanReverse(&leading_zero, high)) {
111+
leading_zero += 32;
112+
} else {
113+
uint32_t low = masked_value & 0x00000000FFFFFFFF;
114+
_BitScanReverse(&leading_zero, low);
115+
}
116+
# endif
102117
int32_t pow2ceiling = 64 - (63 - leading_zero); /* smallest power of 2 containing value */
103118
#else
104119
int32_t pow2ceiling = 64 - __builtin_clzll(value | h->sub_bucket_mask); /* smallest power of 2 containing value */

0 commit comments

Comments
 (0)