News for hackers. Stuff that matters.
Re:Why Hashbrown Does a Double Lookup by simcop2387 on Wednesday March 20, 2019 @03:30PM (#19445927)
I seem to recall, that at least jo has terrible pipelining implications because of the dependency on the flag register that way, no idea about the bounds check (might be a better way)
Re:Why Hashbrown Does a Double Lookup by temac on Wednesday March 20, 2019 @04:24PM (#19446455)
I don't see why JO would be any different from other Jcc, especially since JL is SF ≠ OF. Maybe you were thinking of the problem with INC/DEC and CF, but even then that's a problem of INC/DEC, not of Jcc.
Re:Why Hashbrown Does a Double Lookup by nkurz on Wednesday March 20, 2019 @05:19PM (#19447049)
It's not usually a big difference, but on modern Intel there is a some difference in performance between the different CMP/JCC options. The more common ones will "fuse" with the CMP and be executed as a single µop, but the rarer ones (like JO and JS) do not fuse with CMP, and thus can add a cycle of delay (and have the overhead associated with executing another µop). The optimization is called "macro op fusion". Details here https://en.wikichip.org/wiki/macro-operation_fusion and here https://www.agner.org/optimize/microarchitecture.pdf (pages 108 and 125).
Re:Why Hashbrown Does a Double Lookup by khuey on Wednesday March 20, 2019 @05:47PM (#19447309)
Fixing that wouldn't seem to require any architectural changes in x86 though, it's just that Intel hasn't cared enough about JO and friends to optimize them this way.