Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What Java code will force javac 1.6 to use the 'swap' and 'nop' opcodes?

I'm working on an amateur JVM implementation, and I'm trying to make sure I have test coverage for all of the opcodes in the spec. I've gotten it down to the last few, but nop and swap have been eluding me. For example, here's a simple function that might use swap:

static int do_swap() {
  int a = 56;
  int b = 32;
  return b%a;
}

But the bytecode produced by javac 1.6 avoids swapping in lieu of local storage:

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

Any ideas?

like image 445
perimosocordiae Avatar asked Mar 15 '12 15:03

perimosocordiae


1 Answers

None. The Java Language Specification does not provide such guarantees. You can just write your own Java bytecode using Jasmin (a bytecode assembler).

like image 172
Matthew Flaschen Avatar answered Nov 15 '22 17:11

Matthew Flaschen