mirror of
https://github.com/Mr-Wiseguy/Zelda64Recomp.git
synced 2024-11-18 03:39:16 +01:00
Add CPU instruction set requirements
This commit is contained in:
parent
0a0699f272
commit
e43e9ebb6a
@ -24,6 +24,18 @@ if (WIN32)
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/lib/")
|
||||
endif()
|
||||
|
||||
# Check CPU requirements
|
||||
include(cmake/ZREDetectSSE42.cmake)
|
||||
message(STATUS "SUPPORTS_SSE4.2 = ${SUPPORTS_SSE42}")
|
||||
include(cmake/ZREDetectNEON.cmake)
|
||||
message(STATUS "SUPPORTS_NEON = ${SUPPORTS_NEON}")
|
||||
|
||||
if(CMAKE_SIZEOF_VOID_P EQUAL 8 AND CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|amd64|AMD64" AND NOT SUPPORTS_AVX)
|
||||
message(FATAL_ERROR "FATAL: A CPU supporting SSE4.2 is required.")
|
||||
elseif(NOT SUPPORTS_NEON)
|
||||
message(FATAL_ERROR "FATAL: A CPU supporting NEON is required.")
|
||||
endif()
|
||||
|
||||
set(RT64_STATIC TRUE)
|
||||
add_subdirectory(${CMAKE_SOURCE_DIR}/lib/rt64 ${CMAKE_BINARY_DIR}/rt64)
|
||||
|
||||
|
4
cmake/ZREDetectNEON.cmake
Normal file
4
cmake/ZREDetectNEON.cmake
Normal file
@ -0,0 +1,4 @@
|
||||
try_compile(SUPPORTS_NEON
|
||||
"${CMAKE_BINARY_DIR}"
|
||||
"${CMAKE_SOURCE_DIR}/cmake/checks/cpu_neon.cpp"
|
||||
)
|
4
cmake/ZREDetectSSE42.cmake
Normal file
4
cmake/ZREDetectSSE42.cmake
Normal file
@ -0,0 +1,4 @@
|
||||
try_compile(SUPPORTS_SSE42
|
||||
"${CMAKE_BINARY_DIR}"
|
||||
"${CMAKE_SOURCE_DIR}/cmake/checks/cpu_sse42.cpp"
|
||||
)
|
29
cmake/checks/cpu_neon.cpp
Normal file
29
cmake/checks/cpu_neon.cpp
Normal file
@ -0,0 +1,29 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined _WIN32 && (defined(_M_ARM) || defined(_M_ARM64))
|
||||
#include <Intrin.h>
|
||||
#include <arm_neon.h>
|
||||
#define CV_NEON 1
|
||||
#elif defined(__ARM_NEON)
|
||||
#include <arm_neon.h>
|
||||
#define CV_NEON 1
|
||||
#endif
|
||||
|
||||
void test_aliased_type(const uint8x16_t &a) {}
|
||||
void test_aliased_type(const int8x16_t &a) {}
|
||||
|
||||
#if defined CV_NEON
|
||||
int test() {
|
||||
const float src[] = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||
float32x4_t val = vld1q_f32((const float32_t *)(src));
|
||||
return (int)vgetq_lane_f32(val, 0);
|
||||
}
|
||||
#else
|
||||
#error "NEON is not supported"
|
||||
#endif
|
||||
|
||||
int main() {
|
||||
auto result = test();
|
||||
printf("NEON supported and test function executed. Result: %d\n", result);
|
||||
return 0;
|
||||
}
|
12
cmake/checks/cpu_sse42.cpp
Normal file
12
cmake/checks/cpu_sse42.cpp
Normal file
@ -0,0 +1,12 @@
|
||||
#include <stdio.h>
|
||||
#include <nmmintrin.h>
|
||||
|
||||
int test() {
|
||||
unsigned int res = _mm_crc32_u8(1, 2);
|
||||
}
|
||||
|
||||
int main() {
|
||||
auto result = test();
|
||||
printf("SSE4.2 supported and test function executed. Result: %d\n", result);
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user