[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] x86: use gcc6'es flags asm() output support
>>> On 01.07.16 at 18:51, <andrew.cooper3@xxxxxxxxxx> wrote: > On 01/07/16 17:10, Jan Beulich wrote: >>>>> On 01.07.16 at 17:38, <andrew.cooper3@xxxxxxxxxx> wrote: >>> As for interleaving inside the asm statement itself, we already have >>> precedent for that with the HAVE_GAS_* predicates. It would make the >>> patch rather larger, but might end up looking cleaner. It is probably >>> also worth switching to named parameters to reduce the risk of getting >>> positional parameters out of order. >> So taking just the first example I've converted: Do you think this >> >> static bool_t even_parity(uint8_t v) >> { >> asm ( "test %1,%1" >> #ifdef __GCC_ASM_FLAG_OUTPUTS__ >> : "=@ccp" (v) >> #else >> "; setp %0" >> : "=qm" (v) >> #endif >> : "q" (v) ); >> >> return v; >> } >> >> is better than the original? > > How about a different example, from the second hunk > > diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c > b/xen/arch/x86/x86_emulate/x86_emulate.c > index 460d1f7..8d52a41 100644 > --- a/xen/arch/x86/x86_emulate/x86_emulate.c > +++ b/xen/arch/x86/x86_emulate/x86_emulate.c > @@ -832,8 +832,19 @@ static int read_ulong( > static bool_t mul_dbl(unsigned long m[2]) > { > bool_t rc; > - asm ( "mul %1; seto %2" > - : "+a" (m[0]), "+d" (m[1]), "=qm" (rc) ); > + > + asm ( "mul %1;" > +#ifndef __GCC_ASM_FLAG_OUTPUTS__ > + "seto %[rc];" > +#endif > + : "+a" (m[0]), "+d" (m[1]), > +#ifdef __GCC_ASM_FLAG_OUTPUTS__ > + [rc] "=@cco" (rc) > +#else > + [rc] "=qm" (rc) > +#endif > + ); > + > return rc; > } > > This at least doesn't mix the : inside an #ifdef At the price of two #ifdef-s. And in the example I'm really not worried about the colon going into both branches of the #if, but about general readability of the resulting code. >> I'm unsure, and I'm actually inclined to >> think that then the abstraction alternative might look better. > > If the abstraction comes in two parts, one which may insert a `setcc` > instruction, and one which selects between =qm and =@cc, it wouldn't end > up hiding the :. Opening an easy route to making mistakes. Imo such an abstraction needs to be either a single item, ot not be done at all. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |