DISCLAIMER: These notes are from the defunct k8 project which precedes SquirrelJME. The notes for SquirrelJME start on 2016/02/26! The k8 project was effectively a Java SE 8 operating system and as such all of the notes are in the context of that scope. That project is no longer my goal as SquirrelJME is the spiritual successor to it.
Going to need an option map for decoding and encoding because there could be CPU features and such.
I am going to need a sane description for opcodes, so I should perhaps see what the competition (GCC and friends) use for their intermediate representation of machine code and such. This would be just to get an idea and their best practice so that I do not jump into any pits they crawled out of.
Perhaps something like single static assignment would work, however it would need type safety and must have annotations (for annotated locals and parameters and such).
I am going to need a form of SSA information which can be represented after reading machine code. I want the byte code compiler to be generic so that it could work with any set of byte code or machine code and translate it into another machine code. It must also take advantage of parallel execution by determining if something can be executed at the same time with no real danger.
Added reading of class type bounds in the TypeInfo class, which is very complex. Too bad it cannot be split up. It is very massive at close to 2000 lines of code.
What I need to do is determine how to store type values within locals and such.
My primitive and type descriptor stuff, along with my currently being written SSA code could benefit from value types. So that if they are added in a future version of the language I can easily handle them without must effort, just would need to add new byte code support. However, stuff like long and double value type primitives would need to take up multiple local and stack sizes. However, a value type can have a breadth of storage to determine how much space it takes up.