Какой код Java заставит javac 1.6 использовать коды операций 'swap' и 'nop'? - PullRequest
7 голосов
/ 15 марта 2012

Я работаю над любительской реализацией 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 Ответ

6 голосов
/ 15 марта 2012

Отсутствует. Спецификация языка Java не предоставляет таких гарантий. Вы можете просто написать свой собственный байт-код Java, используя Jasmin (ассемблер байт-кода).

...