Comment by dmitrygr
4 hours ago
Emulation visits instructions as they are executed. Static recompilation will (at translation time) visit instructions that can be discovered, even if they never run.
eg:
if (rand64() == 0x123456789abcdef0ull)
baz = bar;
an emulator will likely never visit that assignment. A static recompiler will translate it.
IDK, a lot of the emulators I've seen and a couple I've written will visit that. Not everything is built on simple traces, but a lot of the time will translate more complex graphs at a time.
Hm. What is the utility of this distinction?
Anyway, qemu certainly seems like it would fall under your definition of "emulator" despite obviously dynamically recompiling.
which is why i said "static recompiler" and not just "recompiler"
distinction is that an emulator is much simpler, while a static recompiler is a lot more work and thus ~30% more cool
Ah. I admit I've only ever made dynamic recompilers