RV32用の各種ファイルを用意
RV32用の各種ファイルを用意
MinCamlはCPUアーキテクチャごとにソースファイルを配置するディレクトリが異なる。32ビットRISC-V用に RV32 ディレクトリと、CPUアーキテクチャ切り替えスクリプト to_rv32 を用意する。
min-caml/SPARC (SPARC)
min-caml/PowerPC (PowerPC)
min-caml/x86(Intel x86)
min-caml/AArch64 (64ビットARM)
code:sh
# PowerPC のソースを元に RV64 対応を行う
cp -r PowerPC/ RV32
code:to_rv32
ln -sf RV32/{*.ml{,i},libmincaml.S} .
cd test; ln -sf RV32/{,too}manyargs.ml .; cd ..
cd shootout; ln -sf RV32/Makefile .; cd ..
cd bytemark; ln -sf RV32/Makefile .; cd ..
cd min-rt; ln -sf RV32/globals.s .; cd ..
ソースを出力してみる
code:sh
./to_rv32
make clean
make min-caml
./min-caml test/print
以下のようなコードが出力されればOK(現状ではPowerPCコードが出力される)
code:test/print.s
.text
.globl _min_caml_start
.align 2
_min_caml_start: # main entry point
mflr r0
stmw r30, -8(r1)
stw r0, 8(r1)
stwu r1, -96(r1)
# main program starts
li r2, 123
mflr r31
stw r31, 4(r3)
addi r3, r3, 8
bl _min_caml_print_int
subi r3, r3, 8
lwz r31, 4(r3)
mtlr r31
li r2, -456
mflr r31
stw r31, 4(r3)
addi r3, r3, 8
bl _min_caml_print_int
subi r3, r3, 8
lwz r31, 4(r3)
mtlr r31
li r2, 789
mflr r31
stw r31, 4(r3)
addi r3, r3, 8
bl _min_caml_print_int
subi r3, r3, 8
lwz r31, 4(r3)
mtlr r31
# main program ends
lwz r1, 0(r1)
lwz r0, 8(r1)
mtlr r0
lmw r30, -8(r1)
blr