![](/img/trans.png)
[英]Risc-V: Minimum CSR requirements for simple RV32I implementation capable of leveraging GCC
[英]How to compile dhrystone benchmark for RV32I
当我尝试为-march RV32I在riscv-sodor中编译dhrystone基准时,无法识别的操作码“ amoadd”错误退出了编译。
riscv-gcc -m32 -Wa,-march=RV32I -std=gnu99 -O2 -nostdlib -nostartfiles -DPREALLOCATE=1 -DHOST_DEBUG=0 \
-c -I../env -I./common -I./dhrystone ./dhrystone/dhrystone_main.c -o dhrystone_main.o
In file included from ./dhrystone/dhrystone_main.c:12:0:
./common/util.h:11:0: warning: "rdcycle" redefined [enabled by default]
./dhrystone/dhrystone.h:385:0: note: this is the location of the previous definition
/tmp/ccDLKK6P.s: Assembler messages:
/tmp/ccDLKK6P.s:16: Error: unrecognized opcode `amoadd'
make: *** [dhrystone_main.o] Error 1
有什么办法可以为RV32I的裸机硬件编译模块。
删除-Wa,-march=RV32I
标志。
-Wa,-march=RV32I
告诉汇编程序仅接受有效的RV32I指令。 它找到了amoadd
指令,因此正确地出错了。 汇编程序无法将无效指令更改为有效指令,这就是编译器的工作。
不幸的是,截至2014年12月,riscv-toolchain的gcc端口尚不支持-march=RV32I
。
取而代之的是,程序员自己避免编写会发出乘法,AMO,浮点数等的代码。实际上,提供的dhrystone代码包括浮点指令(我相信仅在初始化代码中),这也会导致-Wa,-march=RV32I
将失败。 在这种情况下,dhrystone的程序员检查处理器是否支持浮点指令并根据需要在它们周围分支。
从学术amoadd
,我相信amoadd
来自common / util.h的“ barrier”实现。 但是,由于dhrystone不会调用barrier,因此我不确定为什么amoadd
汇编程序传递amoadd
指令。 我当然在我自己的dhrystone拆卸中看不到它。 我也无法在我自己的RISCV编译器上重现您的错误。 我从2014年8月上旬开始使用riscv-gcc( https://github.com/ucb-bar/riscv-tools ),并在( https://github.com/ucb-bar/riscv -tools / tree / new-abi ),正在测试中,但很快将移交给master(〜2015年1月)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.