File tree Expand file tree Collapse file tree 1 file changed +20
-2
lines changed
Expand file tree Collapse file tree 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)
9090}
9191
9292#if defined(_MSC_VER )
93- #pragma intrinsic(_BitScanReverse64)
93+ # if defined(_WIN64 )
94+ # pragma intrinsic(_BitScanReverse64)
95+ # else
96+ # pragma intrinsic(_BitScanReverse)
97+ # endif
9498#endif
9599
96100static int32_t get_bucket_index (const struct hdr_histogram * h , int64_t value )
97101{
98102#if defined(_MSC_VER )
99103 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
101119 int32_t pow2ceiling = 64 - (63 - leading_zero ); // smallest power of 2 containing value
102120#else
103121 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