From 9ada9daf51cc952fe05751b00a50f4cf0f377e6f Mon Sep 17 00:00:00 2001
From: Anonymous Maarten <[EMAIL REDACTED]>
Date: Sat, 25 Mar 2023 07:07:49 +0100
Subject: [PATCH] SDL_blit_copy: Don't call potentially FPU using SDL_memcpy in
SDL_memcpyMMX
---
CMakeLists.txt | 3 ---
src/video/SDL_blit_copy.c | 8 ++++++--
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 25480ac8ab7e..a4d963263bba 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -508,16 +508,13 @@ if(USE_INTELCC)
# warning #39: division by zero
# warning #239: floating point underflow
# warning #264: floating-point value does not fit in required floating-point type
- # warning #13203: No EMMS instruction before call to function
set_property(SOURCE "${SDL3_SOURCE_DIR}/src/libm/e_exp.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -wd239 -wd264")
set_property(SOURCE "${SDL3_SOURCE_DIR}/src/libm/e_log.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -wd39")
set_property(SOURCE "${SDL3_SOURCE_DIR}/src/libm/e_log10.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -wd39")
- set_property(SOURCE "${SDL3_SOURCE_DIR}/src/video/SDL_blit_copy.c" APPEND_STRING PROPERTY COMPILE_FLAGS " -wd13203")
set_property(SOURCE
"${SDL3_SOURCE_DIR}/src/libm/e_exp.c"
"${SDL3_SOURCE_DIR}/src/libm/e_log.c"
"${SDL3_SOURCE_DIR}/src/libm/e_log10.c"
- "${SDL3_SOURCE_DIR}/src/libm/SDL_blit_copy.c"
PROPERTY SKIP_PRECOMPILE_HEADERS 1)
endif()
diff --git a/src/video/SDL_blit_copy.c b/src/video/SDL_blit_copy.c
index af1df2395e41..2c34a8362cec 100644
--- a/src/video/SDL_blit_copy.c
+++ b/src/video/SDL_blit_copy.c
@@ -56,7 +56,7 @@ static SDL_INLINE void SDL_TARGETING("sse") SDL_memcpySSE(Uint8 *dst, const Uint
#endif
static SDL_INLINE void SDL_TARGETING("mmx") SDL_memcpyMMX(Uint8 *dst, const Uint8 *src, int len)
{
- const int remain = (len & 63);
+ int remain = len & 63;
int i;
__m64 *d64 = (__m64 *)dst;
@@ -78,7 +78,11 @@ static SDL_INLINE void SDL_TARGETING("mmx") SDL_memcpyMMX(Uint8 *dst, const Uint
if (remain) {
const int skip = len - remain;
- SDL_memcpy(dst + skip, src + skip, remain);
+ dst += skip;
+ src += skip;
+ while (remain--) {
+ *dst++ = *src++;
+ }
}
}