I hope this is the correct section of Stackexchange for this. I’ve been wondering what CPU architectures are well suited for software emulation, and which ones are difficult to write fast emulators for. I know the answer to this can be a balance between the effort to make an emulator, and the ability to make a fast emulator. One architecture might be easy to emulate, but a full speed emulator is not possible. Another may be difficult to emulate, but a high performance emulator is possible. I’m considering CPU architectures with optional virtualization features (KVM) to be different from CPUs that don’t have the option. Cross platform emulation at any reasonable speed is going to be difficult no matter what, so that isn’t part of this question. I am not sure if ARM should be classified as one architecture since there are so many variations of it. I would really like to know how the different variations of ARM would affect emulation of ARM on slightly different ARM host.
Here is what I think I know so far:
x86 and AMD64 can be emulated at about half of the performance of the host. Making such an emulator requires great difficulty. x86 real mode code (DOS programs) can run faster in an emulator (without using vm86 mode) since there is no virtual memory to emulate
AMD64 with KVM emulates at full speed and making the emulator isn’t too bad.
POWER or PowerPC was designed with emulation in mind. User mode code can run without the help of the emulator since, unlike x86, access to privileged data causes a trap and invokes the emulator. This allows emulation at near full speed to be possible.
What about other architectures such as MIPS and ARM?
Alex Cannon is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
1