最近、アセンブリ技術を磨くために、C++でおもちゃ言語用の非常に単純なコンパイラを作成しました。これはシングルパスで実行され、解析フェーズ中にコードの一部を表す複数のストリングストリームにコードを直接送信します(つまり、1つはsection .bss
、もう1つは.data
および.text
を表します)。その後、これらの文字列ストリームはファイルに書き込まれ、NASMとgccを使用してそれらをアセンブルしてリンクします。私はこのシングルパスのアプローチがひどく非効率的であることを知っていますが、これはコード生成の段階を他のものよりも理解するためのものです。とにかく、元のアセンブリではなくLLVM ILを直接発行するようにコードを修正したいと思います。 LLVM ILの入門レベルガイドはありますか?あるいは、組立ラインの等価ILコードを決定するためのツールでも良いでしょうか?私は見て、私は私が必要以上に多くの情報である完全な仕様を見つけただけです。コンパイラをx86アセンブリからLLVMに移植する
答えて
LLVM IRリファレンスはavailable hereです。チュートリアルではなく詳細なリファレンスページであることに注意してください。 LLVM IRはx86アセンブリよりも高水準かつより一般的であるため、コンパイラがx86からLLVM IRを放出するように適応するのは難しくありませんが、x86アセンブリとLLVM IRの間には直接的な1対1の対応はありません。
正式なLLVMのドキュメントには、あなたにとって最高の出発点であるdetailed tutorialが付属しています。これは、簡単な高水準プログラミング言語からLLVM IRまでおもちゃコンパイラを作成する手順を示しています。これを実践することで、LLVMの主要な概念の多くを学び、前述の言語リファレンスを効果的に使用できるようになります。
このチュートリアルで問題が見つかった場合は、LLVMバグトラッカーまたはメーリングリストに報告してください。このチュートリアルは機能すると予想され、報告された問題は修正されます。
LLVM IRを理解するためのもう1つの良いスタートリソースはonline demo pageです。これにより、CコードをLLVM IRにオンラインで(何もインストールせずに)コンパイルすることができ、基本的なプログラミング構造をLLVM IRでどのように表現できるかを理解するのに非常に役立ちます。
ありがとう!私はデモページを見たことがなかった、それはまさに私が探していたものです。 – chameco
@chameco:デモページは本当に便利ですが、個人的に私はしばしばClangがどのような種類の最適化を実行できるかどうかをチェックするために使います。本当に人々に光を見せてもらい、コード内であまりにも低レベルになってしまうことを避けるのに役立ちます。 –
私は他のLLVMターゲットのアセンブリ言語を見てみましょう。http://ellcc.org/demo –
- 1. LLVMフレームワークからJavaへの移植?
- 2. コンパイラをC#からJavaに移植する
- 3. dirent.hの使い方をgccからWindowsコンパイラに移植する方法
- 4. 移植方法libgdxゲームをAndroidからiOSに移植
- 5. なぜAndroidをx86に移植するのは難しいですか?
- 6. x86アセンブリ内のメモリに64ビット定数を移動する
- 7. 剣道をJsonから移植する
- 8. Androidからの移植
- 9. OpenGL-ESで移植する移植
- 10. LLVM IRによるx86レジスタの制御?
- 11. x86アセンブリのバッファ
- 12. x86-64 GNUアセンブリ
- 13. アセンブリのx86 -
- 14. アセンブリx86 Win32
- 15. x86アセンブリ関数
- 16. アセンブリx86フラグ - オーバーフローフラグ
- 17. Android x86の移植では動作しません
- 18. ARC-LLVMコンパイラ3.0に変換するエラー
- 19. アセンブリ言語は、/実際に/移植できません。
- 20. x86コードをLLVMで再コンパイルしてより高速なものにするx86
- 21. .NET - NGENのx86アセンブリ
- 22. アセンブリx86、挨拶プログラム
- 23. アセンブリ言語x86 Irvine32
- 24. Eratosthenes x86アセンブリのふるい
- 25. の#defineマクロからハッシュテーブルを移植
- 26. argvからx86アセンブリ経由でファイル名を読み取る
- 27. C構造体の整列とコンパイラ間の移植性
- 28. ARM RealView DebuggerでAndroidを移植するための移植
- 29. アップルのLLVMコンパイラ3.1のエラー
- 30. アップルのLLVMコンパイラ4.1のエラー
1対1のマッピングはありません。ここにはショートカットはありません。 –
私はこれを理解しています。データ、cmp、条件付きジャンプなどの基本的なものを出す方法についてのガイドを探しています。 – chameco
LLVMドキュメント。おもちゃの言葉のためのコンパイラを作成する方法を説明する(少なくとも1つの)チュートリアルがあります。 – Mat