Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 108 | pmbaty | 1 | #if _MSC_VER >= 1200 |
| 2 | # define FORCEINLINE __forceinline |
||
| 3 | #else |
||
| 4 | # define FORCEINLINE __inline |
||
| 5 | #endif |
||
| 6 | FORCEINLINE int PopCnt(uint64_t a) { |
||
| 7 | /* Because Crafty bitboards are typically sparsely populated, we use a |
||
| 8 | streamlined version of the boolean.c algorithm instead of the one in x86.s */ |
||
| 9 | __asm { |
||
| 10 | mov ecx, dword ptr a xor eax, eax test ecx, ecx jz l1 l0:lea edx,[ecx - 1] |
||
| 11 | inc eax and ecx, edx jnz l0 l1:mov ecx, dword ptr a + 4 test ecx, |
||
| 12 | ecx jz l3 l2:lea edx,[ecx - 1] |
||
| 13 | inc eax and ecx, edx jnz l2 l3:}} FORCEINLINE int MSB(uint64_t a) { |
||
| 14 | __asm { |
||
| 15 | bsr edx, dword ptr a + 4 mov eax, 31 jnz l1 bsr edx, dword ptr a mov eax, |
||
| 16 | 63 jnz l1 mov edx, -1 l1:sub eax, |
||
| 17 | edx}} FORCEINLINE int LSB(uint64_t a) { |
||
| 18 | __asm { |
||
| 19 | bsf edx, dword ptr a mov eax, 63 jnz l1 bsf edx, dword ptr a + 4 mov eax, |
||
| 20 | 31 jnz l1 mov edx, -33 l1:sub eax, edx}} |