There are major differences with x86_64 that show up everywhere, not just for math. The
calling convention on the 64-bit system are far cleaner. More arguments can be passed to
functions in the registers (6, I think) than on 32-bit systems, where the extra arguments have
to be placed on the stack. Stack management function on x86 are not free; they take one or a
few cycles during every function call and function return. This can add up.
x86_64 also allows more and better ways of addressing data that can save an explicit load to
These are not theoretical improvements. Lots of programs run much better on x86_64 than on
plain old x86.
The 64-bit systems do still have the problem of larger pointers which can crowd the cache, but
some programmers find ways around this. BEA, for example, uses short heap pointers in their
JVM, which gives them all the speedups of the x86_64 programming model (described above)
without paying the cost of 64-bit pointers.