From 9ada9daf51cc952fe05751b00a50f4cf0f377e6f Mon Sep 17 00:00:00 2001 From: Anonymous Maarten 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 25480ac8ab..a4d963263b 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 af1df2395e..2c34a8362c 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++; + } } }