Rev 4358 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 4358 | Rev 5063 | ||
---|---|---|---|
Line 440... | Line 440... | ||
440 | * Return 0 if no bits set. |
440 | * Return 0 if no bits set. |
441 | */ |
441 | */ |
442 | #ifndef FFS_DEFINED |
442 | #ifndef FFS_DEFINED |
443 | #define FFS_DEFINED 1 |
443 | #define FFS_DEFINED 1 |
Line 444... | Line -... | ||
444 | - | ||
445 | #if defined(_MSC_VER) && _MSC_VER >= 1300 && (_M_IX86 || _M_AMD64 || _M_IA64) |
- | |
446 | unsigned char _BitScanForward(unsigned long* Index, unsigned long Mask); |
- | |
447 | #pragma intrinsic(_BitScanForward) |
- | |
448 | static INLINE |
- | |
449 | unsigned long ffs( unsigned long u ) |
- | |
450 | { |
- | |
451 | unsigned long i; |
- | |
452 | if (_BitScanForward(&i, u)) |
- | |
453 | return i + 1; |
- | |
454 | else |
- | |
455 | return 0; |
- | |
456 | } |
- | |
457 | #elif defined(PIPE_CC_MSVC) && defined(PIPE_ARCH_X86) |
- | |
458 | static INLINE |
- | |
459 | unsigned ffs( unsigned u ) |
- | |
460 | { |
- | |
461 | unsigned i; |
- | |
462 | - | ||
463 | if (u == 0) { |
- | |
464 | return 0; |
- | |
465 | } |
- | |
466 | - | ||
467 | __asm bsf eax, [u] |
- | |
468 | __asm inc eax |
- | |
469 | __asm mov [i], eax |
- | |
470 | - | ||
471 | return i; |
- | |
472 | } |
- | |
473 | #elif defined(__MINGW32__) || defined(PIPE_OS_ANDROID) |
444 | |
474 | #define ffs __builtin_ffs |
- | |
Line 475... | Line 445... | ||
475 | #endif |
445 | #define ffs __builtin_ffs |
Line 476... | Line 446... | ||
476 | 446 | ||
477 | #endif /* FFS_DEFINED */ |
447 | #endif /* FFS_DEFINED */ |