• provide a special processor mode to execute legacy code on the new processor,
• recompile the program to the new instruction set, or
• use a variety of software methods to interpret or translate the application.
• Hewlett-Packard's dynamic translator, Aries, eases the transition of applications from HP's Precision Architecture to IA-64,
• IBM Research's BOA translates the legacy PowerPC code of a full system rather than just the application code, and
• The University of Queensland's UQBT is a binary translation system that—instead of translating between a specific pair of instruction sets—lets you generalize binary translation and work between virtually any two architectures.
• ISA remapping to handle register overlaps present in the legacy ISA and remap them to the target ISA;
• basic block reordering to keep the target image execution as sequential as possible so that conditional branches will typically fall through, which helps speed instruction fetching and cache performance;
• memory coloring to improve the mapping of the translated image onto the memory hierarchy of the target environment; 1 and
• code specialization to clone procedures based on the invariance of parameter values.
• calling conventions, because one machine may pass parameters in registers and another may pass them on the stack;
• memory mapping, because the OS may have trouble locating the application's stack; and
• memory alignment, where different architectures have different requirements.
• improve translation from virtual instruction sets like Java virtual machines,
• provide full system translation that more efficiently translates the entire operating system,
• use more sophisticated profiling techniques to adapt to behavior changes quickly, and
• support noninterruptibility, atomicity, and multiple legacy architectures in one target.