3

CPUアーキテクチャA[i](x86-32、x86-64、ARM、Itaniumなど)ごとに1つのファイルF[i]を探しています。各ファイルF[i]は、アーキテクチャA [i]に関する十分な情報(レジスタ、命令セット、セマンティクスなど)を提供するため、任意の言語Lで、任意のF[をとるプログラムPを記述できます。 i]そして言語LからネイティブA[i]へのコンパイラオプティマイザC[i]を生成します。もちろん、A[i]に関するPの知識はF[i]からのみ得られます。

各F[i]には十分な情報が含まれている必要があります。これにより、言語LからネイティブA [i]までの任意のコンパイラC'に対して、C'と同様にC[i]を生成するPを記述できます。理想的には、F [i]ファイルは、将来のCPUアーキテクチャを記述できる同じ言語DescLで記述されます。

そのようなファイルF[i]は存在しますか(少なくとも最も一般的なCPUアーキテクチャーの場合)?では、どこでダウンロードできますか?そのようなDescLはすでに存在しますか?

4

4 に答える 4

4

Joao Diasは、少なくともコード生成では、この問題は決定不可能であることを証明しました。つまり、一般的なマシンアーキテクチャの場合、そのようなプログラムPは存在できません。彼はまた、典型的なマシンアーキテクチャに完全に効果的なヒューリスティックを開発しました。この問題に関して行われた大量の作業のいくつかをレビューしている彼の論文を読むことをお勧めします。

New JerseyMachine-CodeToolkitとLambda-RTL仕様言語に関連するいくつかの関連ツールと説明があります。仕様自体はおそらく混乱した状態にあり、ディアス博士は正確で最新の仕様を持っている可能性が高いです。

ZephyrのWebページは非常に古く、間違いなく廃止されているため、リンクしないでください。しかし、あなたは私たちの論文を読むことができました:-)

于 2012-09-26T21:41:21.237 に答える
2

Zephyrの「NationalCompilerInfrastructure」プロジェクトに興味があると思います。128.143.136.29/zephyr/を参照してください[実際のリンクを挿入しますが、StackOverflowではこのホストに対してこれを行うことはできません。SOの意見にもかかわらず、リンクは有効です。いいえ、なぜそれが素敵な象徴的な名前を持っていないのかわかりませんが、ねえ、それは私のサイトではありません。]。

彼らは機械記述形式を定義するために真剣な試みをしました、そして私は彼らが多くの「一般的な」機械命令セットをエンコードしたと信じています。選択する前に、彼らの論文を読む必要があります。

于 2012-08-24T16:53:24.807 に答える
0
  • 私はそのようなデータベースを知りません

  • 私が知っている最も近い公開のデータベースは、GCCで使用されるプロセッサの説明です。これらは、プロセッサの説明といくつかのコードを組み合わせて、データ駆動型ではない方法でコード生成のいくつかの側面を処理します。

于 2012-08-24T15:29:09.220 に答える
0

私はそのようなことを知りません。これは抽象的で複雑すぎて、実現可能なPが存在できないと思います。

有用なFは、事実上、共通中間言語と個々のCPU命令セットの間の変換の記述であると思います(その言語が従来のコンパイラーではなく宣言型である場合でも)。バックエンドに関する多くの情報を宣言するために使用されるLLVMのTableGenを見てください。AFAIKは、アーキテクチャ全体を説明するにはまだ十分ではなく、操作が非常に複雑なようです。

PがLについて何を知っているかはわかりませんが、コンパイラC[i]を作成するにはその知識が必要です。もちろん、Lについて知るためにPを作成しない限り、その時点でPは単一のLに固有になり、事実上、新しいものではない従来のコンパイラフロントエンドになります。唯一の違いは、コンパイラーを発行するためのプログラムを作成していることですが、C''誰かが書いたように作成するだけで、これによって何も節約できるかどうかはわかりません。C'予め。(構文解析ははるかに単純で小さな問題であるため、パーサー生成の進歩は成功しています。それにもかかわらず、パーサージェネレーターは、実装の労力と品質の両方で、専門家による手書きのパーサーと最高の競争力があります。)または、PをAIにします。コンパイラの構築を教えますが、AIの現在の状態ではそれは不可能です。そうすれば、Pに言語を教える方法を見つける必要があります(まだ無料のコンパイラはありません)。

それとは別に、コンパイラはCPU命令だけでなく多くのことを知っている必要があります。OSサービス、ABI、および実行可能形式は、それらが直面する多くの重要な問題の3つにすぎません。私はそれらの問題に同様の解決策を適用することについて同様の疑問を持っています。古き良き「フロントエンドとバックエンドを切り離す」トリックは、労力の点でほぼ同じくらい効率的であり、明らかにはるかに可能であり、私にははるかに理にかなっています。

于 2012-08-24T18:54:15.477 に答える