isolate sse3 to only its own file, so it only uses -msse3 for that

SVN revision: 63762
This commit is contained in:
Carsten Haitzler 2011-10-03 04:44:23 +00:00
parent a57395a623
commit 2aed2cf20a
7 changed files with 129 additions and 52 deletions

View File

@ -1225,7 +1225,7 @@ AC_ARG_ENABLE(cpu-sse,
build_cpu_sse3="no"
case $host_cpu in
i*86)
build_cpu_sse3="no"
build_cpu_sse3="yes"
;;
x86_64)
build_cpu_sse3="yes"
@ -1269,12 +1269,14 @@ AC_ARG_ENABLE(cpu-sse3,
# you compile with -msse3. this ALSO tries to optimize REGULAR c code
# with sse3 asm.. and this breaks things so badly. so... sse3 will be
# off until further notice for 32bit x86.
EVAS_SSE3_CFLAGS="-msse3 "
EVAS_SSE3_CFLAGS=" "
if test "x$build_cpu_sse3" = "xyes" ; then
CFLAGS="${CFLAGS} ${EVAS_SSE3_CFLAGS}"
EVAS_SSE3_CFLAGS="-msse3 "
# CFLAGS="${CFLAGS} ${EVAS_SSE3_CFLAGS}"
fi
AC_SUBST(CFLAGS)
AC_SUBST(EVAS_SSE3_CFLAGS)
#######################################
## ALTIVEC

View File

@ -113,3 +113,6 @@ evas_map_image_loop.c
libevas_engine_common_la_DEPENDENCIES = \
$(top_builddir)/config.h
libevas_engine_common_la_LIBADD = \
evas_op_blend/libevas_engine_common_op_blend_master_sse3.la

View File

@ -64,13 +64,13 @@ evas_common_cpu_sse_test(void)
#endif
}
void evas_common_op_sse3_test(void);
void
evas_common_cpu_sse3_test(void)
{
#ifdef BUILD_SSE3
int data[4];
_mm_lddqu_si128((__m128i *)data);
evas_common_op_sse3_test();
#endif
}

View File

@ -21,3 +21,30 @@ op_blend_pixel_mask_neon.c \
op_blend_pixel_mask_sse3.c \
op_blend_pixel_neon.c \
op_blend_pixel_sse3.c
noinst_LTLIBRARIES = libevas_engine_common_op_blend_master_sse3.la
libevas_engine_common_op_blend_master_sse3_la_SOURCES = \
op_blend_master_sse3.c
libevas_engine_common_op_blend_master_sse3_la_CFLAGS = \
-I. \
-I$(top_srcdir)/src/lib \
-I$(top_srcdir)/src/lib/engines/common \
-I$(top_srcdir)/src/lib/engines/common/evas_op_blend \
-I$(top_srcdir)/src/lib/cserve \
-I$(top_srcdir)/src/lib/include \
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
@FREETYPE_CFLAGS@ @VALGRIND_CFLAGS@ \
@PIXMAN_CFLAGS@ \
@EET_CFLAGS@ @pthread_cflags@ \
@WIN32_CFLAGS@ @EINA_CFLAGS@ \
@FRIBIDI_CFLAGS@ @HARFBUZZ_CFLAGS@ \
@PIXMAN_CFLAGS@ \
@EVAS_SSE3_CFLAGS@
libevas_engine_common_op_blend_master_sse3_la_DEPENENCIES = \
$(top_builddir)/config.h

View File

