Skip to content
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
deps: float fix for building HdrHistogram on Win x86
  • Loading branch information
jasnell committed Feb 7, 2019
commit 386f06b9b3fbcd8a126f3d1369e80812430481e7
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