Skip to content

Commit

Permalink
deps: float fix for building HdrHistogram on Win x86
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
jasnell authored and addaleax committed Feb 8, 2019
1 parent 2cbb7a8 commit 823fd5b
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions deps/histogram/src/hdr_histogram.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 */
Expand Down

0 comments on commit 823fd5b

Please sign in to comment.