1*da0073e9SAndroid Build Coastguard Worker 2*da0073e9SAndroid Build Coastguard WorkerIF(CMAKE_SYSTEM_NAME MATCHES "Linux") 3*da0073e9SAndroid Build Coastguard Worker message("-- <FindVSX>") 4*da0073e9SAndroid Build Coastguard Worker EXEC_PROGRAM(LD_SHOW_AUXV=1 ARGS "/bin/true" OUTPUT_VARIABLE bintrue) 5*da0073e9SAndroid Build Coastguard Worker if(bintrue MATCHES "AT_PLATFORM:[ \\t\\n\\r]*([a-zA-Z0-9_]+)[ \\t\\n\\r]*") 6*da0073e9SAndroid Build Coastguard Worker if(CMAKE_MATCH_COUNT GREATER 0) 7*da0073e9SAndroid Build Coastguard Worker string(TOLOWER ${CMAKE_MATCH_1} platform) 8*da0073e9SAndroid Build Coastguard Worker if(${platform} MATCHES "^power") 9*da0073e9SAndroid Build Coastguard Worker message("-- POWER Platform: ${platform}") 10*da0073e9SAndroid Build Coastguard Worker SET(POWER_COMP TRUE CACHE BOOL "power ") 11*da0073e9SAndroid Build Coastguard Worker SET(CXX_VSX_FLAGS "${CXX_VSX_FLAGS} -mcpu=${platform} -mtune=${platform}" ) 12*da0073e9SAndroid Build Coastguard Worker endif() 13*da0073e9SAndroid Build Coastguard Worker endif() 14*da0073e9SAndroid Build Coastguard Worker endif() 15*da0073e9SAndroid Build Coastguard Worker SET(VSX_CODE " #include <altivec.h> 16*da0073e9SAndroid Build Coastguard Worker int main() { 17*da0073e9SAndroid Build Coastguard Worker float __attribute__((aligned(16))) vptr_y[8] = { 1.0f,2.f,3.f,4.f,4.f,3.f,2.f,1.f }; 18*da0073e9SAndroid Build Coastguard Worker __vector float v_result = vec_add(vec_vsx_ld(0, vptr_y), vec_vsx_ld(16, vptr_y)); 19*da0073e9SAndroid Build Coastguard Worker return 0; 20*da0073e9SAndroid Build Coastguard Worker }") 21*da0073e9SAndroid Build Coastguard Worker #check_cxx_compiler_flag(-mvsx vsx_flag) 22*da0073e9SAndroid Build Coastguard Worker SET(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) 23*da0073e9SAndroid Build Coastguard Worker SET(CMAKE_REQUIRED_FLAGS "-mvsx") 24*da0073e9SAndroid Build Coastguard Worker CHECK_C_SOURCE_COMPILES("${VSX_CODE}" C_VSX_FOUND) 25*da0073e9SAndroid Build Coastguard Worker CHECK_CXX_SOURCE_COMPILES("${VSX_CODE}" CXX_VSX_FOUND) 26*da0073e9SAndroid Build Coastguard Worker SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) 27*da0073e9SAndroid Build Coastguard Worker if(CXX_VSX_FOUND) 28*da0073e9SAndroid Build Coastguard Worker message("-- VSX flag was set.") 29*da0073e9SAndroid Build Coastguard Worker SET(CXX_VSX_FLAGS "${CXX_VSX_FLAGS} -mvsx" ) 30*da0073e9SAndroid Build Coastguard Worker elseif(POWER_COMP) 31*da0073e9SAndroid Build Coastguard Worker message(WARNING "-- VSX flag was not set.") 32*da0073e9SAndroid Build Coastguard Worker endif() 33*da0073e9SAndroid Build Coastguard Worker message("-- </FindVSX>") 34*da0073e9SAndroid Build Coastguard Workerendif() 35