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 ?