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