File tree 1 file changed +20
-2
lines changed
1 file changed +20
-2
lines changed Original file line number Diff line number Diff line change @@ -90,14 +90,32 @@ static int64_t power(int64_t base, int64_t exp)
90
90
}
91
91
92
92
#if defined(_MSC_VER )
93
- #pragma intrinsic(_BitScanReverse64)
93
+ # if defined(_WIN64 )
94
+ # pragma intrinsic(_BitScanReverse64)
95
+ # else
96
+ # pragma intrinsic(_BitScanReverse)
97
+ # endif
94
98
#endif
95
99
96
100
static int32_t get_bucket_index (const struct hdr_histogram * h , int64_t value )
97
101
{
98
102
#if defined(_MSC_VER )
99
103
uint32_t leading_zero = 0 ;
100
- _BitScanReverse64 (& leading_zero , value | h -> sub_bucket_mask );
104
+ int64_t masked_value = value | h -> sub_bucket_mask ;
105
+ # if defined(_WIN64 )
106
+ _BitScanReverse64 (& leading_zero , masked_value );
107
+ # else
108
+ uint32_t high = masked_value >> 32 ;
109
+ if (_BitScanReverse (& leading_zero , high ))
110
+ {
111
+ leading_zero += 32 ;
112
+ }
113
+ else
114
+ {
115
+ uint32_t low = masked_value & 0x00000000FFFFFFFF ;
116
+ _BitScanReverse (& leading_zero , low );
117
+ }
118
+ # endif
101
119
int32_t pow2ceiling = 64 - (63 - leading_zero ); // smallest power of 2 containing value
102
120
#else
103
121
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