Browse Source

Sunset SDL_HasRDTSC

Anonymous Maarten 2 years ago
parent
commit
b0a5182e84

+ 0 - 19
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 <intrin.h>
-      #else
-      # include <x86intrin.h>
-      #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()

+ 0 - 30
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

+ 0 - 1
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

+ 14 - 25
src/cpuinfo/SDL_cpuinfo.c

@@ -87,21 +87,20 @@
 #include <kernel/OS.h>
 #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)
 {

+ 0 - 1
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;

+ 0 - 1
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

+ 0 - 1
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)

+ 8 - 50
test/testautomation_intrinsics.c

@@ -10,19 +10,6 @@
 #include <SDL3/SDL_test.h>
 #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 <intrin.h>
-# else
-#  include <x86intrin.h>
-# 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
 };
 

+ 0 - 4
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()");
 

+ 0 - 1
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");