Je teste l'instruction pcmpistr qui est un strchr() équivalent dans SSE mais j'obtiens l'erreur sur la valeur de retour, pour une raison quelconque le compilateur pense que la variable de type 'int' 'idx' est un vecteur, mais c'est un scalaire et il devrait stocker l'index du caractère trouvé dans la chaîne. Quel est le problème ici?compiler des instructions intrinsèques sse
[[email protected] test]$ cat pcmpistr.c
#include <nmmintrin.h>
#include <stdio.h>
int main(int argc,char **argv) {
int idx;
char str1[16] __attribute__ ((aligned (16))) ={'G','E','T',' ','/','i','n','d','e','x','.','h','t','m','l','\n'} ;
char str2[1] __attribute__ ((aligned (16))) ={'\n'};
__m128i *a,*b;
a=(__m128i*) str1;
b=(__m128i*) str2;
idx=_mm_cmpestri (a, 16, b, 1, _SIDD_UBYTE_OPS |_SIDD_CMP_EQUAL_ANY|_SIDD_LEAST_SIGNIFICANT);
printf("idx=%d\n",idx);
}
[[email protected] test]$ gcc -o pcmpstr pcmpistr.c
pcmpistr.c: In function ‘main’:
pcmpistr.c:13:2: error: can’t convert value to a vector
idx=_mm_cmpestri (a, 16, b, 1, _SIDD_UBYTE_OPS |_SIDD_CMP_EQUAL_ANY|_SIDD_LEAST_SIGNIFICANT);
^
pcmpistr.c:13:2: error: can’t convert value to a vector
[[email protected] test]$
Je pense que vous devez déréférencer 'a' et' b'. – fuz