2

私は Digital-Mars C++ および VC++ 10 コンパイラを使用しており、masm32 アセンブラを持っています。mm0....mm7 64 ビット レジスタを使用して、eax、eabx 32 ビット レジスタ間でデータを切り替えるにはどうすればよいですか? それらを C++ コンパイラの asm{} または _asm{} 供給で使用できますか?

このようなものが役に立つかもしれません:

mmTo32 eax,mm3
mmTo16 bx,mm6
mmTo8 cl,mm4
ToMM mm2,eax

私はグーグルで検索しましたが、十分に見つけることができませんでした。

ありがとうございました。

4

1 に答える 1

5

XMM の方が優れていてサポートされているため、SSE2 を使用してください (Harold のコメントのおかげで、XMM は MM レジスターとは関係がなく、私の心は AVX/SSE と混ざっていたに違いありません)。

MSDN のこのページを参照してください: http://msdn.microsoft.com/en-us/library/dzs626wx(v=vs.71).aspx

必要な組み込み関数はすべてここにあります。これらは、コンパイラによってインライン アセンブリに展開されます。

メモリとの間で値をロード/ストアするには、 _mm_loadl_pi/_mm_loadh_pi_mm_storel_pi/が必要です。_mm_storeh_pi

「xmmintrin.h」ファイルをインクルードし、プロジェクト オプションで SSE コード生成を有効にするだけです。

于 2012-07-19T16:51:04.253 に答える