アリババのRISC-Vコアデザインのオープンソース化があった。中身を見てみるとビルドスクリプトにも思いっきりT-Headって書いてあるのでT-Headでいいでしょう。
T-HeadのGCCを取ってくるのは面倒くさいので、crt0とGCCのオプションをいじって無理よりCoremarkのコンパイルが通るようにする。
GCCのコンパイルオプションで、余計なものを徹底的に消していく。
diff --git a/smart_run/tests/lib/Makefile b/smart_run/tests/lib/Makefile index e776131..b4d2903 100644 --- a/smart_run/tests/lib/Makefile +++ b/smart_run/tests/lib/Makefile @@ -28,7 +28,7 @@ OBJECTS = $(SSRC:%.S=%.o) $(sSRC:%.s=%.o) $(CSRC:%.c=%.o) FLAG_ABI = # FLAG_MARCH = -mtune=c920 -FLAG_MARCH = -mtune=c910 +# FLAG_MARCH = -mtune=c910 #CPU_ARCH_FLAG_0 => CPU Arch: c910 ifeq (${CPU_ARCH_FLAG_0}, c910) FLAG_MARCH += -march=rv64imafdcxtheadc @@ -40,7 +40,8 @@ endif CFLAGS = ${FLAG_MARCH} ${FLAG_ABI} ifeq (${CASENAME}, coremark) - CFLAGS += -c -O3 -mtune=c910 -static -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns --param max-rtl-if-conversion-unpredictable-cost=100 -msignedness-cmpiv -fno-code-hoisting -mno-thread-jumps1 -mno-iv-adjust-addr-cost -mno-expand-split-imm -DITERATIONS=10000 + # CFLAGS += -c -O3 -mtune=c910 -static -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns --param max-rtl-if-conversion-unpredictable-cost=100 -msignedness-cmpiv -fno-code-hoisting -mno-thread-jumps1 -mno-iv-adjust-addr-cost -mno-expand-split-imm -DITERATIONS=10000 + CFLAGS += -c -O3 -static -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns --param max-rtl-if-conversion-unpredictable-cost=100 -fno-code-hoisting -DITERATIONS=10 # CFLAGS += -c -v -funroll-all-loops -finline-limit=500 -fgcse-sm -fno-schedule-insns --param max-rtl-if-conversion-unpredictable-cost=100 -fno-code-hoisting -mno-thread-jumps1 -mno-iv-adjust-addr-cost -DITERATIONS=10000 -O3 -static -mbit-translate else CFLAGS += -c -O2 @@ -105,4 +106,3 @@ all : ${FILE}.pat ${FILE}.hex ${FILE}.elf ${FILE}.obj .PHONY :clean clean: rm -rf *.o *.pat *.elf *.obj *.hex -
crt0にも良く分からないレジスタがたくさん使われていた。T-Headには特殊なCSRと特殊な命令があるらしい。こういうのは全部削除していく。
diff --git a/smart_run/tests/lib/crt0.s b/smart_run/tests/lib/crt0.s index 8c553f5..a8a454b 100644 --- a/smart_run/tests/lib/crt0.s +++ b/smart_run/tests/lib/crt0.s @@ -26,9 +26,9 @@ limitations under the License. __start: -# enable extension - li x3, 0x400000 - csrs mxstatus,x3 +# # enable extension +# li x3, 0x400000 +# csrs mxstatus,x3 # enable fpu li x3, 0x6000 @@ -38,16 +38,16 @@ __start: li x3, 0x800000 csrs mstatus,x3 -# enable unalign - li x3, 0x8000 - csrs mxstatus,x3 - -# mxstatus - li x3, 0x638000 - csrs mxstatus,x3 - -# msmpr - csrsi msmpr, 0x1 +## enable unalign +# li x3, 0x8000 +# csrs mxstatus,x3 +# +## mxstatus +# li x3, 0x638000 +# csrs mxstatus,x3 +# +## msmpr +# csrsi msmpr, 0x1 # PART 1: initialize all registers li x1, 0 @@ -107,7 +107,8 @@ cpu_0_sp: # li x3, 0x10f7 # csrs 0x7c1,x3 #mhcr li x3, 0x11ff - csrs mhcr,x3 #mhcr + # csrs mhcr,x3 #mhcr + csrs 0x7c1,x3 #mhcr .global after_l2en after_l2en: @@ -115,17 +116,19 @@ after_l2en: # li x3, 0x4 # csrs 0x7c1,x3 #mhcr li x3, 0x11ff - csrs mhcr,x3 #mhcr + # csrs mhcr,x3 #mhcr + csrs 0x7c1,x3 #mhcr # enable lbuf,way_pred,data_cache_prefetch, amr # li x3, 0x7e30c # csrs 0x7c5,x3 #mhint li x3, 0x6e30c - csrs mhint,x3 #mhint + # csrs mhint,x3 #mhint + csrs 0x7c5,x3 #mhint # mccr2 - li x3, 0xe0000009 - csrs mccr2,x3 + # li x3, 0xe0000009 + # csrs mccr2,x3 jal main @@ -135,7 +138,7 @@ __exit: addi x1,x0,0x5a addi x2,x0,0x6b addi x3,x0,0x7c - sync + fence.i li x3, 0x444333222 add x4,x0,x3 # @@ -144,7 +147,7 @@ __fail: addi x10,x0,0x0 addi x1,x0,0x2c addi x2,x0,0x3b - sync + fence.i li x3,0x2382348720
ここまで改造して、Coremarkのビルドとシミュレーションが走り出したっぽい。ただしまだ結果は出てきていない。
DESKTOP-P42Q0NR:~/work/riscv/openc910/smart_run% make runcase CASE=coremark [THead-smart] Compiling smart now ... [THead-smart] SIM = iverilog Toolchain path: /home/msyksphinz/riscv64b/bin cd ./work && vvp xuantie_core.vvp ********* Init Program ********* ********* Wipe memory to 0 ********* ********* Read program ********* WARNING: ../logical/tb/tb.v:136: $readmemh: Standard inconsistency, following 1364-2005. WARNING: ../logical/tb/tb.v:137: $readmemh: Standard inconsistency, following 1364-2005. ********* Load program to memory *********
あれ?このメッセージが出てきた。これはコンパイルが上手く行っていないかな。
ERROR! Please define ee_ptr_int to a type tht hollds a pointer!