@ -0,0 +1,72 @@
#define NEED_SSE3 1
#include "evas_common.h"
#ifdef BUILD_SSE3
static __m128i A_MASK_SSE3;
#endif
extern RGBA_Gfx_Func op_blend_span_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
extern RGBA_Gfx_Pt_Func op_blend_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
extern RGBA_Gfx_Func op_blend_rel_span_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
extern RGBA_Gfx_Pt_Func op_blend_rel_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
# include "op_blend_pixel_sse3.c"
# include "op_blend_color_sse3.c"
# include "op_blend_pixel_color_sse3.c"
# include "op_blend_pixel_mask_sse3.c"
# include "op_blend_mask_color_sse3.c"
void
evas_common_op_blend_init_sse3(void)
{
#ifdef BUILD_SSE3
GA_MASK_SSE3 = _mm_set_epi32(0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF);
RB_MASK_SSE3 = _mm_set_epi32(0xFF00FF00, 0xFF00FF00, 0xFF00FF00, 0xFF00FF00);
SYM4_MASK_SSE3 = _mm_set_epi32(0x00FF00FF, 0x000000FF, 0x00FF00FF, 0x000000FF);
RGB_MASK_SSE3 = _mm_set_epi32(0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF);
A_MASK_SSE3 = _mm_set_epi32(0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000);
ALPHA_SSE3 = _mm_set_epi32(256, 256, 256, 256);
init_blend_pixel_span_funcs_sse3();
init_blend_pixel_color_span_funcs_sse3();
init_blend_pixel_mask_span_funcs_sse3();
init_blend_color_span_funcs_sse3();
init_blend_mask_color_span_funcs_sse3();
init_blend_pixel_pt_funcs_sse3();
init_blend_pixel_color_pt_funcs_sse3();
init_blend_pixel_mask_pt_funcs_sse3();
init_blend_color_pt_funcs_sse3();
init_blend_mask_color_pt_funcs_sse3();
#endif
}
void
evas_common_op_blend_rel_init_sse3(void)
{
#ifdef BUILD_SSE3
init_blend_rel_pixel_span_funcs_sse3();
init_blend_rel_pixel_color_span_funcs_sse3();
init_blend_rel_pixel_mask_span_funcs_sse3();
init_blend_rel_color_span_funcs_sse3();
init_blend_rel_mask_color_span_funcs_sse3();
init_blend_rel_pixel_pt_funcs_sse3();
init_blend_rel_pixel_color_pt_funcs_sse3();
init_blend_rel_pixel_mask_pt_funcs_sse3();
init_blend_rel_color_pt_funcs_sse3();
init_blend_rel_mask_color_pt_funcs_sse3();
#endif
}
void
evas_common_op_sse3_test(void)
{
#ifdef BUILD_SSE3
int data[4];
_mm_lddqu_si128((__m128i *)data);
#endif
}

View File

