[hamradio-commits] [gnss-sdr] 153/236: Fixes related to the MSVC compiler

Carles Fernandez carles_fernandez-guest at moszumanska.debian.org
Tue Apr 26 16:02:46 UTC 2016


This is an automated email from the git hooks/post-receive script.

carles_fernandez-guest pushed a commit to branch next
in repository gnss-sdr.

commit 99ceb30a0ec4bb2b72129cd5aae6396ff6d57b04
Author: Carles Fernandez <carles.fernandez at gmail.com>
Date:   Fri Apr 1 01:50:09 2016 +0200

    Fixes related to the MSVC compiler
---
 .../volk_gnsssdr_module/volk_gnsssdr/gen/archs.xml |  1 +
 .../volk_gnsssdr/gen/machines.xml                  | 10 ++--
 .../volk_gnsssdr/lib/CMakeLists.txt                | 56 +++++++++++++---------
 3 files changed, 39 insertions(+), 28 deletions(-)

diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/archs.xml b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/archs.xml
index 33888a7..ff1de1e 100644
--- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/archs.xml
+++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/archs.xml
@@ -88,6 +88,7 @@
         <param>12</param>
     </check>
     <flag compiler="gnu">-mfma</flag>
+    <flag compiler="msvc">/arch:AVX2</flag>
     <alignment>32</alignment>
 </arch>
 
diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/machines.xml b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/machines.xml
index 0b7fd54..b60f336 100644
--- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/machines.xml
+++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/gen/machines.xml
@@ -14,23 +14,23 @@
 </machine>
 
 <machine name="sse3">
-<archs>generic 32|64 mmx sse sse2 sse3 orc|</archs>
+<archs>generic 32|64| mmx| sse sse2 sse3 orc|</archs>
 </machine>
 
 <machine name="ssse3">
-<archs>generic 32|64 mmx sse sse2 sse3 ssse3 orc|</archs>
+<archs>generic 32|64| mmx| sse sse2 sse3 ssse3 orc|</archs>
 </machine>
 
 <machine name="sse4_a">
-<archs>generic 32|64 mmx sse sse2 sse3 sse4_a popcount orc|</archs>
+<archs>generic 32|64| mmx| sse sse2 sse3 sse4_a popcount orc|</archs>
 </machine>
 
 <machine name="sse4_1">
-<archs>generic 32|64 mmx sse sse2 sse3 ssse3 sse4_1 orc|</archs>
+<archs>generic 32|64| mmx| sse sse2 sse3 ssse3 sse4_1 orc|</archs>
 </machine>
 
 <machine name="sse4_2">
-<archs>generic 32|64 mmx sse sse2 sse3 ssse3 sse4_1 sse4_2 popcount orc|</archs>
+<archs>generic 32|64| mmx| sse sse2 sse3 ssse3 sse4_1 sse4_2 popcount orc|</archs>
 </machine>
 
 <!-- trailing | bar means generate without either for MSVC -->
diff --git a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/CMakeLists.txt b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/CMakeLists.txt
index 15751d0..4b37cf2 100644
--- a/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/CMakeLists.txt
+++ b/src/algorithms/libs/volk_gnsssdr_module/volk_gnsssdr/lib/CMakeLists.txt
@@ -150,7 +150,12 @@ set(HAVE_XGETBV 0)
 set(HAVE_AVX_CVTPI32_PS 0)
 if(CPU_IS_x86)
     # check to see if the compiler/linker works with xgetb instruction
