sdaniels@tymix.UUCP (Scott Daniels) (12/13/83)
[Please don't kill my text]
I worked for a short while on a project to do microcode for a DEC-10
look-alike (ie a machine with registers in the same address space as normal
memory). Although we even included special hardware support to cope with
separating the register and memory accesses, the problems of coping with
onboard data (registers) and memory data caused innumerable headaches, and
in many cases slowed down the final implementation. Some of the more obvious
problems:
1) If you pipeline instructions, you better be able to invalidate
the pipe if one of the cells with those instructions changes.
This may include the results of register only operations if the
program counter is allowed to wander into the registers. The general
rule from this seemed to be: registers should not overlap instruction
-space.
2) If the operands and the result do not overlap, restarting an instruction
is much easier. In some cases an instruction must not be allowed to
go to completion (memory errors as well as interrupts). To accomplish
this, some of the instructions set up an "undo instruction" area, and
the undo occurs in order to allow retries or continuation to happen.
This setup takes time (or a lot more hardware). When registers and
data space are separated, load and store operations are nicely aranged,
and you can often set up arithmetic so that you only hit on the reg
after you know you will run to completion.
-Scott Daniels (... ucbvax!hplabs!oliveb!tymix!sdaniels)