I think having global registers way out of range would complicate the design of the code executor since it will have to handle these branches and such. Also another idea is that for long values split the "long" value into another argument as well in the encoding. So like for anything using long, there is the high register to use and the high constant.
I can just copy down the static area, return value, and exception register.
I was thinking... what if instead of writing a bunch of the stuff in the VM
based code, it could be running within the VM itself. So there is no
MONITORENTER instruction... it is just
invoke and whatnot. I think this is
very intriguing. And I would only need to write things once, then RatufaCoat
would basically get a simple CPU execution engine. So I could take the native
code instructions and simplify the instructions that are used. Basically these
would be called into the VM layer and such. I would of course need special
methods and a means of doing special assembly like things in Java. I could do
it by replacing invokes and registers lists. At least to the native byte code
handler it does not really make that much of a difference really.
So basically method arguments and such, just become their actual register values which are then mapped to instruction primitives.
So basically, I will have to strip the VM down some and just turn it into a very plain execution engine and such. Then whatever SquirrelJME is executed will just end up being in this vki space.
At this point, threads and tasks are exactly the same they just have their own specific special pointers to indicate the current process. Effectively the code will just be a global. The code would be pretty much the same regardless of the CPU and the target architecture, just VM code running and such. I can slowly meld what I have in SummerCoat into this new way of doing things. Of course the main thing I have to do first is to initialize the configuration space. Without the configuration space I will not really be able to effectively and reliable determine how to acess things. Of course the configuration space can just be a pointer to an object. So this configuration space is just a plain old object. Then I just pass that object to the VM and this describes everything. Of course this object would be special in that it was never constructed, it just magically had all of the needed fields set and such for it to work.
This of course means that I need an actual ROM which contains all the classes to use within SquirrelJME. Since the VM itself will have to operate on this ROM.