2014-12-09 2 views
1

, когда я пытаюсь скомпилировать тест dhrystone в riscv-sodor для -march RV32I, непризнанная ошибка кода «amoadd» выходит из компиляции.Как скомпилировать тест dhrystone для RV32I

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 

Есть ли способ скомпоновать dhrystone для оборудования без металлических изделий RV32I.

ответ

2

Удалить флаг -Wa,-march=RV32I.

-Wa,-march=RV32I сообщает ассемблеру только действительные инструкции RV32I. Он нашел инструкцию amoadd, поэтому она неправильно вышла из строя. Ассемблер не в состоянии изменить неверные инструкции для действительных инструкций, это работа компилятора.

К сожалению, начиная с 2014 года, gcc-порт riscv-toolchain еще не поддерживает -march=RV32I.

Вместо этого на программиста лично следует избегать написания кода, который будет генерировать множители, AMO, с плавающей запятой и т. Д. Фактически, предоставленный код dhrystone включает в себя инструкции с плавающей запятой (я верю только в код инициализации), который также вызывают ошибку -Wa,-march=RV32I. В этой ситуации программист dhrystone проверяет, поддерживает ли процессор инструкции с плавающей запятой и ветви вокруг них по мере необходимости.

На более академической ноте, я считаю, что amoadd исходит из реализации «барьера» common/util.h. Однако, поскольку dhrystone не вызывает барьера, я не уверен, почему ассемблеру передается инструкция amoadd. Я, конечно, не вижу этого в своих собственных разборках дхристона. Я также не смог воспроизвести вашу ошибку на своих собственных компиляторах RISCV. Я использую riscv-gcc с начала августа 2014 года (https://github.com/ucb-bar/riscv-tools) и новый gcc4.9, найденный в (https://github.com/ucb-bar/riscv-tools/tree/new-abi), который находится в тестировании, но скоро будет перенесен в master (~ Jan 2015).