Skip to content

Commit

Permalink
Fix for 32-bit Windows
Browse files Browse the repository at this point in the history
  • Loading branch information
bzoz committed Jun 1, 2016
1 parent 9be4ac7 commit c63e971
Showing 1 changed file with 20 additions and 2 deletions.
22 changes: 20 additions & 2 deletions src/hdr_histogram.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,14 +90,32 @@ 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 c63e971

Please sign in to comment.