Open
Description
This code: Zig Godbolt C Godbolt
export fn foo(len: u64) u64 {
return ~if (len >= 64)
@as(u64, 0)
else
~@as(u64, 0) << @intCast(len);
}
Gives me this emit:
mov rcx, -1
cmp rdi, 64
shlx rax, rcx, rdi
not rax
cmovae rax, rcx
Should be:
mov rcx, -1
bzhi rax, rcx, rdi
cmp rdi, 64
cmovae rax, rcx