Такого не будет в правильной функции.
А правильная функция — это какая?
У которой есть проверка ошибок.
Ошибок чего? Тебя попросили ненулевое значение. Вот твоя функция:int func(void) { return 1; } Вот твоя функция:func: ??? ret Какие ошибки ты предлагаешь проверять?
func: ... call MessageBox test eax, eax sete al ret
Не совсем понятно, что тут предлагается проверять, ну да ладно. А если у тебя уже нет результата? Ты что-то получил, проверил ошибку, пошёл сделал что-то полезное, после этого в EAX мусор.
Если нужно сделать, чтобы при мусоре в EAX вернулось 1, тогда setne al, если нужно чтобы 0, тогда... Короче, вот: xor ecx, ecx test eax, eax cmovne eax, ecx sete al
gcc последняя версия, O3. Та функция, где я проверял на оптимизацию множественных call []. Добавил в конец > 1 ? 0 : 1;, вот: https://godbolt.org/z/v79r3Kaaf
Можешь ещё -march native дописать по приколу
Чтобы регистров хватило, и оно начало раскидывать результаты во всякие там r12, прямо как ты хотел.
why not? https://godbolt.org/z/6fdzrn5a3
Обсуждают сегодня