2017-06-21 11 views
2

私はRiscV ISSを開発しており、検証スイートを実行すると、add命令でエラーが発生します。私は(コメントとして実行中の状態を登録する)コードのこの部分に問題を釘付け:RiscV ISS実装の間違い

lui ra,0x80000 ;; ra = 0x80000000 
lui sp,0xffff8 ;; sp = 0xffff8000 
add t5,ra,sp  ;; t5 = 0x17fff8000 
lui t4,0xffff0 ;; t4 = 0xffff0000 
addiw t4,t4,-1  ;; t4 = 0xfffeffff 
slli t4,t4,0xf ;; t4 = 0x7fff7fff8000 
li gp,7   ;; gp = 7 
bne t5,t4,800005f0 <fail> ;; The program branches to fail :(

は明らかT5およびT4は失敗するルーチンに実行ので、プログラムの枝の間に同じ値を提示しない登録します。

誰かが、どの命令が自分のコードで悪い結果を生成しているかを指摘していただけますか?

乾杯

答えて

3

私は結果を比較するためにスパイクで同じプログラムを実行し、バグを発見しました。 LUI命令とADDIW命令の両方に32ビット符号拡張がありませんでした。投稿を読んで考えてみてくれてありがとう。

+0

こんにちは。 「ISS」とは何ですか?公開ですか? bellardさんがriscvemu https://bellard.org/riscvemu/をチェックしましたか?michaeljclarkさんがhttps://github.com/rv8-io/rv8をrv8しましたか? – osgx

+1

こんにちは、それは私が楽しいために構築しているインストラクションセットシミュレータです。リンクありがとう。確認してみるよ。 –

0

このコードはRV64I実装(64ビット)用です。

LUI命令記号は、最初の2行で実行していないRV64I実装にも適用されます。

関連する問題