title: Is there any reason for not invokevirtual and invokeinteface bytecode instruction into one?
body: <p>Is there any reason for making the instruction to invoke non-static non-constructor method into two distinct instruction instead of one unified instruction, like <code>invokeinstance</code>? Does it has anything to do with some random internal JVM mechanism or it's yet another horrific legacy issue? </p>
  
  <p>I know we have <code>invokespecial</code> because invoking constructor needs name ckecking, marking one other constructor has been executed, etc, and <code>invokestatic</code> because we don't need an <em>objectref</em> dumped into the new stack frame. It, however, doesn't has an easy-to-find reason why Sun opt to have the possible universal instruction spilted into <code>invokevirtual</code> and <code>invokeinterface</code>.  Without spliting it, the ASM code could be a lot simpler since we don't have to look through the all superinterfaces to see if this is an interface method, building up the code conplexity.</p>