gcc - глупая оптимизация
От: maks1180  
Дата: 28.11.22 19:06
Оценка:
специально переписал код, что-бы не вызывать memset, что-бы быстре работал:
unsigned int c = (count_in_page) >> 2;
for(;c>0; c--) *p++ = 0;

В итоге при компиляции "-O2 -m32", вижу на сайте gcc.godbolt.org (стоит gcc v12.2)
sub esp, 12
mov eax, DWORD PTR [esp+20]
shr eax, 2
je .L2
sub esp, 4
sal eax, 2
push eax
push 0
push DWORD PTR [esp+28]
call memset
add esp, 16

Я не указал, что процессор поддерживает SSE и попросил оптимизировать по скорости "-O2 -m32" почему он считает, что вызов memset будет быстрее ?
Почему он сам за меня решает, может я явно знаю, мне нужно заполнить 8-16 байт, за 2-4 операции *p++ = 0, это же будет явно быстрее чем "call memset" ?
===============================================
(реклама, удалена модератором)
Отредактировано 28.11.2022 19:09 maks1180 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.