title: Difference between _mm256_xor_si256() and _mm256_xor_ps()
body: <p>I am trying to find the actual difference between <a href="https://software.intel.com/en-us/node/513963" rel="nofollow">_mm256_xor_si256</a> and <a href="https://software.intel.com/en-us/node/514119" rel="nofollow">_mm256_xor_ps</a> intrinsics from AVX(2).</p>
  
  <p>They respectively map to the intel instructions:</p>
  
  <ul>
  <li>vpxor ymm, ymm, ymm</li>
  <li>vxorps ymm, ymm, ymm</li>
  </ul>
  
  <p>Which are defined by Intel as:</p>
  
  <pre><code>dst[255:0] := (a[255:0] XOR b[255:0])
  dst[MAX:256] := 0
  </code></pre>
  
  <p>versus</p>
  
  <pre><code>FOR j := 0 to 7
      i := j*32
      dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
  ENDFOR
  dst[MAX:256] := 0
  </code></pre>
  
  <p>But frankly, I don't see a difference in their effects?
  They both xor 256 bits.
  But the latter can be used on AVX and AVX2, the first only on AVX2.
  Why would you ever use the first, with the lower compatibility?</p>