[Mesa-dev] [PATCH] gallium/util: Don't use __builtin_clrsb in util_last_bit().

Roland Scheidegger sroland at vmware.com
Tue Feb 3 05:37:13 PST 2015


Am 03.02.2015 um 02:28 schrieb Matt Turner:
> Unclear circumstances lead to undefined symbols on x86.
> 
> Bugzilla: https://urldefense.proofpoint.com/v2/url?u=https-3A__bugs.gentoo.org_show-5Fbug.cgi-3Fid-3D536916&d=AwIGaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=Vjtt0vs_iqoI31UfJxBl7yv9I2FeiaeAYgMTLKRBc_I&m=MGEUCqG6f2VdOqZHSyX6LIUPo4REk4_ehZWPRWGSuQI&s=faytCFpyY97_7ti4xOHK34hphsVRE0YwSdvqU3DYl2k&e= 
> ---
>  src/gallium/auxiliary/util/u_math.h | 4 ----
>  1 file changed, 4 deletions(-)
> 
> diff --git a/src/gallium/auxiliary/util/u_math.h b/src/gallium/auxiliary/util/u_math.h
> index 19c7343..ca6d0f1 100644
> --- a/src/gallium/auxiliary/util/u_math.h
> +++ b/src/gallium/auxiliary/util/u_math.h
> @@ -561,14 +561,10 @@ util_last_bit(unsigned u)
>  static INLINE unsigned
>  util_last_bit_signed(int i)
>  {
> -#if defined(__GNUC__) && ((__GNUC__ * 100 + __GNUC_MINOR__) >= 407) && !defined(__INTEL_COMPILER)
> -   return 31 - __builtin_clrsb(i);
> -#else
>     if (i >= 0)
>        return util_last_bit(i);
>     else
>        return util_last_bit(~(unsigned)i);
> -#endif
>  }
>  
>  /* Destructively loop over all of the bits in a mask as in:
> 

This looks like a gcc bug to me, right?
If so it should probably be reported there.
(I guess I can live with the patch since I have no idea if it could be
narrowed down further when the builtin doesn't work but I don't
especially like it.)

Roland



More information about the mesa-dev mailing list