IA-32 Execution Layer
The IA-32 Execution Layer is a software emulator in the form of a software driver that improves performance of 32-bit x86 applications running on 64-bit Intel Itanium-based systems, particularly those running Linux and Windows Server 2003. Windows Server 2003 SP1 and later include it; it can also be downloaded from Microsoft. Most Linux distributions for Itanium also include it. The x86 hardware emulation which was built into Itanium processors was notoriously slow, but Intel did not re-engineer it; after IA-32 EL appeared, Intel dropped x86 hardware emulation from Itanium, starting with the Montecito models in 2006.
The IA-32 EL uses a two-phase approach: initially it quickly translated every piece of code at a basic block level, adding certain instrumentation for detecting hot code; then hot code was dynamically optimized at a super-block level, and the optimized translated code replaced cold code on the fly. Later interpretation engine was added that allowed to avoid altogether translation of code executed just a few times - cold non-optimized translation became thus the second phase, and hot optimized translation became the third phase. IA-32 Execution Layer supported self-modifying code, and could even optimize it quite well.
Part of the software is under the LGPL and part is under an Intel proprietary license.