Proposal for an ideal extensible instruction set
agner.org
agner.org
Fixed size instructions make wide instruction machines possible, they don't have much more use. Variable size instructions do make them nearly impossible, does not matter if it's easy to calculate the size of not. There's no compromise to get here. (If you really want wide instructions is another can of worms.)
32 registers (31+sp) is so old school that I'm wondering if the number isn't just random. Also, zeroing the unused part of a register has its share of problems.
Taking ip out of the generic register set has its share of problems, and it's not hard to know if you are branching. It fixes a not-a-problem.
The article is not well thought-off.
For example, when you are implementing OoO arch, you will have to deal with the possibility of writes to IP. That will not save power and estate.
I doubt these have been the real issues behind instructions sets for at least 15 years.
I just love it when a designer takes an understood problem space and alters the rulebook to give himself advantages that his competition would never allow themselves to have. The Mill's design seems like that. It's totally bananas, each chip family produced will have randomly assigned opcodes assigned for a tailored set of operations.
Beyond getting working chips, the Mill's biggest hurdle will be to get compiler toolchains to target it's ISA. Such a huge gamble.
So what are we talking about here? Sounds like by standardising on a higher level of abstraction, you're free to make more changes at a lower level. What does that mean in practice? Do compilers target this standardised abstraction layer rather than machine code? How is this better than the JVM/CLR approach?
I can't think of any advantage to this. Compilers already abstract this away.