* ffsll.c (ffsll): Correct implementation.
authorIan Lance Taylor <ian@airs.com>
Mon, 30 Mar 2009 23:17:11 +0000 (23:17 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 30 Mar 2009 23:17:11 +0000 (23:17 +0000)
gold/ChangeLog
gold/ffsll.c

index b6ad2e2..0726507 100644 (file)
@@ -1,3 +1,7 @@
+2009-03-30  Ian Lance Taylor  <iant@google.com>
+
+       * ffsll.c (ffsll): Correct implementation.
+
 2009-03-27  Ian Lance Taylor  <iant@google.com>
 
        * ffsll.c: New file.
index aeae845..b247bc3 100644 (file)
@@ -36,8 +36,13 @@ ffsll (long long arg)
   unsigned long long i;
   int ret;
 
-  ret = 0;
-  for (i = (unsigned long long) arg; i != 0; i >>= 1)
-    ++ret;
+  if (arg == 0)
+    ret = 0;
+  else
+    {
+      ret = 1;
+      for (i = (unsigned long long) arg; (i & 1) == 0; i >>= 1)
+       ++ret;
+    }
   return ret;
 }