addi命令がオーバーフロー例外を引き起こすことに気づきました。私は現在、Bluespec HDLを使用して、例外の原因となるプロセッサをシミュレートし、それらを適切に処理しています。
とにかく、私は特にMIPSのaddiコマンドを使用してオーバーフロー例外をトリガーするいくつかのテストケースを書いています。
注:私がテストしているプロセッサはSMIPSベースですが、例外や割り込みなどの目的でいくつかのMIPS命令をサポートしています。
オーバーフローを検出するためのロジックが正しいことを知っています(以下の擬似コード):
if (function == Addi) begin
if(( a < 0 && b < 0 && result >= 0) || (a >0 && b > 0 && result < 0))
return True;
else
return False;
end
質問:オーバーフローの例は何ですか:私は次のことを試みています:(を使用したインラインアセンブリ__asm__
)
addi $2, $0, 0x7fff
addi $3, $2, 0x000f
これは例外をスローしていません。そして私がこれを試してみると:
addi $2, $0, 0x7fffffff
addi $3, $2, 0x0000000f
イミディエートは16ビットでなければならないため、アセンブラエラーが発生します。andiからオーバーフローを取得するにはどうすればよいですか?良い例を教えてください...上位ビットを埋めるために他の命令を使用する必要がありますか?
ありがとうございました