On Thu, Feb 08, 2024 at 03:49:03PM +1300, Thomas Munro wrote: > On Thu, Feb 8, 2024 at 3:38 PM Thomas Munro <thomas.mu...@gmail.com> wrote: >> Perhaps you could wrap it in a branch-free sign() function so you get >> a narrow answer? >> >> https://stackoverflow.com/questions/14579920/fast-sign-of-integer-in-c > > Ah, strike that, it is much like the suggested (a > b) - (a < b) but > with extra steps...
Yeah, https://godbolt.org/ indicates that the sign approach compiles to movsx rsi, esi movsx rdi, edi xor eax, eax sub rdi, rsi test rdi, rdi setg al shr rdi, 63 sub eax, edi ret while the approach Andres suggested compiles to xor eax, eax cmp edi, esi setl dl setg al movzx edx, dl sub eax, edx ret -- Nathan Bossart Amazon Web Services: https://aws.amazon.com