Browse Source

Fixed comflict

Christophe Riccio 13 years ago
parent
commit
4797b4922a
5 changed files with 45 additions and 24 deletions
  1. 1 1
      doc/index.html
  2. 1 1
      doc/src/data.xml
  3. 10 6
      glm/core/intrinsic_geometric.inl
  4. 26 16
      glm/core/setup.hpp
  5. 7 0
      readme.txt

+ 1 - 1
doc/index.html

@@ -37,7 +37,7 @@
 		</p><br /><div><h3>10/05/2012 - GLM 0.9.3.3 released</h3><div><p>
         Nearly two months since the previous release of a GLM revision gave enough time to fix few things reported.
         Most importantly, this revision should provide a better compatibility with Intel C++ compiler. 
-      </p><div xmlns="http://www.w3.org/1999/xhtml"><span class="list">Changelog:</span><ul><li>Fixed isinf and isnan</li><li>Improved compatibility with Intel compiler</li><li>Added CMake test build options: SIMD, C++11, fast math and MS land ext</li><li>Fixed SIMD mat4 test on GCC</li><li>Fixed perspectiveFov implementation</li><li>Fixed matrixCompMult for none-square matrices</li><li>Fixed namespace issue on stream operators</li><li>Fixed various warnings</li><li>Added VC11 support</li></ul></div><p><a href="https://github.com/Groovounet/glm/issues">If you encounter bugs, don't hesitate to report them.</a></p>Download: <a href="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.3/glm-0.9.3.3.zip/download">GLM 0.9.3.3 (zip)</a><br />Download: <a href="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.3/glm-0.9.3.3.7z/download">GLM 0.9.3.3 (7z)</a><br />Link: <a href="https://sourceforge.net/apps/trac/ogl-math/newticket">Submit a bug report</a><br />Link: <a href="http://glm.g-truc.net/glm-0.9.3.pdf">GLM 0.9.3 Manual</a><br />Link: <a href="http://glm.g-truc.net/api-0.9.3/index.html">GLM 0.9.3 API</a><br /></div><br /></div><div><h3>15/03/2012 - GLM 0.9.3.2 released</h3><div><p>
+      </p><div xmlns="http://www.w3.org/1999/xhtml"><span class="list">Changelog:</span><ul><li>Fixed isinf and isnan</li><li>Improved compatibility with Intel compiler</li><li>Added CMake test build options: SIMD, C++11, fast math and MS land ext</li><li>Fixed SIMD mat4 test on GCC</li><li>Fixed perspectiveFov implementation</li><li>Fixed matrixCompMult for none-square matrices</li><li>Fixed namespace issue on stream operators</li><li>Fixed various warnings</li><li>Added VC11 support</li></ul></div><p><a href="https://github.com/Groovounet/glm/issues">If you encounter bugs, don't hesitate to report them.</a></p>Download: <a href="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.3/glm-0.9.3.3.zip/download">GLM 0.9.3.3 (zip)</a><br />Download: <a href="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.3/glm-0.9.3.3.7z/download">GLM 0.9.3.3 (7z)</a><br />Link: <a href="https://github.com/Groovounet/glm/issues">Submit a bug report</a><br />Link: <a href="http://glm.g-truc.net/glm-0.9.3.pdf">GLM 0.9.3 Manual</a><br />Link: <a href="http://glm.g-truc.net/api-0.9.3/index.html">GLM 0.9.3 API</a><br /></div><br /></div><div><h3>15/03/2012 - GLM 0.9.3.2 released</h3><div><p>
         Just a regular revision fixing the only three minor issues reported since last release.
       </p>Download: <a href="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.2/glm-0.9.3.2.zip/download">GLM 0.9.3.2 (zip)</a><br />Download: <a href="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.2/glm-0.9.3.2.7z/download">GLM 0.9.3.2 (7z)</a><br />Link: <a href="https://sourceforge.net/apps/trac/ogl-math/newticket">Submit a bug report</a><br />Link: <a href="http://glm.g-truc.net/glm-0.9.3.pdf">GLM 0.9.3 Manual</a><br />Link: <a href="http://glm.g-truc.net/api-0.9.3/index.html">GLM 0.9.3 API</a><br /></div><br /></div><div><h3>10/03/2012 - GLM on GitHub</h3><div><p>
         After years of using <a href="http://sourceforge.net/projects/ogl-math/?source=directory">SourceForge.net</a>, GLM is moving to <a href="https://github.com/Groovounet/glm">GitHub</a>,

