[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,
- [Commit-gnuradio] [gnuradio] branch maint updated (ccfd5aa -> 7bb1182), git, 2014/01/09
- [Commit-gnuradio] [gnuradio] 01/11: runtime: Disable CPU_SET macros for FreeBSD., git, 2014/01/09
- [Commit-gnuradio] [gnuradio] 05/11: volk: some versions of clang have problems with cvtpi32_ps., git, 2014/01/09
- [Commit-gnuradio] [gnuradio] 03/11: qtgui: fixed naming of classes for long-term use., git, 2014/01/09
- [Commit-gnuradio] [gnuradio] 11/11: grc: fix variable vlen for grc generated hier blocks, git, 2014/01/09
- [Commit-gnuradio] [gnuradio] 09/11: cmake: If Ice 3.4 found, check version of GCC and disable if >= 4.7., git, 2014/01/09
- [Commit-gnuradio] [gnuradio] 04/11: volk: clang sets GNUC_MINOR only to 2, so we need to check if we're building with clang. This patch enables xgetbv for clang >= 3.0., git, 2014/01/09
- [Commit-gnuradio] [gnuradio] 06/11: volk: test for clang version; if less than 3.2, disable SSE4a machine due to a bug in the compiler support., git, 2014/01/09
- [Commit-gnuradio] [gnuradio] 08/11: analog: additional docs for noise sources., git, 2014/01/09
- [Commit-gnuradio] [gnuradio] 10/11: volk: modifying tests for AVX and SSE4a support in compiler/CPU.,
git <=
- [Commit-gnuradio] [gnuradio] 07/11: filter: fixed an issue with filter delays for interp and rational_resampler filters., git, 2014/01/09
- [Commit-gnuradio] [gnuradio] 02/11: qtgui: fixed thread-safety in GRC variable-type blocks, git, 2014/01/09