Andrew Haley wrote:
> Thomas Gleixner wrote:
> 
>> While testing various kernel configs we found out that the problem
>> comes and goes. Finally I started to compare the gcc command line
>> options and after some fiddling it turned out that the following
>> minimal deltas change the code generator behaviour:
>>
>> Bad:  -march=pentium-mmx                -Wa,-mtune=generic32
>> Good: -march=i686        -mtune=generic -Wa,-mtune=generic32
>> Good: -march=pentium-mmx -mtune-generic -Wa,-mtune=generic32
>>
>> I'm not supposed to understand the logic behind that, right ?
> 
> I don't either.  I'm seeing:
> 
> timer_stats_update_stats:                                       
> timer_stats_update_stats:
>         pushl   %edi                                          <
>         leal    8(%esp), %edi                                 <
>         andl    $-16, %esp                                    <
>         pushl   -4(%edi)                                      <
>         pushl   %ebp                                                    pushl 
>   %ebp
>         movl    %esp, %ebp                                              movl  
>   %esp, %ebp
>         pushl   %edi                                          |         andl  
>   $-16, %esp
>         pushl   %esi                                          |         subl  
>   $112, %esp
>         pushl   %ebx                                          |         movl  
>   %ebx, 100(%esp)
>         subl    $108, %esp                                    |         movl  
>   %esi, 104(%esp)
>                                                               >         movl  
>   %edi, 108(%esp)
>         call    mcount                                                  call  
>   mcount
> 
> where the only difference is -mtune=generic.  I'm investigating.

Forget that, I see from the gcc-bugs list that hj has tracked it down to
the use of DRAP, and for some reason the mtune options affect that.  He's
the best person to fix this.

Andrew.

Reply via email to