IRIS/IRIS++ | ゲーム開発プログラミング言語


トップ トップ | 前 | 次


既知の制限





レジスタに追加できる最大値

2147483647 以上を追加できません (32 bit int のサイズ)


32 ビット整数値以内の値を追加するとコンパイラが止まる

コンパイラは結果値を作成するために積をもとめるコードの断片を自動的に生成します。例えば、2147483647 は以下のようなコードにより表現されます。


REG $0
ATR 255
MLT 255
MLT 255
MLT 129
SUM 255
SUM 255
SUM 255
.
.
.

ただし、このコードは結果として 255 を 33279 回分足すため、コンパイルに負荷がかかります。コンパイルが完了しても、バイナリの実行はとても遅くなります。この問題への解決法は、自前の最適化コードを書くことです。


// 2147483647 = 255 * 255 * 255 * 129 + 8486272
// 最初に、8486272 を忘れて掛け算だけを行う
REG $0
ATR 255
MLT 255
MLT 255
MLT 129

// 次に、33022 を無視して結果が 8486272 になるように計算する
REG $1
ATR 255
MLT 255
MLT 130

// 次に、結果が 33022 になるように計算する 33022 = 255 * 129 + 127
REG $2
ATR 255
MLT 129
SUM 127

// 最後に、すべての合計をもとめる
REG $0
SUM $1
SUM $2

// 2147483647 が表示される
PTX $0

コードの最大行

最小のトークン コードにコンパイルされた場合 (-i オプションを使用して中間コードを出力してください)、それらのコードは 65280 以上になってはなりません。これは、JMP 指示セットがジャンプできるバイト位置が 255 * 255 + 255 までだからです。


#include ディレクティブを使用した時の制限

#include ディレクティブを使用してインクルードされたソース コードは IRIS++ ステートメントを使用できません (例 : if、do、function、その他)。つまり、外部ライブラリ コードは IRIS で書く必要があります。また、JMS および JMP 指示セットは親ソース コードを参照することができません (#include ディレクティブを定義するコード)。さらに、JMP または JMS 指示セットをライブラリ コードで使用することはできません。