【问题标题】:How can I compile C code only for the RV32I base integer instruction and the extension M?如何仅为 RV32I 基本整数指令和扩展 M 编译 C 代码?
【发布时间】:2015-12-08 06:29:17
【问题描述】:

几天前我已经开始使用 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 代码?

【问题讨论】:

  • 你的程序在做什么?如果您正在调用标准库,那么它将从 gcc 中提取代码。代码使用的扩展取决于您编译编译器的方式。

标签: riscv


【解决方案1】:

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

这是我的指令here 的复制和粘贴,关于如何从 riscv-gnu-toolchain 的 git rev 5b1febd (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 工具链。

在 riscv-gnu-toolchain 的当前 git 头中,--with-xlen=32 --with-arch=I 似乎存在问题。我现在在 github 上 reported the issue

【讨论】:

  • 谢谢克里斯和克利福德维也纳!您的支持非常有帮助。我只有一个问题。如果我用 riscv32-unknown-elf-gcc 编译我的代码,。如何为我的新 Program.o riscv32 使用尖峰。如果我使用spike pk -m32 Program.o,是否正确?
  • @Adriana 抱歉,我自己从来没有使用过spike,所以我无法回答这个问题。但你总是可以发布另一个问题。我敢肯定这里也有一些秒杀专家..
  • 使用尖峰,您可以使用 --isa 标志指定 ISA。例如:spike --isa=RV32I pk
  • 现在好像是 --with-arch=rv32i 而不是 --with-xlen=32 --with-arch=I。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 2015-11-11
  • 1970-01-01
相关资源
最近更新 更多