The compiler is allowed to chose the size of an enum variable
based on the values it is expected to store. So force the compiler
to use at least a 32 bit integer type for the Score.
MSVC and Intel do not change, while gcc under -O3 is affected
by this change.
No functional change.
Signed-off-by: Marco Costalba <mcostalba@gmail.com>
/// integer (enum), first LSB 16 bits are used to store endgame
/// value, while upper bits are used for midgame value.
/// integer (enum), first LSB 16 bits are used to store endgame
/// value, while upper bits are used for midgame value.
+enum Score { ENSURE_32_BIT_SIZE = 1 << 31 };
inline Value eg_value(Score s) { return Value(int16_t(s & 0xffff)); }
inline Value mg_value(Score s) { return Value((int(s) + 32768) >> 16); }
inline Value eg_value(Score s) { return Value(int16_t(s & 0xffff)); }
inline Value mg_value(Score s) { return Value((int(s) + 32768) >> 16); }