diff options
author | Alan Hourihane <alanh@tungstengraphics.com> | 2008-05-05 23:09:38 +0100 |
---|---|---|
committer | Alan Hourihane <alanh@tungstengraphics.com> | 2008-05-05 23:09:38 +0100 |
commit | f77442fbd3b539aa3da927630c12c3a1a377f6da (patch) | |
tree | ec2807c808c2c505691f8dece8d523fed702d41e /src/mesa | |
parent | 736374c1052be647bd7c377344acf8db0af4ddfc (diff) |
fix _mesa_ffs for alternative compilers
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/main/imports.c | 36 |
1 files changed, 17 insertions, 19 deletions
diff --git a/src/mesa/main/imports.c b/src/mesa/main/imports.c index d8d35af15e..d798f80e25 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 |