Вопрос видимо к гентушникам..
Простой топорный тестовый пример:
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)