sdl2-compat: tidy-up msvc replacement memcpy / memcpy stuff.

From 52d96367eb41532f628757b38110f21a8daba7ec Mon Sep 17 00:00:00 2001
From: Ozkan Sezer <[EMAIL REDACTED]>
Date: Fri, 15 Sep 2023 20:00:50 +0300
Subject: [PATCH] tidy-up msvc replacement memcpy / memcpy stuff.

---
 src/sdl2_compat.c | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/sdl2_compat.c b/src/sdl2_compat.c
index df5302e..916063f 100644
--- a/src/sdl2_compat.c
+++ b/src/sdl2_compat.c
@@ -592,24 +592,21 @@ LoadSDL3(void)
     return okay;
 }
 
-#ifndef SDL_BUILDING_WINRT
-#if defined(_MSC_VER) && defined(_M_IX86)
+#if defined(_MSC_VER) && !defined(SDL_BUILDING_WINRT)
+#ifdef _M_IX86
 #include "x86_msvc.h"
 #endif
 
-#if defined(_WIN32) && !defined(__WATCOMC__)
 /* NOLINTNEXTLINE(readability-redundant-declaration) */
 extern void *memcpy(void *dst, const void *src, size_t len);
 /* NOLINTNEXTLINE(readability-redundant-declaration) */
 extern void *memset(void *dst, int c, size_t len);
-#ifdef _MSC_VER
 #ifndef __INTEL_LLVM_COMPILER
 #pragma intrinsic(memcpy)
 #pragma intrinsic(memset)
 #endif
 #pragma function(memcpy)
 #pragma function(memset)
-#endif
 
 /* NOLINTNEXTLINE(readability-inconsistent-declaration-parameter-name) */
 void *memcpy(void *dst, const void *src, size_t len)
@@ -622,8 +619,21 @@ void *memset(void *dst, int c, size_t len)
 {
     return SDL3_memset(dst, c, len);
 }
+#endif  /* MSVC && !WINRT */
+
+#if defined(__ICL) && defined(_WIN32)
+/* The classic Intel compiler generates calls to _intel_fast_memcpy
+ * and _intel_fast_memset when building an optimized SDL library */
+void *_intel_fast_memcpy(void *dst, const void *src, size_t len)
+{
+    return SDL3_memcpy(dst, src, len);
+}
+
+void *_intel_fast_memset(void *dst, int c, size_t len)
+{
+    return SDL3_memset(dst, c, len);
+}
 #endif
-#endif  /* ! WINRT */
 
 #ifdef SDL_BUILDING_WINRT
 EXTERN_C void error_dialog(const char *errorMsg);