[Mesa-dev] [PATCH 02/14] util: added ffsll() function

Jason Ekstrand jason at jlekstrand.net
Fri Aug 28 18:36:52 PDT 2015


On Aug 28, 2015 2:31 PM, "Brian Paul" <brianp at vmware.com> wrote:
>
> v2: fix errant _GNU_SOURCE test, per Matt Turner.
> ---
>  src/gallium/auxiliary/util/u_math.h | 20 ++++++++++++++++++++
>  1 file changed, 20 insertions(+)
>
> diff --git a/src/gallium/auxiliary/util/u_math.h
b/src/gallium/auxiliary/util/u_math.h
> index 56bd185..c551974 100644
> --- a/src/gallium/auxiliary/util/u_math.h
> +++ b/src/gallium/auxiliary/util/u_math.h
> @@ -389,6 +389,26 @@ unsigned ffs( unsigned u )
>  #define ffs __builtin_ffs
>  #endif
>
> +#ifdef HAVE___BUILTIN_FFSLL
> +#define ffsll __builtin_ffsll
> +#else
> +static inline int
> +ffsll(long long int val)
> +{
> +   int bit;
> +

Might be better to do

if (val & 0xffffffff)
    return ffs(val &0xffffffff);
else
    return ffs(val >> 32);

That may be a little cheaper.  I don't know if its actually better but its
one less ffs call (which may cross a library boundary)
--Jason

> +   bit = ffs((unsigned) (val & 0xffffffff));
> +   if (bit != 0)
> +      return bit;
> +
> +   bit = ffs((unsigned) (val >> 32));
> +   if (bit != 0)
> +      return 32 + bit;
> +
> +   return 0;
> +}
> +#endif
> +
>  #endif /* FFS_DEFINED */
>
>  /**
> --
> 1.9.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150828/82895b02/attachment.html>


More information about the mesa-dev mailing list