title: Why the compiler changes movq to movd when doing 64bit operations?
body: <p>I am programming the following:</p>
  
  <pre><code>__asm__ volatile ("movq %%rax, %%mm1\n"
                    "movq %%rcx, %%mm2\n"
                    : : "a" (0xDEADBEEFDEADBEEF), "c" (0xBADFACE5BADFACE5));
  </code></pre>
  
  <p>In this case, I am moving the value from rax to mm1 which both are 64b registers (moving a qword value from one register to another). But when I compile my code I see:</p>
  
  <pre><code>mov  rax, 0xDEADBEEFDEADBEEF
  mov  rcx, 0xBADFACE5BADFACE5
  movd mm1, rax     &lt;-------------- Why it is doing a dword operation ??
  movd mm2, rcx     &lt;-------------- Why it is doing a dword operation ?? 
  </code></pre>
  
  <p>I am compiling my code in 64bit mode, I am not sure why it is changing a 64bit operation to a 32bit.</p>