commit-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Commit-gnuradio] [gnuradio] 10/11: volk: modifying tests for AVX and SS


From: git
Subject: [Commit-gnuradio] [gnuradio] 10/11: volk: modifying tests for AVX and SSE4a support in compiler/CPU.
Date: Thu, 9 Jan 2014 21:52:40 +0000 (UTC)

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

trondeau pushed a commit to branch maint
in repository gnuradio.

commit 3b749c6abca94e01047ac375bc65a25cc1a9a1a6
Author: Tom Rondeau <address@hidden>
Date:   Thu Jan 9 14:16:09 2014 -0500

    volk: modifying tests for AVX and SSE4a support in compiler/CPU.
---
 volk/lib/CMakeLists.txt | 87 +++++++++++++++++++++++++++++--------------------
 1 file changed, 51 insertions(+), 36 deletions(-)

diff --git a/volk/lib/CMakeLists.txt b/volk/lib/CMakeLists.txt
index 2727a91..8195d9e 100644
--- a/volk/lib/CMakeLists.txt
+++ b/volk/lib/CMakeLists.txt
@@ -123,6 +123,7 @@ endmacro(OVERRULE_ARCH)
 # executable does not function correctly}.
 ########################################################################
 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); }")
@@ -138,7 +139,7 @@ if(CPU_IS_x86)
             OUTPUT_QUIET ERROR_QUIET
             RESULT_VARIABLE avx_exe_result)
         if(NOT ${avx_exe_result} EQUAL 0)
-            OVERRULE_ARCH(avx "CPU missing xgetbv.")
+            OVERRULE_ARCH(avx "CPU missing xgetbv")
         else()
             set(HAVE_XGETBV 1)
         endif()
@@ -148,48 +149,62 @@ if(CPU_IS_x86)
     endif()
     file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/test_xgetbv
         ${CMAKE_CURRENT_BINARY_DIR}/test_xgetbv.c)
-endif()
+
+    #########################################################################
+    # eliminate AVX if cvtpi32_ps intrinsic fails like some versions of clang
+    #########################################################################
+
+    # 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)
+
+    # Disable SSE4a if Clang is less than version 3.2
+    if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
+      # Figure out the version of Clang
+      if(CMAKE_VERSION VERSION_LESS "2.8.10")
+        # Exctract the Clang version from the --version string.
+        # In cmake 2.8.10, we can just use CMAKE_C_COMPILER_VERSION
+        # without having to go through these string manipulations
+        execute_process(COMMAND ${CMAKE_C_COMPILER} --version
+          OUTPUT_VARIABLE clang_version)
+        string(REGEX MATCH "[0-9].[0-9]" CMAKE_C_COMPILER_VERSION 
${clang_version})
+      endif(CMAKE_VERSION VERSION_LESS "2.8.10")
+
+      if(CMAKE_C_COMPILER_VERSION VERSION_LESS "3.2")
+        OVERRULE_ARCH(sse4_a "Clang >= 3.2 required for SSE4a")
+      endif(CMAKE_C_COMPILER_VERSION VERSION_LESS "3.2")
+    endif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
+
+endif(CPU_IS_x86)
 
 if(${HAVE_XGETBV})
     add_definitions(-DHAVE_XGETBV)
 endif()
 
-#########################################################################
-# eliminate AVX if cvtpi32_ps intrinsic fails like some versions of clang
-#########################################################################
-
-# check to see if the compiler/linker works with cvtpi32_ps instrinsic
-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")
-  set(HAVE_CVTPI32_PS 0)
-endif()
-file(REMOVE ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps
-  ${CMAKE_CURRENT_BINARY_DIR}/test_cvtpi32_ps.c)
-
-if(${HAVE_CVTPI32_PS})
-    add_definitions(-DHAVE_CVTPI32_PS)
+if(${HAVE_AVX_CVTPI32_PS})
+    add_definitions(-DHAVE_AVX_CVTPI32_PS)
 endif()
 
-if("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
-  execute_process(COMMAND ${CMAKE_C_COMPILER} --version
-    OUTPUT_VARIABLE cmake_c_compiler_version)
-
-  # Exctract the Clang version from the --version string.
-  # In cmake 2.8.10, we can just use CMAKE_C_COMPILER_VERSION
-  # without having to go through these string manipulations
-  string(FIND ${cmake_c_compiler_version} "LLVM " clang_version_index)
-  string(SUBSTRING ${cmake_c_compiler_version} ${clang_version_index} 8 
clang_version)
-  string(SUBSTRING ${clang_version} 5 3 CMAKE_C_COMPILER_VERSION)
-  if(CMAKE_C_COMPILER_VERSION VERSION_LESS "3.2")
-    OVERRULE_ARCH(sse4_a "Clang >= 3.2 required for SSE4a")
-  endif(CMAKE_C_COMPILER_VERSION VERSION_LESS "3.2")
-endif("${CMAKE_C_COMPILER_ID}" STREQUAL "Clang")
 
 ########################################################################
 # implement overruling in the ORC case,



reply via email to

[Prev in Thread] Current Thread [Next in Thread]