tinycをscalaに移植する。(4)
前回は、とりあえず、ゴリゴリとScalaに移植した状態でした。
ソース読みたくないって思ってた理由を考えてみました。
アセンブラの出力部分とコード生成部が一緒になっていて
どんなアセンブラの命令を使っているのかがわからず、
めんどくさいと思っているのではないかと思いました。
そこで、アセンブラ出力部分はasmというobjectにしてしまって分けてみました。
http://github.com/hsk/stinyc/blob/master/x86_code_gen.scala
やっていることは、変わらないし、性能は落ちると思うのですが、わかりやすくなったはず。
あと、アセンブラで使う命令がどれかもすぐわかるのでよいのではないかと思っております。
アセンブラを文字列出力をやめてバイナリコード出力もできるようになったりするとよりよいでしょう。
ということで、これと同じことをmincamlにも適応してみようかなと思います。
tinycで使用しているアセンブラ一覧
.string .section .text .align .globl .type label pushl movl addl subl cmpl je jl jg jmp call add imull leave ret
GNU アセンブラ入門(GAS)
http://www.oklab.org/program/assembler/gas.html
GASリンク集
http://lang.x0.com/misc/gas.htm
alohakunの日記
http://alohakun.blog7.fc2.com/blog-entry-422.html