File tree 1 file changed +17
-2
lines changed
1 file changed +17
-2
lines changed Original file line number Diff line number Diff line change @@ -91,14 +91,29 @@ static int64_t power(int64_t base, int64_t exp)
91
91
}
92
92
93
93
#if defined(_MSC_VER )
94
- #pragma intrinsic(_BitScanReverse64)
94
+ # if defined(_WIN64 )
95
+ # pragma intrinsic(_BitScanReverse64)
96
+ # else
97
+ # pragma intrinsic(_BitScanReverse)
98
+ # endif
95
99
#endif
96
100
97
101
static int32_t get_bucket_index (const struct hdr_histogram * h , int64_t value )
98
102
{
99
103
#if defined(_MSC_VER )
100
104
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
102
117
int32_t pow2ceiling = 64 - (63 - leading_zero ); /* smallest power of 2 containing value */
103
118
#else
104
119
int32_t pow2ceiling = 64 - __builtin_clzll (value | h -> sub_bucket_mask ); /* smallest power of 2 containing value */
You can’t perform that action at this time.
0 commit comments