introduced shortly afterward, the 29000 has a large
registerset split into local and global sets. But though it was
introduced before the SPARC, it has a more elegant method of
register management.
The 29000 has 64 global registers, in comparison to the
SPARC's eight. In addition, the 29000 allows variable sized
windows allocated from the 128 register stack
cache. The
current window or stack frame is indicated by a stack pointer,
a pointer to the caller's frame is stored in the current
frame, like in an ordinary stack (directly supporting stack
languages like
C, a
CISC-like philosophy). Spills and
fills occur only at the ends of the cache, and registers are
saved/loaded from the memory stack. This allows variable
window sizes, from 1 to 128 registers. This flexibility, plus
easier than in SPARC.
register is used instead, allowing several condition codes to
be retained, though this sometimes makes code more complex.
a steady instruction stream. Branches to another stream can
cause a delay, so the first four new instructions are cached -
next time a cached branch (up to sixteen) is taken, the cache
supplies instructions during the initial memory access delay.
Registers aren't saved during interrupts, allowing the
interrupt routine to determine whether the overhead is
worthwhile. In addition, a form of register access control is
provided. All registers can be protected, in blocks of 4,
from access. These features make the 29000 useful for
embedded applications, which is where most of these processors
are used, allowing it the claim to be "the most popular RISC
processor". The 29000 also includes an
MMU and support for
(1995-06-19)