On Thu, Nov 25, 2021 at 12:46 AM Eric Dumazet wrote: > > On Wed, Nov 24, 2021 at 10:32 PM Eric Dumazet wrote: > > > - } > > + if (unlikely(odd)) > > + result = ror32(result, 8); > > return (__force __wsum)result; > > Oh well, gcc at least removes the conditional and generates a ror and a cmov Seems like a missed optimization for `unlikely` where dependency breaking is pretty common. Although still saves a uop because of `imm8` operand. > > mov %edx,%eax > ror $0x8,%eax > test %r8,%r8 > cmove %edx,%eax > ret > > clang keeps the cond jmp > test $0x1,%dil > je 93 > rol $0x18,%eax > 93: ret