6

几天前我已经开始使用 risc-v,但昨天我遇到了问题。问题如下:

例如,我想为 RV32I 基本整数指令集编译代码,并且我也想添加“M”标准扩展。

当我编译 C 代码时,我使用以下命令

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

现在,例如,如果我想查看汇编代码,我使用

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

现在,如果我探索转储文件 "Program.dump" 。我注意到有时会出现汇编指令:

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

在许多其他情况下。

如果我在第 52 页看到“RISC-V 指令集手册,第一卷:用户级 ISA,版本 2.0”,我观察到 fsw 指令属于 RV32F 标准扩展,而 sd 指令属于 RV64I。

出于这个原因,我很困惑我不知道我的问题是否是我编译不好。

我的问题是:如何仅为 RV32I 基本整数指令和扩展 M 编译 C 代码?

4

1 回答 1

6

正如 Chris 所指出的,问题似乎在于尚未为 RV32I 构建库。

这是我的说明中的复制和粘贴,关于如何从5b1febdriscv-gnu-toolchain 的 git rev (2015-07-05) 构建纯 RV32I 工具链+库:

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 工具链。

--with-xlen=32 --with-arch=Iriscv-gnu-toolchain 的当前 git head似乎有问题。我现在已经在 github 上报告了这个问题。

于 2015-09-12T11:43:43.450 回答