http://www.merlintec.com/download/jecel_phd_deposited.pdf
The basic idea is that each instruction mentions two operand registers and one destination register. There are 4 kinds for the first operand and the destination:
t0 - t31: actually map to the special stack cache. Changing the frame pointer will remap them to a different area, possibly causing a line to be reloaded.
i0 - i31: actually map to the data cache as the first words of the receiver. Changing the self pointer will remap them to a different area.
s0 - s31: control registers for DMA-like logic that allows values to be streamed to other processors or to memory
x0 - x31: a mix of registers that control the hardware, including the frame pointer and the self pointer. Also allow pushes and pops to the stack.
The second operand can be these as well, but can also be several kinds of constants and can (L0 - L31) fetch the literal values in the current method, which also allows indirect access to globals.
The stack cache operates on linked lists of 32 word blocks (the current frame can span two such blocks) so the hardware to map tN to a cache word only needs a five bit adder