kharcs #4
(0) これはなに?
- (kharcsページは、kharc開発でわかったことを整理して説明するためのページ群です。)
- 今回説明したいこと: ~この順番でCコンパイラを作ったら早くできたよ!~
(8) 最適化1(9日目:6/14)
- 「1+a+2+b+3」という式があった時に、これを「a+b+6」にできたらいいなと考えました。
- 加算だけではなく、乗算や除算や減算が混ざっていてもうまく定数項をまとめたいです。「1+a/2-3*4」→「a/2-11」。
- この日はSecHack365のオンラインイベントがあって、21時くらいまで開発はできませんでしたが、しかし若者が頑張っている様子を見ていたら自分も何かしたくなって、夜中に開発しました。
- 途中でバグに悩まされたりすることもありましたが、最終的にはうまくできました。
- ということで、9日目の成果はこれだけです。・・・いや違った!
- オンラインイベントの休み時間にちょっと試したことがあります。
- これまでkharcの関数呼び出しは、リターン先をRPレジスタに代入してjmpするという方法を取っていました。しかしx86にJITコンパイルする際に、これをx86のCALL(e8)/RET(c3)に翻訳することができないかというと、できなくはないのです。
- そして試しにやってみると、fib()のJITコンパイル後の実行速度が8%も短くなりました。おおおー。