I had previously given an overview of the changes in my processor designs, but I have made yet some more changes since then. The most significant one was hiding the register banks under a sliding window. The 15 register window can be moved up or down by any number of registers. This is backed up by two banks for 16 registers each. When the window moves such that R0 is no longer in bank A, then the two banks are adjusted so that it is. Register 15 reads as zero when explicitly addressed as a source.
The original design had two prefix instructions to extend immediate values from 4 to 16 (or 32) bits. But prefixes are more interesting when used to get arbitrary sized values, not just two possible sizes. And they had the problem that their bits had to be shifted before they could be combined with the four bits in the base instruction. So I felt that it would be better to reserve the immediate values of 14 and 15 to indicate that the actual value is the following 16 or 32 bits. These bits will be aligned correctly, which helps a lot. This freed up two instructions which were used for "store byte", eliminating the tagged pointers (but there are still tags for integer/objects) to make it easier to adapt C compilers. There is no "load byte" but this isn't hard to emulate with existing instructions.
The "jump and link" now doubles as "send" and as extension instructions. Since the stack would have to be adjusted before and after every send (though though such "change stack" instructions can be merged when back to back) it is tempting to add this function to the "jump and link" instruction itself in order to make the code shorter. But then a special "return" instruction would be needed and the original state of the stack would have to be saved somewhere. A good place for this would be the top four bits of the PC. This would limit the code cache to 256MB, but considering that the Transmeta chips only had 8MB this isn't as small as it might seem. I haven't made this change, yet.
I have changed my internet connection (same ISP, though) and have been having problems with my swiki pages since. They work just great on the local network, and the regular pages at port 80 seem fine. But when you make more than four simultaneous connnections to port 8080 it locks up for some ten minutes. Each swiki page has a bunch of icons, so this problem happens all the time.
Cheers, -- Jecel
hardware@lists.squeakfoundation.org