> On May 6, 2020, at 10:23 AM, Linus Torvalds <[email protected]> 
> wrote:
> 
> On Wed, May 6, 2020 at 6:51 AM Peter Zijlstra <[email protected]> wrote:
>> 
>> I was hoping for:
>> 
>>        bar:                                    # @bar
>>                movl    %edi, .L_x$local(%rip)
>>                retq
>>        ponies:                                 # @ponies
>>                movq    .Lfoo$local(%rip), %rax
>>                testq   %rax, %rax
>>                jz      1f
>>                jmpq    *%rcx                   # TAILCALL
>>        1:
>>                retq
> 
> If you want to just avoid the 'cmov', the best way to do that is to
> insert a barrier() on one side of the if-statement.
> 
> That breaks the ability to turn the conditional jump into a cmov.

Having done this in the past, you can get potentially better code with asm 
volatile (“”); than with a barrier and its memory clobber. I don’t know if that 
will make a difference in this particular case.

Reply via email to