+ 1 - 1
doc/src/data.xml

@@ -200,7 +200,7 @@
 
       <source type="Download" href="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.3/glm-0.9.3.3.zip/download">GLM 0.9.3.3 (zip)</source>
       <source type="Download" href="https://sourceforge.net/projects/ogl-math/files/glm-0.9.3.3/glm-0.9.3.3.7z/download">GLM 0.9.3.3 (7z)</source>
-      <source type="Link" href="https://sourceforge.net/apps/trac/ogl-math/newticket">Submit a bug report</source>
+      <source type="Link" href="https://github.com/Groovounet/glm/issues">Submit a bug report</source>
       <source type="Link" href="http://glm.g-truc.net/glm-0.9.3.pdf">GLM 0.9.3 Manual</source>
       <source type="Link" href="http://glm.g-truc.net/api-0.9.3/index.html">GLM 0.9.3 API</source>
     </news>

+ 10 - 6
glm/core/intrinsic_geometric.inl

@@ -48,12 +48,16 @@ GLM_FUNC_QUALIFIER __m128 sse_dst_ps(__m128 p0, __m128 p1)
 //dot
 GLM_FUNC_QUALIFIER __m128 sse_dot_ps(__m128 v1, __m128 v2)
 {
-	__m128 mul0 = _mm_mul_ps(v1, v2);
-	__m128 swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1));
-	__m128 add0 = _mm_add_ps(mul0, swp0);
-	__m128 swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3));
-	__m128 add1 = _mm_add_ps(add0, swp1);
-	return add1;
+#   if((GLM_ARCH & GLM_ARCH_SSE4) == GLM_ARCH_SSE4)
+        return _mm_dp_ps(v1, v2, 0xff);
+#   else
+        __m128 mul0 = _mm_mul_ps(v1, v2);
+        __m128 swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1));
+        __m128 add0 = _mm_add_ps(mul0, swp0);
+        __m128 swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3));
+        __m128 add1 = _mm_add_ps(add0, swp1);
+        return add1;
+#   endif
 }
 
 // SSE1

+ 26 - 16
glm/core/setup.hpp

@@ -469,15 +469,21 @@
 
 // User defines: GLM_FORCE_PURE GLM_FORCE_SSE2 GLM_FORCE_AVX
 
-#define GLM_ARCH_PURE		0x0000 //(0x0000)
-#define GLM_ARCH_SSE2		0x0001 //(0x0001)
-#define GLM_ARCH_SSE3		0x0003 //(0x0002 | GLM_ARCH_SSE2)
-#define GLM_ARCH_AVX		0x0007 //(0x0004 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2)
+#define GLM_ARCH_PURE		0x0000
+#define GLM_ARCH_SSE2		0x0001
+#define GLM_ARCH_SSE3		0x0002 | GLM_ARCH_SSE2
+#define GLM_ARCH_SSE4		0x0004 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
+#define GLM_ARCH_AVX		0x0008 | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
+#define GLM_ARCH_AVX2		0x0010 | GLM_ARCH_AVX | GLM_ARCH_SSE4 | GLM_ARCH_SSE3 | GLM_ARCH_SSE2
 
 #if(defined(GLM_FORCE_PURE))
 #	define GLM_ARCH GLM_ARCH_PURE
+#elif(defined(GLM_FORCE_AVX2))
+#	define GLM_ARCH GLM_ARCH_AVX2
 #elif(defined(GLM_FORCE_AVX))
 #	define GLM_ARCH GLM_ARCH_AVX
