summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Hourihane <[email protected]>2008-05-05 23:09:38 +0100
committerAlan Hourihane <[email protected]>2008-05-05 23:09:38 +0100
commitf77442fbd3b539aa3da927630c12c3a1a377f6da (patch)
treeec2807c808c2c505691f8dece8d523fed702d41e
parent736374c1052be647bd7c377344acf8db0af4ddfc (diff)
fix _mesa_ffs for alternative compilers
-rw-r--r--src/mesa/main/imports.c36
1 files changed, 17 insertions, 19 deletions
diff --git a/src/mesa/main/imports.c b/src/mesa/main/imports.c
index d8d35af15e2..d798f80e253 100644
--- a/src/mesa/main/imports.c
+++ b/src/mesa/main/imports.c
@@ -542,26 +542,24 @@ int
_mesa_ffs(int i)
{
#if (defined(_WIN32) && !defined(__MINGW32__) ) || defined(__IBMC__) || defined(__IBMCPP__)
- register int bit = 0;
- if (i != 0) {
- if ((i & 0xffff) == 0) {
- bit += 16;
- i >>= 16;
- }
- if ((i & 0xff) == 0) {
- bit += 8;
- i >>= 8;
- }
- if ((i & 0xf) == 0) {
- bit += 4;
- i >>= 4;
- }
- while ((i & 1) == 0) {
- bit++;
- i >>= 1;
- }
+ register int bit = 1;
+ if ((i & 0xffff) == 0) {
+ bit += 16;
+ i >>= 16;
+ }
+ if ((i & 0xff) == 0) {
+ bit += 8;
+ i >>= 8;
+ }
+ if ((i & 0xf) == 0) {
+ bit += 4;
+ i >>= 4;
+ }
+ if ((i & 0x3) == 0) {
+ bit += 2;
+ i >>= 2;
}
- return bit;
+ return (i) ? (bit + ((i + 1) & 0x01)) : 0;
#else
return ffs(i);
#endif