diff --git a/CMakeLists.txt b/CMakeLists.txt index 4e68366cd3..4cd5e9befc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -373,7 +373,6 @@ 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) @@ -734,20 +733,6 @@ 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 OR USE_INTELCC) @@ -1062,10 +1047,6 @@ 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/SDL3/SDL_cpuinfo.h b/include/SDL3/SDL_cpuinfo.h index 09fe6342a6..69f770b818 100644 --- a/include/SDL3/SDL_cpuinfo.h +++ b/include/SDL3/SDL_cpuinfo.h @@ -66,27 +66,6 @@ extern DECLSPEC int SDLCALL SDL_GetCPUCount(void); */ extern DECLSPEC int SDLCALL SDL_GetCPUCacheLineSize(void); -/** - * Determine whether the CPU has the RDTSC instruction. - * - * This always returns false on CPUs that aren't using Intel instruction sets. - * - * \returns SDL_TRUE if the CPU has the RDTSC instruction or SDL_FALSE if not. - * - * \since This function is available since SDL 3.0.0. - * - * \sa SDL_HasAltiVec - * \sa SDL_HasAVX - * \sa SDL_HasAVX2 - * \sa SDL_HasMMX - * \sa SDL_HasSSE - * \sa SDL_HasSSE2 - * \sa SDL_HasSSE3 - * \sa SDL_HasSSE41 - * \sa SDL_HasSSE42 - */ -extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); - /** * Determine whether the CPU has AltiVec features. * @@ -100,7 +79,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasRDTSC(void); * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasMMX - * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 @@ -121,7 +99,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasAltiVec(void); * \sa SDL_HasAltiVec * \sa SDL_HasAVX * \sa SDL_HasAVX2 - * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 @@ -143,7 +120,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasMMX(void); * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasMMX - * \sa SDL_HasRDTSC * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 * \sa SDL_HasSSE41 @@ -164,7 +140,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE(void); * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasMMX - * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE3 * \sa SDL_HasSSE41 @@ -185,7 +160,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE2(void); * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasMMX - * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE41 @@ -206,7 +180,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE3(void); * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasMMX - * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 @@ -227,7 +200,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE41(void); * \sa SDL_HasAVX * \sa SDL_HasAVX2 * \sa SDL_HasMMX - * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 @@ -247,7 +219,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasSSE42(void); * \sa SDL_HasAltiVec * \sa SDL_HasAVX2 * \sa SDL_HasMMX - * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 @@ -268,7 +239,6 @@ extern DECLSPEC SDL_bool SDLCALL SDL_HasAVX(void); * \sa SDL_HasAltiVec * \sa SDL_HasAVX * \sa SDL_HasMMX - * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 diff --git a/include/build_config/SDL_build_config.h.cmake b/include/build_config/SDL_build_config.h.cmake index f10021683b..3b7814ba40 100644 --- a/include/build_config/SDL_build_config.h.cmake +++ b/include/build_config/SDL_build_config.h.cmake @@ -585,7 +585,6 @@ 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 diff --git a/src/cpuinfo/SDL_cpuinfo.c b/src/cpuinfo/SDL_cpuinfo.c index b4932635f6..1810a3d459 100644 --- a/src/cpuinfo/SDL_cpuinfo.c +++ b/src/cpuinfo/SDL_cpuinfo.c @@ -87,21 +87,20 @@ #include #endif -#define CPU_HAS_RDTSC (1 << 0) -#define CPU_HAS_ALTIVEC (1 << 1) -#define CPU_HAS_MMX (1 << 2) -#define CPU_HAS_SSE (1 << 3) -#define CPU_HAS_SSE2 (1 << 4) -#define CPU_HAS_SSE3 (1 << 5) -#define CPU_HAS_SSE41 (1 << 6) -#define CPU_HAS_SSE42 (1 << 7) -#define CPU_HAS_AVX (1 << 8) -#define CPU_HAS_AVX2 (1 << 9) -#define CPU_HAS_NEON (1 << 10) -#define CPU_HAS_AVX512F (1 << 11) -#define CPU_HAS_ARM_SIMD (1 << 12) -#define CPU_HAS_LSX (1 << 13) -#define CPU_HAS_LASX (1 << 14) +#define CPU_HAS_ALTIVEC (1 << 0) +#define CPU_HAS_MMX (1 << 1) +#define CPU_HAS_SSE (1 << 2) +#define CPU_HAS_SSE2 (1 << 3) +#define CPU_HAS_SSE3 (1 << 4) +#define CPU_HAS_SSE41 (1 << 5) +#define CPU_HAS_SSE42 (1 << 6) +#define CPU_HAS_AVX (1 << 7) +#define CPU_HAS_AVX2 (1 << 8) +#define CPU_HAS_NEON (1 << 9) +#define CPU_HAS_AVX512F (1 << 10) +#define CPU_HAS_ARM_SIMD (1 << 11) +#define CPU_HAS_LSX (1 << 12) +#define CPU_HAS_LASX (1 << 13) #define CPU_CFG2 0x2 #define CPU_CFG2_LSX (1 << 6) @@ -521,7 +520,6 @@ static int CPU_readCPUCFG(void) #define CPU_haveLASX() (CPU_readCPUCFG() & CPU_CFG2_LASX) #if defined(__e2k__) -#define CPU_haveRDTSC() (0) #if defined(__MMX__) #define CPU_haveMMX() (1) #else @@ -558,7 +556,6 @@ static int CPU_readCPUCFG(void) #define CPU_haveAVX() (0) #endif #else -#define CPU_haveRDTSC() (CPU_CPUIDFeatures[3] & 0x00000010) #define CPU_haveMMX() (CPU_CPUIDFeatures[3] & 0x00800000) #define CPU_haveSSE() (CPU_CPUIDFeatures[3] & 0x02000000) #define CPU_haveSSE2() (CPU_CPUIDFeatures[3] & 0x04000000) @@ -869,9 +866,6 @@ static Uint32 SDL_GetCPUFeatures(void) CPU_calcCPUIDFeatures(); SDL_CPUFeatures = 0; SDL_SIMDAlignment = sizeof(void *); /* a good safe base value */ - if (CPU_haveRDTSC()) { - SDL_CPUFeatures |= CPU_HAS_RDTSC; - } if (CPU_haveAltiVec()) { SDL_CPUFeatures |= CPU_HAS_ALTIVEC; SDL_SIMDAlignment = SDL_max(SDL_SIMDAlignment, 16); @@ -934,11 +928,6 @@ static Uint32 SDL_GetCPUFeatures(void) #define CPU_FEATURE_AVAILABLE(f) ((SDL_GetCPUFeatures() & (f)) ? SDL_TRUE : SDL_FALSE) -SDL_bool SDL_HasRDTSC(void) -{ - return CPU_FEATURE_AVAILABLE(CPU_HAS_RDTSC); -} - SDL_bool SDL_HasAltiVec(void) { diff --git a/src/dynapi/SDL_dynapi.sym b/src/dynapi/SDL_dynapi.sym index 910b055859..0592fa3a8d 100644 --- a/src/dynapi/SDL_dynapi.sym +++ b/src/dynapi/SDL_dynapi.sym @@ -404,7 +404,6 @@ SDL3_0.0.0 { SDL_HasMMX; SDL_HasNEON; SDL_HasPrimarySelectionText; - SDL_HasRDTSC; SDL_HasRectIntersection; SDL_HasRectIntersectionFloat; SDL_HasSSE2; diff --git a/src/dynapi/SDL_dynapi_overrides.h b/src/dynapi/SDL_dynapi_overrides.h index 0d4b3c9c79..1c7d5be751 100644 --- a/src/dynapi/SDL_dynapi_overrides.h +++ b/src/dynapi/SDL_dynapi_overrides.h @@ -428,7 +428,6 @@ #define SDL_HasMMX SDL_HasMMX_REAL #define SDL_HasNEON SDL_HasNEON_REAL #define SDL_HasPrimarySelectionText SDL_HasPrimarySelectionText_REAL -#define SDL_HasRDTSC SDL_HasRDTSC_REAL #define SDL_HasRectIntersection SDL_HasRectIntersection_REAL #define SDL_HasRectIntersectionFloat SDL_HasRectIntersectionFloat_REAL #define SDL_HasSSE SDL_HasSSE_REAL diff --git a/src/dynapi/SDL_dynapi_procs.h b/src/dynapi/SDL_dynapi_procs.h index 8945a15351..5e19c316a6 100644 --- a/src/dynapi/SDL_dynapi_procs.h +++ b/src/dynapi/SDL_dynapi_procs.h @@ -500,7 +500,6 @@ SDL_DYNAPI_PROC(SDL_bool,SDL_HasLSX,(void),(),return) SDL_DYNAPI_PROC(SDL_bool,SDL_HasMMX,(void),(),return) SDL_DYNAPI_PROC(SDL_bool,SDL_HasNEON,(void),(),return) SDL_DYNAPI_PROC(SDL_bool,SDL_HasPrimarySelectionText,(void),(),return) -SDL_DYNAPI_PROC(SDL_bool,SDL_HasRDTSC,(void),(),return) SDL_DYNAPI_PROC(SDL_bool,SDL_HasRectIntersection,(const SDL_Rect *a, const SDL_Rect *b),(a,b),return) SDL_DYNAPI_PROC(SDL_bool,SDL_HasRectIntersectionFloat,(const SDL_FRect *a, const SDL_FRect *b),(a,b),return) SDL_DYNAPI_PROC(SDL_bool,SDL_HasSSE,(void),(),return) diff --git a/test/testautomation_intrinsics.c b/test/testautomation_intrinsics.c index 854dc7d49a..1dc1279607 100644 --- a/test/testautomation_intrinsics.c +++ b/test/testautomation_intrinsics.c @@ -10,19 +10,6 @@ #include #include "testautomation_suites.h" -#if (defined(_MSC_VER) \ - || (defined(__GNUC__) && (__GNUC__ > 4 || __GNUC__ == 4 && __GNUC_MINOR__ >= 5)) \ - || (defined(__clang__) && (__clang_major__ > 3 || __clang_major__ == 3 && __clang_minor__ >= 5)) \ - || defined(__ICC)) && !defined(SDL_DISABLE_RDTSC) -# define SDL_RDTSC_INTRINSICS 1 -# if defined(_MSC_VER) -# include -# else -# include -# endif -# define SDLTest_rdtsc __rdtsc -#endif - // FIXME: missing tests for loongarch lsx/lasx // FIXME: missing tests for powerpc altivec @@ -373,30 +360,6 @@ static int intrinsics_selftest(void *arg) return TEST_COMPLETED; } -static int intrinsics_testRDTSC(void *arg) -{ - if (SDL_HasRDTSC()) { - SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has RDTSC support."); -#if SDL_RDTSC_INTRINSICS - { - Sint64 ticks; - - ticks = SDLTest_rdtsc(); - - SDLTest_AssertCheck(SDL_TRUE, "rdtsc returned: %" SDL_PRIu64 " ticks", ticks); - - return TEST_COMPLETED; - } -#else - SDLTest_AssertCheck(SDL_TRUE, "Test executable does NOT use RDTSC intrinsics."); -#endif - } else { - SDLTest_AssertCheck(SDL_TRUE, "CPU of test machine has NO RDTSC support."); - } - - return TEST_SKIPPED; -} - static int intrinsics_testMMX(void *arg) { if (SDL_HasMMX()) { @@ -666,42 +629,38 @@ static const SDLTest_TestCaseReference intrinsicsTest1 = { }; static const SDLTest_TestCaseReference intrinsicsTest2 = { - (SDLTest_TestCaseFp)intrinsics_testRDTSC, "intrinsics_rdtsc", "Tests RDTC intrinsic", TEST_ENABLED -}; - -static const SDLTest_TestCaseReference intrinsicsTest3 = { (SDLTest_TestCaseFp)intrinsics_testMMX, "intrinsics_testMMX", "Tests MMX intrinsics", TEST_ENABLED }; -static const SDLTest_TestCaseReference intrinsicsTest4 = { +static const SDLTest_TestCaseReference intrinsicsTest3 = { (SDLTest_TestCaseFp)intrinsics_testSSE, "intrinsics_testSSE", "Tests SSE intrinsics", TEST_ENABLED }; -static const SDLTest_TestCaseReference intrinsicsTest5 = { +static const SDLTest_TestCaseReference intrinsicsTest4 = { (SDLTest_TestCaseFp)intrinsics_testSSE2, "intrinsics_testSSE2", "Tests SSE2 intrinsics", TEST_ENABLED }; -static const SDLTest_TestCaseReference intrinsicsTest6 = { +static const SDLTest_TestCaseReference intrinsicsTest5 = { (SDLTest_TestCaseFp)intrinsics_testSSE3, "intrinsics_testSSE3", "Tests SSE3 intrinsics", TEST_ENABLED }; -static const SDLTest_TestCaseReference intrinsicsTest7 = { +static const SDLTest_TestCaseReference intrinsicsTest6 = { (SDLTest_TestCaseFp)intrinsics_testSSE4_1, "intrinsics_testSSE4.1", "Tests SSE4.1 intrinsics", TEST_ENABLED }; -static const SDLTest_TestCaseReference intrinsicsTest8 = { +static const SDLTest_TestCaseReference intrinsicsTest7 = { (SDLTest_TestCaseFp)intrinsics_testSSE4_2, "intrinsics_testSSE4.2", "Tests SSE4.2 intrinsics", TEST_ENABLED }; -static const SDLTest_TestCaseReference intrinsicsTest9 = { +static const SDLTest_TestCaseReference intrinsicsTest8 = { (SDLTest_TestCaseFp)intrinsics_testAVX, "intrinsics_testAVX", "Tests AVX intrinsics", TEST_ENABLED }; -static const SDLTest_TestCaseReference intrinsicsTest10 = { +static const SDLTest_TestCaseReference intrinsicsTest9 = { (SDLTest_TestCaseFp)intrinsics_testAVX2, "intrinsics_testAVX2", "Tests AVX2 intrinsics", TEST_ENABLED }; -static const SDLTest_TestCaseReference intrinsicsTest11 = { +static const SDLTest_TestCaseReference intrinsicsTest10 = { (SDLTest_TestCaseFp)intrinsics_testAVX512F, "intrinsics_testAVX512F", "Tests AVX512F intrinsics", TEST_ENABLED }; @@ -717,7 +676,6 @@ static const SDLTest_TestCaseReference *platformTests[] = { &intrinsicsTest8, &intrinsicsTest9, &intrinsicsTest10, - &intrinsicsTest11, NULL }; diff --git a/test/testautomation_platform.c b/test/testautomation_platform.c index 7a942330b7..676c7a5fd0 100644 --- a/test/testautomation_platform.c +++ b/test/testautomation_platform.c @@ -165,7 +165,6 @@ static int platform_testGetFunctions(void *arg) * \brief Tests SDL_HasXYZ() functions * \sa SDL_HasAltiVec * \sa SDL_HasMMX - * \sa SDL_HasRDTSC * \sa SDL_HasSSE * \sa SDL_HasSSE2 * \sa SDL_HasSSE3 @@ -177,9 +176,6 @@ static int platform_testHasFunctions(void *arg) { /* TODO: independently determine and compare values as well */ - SDL_HasRDTSC(); - SDLTest_AssertPass("SDL_HasRDTSC()"); - SDL_HasAltiVec(); SDLTest_AssertPass("SDL_HasAltiVec()"); diff --git a/test/testplatform.c b/test/testplatform.c index ad13429a9a..03691a0e85 100644 --- a/test/testplatform.c +++ b/test/testplatform.c @@ -391,7 +391,6 @@ static int TestCPUInfo(SDL_bool verbose) if (verbose) { SDL_Log("CPU count: %d\n", SDL_GetCPUCount()); SDL_Log("CPU cache line size: %d\n", SDL_GetCPUCacheLineSize()); - SDL_Log("RDTSC %s\n", SDL_HasRDTSC() ? "detected" : "not detected"); SDL_Log("AltiVec %s\n", SDL_HasAltiVec() ? "detected" : "not detected"); SDL_Log("MMX %s\n", SDL_HasMMX() ? "detected" : "not detected"); SDL_Log("SSE %s\n", SDL_HasSSE() ? "detected" : "not detected");