isolate sse3 to only its own file, so it only uses -msse3 for that
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 3 Oct 2011 04:44:23 +0000 (04:44 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Mon, 3 Oct 2011 04:44:23 +0000 (04:44 +0000)
git-svn-id: http://svn.enlightenment.org/svn/e/trunk/evas@63762 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

configure.ac
src/lib/engines/common/Makefile.am
src/lib/engines/common/evas_cpu.c
src/lib/engines/common/evas_op_blend/Makefile.am
src/lib/engines/common/evas_op_blend/op_blend_master_sse3.c [new file with mode: 0644]
src/lib/engines/common/evas_op_blend_main_.c
src/lib/include/evas_blend_ops.h

index 10496b2..f26cc27 100644 (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
index 5a059b8..9c9918d 100644 (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
index 4c84de5..cff8b2b 100644 (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
 }
 
index e3ed139..84add38 100644 (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
+
diff --git a/src/lib/engines/common/evas_op_blend/op_blend_master_sse3.c b/src/lib/engines/common/evas_op_blend/op_blend_master_sse3.c
new file mode 100644 (file)
index 0000000..0066589
--- /dev/null
@@ -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   
+}
index d358d12..a1a5de8 100644 (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();
index bc4b81c..1429596 100644 (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;
@@ -370,5 +373,6 @@ mul3_sym_sse3(__m128i x, __m128i y) {
 
 
 #endif
+#endif
 
 #endif