Если вы хотите, чтобы ваш код работал на процессорах до SSE3 (которые не поддерживают _mm_hadd_ps), вы можете использовать следующий код. Он использует больше инструкций, но декодирует до меньшего количества микроопераций на большинстве процессоров.
__m128 temp = _mm_add_ps(_mm_movehl_ps(foo128, foo128), foo128);
float x;
_mm_store_ss(&x, _mm_add_ss(temp, _mm_shuffle_ps(temp, 1)));