Re:I've been writing ring buffers wrong all these years
by jnordwick on Saturday December 17, 2016 @07:21PM
(#13203568)
Just looked it up. Yes, from Broadwell forward a reg to reg cmov has latency 1. On Atom processors it is still 6.
If you decrement your array index you don't even need the cmp instruction. The compiler could probably gen so good code.
This used to be a problem on Pentium4 where cmov had high latency (4 cycles or more), but today, IIRC, a register-to-register cmov is only one cycle, so it is safe to use whenever a branch could have a non-trivial misprediction rate.