Note that at -O3 there is a difference still:
clang (3.6.0):
addl %esi, %edi
movl %edi, %eax
retq
gcc (4.9.2)
leal (%rdi,%rsi), %eax
ret
Can't tell which is best, if any.
OG.
On Tue, May 12, 2015 at 4:06 AM, <[email protected]> wrote:
>
>
>
>
>> On May 11, 2015, at 6:16 PM, Thiago Farina <[email protected]> wrote:
>>
>> Hi,
>>
>> Clang 3.7 generated the following code:
>>
>> $ clang -S -O0 -fno-unwind-tables -fno-asynchronous-unwind-tables
>> add.c -o add_att_x64.s
>>
>> add:
>> pushq %rbp
>> movq %rsp, %rbp
>> movl %edi, -4(%rbp)
>> movl %esi, -8(%rbp)
>> movl -4(%rbp), %esi
>> addl -8(%rbp), %esi
>> movl %esi, %eax
>> popq %rbp
>> retq
>>
>> While gcc 4.8 generated the following:
>>
>> $ gcc -S -O0 -fno-unwind-tables -fno-asynchronous-unwind-tables add.c
>> -o add_att_x64.s
>>
>> add:
>> pushq %rbp
>> movq %rsp, %rbp
>> movl %edi, -4(%rbp)
>> movl %esi, -8(%rbp)
>> movl -8(%rbp), %eax
>> movl -4(%rbp), %edx
>> addl %edx, %eax
>> popq %rbp
>> ret
>>
>> $ cat add.c
>> int add(int a, int b) {
>> return a + b;
>> }
>>
>> Is the clang version better?
>
> Neither is better or worse due to this is at -O0.
>
> Thanks,
> Andrew
>
>>
>> --
>> Thiago Farina