1. Field of the Invention
The present invention relates to the field of microprocessor architecture. Specifically, the present invention relates to the field of microprocessor architecture for increasing processing efficiency within microprocessors having limited numbers of registers by providing register renaming ability.
2. Prior Art
Microprocessors execute instructions and micro-operations ("uops") by reading source operands from registers and storing destinations or result operands into registers. A register is a temporary storage area within a microprocessor for holding arithmetic and other results used by microprocessor device. Different registers may be used for different functions. For example, some registers may be used primarily for storage of arithmetic results, while other registers may be used primarily for conveying status information via various flag bits (such as system status or floating point status). Registers are individually composed of bits. A bit is a binary digit and may adopt either a "0" value or a "1" value. A given register may contain various bit widths. For example, a 32 bit register may also contain separate 8 bit widths or a separate 16 bit width. Each of the above different register widths for a given 32 bit register may be separately addressable.
The register set of the well known Intel microprocessor architecture (Intel architecture) has specially deformed registers. For background information regarding the register set of the well known Intel architecture, reference is hereby made to Chapter 2 of the i486 Microprocessor Programmer's Reference Manual, published by Osborne-McGraw-Hill, 1990, which is also available directly from Intel Corporation of Santa Clara, Calif. In terms of the Intel architecture register set, 32-bit arithmetic registers are called eax, ebx, ecs, and edx. With reference to eax, this register is composed of other registers of varying width; the low word 16 bits of the eax register are called the ax register. The low byte of the ax register is the al register. The high byte of the ax register is the ah register. Likewise in similar fashion, the other 32-bit registers, ebx, ecx, and edx individually contain separate registers of varying widths. The basic arithmetic registers for use within the Intel architecture register set include: eax, ebx, ecx, edx, edi, esi, ebp, and esp (as well as the partial bit widths thereof).
The amount of registers available within the Intel architecture register set is adequate and advantageous within some microprocessor architectures that are not superscalar or that are superscalar but at most execute two instructions per instruction cycle. However, the register set of the Intel architecture is somewhat limited and it would be advantageous to be able to expand the register set in some way. Superscalar microprocessor, as any other microprocessor, could take advantage of the increased register set to increase performance. Superscalar microprocessors execute uops simultaneously that do not have data dependencies between them. For instance, consider the pseudo code below.
______________________________________ uop0: mov eax, 0x8A uop1: add eax, ebx uop2: add ecx, eax ______________________________________
The uop1 may not execute simultaneously with uop0 because uop1 adds the value of eax with ebx and stores the result into eax. Therefore, uop1 requires the result of uop0 to perform its operation. Likewise, uop2 requires the result (i.e., eax) of uop1 and therefore may not execute simultaneously with uop1. When one uop requires as a source of information a register from a prior uop that is a destination register, this condition is referred to as a data dependency between the two uops. For instance, uop2 and uop1 are data dependent. Some data dependencies, like the above, are unavoidable and therefore impact on the performance of a superscalar microprocessor simply because some uops demand a particular execution order. These data dependencies are called true data dependencies.
However, other data dependencies of uops are not true data dependencies and are more the result of the limited size of a particular microprocessor's register set. Because a register set may be constrained in size, uops may tend to utilize the same registers as temporary storage registers rather than moving data to and from memory. This is the case because memory moves take quite a large amount of processing time and are very costly to processor overall performance. Therefore, a small register set may create a form of "bottleneck" in the performance stream of a superscalar microprocessor as multiple uops target the same register for temporary storage of data but really do not depend on the data of these registers for their own execution. For instance, consider the pseudo code below:
______________________________________ uop0: mov bx, 0x8A uop1: add ax, bx uop2: mov bx, cx uop3: inc bx ______________________________________
While uop1 is data dependent on the result of uop0 for the bx register, there is no data dependencies between uop2 and uop1. Although uop2 and uop1 both utilize the bx register, the source value of uop2 does not in any way depend on the outcome of the execution of uop0 or uop1 even though both uops in some way utilize the bx register. This is called a false dependency between uop1 and uop2. The same is true for uop3 in that uop3, while data dependent on uop2, does not depend on the results of either uop0 or uop1. Therefore, a superscalar microprocessor should be able to at least execute uop1 and uop2 simultaneously. However, since they both utilize the bx register, it would be advantageous to be able to provide a microprocessor architecture to allow the above uops (uop1 and uop2) to simultaneously execute. The present invention allows such advantageous result while the prior art would treat uop1 and uop2 as truly data dependent. The present invention provides a mechanism and method for allowing simultaneous execution of uops that do not have true data dependencies but may share common logical registers.
Within the Intel architecture, floating point registers are stack based. Each register is referenced as an offset from a top of stack pointer. The top of stack pointer, TOS, may change as a result of each floating point operation. For instance, a floating point push operation adds new data onto the top of the stack and updates the TOS pointer. A floating point pop operation removes data from the stack and again updates the TOS pointer. Therefore, before any floating point logical registers may be renamed, what is needed is a mechanism for translating stack based floating point registers into an absolute address reference. The present invention provides such advantageous capability.
Accordingly, it is an object of the present invention to allow more efficient processing performance within a superscalar microprocessor. It is an object of the present invention to specifically increase the execution performance of a superscalar microprocessor by allowing more uops the ability to simultaneously execute within a given execution cycle. It is yet another object of the present invention to allow simultaneous execution of multiple uops that utilize the same registers as operands but are not truly data dependent uops. It is an object of the present invention to allow superscalar microprocessor architectures having relatively limited number logical registers within their register sets to utilize a larger set of physical registers and remove false data dependencies between individual uops. It is an object of the present invention to provide a mechanism and method of renaming logical registers of uops that are associated with a relatively constrained set of logical registers to registers of a larger set of physical registers. It is an object of the present invention to provide the above features for increasing the efficiency of integer based registers. It is another object of the present invention to provide a floating point renaming mechanism with a translation capability to translate stack based floating point logical registers into an absolute address reference. It is yet another object of the present invention to provide the above features for increasing execution efficiency for floating point, stack based registers.
It is another object of the present invention to provide the above functionality within a high performance superscalar microprocessor resulting in increased execution efficiency. It is another object of the present invention to provide a general purpose computer system having such high performance superscalar microprocessor as an integral component. These and other objects of the present invention not specifically stated above will become evident according to discussions of the present invention to follow.