Re[13]: Откуда эта лютая любовь к знаковым целым?
От: vopl Россия  
Дата: 07.05.20 20:47
Оценка:
Здравствуйте, Reset, Вы писали:

R>>>Не очень понимаю, про какие проверки вы все говорите: godbolt (смотреть на серенькое и желтенькое, т.е. содержимое цикла).


V>>Добавь -m32, или замени int на long, чтобы размер индекса совпадал с разрядностью платформы.


R>Ну, так в том и суть. Меняешь unsigned на unsigned long и код становится как с int. Т.е. на AMD64 почему-то не получается инкрементировать eax, а читать rax (с нулями в старших байтах), поэтому возникает лишняя команда (остальной код в цикле не меняется). А в случае с int сразу используется 64-х битный регистр, потому что переполнение int — UB и это используется для "оптимизации", в результате которой код со счетчиком типа int работает не как 32-х битный.


R>Никаких "проверок" в коде я не увидел. Увидел работу с unsigned в отдельном регистре и пессимизацию из-за того, что 32 бита приходится превращать в 64 для работы с указателем.


https://godbolt.org/z/CCcA5n, в шапке цикла, sub+je против sub+test+jle
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.