https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96918
--- Comment #4 from Gabriel Ravier <gabravier at gmail dot com> --- Oh, now I realise that those headers are actually in fact part of directly GCC-provided headers and not some external package. I must say though, if those functions are internal implementation detail and not intended to be stable, I wonder why they are mentioned so many times in GCC docs (not gccint, the normal manual), such as here: '-mcrc32' This option enables built-in functions '__builtin_ia32_crc32qi', '__builtin_ia32_crc32hi', '__builtin_ia32_crc32si' and '__builtin_ia32_crc32di' to generate the 'crc32' machine instruction. or here: The following built-in function is always available. 'void __builtin_ia32_pause (void)' Generates the 'pause' machine instruction with a compiler memory barrier. or here: The following built-in functions are made available by '-mmmx'. All of them generate the machine instruction that is part of the name. v8qi __builtin_ia32_paddb (v8qi, v8qi) v4hi __builtin_ia32_paddw (v4hi, v4hi) v2si __builtin_ia32_paddd (v2si, v2si) v8qi __builtin_ia32_psubb (v8qi, v8qi) v4hi __builtin_ia32_psubw (v4hi, v4hi) [long list continues, and this is also available for other switches like it] Which seems to imply that these aren't implementation detail, unless them being part of the manual is accidental. I don't mind using the Intel intrinsics, but I still find this quite odd if they are intended to be internal. Could you clarify this ?