@rygorous@mastodon.gamedev.place
Post #2409968
2025-09-09 05:46 UTC
@JamesWidman@mastodon.social The variant they landed in Gracemont: on first execution, count how long the basic blocks get. When above a threshold, flag it, and the frontend conceptually inserts a dummy unconditional branch to the next instruction. So the next time through, the frontend gets a fake branch to cycle decoders every few cycles.
Basically the Tremont design plus an extra wrinkle in the branch target buffers. (But still a pretty localized change.)
Replies (1)
-
@rygorous@mastodon.gamedev.place 2025-09-09 05:50
@JamesWidman@mastodon.social The long basic blocks aren't that common, and this basically costs you a few extra BTB slots for those blocks. You grow BTB structures all the time anyway, and this lets you build a much simpler decoder, and more scalable too. Current Skymonts have 3x 3-wide decode, can actually sustain 8 instructions/cycle, and they don't even use a uOp cache or similar, just a straightforward L1 I$ of instruction bytes (although they do mark insn ends after first decode to save power).