Number of registers on x86
Toshi Morita
tm2@best.com
Mon Jan 29 14:43:00 GMT 2001
> Can we please lie and say we have 32 GP registers on x86?
> Why, you ask?
>
> Well, there are 40 universal temporaries that are used by the hardware
> register renaming.
> Everything but floating status word, and floating point control word, can
> be renamed.
>
> Intel's compiler (IIRC), and SML/NJ do this (I'm positive about this one),
> and it improves performance, and helps to eliminate a lot of worthless
> spills.
> They just map them back into the 8 registers right before emitting.
>
>
> --Dan
I think you're misunderstanding the concept of register renaming.
The register renaming is done in hardware dynamically at runtime.
For example, in the code:
mov (%esi),eax
movl eax,(%edi)
movl 4(%esi),eax
mov.l eax,4(%edi)
...the processor can use two different virtual registers for
%eax because there are no conflicts. This prevents the processor
from stalling.
Register renaming only makes the processor more tolerant to
suboptimal instruction scheduling. It doesn't give the compiler
any more registers to use per se.
Toshi
More information about the Gcc
mailing list