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]
|
||
== 参考文献
|