https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81389
--- Comment #12 from H.J. Lu <hjl.tools at gmail dot com> ---
(In reply to rockeet from comment #11)
> @H.J. Lu
>
> Have you tried your `solution`?
>
> `_mm_cmpestri` is a C function and have no overloaded with type `__m128i_u`.
[hjl@gnu-tools-1 pr81389]$ cat y.c
#include <nmmintrin.h>
#include <stdio.h>
int main(int argc, char* argv[]) {
__m128i key128 = { ':' };
const char data[] = "___0123456789:_:abcdefghijklmn";
const char* ptr = argc < 100 ? data : argv[1];
int idx = _mm_cmpestri(key128, 1,
*(const __m128i_u*)(ptr+3), 16, // don't require memory
align
_SIDD_UBYTE_OPS|_SIDD_CMP_EQUAL_ORDERED|_SIDD_LEAST_SIGNIFICANT);
printf("%zd\n", idx);
return 0;
}
[hjl@gnu-tools-1 pr81389]$ gcc -O0 -msse4 y.c
[hjl@gnu-tools-1 pr81389]$ ./a.out
10
[hjl@gnu-tools-1 pr81389]$