< previous page page_124 next page >

Page 124
From studies such as the preceding, the following observations can be made concerning code density and instruction sets:
1. As more area becomes available to a designer, denser architectures tend to outperform less dense architectures unless the processor is limited by the time through the I-decoder itself.
2. Once area is available for an I-cache, it is important to reexamine the instruction representation and the code density issue.
The Value of Code Density
d87111c01013bcda00bb8640fdff6754.gif d87111c01013bcda00bb8640fdff6754.gif
The design of instruction format was straightforward since we religiously adhered to a maxim given in the first working document on MIPS-X. It stated: "The goal of any instruction format should be: (1) simple decode, (2) simple decode, and (3) simple decode." Any attempts at improved code density at the expense of CPU performance should be ridiculed at every opportunity.
d87111c01013bcda00bb8640fdff6754.gif d87111c01013bcda00bb8640fdff6754.gif
P. Chou and M. Horowitz, "Architectural Tradeoffs in the Design of the MIPS-X," Proc. 14th Int'l. Symposium on Computer Architecture, pages 300308,1987
It may be perfectly correct to religiously follow a principle within the context of a particular project, but it does not mean that that principle is universally applicable or even useful in another project.
Observers who discount the importance of code density fail to realize the cost of not having it. The demise of Intel x86-based microprocessors has not happened in anywhere near the schedule that was predicted by L/S or RISC instruction set advocates. Part of the reason is that the size of the instruction decoder and its complexity can be outweighed by resultant code density and improved cache performance.
Eventually, changes will come to the x86; but (it would seem) these changes will reflect the need for additional address capabilities (a "64bit" address) and, particularly, for additional registers.

2.6.5 Role of Registers, Evaluation Stacks, and Data Buffers
In this section we look at the tradeoff between register set size and organization and required memory traffic (Figure 2.44).
The simplest form of data buffer is a first-in-last-out stack (evaluation stack). This has been commonly used in computer architecture [122] and, with three or four entries, can usually capture most temporaries that are evaluated within statements. For example, the statement
0124-01.gif

 
< previous page page_124 next page >