#include #include // Calculate length of a 4D float vector using SSE1 float vec4_length_sse(const float v[4]) { __m128 x = _mm_loadu_ps(v); // load vector __m128 sq = _mm_mul_ps(x, x); // square each element __m128 shuf = _mm_shuffle_ps(sq, sq, _MM_SHUFFLE(2, 3, 0, 1)); // swap pairs __m128 sums = _mm_add_ps(sq, shuf); // add pairwise shuf = _mm_movehl_ps(shuf, sums); // high half -> low sums = _mm_add_ss(sums, shuf); // add final two return _mm_cvtss_f32(_mm_sqrt_ss(sums)); // sqrt of sum of squares } int main() { float v[4] = { 3, 4, 0, 0 }; printf("Length of a triangle with sides 3 and 4 is %f.\n", vec4_length_sse(v)); }