News for hackers. Stuff that matters.
Re:I've been writing ring buffers wrong all these years by tbirdz on Thursday December 15, 2016 @04:02AM (#13183355)
I don't think this is true. I tried the sample out, and gcc, clang, and intel's compiler all generate a cmov for the code instead of a branch with -O2. I don't think all these compilers would have used a cmov instead of a branch if the cmov was more expensive than a branch in this case.

https://godbolt.org/g/nyFLwp

Re:I've been writing ring buffers wrong all these years by jnordwick on Saturday December 17, 2016 @07:01PM (#13203496)
It might have something to do with the branch not being part of a loop so the best it can do is assume the branch is random (think something like modding a hash code when it would indeed be random).

Ad was pointed out in the thread, recent cpus have reduced the latency of cmov to a cycle. So your result could also depend on your architecture.

Re:I've been writing ring buffers wrong all these years by amadvance on Thursday December 15, 2016 @09:19AM (#13184670)
If you use __builtin_expect() the Intel compiler uses a branch. I mean this way:

if (__builtin_expect(index >= cap,0)) { ...