-
Notifications
You must be signed in to change notification settings - Fork 17
TODO
-
rand, srand
- time
-
[v] typedef void Hoge; を可能にする
-
attribute((...)) を無視する
- asm
- __restrict
- extention
- _Bool
-
関数への浮動小数点数の引数は8個までレジスタ渡しで、可変長引数の場合には%raxに個数を渡す、とのこと。
-
three_to_two の呼び出しはレジスタ割付とは別に行うほうがよい (x86の場合のみ)
-
IR_ADD const, Vx の場合、three_to_two で別レジスタに移動させる必要がないかも
-
imul という命令だと、直値との乗算ができる
-
goto のラベル管理をBB管理に変更する
-
XV6で動かしてみる
-
最適化: if
brend を br_if にできる? -
関数からの戻り値をローカル変数に入れずに済ませられるか?
- 関数のエピローグに飛ぶためのBLOCKの型を戻り値の型にすればできる?
- 戻り値ありの関数でちゃんとreturnが呼ばれているかチェックする必要があるかも
- デッドコード判定も必要かも
-
使われてない関数やグローバル変数が出力されていないかチェックする
-
関数の型定義で同じものをまとめてコンパクトにする
-
ローカル変数の型宣言をまとめてコンパクトにする
-
関数内でのextern関数宣言ができない
-
Wasmerで動かせるようにする?
- memoryをインポートじゃなく内部で定義する
- WASIの仕様とやらはどこを見ればわかるのか…。
-
整数値リテラルが32bitまでしか扱えないのを修正する
-
ブラウザ版:
- スマホでも操作できるようにする
- [v] C-s でソースを保存できるようにする
- [v] 次回ロード時、保存されていたらそのソースをセットする
- [v] リロードや閉じる際、サンプルをロードする際に、変更されていたら確認する
- [v] ソースを共有できるようにする
- [v] クエリ文字列から取り出し
- [v] Safari で動くようにする
- [v] cc.wasm は実行時じゃなく起動時に読み込んでおいて使い回すようにする
- UIスレッドとは別で動かす
- [v] 標準関数のインクルード、リンクができるようにする
- [v] aobench 等、キャンバス描画に反映できるようにする
-
[v] free をちゃんと実装する
-
[v] goto が使用されていたらエラーを出す
- [v] switch 内でループとかも
-
[v] プリプロセッサ組み込み
-
[v] セルフホスティング、テスト
- [v] gen3 を動くようにする
-
[v] heapPointer という名前を変更する
- [v] ヒープはユーザ側で管理しているもので、カーネル側はブレークポイントとする
-
[v] ソースを更新したらちゃんとgen2がビルドされるようにする
-
[v] doubleをx=y=0とかするとコンパイルエラー
-
[v] 引数なしの関数宣言で、その後本体が定義されている場合、呼び出せるようにできないか?
-
[v] static の初期値参照でエラー
-
[v] 空の構造体のコピーでassert
-
[v] グローバルの関数ポインタ、関数ポインタ配列の初期化でエラー
-
Compound literal
-
構造体の関数引数
-
構造体を返す関数
-
[v] 関数ポインタを受け付ける関数がある場合には、使用していなくてもテーブルが存在しないといけない
- [v] myqsort のように内部で呼び出していて、実際には myqsort が呼び出されていない場合。
-
dupがないので一時的な値のためにローカル変数を確保する必要があるのが面倒
- store命令でも取り除かれてしまうので、取っておけない
-
ジャンプの飛び先を任意に指定できないので、gotoの実装が難しい
- goto を使用していなくても、switchで悪さをすると簡単じゃない
-
数値型でも参照を取られたら線形メモリ上に配置する必要がある
-
[v] 関数ポインタを扱えるようにする
- [v] table, elem を使用する必要がある。
- [v] call_indirect で、呼び出す関数の型番号がわかる必要がある (signature index)
-
[v] 可変長引数
-
[v] printf
-
[v] FILE関連
-
[v] aobench をコンパイルしてみる
- [v] &&, || を実装する
-
[v] malloc を実装する
-
やっぱり return で直接戻さずに最後の位置にジャンプする、または スタックポインタの調整を毎度挟む必要がある。
-
[v] 使用されているグローバル変数の領域を得られるようにする
-
[v] ローカル、グローバル変数でプリミティブ型の参照が取られた場合の処理
-
[v] 関数への引数に&を取った場合の処理