title: What is the relation between Intel Intrinsics and x86 Built-in Functions
body: <p><a href="https://software.intel.com/sites/landingpage/IntrinsicsGuide/" rel="nofollow">Intel Intrinsics Guide</a> lists intrinsics for the Intel MMX technology, SSE, SSE2, SSE3, and SSSE3 instructions for Intel C/C++ compiler. <a href="https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/x86-Built-in-Functions.html#x86-Built-in-Functions" rel="nofollow">x86 Built-in Functions</a> lists intrinsics for GCC. What is the relation between these two lists?</p>
  
  <p>My guess is that <a href="https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/x86-Built-in-Functions.html#x86-Built-in-Functions" rel="nofollow">x86 Built-in Functions</a> is a implementation of <a href="https://software.intel.com/sites/landingpage/IntrinsicsGuide/" rel="nofollow">Intel Intrinsics Guide</a>. For example, <a href="https://software.intel.com/sites/landingpage/IntrinsicsGuide/" rel="nofollow">Intel Intrinsics Guide</a> has <code>__m64 _mm_add_pi16 (__m64 a, __m64 b)</code> which is implemented as <code>v4hi __builtin_ia32_paddw (v4hi, v4hi)</code> in <a href="https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/x86-Built-in-Functions.html#x86-Built-in-Functions" rel="nofollow">x86 Built-in Functions</a>. So it seems that <a href="https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/x86-Built-in-Functions.html#x86-Built-in-Functions" rel="nofollow">x86 Built-in Functions</a> pick some <a href="https://software.intel.com/sites/landingpage/IntrinsicsGuide/" rel="nofollow">Intel Intrinsics Guide</a>'s intrinsics and does some wrapping such as renaming. But <a href="https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/x86-Built-in-Functions.html#x86-Built-in-Functions" rel="nofollow">x86 Built-in Functions</a> does not implement all intrinsics in <a href="https://software.intel.com/sites/landingpage/IntrinsicsGuide/" rel="nofollow">Intel Intrinsics Guide</a>. For example, <code>__m64 _mm_shuffle_pi16 (__m64 a, int imm8)</code>'s SEE instruction is <code>pshufw</code>. But <a href="https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/x86-Built-in-Functions.html#x86-Built-in-Functions" rel="nofollow">x86 Built-in Functions</a> does not have a intrinsic for this SSE instruction. So it seems that <a href="https://gcc.gnu.org/onlinedocs/gcc-5.3.0/gcc/x86-Built-in-Functions.html#x86-Built-in-Functions" rel="nofollow">x86 Built-in Functions</a> does not implements all intrinsics in <a href="https://software.intel.com/sites/landingpage/IntrinsicsGuide/" rel="nofollow">Intel Intrinsics Guide</a>. To use such intrinsics, we can include <a href="https://software.intel.com/sites/landingpage/IntrinsicsGuide/" rel="nofollow">Intel Intrinsics Guide</a>'s header file and use <code>-msse</code> to do the compile (I have verified this).</p>
  
  <p>Is my understanding correct?</p>