Messages in this thread | | | Date | Wed, 23 Feb 2000 19:54:22 +0100 | From | Jamie Lokier <> | Subject | Re: Kernel bugs found using inspect tool |
| |
Peter T. Breuer wrote: > Nathan Zook <nathan.zook@amd.com> wrote: > > With out-of-order execution, note that if((a == b) | (c == d) | (e < f)) > > runs faster if c, d, e, and f have no side effects--and the parens ARE > > required. > > Eh? But you are using bitwise or. I had logical or, whose order is > defined, being that of lazy left-right evaluation, and whose precedence > is looser than that of the relational operators precisely so that you > can write boolean propositional compounds without those annoying parens.
The point is that an out-of-order processor (such as a modern x86) doesn't execute instructions in the order emitted by the C compiler. So in the above expression, it will typically fetch a, b, c, d, e and f, and execute all the comparisons in parallel.
However, an out of order process will speculatively execute past branches, so that || version might be just as fast. And if the branch predictor is doing a good job, it might just be faster because you don't issue the unlikely instructions. But Nathan is from AMD so I'm sure he's right :-)
> Or am I wrong? It's been at least 15 years since I read K&R ... > Nah. No chance.
Your C is fine.
enjoy, -- Jamie
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |