C++相談室 part161at TECH
C++相談室 part161 - 暇つぶし2ch992:デフォルトの名無しさん
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;
}
・・・
};

994:デフォルトの名無しさん
22/10/27 02:43:40.35 InDGsMhW.net
なんかコンセプト以前にテンプレートにもあまり慣れてなさそう

995:デフォルトの名無しさん
22/10/27 02:44:18.56 XIiqnbUh.net
間違えました。
xxx.AsmPrinterCtorFn に登録しているのは、new X86AsmPrinterの
アドレスではなく、
RegisterAsmPrinter<X86AsmPrinter>::Allocator(・・・)
のアドレスのようですね。
そして、このAllocator (==関数)を呼び出すと、new X86AsmPrinter
を行なえるようです。

996:デフォルトの名無しさん
22/10/27 08:37:49.38 yP/aIJbf.net
関係ないけどあんまりnewせんほうがええよ
それしかないと思ってるならちょっと古い感じ

997:デフォルトの名無しさん
22/10/27 22:03:08.74 +UGgATct.net
あんまりデータメンバに直アクセスしないほうがええよ
あんまりグローバル変数使わんほうがええよ
あんまりSendMessageを直に使わんほうがええよ
あんまりナマポ使わんほうがええよ
あんまりアセンブラ使わんほうがええよ
あんまりC++使わんほうがええよ
ラップしろってことだろうけど
一切離れたやつはもうC++使いじゃない

998:デフォルトの名無しさん
22/10/28 00:40:37.68 sQHy7sst.net
>>982
イリノイ大学のclangやLLVMの開発者に言ってください。
コンパイラでは最先端かも知れませんが。

999:デフォルトの名無しさん
22/10/28 08:56:31.64 +oOKe7Yr.net
可変長テンプレートはじみて使ったけど便利だなこれ

1000:デフォルトの名無しさん
22/10/28 09:06:12.57 kPJo8naK.net
threadがあんなに使いやすくなっているのは
ひとえにtemplate-parameter-packのおかげ

1001:デフォルトの名無しさん
22/10/29 23:34:49.08 Ank2ZEY0.net
>>946の話は終わりかな?
レスついたけど反論がないようだけど

1002:デフォルトの名無しさん
22/10/30 03:51:06.75 i1fpLCEI.net
5ch始めたばかりなのかな?

1003:デフォルトの名無しさん
22/10/30 11:42:15.05 /mJPvv5N.net
気になるじゃん

1004:デフォルトの名無しさん
22/10/30 15:52:08.41 zpZIwFpu.net
仕事ハネた後のヨレヨレ状態で見てるから
長文()を読もうとすると寝落ちしかねない

1005:デフォルトの名無しさん
22/10/31 13:27:29.89 Q1JWQuIa.net
VC++ や GCC で <cstddef> をインクルードすると、
std の明⽰的修飾、using 宣言、using 指令がなくても
size_t が使えるのですが、これは C++ 標準の仕様ですか?

1006:はちみつ餃子
22/10/31 13:53:23.25 HpV/6ZOj.net
>>991
いいえ。 未規定です。
std 名前空間内で定義されることは当然に保証された動作ですが、
グローバルには定義されてもされなくてもかまいません。
逆に言えばグローバルに定義されていることはありうると想定する必要があります。
(なので自分が定義する名前がそれに衝突しないようにするべきです。)

1007:デフォルトの名無しさん
22/10/31 13:55:26.92 cQbFxG4K.net
size_tを知らんでもsizeofは使える?

1008:はちみつ餃子
22/10/31 14:17:38.34 HpV/6ZOj.net
>>992 の根拠
URLリンク(timsong-cpp.github.io)

1009:デフォルトの名無しさん
22/10/31 14:31:14.54 J5sgTSch.net
C++相談室 part162
スレリンク(tech板)

1010:デフォルトの名無しさん
22/10/31 14:31:53.89 J5sgTSch.net
立てました

1011:1001
Over 1000 Thread.net
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 162日 17時間 8分 25秒

1012:過去ログ ★
[過去ログ]
■ このスレッドは過去ログ倉庫に格納されています


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch