evas: add SSE3 support
Readme entry configure --[enable/disable]-cpu-sse3 processor capability test Patch by: Jim Kukunas <james.t.kukunas@linux.intel.com> SVN revision: 63697
This commit is contained in:
parent
17881b57a4
commit
eec4b913ea
|
@ -416,6 +416,12 @@ ALTIVEC asm routines yet. :) arm owners will also have to rely on the c
|
||||||
fallback routines as i haven't managed to come up with any arm assembly that
|
fallback routines as i haven't managed to come up with any arm assembly that
|
||||||
actually can beat the c code (when compiled with all optimizations) in speed.
|
actually can beat the c code (when compiled with all optimizations) in speed.
|
||||||
|
|
||||||
|
--enable-cpu-sse3
|
||||||
|
|
||||||
|
this enables sse3 optimizations available in the Intel Pentium4, Core, Xeon,
|
||||||
|
and Atom processors, as well as the AMD Athlon64, Phenom, Opteron, and Turion
|
||||||
|
processors.
|
||||||
|
|
||||||
|
|
||||||
--enable-cpu-neon
|
--enable-cpu-neon
|
||||||
|
|
||||||
|
|
|
@ -1219,6 +1219,49 @@ AC_ARG_ENABLE(cpu-sse,
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
#######################################
|
||||||
|
## SSE3
|
||||||
|
build_cpu_sse3="no"
|
||||||
|
case $host_cpu in
|
||||||
|
i*86)
|
||||||
|
build_cpu_sse3="yes"
|
||||||
|
;;
|
||||||
|
x86_64)
|
||||||
|
build_cpu_sse3="yes"
|
||||||
|
;;
|
||||||
|
amd64)
|
||||||
|
build_cpu_sse3="yes"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
AC_MSG_CHECKING(whether to build sse3 code)
|
||||||
|
AC_ARG_ENABLE(cpu-sse3,
|
||||||
|
AS_HELP_STRING([--enable-cpu-sse3],[enable sse3 code]),
|
||||||
|
[
|
||||||
|
if test "x$enableval" = "xyes" ; then
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
AC_DEFINE(BUILD_SSE3, 1, [Build SSE3 Code])
|
||||||
|
build_cpu_sse3="yes"
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
build_cpu_sse3="no"
|
||||||
|
fi
|
||||||
|
],
|
||||||
|
[
|
||||||
|
AC_MSG_RESULT($build_cpu_sse3)
|
||||||
|
if test "x$build_cpu_sse3" = "xyes" ; then
|
||||||
|
AC_DEFINE(BUILD_SSE3, 1, [Build SSE3 Code])
|
||||||
|
fi
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
EVAS_SSE3_CFLAGS="-msse3 "
|
||||||
|
if test "x$build_cpu_sse3" = "xyes" ; then
|
||||||
|
CFLAGS="${CFLAGS} ${EVAS_SSE3_CFLAGS}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_SUBST(CFLAGS)
|
||||||
|
|
||||||
#######################################
|
#######################################
|
||||||
## ALTIVEC
|
## ALTIVEC
|
||||||
build_cpu_altivec="no"
|
build_cpu_altivec="no"
|
||||||
|
@ -1883,6 +1926,7 @@ echo "CPU Specific Extensions:"
|
||||||
echo " Fallback C Code.........: $build_cpu_c"
|
echo " Fallback C Code.........: $build_cpu_c"
|
||||||
echo " MMX.....................: $build_cpu_mmx"
|
echo " MMX.....................: $build_cpu_mmx"
|
||||||
echo " SSE.....................: $build_cpu_sse"
|
echo " SSE.....................: $build_cpu_sse"
|
||||||
|
echo " SSE3....................: $build_cpu_sse3"
|
||||||
echo " ALTIVEC.................: $build_cpu_altivec"
|
echo " ALTIVEC.................: $build_cpu_altivec"
|
||||||
echo " NEON....................: $build_cpu_neon"
|
echo " NEON....................: $build_cpu_neon"
|
||||||
echo " Thread Support..........: $build_pthreads"
|
echo " Thread Support..........: $build_pthreads"
|
||||||
|
|
|
@ -3,6 +3,10 @@
|
||||||
#include "evas_mmx.h"
|
#include "evas_mmx.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined BUILD_SSE3
|
||||||
|
#include <immintrin.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined (HAVE_STRUCT_SIGACTION) && defined (HAVE_SIGLONGJMP)
|
#if defined (HAVE_STRUCT_SIGACTION) && defined (HAVE_SIGLONGJMP)
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
|
@ -60,6 +64,16 @@ evas_common_cpu_sse_test(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
evas_common_cpu_sse3_test(void)
|
||||||
|
{
|
||||||
|
#ifdef BUILD_SSE3
|
||||||
|
int data[4];
|
||||||
|
|
||||||
|
__m128i val = _mm_lddqu_si128((__m128i *)data);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
evas_common_cpu_altivec_test(void)
|
evas_common_cpu_altivec_test(void)
|
||||||
{
|
{
|
||||||
|
@ -154,6 +168,13 @@ evas_common_cpu_init(void)
|
||||||
evas_common_cpu_end_opt();
|
evas_common_cpu_end_opt();
|
||||||
if (getenv("EVAS_CPU_NO_SSE"))
|
if (getenv("EVAS_CPU_NO_SSE"))
|
||||||
cpu_feature_mask &= ~CPU_FEATURE_SSE;
|
cpu_feature_mask &= ~CPU_FEATURE_SSE;
|
||||||
|
#ifdef BUILD_SSE3
|
||||||
|
cpu_feature_mask |= CPU_FEATURE_SSE3 *
|
||||||
|
evas_common_cpu_feature_test(evas_common_cpu_sse3_test);
|
||||||
|
evas_common_cpu_end_opt();
|
||||||
|
if(getenv("EVAS_CPU_NO_SSE3"))
|
||||||
|
cpu_feature_mask &= ~CPU_FEATURE_SSE3;
|
||||||
|
#endif /* BUILD_SSE3 */
|
||||||
#endif /* BUILD_SSE */
|
#endif /* BUILD_SSE */
|
||||||
#endif /* BUILD_MMX */
|
#endif /* BUILD_MMX */
|
||||||
#ifdef __POWERPC__
|
#ifdef __POWERPC__
|
||||||
|
|
|
@ -67,8 +67,10 @@
|
||||||
#define CPU_SSE2 4
|
#define CPU_SSE2 4
|
||||||
/* cpu flags count */
|
/* cpu flags count */
|
||||||
#define CPU_NEON 5
|
#define CPU_NEON 5
|
||||||
|
/* CPU SSE3 */
|
||||||
|
#define CPU_SSE3 6
|
||||||
/* cpu flags count */
|
/* cpu flags count */
|
||||||
#define CPU_LAST 6
|
#define CPU_LAST 7
|
||||||
|
|
||||||
|
|
||||||
/* some useful constants */
|
/* some useful constants */
|
||||||
|
|
|
@ -458,7 +458,8 @@ typedef enum _CPU_Features
|
||||||
CPU_FEATURE_ALTIVEC = (1 << 3),
|
CPU_FEATURE_ALTIVEC = (1 << 3),
|
||||||
CPU_FEATURE_VIS = (1 << 4),
|
CPU_FEATURE_VIS = (1 << 4),
|
||||||
CPU_FEATURE_VIS2 = (1 << 5),
|
CPU_FEATURE_VIS2 = (1 << 5),
|
||||||
CPU_FEATURE_NEON = (1 << 6)
|
CPU_FEATURE_NEON = (1 << 6),
|
||||||
|
CPU_FEATURE_SSE3 = (1 << 7)
|
||||||
} CPU_Features;
|
} CPU_Features;
|
||||||
|
|
||||||
typedef enum _Font_Hint_Flags
|
typedef enum _Font_Hint_Flags
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
|
|
||||||
/*#define BUILD_MMX*/
|
/*#define BUILD_MMX*/
|
||||||
/*#define BUILD_SSE*/
|
/*#define BUILD_SSE*/
|
||||||
|
/*#define BUILD_SSE3*/
|
||||||
/*#define BUILD_C*/
|
/*#define BUILD_C*/
|
||||||
|
|
||||||
/*#define BUILD_LOADER_PNG*/
|
/*#define BUILD_LOADER_PNG*/
|
||||||
|
@ -54,9 +55,11 @@
|
||||||
|
|
||||||
/* check in that the user configured it right */
|
/* check in that the user configured it right */
|
||||||
#ifndef BUILD_MMX
|
#ifndef BUILD_MMX
|
||||||
# ifndef BUILD_SSE
|
# ifndef BUILD_SSE3
|
||||||
# ifndef BUILD_C
|
# ifndef BUILD_SSE
|
||||||
|
# ifndef BUILD_C
|
||||||
# error "Please Read the README"
|
# error "Please Read the README"
|
||||||
|
#endif
|
||||||
# endif
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue