I know I believe in nothing but it is my sweet nothing.:2010年08月24日分

2010/08/24(Tue)

[pcc] ほんやく

ヒマみてボチボチ訳していこうかと、原文は こちら
意味が通じればいいやレベルなので苦情とか撲滅運動な人は/dev/nullへどうぞ。

移植者のためのPCCガイド

アブストラクト
  この書は新たな対象にPCCを移植しようと考えている人向けです。
  移植作業に足る内部構造と、対象依存のサブルーチンについての解説を扱います。
  関連して読んで置いたほうがいいのは、オリジナルのPCCのドキュメントでしょう。

イントロダクション
  PCCは元はSteven C. Johnsonによって、今から30年以上も昔に書かれました。
  内部は多くの変更が加えられましたが、それでもなお基本構造はまだ変わらず元のままです。
  このコンパイラは概念的に2つのパートに分割することができます; 言語に特定する処理を
  扱うフロントエンド部分と、最適化とアセンブリコードの生成を行うバックエンド部です。

  この分割構造によって、他のフロントエンドを追加し易くなっています。
  その実例としてこのパッケージにはf77のフロントエンドも含めてあります。

パス
  コンパイラは先ほど述べた通り、異なる2つのパスから成り立ちますので
  この2つをそれぞれ別のプログラムとその中間ストアとして作り上げることは可能でしょう。
  まー普通はそこまでやりません、必要になった人がやればいいんじゃないでしょうか。
  でもこの2つを分割することを念頭におけば、よりクリーンな内部構造になりますし
  後から異なる言語フロントエンドをぶちこむのもより簡単になります。

  この全てのシンボルテーブル情報の(パース)結果と、(中間ストア)データ生成は全て
  pass1で終了し、pass2では最適化とアセンブリコードの生成のみを行います。
  pass2は関数の式木全体を保存します、式木はpass1から渡され最適化とレジスタの割り当てを
  して関数を完成させます。

  関数のコードはinterpass構造体のリンクリストで表現されます。
  このリンクリストは必ずプロローグ(interpass_prolog構造体)で始まり、同様に
  エピローグで終わりますが、これはフロントエンドによって詰め込まれます。
  この構造体の中身の詳細については、mip/manifest.h を参照してください。

型情報
  PCCで型情報はTWORD(ふつーはint)に変換されます、これにはビットシフトが使われます。
  最下位5bitは基本型を表現します、いわゆるintとかfloatとかなんかです。
  まぁそれだけじゃなしにFTN、PTRそしてARYと論理和されもします、必要に応じてですが。
  例えば、(PTR|LONG) はlong型へのポインタです。いくつかのマクロがこの型情報を操作するため
  用意されています; INCREF(LONG) これは前の(PTR|LONG)と同じです。他のマクロについては
  詳細は mip/manifest.h を参照してください。


シンボルテーブル
  そうのうち書く

続きはまた後日。

というかllvmでいいんじ(ry

んで 例の問題patch更新、 こっちの作業を進めるためにまずはドキュメントちゃんと読みましょう週間開始。