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