@ -1,7 +1,7 @@
#include "evas_common.h"
static RGBA_Gfx_Func op_blend_span_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
static RGBA_Gfx_Pt_Func op_blend_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
RGBA_Gfx_Func op_blend_span_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
RGBA_Gfx_Pt_Func op_blend_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
static void op_blend_init(void);
static void op_blend_shutdown(void);
@ -35,8 +35,8 @@ evas_common_gfx_compositor_blend_get(void)
}
static RGBA_Gfx_Func op_blend_rel_span_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
static RGBA_Gfx_Pt_Func op_blend_rel_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
RGBA_Gfx_Func op_blend_rel_span_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
RGBA_Gfx_Pt_Func op_blend_rel_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
static void op_blend_rel_init(void);
static void op_blend_rel_shutdown(void);
@ -84,15 +84,6 @@ evas_common_gfx_compositor_blend_rel_get(void)
# include "./evas_op_blend/op_blend_mask_color_i386.c"
//# include "./evas_op_blend/op_blend_pixel_mask_color_i386.c"
#ifdef BUILD_SSE3
static __m128i A_MASK_SSE3;
#endif
# include "./evas_op_blend/op_blend_pixel_sse3.c"
# include "./evas_op_blend/op_blend_color_sse3.c"
# include "./evas_op_blend/op_blend_pixel_color_sse3.c"
# include "./evas_op_blend/op_blend_pixel_mask_sse3.c"
# include "./evas_op_blend/op_blend_mask_color_sse3.c"
# include "./evas_op_blend/op_blend_pixel_neon.c"
# include "./evas_op_blend/op_blend_color_neon.c"
# include "./evas_op_blend/op_blend_pixel_color_neon.c"
@ -100,30 +91,17 @@ static __m128i A_MASK_SSE3;
# include "./evas_op_blend/op_blend_mask_color_neon.c"
//# include "./evas_op_blend/op_blend_pixel_mask_color_neon.c"
#ifdef BUILD_SSE3
void evas_common_op_blend_init_sse3(void);
#endif
static void
op_blend_init(void)
{
memset(op_blend_span_funcs, 0, sizeof(op_blend_span_funcs));
memset(op_blend_pt_funcs, 0, sizeof(op_blend_pt_funcs));
#ifdef BUILD_SSE3
GA_MASK_SSE3 = _mm_set_epi32(0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF);
RB_MASK_SSE3 = _mm_set_epi32(0xFF00FF00, 0xFF00FF00, 0xFF00FF00, 0xFF00FF00);
SYM4_MASK_SSE3 = _mm_set_epi32(0x00FF00FF, 0x000000FF, 0x00FF00FF, 0x000000FF);
RGB_MASK_SSE3 = _mm_set_epi32(0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF);
A_MASK_SSE3 = _mm_set_epi32(0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000);
ALPHA_SSE3 = _mm_set_epi32(256, 256, 256, 256);
init_blend_pixel_span_funcs_sse3();
init_blend_pixel_color_span_funcs_sse3();
init_blend_pixel_mask_span_funcs_sse3();
init_blend_color_span_funcs_sse3();
init_blend_mask_color_span_funcs_sse3();
init_blend_pixel_pt_funcs_sse3();
init_blend_pixel_color_pt_funcs_sse3();
init_blend_pixel_mask_pt_funcs_sse3();
init_blend_color_pt_funcs_sse3();
init_blend_mask_color_pt_funcs_sse3();
evas_common_op_blend_init_sse3();
#endif
#ifdef BUILD_MMX
init_blend_pixel_span_funcs_mmx();
@ -406,6 +384,7 @@ op_blend_pixel_mask_pt_get(Image_Entry_Flags src_flags, RGBA_Image *dst)
return blend_gfx_pt_func_cpu(s, m, c, d);
}
void evas_common_op_blend_rel_init_sse3(void);
static void
op_blend_rel_init(void)
@ -413,17 +392,7 @@ op_blend_rel_init(void)
memset(op_blend_rel_span_funcs, 0, sizeof(op_blend_rel_span_funcs));
memset(op_blend_rel_pt_funcs, 0, sizeof(op_blend_rel_pt_funcs));
#ifdef BUILD_SSE3
init_blend_rel_pixel_span_funcs_sse3();
init_blend_rel_pixel_color_span_funcs_sse3();
init_blend_rel_pixel_mask_span_funcs_sse3();
init_blend_rel_color_span_funcs_sse3();
init_blend_rel_mask_color_span_funcs_sse3();
init_blend_rel_pixel_pt_funcs_sse3();
init_blend_rel_pixel_color_pt_funcs_sse3();
init_blend_rel_pixel_mask_pt_funcs_sse3();
init_blend_rel_color_pt_funcs_sse3();
init_blend_rel_mask_color_pt_funcs_sse3();
evas_common_op_blend_rel_init_sse3();
#endif
#ifdef BUILD_MMX
init_blend_rel_pixel_span_funcs_mmx();

View File

@ -5,12 +5,14 @@
#include "evas_mmx.h"
#endif
#if defined BUILD_SSE3
#include <immintrin.h>
#endif
#include "config.h"
#ifdef NEED_SSE3
# if defined BUILD_SSE3
# include <immintrin.h>
# endif
#endif
/* src pixel flags: */
/* pixels none */
@ -187,6 +189,7 @@ extern const DATA32 ALPHA_256;
/* some useful SSE3 inline functions */
#ifdef NEED_SSE3
#ifdef BUILD_SSE3
static __m128i GA_MASK_SSE3;
@ -369,6 +372,7 @@ mul3_sym_sse3(__m128i x, __m128i y) {
}
#endif
#endif
#endif