Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Enabled 3DNow! intrinsic support
- Loading branch information
Showing
with
44 additions
and
5 deletions.
-
+2
−2
VisualC/SDL/SDL.vcproj
-
+32
−0
configure.in
-
+3
−0
src/video/SDL_blit.h
-
+7
−3
src/video/SDL_blit_A.c
|
@@ -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" |
|
|
|
@@ -290,6 +290,9 @@ AC_HELP_STRING([--enable-mmx], [use MMX assembly routines [[default=yes]]]), |
|
|
|
|
|
AC_TRY_COMPILE([ |
|
|
#include <mmintrin.h> |
|
|
#ifndef __MMX__ |
|
|
#error Assembler CPP flag not enabled |
|
|
#endif |
|
|
],[ |
|
|
],[ |
|
|
have_gcc_mmx=yes |
|
@@ -301,6 +304,32 @@ AC_HELP_STRING([--enable-mmx], [use MMX assembly routines [[default=yes]]]), |
|
|
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_HELP_STRING([--enable-sse], [use SSE assembly routines [[default=yes]]]), |
|
|
|
|
|
AC_TRY_COMPILE([ |
|
|
#include <xmmintrin.h> |
|
|
#ifndef __SSE__ |
|
|
#error Assembler CPP flag not enabled |
|
|
#endif |
|
|
],[ |
|
|
],[ |
|
|
have_gcc_sse=yes |
|
|
|
@@ -27,6 +27,9 @@ |
|
|
#ifdef __MMX__ |
|
|
#include <mmintrin.h> |
|
|
#endif |
|
|
#ifdef __3dNOW__ |
|
|
#include <mm3dnow.h> |
|
|
#endif |
|
|
#ifdef __SSE__ |
|
|
#include <xmmintrin.h> |
|
|
#endif |
|
|
|
@@ -1369,7 +1369,7 @@ BlitRGBtoRGBPixelAlpha(SDL_BlitInfo * info) |
|
|
} |
|
|
} |
|
|
|
|
|
#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 @@ SDL_CalculateAlphaBlit(SDL_Surface * surface, int blit_index) |
|
|
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 /* __MMX__ || __3dNOW__ */ |
|
|
if (sf->Amask == 0xff000000) { |
|
|
#if SDL_ALTIVEC_BLITTERS |
|
|
if (SDL_HasAltiVec()) |
|
|