PowerPC命令からAArch64命令への置き換えメモ
#MinCaml #ARM #AArch64
参考
PowerPC Assembly Quick Reference Information
PowerPCの命令
MinCaml implementation in Haskell の Emit.hs
ARM64のアセンブリの出力まわりが参考になりそう
https://github.com/minoki/min-caml-hs/blob/master/src/AArch64/Emit.hs
AIXのドキュメント
https://www.ibm.com/docs/en/aix/7.2
マニュアル(リンク切れ)
http://power.org/wp-content/uploads/2012/07/PowerISA_V2.05.pdf
補足資料
http://refspecs.linux-foundation.org/ELF/ppc64/PPC-elf64abi-1.9.pdf
MinCamlのコンパイル時の中間コードを出力してみる
CallClsとCallDir
CallCls(AppCls)
クロージャによる関数呼び出し
CallDir(AppDir)
クロージャによらないトップレベル関数の呼び出し
参考
クロージャ変換 (closure.ml)
https://esumii.github.io/min-caml/tutorial-mincaml-16.htm
ppc/asm.ml で定義される命令一覧
Nop
Li (Load Immediate)
Mov
FLi (Floating Load Immediate)
SetL
(???) ラベルのアドレス読み込む感じかな?
Mr (Move Register)
Neg
Add
Sub
Slw (Shift Left Word)
Lwz (Load Word and Zero)
https://www.ibm.com/docs/en/aix/7.2?topic=set-lwz-l-load-word-zero-instruction
メモリの指定位置から32ビットのデータをレジスタへロードする
Stw (Store Word)
FMr
FNeg
FAdd
FSub
FMul
FDiv
Lfd (Load Floating Doubleword)
lfd fT, d(rA) : fT ← M( rA+d )
Stfd
Save (退避の仮想命令)
Restore (復帰の仮想命令)
IfEq
IfLE
IfGE
IfFEq
IfFLE