A function with an unresolved computed branch got a switch over every one of its instructions, and build_game.py
compiles such a file at -O0. In 1.4.3 that is six main functions over 2000 instructions, among them the game's
hottest (0x801547400: ~13 % of three game threads, an 8 MiB stack frame that __chkstk walked page by page on every
call) and 0x800634680 (~4 %).
Now such a function is emitted twice: its body as any other function (labels where branches and resolved tables
lead; registers in locals where regs.py can plan them), whose unresolved branches and table misses tail-call
fb_<entry> with c->pc set; and fb_<entry>, the old body with the all-instruction dispatch, entered at the dispatch,
in a file of its own (still -O0).
PC, unlimited from frame 3300: the game's frame work p50 10.7-13.7 -> 9.8 ms, p90 11.8-22 -> 10.5 ms; frame time
p95 17-22 -> 16.2-16.6 ms (the frame is still bound by recording). The picture matches.
Co-Authored-By: Claude Opus 5.5 <[email protected]>