Amatör bir JVM uygulaması üzerinde çalışıyorum ve spesifikasyondaki tüm opcodes için test kapsamına sahip olduğumdan emin olmaya çalışıyorum. Son birkaç saniyeye kadar aldım, ama nop
ve swap
beni aldattı. Örneğin, aşağıda swap
kullanabilir basit işlevi var:Java kodu javac 1.6'yı 'swap' ve 'nop' opcodes kullanmak için zorlar mı?
static int do_swap() {
int a = 56;
int b = 32;
return b%a;
}
Ama javac 1.6
tarafından üretilen bayt kodu yerel depolama yerine takas önler:
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
bir fikir?
Krakatau assembler'ın JVM test senaryoları oluşturmak için daha faydalı olacağını düşünüyorum, çünkü Jasmin'in yaptığı classfile formatının daha karanlık özelliklerini destekliyor. (Bunu açıkladım). Ama böyle basit bir şey için, Jasmin yeterince iyidir. – Antimony