私は次のようにプログラミングしています:
__asm__ volatile ("movq %%rax, %%mm1\n"
"movq %%rcx, %%mm2\n"
: : "a" (0xDEADBEEFDEADBEEF), "c" (0xBADFACE5BADFACE5));
この場合、値を rax から mm1 に移動します。どちらも 64b レジスタです (qword 値をあるレジスタから別のレジスタに移動します)。しかし、コードをコンパイルすると、次のように表示されます。
mov rax, 0xDEADBEEFDEADBEEF
mov rcx, 0xBADFACE5BADFACE5
movd mm1, rax <-------------- Why it is doing a dword operation ??
movd mm2, rcx <-------------- Why it is doing a dword operation ??
コードを 64 ビット モードでコンパイルしていますが、64 ビット操作を 32 ビットに変更する理由がわかりません。