[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] x86: use tzcnt instead of bsf



On 23/01/15 16:39, Jan Beulich wrote:
> Following a compiler change done in 2012, make use of the fact that for
> non-zero input BSF and TZCNT produce the same numeric result (EFLAGS
> setting differs), and that CPUs not knowing of TZCNT will treat the
> instruction as BSF (i.e. ignore what looks like a REP prefix to them).
> The assumption here is that TZCNT would never have worse performance
> than BSF.
>
> Also extend the asm() input in find_first_set_bit() to allow memory
> operands.
>
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>

> ---
> Thanks to Andrew for noticing that I forgot to post this for Xen after
> a similar change got accepted into the Linux kernel.
>
> --- a/xen/arch/x86/bitops.c
> +++ b/xen/arch/x86/bitops.c
> @@ -62,7 +62,7 @@ unsigned int __find_first_zero_bit(
>          "   je 2f\n\t"
>          "   xor -"STR(BITS_PER_LONG/8)"(%2),%3\n\t"
>          "   jz 1b\n\t"
> -        "   bsf %3,%0\n\t"
> +        "   rep; bsf %3,%0\n\t"
>          "   lea -"STR(BITS_PER_LONG/8)"(%2),%2\n\t"
>          "2: sub %%ebx,%%edi\n\t"
>          "   shl $3,%%edi\n\t"
> --- a/xen/arch/x86/hvm/vpic.c
> +++ b/xen/arch/x86/hvm/vpic.c
> @@ -56,7 +56,7 @@ static int vpic_get_priority(struct hvm_
>          return VPIC_PRIO_NONE;
>  
>      /* prio = ffs(mask ROR vpic->priority_add); */
> -    asm ( "ror %%cl,%b1 ; bsf %1,%0"
> +    asm ( "ror %%cl,%b1 ; rep; bsf %1,%0"
>            : "=r" (prio) : "q" ((uint32_t)mask), "c" (vpic->priority_add) );
>      return prio;
>  }
> --- a/xen/include/asm-x86/bitops.h
> +++ b/xen/include/asm-x86/bitops.h
> @@ -382,7 +382,7 @@ static inline unsigned int __scanbit(uns
>   */
>  static inline unsigned int find_first_set_bit(unsigned long word)
>  {
> -    asm ( "bsf %1,%0" : "=r" (word) : "r" (word) );
> +    asm ( "rep; bsf %1,%0" : "=r" (word) : "rm" (word) );
>      return (unsigned int)word;
>  }
>  
>
>
>


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.