Re: [PATCH v4 14/18] static_call: Add static_cond_call()

From: Andy Lutomirski
Date: Wed May 06 2020 - 15:57:16 EST




> On May 6, 2020, at 10:23 AM, Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote:
>
> ïOn Wed, May 6, 2020 at 6:51 AM Peter Zijlstra <peterz@xxxxxxxxxxxxx> 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.