# HG changeset patch # User Sam Lantinga # Date 1187320923 0 # Node ID c20476d7d7b35510d883adf39a8f3b38d6c8fa10 # Parent 202ddfd1cfb12cd80041430b86990f1b125f4c16 Enabled 3DNow! intrinsic support diff -r 202ddfd1cfb1 -r c20476d7d7b3 VisualC/SDL/SDL.vcproj --- 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" diff -r 202ddfd1cfb1 -r c20476d7d7b3 configure.in --- 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 + #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 + #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 + #ifndef __SSE__ + #error Assembler CPP flag not enabled + #endif ],[ ],[ have_gcc_sse=yes diff -r 202ddfd1cfb1 -r c20476d7d7b3 src/video/SDL_blit.h --- 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 #endif +#ifdef __3dNOW__ +#include +#endif #ifdef __SSE__ #include #endif diff -r 202ddfd1cfb1 -r c20476d7d7b3 src/video/SDL_blit_A.c --- 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())