Helper C++11 constexpr generic implementation of leading_zeroes */
| 313 | |
| 314 | /* Helper C++11 constexpr generic implementation of leading_zeroes */ |
| 315 | fastfloat_really_inline constexpr |
| 316 | int leading_zeroes_generic(uint64_t input_num, int last_bit = 0) { |
| 317 | return ( |
| 318 | ((input_num & uint64_t(0xffffffff00000000)) && (input_num >>= 32, last_bit |= 32)), |
| 319 | ((input_num & uint64_t( 0xffff0000)) && (input_num >>= 16, last_bit |= 16)), |
| 320 | ((input_num & uint64_t( 0xff00)) && (input_num >>= 8, last_bit |= 8)), |
| 321 | ((input_num & uint64_t( 0xf0)) && (input_num >>= 4, last_bit |= 4)), |
| 322 | ((input_num & uint64_t( 0xc)) && (input_num >>= 2, last_bit |= 2)), |
| 323 | ((input_num & uint64_t( 0x2)) && (input_num >>= 1, last_bit |= 1)), |
| 324 | 63 - last_bit |
| 325 | ); |
| 326 | } |
| 327 | |
| 328 | /* result might be undefined when input_num is zero */ |
| 329 | fastfloat_really_inline FASTFLOAT_CONSTEXPR20 |