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
  • Loading branch information
jasnell committed Feb 7, 2019
1 parent b88df96 commit 386f06b
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 386f06b

Please sign in to comment.