6800用のコンパイラを探して – CC6303 (3)(ベーシックマスター開発 その45)
6800用のコンパイラを探して – CC6303 (2)(ベーシックマスター開発 その44) | ず@沖縄の続き。
今回はCC6303の生成するオブジェクトについてについてのメモです。
- zu2/CC6303: A C compiler for the 6800 series processors
- EtchedPixels/CC6303: A C compiler for the 6800 series processors (古い?)
- kwhr0/bm2-baremetal-demo
- EtchedPixels/Fuzix-Compiler-Kit: Fuzix C Compiler Project
- EtchedPixels/Fuzix-Bintools: Assembler, linker etc to go with the compiler
CC6303の生成するオブジェクトについて
- ASTを作らずに、パースしながらコードを生成する。したがって、基本的にはプログラムが書かれている順番にコードが生成される
- (peep hole optimizer の働きで、順序が入れ替わることはある)
- 関数の引数は左から積まれる。一番右の引数がスタックトップに近い。積んだ引数は呼ばれた関数側で除去する
- 可変長引数の場合も左から積む。積んだ引数は呼んだ側で除去する。呼ぶ時に、先頭引数へのオフセットをAccBで渡す。
- 可変長引数で呼ばれた側の関数では、AccBを元に@fpを更新する。引数は @fp (frame pointer)経由で引数アクセスを行う
- peep hole optimizerのルールが大きい(cc68-00.rules)。ここでバグが発生すると大変
- charはデフォルトでunsigned。素直に型昇格するので、char引数も2バイト積んで渡す
- float演算は使えない(変数定義、sizeofはできる)
- 最適化は、プログラムサイズを小さくすることを優先している(-Os相当)。速度は若干遅くなっている
ディスカッション
コメント一覧
まだ、コメントがありません