Speed up results by Joona:
gcc-4.7 (1.5%)
gcc-4.8 (0.5%)
gcc-4.9 (1.0%)
Speed up results by mstembera:
gcc 474
p-value: 0.719
gcc 482
p-value: 1
gcc 492
p-value: 0.859
No functional change
Resolves #211
/// according to the standard a simple cast to short is implementation defined
/// and so is a right shift of a signed integer.
inline Value mg_value(Score s) {
- return Value(((s + 0x8000) & ~0xFFFF) / 0x10000);
+
+ union { uint16_t u; int16_t s; } mg = { uint16_t(unsigned(s + 0x8000) >> 16) };
+ return Value(mg.s);
}
inline Value eg_value(Score s) {
- return Value((int)(unsigned(s) & 0x7FFFU) - (int)(unsigned(s) & 0x8000U));
+
+ union { uint16_t u; int16_t s; } eg = { uint16_t(unsigned(s)) };
+ return Value(eg.s);
}
#define ENABLE_BASE_OPERATORS_ON(T) \