[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-kernel
Subject:    Re: More annoying code generation by clang
From:       "H. Peter Anvin" <hpa () zytor ! com>
Date:       2024-04-08 13:41:12
Message-ID: A120A8EC-AB1E-44FB-AEAB-09DFE282CCF8 () zytor ! com
[Download RAW message or body]

On April 8, 2024 1:49:34 AM PDT, Peter Zijlstra <peterz@infradead.org> wrote:
> On Thu, Apr 04, 2024 at 03:53:49PM -0700, Linus Torvalds wrote:
> 
> > diff --git a/arch/x86/include/asm/barrier.h b/arch/x86/include/asm/barrier.h
> > index 66e57c010392..6159d2cbbfde 100644
> > --- a/arch/x86/include/asm/barrier.h
> > +++ b/arch/x86/include/asm/barrier.h
> > @@ -33,20 +33,15 @@
> > * Returns:
> > *     0 - (index < size)
> > */
> > +#define array_index_mask_nospec(idx,sz) ({	\
> > +	typeof((idx)+(sz)) __idx = (idx);	\
> > +	typeof(__idx) __sz = (sz);		\
> > +	typeof(__idx) __mask;			\
> > +	asm volatile ("cmp %1,%2; sbb %0,%0"	\
> > +			:"=r" (__mask)		\
> > +			:"ir"(__sz),"r" (__idx)	\
> > +			:"cc");			\
> > +	__mask; })
> 
> Should this not carry a comment about the "ir" constraint wanting to be
> "g" except for clang being daft?
> 
> (I really wish clang would go fix this, it keeps coming up time and
> again).
> 
> > 
> > /* Prevent speculative execution past this barrier. */
> > #define barrier_nospec() asm volatile("lfence":::"memory")
> 

If the only reason for "ir" as opposed to "g" (= "irm") is clang then it really needs \
to be called out. Or better yet, don't do anything and let the clang people actually \
fix their code generation.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic