--- a/VisualC/SDL/SDL.vcproj Fri Aug 17 02:55:21 2007 +0000
+++ b/VisualC/SDL/SDL.vcproj Fri Aug 17 03:22:03 2007 +0000
@@ -47,7 +47,7 @@
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="..\..\include"
- PreprocessorDefinitions="_DEBUG;_WINDOWS;_WIN32_WINNT=0x0400;__SSE__;__MMX__"
+ PreprocessorDefinitions="_DEBUG;_WINDOWS;_WIN32_WINNT=0x0400;__MMX__;__3dNOW__;__SSE__"
RuntimeLibrary="2"
BufferSecurityCheck="false"
UsePrecompiledHeader="0"
@@ -145,7 +145,7 @@
InlineFunctionExpansion="1"
EnableIntrinsicFunctions="false"
AdditionalIncludeDirectories="..\..\include"
- PreprocessorDefinitions="NDEBUG;_WINDOWS;_WIN32_WINNT=0x0400;__SSE__;__MMX__"
+ PreprocessorDefinitions="NDEBUG;_WINDOWS;_WIN32_WINNT=0x0400;__MMX__;__3dNOW__;__SSE__"
StringPooling="true"
RuntimeLibrary="2"
BufferSecurityCheck="false"
--- a/configure.in Fri Aug 17 02:55:21 2007 +0000
+++ b/configure.in Fri Aug 17 03:22:03 2007 +0000
@@ -290,6 +290,9 @@
AC_TRY_COMPILE([
#include <mmintrin.h>
+ #ifndef __MMX__
+ #error Assembler CPP flag not enabled
+ #endif
],[
],[
have_gcc_mmx=yes
@@ -301,6 +304,32 @@
fi
fi
+ AC_ARG_ENABLE(3dnow,
+AC_HELP_STRING([--enable-3dnow], [use MMX assembly routines [[default=yes]]]),
+ , enable_3dnow=yes)
+ if test x$enable_3dnow = xyes; then
+ save_CFLAGS="$CFLAGS"
+ have_gcc_3dnow=no
+ AC_MSG_CHECKING(for GCC -m3dnow option)
+ amd3dnow_CFLAGS="-m3dnow"
+ CFLAGS="$save_CFLAGS $amd3dnow_CFLAGS"
+
+ AC_TRY_COMPILE([
+ #include <mm3dnow.h>
+ #ifndef __3dNOW__
+ #error Assembler CPP flag not enabled
+ #endif
+ ],[
+ ],[
+ have_gcc_3dnow=yes
+ ])
+ AC_MSG_RESULT($have_gcc_3dnow)
+
+ if test x$have_gcc_3dnow = xyes; then
+ EXTRA_CFLAGS="$EXTRA_CFLAGS $amd3dnow_CFLAGS"
+ fi
+ fi
+
AC_ARG_ENABLE(sse,
AC_HELP_STRING([--enable-sse], [use SSE assembly routines [[default=yes]]]),
, enable_sse=yes)
@@ -313,6 +342,9 @@
AC_TRY_COMPILE([
#include <xmmintrin.h>
+ #ifndef __SSE__
+ #error Assembler CPP flag not enabled
+ #endif
],[
],[
have_gcc_sse=yes
--- a/src/video/SDL_blit.h Fri Aug 17 02:55:21 2007 +0000
+++ b/src/video/SDL_blit.h Fri Aug 17 03:22:03 2007 +0000
@@ -27,6 +27,9 @@
#ifdef __MMX__
#include <mmintrin.h>
#endif
+#ifdef __3dNOW__
+#include <mm3dnow.h>
+#endif
#ifdef __SSE__
#include <xmmintrin.h>
#endif
--- a/src/video/SDL_blit_A.c Fri Aug 17 02:55:21 2007 +0000
+++ b/src/video/SDL_blit_A.c Fri Aug 17 03:22:03 2007 +0000
@@ -1369,7 +1369,7 @@
}
}
-#ifdef __MMX__
+#ifdef __3dNOW__
/* fast (as in MMX with prefetch) ARGB888->(A)RGB888 blending with pixel alpha */
static void
BlitRGBtoRGBPixelAlphaMMX3DNOW(SDL_BlitInfo * info)
@@ -2250,17 +2250,21 @@
if (sf->Rmask == df->Rmask
&& sf->Gmask == df->Gmask
&& sf->Bmask == df->Bmask && sf->BytesPerPixel == 4) {
-#ifdef __MMX__
+#if defined(__MMX__) || defined(__3dNOW__)
if (sf->Rshift % 8 == 0
&& sf->Gshift % 8 == 0
&& sf->Bshift % 8 == 0
&& sf->Ashift % 8 == 0 && sf->Aloss == 0) {
+#ifdef __3dNOW__
if (SDL_Has3DNow())
return BlitRGBtoRGBPixelAlphaMMX3DNOW;
+#endif
+#ifdef __MMX__
if (SDL_HasMMX())
return BlitRGBtoRGBPixelAlphaMMX;
+#endif
}
-#endif
+#endif /* __MMX__ || __3dNOW__ */
if (sf->Amask == 0xff000000) {
#if SDL_ALTIVEC_BLITTERS
if (SDL_HasAltiVec())