title: ASM x86_64 AVX: xmm and ymm registers differences
body: <p>What are the differences between <code>xmm</code> and <code>ymm</code> registers?
  I thought that <code>xmm</code> is for SSE, and <code>ymm</code> is for AVX, but I wrote some code:</p>
  
  <pre><code>vmovups     ymm1, [r9]      
  vcvtss2si   rcx, ymm1
  </code></pre>
  
  <p>and it gives me:</p>
  
  <pre><code>error: invalid combination of opcode and operands
  </code></pre>
  
  <p>It's about the line:</p>
  
  <pre><code>vcvtss2si   rcx, ymm1
  </code></pre>
  
  <p>So I wrote:</p>
  
  <pre><code>vcvtss2si   rcx, xmm1
  </code></pre>
  
  <p>and it works as intended. The first value of <code>ymm1</code> vector, converted to integer, is now in <code>rcx</code>.</p>
  
  <p>What is it all about? <code>ymm1</code> and <code>xmm1</code> are the same registers?</p>