Sto lavorando a un'implementazione JVM amatoriale, e sto cercando di assicurarmi di avere una copertura di test per tutti gli opcode nelle specifiche. L'ho raggiunto fino all'ultimo, ma lo nop
e lo swap
mi hanno eluso. Ad esempio, ecco una semplice funzione che potrebbe utilizzare swap
:Quale codice Java imporrà a javac 1.6 di utilizzare gli opcodi 'swap' e 'nop'?
static int do_swap() {
int a = 56;
int b = 32;
return b%a;
}
Ma il bytecode prodotto da javac 1.6
evita scambiando in luogo di memoria locale:
static int do_swap();
Code:
0: bipush 56
2: istore_0
3: bipush 32
5: istore_1
6: iload_1
7: iload_0
8: irem
9: ireturn
Tutte le idee?
Penso che l'assemblatore Krakatau sarebbe più utile per generare casi di test JVM, dal momento che supporta funzioni più oscure del formato file di classe che Jasmin non ha. (Divulgazione l'ho scritto). Ma per qualcosa di semplice come questo, Jasmin è abbastanza buono. – Antimony