C++相談室 part161at TECHC++相談室 part161 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト992:デフォルトの名無しさん 22/10/27 02:01:40.47 XIiqnbUh.net clangのソースで、CPUのマシン語を生成している場所を調べていて、 X86AsmPrinter クラスや X86MCInstLower クラスがそれに強く関与していることが分かって きました。 X86AsmPrinter クラスや X86MCInstLower クラスは、お互いに参照されてますが、 この2つのクラスは、いずれも「作られている場所」が見つかりません。 「作られている」とは、new X86AsmPrinter や、X86AsmPrinter a;、 new X86MCInstLower や X86MCInstLower b; のようにしている場所です。 どなたか分かりませんか? 993:デフォルトの名無しさん 22/10/27 02:32:01.95 XIiqnbUh.net >>978 すみません、多分、以下の部分ですね。 これで、new X86AsmPrinterしたアドレスを、getTheX86_32Target()やgetTheX86_64Target() が返した Target クラスのシングルトンのインスタンス xxx に対して xxx.AsmPrinterCtorFn = アドレス; のように記録しているようです。 extern "C" LLVM_EXTERNAL_VISIBILITY void LLVMInitializeX86AsmPrinter() { RegisterAsmPrinter<X86AsmPrinter> X(getTheX86_32Target()); RegisterAsmPrinter<X86AsmPrinter> Y(getTheX86_64Target()); } template <class AsmPrinterImpl> struct RegisterAsmPrinter { RegisterAsmPrinter(Target &T) { TargetRegistry::RegisterAsmPrinter(T, &Allocator); } private: static AsmPrinter *Allocator(TargetMachine &TM, std::unique_ptr<MCStreamer> &&Streamer) { return new AsmPrinterImpl(TM, std::move(Streamer)); } }; /// TargetRegistry - Generic interface to target specific features. struct TargetRegistry { ・・・ static void RegisterAsmPrinter(Target &T, Target::AsmPrinterCtorTy Fn) { T.AsmPrinterCtorFn = Fn; } ・・・ }; 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch