※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

buyobuyonサブページ


作成したプログラムとその説明のためのページです。
ライブラリ関数の一部もこちらに載せておきます。
なお、コンパイラ本体はこちらへ。


外部変数定義用コンパイラ ~bero_glb_0314.tar.gz~


外部変数定義を解析して、アセンブリコード(ラベルと.word命令の列)に変換するプログラムです。
"beroglb [外部変数定義ファイル名]"とすると、そのファイル名の.mlを.sに変えた名前の
ファイルに対応するアセンブリコードが出力されます。


シミュレータ ~simulator_0314.tar.gz~


多少バージョンアップしました。
デフォルトではうちの班のFPUの挙動を真似たシミュレート関数でFPU演算を行います。
コンパイラやアセンブラの生成したコードをテストしたいだけであれば、
raichu_fpu.cをraichu_fpu_clib.cで置き換えると、Cライブラリ関数を用いて
計算するので、だいぶ高速になります。

その他に前のバージョンと違う点は、
ジャンプ命令やout命令などの仕様の変更(たしか12月頃に変更したはず…)に対応したこと、
STOREやFDIVなどの使われなくなった命令を除外して、
その命令が入力されるとエラーメッセージを出力するようにした点、
DIV命令が、引数として2をとった場合、もしくは答えが10未満になる場合のみ正しい答えを返し、
それ以外の場合には0を返すようにした点、くらいだったと思います。

現時点では、DIV命令に関する仕様の変化を取り除くと、レイトレが実行可能になります。

使用方法は、今までと同じく、実行ファイル名などの情報を入れたファイルconfig.txtを
用意して、"raichu config.txt"のようにして実行します。


SLDバイナリ化プログラム ~sldmodi_0314.tar.gz~


SLDファイルを読み取り、浮動小数点数か整数かを判断して符号化し、値の列に変換します。
値の列は、現在はシミュレータで読み取り可能な形に変換されます。
(テキスト形式で、一行に1つずつ16進数8桁の値が入っている)
使用方法ですが、"sld2in [sldファイル名]"として実行すると、ファイル名の".sld"を
".in"に変えた名前でシミュレータ入力用のファイルが生成されます。


その他のプログラム ~etc_0314.tar.gz~


  • リンカ(bero_link.c)
ただ複数のファイルをくっつけるだけ
使い方は"bero_link -o [出力ファイル名] [入力ファイル名1] [入力ファイル名2] ... [入力ファイル名n]"です。

  • プリプロセッサ(bero_preproc.c)
(*MINCAML*)で始まる行を削除し、プログラム末尾がin 0ならin ()に変換する
使い方は"bero_preproc -o [出力ファイル名] [入力ファイル名1] [入力ファイル名2] ... [入力ファイル名n]"です。

  • ppmファイル用diff(ppmdiff.c)
1つのppmファイル(バイナリ形式・テキスト形式どちらも可)を読み込み
使い方は"ppmdiff [ファイル名1] [ファイル名2]"で、差分は標準出力に出力される。

  • バイナリファイル用diff(diff.c)
ただ2ファイルの差分をとるだけ。使い方はppmdiffと同じだったと思う…。


レイトレ用ソース群 ~rtsource.zip~


min-rt.mlとglobals.ml、および以下のライブラリが入っています。

  • 算術演算(math.s)
tsuy氏が作成してくれたライブラリ(ML版)をコンパイルしたあと、
単純にメインのプログラムと結合するだけで使えるように、ラベル等を少し調節したものです。
最適化をしないコンパイラで単純にコンパイルしただけなので、改良の余地大ありです。

一応、int_of_floatの四捨五入問題に対する応急処置として、
ftoi直前に0.5を引く処理を追加してあります。ループ回数の変更はまだ行っていません。

  • 入出力・配列生成ライブラリ(runtime.s)
read_int, read_float, print_char, print_int, create_arrayの5つの関数を定義してあります。
元から手書きのアセンブリソースですので、単純な最適化は通用しないはず…、
と思ったら、よく見ると最初の3関数でin/out命令は遅延スロットに移動可能ですね…。