Programming with Intel Extended Memory 64 Technology: Migrating Software for Optimal 64-bit Performance

Comparisons are odorous.
Shakespeare, "Much Ado About Nothing"
The Intel EM64T architecture is implemented differently from most other 64-bit processor architectures. Due to these differences, moving projects to and from other 64-bit architectures requires tweaking and porting of your code. This chapter examines these differences between 64-bit architectures and the implications, using the Intel Itanium processor as the canonical 64-bit processor against which comparisons are made. However, what is true for the Itanium product line often holds true for other 64-bit RISC architectures, such as those from IBM (Power), Sun (SPARC), Hewlett-Packard (PA-RISC), and MIPS .
The salient differences are:
Intel EM64T does not start in 64-bit mode.
On Intel EM64T, default operands are 32 bits.
Size of implemented physical address is different.
Physical limits on memory usage differ.
Models for running 32-bit x86 code differ.
Floating-point models differ.
No operating system currently supports the ILP64 model for Intel EM64T.
Let's look at these differences in more detail.
When a system with an Intel EM64T chip starts up, it boots into 16-bit mode; the operating system then switches it into 32-bit legacy mode. (For more information on modes, see Chapter 2.) It runs just as any other IA-32 processor does until it is switched again into IA-32e mode. To perform this mode switch, the operating system must:
Disable the IA-32 paging
Set up the EFER MSR information to enable 64-bit mode
Set...