How so? I was only suggesting that the expression "pointer1 + offset >= pointer2" be treated differently (that is, the magic does away if you store the LHS in a variable and use the variable). (And, of course, the change would only apply to cases where the LHS overflows the address space, which is clearly undefined, so having odd things matter isn't a problem.) If you do something with "pointer + offset" other than comparing it with something else, I wouldn't have anything change (what would it do, anyway, without a test and branch in the code?); and in the case where you're doing the comparison, processors generally have a status bit that gets updated in the multiply/shift and add and is pretty much free to have an unlikely jump based on. Except on architectures where the instruction decode significantly limits the pipeline, it should be at most one cycle to test so long as you do each test right after the ALU operation. C, in general, doesn't make good use of the fact that processors make it trivial to test for overflow, but that doesn't mean that C compilers can't do extra-clever things with this ability in cases where there's undefined behavior associated with it.
Copyright © 2017, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds