MOVSHDUP
Usage: MOVSHDUP dest,src Modifies flags: None
Move two single-precision floating-point values from the higher 32-bit operand of each qword in 'src' to 'dest' and duplicate each 32-bit operand to the lower 32-bits of each qword.
Move Packed Single-FP High and Duplicate
MOVSHDUP xmm1 ,xmm2/mem128 ; F3 0F 16 /r [Pent4]
The linear address corresponds to the address of the least-significant byte of the referenced memory data. When a memory address is indicated, the 16 bytes of data at memory location mem128 are loaded and the single-precision elements in positions 1 and 3 are duplicated. When the register-register form of this operation is used, the same operation is performed but with data coming from the 128-bit source register.
If source = mem128 load instruction:
xmm1[31-0] = mem128[63-32];
xmm1[63-32] = mem128[63-32]
xmm1[95-64] = mem128[127-96];
xmm1[127-96] = mem128[127-96]
Or
Move instruction:
xmm1[31-0] = xmm2[63-32];
xmm1[63-32] = xmm2[63-32];
xmm1[95-64] = xmm2[127-96];
xmm1[127-96] = xmm2[127-96]
EXAMPLE:
movshdup xmm2 Label