Elektrine lite

← Feed

@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)

  • @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).

    Open ##2409969