Используйте встроенные функции SSE2 и встроенный ассемблер gcc

Я попытался смешать встроенные функции 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

Спасибо :)

7
задан Jens Schwarzer 27 January 2012 в 21:33
поделиться