| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
Sorry, something went wrong.
This adds:
- Hand-written uops JUMP_IF_{TRUE,FALSE,NONE,NOT_NONE}.
These peek at the top of the stack.
The jump target (in superblock space) is absolute.
- Hand-written translation for POP_JUMP_IF_TRUE,
assuming the jump is unlikely.
This can serve as an example for the rest.
(Probably adding the others will cause a little refactoring.)
Once we implement jump-likelihood profiling,
we can implement the jump-unlikely case.
Note that the stubs are placed at the end of the trace array.
There is a gap between the main superblock and the stubs.
We could close the gap, we'd just have to patch up the JUMP uops.
Also include them in the returned trace length.
|
Since we discussed this extensively off-line, I'm going to just merge this once all tests pass. |
Sorry, something went wrong.
This required improving len(ex) and ex[i] a bit. There is now a sentinel opcode (0) at the end, *unless* the trace array is full.
| Back | FazBrowse Home | New Git URL |
This adds:
Hand-written uops _POP_JUMP_IF_{TRUE,FALSE}. These pop the top of the stack. The jump target (in superblock space) is absolute.
Hand-written translation for POP_JUMP_IF_{TRUE,FALSE}, assuming the jump is unlikely. Once we implement jump-likelihood profiling, we can implement the jump-unlikely case.
Note that the stubs are placed at the end of the trace array (and not counted in the return value of translate_bytecode_to_trace(), which is a bid dodgy). There is a gap between the main superblock and the stubs. We could close the gap, we'd just have to patch up the JUMP uops.
TODO in this PR:
TODO in a follow-up PR: