I wrote a jasmin class that "uses" all bytecode instructions, to check if I had implemented all of them. It turns out three were missing:
- jsr_w -- jump to subroutine using a 32 bit offset (methods have a maximum size of 64KB, so why we need this, I don't know)
- goto_w -- jump to instruction using a 32 bit offset (see jsr_w)
- dup2_x2 -- scramble the contents of the stack
I implemented all three, although I very much doubt that they'll ever be used.
In the process of doing this, I found and fixed a few bugs in the verifier and compiler. I also changed the compiler to generate a "throw VerifyError("...")" when compiling a method that doesn't verify (instead of throwing the exception at compile time). This matches the JVM behaviour better.
Updated snapshot is here.