問題タブ [machine-instruction]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
270 参照

llvm - LLVM で MachineInstr を MCInst に変換するにはどうすればよいですか?

この変換 ( からMachineInstrMCInst) が で必要MachineFunctionPassです。

X86MCInstLowerを に変換するMachineInstrことはわかっていMCInstます。ただし、初期化X86MCInstLowerには のインスタンスが必要ですX86AsmPrinterX86AsmPrinterそれ自体MachineFunctionPassが必要TargetMachine &であり、std::unique_ptr<MCStreamer>開始する必要があります。のみを返すためTargetMachine、 a から取得できません。コンストラクターには、 からのコピー コンストラクターもありません。MachineFunctionMachineFunctionconst TargetMachine &TargetMachineconst TargetMachine

したがって、私は変換のこの時点で立ち往生しています。登録されたパスを実行してその出力を取得する方法はありますMachineFunctionPassか? X86AsmPrinterで に登録されTargetRegistryていRegisterAsmPrinterます。それを活用できないかと。

これに関するメーリングリストのスレッドがあります。ただし、それで問題が最終的に解決されるわけではありません。

0 投票する
1 に答える
2996 参照

c++ - C++ はグローバル スコープでコードを持つことができますか?

コード (C++ ソース ファイルのグローバル スコープでアセンブリ命令にコンパイルするコード) を使用することは合法ですか? 以前は、Ch プログラミング言語(C/C++ のインタープリター) を除いて、コードをコードに含めることはできないという印象を受けていました。 C++ プログラムのグローバル スコープ コード/命令は、関数の本体内にのみ存在できます [ピリオド]!

しかし、C++ では、関数をグローバル変数に代入することで、メイン関数の前に関数を呼び出すことができることがわかりました。これにはcall、アセンブリ コード内の命令が含まれます。また、アセンブリ コードの外で、2 つの変数の合計を別のグローバル変数に割り当てることもできます。これにはほぼ確実にaddandmov命令が含まれます。そして、そのコードが関数の外のグローバル スコープにある場合、いつ実行されるのでしょうか? がクラス型のオーバーロードされた演算子である場合、その+中に print ステートメントがある場合、それはいつ実行されますか?

また、C++ プログラムのグローバル スコープにループと制御構造を含めることはできますか? もしそうなら、それらはいつ実行されますか? 他のプログラム構造についてはどうですか? それらはグローバル スコープで許可されていますか? また、どのような状況で、いつ実行されますか?

この質問は、私が投稿した以前の質問への回答です: Why can't I assign values to global variables outside a function in C?

元の質問に対する回答者は、関数の範囲外にコードを含めることはできないと主張しています。私はこれに関するルールを完全には理解していないと思います。正確には何が「コード」であるかどうかを理解していません。

0 投票する
1 に答える
245 参照

c - (アセンブリ) 命令シーケンスから C コードへのマッピング

私の教科書から 1 つの演習があります。

は、引数 a と b の一般的な比較を示しています。ここでは、typedef 宣言で data_t を宣言することによって引数のデータ型を設定でき、#define 宣言で COMP を定義することによって比較を設定できます。a が %edx にあり、b が %eax にあるとします。次の各命令シーケンスについて、data_t のデータ型を特定します (複数の正解がある可能性があります。すべてをリストする必要があります)。

そして、教科書からの答えは次のとおりです。

サフィックス 'l' とレジスタ識別子は 32 ビット オペランドを示しますが、比較は 2 の補数 '<' です。data_t は int でなければならないと推測できます。

だから私の質問は次のとおりです。考えられるすべての回答をリストするように求めているので、なぜ data_t も 'long int' および 32 ビットのポインターにすることはできませんか?

0 投票する
1 に答える
26 参照

llvm - 分岐命令から MachineBasicBlock を抽出する

分岐命令には、ジャンプ先の基本ブロックの名前であるラベルが含まれています。それを考えると、分岐命令から MachineBasicBlock オブジェクトを抽出する方法はありますか? 例えば: