This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] powerpc: Remove uses of operand modifier (%s) in inline asm


"Gabriel F. T. Gomes" <gftg@linux.vnet.ibm.com> writes:

> Subject: [PATCH] powerpc: Remove uses of operand modifier (%s) in inline asm
>
> The operand modifier %s on powerpc is an undocumented internal implementation
> detail of GCC.  Besides that, the GCC community wants to remove it.  This patch
> rewrites the expressions that use this modifier with logically equivalent
> expressions that don't require it.
>
> Explanation for the substitution:
>
> The %s modifier takes an immediate operand and prints 32 less such immediate.
> Thus, in the previous code, the expression resulted in:
>
>   32 - __builtin_ffs(e)
>
> where e was guaranteed to have exactly a single bit set, by the following
> expressions:
>
>   (e & (e-1) == 0) : e has at most one bit set.
>   (e != 0)         : e is not zero, thus it has at least one bit set.
>
> Since we guarantee that there is exactly only one bit set, the following
> statement is true:
>
>   32 - __builtin_ffs(e) == __builtin_clz(e)
>
> Thus, we can replace __builtin_ffs with __builtin_clz and remove the %s operand
> modifier.

Pushed as 183a34d.

Thanks!

-- 
Tulio Magno


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]