pracuję nad amatorskim implementacji JVM, a ja staram się upewnić, mam pokrycie testowe dla wszystkich rozkazy w spec. Dostałam go do kilku ostatnich, ale nop
i swap
zostały wymyka mi. Na przykład, oto prosta funkcja, która może wykorzystać swap
:Jaki kod Java wymusi na javac 1.6 używanie opcodes 'swap' i 'nop'?
static int do_swap() {
int a = 56;
int b = 32;
return b%a;
}
Ale kodu bajtowego produkowane przez javac 1.6
unika zamiana zamiast lokalnego przechowywania:
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
pomysłów?
myślę asembler Krakatau byłaby bardziej przydatna do generowania przypadków testowych JVM, ponieważ obsługuje więcej niejasnych cechy formatu classfile że Jasmin nie. (Ujawnienie to napisałem). Ale jeśli chodzi o coś prostszego, Jasmin jest wystarczająco dobry. – Antimony