+#elif(defined(GLM_FORCE_SSE4))
+#	define GLM_ARCH GLM_ARCH_SSE4
 #elif(defined(GLM_FORCE_SSE3))
 #	define GLM_ARCH GLM_ARCH_SSE3
 #elif(defined(GLM_FORCE_SSE2))
@@ -498,19 +504,13 @@
 #	else
 #		define GLM_ARCH GLM_ARCH_PURE
 #	endif
-#elif(GLM_COMPILER & GLM_COMPILER_LLVM_GCC)
-#	if(defined(__AVX__))
-#		define GLM_ARCH GLM_ARCH_AVX
-#	elif(defined(__SSE3__))
-#		define GLM_ARCH GLM_ARCH_SSE3
-#	elif(defined(__SSE2__))
-#		define GLM_ARCH GLM_ARCH_SSE2
-#	else
-#		define GLM_ARCH GLM_ARCH_PURE
-#	endif
-#elif((GLM_COMPILER & GLM_COMPILER_GCC) && (defined(__i386__) || defined(__x86_64__)))
-#	if(defined(__AVX__))
+#elif(((GLM_COMPILER & GLM_COMPILER_GCC) && (defined(__i386__) || defined(__x86_64__))) || (GLM_COMPILER & GLM_COMPILER_LLVM_GCC))
+#	if(defined(__AVX2__))
+#		define GLM_ARCH GLM_ARCH_AVX2
+#	elif(defined(__AVX__))
 #		define GLM_ARCH GLM_ARCH_AVX
+#	elif(defined(__SSE4__))
+#		define GLM_ARCH GLM_ARCH_SSE4
 #	elif(defined(__SSE3__))
 #		define GLM_ARCH GLM_ARCH_SSE3
 #	elif(defined(__SSE2__))
@@ -523,9 +523,15 @@
 #endif
 
 #if(GLM_ARCH != GLM_ARCH_PURE)
+#if((GLM_ARCH & GLM_ARCH_AVX2) == GLM_ARCH_AVX2)
+#	include <immintrin.h>
+#endif//GLM_ARCH
 #if((GLM_ARCH & GLM_ARCH_AVX) == GLM_ARCH_AVX)
 #	include <immintrin.h>
 #endif//GLM_ARCH
+#if((GLM_ARCH & GLM_ARCH_SSE4) == GLM_ARCH_SSE4)
+#	include <smmintrin.h>
+#endif//GLM_ARCH
 #if((GLM_ARCH & GLM_ARCH_SSE3) == GLM_ARCH_SSE3)
 #	include <pmmintrin.h>
 #endif//GLM_ARCH
@@ -542,8 +548,12 @@
 #		pragma message("GLM: SSE2 instruction set")
 #	elif(GLM_ARCH == GLM_ARCH_SSE3)
 #		pragma message("GLM: SSE3 instruction set")
+#	elif(GLM_ARCH == GLM_ARCH_SSE4)
+#		pragma message("GLM: SSE4 instruction set")
 #	elif(GLM_ARCH == GLM_ARCH_AVX)
 #		pragma message("GLM: AVX instruction set")
+#	elif(GLM_ARCH == GLM_ARCH_AVX2)
+#		pragma message("GLM: AVX2 instruction set")
 #	endif//GLM_ARCH
 #endif//GLM_MESSAGE
 

+ 7 - 0
readme.txt

@@ -36,6 +36,11 @@ GLM is a header only library, there is nothing to build, just include it.
 More informations in GLM manual:
 http://glm.g-truc.net/glm-0.9.3.pdf
 
+================================================================================
+GLM 0.9.3.4: 2012-XX-XX
+--------------------------------------------------------------------------------
+- Added SSE4 and AVX2 detection.
+
 ================================================================================
 GLM 0.9.3.3: 2012-05-10
 --------------------------------------------------------------------------------
@@ -45,6 +50,8 @@ GLM 0.9.3.3: 2012-05-10
 - Fixed SIMD mat4 test on GCC
 - Fixed perspectiveFov implementation
 - Fixed matrixCompMult for none-square matrices
+- Fixed namespace issue on stream operators
+- Fixed various warnings
 - Added VC11 support
 
 ================================================================================