if(!A && !B)
кажется, что она должна составить доПочему не удается (! A &&! B) оптимизировать одну инструкцию TEST?
mov eax, dword ptr[esp + A_offset]
test eax, dword ptr[esp + B_offset]
jne ~~~~~~~~~~
компилятор на самом деле генерирует
mov eax, dword ptr[esp + A_offset]
test eax, eax
jne ~~~~~~~~~~
mov eax, dword ptr[esp + B_offset]
test eax, eax
jne ~~~~~~~~~~
См свалка здесь
8B 45 F8 mov eax,dword ptr [b]
83 7D FC 00 cmp dword ptr [a],0
75 04 jne main+32h (0A71072h)
85 C0 test eax,eax
75 00 jne main+32h (0A71072h)
Почему не использовать одну команду TEST сохранить филиалы и инструкции?
Что делать, если A = 1 и B = 2? Тогда тест даст неправильный ответ. –
@Yuval Это не дубликат (по крайней мере, не тот конкретный вопрос). Проблема здесь: '(a! = 0) & (b! = 0' vs' (a & b)! = 0', а не ленивая оценка. –
@MarcGlisse В вопросе говорится '&&', а не '&'. – molbdnilo