Fix the ffs builtins under MSVC
authorChristopher Dykes <cdykes@fb.com>
Mon, 1 Aug 2016 22:26:51 +0000 (15:26 -0700)
committerFacebook Github Bot 0 <facebook-github-bot-0-bot@fb.com>
Mon, 1 Aug 2016 22:38:27 +0000 (15:38 -0700)
Summary: I was off by one in my implementation.

Reviewed By: yfeldblum

Differential Revision: D3651183

fbshipit-source-id: 4d6a6d08c06bce332a00088920bf604a10c942e7

folly/portability/Builtins.h

index 567ca6e90c46788964975a3cda867c970b0c9d32..755e02991bbc240d24b10c69012d2926fc302aba 100755 (executable)
@@ -42,14 +42,14 @@ FOLLY_ALWAYS_INLINE int __builtin_ctzll(unsigned long long x) {
 
 FOLLY_ALWAYS_INLINE int __builtin_ffs(int x) {
   unsigned long index;
-  return (int)(_BitScanForward(&index, (unsigned long)x) ? index : 0);
+  return (int)(_BitScanForward(&index, (unsigned long)x) ? index + 1 : 0);
 }
 
 FOLLY_ALWAYS_INLINE int __builtin_ffsl(long x) { return __builtin_ffs((int)x); }
 
 FOLLY_ALWAYS_INLINE int __builtin_ffsll(long long x) {
   unsigned long index;
-  return (int)(_BitScanForward64(&index, (unsigned long long)x) ? index : 0);
+  return (int)(_BitScanForward64(&index, (unsigned long long)x) ? index + 1 : 0);
 }
 
 FOLLY_ALWAYS_INLINE int __builtin_popcountll(unsigned long long x) {