Yousuf Khan said:
I think it's also as a result of some dufusy arbitrary decisions that MS made.
For example, ....
They've also decided not to allow
the use of x87 FPU under 64-bit mode, relying solely on SSE, even though
AMD64 is perfectly fine with either or both; now I don't know if this is
actually going to be a problem to developers, but it does show that MS is
taking arbitrary decisions.
...
I think this particular decision is not without its merit,
so calling it arbitrary is too harsh.
It would make some people's life easier immediately
(e.g. compiler, math library, etc)
although I'll have to admit it is debatable how much easier.
In the longer term, they can drop the support in the ISA
to recover opcode space and avoid supporting cost in the chip.
It will take long time to be able to actually gain from this decision
but dropping them now when trasitioning to 64bit ABI
is much easier than trying to do it later.
For example, SPARC ABI should have outright *banned* the use of y register
(sdiv,udiv,rdy, etc) in the new 64bit (v9) or extended 32bit (v8plus),
but they just kept it for compatibility's sake.
They were declared "deprecated" but the new ABI didn't ban the use.
Since sdiv/udiv performed better than sdivx/udivx and was allowed in ABI,
compilers continue to use sdiv/udiv even in v8plus/v9.
And now it's much more difficult to remove.
All in all, I'm always in favor of dropping unnecessary instructions
from ABI - so that it can be dropped from the ISA later.
It's next to impossible to do this
without introducing major pain in the existing ABI,
so this 64bit transition of x86 is a good opportunity to drop
some mistakes of the past.