Skip to content

Commit

Permalink
audio: Wired up new SSE code to build system.
Browse files Browse the repository at this point in the history
  • Loading branch information
icculus committed Jan 23, 2017
1 parent 202ab30 commit 3594bf8
Show file tree
Hide file tree
Showing 6 changed files with 132 additions and 14 deletions.
29 changes: 27 additions & 2 deletions CMakeLists.txt
Expand Up @@ -262,6 +262,7 @@ set_option(MMX "Use MMX assembly routines" ${OPT_DEF_ASM})
set_option(3DNOW "Use 3Dnow! MMX assembly routines" ${OPT_DEF_ASM})
set_option(SSE "Use SSE assembly routines" ${OPT_DEF_ASM})
set_option(SSE2 "Use SSE2 assembly routines" ${OPT_DEF_SSEMATH})
set_option(SSE3 "Use SSE3 assembly routines" ${OPT_DEF_SSEMATH})
set_option(ALTIVEC "Use Altivec assembly routines" ${OPT_DEF_ASM})
set_option(DISKAUDIO "Support the disk writer audio driver" ON)
set_option(DUMMYAUDIO "Support the dummy audio driver" ON)
Expand Down Expand Up @@ -516,8 +517,31 @@ if(ASSEMBLY)
set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
endif()

if(SSE3)
set(CMAKE_REQUIRED_FLAGS "-msse3")
check_c_source_compiles("
#ifdef __MINGW32__
#include <_mingw.h>
#ifdef __MINGW64_VERSION_MAJOR
#include <intrin.h>
#else
#include <pmmintrin.h>
#endif
#else
#include <pmmintrin.h>
#endif
#ifndef __SSE3__
#error Assembler CPP flag not enabled
#endif
int main(int argc, char **argv) { }" HAVE_SSE3)
if(HAVE_SSE3)
list(APPEND EXTRA_CFLAGS "-msse3")
endif()
set(CMAKE_REQUIRED_FLAGS ${ORIG_CMAKE_REQUIRED_FLAGS})
endif()

if(SSEMATH)
if(SSE OR SSE2)
if(SSE OR SSE2 OR SSE3)
if(USE_GCC)
list(APPEND EXTRA_CFLAGS "-mfpmath=387")
endif()
Expand Down Expand Up @@ -557,12 +581,13 @@ if(ASSEMBLY)
endif()
set(HAVE_SSE TRUE)
set(HAVE_SSE2 TRUE)
set(HAVE_SSE3 TRUE)
set(SDL_ASSEMBLY_ROUTINES 1)
endif()
# TODO:
#else()
# if(USE_GCC OR USE_CLANG)
# list(APPEND EXTRA_CFLAGS "-mno-sse" "-mno-sse2" "-mno-mmx")
# list(APPEND EXTRA_CFLAGS "-mno-sse" "-mno-sse2" "-mno-sse3" "-mno-mmx")
# endif()
endif()

Expand Down
61 changes: 60 additions & 1 deletion configure
Expand Up @@ -798,6 +798,7 @@ enable_mmx
enable_3dnow
enable_sse
enable_sse2
enable_sse3
enable_altivec
enable_oss
enable_alsa
Expand Down Expand Up @@ -1527,7 +1528,8 @@ Optional Features:
--enable-mmx use MMX assembly routines [[default=yes]]
--enable-3dnow use 3DNow! assembly routines [[default=yes]]
--enable-sse use SSE assembly routines [[default=yes]]
--enable-sse2 use SSE2 assembly routines [[default=no]]
--enable-sse2 use SSE2 assembly routines [[default=maybe]]
--enable-sse3 use SSE3 assembly routines [[default=maybe]]
--enable-altivec use Altivec assembly routines [[default=yes]]
--enable-oss support the OSS audio API [[default=maybe]]
--enable-alsa support the ALSA audio API [[default=yes]]
Expand Down Expand Up @@ -17308,6 +17310,63 @@ $as_echo "$have_gcc_sse2" >&6; }
fi
fi

# Check whether --enable-sse3 was given.
if test "${enable_sse3+set}" = set; then :
enableval=$enable_sse3;
else
enable_sse3=$default_ssemath
fi

if test x$enable_sse3 = xyes; then
save_CFLAGS="$CFLAGS"
have_gcc_sse3=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GCC -msse3 option" >&5
$as_echo_n "checking for GCC -msse3 option... " >&6; }
sse3_CFLAGS="-msse3"
CFLAGS="$save_CFLAGS $sse3_CFLAGS"

cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */

