Open
Description
#include <stdint.h>
uint64_t blsr_test_cmove(uint64_t rdi, uint64_t rsi) {
uint64_t rax = rdi & (rdi - 1);
return (rsi != 0) ? rax : rdi;
}
Emits:
blsr_test_cmove:
cmp rsi, 1
lea rcx, [rdi - 1]
sbb rax, rax
or rax, rcx
and rax, rdi
ret
Should be:
blsr_test_cmove:
blsr rax, rdi
test rsi, rsi
cmove rax, rdi
ret