基盤部について(内部開発者用)

この文書の目的は、実装に必要な仕様のうち、個々のクラスやメソッドの仕様より上位のものや、実装状況、利用方法などを簡潔にまとめておくことである。プロジェクト内部用であるが、終了時には外部利用者の簡易マニュアルの代わりになるかもしれない。
  1. 仕様概要
    1. 基本方針
    2. 全体構成
    3. C言語
    4. SPARCプロセッサ
    5. マシンパラメタ
    6. ドライバ
    7. HIR-base
    8. フロントエンド(C言語)
    9. フロー解析
    10. HIR最適化
    11. HIR to LIR
    12. LIR
  2. 実装状況
    1. 未定事項
    2. 変更・廃止事項
    3. 既知の問題点
    4. 未実装部分
    5. あとまわし事項
  3. 利用方法

1. 仕様概要


1.1 基本方針

以下のことは、基盤部ではやらない

1.2 全体構成


1.3 C言語

I期で対象とするC言語を次のように限定する

1.4 SPARCプロセッサ

I期で対象とするターゲットを次のように限定する

1.5 マシンパラメタ

1.5.1 HIRの基本型に関するパラメタ

1.5.2 エンディアン

ENDIANがBIG_ENDIANならビッグエンディアン、LITTLE_ENDIANならリトルエンディアン。

1.6 ドライバ


1.7 HIR-base

ソースプログラムの意味を表現できるが、ソース言語に依存しない形式の中間表現である。

1.7.1 シンボル

coins.sym.Symのコメントに、シンボルのクラスの関係の図がある。 coins.sym.Symにシンボルの種類の定数一覧がある。 coins.sym.Symのメソッドで、各種のシンボルを作れる。

1.7.2 型

coins.sym.Typeに型の種類の定数一覧がある。 coins.sym.Symに派生型を作るメソッドがある。

1.7.3 ノード

coins.ir.hir.HIRのコメントに、HIRのノードの階層の図がある。 coins.ir.hir.HIRに、HIRのノードの種類の定数一覧がある。 coins.ir.hir.HIRのサブインタフェースをimplementsするクラスのコンストラクタを使ってノードを作る。

1.8 フロントエンド(C言語)

1.8.1 HIR-baseとHIR-Cの違い

1.8.2 HIR-Cを生成

1.8.3 HIR-baseに変換

1.8.4 HIR-baseでの処理


1.9 フロー解析

1.9.1 制御フローグラフ

1.9.2 制御フロー解析

1.9.3 データフロー解析


1.10 HIR最適化

以下は、最適化ごとに一つのパスとする

1.11 HIR to LIR

memorylayouter

フレーム割り当てを行う

codeconstructor

パターンマッチ

localregisterallocator

レジスタ割り付け

codeemitter

アセンブラコード出力

1.12 LIR

ターゲットに依存したプログラムの意味を表現できるが、ターゲットに依存しない形式の中間表現である。

変数の番地を抽象化するためにSTATIC式とFRAME式を導入している。FRAMEはフレーム割り当てのパスで取り除かれるが、STATICはリンカが解決するため、(アセンブリ言語での出力を仮定する限り)最後まで残る。

レジスタを抽象化するために、仮想レジスタを許している。レジスタ割り当てのパスで実レジスタに置き換えられる。

1.12.1 型

coins.ir.lir.LTypeは型を表す。

1.12.2 ノード

coins.ir.lir.LIRTypeはノードの種類を表す。ノードを作るには、NodeFactoryまたはTreeFactoryのメソッドを使う。

1.12.3演算子

coins.ir.lir.OperatorTypeはノードがOPERATORの場合の種類を表す。

2. 実装状況


2.1 未定事項

灰色は決定済み

2.2 変更・廃止事項

灰色は実施済み

2.3 既知の問題点

灰色は解決済み

2.4 未実装部分


2.5 あとまわし事項


3. 利用方法


3.1 SIMD


A. 気になった用語

符号つき signed
符号なし unsigned
記号表 symbol table
定数伝播 constant propagation
定数畳み込み constant folding
抽象レジスタ 仮想レジスタ
実レジスタ 物理レジスタ ハードレジスタ
パターンマッチング 命令語設定
ソース言語 入力言語
ターゲットマシン