SSE2組み込み関数とインラインアセンブラをgccでミックスしようとしました。しかし、変数をxmm0 / registerとして入力として指定すると、場合によってはコンパイラエラーが発生します。例:
#include <emmintrin.h>
int main() {
__m128i test = _mm_setzero_si128();
asm ("pxor %%xmm0, %%xmm0" : : "xmm0" (test) : );
}
gccバージョン4.6.1でコンパイルすると、次のようになります。
>gcc asm_xmm.c
asm_xmm.c: In function ‘main’:
asm_xmm.c:10:3: error: matching constraint references invalid operand number
asm_xmm.c:7:5: error: matching constraint references invalid operand number
奇妙なことに、他の入力変数/レジスタがある場合、突然xmm0が入力として機能しますが、xmm1などは機能しません。また、別のケースでは、xmm0〜xmm4を指定できましたが、上記は指定できませんでした。これについて少し混乱/イライラ:S
ありがとう :)