442,37 → 442,7 |
#ifndef FFS_DEFINED |
#define FFS_DEFINED 1 |
|
#if defined(_MSC_VER) && _MSC_VER >= 1300 && (_M_IX86 || _M_AMD64 || _M_IA64) |
unsigned char _BitScanForward(unsigned long* Index, unsigned long Mask); |
#pragma intrinsic(_BitScanForward) |
static INLINE |
unsigned long ffs( unsigned long u ) |
{ |
unsigned long i; |
if (_BitScanForward(&i, u)) |
return i + 1; |
else |
return 0; |
} |
#elif defined(PIPE_CC_MSVC) && defined(PIPE_ARCH_X86) |
static INLINE |
unsigned ffs( unsigned u ) |
{ |
unsigned i; |
|
if (u == 0) { |
return 0; |
} |
|
__asm bsf eax, [u] |
__asm inc eax |
__asm mov [i], eax |
|
return i; |
} |
#elif defined(__MINGW32__) || defined(PIPE_OS_ANDROID) |
#define ffs __builtin_ffs |
#endif |
|
#endif /* FFS_DEFINED */ |
|