Есть ли какой-нибудь умный трюк, чтобы определить, имеет ли какое-либо из небольшого числа целых чисел (скажем, 3 или 4) определенное значение?
Простой
bool test(int a, int b, int c, int d)
{
// The compiler will pretty likely optimize it to (a == d | b == d | c == d)
return (a == d || b == d || c == d);
}
test(int, int, int, int):
cmp ecx, esi
sete al
cmp ecx, edx
sete dl
or eax, edx
cmp edi, ecx
sete dl
or eax, edx
ret
Те команды sete
имеют более высокую задержку, чем я хочу терпеть, поэтому я предпочел бы использовать что-то побитовое (&
, |
, ^
, ~
) и одно сравнение.