-    file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/test_xgetbv.c "unsigned long long _xgetbv(unsigned int index) { unsigned int eax, edx; __asm__ __volatile__(\"xgetbv\" : \"=a\"(eax), \"=d\"(edx) : \"c\"(index)); return ((unsigned long long)edx << 32) | eax; } int main (void) { (void) _xgetbv(0); return (0); }")
+    if (NOT MSVC)
+        file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/test_xgetbv.c "unsigned long long _xgetbv(unsigned int index) { unsigned int eax, edx; __asm__ __volatile__(\"xgetbv\" : \"=a\"(eax), \"=d\"(edx) : \"c\"(index)); return ((unsigned long long)edx << 32) | eax; } int main (void) { (void) _xgetbv(0); return (0); }")
+    else (NOT MSVC)
+        #MSVC defines an intrinsic
+        file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/test_xgetbv.c "#include <stdio.h> \n #include <intrin.h> \n int main() { int avxSupported = 0; \n#if (_MSC_FULL_VER >= 160040219) \nint cpuInfo[4]; __cpuid(cpuInfo, 1);\nif ((cpuInfo[2] & (1 << 27) || 0) && (cpuInfo[2] & (1 << 28) || 0)) \n{\nunsigned long long xcrFeatureMask = _xgetbv(_XCR_XFEATURE_ENABLED_MASK);\n   avxSupported = (xcrFeatureMask & 0x6) == 6;}\n#endif \n return 1- avxSupported; }")
+    endif(NOT MSVC)
     execute_process(COMMAND ${CMAKE_C_COMPILER} -o
         ${CMAKE_CURRENT_BINARY_DIR}/test_xgetbv
         ${CMAKE_CURRENT_BINARY_DIR}/test_xgetbv.c
@@ -179,28 +184,33 @@ if(CPU_IS_x86)
     #########################################################################
 
     # check to see if the compiler/linker works with cvtpi32_ps instrinsic when using AVX
-    file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps.c "#include <immintrin.h>\nint main (void) {__m128 __a; __m64 __b; __m128 foo = _mm_cvtpi32_ps(__a, __b); return (0); }")
-    execute_process(COMMAND ${CMAKE_C_COMPILER} -mavx -o
-      ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps
-      ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps.c
-      OUTPUT_QUIET ERROR_QUIET
-      RESULT_VARIABLE avx_compile_result)
-    if(NOT ${avx_compile_result} EQUAL 0)
-      OVERRULE_ARCH(avx "Compiler missing cvtpi32_ps instrinsic")
-    elseif(NOT CROSSCOMPILE_MULTILIB)
-      execute_process(COMMAND ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps
-        OUTPUT_QUIET ERROR_QUIET
-        RESULT_VARIABLE avx_exe_result)
-      if(NOT ${avx_exe_result} EQUAL 0)
-        OVERRULE_ARCH(avx "CPU missing cvtpi32_ps")
-      else()
-        set(HAVE_AVX_CVTPI32_PS 1)
-      endif()
-    else()
-      set(HAVE_AVX_CVTPI32_PS 1)
-    endif()
-    file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps
-      ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps.c)
+    if (CMAKE_SIZEOF_VOID_P EQUAL 4)
+        file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps.c "#include <immintrin.h>\nint main (void) {__m128 __a; __m64 __b; __m128 foo = _mm_cvtpi32_ps(__a, __b); return (0); }")
+        execute_process(COMMAND ${CMAKE_C_COMPILER} -mavx -o
+          ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps
+          ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps.c
+          OUTPUT_QUIET ERROR_QUIET
+          RESULT_VARIABLE avx_compile_result)
+        if(NOT ${avx_compile_result} EQUAL 0)
+          OVERRULE_ARCH(avx "Compiler missing cvtpi32_ps instrinsic")
+        elseif(NOT CROSSCOMPILE_MULTILIB)
+          execute_process(COMMAND ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps
+            OUTPUT_QUIET ERROR_QUIET
+            RESULT_VARIABLE avx_exe_result)
+          if(NOT ${avx_exe_result} EQUAL 0)
+            OVERRULE_ARCH(avx "CPU missing cvtpi32_ps")
+          else()
+            set(HAVE_AVX_CVTPI32_PS 1)
+          endif()
+        else()
+          set(HAVE_AVX_CVTPI32_PS 1)
+        endif()
+        file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps
+          ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps.c)
+    else(CMAKE_SIZEOF_VOID_P EQUAL 4)
+	    # 64-bit compilations won't need this command so don't overrule AVX 
+	    set(HAVE_AVX_CVTPI32_PS 0)
+    endif(CMAKE_SIZEOF_VOID_P EQUAL 4)
 
     # Disable SSE4a if Clang is less than version 3.2
     if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/gnss-sdr.git



More information about the pkg-hamradio-commits mailing list