On 20/11/15 01:23, David Wohlferd wrote:
> I tried to picture the most basic case I can think of that uses 
> something clobber-able:
> 
>     for (int x=0; x < 1000; x++)
>        asm("#stuff");
> 
> This generates very simple and highly performant code:
> 
>          movl    $1000, %eax
> .L2:
>          #stuff
>          subl    $1, %eax
>          jne     .L2
> 
> Using extended asm to simulate the clobberall gives:
> 
>          movl    $1000, 44(%rsp)
> .L2:
>          #stuff
>          subl    $1, 44(%rsp)
>          jne     .L2
> 
> It allocates an extra 4 bytes, and changed everything to memory accesses 
> instead of using a register.

Can you show us your code?  I get

xx:
        movl    $1000, %eax
.L2:
        #stuff
        subl    $1, %eax
        jne     .L2
        rep; ret

for

void xx() {
  for (int x=0; x < 1000; x++)
    asm volatile("#stuff" : : : "memory");
}

What you're describing looks like a bug: x doesn't have its address
taken.

Andrew.

Reply via email to