6800用のコンパイラを探して – CC6303 (3)(ベーシックマスター開発 その45)

2024/12/31BASICMASTER, 昔のパソコン

6800用のコンパイラを探して – CC6303 (2)(ベーシックマスター開発 その44) | ず@沖縄の続き。

今回はCC6303の生成するオブジェクトについてについてのメモです。


CC6303の生成するオブジェクトについて

  • ASTを作らずに、パースしながらコードを生成する。したがって、基本的にはプログラムが書かれている順番にコードが生成される
  • (peep hole optimizer の働きで、順序が入れ替わることはある)
  • 関数の引数は左から積まれる。一番右の引数がスタックトップに近い。積んだ引数は呼ばれた関数側で除去する
  • 可変長引数の場合も左から積む。積んだ引数は呼んだ側で除去する。呼ぶ時に、先頭引数へのオフセットをAccBで渡す。
  • 可変長引数で呼ばれた側の関数では、AccBを元に@fpを更新する。引数は @fp (frame pointer)経由で引数アクセスを行う
  • peep hole optimizerのルールが大きい(cc68-00.rules)。ここでバグが発生すると大変
  • charはデフォルトでunsigned。素直に型昇格するので、char引数も2バイト積んで渡す
  • float演算は使えない(変数定義、sizeofはできる)
  • 最適化は、プログラムサイズを小さくすることを優先している(-Os相当)。速度は若干遅くなっている