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