Opcode/Instruction | Op/En | 64/32-bit Mode | CPUID Feature Flag | Description |
F2 0F 10 /r MOVSD xmm1, xmm2/m64 | RM | V/V | SSE2 | Move scalar double-precision floating-point value from xmm2/m64 to xmm1 register. |
VEX.NDS.LIG.F2.0F.WIG 10 /r VMOVSD xmm1, xmm2, xmm3 | RVM | V/V | AVX | Merge scalar double-precision floating-point value from xmm2 and xmm3 to xmm1 register. |
VEX.LIG.F2.0F.WIG 10 /r VMOVSD xmm1, m64 | XM | V/V | AVX | Load scalar double-precision floating-point value from m64 to xmm1 register. |
F2 0F 11 /r MOVSD xmm2/m64, xmm1 | MR | V/V | SSE2 | Move scalar double-precision floating-point value from xmm1 register to xmm2/m64. |
VEX.NDS.LIG.F2.0F.WIG 11 /r VMOVSD xmm1, xmm2, xmm3 | MVR | V/V | AVX | Merge scalar double-precision floating-point value from xmm2 and xmm3 registers to xmm1. |
VEX.LIG.F2.0F.WIG 11 /r VMOVSD m64, xmm1 | MR | V/V | AVX | Move scalar double-precision floating-point value from xmm1 register to m64. |
Op/En | Operand 1 | Operand 2 | Operand 3 | Operand 4 |
RM | ModRM:reg (w) | ModRM:r/m (r) | NA | NA |
RVM | ModRM:reg (w) | VEX.vvvv (r) | ModRM:r/m (r) | NA |
MR | ModRM:r/m (w) | ModRM:reg (r) | NA | NA |
XM | ModRM:reg (w) | ModRM:r/m (r) | NA | NA |
MVR | ModRM:r/m (w) | VEX.vvvv (r) | ModRM:reg (r) | NA |
MOVSD moves a scalar double-precision floating-point value from the source operand (second operand) to the destination operand (first operand). The source and destination operands can be XMM registers or 64-bit memory locations. This instruction can be used to move a double-precision floating-point value to and from the low quadword of an XMM register and a 64-bit memory location, or to move a double-precision floating-point value between the low quadwords of two XMM registers. The instruction cannot be used to transfer data between memory locations. For non-VEX encoded instruction syntax and when the source and destination operands are XMM registers, the high quadword of the destination operand remains unchanged. When the source operand is a memory location and destination operand is an XMM registers, the high quadword of the destination operand is cleared to all 0s.
In 64-bit mode, use of the REX.R prefix permits this instruction to access additional registers (XMM8-XMM15). Note: For the “VMOVSD m64, xmm1” (memory store form) instruction version, VEX.vvvv is reserved and must be 1111b, otherwise instruction will #UD. Note: For the “VMOVSD xmm1, m64” (memory load form) instruction version, VEX.vvvv is reserved and must be 1111b otherwise instruction will #UD. VEX encoded instruction syntax supports two source operands and a destination operand if ModR/M.mod field is 11B. VEX.vvvv is used to encode the first source operand (the second operand). The low 128 bits of the destination operand stores the result of merging the low quadword of the second source operand with the quad word in bits 127:64 of the first source operand. The upper bits of the destination operand are cleared.
MOVSD (128-bit Legacy SSE version: MOVSD XMM1, XMM2) DEST[63:0] ← SRC[63:0] DEST[VLMAX-1:64] (Unmodified) MOVSD/VMOVSD (128-bit versions: MOVSD m64, xmm1 or VMOVSD m64, xmm1) DEST[63:0] ← SRC[63:0] MOVSD (128-bit Legacy SSE version: MOVSD XMM1, m64) DEST[63:0] ← SRC[63:0] DEST[127:64] ← 0 DEST[VLMAX-1:128] (Unmodified) VMOVSD (VEX.NDS.128.F2.0F 11 /r: VMOVSD xmm1, xmm2, xmm3) DEST[63:0] ← SRC2[63:0] DEST[127:64] ← SRC1[127:64] DEST[VLMAX-1:128] ← 0 VMOVSD (VEX.NDS.128.F2.0F 10 /r: VMOVSD xmm1, xmm2, xmm3) DEST[63:0] ← SRC2[63:0] DEST[127:64] ← SRC1[127:64] DEST[VLMAX-1:128] ← 0 VMOVSD (VEX.NDS.128.F2.0F 10 /r: VMOVSD xmm1, m64) DEST[63:0] ← SRC[63:0] DEST[VLMAX-1:64] ← 0
MOVSD: | __m128d _mm_load_sd (double *p) |
MOVSD: | void _mm_store_sd (double *p, __m128d a) |
MOVSD: | __m128d _mm_store_sd (__m128d a, __m128d b) |
None.
See Exceptions Type 5; additionally
#UD | If VEX.vvvv != 1111B. |