IF(CMAKE_SYSTEM_NAME MATCHES "Linux") message("-- ") SET(VECTORIZATION_CODE " #include using vuint32 = __attribute__ ((vector_size (16))) unsigned int; using vfloat32 = __attribute__ ((vector_size (16))) float; vfloat32 vsel_ext(vuint32 o, vfloat32 x, vfloat32 y) { return vec_sel(y, x, o); } int main(){ vfloat32 h1 ={3.f, 4.f, 5.f, 6.f}; vfloat32 h2 = {9.f, 8.f, 11.f, 12.f}; vuint32 selector= {0xFFFFFFFF, 0, 0xFFFFFFFF, 0xFFFFFFFF}; vfloat32 hf = vsel_ext(selector, h1,h2); int ret = (int)(hf[0]*1000+hf[1]*100+hf[2]*10+hf[3]); return (ret == 3856) ? 0 : -1; } ") SET(ARCH_SIMD_TEST_FLAGS " -mvx -mzvector") SET(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) SET(CMAKE_REQUIRED_FLAGS "${ARCH_SIMD_TEST_FLAGS}") # Do compilation check instead of runtime check # in case it is compiled on older hardware # or crosscompiled CHECK_CXX_SOURCE_COMPILES("${VECTORIZATION_CODE}" COMPILE_OUT_ZVECTOR) SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) if(COMPILE_OUT_ZVECTOR) message("-- ZVECTOR flags were set.") set(CXX_ZVECTOR_FOUND TRUE) SET(CXX_ZVECTOR_FLAGS "${ARCH_SIMD_TEST_FLAGS}" ) else() message("-- ZVECTOR flags were NOT set.") endif() message("-- ") endif()