There is only one intrinsic that "extracts" the lower order double value from xmm register:
double _mm_cvtsd_f64 (__m128d a)
You could use it this way:
return _mm_cvtsd_f64(x);
There is some contradiction between different references. MSDN says: This intrinsic does not map to any specific machine instruction
. While Intel intrinsic guide mentions movsd
instruction. In latter case this additional instruction is easily eliminated by optimizer. At least gcc 4.8.1 with -O2
flag generates code with no additional instruction.