Merge pull request #214 from Coeur/coeur/leading_zeroes_generic

float_common.h: fix possible misuse of comma operator
This commit is contained in:
Daniel Lemire 2023-07-10 10:59:05 -04:00 committed by GitHub
commit 33a2f8f203
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -217,18 +217,16 @@ struct value128 {
constexpr value128() : low(0), high(0) {} constexpr value128() : low(0), high(0) {}
}; };
/* Helper C++11 constexpr generic implementation of leading_zeroes */ /* Helper C++14 constexpr generic implementation of leading_zeroes */
fastfloat_really_inline constexpr fastfloat_really_inline FASTFLOAT_CONSTEXPR14
int leading_zeroes_generic(uint64_t input_num, int last_bit = 0) { int leading_zeroes_generic(uint64_t input_num, int last_bit = 0) {
return ( if(input_num & uint64_t(0xffffffff00000000)) { input_num >>= 32; last_bit |= 32; }
((input_num & uint64_t(0xffffffff00000000)) && (input_num >>= 32, last_bit |= 32)), if(input_num & uint64_t( 0xffff0000)) { input_num >>= 16; last_bit |= 16; }
((input_num & uint64_t( 0xffff0000)) && (input_num >>= 16, last_bit |= 16)), if(input_num & uint64_t( 0xff00)) { input_num >>= 8; last_bit |= 8; }
((input_num & uint64_t( 0xff00)) && (input_num >>= 8, last_bit |= 8)), if(input_num & uint64_t( 0xf0)) { input_num >>= 4; last_bit |= 4; }
((input_num & uint64_t( 0xf0)) && (input_num >>= 4, last_bit |= 4)), if(input_num & uint64_t( 0xc)) { input_num >>= 2; last_bit |= 2; }
((input_num & uint64_t( 0xc)) && (input_num >>= 2, last_bit |= 2)), if(input_num & uint64_t( 0x2)) { input_num >>= 1; last_bit |= 1; }
((input_num & uint64_t( 0x2)) && (input_num >>= 1, last_bit |= 1)), return 63 - last_bit;
63 - last_bit
);
} }
/* result might be undefined when input_num is zero */ /* result might be undefined when input_num is zero */