title: Compilation of a simple c++ program using SSE intrinsics
body: <p>I am new to the SSE instructions and I was trying to learn them from this site:
  <a href="http://www.codeproject.com/Articles/4522/Introduction-to-SSE-Programming" rel="nofollow">http://www.codeproject.com/Articles/4522/Introduction-to-SSE-Programming</a></p>
  
  <p>I am using the GCC compiler on Ubuntu 10.10 with an Intel Core i7 960 CPU</p>
  
  <p>Here is a code based on the article which I attempted: </p>
  
  <p>For two arrays of length ARRAY_SIZE it calculates </p>
  
  <p><code>fResult[i] = sqrt( fSource1[i]*fSource1[i] + fSource2[i]*fSource2[i] ) + 0.5</code></p>
  
  <p>Here is the code</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;iomanip&gt;
  #include &lt;ctime&gt;
  #include &lt;stdlib.h&gt;
  #include &lt;xmmintrin.h&gt; // Contain the SSE compiler intrinsics
  #include &lt;malloc.h&gt;
  void myssefunction(
            float* pArray1,                   // [in] first source array
            float* pArray2,                   // [in] second source array
            float* pResult,                   // [out] result array
            int nSize)                        // [in] size of all arrays
  {
      int nLoop = nSize/ 4;
  
      __m128 m1, m2, m3, m4;
  
      __m128* pSrc1 = (__m128*) pArray1;
      __m128* pSrc2 = (__m128*) pArray2;
      __m128* pDest = (__m128*) pResult;
  
  
      __m128 m0_5 = _mm_set_ps1(0.5f);        // m0_5[0, 1, 2, 3] = 0.5
  
      for ( int i = 0; i &lt; nLoop; i++ )
      {
          m1 = _mm_mul_ps(*pSrc1, *pSrc1);        // m1 = *pSrc1 * *pSrc1
          m2 = _mm_mul_ps(*pSrc2, *pSrc2);        // m2 = *pSrc2 * *pSrc2
          m3 = _mm_add_ps(m1, m2);                // m3 = m1 + m2
          m4 = _mm_sqrt_ps(m3);                   // m4 = sqrt(m3)
          *pDest = _mm_add_ps(m4, m0_5);          // *pDest = m4 + 0.5
  
          pSrc1++;
          pSrc2++;
          pDest++;
      }
  }
  
  int main(int argc, char *argv[])
  {
    int ARRAY_SIZE = atoi(argv[1]);
    float* m_fArray1 = (float*) _aligned_malloc(ARRAY_SIZE * sizeof(float), 16);
    float* m_fArray2 = (float*) _aligned_malloc(ARRAY_SIZE * sizeof(float), 16);
    float* m_fArray3 = (float*) _aligned_malloc(ARRAY_SIZE * sizeof(float), 16);
  
    for (int i = 0; i &lt; ARRAY_SIZE; ++i)
      {
        m_fArray1[i] = ((float)rand())/RAND_MAX;
        m_fArray2[i] = ((float)rand())/RAND_MAX;
      }
  
    myssefunction(m_fArray1 , m_fArray2 , m_fArray3, ARRAY_SIZE);
  
    _aligned_free(m_fArray1);
     _aligned_free(m_fArray2);
     _aligned_free(m_fArray3);
  
    return 0;
  }
  </code></pre>
  
  <p>I get the following compiltation error</p>
  
  <pre><code>[Programming/SSE]$ g++ -g -Wall -msse sseintro.cpp 
  sseintro.cpp: In function ‘int main(int, char**)’:
  sseintro.cpp:41: error: ‘_aligned_malloc’ was not declared in this scope
  sseintro.cpp:53: error: ‘_aligned_free’ was not declared in this scope
  [Programming/SSE]$ 
  </code></pre>
  
  <p>Where am I messing up? Am I missing some header files? I seem to  have included all the relevant ones.</p>