write-your-llvm-backend/main.asciidoc
Ushitora Anqou d779ff78e5 update
2020-01-07 18:15:31 +09:00

86 lines
2.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

= 自作ISAのためのLLVMバックエンドを書く薄い本予定
艮 鮟鱇 <ushitora@anqou.net>
:toc: left
== LLVMバックエンド概略
FIXME: 人がLLVMバックエンドを書きたくなるような文章をここに書く。
== 参考にすべき文献
== ISAの仕様を決める
=== CAHPv3アーキテクチャ仕様
== アセンブラを作る
=== LLVMをビルドする
=== スケルトンバックエンドを追加する
=== 簡易的なアセンブラを実装する
=== `CAHPInstPrinter` を実装する
=== テストを書く
=== メモリ演算を追加する
=== 属性を指定する
=== ディスアセンブラを実装する
=== relocationとfixupに対応する
=== `%hi` と `%lo` に対応する
=== `li a0, foo` をエラーにする
=== llvm-objdump の調査
=== `hlt` 疑似命令を追加する
== コード生成部を作る
=== コンパイラのスケルトンを作成する
=== 基本的な演算に対応する
=== 定数の実体化に対応する
=== メモリ演算に対応する
=== relocationに対応する
=== 条件分岐に対応する
=== 関数呼び出しに対応する
=== 関数プロローグ・エピローグを実装する
=== frame pointer eliminationを実装する
=== `select` に対応する
=== `FrameIndex` をlowerする。
=== 大きなスタックフレームに対応する
=== `SETCC` に対応する
=== `ExternalSymbol` に対応する
=== jump tableを無効化する
=== インラインアセンブリに対応する
=== fastccに対応する
== Cコンパイラに仕立てる
=== LLDにCAHPバックエンドを追加する
=== ClangをCAHPに対応させる
=== `crt0.o` と `cahp.lds` の導入
=== `--nmagic` の有効化
=== libcの有効化
== まともなコードを生成する
=== 分岐解析に対応する
=== branch relaxationに対応する
=== 16bit命令を活用する
=== `jal` を活用する
=== 命令スケジューリングを設定する
=== 末尾再帰に対応する
== 落ち穂拾い
=== スタックを利用した引数渡し
=== `byval` の対応
=== 動的なスタック領域確保に対応する
=== emergency spillに対応する
=== 可変長引数関数に対応する
=== 単体の `sext/zext/trunc` に対応する
=== 乗算に対応する
=== 除算・剰余に対応する
=== `frameaddr/returnaddr` に対応する
=== `ROTL/ROTR/BSWAP/CTTZ/CTLZ/CTPOP` に対応する
=== 32bitのシフトに対応する
=== 間接ジャンプに対応する
=== `BlockAddress` のlowerに対応する
[bibliography]
== 参考文献