繁体   English   中英

如何为RV32I编译dhrystone基准

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM