2012-03-15 11 views
7

私はアマチュアJVMの実装に取り​​組んでいます。仕様のすべてのオペコードのテストカバレッジを確認しようとしています。私は最後の数にそれを下げましたが、nopswapは私を逃れています。例えば、ここにswapを使用する場合があります簡単な関数です:javac 1.6に 'スワップ'と 'nop'オペコードを強制的に適用するJavaコードはありますか?

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 

任意のアイデア?

答えて

6

なしJava言語仕様は、そのような保証を提供しません。 Jasmin(バイトコードアセンブラ)を使用して独自のJavaバイトコードを書くことができます。

+1

Jasminがないクラスファイルフォーマットのより曖昧な機能をサポートしているので、KrakatauアセンブラはJVMテストケースを生成するためにより有用であると思います。 (私はそれを発表した)開示。しかし、このような単純なことのために、ジャスミンは十分です。 – Antimony

関連する問題