From b4525b34074665ed472cd421077a1633110f16a7 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Thu, 29 Dec 2011 22:44:16 -0200 Subject: Add configure-time checking for the SSE and AVX features on Windows Modify configure.exe to run some configure-time tests and check if the SSE and AVX compiler features are supported. The tests themselves required a bit of changes to compile with MSVC. The include in sse4_2.cpp was wrong. And for whatever reason, it didn't like the volatile variables, which GCC, Clang and ICC have been happy with. This should produce no effect in compilation, though: even dead code must be syntactically correct. We're not running the output. Change-Id: Ibe5d0904a378a7efed853c7215f88a2ddcefb1b3 Reviewed-by: Oswald Buddenhagen --- config.tests/common/avx/avx.cpp | 6 +++--- config.tests/common/avx/avx.pro | 3 ++- config.tests/common/avx2/avx2.cpp | 6 +++--- config.tests/common/avx2/avx2.pro | 3 ++- config.tests/common/sse2/sse2.pro | 3 ++- config.tests/common/sse3/sse3.cpp | 6 +++--- config.tests/common/sse3/sse3.pro | 3 ++- config.tests/common/sse4_1/sse4_1.cpp | 4 ++-- config.tests/common/sse4_1/sse4_1.pro | 3 ++- config.tests/common/sse4_2/sse4_2.cpp | 8 ++++---- config.tests/common/sse4_2/sse4_2.pro | 3 ++- config.tests/common/ssse3/ssse3.cpp | 4 ++-- config.tests/common/ssse3/ssse3.pro | 3 ++- 13 files changed, 31 insertions(+), 24 deletions(-) (limited to 'config.tests/common') diff --git a/config.tests/common/avx/avx.cpp b/config.tests/common/avx/avx.cpp index bc5be65e65..9d849a79db 100644 --- a/config.tests/common/avx/avx.cpp +++ b/config.tests/common/avx/avx.cpp @@ -43,9 +43,9 @@ int main(int, char**) { - volatile __m256d a = _mm256_setzero_pd(); - volatile __m256d b = _mm256_set1_pd(42.42); - volatile __m256d result = _mm256_add_pd(a, b); + __m256d a = _mm256_setzero_pd(); + __m256d b = _mm256_set1_pd(42.42); + __m256d result = _mm256_add_pd(a, b); (void)result; return 0; } diff --git a/config.tests/common/avx/avx.pro b/config.tests/common/avx/avx.pro index f16f7e8f4d..ba7fd96e43 100644 --- a/config.tests/common/avx/avx.pro +++ b/config.tests/common/avx/avx.pro @@ -1,5 +1,6 @@ SOURCES = avx.cpp -CONFIG -= x11 qt +CONFIG -= qt dylib release debug_and_release +CONFIG += debug console mac:CONFIG -= app_bundle isEmpty(QMAKE_CFLAGS_AVX):error("This compiler does not support AVX") else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_AVX diff --git a/config.tests/common/avx2/avx2.cpp b/config.tests/common/avx2/avx2.cpp index 9e56531220..6ebe2526d2 100644 --- a/config.tests/common/avx2/avx2.cpp +++ b/config.tests/common/avx2/avx2.cpp @@ -45,11 +45,11 @@ int main(int, char**) { /* AVX */ _mm256_zeroall(); - volatile __m256i a = _mm256_setzero_si256(); + __m256i a = _mm256_setzero_si256(); /* AVX2 */ - volatile __m256i b = _mm256_and_si256(a, a); - volatile __m256i result = _mm256_add_epi8(a, b); + __m256i b = _mm256_and_si256(a, a); + __m256i result = _mm256_add_epi8(a, b); (void)result; return 0; } diff --git a/config.tests/common/avx2/avx2.pro b/config.tests/common/avx2/avx2.pro index 09590a8379..5aa9429d68 100644 --- a/config.tests/common/avx2/avx2.pro +++ b/config.tests/common/avx2/avx2.pro @@ -1,5 +1,6 @@ SOURCES = avx2.cpp -CONFIG -= x11 qt +CONFIG -= qt dylib release debug_and_release +CONFIG += debug console mac:CONFIG -= app_bundle isEmpty(QMAKE_CFLAGS_AVX2):error("This compiler does not support AVX2") else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_AVX2 diff --git a/config.tests/common/sse2/sse2.pro b/config.tests/common/sse2/sse2.pro index 13f252ae48..c8d0861170 100644 --- a/config.tests/common/sse2/sse2.pro +++ b/config.tests/common/sse2/sse2.pro @@ -1,5 +1,6 @@ SOURCES = sse2.cpp -CONFIG -= x11 qt +CONFIG -= qt dylib release debug_and_release +CONFIG += debug console mac:CONFIG -= app_bundle isEmpty(QMAKE_CFLAGS_SSE2):error("This compiler does not support SSE2") else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE2 diff --git a/config.tests/common/sse3/sse3.cpp b/config.tests/common/sse3/sse3.cpp index c35586ab94..9a79dca936 100644 --- a/config.tests/common/sse3/sse3.cpp +++ b/config.tests/common/sse3/sse3.cpp @@ -43,9 +43,9 @@ int main(int, char**) { - volatile __m128d a = _mm_set1_pd(6.28); - volatile __m128d b = _mm_set1_pd(3.14); - volatile __m128d result = _mm_addsub_pd(a, b); + __m128d a = _mm_set1_pd(6.28); + __m128d b = _mm_set1_pd(3.14); + __m128d result = _mm_addsub_pd(a, b); result = _mm_movedup_pd(result); return 0; } diff --git a/config.tests/common/sse3/sse3.pro b/config.tests/common/sse3/sse3.pro index 8d9853ce77..90f61d2065 100644 --- a/config.tests/common/sse3/sse3.pro +++ b/config.tests/common/sse3/sse3.pro @@ -1,5 +1,6 @@ SOURCES = sse3.cpp -CONFIG -= x11 qt +CONFIG -= qt dylib release debug_and_release +CONFIG += debug console mac:CONFIG -= app_bundle isEmpty(QMAKE_CFLAGS_SSE3):error("This compiler does not support SSE3") else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE3 diff --git a/config.tests/common/sse4_1/sse4_1.cpp b/config.tests/common/sse4_1/sse4_1.cpp index b2762b990f..693fd8a1d5 100644 --- a/config.tests/common/sse4_1/sse4_1.cpp +++ b/config.tests/common/sse4_1/sse4_1.cpp @@ -43,9 +43,9 @@ int main(int, char**) { - volatile __m128 a = _mm_setzero_ps(); + __m128 a = _mm_setzero_ps(); _mm_ceil_ps(a); - volatile __m128i result = _mm_mullo_epi32(_mm_set1_epi32(42), _mm_set1_epi32(64)); + __m128i result = _mm_mullo_epi32(_mm_set1_epi32(42), _mm_set1_epi32(64)); (void)result; return 0; } diff --git a/config.tests/common/sse4_1/sse4_1.pro b/config.tests/common/sse4_1/sse4_1.pro index 539517605d..d92be9dc43 100644 --- a/config.tests/common/sse4_1/sse4_1.pro +++ b/config.tests/common/sse4_1/sse4_1.pro @@ -1,5 +1,6 @@ SOURCES = sse4_1.cpp -CONFIG -= x11 qt +CONFIG -= qt dylib release debug_and_release +CONFIG += debug console mac:CONFIG -= app_bundle isEmpty(QMAKE_CFLAGS_SSE4_1):error("This compiler does not support SSE4.1") else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE4_1 diff --git a/config.tests/common/sse4_2/sse4_2.cpp b/config.tests/common/sse4_2/sse4_2.cpp index 9052d0685c..1645070c1f 100644 --- a/config.tests/common/sse4_2/sse4_2.cpp +++ b/config.tests/common/sse4_2/sse4_2.cpp @@ -39,13 +39,13 @@ ** ****************************************************************************/ -#include +#include int main(int, char**) { - volatile __m128i a = _mm_setzero_si128(); - volatile __m128i b = _mm_set1_epi32(42); - volatile __m128i result = _mm_cmpestrm(a, 16, b, 16, 0); + __m128i a = _mm_setzero_si128(); + __m128i b = _mm_set1_epi32(42); + __m128i result = _mm_cmpestrm(a, 16, b, 16, 0); (void)result; return 0; } diff --git a/config.tests/common/sse4_2/sse4_2.pro b/config.tests/common/sse4_2/sse4_2.pro index 044eb197af..744098dce8 100644 --- a/config.tests/common/sse4_2/sse4_2.pro +++ b/config.tests/common/sse4_2/sse4_2.pro @@ -1,5 +1,6 @@ SOURCES = sse4_2.cpp -CONFIG -= x11 qt +CONFIG -= qt dylib release debug_and_release +CONFIG += debug console mac:CONFIG -= app_bundle isEmpty(QMAKE_CFLAGS_SSE4_2):error("This compiler does not support SSE4.2") else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSE4_2 diff --git a/config.tests/common/ssse3/ssse3.cpp b/config.tests/common/ssse3/ssse3.cpp index f486bed378..fed9142a2e 100644 --- a/config.tests/common/ssse3/ssse3.cpp +++ b/config.tests/common/ssse3/ssse3.cpp @@ -43,9 +43,9 @@ int main(int, char**) { - volatile __m128i a = _mm_set1_epi32(42); + __m128i a = _mm_set1_epi32(42); _mm_abs_epi8(a); - volatile __m128i result = _mm_sign_epi16(a, _mm_set1_epi32(64)); + __m128i result = _mm_sign_epi16(a, _mm_set1_epi32(64)); (void)result; return 0; } diff --git a/config.tests/common/ssse3/ssse3.pro b/config.tests/common/ssse3/ssse3.pro index dd86c41abb..e3984bd1cd 100644 --- a/config.tests/common/ssse3/ssse3.pro +++ b/config.tests/common/ssse3/ssse3.pro @@ -1,5 +1,6 @@ SOURCES = ssse3.cpp -CONFIG -= x11 qt +CONFIG -= qt dylib release debug_and_release +CONFIG += debug console mac:CONFIG -= app_bundle isEmpty(QMAKE_CFLAGS_SSSE3):error("This compiler does not support SSSE3") else:QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_SSSE3 -- cgit v1.2.3