Browse Source

SDL_blit_copy: Don't call potentially FPU using SDL_memcpy in SDL_memcpyMMX

Anonymous Maarten 2 years ago
parent
commit
9ada9daf51
2 changed files with 6 additions and 5 deletions
  1. 0 3
      CMakeLists.txt
  2. 6 2
      src/video/SDL_blit_copy.c

+ 0 - 3
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()
 

+ 6 - 2
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++;
+        }
     }
 }