This article examines three software based implementations of x86 compatibility: Digital’s FX!32 for the Alpha, Transmeta’s Code Morphing Software for Crusoe and Efficeon and Intel’s IA-32 Execution Layer for Itanium. Technical similarities and differences are described and explained in terms of the role each was created to fill.
Soft Solution to a Hard Problem
One of the most important advances in computer design occurred in the early 1960s with IBM’s introduction of the System 360 (S/360) family of mainframes. This advance was the conceptual separation between how a computer looks to software and how a computer is actually organized and constructed from physical components. In more precise terms, the separation of an instruction set architecture (ISA) from its hardware implementation. Before S/360 new computers came with new instruction sets and software had to be created from scratch to run on them. With the S/360 came the concept of the computer family – a set of computers that all execute the same instruction set. A computer family could extend over a range of contemporary models with widely differing price and performance but more importantly over time, with future models utilizing newer and better hardware technology but still executing the same existing instruction set .
This innovation had huge benefits to both users and software developers. A business or institution could start out with a low cost, low performance model, and as their computing needs grew they could replace or complement their existing systems with more powerful and expensive models in the same family and not have to scrap their software. For the software developer, the introduction of families of computers that all executed the same instruction set meant that the time and labor needed to develop an application could be amortized over a much larger user base which meant it could be sold for less. These two effects made computerization more affordable and useful to a much wider class of users than ever before and led to the huge growth of the computer industry over the last 35 years. This effect was further magnified with the emergence of VLSI microprocessors in the late 1970s given the powerful effect that semiconductor manufacturing economies of scale has on unit cost. These factors all converged with IBM’s pivotal decision to enter the personal computer market to eventually make the Intel x86 instruction set architecture the overwhelmingly dominant ISA in general purpose computing today – shipping in about 98% of personal computers and nearly 90% of servers.
The downside of this situation is that development of new ideas and innovations in computing has been greatly hindered by the huge amount of processor design and software development effort drawn to x86 compatible hardware. Over the last 15 years attempts to establish a newer and better instruction set architectures in the main stream of general purpose computing have faced a technical and economic playing field massively tilted in favor of the x86 ISA. Leading x86 design teams typically have enjoyed far greater resources and earlier access to the latest semiconductor process technologies, in comparison to competing design teams. On the rare occasion that through sheer determination and engineering excellence, challengers have overcome such disadvantages and demonstrated clear performance or cost advantages over x86 processors, the outcome of the battle for customers is inevitably lost by the lopsided disparity in available software applications between the new ISA and the long time incumbent.
One approach to addressing this imbalance is the use of a software based scheme to allow x86 applications to run in a satisfactory manner on non-x86 hardware. The critical phrase here is “in a satisfactory manner”. Running applications written for a foreign instruction set using software emulation techniques is almost as old as computing itself. But doing so in a manner satisfactory to the user in terms of both sufficient application performance and seamless compatibility is a task easier said than done. Software based ISA compatibility has been commercially successful in the past (VAX on Alpha  , 68k on PowerPC ) but usually in the context of a huge performance advantage held by the new hardware platform over the old.
The subject of this article is an examination of three different attempts to accomplish this very difficult task, providing satisfactory software based x86 application compatibility on modern processor architectures very different from the quarter century old x86 CISC ISA. These three examples are DEC’s FX!32, Transmeta’s Code Morphing Software (CMS), and Intel’s IA-32 Execution Layer (IA-32 EL). These examples are useful and interesting to contrast and compare because the three have a complex and varied combination of differences and similarities in the areas of purpose, platform, and implementation.
Discuss (18 comments)