## movapd - move aligned packed doubles

    dest = source

The movapd instruction moves 2 double precision floating point values (64 bits each) from the source value (second operand) to the destination. The source and the destination can be an XMM register or a memory location. You can not use 2 memory addresses. The vmovapd instruction allows moving 4 doubles between YMM registers and memory.

This version requires that any memory address used be aligned on a 16 byte boundary (bits 0:3 all 0). Using an unaligned address generates a general protection fault. In the original designs movapd was faster than than movupd (move unaligned). When in doubt use movupd instead.

movapd moves the values without inspection or conversion.

An XMM register is 128 bits total, while CPUs supporting AVX instructions have an additional 128 bits in each register accessible as YMM registers.

            movapd   xmm1, xmm2     ; moves 2 doubles from xmm2 to xmm1
                                    ; leaves the rest of xmm1 unchanged
            movapd   xmm2, [x]      ; moves 2 doubles from variable x to xmm2
                                    ; leaves the rest of xmm2 alone
            movapd   [y], xmm0      ; moves 2 doubles from xmm0 to variable y
                                    ; moves precisely 128 bits
            vmovapd   xmm1, xmm2    ; moves 2 doubles from xmm2 to xmm1
                                    ; leaves the rest of xmm1 unchanged
            vmovapd   ymm1, ymm2    ; moves 4 doubles from ymm2 to ymm1
            vmovapd   ymm2, [x]     ; moves 4 doubles from variable x to ymm2
            vmovapd   [y], ymm0     ; moves 4 doubles from ymm0 to variable y

### flags: none