Am 06.06.2011 23:18, schrieb Tormod Volden:
> On Sun, Jun 5, 2011 at 1:14 AM, Benjamin Bellec wrote:
>> So here is a v2 patch with a builtin GCC optimization which is the
>> fastest (thx Matt to point me to this solution).
>>
> 
> From patch:
> +       return (1 << (32 - __builtin_clz(x - 1)));
> 
> I don't know if the use of gcc guarantees that int will always be 32
> bit, otherwise maybe use sizeof(int)*8 instead of 32? Or even
> sizeof(int)*CHAR_BIT for good measures. Although probably the robots
> have taken over before this becomes necessary :)
> 

Hmm I think a lot more things will break if that's not 32bit.
There's another problem though, gcc docs say this:

— Built-in Function: int __builtin_clz (unsigned int x)

    Returns the number of leading 0-bits in x, starting at the most
significant bit position. If x is 0, the result is undefined.

Which means it's now undefined for x == 1 too - not handling x == 0
correctly might not be much of a problem in practice, but the same
certainly cannot be said for x == 1. So that should probably be

+#if defined(PIPE_CC_GCC)
+   if (x <= 1)
+       return 1;
+   else
+       return (1 << (32 - __builtin_clz(x - 1)));


Also I believe this builtin requires gcc 3.4 - not sure though if the
rest of the code compiles on older gcc.

Roland
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to