* Essen Rev2 JIT00 -(by [[K]], 2017.07.31) * JIT00で提供する機能 -ラベルを使えるようにする -CPUに依存するレイヤをここに集約する(JIT01以降はCPUに依存しない) -実際のCPUのレジスタ数がいくつであるかなどの制約を受けずに済むようにする * 基本仕様 -l# : ローカル変数(#=0~) -g# : グローバル変数 -p# : ポインタレジスタ(p0~p7しかない) -L# : 分岐先指定などに使うラベル -ローカル変数、グローバル変数には、どんな型の値でも代入できる。なぜならEssenは値が型を持つ言語だから。 -ポインタレジスタはポインタしか代入できない。 -基本構文 命令 パラメータ1 パラメータ2 ... -人間にとって書きやすい構文にしようとしていない。どうせこれはJIT01から渡されてくる中間言語でしかない。 --だからコメントやマクロなどはない。 -命令の命名規則 --最初の一文字はnかs。nはノーマル。sはスピード優先。 --二文字目はパラメータの数。 --末尾には型を表す接尾子が入る場合がある。 n0sysEnt // JITコードの先頭に入れるべきコード、レジスタを初期化する s2limm_s32 g0 0 // g0の定数0を代入 n1label L0 // ここをL0とする s2addi_s32 g0 1 // g0 += 1 s4cjmpi_s32 g0 1000000000 1 L0 // if (g0 != 1000000000) goto L0 n0sysRet // JITコードから帰る場合に入れるべきコード