summaryrefslogtreecommitdiff
path: root/indra/llmath/llvector4a.inl
diff options
context:
space:
mode:
authorOz Linden <oz@lindenlab.com>2013-09-18 14:37:10 -0700
committerOz Linden <oz@lindenlab.com>2013-09-18 14:37:10 -0700
commit25e7f5ded1d6cd5f7e136c6023136dfc35b0e118 (patch)
tree882948c18019e6c94ae2983fdf86d4a5d8303f98 /indra/llmath/llvector4a.inl
parentbe84aefc40719dacb9ab2c0ace9a2a706d768ffc (diff)
parentad777b46d0fe5d790e43efb1771e9f64f3ad3dfb (diff)
merge changes for 3.6.6-release
Diffstat (limited to 'indra/llmath/llvector4a.inl')
-rwxr-xr-xindra/llmath/llvector4a.inl20
1 files changed, 20 insertions, 0 deletions
diff --git a/indra/llmath/llvector4a.inl b/indra/llmath/llvector4a.inl
index 7c52ffef21..558fe09323 100755
--- a/indra/llmath/llvector4a.inl
+++ b/indra/llmath/llvector4a.inl
@@ -409,6 +409,26 @@ inline void LLVector4a::normalize3fast()
mQ = _mm_mul_ps( mQ, approxRsqrt );
}
+inline void LLVector4a::normalize3fast_checked(LLVector4a* d)
+{
+ if (!isFinite3())
+ {
+ *this = d ? *d : LLVector4a(0,1,0,1);
+ return;
+ }
+
+ LLVector4a lenSqrd; lenSqrd.setAllDot3( *this, *this );
+
+ if (lenSqrd.getF32ptr()[0] <= FLT_EPSILON)
+ {
+ *this = d ? *d : LLVector4a(0,1,0,1);
+ return;
+ }
+
+ const LLQuad approxRsqrt = _mm_rsqrt_ps(lenSqrd.mQ);
+ mQ = _mm_mul_ps( mQ, approxRsqrt );
+}
+
// Return true if this vector is normalized with respect to x,y,z up to tolerance
inline LLBool32 LLVector4a::isNormalized3( F32 tolerance ) const
{