いいえ、希望する方法はありません。
マイクロソフトのコンパイラは、あなたが言ったように、x86-64ターゲットのインラインアセンブリをサポートしていません。これにより、外部コードモジュール(* .asm)でアセンブリ関数を定義し、それらをMASMでアセンブルし、結果を個別にコンパイルされたC/C++コードとリンクさせる必要があります。
必要なステップの分離は、コンパイル時にC/C++コンパイラが表示されないため、C/C++コンパイラがアセンブリ関数をインライン化できないことを意味します。
リンク時コード生成(LTCG)を有効にしても、リンカがこれをサポートしないため、アセンブリモジュールはインライン化されません。
別のモジュールで記述されたアセンブリ関数を直接CまたはC++コードにインライン化する方法はまったくありません。
inline
または__forceinline
キーワードは何も実行できません。実際には、コンパイラエラー(または少なくとも警告)なしでそれらを使用する方法はありません。これらの注釈は、関数の定義(インライン関数の場合は宣言と同じです)に移動する必要がありますが、別の* .asmファイルで定義されているため、関数の定義に入れることはできません。これらはMASMキーワードではないので、定義に追加しようとすると必然的にエラーになります。また、Cヘッダーのアセンブリ関数の前方宣言にそれらを置くことは、インライン化するコードがないので、同様にうまくいっていません。プロトタイプだけです。
これは、マイクロソフトがの組み込み関数を使用することを推奨する理由です。これらはCまたはC++コードで直接使用でき、コンパイラは対応するアセンブリコードを自動的に生成します。これにより、望ましいインライン化が達成されるだけでなく、イントリンシックスがオプティマイザを機能させ、さらに結果を改善することさえできます。いいえ、組み込み関数は完全なコードにつながるわけではなく、すべての組み込み関数はありませんが、Microsoftのコンパイラで行うことができます。
あなたの唯一の選択肢は、コンパイラが目的のオブジェクトコードを生成するまで、さまざまなC/C++コードの並べ替えで座って遊ぶことです。これは、生成される命令に組み込み関数がない場合には非常に強力ですが、時間がかかりすぎてしまいますので、それを再確認して、実行し続けることを確認してくださいコンパイラのバージョンをアップグレードするときに必要です。
コンパイラ組み込み関数を検索しましたか? 'my_asm_func'の機能をカバーするものがあるかもしれません。一般的には、独自のアセンブリをインラインでコンパイラと混在させることは、最適化のレベルに応じて多くの最適化を行いますが、メンテナンスはもちろんのこと、動作するのは難しいかもしれません。 –
いいえ、できません。何らかの理由でこれを参照してください(同じような質問への回答)(http://stackoverflow.com/a/5542379/597607)。 –