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

Andy Lutomirski
2020-05-06T19:57:16Z

> On May 6, 2020, at 10:23 AM, Linus Torvalds <torvalds@linux-foundation.org> wrote:
>
> ﻿On Wed, May 6, 2020 at 6:51 AM Peter Zijlstra <peterz@infradead.org> 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.