2015-09-11 24 views
5

数日前にrisc-vで作業を始めましたが、昨日問題がありました。問題は次のとおりです。どのようにしてRV32I基本整数命令と拡張命令Mに対してのみCコードをコンパイルできますか?

たとえば、RV32I基本整数命令セットのコードをコンパイルしたいと思いますが、「M」標準拡張も追加します。

私はCのコードをコンパイルすると、たとえば私は、ダンプファイルを探る場合、私は、今

riscv64-unknown-elf-objdump -d Program.c > Program.dump 

を使用して、アセンブラコードを表示したい場合、私は今、次のコマンド

riscv64-unknown-elf-gcc Program.c -o Program.o -m32 -march=RV32IM 

を使用"Program.dump"。他の多くの例の中

10c6c: 00a12427   fsw fa0,8(sp) 
    10dd0: 00a42023   sd a0,8(sp) 

:私は時々、アセンブリ命令を表示されていることに気づきました。

I「は、手動設定しRISC-V命令ボリュームI:ユーザレベルのISA、バージョン2.0」を参照してください場合は52ページで、私はFSW命令がRV32F標準拡張機能とSD命令に属し、それはRV64Iに属していることを観察します。

私は自分の問題が私がうまくコンパイルされていないかどうかわかりません。

私の質問は次のとおりです。RV32Iの基本整数命令と拡張子MのCコードのみをコンパイルするにはどうすればよいですか?

+0

あなたのプログラムは何をしていますか?標準ライブラリを呼び出す場合は、gccからコードを取得します。コードで使用する拡張機能は、コンパイラのコンパイル方法によって異なります。 – Chris

答えて

6

Chrisが指摘したように、問題は、ライブラリがRV32Iのために構築されていないことが原因と考えられます。

これはgitのから純粋RV32Iツールチェーン+ライブラリを構築する方法については、私の指示hereからコピー&ペーストがriscv-GNUツールチェーン-の5b1febd(2015年7月5日)のrevは次のとおりです。

sudo mkdir /opt/riscv32i 
sudo chown $USER /opt/riscv32i 

git clone https://github.com/riscv/riscv-gnu-toolchain riscv-gnu-toolchain-rv32i 
cd riscv-gnu-toolchain-rv32i 
git checkout 5b1febd 

mkdir build; cd build 
../configure --with-xlen=32 --with-arch=I --prefix=/opt/riscv32i 
make -j$(nproc) 

このriscv32-unknown-elf-コマンドプレフィックスを持つRV32Iツールチェーンがインストールされます。

riscv-gnu-toolchainの現在のgitヘッドに--with-xlen=32 --with-arch=Iの問題があるようです。私は今githubにreported the issueを持っています。

+0

ChrisとCliffordViennaありがとうございました!あなたのサポートはとても役に立ちました。私にはもう1つの質問しかありません。私がriscv32-unknown-elf-gccで自分のコードをコンパイルすると、。私は新しいProgram.o riscv32にどのようにスパイクを使用できますか?私がspike pk -m32 Program.oを使用する場合、それは正しいですか? – Adriana

+0

@Adriana申し訳ありませんが、私はスパイクを一度も使用していないので、私はそれに答えることはできません。しかし、いつでも別の質問を投稿することができます。私は確かに誰かにスパイク専門家もいます。 – CliffordVienna

+1

スパイクでは、ISAを--isaフラグで指定することができます。例:spike --isa = RV32I pk – user2548418

関連する問題