Какой код Java заставит javac 1.6 использовать коды операций 'swap' и 'nop'?
Я работаю над любительской реализацией JVM и пытаюсь убедиться, что у меня есть тестовое покрытие для всех кодов операций в спецификации. Я получил это до последних нескольких, но nop
а также swap
ускользал от меня Например, вот простая функция, которая может использовать swap
:
static int do_swap() {
int a = 56;
int b = 32;
return b%a;
}
Но байт-код производится javac 1.6
избегает подмены вместо локального хранилища:
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
Есть идеи?
1 ответ
Решение
Никто. Спецификация языка Java не предоставляет таких гарантий. Вы можете просто написать свой собственный байт-код Java, используя Jasmin (ассемблер байт-кода).