86 lines
2.5 KiB
Plaintext
86 lines
2.5 KiB
Plaintext
|
= 自作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]
|
|||
|
== 参考文献
|