MCPcopy Create free account
hub / github.com/EricLengyel/Terathon-Math-Library / VecCross3D

Function VecCross3D

TSSimd.h:1873–1896  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1871 }
1872
1873 inline vec_float VecCross3D(const vec_float& v1, const vec_float& v2)
1874 {
1875 #if defined(TERATHON_SSE)
1876
1877 vec_float c = _mm_mul_ps(v1, _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1)));
1878 c = _mm_sub_ps(c, _mm_mul_ps(_mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1)), v2));
1879 return (_mm_shuffle_ps(c, c, _MM_SHUFFLE(3, 0, 2, 1)));
1880
1881 #elif defined(TERATHON_NEON)
1882
1883 static const uint32 mask[4] = {0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF};
1884
1885 vec_uint32 m = vld1q_u32(mask);
1886
1887 float32x4x2_t u1 = vuzpq_f32(v1, v1);
1888 float32x4x2_t u2 = vuzpq_f32(v2, v2);
1889 vec_float w1 = vbslq_f32(m, u1.val[0], u1.val[1]);
1890 vec_float w2 = vbslq_f32(m, u2.val[0], u2.val[1]);
1891 vec_float r = vfmsq_f32(vmulq_f32(v1, w2), w1, v2);
1892 float32x4x2_t s = vuzpq_f32(r, r);
1893 return (vbslq_f32(m, s.val[0], s.val[1]));
1894
1895 #endif
1896 }
1897
1898 inline vec_float VecTransformVector3D(const vec_float& c1, const vec_float& c2, const vec_float& c3, const vec_float& v)
1899 {

Callers 3

TransformMethod · 0.85
InverseMethod · 0.85
InverseUnitDetMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected