Originally posted by Jon P. Inghram
View Post
Just looking at the first two items, I see trouble:
Full support for 64-bit integers: All general-purpose registers (GPRs) are expanded from 32 bits to 64 bits, and all arithmetic and logical operations, memory-to-register and register-to-memory operations, etc., are now directly supported for 64-bit integers. Pushes and pops on the stack are always in eight-byte strides, and pointers are eight bytes wide.
Additional registers: In addition to increasing the size of the general-purpose registers, the number of named general-purpose registers is increased from eight (i.e. eax,ebx,ecx,edx,ebp,esp,esi,edi) in x86-32 to 16. It is therefore possible to keep more local variables in registers rather than on the stack, and to let registers hold frequently accessed constants — this should be a significant area of speed improvement for software with computationally intensive deeply nested loops; arguments for small and fast subroutines may also be passed in registers to a greater extent. However, more registers also involves more saving and restoring of register contents, and AMD64 still has fewer registers than many common RISC processors (which typically have 31–64 registers) or VLIW-like machines such as the IA-64 (which has 128 registers).
I'm sure there are workarounds for any of these issues, but it's a real pain and may not be worth it. After all, what is the impetus for Microsoft to deal with it when they can just have the manufacturers port their drivers to 64-bit? Do you have old hardware that doesn't work yet? Well, just call the manufacturer's support line and ask them why. Aside from that, there's also the idea that a legacy driver will seem to be slow (due to translation, if nothing else), and the user will think that Vista and/or X86-64 just sucks. Also, I'd probably prefer to have a pure 64-bit architecture, since it's easier to support.
- Steve
Comment