我曾尝试在gcc中混合使用SSE2指令和内联汇编语句。但是,如果我将一个变量指定为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
谢谢 :)