Visual C++インラインアセンブラをx64に移植する

 

はじめに

Visual C++ x64版ではインラインアセンブラが使えません。64bit化するにはインラインアセンブラの部分をなんとかしないといけません。

方法1 Compiler Intrinsicsを使う

C++でリライトして、CPU固有の機能が必要な部分だけCompiler Intrinsicsを使う方法です。関数呼び出しと同じ書式でCPU固有のいろいろな機能が呼び出せます。これで済むならこっちのほうが簡単と思います。64bitと32bitで同じソースが使えるしasmが読めない人でも保守できるようになってメンテナンス性も向上します。

方法2 アセンブラ部分を.asmファイルに切り出して関数にして、それをC++から呼び出す

.asmファイル(アセンブラソースファイル)をプロジェクトに追加して、アセンブラ部分のソースを関数として.asmファイルに記述し、C++から呼び出します。ビルド時にC++のプログラムとリンクします。

まずは方法1を検討するのがいいと思います。MSDNを検索してみれば詳しく書いてあります。SSE命令と対応するintrinsicsの名前についてはこちらの表にまとめてみました。

このサイトでは方法2について初歩からざっくり書きます。もし方法1で不足な場合は、戻ってきて読んでみてください。

最後の部分は【すごく要注意】なので、もし方法2でやる場合は注意してください。このへんを知ると、なぜx64でインラインアセンブラがなくなったのか、ちょっとわかるような気がするかもしれません。