S1coreとOpenSPARC T1純正環境との差分は引き続き調査中だ。 とりあえず、S1coreを使いこなせるようになりたい。 まずはベンチマークプログラムを動作させられるようにしたい。Coremarkが動けば面白いのだが、まずはDhrystoneかな。
Dhrystoneは、CPUの基本性能を知るための最も基礎的なベンチマークプログラムだ。
S1coreでプログラムを動作させるためには
前回少し解説したが、S1coreでベンチマークプログラムを動作させるためには、以下の2つのファイルを用意する必要がある。
rom_harness.hex
: リセット後のブート動作を行うためのプログラム。main()
に入る直前まで。ram_harness.hex
:main()
以降のプログラムを格納している。
まずは、S1coreのリリース群に入っているスクリプトを確認して、何をしなければならないのかを確認しよう。
$ less ./tools/bin/compile_test ... # Compile the boot code sparc64-linux-gnu-as -ah -am -o boot/boot.bin boot/boot.s sparc64-linux-gnu-objdump -d -EB -w -z boot/boot.bin > boot/boot.dump grep " " boot/boot.dump | egrep -v "elf64-sparc" | dump2hex.bin > boot/rom_harness.hex # Compile the C test sparc64-linux-gnu-gcc -c -O0 $1.c sparc64-linux-gnu-ld -Ur --script=$S1_ROOT/tools/src/linker.map -EB -o $1.bin $1.o sparc64-linux-gnu-objdump -d -EB -w -z $1.bin > $1.dump grep " " $1.dump | egrep -v "elf64-sparc" | dump2hex.bin > ram_harness.hex
基本的にsparcのgccを使ってコンパイルし、リンカはlinker.map
を使っている。これはDhrystoneも同じものを使えばよかろう。
このコンパイル手順をDhrystoneにも適用すれば良いと思われる。
Dhrystoneのコードは以下からダウンロードした。
Makefile
の編集を行う。
CC= sparc64-linux-gnu-gcc # C compiler name goes here (UNIX) GCC= sparc64-linux-gnu-gcc ... CFLAGS= $(OPTIMIZE) $(TIME_FUNC) -DHZ=$(HZ) $(ENUMS) $(STRUCTASSIGN) $(CFL) -Ur -Xlinker --script=/home/masayuki/work/s1_core_opensparc_t1/s1_core/tools/src/linker.map -Xlinker -EB -lc GCCFLAGS= $(GCCOPTIM) $(TIME_FUNC) -DHZ=$(HZ) $(ENUMS) $(STRUCTASSIGN) $(CFL) -Ur -Xlinker --script=/home/masayuki/work/s1_core_opensparc_t1/s1_core/tools/src/linker.map -Xlinker -EB -lc
さらに、cc_dhry
を作成した後に、hexファイルを生成する手順も追加した。
cc_dry2: $(SRC) $(HDR) $(CC) $(CFLAGS) $(SRC) $(LFLAGS) -o $@ sparc64-linux-gnu-objdump -d -EB -w -z $@ > $@.dump grep " " $@.dump | egrep -v "elf64-sparc" | dump2hex.bin > ram_harness.hex
これで、Dhrystoneのディレクトリにram_harness.hex
が生成される。これを既存のs1_core/test/ram_harness.hex
(hello.c
から生成したもの)と置き換えてシミュレーションを走らせて見ればよい。