| 1856 | } |
| 1857 | |
| 1858 | inline vec_float VecReject3D(const vec_float& v1, const vec_float& v2) |
| 1859 | { |
| 1860 | #if defined(TERATHON_SSE) |
| 1861 | |
| 1862 | vec_float d = VecDot3D(v1, v2); |
| 1863 | return (_mm_sub_ps(v1, _mm_mul_ps(v2, VecSmearX(d)))); |
| 1864 | |
| 1865 | #elif defined(TERATHON_NEON) |
| 1866 | |
| 1867 | vec_float d = VecDot3D(v1, v2); |
| 1868 | return (vsubq_f32(v1, vmulq_f32(v2, vdupq_n_f32(vgetq_lane_f32(d, 0))))); |
| 1869 | |
| 1870 | #endif |
| 1871 | } |
| 1872 | |
| 1873 | inline vec_float VecCross3D(const vec_float& v1, const vec_float& v2) |
| 1874 | { |