I believe the class decoder could use a marker for the next instruction to be
executed, with say
endInstruction for implicit nexts. However it there is no
instruction then the value is illegal.
Actually I believe
__checkStoreState is not needed. But it could be used
anyway to double-verify that the resulting states are correct at least type
wise even though it already is done by the class decoder.
Also snapshot states can now be set from any cache state compatible state.
For simplicity I would say that when it comes to the placement of items on the
stack for MIPS and other architectures, that the slots for stored values are
in the same locations. This way juggling values only has to be done for
registers and not the stack. This would increase speed also. The only thing to
consider are 64-bit values. I would not want to waste 32-bits of space to
int for example. So I suppose there would need to be slot positions
for 32-bit and 64-bit values. Of course 64-bit values need to be 8-byte
aligned for most architectures.
Then if a
long is allocated on the stack before an
int this means that the
location of the shorter value can be set from the longer one, just with the
correct offset (for byte order). So for big endian it would be +4 and little
endian would be 0.
I should make this an actual class so that way I can just have common code for later JITs because I will definitely be using the same thing.
Java 9 is going to remove
-target. This means after the
initial bootstrap I am going to have to switch to an internal compiler to
generate the byte code. Otherwise, my classes will have a version which is too
high to use. But at least it would be self hosting for the most part. I really
only need to support Java 7 output also. I suppose I can keep the Java
compiler as simple as possible so it is short, simple, and fast. Means it
would need the class decoder to read binary class files, but also would have
to write the classes out. Probably what I can do initially is have a
verification step which decodes the generated class to make sure it is
actually valid. I would know when classes were not generated properly for one.
I would also. I have until July 27th to write a working compiler. It would be
really bad if SquirrelJME cannot build on Java 9's release. But this also
means that I can have a self hosting Java environment for development
however, so that works in a way.