| 1841 | } |
| 1842 | |
| 1843 | inline vec_float VecProject3D(const vec_float& v1, const vec_float& v2) |
| 1844 | { |
| 1845 | #if defined(TERATHON_SSE) |
| 1846 | |
| 1847 | vec_float d = VecDot3D(v1, v2); |
| 1848 | return (_mm_mul_ps(v2, VecSmearX(d))); |
| 1849 | |
| 1850 | #elif defined(TERATHON_NEON) |
| 1851 | |
| 1852 | vec_float d = VecDot3D(v1, v2); |
| 1853 | return (vmulq_f32(v2, vdupq_n_f32(vgetq_lane_f32(d, 0)))); |
| 1854 | |
| 1855 | #endif |
| 1856 | } |
| 1857 | |
| 1858 | inline vec_float VecReject3D(const vec_float& v1, const vec_float& v2) |
| 1859 | { |