#ifdef __MINGW32__
#include <_mingw.h>
#ifdef __MINGW64_VERSION_MAJOR
#include <intrin.h>
#else
#include <pmmintrin.h>
#endif
#else
#include <pmmintrin.h>
#endif
#ifndef __SSE2__
#error Assembler CPP flag not enabled
#endif

int
main ()
{


;
return 0;
}
_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :

have_gcc_sse3=yes

fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_gcc_sse3" >&5
$as_echo "$have_gcc_sse3" >&6; }
CFLAGS="$save_CFLAGS"

if test x$have_gcc_sse3 = xyes; then
EXTRA_CFLAGS="$EXTRA_CFLAGS $sse3_CFLAGS"
SUMMARY_math="${SUMMARY_math} sse3"
fi
fi

# Check whether --enable-altivec was given.
if test "${enable_altivec+set}" = set; then :
enableval=$enable_altivec;
Expand Down
39 changes: 38 additions & 1 deletion configure.in
Expand Up @@ -593,7 +593,7 @@ AC_HELP_STRING([--enable-sse], [use SSE assembly routines [[default=yes]]]),
fi

AC_ARG_ENABLE(sse2,
AC_HELP_STRING([--enable-sse2], [use SSE2 assembly routines [[default=no]]]),
AC_HELP_STRING([--enable-sse2], [use SSE2 assembly routines [[default=maybe]]]),
, enable_sse2=$default_ssemath)
if test x$enable_sse2 = xyes; then
save_CFLAGS="$CFLAGS"
Expand Down Expand Up @@ -629,6 +629,43 @@ AC_HELP_STRING([--enable-sse2], [use SSE2 assembly routines [[default=no]]]),
fi
fi

AC_ARG_ENABLE(sse3,
AC_HELP_STRING([--enable-sse3], [use SSE3 assembly routines [[default=maybe]]]),
, enable_sse3=$default_ssemath)
if test x$enable_sse3 = xyes; then
save_CFLAGS="$CFLAGS"
have_gcc_sse3=no
AC_MSG_CHECKING(for GCC -msse3 option)
sse3_CFLAGS="-msse3"
CFLAGS="$save_CFLAGS $sse3_CFLAGS"

AC_TRY_COMPILE([
#ifdef __MINGW32__
#include <_mingw.h>
#ifdef __MINGW64_VERSION_MAJOR
#include <intrin.h>
#else
#include <pmmintrin.h>
#endif
#else
#include <pmmintrin.h>
#endif
#ifndef __SSE2__
#error Assembler CPP flag not enabled
#endif
],[
],[
have_gcc_sse3=yes
])
AC_MSG_RESULT($have_gcc_sse3)
CFLAGS="$save_CFLAGS"

if test x$have_gcc_sse3 = xyes; then
EXTRA_CFLAGS="$EXTRA_CFLAGS $sse3_CFLAGS"
SUMMARY_math="${SUMMARY_math} sse3"
fi
fi

AC_ARG_ENABLE(altivec,
AC_HELP_STRING([--enable-altivec], [use Altivec assembly routines [[default=yes]]]),
, enable_altivec=yes)
Expand Down
3 changes: 3 additions & 0 deletions include/SDL_cpuinfo.h
Expand Up @@ -61,6 +61,9 @@
#ifdef __SSE2__
#include <emmintrin.h>
#endif
#ifdef __SSE3__
#include <pmmintrin.h>
#endif
#endif

#include "begin_code.h"
Expand Down
7 changes: 2 additions & 5 deletions src/audio/SDL_audiocvt.c
Expand Up @@ -28,13 +28,10 @@
#include "SDL_loadso.h"
#include "SDL_assert.h"
#include "../SDL_dataqueue.h"

/* !!! FIXME: wire this up to the configure script, etc. */
#include "SDL_cpuinfo.h"
#define HAVE_SSE3_INTRINSICS 0

#if HAVE_SSE3_INTRINSICS
#include <pmmintrin.h>
#ifdef __SSE3__
#define HAVE_SSE3_INTRINSICS 1
#endif

#if HAVE_SSE3_INTRINSICS
Expand Down
7 changes: 2 additions & 5 deletions src/audio/SDL_audiotypecvt.c
Expand Up @@ -28,11 +28,8 @@
/* !!! FIXME: write NEON code. */
#define HAVE_NEON_INTRINSICS 0

/* !!! FIXME: wire this up to the configure script, etc. */
#define HAVE_SSE2_INTRINSICS 0

#if HAVE_SSE2_INTRINSICS
#include <emmintrin.h>
#ifdef __SSE2__
#define HAVE_SSE2_INTRINSICS 1
#endif

#if defined(__x86_64__) && HAVE_SSE2_INTRINSICS
Expand Down

0 comments on commit 3594bf8

Please sign in to comment.