← Back to context

Comment by dmitrygr

5 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