|
From: <axl...@us...> - 2009-01-04 17:50:50
|
Revision: 144
http://hgengine.svn.sourceforge.net/hgengine/?rev=144&view=rev
Author: axlecrusher
Date: 2009-01-04 17:50:45 +0000 (Sun, 04 Jan 2009)
Log Message:
-----------
continuing improvements on the SSE functions
Modified Paths:
--------------
Mercury2/src/MercuryMath.cpp
Mercury2/src/MercuryMath.h
Mercury2/src/MercuryMatrix.cpp
Modified: Mercury2/src/MercuryMath.cpp
===================================================================
--- Mercury2/src/MercuryMath.cpp 2009-01-04 16:37:53 UTC (rev 143)
+++ Mercury2/src/MercuryMath.cpp 2009-01-04 17:50:45 UTC (rev 144)
@@ -85,7 +85,7 @@
((float*)dest)[15] = ((float*)source)[15];
}
-void R_ConcatTransforms4 ( const FloatRow* in1a, const FloatRow* in2a, FloatRow* outa)
+void MatrixMultiply4f ( const FloatRow* in1a, const FloatRow* in2a, FloatRow* outa)
{
float *in1, *in2, *out;
@@ -149,54 +149,24 @@
return _mm_add_ps( x, _mm_shuffle_ps(x, x, _MM_SHUFFLE(1,1,1,1)) );
}
-void Mul4f(const float* first, const float* second, float* out)
+void Mul4f(const FloatRow* first, const FloatRow* second, FloatRow* out)
{
- __m128 xmm[2];
-
- xmm[0] = _mm_load_ps(first);
- xmm[1] = _mm_load_ps(second);
-
- xmm[0] = _mm_mul_ps( xmm[0], xmm[1] );
-
- _mm_store_ps(out, xmm[0]);
+ *out = _mm_mul_ps( *first, *second );
}
-void Div4f(const float* first, const float* second, float* out)
+void Div4f(const FloatRow* first, const FloatRow* second, FloatRow* out)
{
- __m128 xmm[2];
-
- xmm[0] = _mm_load_ps(first);
- xmm[1] = _mm_load_ps(second);
-
- xmm[0] = _mm_div_ps( xmm[0], xmm[1] );
-
- _mm_store_ps(out, xmm[0]);
+ *out = _mm_div_ps( *first, *second );
}
-void Add4f(const float* first, const float* second, float* out)
+void Add4f(const FloatRow* first, const FloatRow* second, FloatRow* out)
{
- __m128 xmm[2];
-
- xmm[0] = _mm_load_ps(first);
- xmm[1] = _mm_load_ps(second);
-
- xmm[0] = _mm_add_ps( xmm[0], xmm[1] );
-
- _mm_store_ps(out, xmm[0]);
-
+ *out = _mm_add_ps( *first, *second );
}
-void Sub4f(const float* first, const float* second, float* out)
+void Sub4f(const FloatRow* first, const FloatRow* second, FloatRow* out)
{
- __m128 xmm[2];
-
- xmm[0] = _mm_load_ps(first);
- xmm[1] = _mm_load_ps(second);
-
- xmm[0] = _mm_sub_ps( xmm[0], xmm[1] );
-
- _mm_store_ps(out, xmm[0]);
-
+ *out = _mm_sub_ps( *first, *second );
}
void Copy4f( void * dest, const void * source )
@@ -235,7 +205,7 @@
_mm_store_ps((float*)&(((float*)dest)[12]), xmm[3]);
}
-void R_ConcatTransforms4 ( const FloatRow* in1, const FloatRow* in2, FloatRow* out)
+void MatrixMultiply4f( const FloatRow* in1, const FloatRow* in2, FloatRow* out)
{
unsigned int y;
__m128 xmm[4];
Modified: Mercury2/src/MercuryMath.h
===================================================================
--- Mercury2/src/MercuryMath.h 2009-01-04 16:37:53 UTC (rev 143)
+++ Mercury2/src/MercuryMath.h 2009-01-04 17:50:45 UTC (rev 144)
@@ -44,15 +44,14 @@
#define DotProduct(x,y) ((x)[0]*(y)[0]+(x)[1]*(y)[1]+(x)[2]*(y)[2])
-void Mul4f(const float* first, const float* second, float* out);
-void Div4f(const float* first, const float* second, float* out);
-void Add4f(const float* first, const float* second, float* out);
-void Sub4f(const float* first, const float* second, float* out);
+void Mul4f(const FloatRow* first, const FloatRow* second, FloatRow* out);
+void Div4f(const FloatRow* first, const FloatRow* second, FloatRow* out);
+void Add4f(const FloatRow* first, const FloatRow* second, FloatRow* out);
+void Sub4f(const FloatRow* first, const FloatRow* second, FloatRow* out);
void Copy4f( void * dest, const void * source );
void Copy8f( void * dest, const void * source );
void Copy16f( void * dest, const void * source );
-//void R_ConcatTransforms4 ( const float* in1, const float* in2, float* out );
-void R_ConcatTransforms4 ( const FloatRow* in1, const FloatRow* in2, FloatRow* out );
+void MatrixMultiply4f ( const FloatRow* in1, const FloatRow* in2, FloatRow* out );
void VectorMultiply4f(const float *m, float *p, float *out );
#endif
Modified: Mercury2/src/MercuryMatrix.cpp
===================================================================
--- Mercury2/src/MercuryMatrix.cpp 2009-01-04 16:37:53 UTC (rev 143)
+++ Mercury2/src/MercuryMatrix.cpp 2009-01-04 17:50:45 UTC (rev 144)
@@ -194,16 +194,14 @@
MercuryMatrix MercuryMatrix::operator*(const MercuryMatrix& m) const
{
MercuryMatrix r(*this);
-// R_ConcatTransforms4 ( (float*)&m_matrix, (float*)&m.m_matrix, (float*)&r.m_matrix);
- R_ConcatTransforms4 ( m_matrix, m.m_matrix, r.m_matrix);
+ MatrixMultiply4f ( m_matrix, m.m_matrix, r.m_matrix);
return r;
}
MercuryMatrix& MercuryMatrix::operator*=(const MercuryMatrix& m)
{
MercuryMatrix r(*this);
-// R_ConcatTransforms4 ( (float*)&r.m_matrix, (float*)&m.m_matrix, (float*)&m_matrix);
- R_ConcatTransforms4 ( r.m_matrix, m.m_matrix, m_matrix);
+ MatrixMultiply4f ( r.m_matrix, m.m_matrix, m_matrix);
return *this;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|