Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- inline int32_t cmov_nz(uint32_t val)
- {
- #if defined(__GNUC__)
- uint32_t ret;
- __asm__
- (
- " .att_syntax noprefix \n\t"
- "cmp $0, %1 \n\t"
- "mov $0xffffffff, %%ecx \n\t" // -1
- "xor %%eax, %%eax \n\t" // 0
- "cmovnz %%ecx, %%eax \n\t"
- "mov %%eax, %0 \n\t" // ret = %eax
- : "=g" (ret)
- : "g" (val)
- : "eax", "ecx", "cc"
- );
- return (int32_t)ret;
- #else
- const int32_t v = (int32_t) val;
- return (int32_t)((1 & ((uint32_t)(v - 1) >> 8)) - 1);
- #endif
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement