Вопрос видимо к гентушникам..
Простой топорный тестовый пример:
char bullshit[1024];
int main(int argc, char** argv){
int i;
for (i=0;i<1024;i++) bullshit[i]=0;
return 0;
}
Собираю с опциями "-O -march=pentium3 -mtune=pentium3 -mmmx -msse -ftree-vectorize", получается такое(сам цикл):
movl $0, %eax
.L2:
xorps %xmm0, %xmm0 // почему внутри цикла?
movaps %xmm0, bullshit(%eax)
addl $16, %eax
cmpl $1024, %eax
jne .L2
Если bullshit сдедать float, получим:
movl $0, %eax
xorps %xmm0, %xmm0 // всё почти также, но лишняя операция вынесена из цикла
.L2:
movaps %xmm0, bullshit(%eax)
addl $16, %eax
cmpl $4096, %eax
jne .L2
Казалось бы, никакой разницы быть не должно.
Но самое интересное начинается, когда присваем не 0. В случае float всё остается также, а при char имеем вот такой высер:
movl $0, %eax
.L2:
movb $15, bullshit(%eax)
movb $15, bullshit+1(%eax)
movb $15, bullshit+2(%eax)
movb $15, bullshit+3(%eax)
movb $15, bullshit+4(%eax)
movb $15, bullshit+5(%eax)
movb $15, bullshit+6(%eax)
movb $15, bullshit+7(%eax)
movb $15, bullshit+8(%eax)
movb $15, bullshit+9(%eax)
movb $15, bullshit+10(%eax)
movb $15, bullshit+11(%eax)
movb $15, bullshit+12(%eax)
movb $15, bullshit+13(%eax)
movb $15, bullshit+14(%eax)
movb $15, bullshit+15(%eax)
addl $16, %eax
cmpl $1024, %eax
jne .L2
Опции -O2 и -O3 для всех примеров делают код более раздутым и тревожным, но едва-ли более быстрым.
Собстно вопрос: как его заставить генерировать вменяемый код? Или не париться и собирать под i386 без всяких выкрутасов?
gcc version 4.2.1
Ответ на:
комментарий
от watashiwa_daredeska

Ответ на:
комментарий
от madcore
Ответ на:
комментарий
от madcore

Ответ на:
комментарий
от dilmah

Ответ на:
комментарий
от fmj

Ответ на:
комментарий
от dilmah

Ответ на:
комментарий
от madcore
Ответ на:
комментарий
от krum
Ответ на:
комментарий
от madcore
Ответ на:
комментарий
от sergio_nsk
Ответ на:
комментарий
от mv
Ответ на:
комментарий
от krum

Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от mv
Ответ на:
комментарий
от mv

Ответ на:
комментарий
от madcore
Ответ на:
комментарий
от sergio_nsk

Ответ на:
комментарий
от madcore
Ответ на:
комментарий
от mv
Ответ на:
комментарий
от sergio_nsk
Ответ на:
комментарий
от mv

Ответ на:
комментарий
от sergio_nsk

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Снова type aliasing, и баг в gcc (2016)
- Форум RH9.0 и do_brk :) (2003)
- Форум gcc - ключи оптимизации... (2004)
- Форум [ключи] Оптимизация (2010)
- Форум [2Silvy][gcc]Оптимизация (2010)
- Форум [gcc][ключи]скорость (2008)
- Форум Опции оптимизации gcc (2010)
- Форум Оптимизация в gcc (2007)
- Форум GCC оптимизация core 2 (2013)
- Форум Оптимизации циклов в gcc (2012)