From 418047661ca09b2ab7eb4e47e6810e5e15ce0484 Mon Sep 17 00:00:00 2001 From: Zhuo Zhang Date: Sun, 9 Aug 2020 14:20:43 +0800 Subject: [PATCH] fix #1984 & fix cmake (#2000) --- examples/CMakeLists.txt | 2 +- src/cpu.cpp | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/examples/CMakeLists.txt b/examples/CMakeLists.txt index aa3114776..b4f8dfeab 100644 --- a/examples/CMakeLists.txt +++ b/examples/CMakeLists.txt @@ -13,7 +13,7 @@ if(NOT OpenCV_FOUND) endif() if(OpenCV_FOUND) - if(${OpenCV_VERSION_MAJOR} GREATER_EQUAL 4) + if(${OpenCV_VERSION_MAJOR} GREATER 3) set(CMAKE_CXX_STANDARD 11) endif() include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../src) diff --git a/src/cpu.cpp b/src/cpu.cpp index f4e84eba4..1ceae2644 100644 --- a/src/cpu.cpp +++ b/src/cpu.cpp @@ -214,8 +214,8 @@ int cpu_support_arm_asimdhp() int cpu_support_x86_avx2() { -#if defined(__x86_64__) -#ifdef _MSC_VER +#if (_M_AMD64 || __x86_64__) || (_M_IX86 || __i386__) +#if defined(_MSC_VER) // TODO move to init function int cpu_info[4]; __cpuid(cpu_info, 0); @@ -235,10 +235,18 @@ int cpu_support_x86_avx2() __cpuid(cpu_info, 7); return cpu_info[1] & 0x00000020; -#else - // TODO gcc-specific +#elif defined(__clang__) +#if __clang_major__ >= 6 __builtin_cpu_init(); +#endif return __builtin_cpu_supports("avx2"); +#elif defined(__GNUC__) + __builtin_cpu_init(); + return __builtin_cpu_supports("avx2"); +#else + // TODO: other x86 compilers checking avx2 here + NCNN_LOGE("AVX2 detection method is unknown for current compiler"); + return 0; #endif #else return 0;