diff options
Diffstat (limited to 'indra/llmath')
| -rw-r--r-- | indra/llmath/CMakeLists.txt | 4 | ||||
| -rw-r--r-- | indra/llmath/llv4math.h | 141 | ||||
| -rw-r--r-- | indra/llmath/llv4matrix3.h | 220 | ||||
| -rw-r--r-- | indra/llmath/llv4matrix4.h | 249 | ||||
| -rw-r--r-- | indra/llmath/llv4vector3.h | 80 | 
5 files changed, 0 insertions, 694 deletions
diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt index cd100cdf9f..b5e59c1ca3 100644 --- a/indra/llmath/CMakeLists.txt +++ b/indra/llmath/CMakeLists.txt @@ -75,10 +75,6 @@ set(llmath_HEADER_FILES      llvector4a.h      llvector4a.inl      llvector4logical.h -    llv4math.h -    llv4matrix3.h -    llv4matrix4.h -    llv4vector3.h      llvolume.h      llvolumemgr.h      llvolumeoctree.h diff --git a/indra/llmath/llv4math.h b/indra/llmath/llv4math.h deleted file mode 100644 index 5f403ba526..0000000000 --- a/indra/llmath/llv4math.h +++ /dev/null @@ -1,141 +0,0 @@ -/**  - * @file llv4math.h - * @brief LLV4* class header file - vector processor enabled math - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#ifndef	LL_LLV4MATH_H -#define	LL_LLV4MATH_H - -// *NOTE: We do not support SSE acceleration on Windows builds. -// Our minimum specification for the viewer includes 1 GHz Athlon processors, -// which covers the Athlon Thunderbird series that does not support SSE. -// -// Our header files include statements like this -//   const F32 HAVOK_TIMESTEP = 1.f / 45.f; -// This creates "globals" that are included in each .obj file.  If a single -// .cpp file has SSE code generation turned on (eg, llviewerjointmesh_sse.cpp) -// these globals will be initialized using SSE instructions.  This causes SL -// to crash before main() on processors without SSE.  Untangling all these  -// headers/variables is too much work for the small performance gains of  -// vectorization. -// -// Therefore we only support vectorization on builds where the everything is  -// built with SSE or Altivec.  See https://jira.secondlife.com/browse/VWR-1610 -// and https://jira.lindenlab.com/browse/SL-47720 for details. -// -// Sorry the code is such a mess. JC - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4MATH - GNUC -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#if LL_GNUC && __GNUC__ >= 4 && __SSE__ - -#define			LL_VECTORIZE					1 - -#if LL_DARWIN - -#include <Accelerate/Accelerate.h> -#include <xmmintrin.h> -typedef vFloat	V4F32; - -#else - -#include <xmmintrin.h> -typedef float	V4F32							__attribute__((vector_size(16))); - -#endif - -#endif -#if LL_GNUC - -#define			LL_LLV4MATH_ALIGN_PREFIX -#define			LL_LLV4MATH_ALIGN_POSTFIX		__attribute__((aligned(16))) - -#endif - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4MATH - MSVC -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -// Only vectorize if the entire Windows build uses SSE. -// _M_IX86_FP is set when SSE code generation is turned on, and I have -// confirmed this in VS2003, VS2003 SP1, and VS2005. JC -#if LL_MSVC && _M_IX86_FP - -#define			LL_VECTORIZE					1 - -#include <xmmintrin.h> - -typedef __m128	V4F32; - -#endif -#if LL_MSVC - -#define			LL_LLV4MATH_ALIGN_PREFIX		__declspec(align(16)) -#define			LL_LLV4MATH_ALIGN_POSTFIX - -#endif - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4MATH - default - no vectorization -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#if !LL_VECTORIZE - -#define			LL_VECTORIZE					0 - -struct			V4F32							{ F32 __pad__[4]; }; - -inline F32 llv4lerp(F32 a, F32 b, F32 w)		{ return ( b - a ) * w + a; } - -#endif - -#ifndef			LL_LLV4MATH_ALIGN_PREFIX -#	define			LL_LLV4MATH_ALIGN_PREFIX -#endif -#ifndef			LL_LLV4MATH_ALIGN_POSTFIX -#	define			LL_LLV4MATH_ALIGN_POSTFIX -#endif - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4MATH -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - - -#define			LLV4_NUM_AXIS					4 - -class LLV4Vector3; -class LLV4Matrix3; -class LLV4Matrix4; - -#endif diff --git a/indra/llmath/llv4matrix3.h b/indra/llmath/llv4matrix3.h deleted file mode 100644 index 270f5d7dae..0000000000 --- a/indra/llmath/llv4matrix3.h +++ /dev/null @@ -1,220 +0,0 @@ -/**  - * @file llviewerjointmesh.cpp - * @brief LLV4* class header file - vector processor enabled math - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#ifndef LL_LLV4MATRIX3_H -#define LL_LLV4MATRIX3_H - -#include "llv4math.h" -#include "llv4vector3.h" -#include "m3math.h"			// for operator LLMatrix3() - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -LL_LLV4MATH_ALIGN_PREFIX - -class LLV4Matrix3 -{ -public: -	union { -		F32		mMatrix[LLV4_NUM_AXIS][LLV4_NUM_AXIS]; -		V4F32	mV[LLV4_NUM_AXIS]; -	}; - -	void				lerp(const LLV4Matrix3 &a, const LLV4Matrix3 &b, const F32 &w); -	void				multiply(const LLVector3 &a, LLVector3& out) const; -	void				multiply(const LLVector4 &a, LLV4Vector3& out) const; -	void				multiply(const LLVector3 &a, LLV4Vector3& out) const; - -	const LLV4Matrix3&	transpose(); -	const LLV4Matrix3&	operator=(const LLMatrix3& a); - -	operator			LLMatrix3()	const { return (reinterpret_cast<const LLMatrix4*>(const_cast<const F32*>(&mMatrix[0][0])))->getMat3(); } - -	friend LLVector3	operator*(const LLVector3& a, const LLV4Matrix3& b); -} - -LL_LLV4MATH_ALIGN_POSTFIX; - - - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix3 - SSE -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#if LL_VECTORIZE - -inline void LLV4Matrix3::lerp(const LLV4Matrix3 &a, const LLV4Matrix3 &b, const F32 &w) -{ -	__m128 vw = _mm_set1_ps(w); -	mV[VX] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VX], a.mV[VX]), vw), a.mV[VX]); // ( b - a ) * w + a -	mV[VY] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VY], a.mV[VY]), vw), a.mV[VY]); -	mV[VZ] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VZ], a.mV[VZ]), vw), a.mV[VZ]); -} - -inline void LLV4Matrix3::multiply(const LLVector3 &a, LLVector3& o) const -{ -	LLV4Vector3 j; -	j.v = 				 	_mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX]); // ( ax * vx ) + ... -	j.v = _mm_add_ps(j.v  , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); -	j.v = _mm_add_ps(j.v  , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); -	o.setVec(j.mV); -} - -inline void LLV4Matrix3::multiply(const LLVector4 &a, LLV4Vector3& o) const -{ -	o.v =					_mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX]); // ( ax * vx ) + ... -	o.v = _mm_add_ps(o.v  , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); -	o.v = _mm_add_ps(o.v  , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); -} - -inline void LLV4Matrix3::multiply(const LLVector3 &a, LLV4Vector3& o) const -{ -	o.v =					_mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX]); // ( ax * vx ) + ... -	o.v = _mm_add_ps(o.v  , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); -	o.v = _mm_add_ps(o.v  , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); -} - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#else - -inline void LLV4Matrix3::lerp(const LLV4Matrix3 &a, const LLV4Matrix3 &b, const F32 &w) -{ -	mMatrix[VX][VX] = llv4lerp(a.mMatrix[VX][VX], b.mMatrix[VX][VX], w); -	mMatrix[VX][VY] = llv4lerp(a.mMatrix[VX][VY], b.mMatrix[VX][VY], w); -	mMatrix[VX][VZ] = llv4lerp(a.mMatrix[VX][VZ], b.mMatrix[VX][VZ], w); - -	mMatrix[VY][VX] = llv4lerp(a.mMatrix[VY][VX], b.mMatrix[VY][VX], w); -	mMatrix[VY][VY] = llv4lerp(a.mMatrix[VY][VY], b.mMatrix[VY][VY], w); -	mMatrix[VY][VZ] = llv4lerp(a.mMatrix[VY][VZ], b.mMatrix[VY][VZ], w); - -	mMatrix[VZ][VX] = llv4lerp(a.mMatrix[VZ][VX], b.mMatrix[VZ][VX], w); -	mMatrix[VZ][VY] = llv4lerp(a.mMatrix[VZ][VY], b.mMatrix[VZ][VY], w); -	mMatrix[VZ][VZ] = llv4lerp(a.mMatrix[VZ][VZ], b.mMatrix[VZ][VZ], w); -} - -inline void LLV4Matrix3::multiply(const LLVector3 &a, LLVector3& o) const -{ -	o.setVec(		a.mV[VX] * mMatrix[VX][VX] +  -					a.mV[VY] * mMatrix[VY][VX] +  -					a.mV[VZ] * mMatrix[VZ][VX], -					  -					a.mV[VX] * mMatrix[VX][VY] +  -					a.mV[VY] * mMatrix[VY][VY] +  -					a.mV[VZ] * mMatrix[VZ][VY], -					  -					a.mV[VX] * mMatrix[VX][VZ] +  -					a.mV[VY] * mMatrix[VY][VZ] +  -					a.mV[VZ] * mMatrix[VZ][VZ]); -} - -inline void LLV4Matrix3::multiply(const LLVector4 &a, LLV4Vector3& o) const -{ -	o.setVec(		a.mV[VX] * mMatrix[VX][VX] +  -					a.mV[VY] * mMatrix[VY][VX] +  -					a.mV[VZ] * mMatrix[VZ][VX], -					  -					a.mV[VX] * mMatrix[VX][VY] +  -					a.mV[VY] * mMatrix[VY][VY] +  -					a.mV[VZ] * mMatrix[VZ][VY], -					  -					a.mV[VX] * mMatrix[VX][VZ] +  -					a.mV[VY] * mMatrix[VY][VZ] +  -					a.mV[VZ] * mMatrix[VZ][VZ]); -} - -inline void LLV4Matrix3::multiply(const LLVector3 &a, LLV4Vector3& o) const -{ -	o.setVec(		a.mV[VX] * mMatrix[VX][VX] +  -					a.mV[VY] * mMatrix[VY][VX] +  -					a.mV[VZ] * mMatrix[VZ][VX], -					  -					a.mV[VX] * mMatrix[VX][VY] +  -					a.mV[VY] * mMatrix[VY][VY] +  -					a.mV[VZ] * mMatrix[VZ][VY], -					  -					a.mV[VX] * mMatrix[VX][VZ] +  -					a.mV[VY] * mMatrix[VY][VZ] +  -					a.mV[VZ] * mMatrix[VZ][VZ]); -} - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#endif - -inline const LLV4Matrix3&	LLV4Matrix3::transpose() -{ -#if LL_VECTORIZE && defined(_MM_TRANSPOSE4_PS) -	_MM_TRANSPOSE4_PS(mV[VX], mV[VY], mV[VZ], mV[VW]); -	return *this; -#else -	F32 temp; -	temp = mMatrix[VX][VY]; mMatrix[VX][VY] = mMatrix[VY][VX]; mMatrix[VY][VX] = temp; -	temp = mMatrix[VX][VZ]; mMatrix[VX][VZ] = mMatrix[VZ][VX]; mMatrix[VZ][VX] = temp; -	temp = mMatrix[VY][VZ]; mMatrix[VY][VZ] = mMatrix[VZ][VY]; mMatrix[VZ][VY] = temp; -#endif -	return *this; -} - -inline const LLV4Matrix3& LLV4Matrix3::operator=(const LLMatrix3& a) -{ -	memcpy(mMatrix[VX], a.mMatrix[VX], sizeof(F32) * 3 ); -	memcpy(mMatrix[VY], a.mMatrix[VY], sizeof(F32) * 3 ); -	memcpy(mMatrix[VZ], a.mMatrix[VZ], sizeof(F32) * 3 ); -	return *this; -} - -inline LLVector3 operator*(const LLVector3& a, const LLV4Matrix3& b) -{ -	return LLVector3( -				a.mV[VX] * b.mMatrix[VX][VX] +  -				a.mV[VY] * b.mMatrix[VY][VX] +  -				a.mV[VZ] * b.mMatrix[VZ][VX], -	 -				a.mV[VX] * b.mMatrix[VX][VY] +  -				a.mV[VY] * b.mMatrix[VY][VY] +  -				a.mV[VZ] * b.mMatrix[VZ][VY], -	 -				a.mV[VX] * b.mMatrix[VX][VZ] +  -				a.mV[VY] * b.mMatrix[VY][VZ] +  -				a.mV[VZ] * b.mMatrix[VZ][VZ] ); -} - -#endif diff --git a/indra/llmath/llv4matrix4.h b/indra/llmath/llv4matrix4.h deleted file mode 100644 index 2eb49d9294..0000000000 --- a/indra/llmath/llv4matrix4.h +++ /dev/null @@ -1,249 +0,0 @@ -/**  - * @file llviewerjointmesh.cpp - * @brief LLV4* class header file - vector processor enabled math - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#ifndef LL_LLV4MATRIX4_H -#define LL_LLV4MATRIX4_H - -#include "llv4math.h" -#include "llv4matrix3.h"	// just for operator LLV4Matrix3() -#include "llv4vector3.h" - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix4 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -LL_LLV4MATH_ALIGN_PREFIX - -class LLV4Matrix4 -{ -public: -	union { -		F32		mMatrix[LLV4_NUM_AXIS][LLV4_NUM_AXIS]; -		V4F32	mV[LLV4_NUM_AXIS]; -	}; - -	void				lerp(const LLV4Matrix4 &a, const LLV4Matrix4 &b, const F32 &w); -	void				multiply(const LLVector3 &a, LLVector3& o) const; -	void				multiply(const LLVector3 &a, LLV4Vector3& o) const; - -	const LLV4Matrix4&	transpose(); -	const LLV4Matrix4&  translate(const LLVector3 &vec); -	const LLV4Matrix4&  translate(const LLV4Vector3 &vec); -	const LLV4Matrix4&	operator=(const LLMatrix4& a); - -	operator			LLMatrix4()	const { return *(reinterpret_cast<const LLMatrix4*>(const_cast<const F32*>(&mMatrix[0][0]))); } -	operator			LLV4Matrix3()	const { return *(reinterpret_cast<const LLV4Matrix3*>(const_cast<const F32*>(&mMatrix[0][0]))); } -	 -	friend LLVector3	operator*(const LLVector3 &a, const LLV4Matrix4 &b); -} - -LL_LLV4MATH_ALIGN_POSTFIX; - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix4 - SSE -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#if LL_VECTORIZE - -inline void LLV4Matrix4::lerp(const LLV4Matrix4 &a, const LLV4Matrix4 &b, const F32 &w) -{ -	__m128 vw = _mm_set1_ps(w); -	mV[VX] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VX], a.mV[VX]), vw), a.mV[VX]); // ( b - a ) * w + a -	mV[VY] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VY], a.mV[VY]), vw), a.mV[VY]); -	mV[VZ] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VZ], a.mV[VZ]), vw), a.mV[VZ]); -	mV[VW] = _mm_add_ps(_mm_mul_ps(_mm_sub_ps(b.mV[VW], a.mV[VW]), vw), a.mV[VW]); -} - -inline void LLV4Matrix4::multiply(const LLVector3 &a, LLVector3& o) const -{ -	LLV4Vector3 j; -	j.v = _mm_add_ps(mV[VW], _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX])); // ( ax * vx ) + vw -	j.v = _mm_add_ps(j.v   , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); -	j.v = _mm_add_ps(j.v   , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); -	o.setVec(j.mV); -} - -inline void LLV4Matrix4::multiply(const LLVector3 &a, LLV4Vector3& o) const -{ -	o.v = _mm_add_ps(mV[VW], _mm_mul_ps(_mm_set1_ps(a.mV[VX]), mV[VX])); // ( ax * vx ) + vw -	o.v = _mm_add_ps(o.v   , _mm_mul_ps(_mm_set1_ps(a.mV[VY]), mV[VY])); -	o.v = _mm_add_ps(o.v   , _mm_mul_ps(_mm_set1_ps(a.mV[VZ]), mV[VZ])); -} - -inline const LLV4Matrix4& LLV4Matrix4::translate(const LLV4Vector3 &vec) -{ -	mV[VW] = _mm_add_ps(mV[VW], vec.v); -	return (*this); -} - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix4 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#else - -inline void LLV4Matrix4::lerp(const LLV4Matrix4 &a, const LLV4Matrix4 &b, const F32 &w) -{ -	mMatrix[VX][VX] = llv4lerp(a.mMatrix[VX][VX], b.mMatrix[VX][VX], w); -	mMatrix[VX][VY] = llv4lerp(a.mMatrix[VX][VY], b.mMatrix[VX][VY], w); -	mMatrix[VX][VZ] = llv4lerp(a.mMatrix[VX][VZ], b.mMatrix[VX][VZ], w); - -	mMatrix[VY][VX] = llv4lerp(a.mMatrix[VY][VX], b.mMatrix[VY][VX], w); -	mMatrix[VY][VY] = llv4lerp(a.mMatrix[VY][VY], b.mMatrix[VY][VY], w); -	mMatrix[VY][VZ] = llv4lerp(a.mMatrix[VY][VZ], b.mMatrix[VY][VZ], w); - -	mMatrix[VZ][VX] = llv4lerp(a.mMatrix[VZ][VX], b.mMatrix[VZ][VX], w); -	mMatrix[VZ][VY] = llv4lerp(a.mMatrix[VZ][VY], b.mMatrix[VZ][VY], w); -	mMatrix[VZ][VZ] = llv4lerp(a.mMatrix[VZ][VZ], b.mMatrix[VZ][VZ], w); - -	mMatrix[VW][VX] = llv4lerp(a.mMatrix[VW][VX], b.mMatrix[VW][VX], w); -	mMatrix[VW][VY] = llv4lerp(a.mMatrix[VW][VY], b.mMatrix[VW][VY], w); -	mMatrix[VW][VZ] = llv4lerp(a.mMatrix[VW][VZ], b.mMatrix[VW][VZ], w); -} - -inline void LLV4Matrix4::multiply(const LLVector3 &a, LLVector3& o) const -{ -	o.setVec(		a.mV[VX] * mMatrix[VX][VX] +  -					a.mV[VY] * mMatrix[VY][VX] +  -					a.mV[VZ] * mMatrix[VZ][VX] + -					mMatrix[VW][VX], -					  -					a.mV[VX] * mMatrix[VX][VY] +  -					a.mV[VY] * mMatrix[VY][VY] +  -					a.mV[VZ] * mMatrix[VZ][VY] + -					mMatrix[VW][VY], -					  -					a.mV[VX] * mMatrix[VX][VZ] +  -					a.mV[VY] * mMatrix[VY][VZ] +  -					a.mV[VZ] * mMatrix[VZ][VZ] + -					mMatrix[VW][VZ]); -} - -inline void LLV4Matrix4::multiply(const LLVector3 &a, LLV4Vector3& o) const -{ -	o.setVec(		a.mV[VX] * mMatrix[VX][VX] +  -					a.mV[VY] * mMatrix[VY][VX] +  -					a.mV[VZ] * mMatrix[VZ][VX] + -					mMatrix[VW][VX], -					  -					a.mV[VX] * mMatrix[VX][VY] +  -					a.mV[VY] * mMatrix[VY][VY] +  -					a.mV[VZ] * mMatrix[VZ][VY] + -					mMatrix[VW][VY], -					  -					a.mV[VX] * mMatrix[VX][VZ] +  -					a.mV[VY] * mMatrix[VY][VZ] +  -					a.mV[VZ] * mMatrix[VZ][VZ] + -					mMatrix[VW][VZ]); -} - -inline const LLV4Matrix4& LLV4Matrix4::translate(const LLV4Vector3 &vec) -{ -	mMatrix[3][0] += vec.mV[0]; -	mMatrix[3][1] += vec.mV[1]; -	mMatrix[3][2] += vec.mV[2]; -	return (*this); -} - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Matrix4 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -#endif - -inline const LLV4Matrix4& LLV4Matrix4::operator=(const LLMatrix4& a) -{ -	memcpy(mMatrix, a.mMatrix, sizeof(F32) * 16 ); -	return *this; -} - -inline const LLV4Matrix4& LLV4Matrix4::transpose() -{ -#if LL_VECTORIZE && defined(_MM_TRANSPOSE4_PS) -	_MM_TRANSPOSE4_PS(mV[VX], mV[VY], mV[VZ], mV[VW]); -#else -	LLV4Matrix4 mat; -	mat.mMatrix[0][0] = mMatrix[0][0]; -	mat.mMatrix[1][0] = mMatrix[0][1]; -	mat.mMatrix[2][0] = mMatrix[0][2]; -	mat.mMatrix[3][0] = mMatrix[0][3]; - -	mat.mMatrix[0][1] = mMatrix[1][0]; -	mat.mMatrix[1][1] = mMatrix[1][1]; -	mat.mMatrix[2][1] = mMatrix[1][2]; -	mat.mMatrix[3][1] = mMatrix[1][3]; - -	mat.mMatrix[0][2] = mMatrix[2][0]; -	mat.mMatrix[1][2] = mMatrix[2][1]; -	mat.mMatrix[2][2] = mMatrix[2][2]; -	mat.mMatrix[3][2] = mMatrix[2][3]; - -	mat.mMatrix[0][3] = mMatrix[3][0]; -	mat.mMatrix[1][3] = mMatrix[3][1]; -	mat.mMatrix[2][3] = mMatrix[3][2]; -	mat.mMatrix[3][3] = mMatrix[3][3]; - -	*this = mat; -#endif -	return *this; -} - -inline const LLV4Matrix4& LLV4Matrix4::translate(const LLVector3 &vec) -{ -	mMatrix[3][0] += vec.mV[0]; -	mMatrix[3][1] += vec.mV[1]; -	mMatrix[3][2] += vec.mV[2]; -	return (*this); -} - -inline LLVector3 operator*(const LLVector3 &a, const LLV4Matrix4 &b) -{ -	return LLVector3(a.mV[VX] * b.mMatrix[VX][VX] +  -					 a.mV[VY] * b.mMatrix[VY][VX] +  -					 a.mV[VZ] * b.mMatrix[VZ][VX] + -					 b.mMatrix[VW][VX], -					  -					 a.mV[VX] * b.mMatrix[VX][VY] +  -					 a.mV[VY] * b.mMatrix[VY][VY] +  -					 a.mV[VZ] * b.mMatrix[VZ][VY] + -					 b.mMatrix[VW][VY], -					  -					 a.mV[VX] * b.mMatrix[VX][VZ] +  -					 a.mV[VY] * b.mMatrix[VY][VZ] +  -					 a.mV[VZ] * b.mMatrix[VZ][VZ] + -					 b.mMatrix[VW][VZ]); -} - - -#endif diff --git a/indra/llmath/llv4vector3.h b/indra/llmath/llv4vector3.h deleted file mode 100644 index a340d53f5a..0000000000 --- a/indra/llmath/llv4vector3.h +++ /dev/null @@ -1,80 +0,0 @@ -/**  - * @file llviewerjointmesh.cpp - * @brief LLV4* class header file - vector processor enabled math - * - * $LicenseInfo:firstyear=2007&license=viewerlgpl$ - * Second Life Viewer Source Code - * Copyright (C) 2010, Linden Research, Inc. - *  - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; - * version 2.1 of the License only. - *  - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU - * Lesser General Public License for more details. - *  - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA - *  - * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA - * $/LicenseInfo$ - */ - -#ifndef LL_LLV4VECTOR3_H -#define LL_LLV4VECTOR3_H - -#include "llv4math.h" - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Vector3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -LL_LLV4MATH_ALIGN_PREFIX - -class LLV4Vector3 -{ -public: -	union { -		F32		mV[LLV4_NUM_AXIS]; -		V4F32	v; -	}; - -	enum { -		ALIGNMENT = 16 -		}; - -	void				setVec(F32 x, F32 y, F32 z); -	void				setVec(F32 a); -} - -LL_LLV4MATH_ALIGN_POSTFIX; - -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- -// LLV4Vector3 -//----------------------------------------------------------------------------- -//----------------------------------------------------------------------------- - -inline void	LLV4Vector3::setVec(F32 x, F32 y, F32 z) -{ -	mV[VX] = x; -	mV[VY] = y; -	mV[VZ] = z; -} - -inline void	LLV4Vector3::setVec(F32 a) -{ -#if LL_VECTORIZE -	v = _mm_set1_ps(a); -#else -	setVec(a, a, a); -#endif -} - -#endif  | 
