1*da0073e9SAndroid Build Coastguard WorkerIF(CMAKE_SYSTEM_NAME MATCHES "Linux") 2*da0073e9SAndroid Build Coastguard Worker message("-- <FindZVECTOR>") 3*da0073e9SAndroid Build Coastguard Worker 4*da0073e9SAndroid Build Coastguard Worker SET(VECTORIZATION_CODE " 5*da0073e9SAndroid Build Coastguard Worker #include <vecintrin.h> 6*da0073e9SAndroid Build Coastguard Worker using vuint32 = __attribute__ ((vector_size (16))) unsigned int; 7*da0073e9SAndroid Build Coastguard Worker using vfloat32 = __attribute__ ((vector_size (16))) float; 8*da0073e9SAndroid Build Coastguard Worker vfloat32 vsel_ext(vuint32 o, vfloat32 x, vfloat32 y) 9*da0073e9SAndroid Build Coastguard Worker { 10*da0073e9SAndroid Build Coastguard Worker return vec_sel(y, x, o); 11*da0073e9SAndroid Build Coastguard Worker } 12*da0073e9SAndroid Build Coastguard Worker int main(){ 13*da0073e9SAndroid Build Coastguard Worker vfloat32 h1 ={3.f, 4.f, 5.f, 6.f}; 14*da0073e9SAndroid Build Coastguard Worker vfloat32 h2 = {9.f, 8.f, 11.f, 12.f}; 15*da0073e9SAndroid Build Coastguard Worker vuint32 selector= {0xFFFFFFFF, 0, 0xFFFFFFFF, 0xFFFFFFFF}; 16*da0073e9SAndroid Build Coastguard Worker vfloat32 hf = vsel_ext(selector, h1,h2); 17*da0073e9SAndroid Build Coastguard Worker int ret = (int)(hf[0]*1000+hf[1]*100+hf[2]*10+hf[3]); 18*da0073e9SAndroid Build Coastguard Worker return (ret == 3856) ? 0 : -1; 19*da0073e9SAndroid Build Coastguard Worker } 20*da0073e9SAndroid Build Coastguard Worker ") 21*da0073e9SAndroid Build Coastguard Worker 22*da0073e9SAndroid Build Coastguard Worker SET(ARCH_SIMD_TEST_FLAGS " -mvx -mzvector") 23*da0073e9SAndroid Build Coastguard Worker SET(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) 24*da0073e9SAndroid Build Coastguard Worker SET(CMAKE_REQUIRED_FLAGS "${ARCH_SIMD_TEST_FLAGS}") 25*da0073e9SAndroid Build Coastguard Worker # Do compilation check instead of runtime check 26*da0073e9SAndroid Build Coastguard Worker # in case it is compiled on older hardware 27*da0073e9SAndroid Build Coastguard Worker # or crosscompiled 28*da0073e9SAndroid Build Coastguard Worker CHECK_CXX_SOURCE_COMPILES("${VECTORIZATION_CODE}" COMPILE_OUT_ZVECTOR) 29*da0073e9SAndroid Build Coastguard Worker SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) 30*da0073e9SAndroid Build Coastguard Worker if(COMPILE_OUT_ZVECTOR) 31*da0073e9SAndroid Build Coastguard Worker message("-- ZVECTOR flags were set.") 32*da0073e9SAndroid Build Coastguard Worker set(CXX_ZVECTOR_FOUND TRUE) 33*da0073e9SAndroid Build Coastguard Worker SET(CXX_ZVECTOR_FLAGS "${ARCH_SIMD_TEST_FLAGS}" ) 34*da0073e9SAndroid Build Coastguard Worker else() 35*da0073e9SAndroid Build Coastguard Worker message("-- ZVECTOR flags were NOT set.") 36*da0073e9SAndroid Build Coastguard Worker endif() 37*da0073e9SAndroid Build Coastguard Worker message("-- </FindZVECTOR>") 38*da0073e9SAndroid Build Coastguard Worker 39*da0073e9SAndroid Build Coastguard Workerendif() 40