| IF(CMAKE_SYSTEM_NAME MATCHES "Linux") | |
| message("-- <FindVSX>") | |
| EXEC_PROGRAM(LD_SHOW_AUXV=1 ARGS "/bin/true" OUTPUT_VARIABLE bintrue) | |
| if(bintrue MATCHES "AT_PLATFORM:[ \\t\\n\\r]*([a-zA-Z0-9_]+)[ \\t\\n\\r]*") | |
| if(CMAKE_MATCH_COUNT GREATER 0) | |
| string(TOLOWER ${CMAKE_MATCH_1} platform) | |
| if(${platform} MATCHES "^power") | |
| message("-- POWER Platform: ${platform}") | |
| SET(POWER_COMP TRUE CACHE BOOL "power ") | |
| SET(CXX_VSX_FLAGS "${CXX_VSX_FLAGS} -mcpu=${platform} -mtune=${platform}" ) | |
| endif() | |
| endif() | |
| endif() | |
| SET(VSX_CODE " #include <altivec.h> | |
| int main() { | |
| float __attribute__((aligned(16))) vptr_y[8] = { 1.0f,2.f,3.f,4.f,4.f,3.f,2.f,1.f }; | |
| __vector float v_result = vec_add(vec_vsx_ld(0, vptr_y), vec_vsx_ld(16, vptr_y)); | |
| return 0; | |
| }") | |
| #check_cxx_compiler_flag(-mvsx vsx_flag) | |
| SET(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) | |
| SET(CMAKE_REQUIRED_FLAGS "-mvsx") | |
| CHECK_C_SOURCE_COMPILES("${VSX_CODE}" C_VSX_FOUND) | |
| CHECK_CXX_SOURCE_COMPILES("${VSX_CODE}" CXX_VSX_FOUND) | |
| SET(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) | |
| if(CXX_VSX_FOUND) | |
| message("-- VSX flag was set.") | |
| SET(CXX_VSX_FLAGS "${CXX_VSX_FLAGS} -mvsx" ) | |
| elseif(POWER_COMP) | |
| message(WARNING "-- VSX flag was not set.") | |
| endif() | |
| message("-- </FindVSX>") | |
| endif() | |