dest = source
The movq instruction moves the source value (second operand) to the destination. The purpose of this instruction is to move a data between memory, general purpose registers and floating point registers. Thus the destination must be one of those categories and the source must be a different category with one exception: movq can be used to move a value from one floating point register to another. The 64 bits are moved without conversion.
movq rax, xmm0 ; move xmm0 to rax
movq [x], xmm0 ; move xmm0 to 64 bit variable x
movq xmm0, [y] ; move 64 bit variable y to xmm0
; places 0 in second half of xmm0
movq xmm2, xmm1 ; move xmm1 to xmm2
; places 0 in second half of xmm2
movq [x], rax ; move rax to 64 bit variable x