Check following simple program:
# cat foo.c
#include <inttypes.h>
#include <stdio.h>
#include <x86intrin.h>
int main(void) {
printf("%" PRIu32 "\n", _mm_crc32_u32(42, 2534474250));
return 0;
}
Use gcc
to compile with no options:
# gcc foo.c
In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/include/immintrin.h:37,
from /usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/include/x86intrin.h:32,
from foo.c:3:
foo.c: In function ‘main’:
/usr/lib/gcc/x86_64-pc-linux-gnu/10.2.0/include/smmintrin.h:839:1: error: inlining failed in call to ‘always_inline’ ‘_mm_crc32_u32’: target specific option mismatch
839 | _mm_crc32_u32 (unsigned int __C, unsigned int __V)
| ^~~~~~~~~~~~~
foo.c:6:2: note: called from here
6 | printf("%" PRIu32 "\n", _mm_crc32_u32(42, 2534474250));
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Should use -march=native
option here:
# gcc -march=native foo.c
#
Reference:
stackoverflow.