From 97c3077678803218a7516ae4e19933375b8c3ca3 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Wed, 22 Mar 2023 01:05:36 +0100 Subject: [PATCH] cmake: detect rdtsc in CMake --- CMakeLists.txt | 19 +++++++++++++++++++ include/build_config/SDL_build_config.h.cmake | 1 + 2 files changed, 20 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index d1008efa40..f43908f187 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -370,6 +370,7 @@ set_option(SDL_ASSEMBLY "Enable assembly routines" ${SDL_ASSEMBLY_DEF dep_option(SDL_AVX "Use AVX assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) dep_option(SDL_AVX2 "Use AVX2 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) dep_option(SDL_AVX512 "Use AVX512 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) +dep_option(SDL_RDTSC "Use RDTSC assembly routine(s)" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) dep_option(SDL_SSE "Use SSE assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) dep_option(SDL_SSE2 "Use SSE2 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) dep_option(SDL_SSE3 "Use SSE3 assembly routines" ON "SDL_ASSEMBLY;SDL_CPU_X86 OR SDL_CPU_X64" OFF) @@ -714,6 +715,20 @@ endif() if(SDL_ASSEMBLY) set(HAVE_ASSEMBLY TRUE) + if(SDL_RDTSC) + check_c_source_compiles(" + #if defined(_MSC_VER) + # include + #else + # include + #endif + int main(int argc, char *argv[]) { + return (int)__rdtsc(); + }" COMPILER_SUPPORTS_RDTSC) + if(COMPILER_SUPPORTS_RDTSC) + set(HAVE_RDTSC TRUE) + endif() + endif() if(SDL_MMX) cmake_push_check_state() if(USE_GCC OR USE_CLANG) @@ -1028,6 +1043,10 @@ if(SDL_ASSEMBLY) endif() endif() +if(NOT HAVE_RDTSC) + set(SDL_DISABLE_RDTSC 1) +endif() + if(NOT HAVE_MMX) set(SDL_DISABLE_MMX 1) endif() diff --git a/include/build_config/SDL_build_config.h.cmake b/include/build_config/SDL_build_config.h.cmake index 3b7814ba40..f10021683b 100644 --- a/include/build_config/SDL_build_config.h.cmake +++ b/include/build_config/SDL_build_config.h.cmake @@ -585,6 +585,7 @@ typedef unsigned int uintptr_t; #endif /* !_STDINT_H_ && !HAVE_STDINT_H */ /* Configure use of intrinsics */ +#cmakedefine SDL_DISABLE_RDTSC 1 #cmakedefine SDL_DISABLE_SSE 1 #cmakedefine SDL_DISABLE_SSE2 1 #cmakedefine SDL_DISABLE_SSE3 1