aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/engines/common/evas_op_blend
diff options
context:
space:
mode:
authorDavid Walter Seikel2013-01-13 17:29:19 +1000
committerDavid Walter Seikel2013-01-13 17:29:19 +1000
commit07274513e984f0b5544586c74508ccd16e7dcafa (patch)
treeb32ff2a9136fbc1a4a6a0ed1e4d79cde0f5f16d9 /libraries/evas/src/lib/engines/common/evas_op_blend
parentAdded Irrlicht 1.8, but without all the Windows binaries. (diff)
downloadSledjHamr-07274513e984f0b5544586c74508ccd16e7dcafa.zip
SledjHamr-07274513e984f0b5544586c74508ccd16e7dcafa.tar.gz
SledjHamr-07274513e984f0b5544586c74508ccd16e7dcafa.tar.bz2
SledjHamr-07274513e984f0b5544586c74508ccd16e7dcafa.tar.xz
Remove EFL, since it's been released now.
Diffstat (limited to 'libraries/evas/src/lib/engines/common/evas_op_blend')
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/Makefile.am46
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/Makefile.in721
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_.c109
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_i386.c138
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_neon.c223
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c167
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_.c185
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_i386.c251
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_neon.c562
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_sse3.c321
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_master_sse3.c77
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_.c162
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_.c284
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_i386.c221
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_neon.c570
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_sse3.c543
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_i386.c217
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_.c189
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_i386.c157
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_neon.c129
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_sse3.c300
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_neon.c530
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_sse3.c315
23 files changed, 0 insertions, 6417 deletions
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/Makefile.am b/libraries/evas/src/lib/engines/common/evas_op_blend/Makefile.am
deleted file mode 100644
index 77435c4..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/Makefile.am
+++ /dev/null
@@ -1,46 +0,0 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3EXTRA_DIST = \
4op_blend_color_.c \
5op_blend_color_i386.c \
6op_blend_color_neon.c \
7op_blend_color_sse3.c \
8op_blend_mask_color_.c \
9op_blend_mask_color_i386.c \
10op_blend_mask_color_neon.c \
11op_blend_mask_color_sse3.c \
12op_blend_pixel_.c \
13op_blend_pixel_color_.c \
14op_blend_pixel_color_i386.c \
15op_blend_pixel_color_neon.c \
16op_blend_pixel_color_sse3.c \
17op_blend_pixel_i386.c \
18op_blend_pixel_mask_.c \
19op_blend_pixel_mask_i386.c \
20op_blend_pixel_mask_neon.c \
21op_blend_pixel_mask_sse3.c \
22op_blend_pixel_neon.c \
23op_blend_pixel_sse3.c
24
25noinst_LTLIBRARIES = libevas_engine_common_op_blend_master_sse3.la
26
27libevas_engine_common_op_blend_master_sse3_la_SOURCES = \
28op_blend_master_sse3.c
29
30libevas_engine_common_op_blend_master_sse3_la_CFLAGS = \
31-I. \
32-I$(top_srcdir)/src/lib \
33-I$(top_srcdir)/src/lib/engines/common \
34-I$(top_srcdir)/src/lib/engines/common/evas_op_blend \
35-I$(top_srcdir)/src/lib/cserve \
36-I$(top_srcdir)/src/lib/include \
37-DPACKAGE_BIN_DIR=\"$(bindir)\" \
38-DPACKAGE_LIB_DIR=\"$(libdir)\" \
39-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
40@FREETYPE_CFLAGS@ @VALGRIND_CFLAGS@ \
41@PIXMAN_CFLAGS@ \
42@EET_CFLAGS@ @pthread_cflags@ \
43@EINA_CFLAGS@ \
44@FRIBIDI_CFLAGS@ @HARFBUZZ_CFLAGS@ \
45@PIXMAN_CFLAGS@ \
46@EVAS_SSE3_CFLAGS@
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/Makefile.in b/libraries/evas/src/lib/engines/common/evas_op_blend/Makefile.in
deleted file mode 100644
index 016b49c..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/Makefile.in
+++ /dev/null
@@ -1,721 +0,0 @@
1# Makefile.in generated by automake 1.11.1 from Makefile.am.
2# @configure_input@
3
4# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
5# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
6# Inc.
7# This Makefile.in is free software; the Free Software Foundation
8# gives unlimited permission to copy and/or distribute it,
9# with or without modifications, as long as this notice is preserved.
10
11# This program is distributed in the hope that it will be useful,
12# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
13# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
14# PARTICULAR PURPOSE.
15
16@SET_MAKE@
17
18VPATH = @srcdir@
19pkgdatadir = $(datadir)/@PACKAGE@
20pkgincludedir = $(includedir)/@PACKAGE@
21pkglibdir = $(libdir)/@PACKAGE@
22pkglibexecdir = $(libexecdir)/@PACKAGE@
23am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
24install_sh_DATA = $(install_sh) -c -m 644
25install_sh_PROGRAM = $(install_sh) -c
26install_sh_SCRIPT = $(install_sh) -c
27INSTALL_HEADER = $(INSTALL_DATA)
28transform = $(program_transform_name)
29NORMAL_INSTALL = :
30PRE_INSTALL = :
31POST_INSTALL = :
32NORMAL_UNINSTALL = :
33PRE_UNINSTALL = :
34POST_UNINSTALL = :
35build_triplet = @build@
36host_triplet = @host@
37subdir = src/lib/engines/common/evas_op_blend
38DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
39ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
40am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
41 $(top_srcdir)/m4/efl_coverage.m4 \
42 $(top_srcdir)/m4/efl_doxygen.m4 \
43 $(top_srcdir)/m4/efl_fnmatch.m4 \
44 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
45 $(top_srcdir)/m4/evas_check_engine.m4 \
46 $(top_srcdir)/m4/evas_check_loader.m4 \
47 $(top_srcdir)/m4/evas_converter.m4 \
48 $(top_srcdir)/m4/evas_dither.m4 \
49 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
50 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
51 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
52 $(top_srcdir)/configure.ac
53am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
54 $(ACLOCAL_M4)
55mkinstalldirs = $(install_sh) -d
56CONFIG_HEADER = $(top_builddir)/config.h
57CONFIG_CLEAN_FILES =
58CONFIG_CLEAN_VPATH_FILES =
59LTLIBRARIES = $(noinst_LTLIBRARIES)
60libevas_engine_common_op_blend_master_sse3_la_LIBADD =
61am_libevas_engine_common_op_blend_master_sse3_la_OBJECTS = libevas_engine_common_op_blend_master_sse3_la-op_blend_master_sse3.lo
62libevas_engine_common_op_blend_master_sse3_la_OBJECTS = \
63 $(am_libevas_engine_common_op_blend_master_sse3_la_OBJECTS)
64AM_V_lt = $(am__v_lt_$(V))
65am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
66am__v_lt_0 = --silent
67libevas_engine_common_op_blend_master_sse3_la_LINK = $(LIBTOOL) \
68 $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
69 --mode=link $(CCLD) \
70 $(libevas_engine_common_op_blend_master_sse3_la_CFLAGS) \
71 $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
72DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
73depcomp = $(SHELL) $(top_srcdir)/depcomp
74am__depfiles_maybe = depfiles
75am__mv = mv -f
76COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
77 $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
78LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
79 $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
80 $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
81 $(AM_CFLAGS) $(CFLAGS)
82AM_V_CC = $(am__v_CC_$(V))
83am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
84am__v_CC_0 = @echo " CC " $@;
85AM_V_at = $(am__v_at_$(V))
86am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
87am__v_at_0 = @
88CCLD = $(CC)
89LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
90 $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
91 $(AM_LDFLAGS) $(LDFLAGS) -o $@
92AM_V_CCLD = $(am__v_CCLD_$(V))
93am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
94am__v_CCLD_0 = @echo " CCLD " $@;
95AM_V_GEN = $(am__v_GEN_$(V))
96am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
97am__v_GEN_0 = @echo " GEN " $@;
98SOURCES = $(libevas_engine_common_op_blend_master_sse3_la_SOURCES)
99DIST_SOURCES = \
100 $(libevas_engine_common_op_blend_master_sse3_la_SOURCES)
101ETAGS = etags
102CTAGS = ctags
103DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
104ACLOCAL = @ACLOCAL@
105ALLOCA = @ALLOCA@
106AMTAR = @AMTAR@
107AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
108AR = @AR@
109AS = @AS@
110AUTOCONF = @AUTOCONF@
111AUTOHEADER = @AUTOHEADER@
112AUTOMAKE = @AUTOMAKE@
113AWK = @AWK@
114CC = @CC@
115CCDEPMODE = @CCDEPMODE@
116CFLAGS = @CFLAGS@
117CHECK_CFLAGS = @CHECK_CFLAGS@
118CHECK_LIBS = @CHECK_LIBS@
119CPP = @CPP@
120CPPFLAGS = @CPPFLAGS@
121CXX = @CXX@
122CXXCPP = @CXXCPP@
123CXXDEPMODE = @CXXDEPMODE@
124CXXFLAGS = @CXXFLAGS@
125CYGPATH_W = @CYGPATH_W@
126DEFS = @DEFS@
127DEPDIR = @DEPDIR@
128DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
129DIRECTFB_LIBS = @DIRECTFB_LIBS@
130DLLTOOL = @DLLTOOL@
131DSYMUTIL = @DSYMUTIL@
132DUMPBIN = @DUMPBIN@
133ECHO_C = @ECHO_C@
134ECHO_N = @ECHO_N@
135ECHO_T = @ECHO_T@
136ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
137ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
138EDB_CFLAGS = @EDB_CFLAGS@
139EDB_LIBS = @EDB_LIBS@
140EDJE_CFLAGS = @EDJE_CFLAGS@
141EDJE_LIBS = @EDJE_LIBS@
142EET_CFLAGS = @EET_CFLAGS@
143EET_LIBS = @EET_LIBS@
144EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
145EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
146EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
147EGREP = @EGREP@
148EINA_CFLAGS = @EINA_CFLAGS@
149EINA_LIBS = @EINA_LIBS@
150EVAS_CFLAGS = @EVAS_CFLAGS@
151EVAS_LIBS = @EVAS_LIBS@
152EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
153EVIL_CFLAGS = @EVIL_CFLAGS@
154EVIL_LIBS = @EVIL_LIBS@
155EXEEXT = @EXEEXT@
156EXOTIC_CFLAGS = @EXOTIC_CFLAGS@
157EXOTIC_LIBS = @EXOTIC_LIBS@
158FGREP = @FGREP@
159FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
160FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
161FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
162FREETYPE_LIBS = @FREETYPE_LIBS@
163FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
164FRIBIDI_LIBS = @FRIBIDI_LIBS@
165GL_EET_CFLAGS = @GL_EET_CFLAGS@
166GL_EET_LIBS = @GL_EET_LIBS@
167GREP = @GREP@
168HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
169HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
170INSTALL = @INSTALL@
171INSTALL_DATA = @INSTALL_DATA@
172INSTALL_PROGRAM = @INSTALL_PROGRAM@
173INSTALL_SCRIPT = @INSTALL_SCRIPT@
174INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
175LD = @LD@
176LDFLAGS = @LDFLAGS@
177LIBOBJS = @LIBOBJS@
178LIBS = @LIBS@
179LIBTOOL = @LIBTOOL@
180LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
181LINEBREAK_LIBS = @LINEBREAK_LIBS@
182LIPO = @LIPO@
183LN_S = @LN_S@
184LTLIBOBJS = @LTLIBOBJS@
185MAKEINFO = @MAKEINFO@
186MKDIR_P = @MKDIR_P@
187MODULE_ARCH = @MODULE_ARCH@
188NM = @NM@
189NMEDIT = @NMEDIT@
190OBJC = @OBJC@
191OBJCDEPMODE = @OBJCDEPMODE@
192OBJCFLAGS = @OBJCFLAGS@
193OBJDUMP = @OBJDUMP@
194OBJEXT = @OBJEXT@
195OTOOL = @OTOOL@
196OTOOL64 = @OTOOL64@
197PACKAGE = @PACKAGE@
198PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
199PACKAGE_NAME = @PACKAGE_NAME@
200PACKAGE_STRING = @PACKAGE_STRING@
201PACKAGE_TARNAME = @PACKAGE_TARNAME@
202PACKAGE_URL = @PACKAGE_URL@
203PACKAGE_VERSION = @PACKAGE_VERSION@
204PATH_SEPARATOR = @PATH_SEPARATOR@
205PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
206PIXMAN_LIBS = @PIXMAN_LIBS@
207PKG_CONFIG = @PKG_CONFIG@
208PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
209PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
210PNG_CFLAGS = @PNG_CFLAGS@
211PNG_LIBS = @PNG_LIBS@
212RANLIB = @RANLIB@
213SDL_CFLAGS = @SDL_CFLAGS@
214SDL_LIBS = @SDL_LIBS@
215SED = @SED@
216SET_MAKE = @SET_MAKE@
217SHELL = @SHELL@
218SHM_OPEN_LINK = @SHM_OPEN_LINK@
219STRIP = @STRIP@
220SVG_CFLAGS = @SVG_CFLAGS@
221SVG_LIBS = @SVG_LIBS@
222VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
223VALGRIND_LIBS = @VALGRIND_LIBS@
224VERSION = @VERSION@
225VMAJ = @VMAJ@
226WAYLAND_EGL_CFLAGS = @WAYLAND_EGL_CFLAGS@
227WAYLAND_EGL_LIBS = @WAYLAND_EGL_LIBS@
228XCB_CFLAGS = @XCB_CFLAGS@
229XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
230XCB_GL_LIBS = @XCB_GL_LIBS@
231XCB_LIBS = @XCB_LIBS@
232XEXT_CFLAGS = @XEXT_CFLAGS@
233XEXT_LIBS = @XEXT_LIBS@
234XMKMF = @XMKMF@
235X_CFLAGS = @X_CFLAGS@
236X_EXTRA_LIBS = @X_EXTRA_LIBS@
237X_LIBS = @X_LIBS@
238X_PRE_LIBS = @X_PRE_LIBS@
239abs_builddir = @abs_builddir@
240abs_srcdir = @abs_srcdir@
241abs_top_builddir = @abs_top_builddir@
242abs_top_srcdir = @abs_top_srcdir@
243ac_ct_CC = @ac_ct_CC@
244ac_ct_CXX = @ac_ct_CXX@
245ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
246ac_ct_OBJC = @ac_ct_OBJC@
247altivec_cflags = @altivec_cflags@
248am__include = @am__include@
249am__leading_dot = @am__leading_dot@
250am__quote = @am__quote@
251am__tar = @am__tar@
252am__untar = @am__untar@
253bindir = @bindir@
254build = @build@
255build_alias = @build_alias@
256build_cpu = @build_cpu@
257build_os = @build_os@
258build_vendor = @build_vendor@
259builddir = @builddir@
260datadir = @datadir@
261datarootdir = @datarootdir@
262dlopen_libs = @dlopen_libs@
263docdir = @docdir@
264dvidir = @dvidir@
265edje_cc = @edje_cc@
266efl_doxygen = @efl_doxygen@
267efl_have_doxygen = @efl_have_doxygen@
268evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
269evas_engine_buffer_libs = @evas_engine_buffer_libs@
270evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
271evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
272evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
273evas_engine_directfb_libs = @evas_engine_directfb_libs@
274evas_engine_fb_cflags = @evas_engine_fb_cflags@
275evas_engine_fb_libs = @evas_engine_fb_libs@
276evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
277evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
278evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
279evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
280evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
281evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
282evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
283evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
284evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
285evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
286evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
287evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
288evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
289evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
290evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
291evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
292evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
293evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
294evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
295evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
296evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
297evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
298evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
299evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
300evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
301evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
302evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
303evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
304evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
305evas_engine_wayland_egl_cflags = @evas_engine_wayland_egl_cflags@
306evas_engine_wayland_egl_libs = @evas_engine_wayland_egl_libs@
307evas_engine_wayland_shm_cflags = @evas_engine_wayland_shm_cflags@
308evas_engine_wayland_shm_libs = @evas_engine_wayland_shm_libs@
309evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
310evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
311evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
312evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
313evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
314evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
315evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
316evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
317evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
318evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
319evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
320evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
321evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
322evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
323evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
324evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
325evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
326evas_image_loader_png_libs = @evas_image_loader_png_libs@
327evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
328evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
329evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
330evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
331evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
332evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
333evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
334evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
335evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
336evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
337evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
338evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
339exec_prefix = @exec_prefix@
340have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
341have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
342have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
343have_evas_engine_software_x11 = @have_evas_engine_software_x11@
344have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
345have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
346have_lcov = @have_lcov@
347host = @host@
348host_alias = @host_alias@
349host_cpu = @host_cpu@
350host_os = @host_os@
351host_vendor = @host_vendor@
352htmldir = @htmldir@
353includedir = @includedir@
354infodir = @infodir@
355install_sh = @install_sh@
356libdir = @libdir@
357libexecdir = @libexecdir@
358localedir = @localedir@
359localstatedir = @localstatedir@
360lt_ECHO = @lt_ECHO@
361lt_enable_auto_import = @lt_enable_auto_import@
362mandir = @mandir@
363mkdir_p = @mkdir_p@
364oldincludedir = @oldincludedir@
365pdfdir = @pdfdir@
366pkgconfig_requires_private = @pkgconfig_requires_private@
367prefix = @prefix@
368program_transform_name = @program_transform_name@
369psdir = @psdir@
370pthread_cflags = @pthread_cflags@
371pthread_libs = @pthread_libs@
372release_info = @release_info@
373requirement_evas = @requirement_evas@
374sbindir = @sbindir@
375sharedstatedir = @sharedstatedir@
376srcdir = @srcdir@
377sysconfdir = @sysconfdir@
378target_alias = @target_alias@
379top_build_prefix = @top_build_prefix@
380top_builddir = @top_builddir@
381top_srcdir = @top_srcdir@
382version_info = @version_info@
383MAINTAINERCLEANFILES = Makefile.in
384EXTRA_DIST = \
385op_blend_color_.c \
386op_blend_color_i386.c \
387op_blend_color_neon.c \
388op_blend_color_sse3.c \
389op_blend_mask_color_.c \
390op_blend_mask_color_i386.c \
391op_blend_mask_color_neon.c \
392op_blend_mask_color_sse3.c \
393op_blend_pixel_.c \
394op_blend_pixel_color_.c \
395op_blend_pixel_color_i386.c \
396op_blend_pixel_color_neon.c \
397op_blend_pixel_color_sse3.c \
398op_blend_pixel_i386.c \
399op_blend_pixel_mask_.c \
400op_blend_pixel_mask_i386.c \
401op_blend_pixel_mask_neon.c \
402op_blend_pixel_mask_sse3.c \
403op_blend_pixel_neon.c \
404op_blend_pixel_sse3.c
405
406noinst_LTLIBRARIES = libevas_engine_common_op_blend_master_sse3.la
407libevas_engine_common_op_blend_master_sse3_la_SOURCES = \
408op_blend_master_sse3.c
409
410libevas_engine_common_op_blend_master_sse3_la_CFLAGS = \
411-I. \
412-I$(top_srcdir)/src/lib \
413-I$(top_srcdir)/src/lib/engines/common \
414-I$(top_srcdir)/src/lib/engines/common/evas_op_blend \
415-I$(top_srcdir)/src/lib/cserve \
416-I$(top_srcdir)/src/lib/include \
417-DPACKAGE_BIN_DIR=\"$(bindir)\" \
418-DPACKAGE_LIB_DIR=\"$(libdir)\" \
419-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
420@FREETYPE_CFLAGS@ @VALGRIND_CFLAGS@ \
421@PIXMAN_CFLAGS@ \
422@EET_CFLAGS@ @pthread_cflags@ \
423@EINA_CFLAGS@ \
424@FRIBIDI_CFLAGS@ @HARFBUZZ_CFLAGS@ \
425@PIXMAN_CFLAGS@ \
426@EVAS_SSE3_CFLAGS@
427
428all: all-am
429
430.SUFFIXES:
431.SUFFIXES: .c .lo .o .obj
432$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
433 @for dep in $?; do \
434 case '$(am__configure_deps)' in \
435 *$$dep*) \
436 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
437 && { if test -f $@; then exit 0; else break; fi; }; \
438 exit 1;; \
439 esac; \
440 done; \
441 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/lib/engines/common/evas_op_blend/Makefile'; \
442 $(am__cd) $(top_srcdir) && \
443 $(AUTOMAKE) --gnu src/lib/engines/common/evas_op_blend/Makefile
444.PRECIOUS: Makefile
445Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
446 @case '$?' in \
447 *config.status*) \
448 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
449 *) \
450 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
451 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
452 esac;
453
454$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
455 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
456
457$(top_srcdir)/configure: $(am__configure_deps)
458 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
459$(ACLOCAL_M4): $(am__aclocal_m4_deps)
460 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
461$(am__aclocal_m4_deps):
462
463clean-noinstLTLIBRARIES:
464 -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
465 @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
466 dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
467 test "$$dir" != "$$p" || dir=.; \
468 echo "rm -f \"$${dir}/so_locations\""; \
469 rm -f "$${dir}/so_locations"; \
470 done
471libevas_engine_common_op_blend_master_sse3.la: $(libevas_engine_common_op_blend_master_sse3_la_OBJECTS) $(libevas_engine_common_op_blend_master_sse3_la_DEPENDENCIES)
472 $(AM_V_CCLD)$(libevas_engine_common_op_blend_master_sse3_la_LINK) $(libevas_engine_common_op_blend_master_sse3_la_OBJECTS) $(libevas_engine_common_op_blend_master_sse3_la_LIBADD) $(LIBS)
473
474mostlyclean-compile:
475 -rm -f *.$(OBJEXT)
476
477distclean-compile:
478 -rm -f *.tab.c
479
480@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libevas_engine_common_op_blend_master_sse3_la-op_blend_master_sse3.Plo@am__quote@
481
482.c.o:
483@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
484@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
485@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
486@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
487@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
488@am__fastdepCC_FALSE@ $(COMPILE) -c $<
489
490.c.obj:
491@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
492@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
493@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
494@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
495@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
496@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
497
498.c.lo:
499@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
500@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
501@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
502@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
503@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
504@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
505
506libevas_engine_common_op_blend_master_sse3_la-op_blend_master_sse3.lo: op_blend_master_sse3.c
507@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libevas_engine_common_op_blend_master_sse3_la_CFLAGS) $(CFLAGS) -MT libevas_engine_common_op_blend_master_sse3_la-op_blend_master_sse3.lo -MD -MP -MF $(DEPDIR)/libevas_engine_common_op_blend_master_sse3_la-op_blend_master_sse3.Tpo -c -o libevas_engine_common_op_blend_master_sse3_la-op_blend_master_sse3.lo `test -f 'op_blend_master_sse3.c' || echo '$(srcdir)/'`op_blend_master_sse3.c
508@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libevas_engine_common_op_blend_master_sse3_la-op_blend_master_sse3.Tpo $(DEPDIR)/libevas_engine_common_op_blend_master_sse3_la-op_blend_master_sse3.Plo
509@am__fastdepCC_FALSE@ $(AM_V_CC) @AM_BACKSLASH@
510@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='op_blend_master_sse3.c' object='libevas_engine_common_op_blend_master_sse3_la-op_blend_master_sse3.lo' libtool=yes @AMDEPBACKSLASH@
511@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
512@am__fastdepCC_FALSE@ $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libevas_engine_common_op_blend_master_sse3_la_CFLAGS) $(CFLAGS) -c -o libevas_engine_common_op_blend_master_sse3_la-op_blend_master_sse3.lo `test -f 'op_blend_master_sse3.c' || echo '$(srcdir)/'`op_blend_master_sse3.c
513
514mostlyclean-libtool:
515 -rm -f *.lo
516
517clean-libtool:
518 -rm -rf .libs _libs
519
520ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
521 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
522 unique=`for i in $$list; do \
523 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
524 done | \
525 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
526 END { if (nonempty) { for (i in files) print i; }; }'`; \
527 mkid -fID $$unique
528tags: TAGS
529
530TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
531 $(TAGS_FILES) $(LISP)
532 set x; \
533 here=`pwd`; \
534 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
535 unique=`for i in $$list; do \
536 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
537 done | \
538 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
539 END { if (nonempty) { for (i in files) print i; }; }'`; \
540 shift; \
541 if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
542 test -n "$$unique" || unique=$$empty_fix; \
543 if test $$# -gt 0; then \
544 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
545 "$$@" $$unique; \
546 else \
547 $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
548 $$unique; \
549 fi; \
550 fi
551ctags: CTAGS
552CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
553 $(TAGS_FILES) $(LISP)
554 list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
555 unique=`for i in $$list; do \
556 if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
557 done | \
558 $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
559 END { if (nonempty) { for (i in files) print i; }; }'`; \
560 test -z "$(CTAGS_ARGS)$$unique" \
561 || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
562 $$unique
563
564GTAGS:
565 here=`$(am__cd) $(top_builddir) && pwd` \
566 && $(am__cd) $(top_srcdir) \
567 && gtags -i $(GTAGS_ARGS) "$$here"
568
569distclean-tags:
570 -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
571
572distdir: $(DISTFILES)
573 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
574 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
575 list='$(DISTFILES)'; \
576 dist_files=`for file in $$list; do echo $$file; done | \
577 sed -e "s|^$$srcdirstrip/||;t" \
578 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
579 case $$dist_files in \
580 */*) $(MKDIR_P) `echo "$$dist_files" | \
581 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
582 sort -u` ;; \
583 esac; \
584 for file in $$dist_files; do \
585 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
586 if test -d $$d/$$file; then \
587 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
588 if test -d "$(distdir)/$$file"; then \
589 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
590 fi; \
591 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
592 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
593 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
594 fi; \
595 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
596 else \
597 test -f "$(distdir)/$$file" \
598 || cp -p $$d/$$file "$(distdir)/$$file" \
599 || exit 1; \
600 fi; \
601 done
602check-am: all-am
603check: check-am
604all-am: Makefile $(LTLIBRARIES)
605installdirs:
606install: install-am
607install-exec: install-exec-am
608install-data: install-data-am
609uninstall: uninstall-am
610
611install-am: all-am
612 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
613
614installcheck: installcheck-am
615install-strip:
616 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
617 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
618 `test -z '$(STRIP)' || \
619 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
620mostlyclean-generic:
621
622clean-generic:
623
624distclean-generic:
625 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
626 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
627
628maintainer-clean-generic:
629 @echo "This command is intended for maintainers to use"
630 @echo "it deletes files that may require special tools to rebuild."
631 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
632clean: clean-am
633
634clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
635 mostlyclean-am
636
637distclean: distclean-am
638 -rm -rf ./$(DEPDIR)
639 -rm -f Makefile
640distclean-am: clean-am distclean-compile distclean-generic \
641 distclean-tags
642
643dvi: dvi-am
644
645dvi-am:
646
647html: html-am
648
649html-am:
650
651info: info-am
652
653info-am:
654
655install-data-am:
656
657install-dvi: install-dvi-am
658
659install-dvi-am:
660
661install-exec-am:
662
663install-html: install-html-am
664
665install-html-am:
666
667install-info: install-info-am
668
669install-info-am:
670
671install-man:
672
673install-pdf: install-pdf-am
674
675install-pdf-am:
676
677install-ps: install-ps-am
678
679install-ps-am:
680
681installcheck-am:
682
683maintainer-clean: maintainer-clean-am
684 -rm -rf ./$(DEPDIR)
685 -rm -f Makefile
686maintainer-clean-am: distclean-am maintainer-clean-generic
687
688mostlyclean: mostlyclean-am
689
690mostlyclean-am: mostlyclean-compile mostlyclean-generic \
691 mostlyclean-libtool
692
693pdf: pdf-am
694
695pdf-am:
696
697ps: ps-am
698
699ps-am:
700
701uninstall-am:
702
703.MAKE: install-am install-strip
704
705.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
706 clean-libtool clean-noinstLTLIBRARIES ctags distclean \
707 distclean-compile distclean-generic distclean-libtool \
708 distclean-tags distdir dvi dvi-am html html-am info info-am \
709 install install-am install-data install-data-am install-dvi \
710 install-dvi-am install-exec install-exec-am install-html \
711 install-html-am install-info install-info-am install-man \
712 install-pdf install-pdf-am install-ps install-ps-am \
713 install-strip installcheck installcheck-am installdirs \
714 maintainer-clean maintainer-clean-generic mostlyclean \
715 mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
716 pdf pdf-am ps ps-am tags uninstall uninstall-am
717
718
719# Tell versions [3.59,3.63) of GNU make to not export all variables.
720# Otherwise a system limit (for SysV at least) may be exceeded.
721.NOEXPORT:
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_.c
deleted file mode 100644
index be70065..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_.c
+++ /dev/null
@@ -1,109 +0,0 @@
1/* blend color -> dst */
2
3#ifdef BUILD_C
4static void
5_op_blend_c_dp(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e, a = 256 - (c >> 24);
7 UNROLL8_PLD_WHILE(d, l, e,
8 {
9 *d = c + MUL_256(a, *d);
10 d++;
11 });
12}
13
14#define _op_blend_caa_dp _op_blend_c_dp
15
16#define _op_blend_c_dpan _op_blend_c_dp
17#define _op_blend_caa_dpan _op_blend_c_dpan
18
19static void
20init_blend_color_span_funcs_c(void)
21{
22 op_blend_span_funcs[SP_N][SM_N][SC][DP][CPU_C] = _op_blend_c_dp;
23 op_blend_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_C] = _op_blend_caa_dp;
24
25 op_blend_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_C] = _op_blend_c_dpan;
26 op_blend_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_caa_dpan;
27}
28#endif
29
30#ifdef BUILD_C
31static void
32_op_blend_pt_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
33 s = 256 - (c >> 24);
34 *d = c + MUL_256(s, *d);
35}
36
37#define _op_blend_pt_caa_dp _op_blend_pt_c_dp
38
39#define _op_blend_pt_c_dpan _op_blend_pt_c_dp
40#define _op_blend_pt_caa_dpan _op_blend_pt_c_dpan
41
42#define _op_blend_pt_c_dpas _op_blend_pt_c_dp
43#define _op_blend_pt_caa_dpas _op_blend_pt_c_dp
44
45static void
46init_blend_color_pt_funcs_c(void)
47{
48 op_blend_pt_funcs[SP_N][SM_N][SC][DP][CPU_C] = _op_blend_pt_c_dp;
49 op_blend_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_C] = _op_blend_pt_caa_dp;
50
51 op_blend_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_C] = _op_blend_pt_c_dpan;
52 op_blend_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pt_caa_dpan;
53}
54#endif
55
56/*-----*/
57
58/* blend_rel color -> dst */
59
60#ifdef BUILD_C
61static void
62_op_blend_rel_c_dp(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
63 DATA32 *e;
64 int alpha = 256 - (c >> 24);
65 UNROLL8_PLD_WHILE(d, l, e,
66 {
67 *d = MUL_SYM(*d >> 24, c) + MUL_256(alpha, *d);
68 d++;
69 });
70}
71
72#define _op_blend_rel_caa_dp _op_blend_rel_c_dp
73
74#define _op_blend_rel_c_dpan _op_blend_c_dpan
75#define _op_blend_rel_caa_dpan _op_blend_caa_dpan
76
77static void
78init_blend_rel_color_span_funcs_c(void)
79{
80 op_blend_rel_span_funcs[SP_N][SM_N][SC][DP][CPU_C] = _op_blend_rel_c_dp;
81 op_blend_rel_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_caa_dp;
82
83 op_blend_rel_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_c_dpan;
84 op_blend_rel_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_caa_dpan;
85}
86#endif
87
88#ifdef BUILD_C
89static void
90_op_blend_rel_pt_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
91 s = *d >> 24;
92 *d = MUL_SYM(s, c) + MUL_256(256 - (c >> 24), *d);
93}
94
95#define _op_blend_rel_pt_caa_dp _op_blend_rel_pt_c_dp
96
97#define _op_blend_rel_pt_c_dpan _op_blend_pt_c_dpan
98#define _op_blend_rel_pt_caa_dpan _op_blend_pt_caa_dpan
99
100static void
101init_blend_rel_color_pt_funcs_c(void)
102{
103 op_blend_rel_pt_funcs[SP_N][SM_N][SC][DP][CPU_C] = _op_blend_rel_pt_c_dp;
104 op_blend_rel_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pt_caa_dp;
105
106 op_blend_rel_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pt_c_dpan;
107 op_blend_rel_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pt_caa_dpan;
108}
109#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_i386.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_i386.c
deleted file mode 100644
index a05af7d..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_i386.c
+++ /dev/null
@@ -1,138 +0,0 @@
1/* blend color --> dst */
2
3#ifdef BUILD_MMX
4static void
5_op_blend_c_dp_mmx(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e = d + l;
7 pxor_r2r(mm0, mm0);
8 MOV_P2R(c, mm2, mm0)
9 c = 256 - (c >> 24);
10 MOV_A2R(c, mm3)
11 while (d < e) {
12 MOV_P2R(*d, mm1, mm0)
13 MUL4_256_R2R(mm3, mm1)
14 paddw_r2r(mm2, mm1);
15 MOV_R2P(mm1, *d, mm0)
16 d++;
17 }
18}
19
20#define _op_blend_caa_dp_mmx _op_blend_c_dp_mmx
21
22#define _op_blend_c_dpan_mmx _op_blend_c_dp_mmx
23#define _op_blend_caa_dpan_mmx _op_blend_c_dpan_mmx
24
25static void
26init_blend_color_span_funcs_mmx(void)
27{
28 op_blend_span_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_blend_c_dp_mmx;
29 op_blend_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_blend_caa_dp_mmx;
30
31 op_blend_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_c_dpan_mmx;
32 op_blend_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_caa_dpan_mmx;
33}
34#endif
35
36#ifdef BUILD_MMX
37static void
38_op_blend_pt_c_dp_mmx(DATA32 s __UNUSED__, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
39 pxor_r2r(mm0, mm0);
40 MOV_P2R(c, mm2, mm0)
41 c = 256 - (c >> 24);
42 MOV_A2R(c, mm3)
43 MOV_P2R(*d, mm1, mm0)
44 MUL4_256_R2R(mm3, mm1)
45 paddw_r2r(mm2, mm1);
46 MOV_R2P(mm1, *d, mm0)
47}
48
49#define _op_blend_pt_caa_dp_mmx _op_blend_pt_c_dp_mmx
50
51#define _op_blend_pt_c_dpan_mmx _op_blend_pt_c_dp_mmx
52#define _op_blend_pt_caa_dpan_mmx _op_blend_pt_c_dpan_mmx
53
54static void
55init_blend_color_pt_funcs_mmx(void)
56{
57 op_blend_pt_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_blend_pt_c_dp_mmx;
58 op_blend_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_blend_pt_caa_dp_mmx;
59
60 op_blend_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_pt_c_dpan_mmx;
61 op_blend_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_pt_caa_dpan_mmx;
62}
63#endif
64/*-----*/
65
66/* blend_rel color -> dst */
67
68#ifdef BUILD_MMX
69static void
70_op_blend_rel_c_dp_mmx(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
71 DATA32 *e = d + l;
72 pxor_r2r(mm0, mm0);
73 MOV_P2R(c, mm2, mm0)
74 c = 256 - (c >> 24);
75 MOV_A2R(c, mm3)
76 MOV_A2R(ALPHA_255, mm5)
77 while (d < e) {
78 MOV_P2R(*d, mm1, mm0)
79 MOV_RA2R(mm1, mm4)
80 MUL4_256_R2R(mm3, mm1)
81 MUL4_SYM_R2R(mm2, mm4, mm5)
82 paddw_r2r(mm4, mm1);
83 MOV_R2P(mm1, *d, mm0)
84 d++;
85 }
86}
87
88#define _op_blend_rel_caa_dp_mmx _op_blend_rel_c_dp_mmx
89
90#define _op_blend_rel_c_dpan_mmx _op_blend_c_dpan_mmx
91#define _op_blend_rel_caa_dpan_mmx _op_blend_caa_dpan_mmx
92
93static void
94init_blend_rel_color_span_funcs_mmx(void)
95{
96 op_blend_rel_span_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_blend_rel_c_dp_mmx;
97 op_blend_rel_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_blend_rel_caa_dp_mmx;
98
99 op_blend_rel_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_rel_c_dpan_mmx;
100 op_blend_rel_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_rel_caa_dpan_mmx;
101}
102#endif
103
104#ifdef BUILD_MMX
105static void
106_op_blend_rel_pt_c_dp_mmx(DATA32 s __UNUSED__, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
107 pxor_r2r(mm0, mm0);
108 MOV_A2R(ALPHA_256, mm6)
109 MOV_A2R(ALPHA_255, mm5)
110
111 MOV_P2R(c, mm2, mm0)
112 MOV_RA2R(mm2, mm1)
113 psubw_r2r(mm1, mm6);
114
115 MOV_P2R(*d, mm1, mm0)
116 MOV_RA2R(mm1, mm4)
117 MUL4_256_R2R(mm6, mm1)
118
119 MUL4_SYM_R2R(mm4, mm2, mm5)
120 paddw_r2r(mm2, mm1);
121 MOV_R2P(mm1, *d, mm0)
122}
123
124#define _op_blend_rel_pt_caa_dp_mmx _op_blend_rel_pt_c_dp_mmx
125
126#define _op_blend_rel_pt_c_dpan_mmx _op_blend_pt_c_dpan_mmx
127#define _op_blend_rel_pt_caa_dpan_mmx _op_blend_pt_caa_dpan_mmx
128
129static void
130init_blend_rel_color_pt_funcs_mmx(void)
131{
132 op_blend_rel_pt_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_blend_rel_pt_c_dp_mmx;
133 op_blend_rel_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_blend_rel_pt_caa_dp_mmx;
134
135 op_blend_rel_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_rel_pt_c_dpan_mmx;
136 op_blend_rel_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_rel_pt_caa_dpan_mmx;
137}
138#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_neon.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_neon.c
deleted file mode 100644
index 53b9991..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_neon.c
+++ /dev/null
@@ -1,223 +0,0 @@
1/* blend color --> dst */
2
3#ifdef BUILD_NEON
4static void
5_op_blend_c_dp_neon(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e, *tmp = 0;
7#define AP "B_C_DP"
8 asm volatile (
9 ".fpu neon \n\t"
10 "vdup.u32 q6, %[c] \n\t"
11 "vmov.i8 q5, #1 \n\t"
12 "vmvn.u8 q7,q6 \n\t"
13 "vshr.u32 q7, q7, $0x18 \n\t"
14 "vmul.u32 q7,q5, q7 \n\t"
15 "bic %[e], #3 \n\t"
16 "bic %[d], #3 \n\t"
17
18 AP "loopchoose: \n\t"
19 // If aligned already - straight to quads
20 "andS %[tmp], %[d],$0x1f \n\t"
21 "beq "AP"quadloops \n\t"
22
23 "andS %[tmp], %[d],$0x4 \n\t"
24 "beq "AP"dualloop \n\t"
25
26 // Only ever executes once, fall through to dual
27 AP "singleloop: \n\t"
28 // Use 'tmp' not 'd'
29 "vld1.32 d0[0], [%[d]] \n\t"
30 // Only touch d1
31 "vmull.u8 q0, d0, d14 \n\t"
32 "vqrshrn.u16 d0, q0, #8 \n\t"
33 "vadd.u8 d0, d12, d0 \n\t"
34 "vst1.32 d0[0], [%[d]] \n\t"
35
36 "add %[d], #4 \n\t"
37
38 // Can we go the fast path?
39 "andS %[tmp], %[d],$0x1f \n\t"
40 "beq "AP"quadloops \n\t"
41
42 AP "dualloop: \n\t"
43 "sub %[tmp], %[e], %[d] \n\t"
44 "cmp %[tmp], #32 \n\t"
45 "blt "AP"loopout \n\t"
46
47
48 AP "dualloopint: \n\t"
49 "vldr.32 d0, [%[d]] \n\t"
50 "vmull.u8 q1, d0, d14 \n\t"
51 "vqrshrn.u16 d0, q1, #8 \n\t"
52 "vqadd.u8 d0, d0, d12 \n\t"
53
54 "vstm %[d]!, {d0} \n\t"
55
56 "ands %[tmp], %[d], $0x1f \n\t"
57 "bne "AP"dualloopint \n\t"
58
59 AP "quadloops: \n\t"
60 "sub %[tmp], %[e], %[d] \n\t"
61 "cmp %[tmp], #32 \n\t"
62 "blt "AP"loopout \n\t"
63
64 "sub %[tmp],%[e],#31 \n\t"
65
66 AP "quadloopint:\n\t"
67 "vldm %[d], {d0,d1,d2,d3} \n\t"
68
69 "vmull.u8 q2, d0, d14 \n\t"
70 "vmull.u8 q3, d1, d15 \n\t"
71 "vmull.u8 q4, d2, d14 \n\t"
72 "vmull.u8 q5, d3, d15 \n\t"
73
74 "vqrshrn.u16 d0, q2, #8 \n\t"
75 "vqrshrn.u16 d1, q3, #8 \n\t"
76 "vqrshrn.u16 d2, q4, #8 \n\t"
77 "vqrshrn.u16 d3, q5, #8 \n\t"
78
79 "vqadd.u8 q0, q6, q0 \n\t"
80 "vqadd.u8 q1, q6, q1 \n\t"
81
82 "vstm %[d]!, {d0,d1,d2,d3} \n\t"
83
84 "cmp %[tmp], %[d]\n\t"
85 "bhi "AP"quadloopint\n\t"
86
87 AP "loopout: \n\t"
88 "cmp %[d], %[e]\n\t"
89 "beq "AP"done\n\t"
90 "sub %[tmp],%[e], %[d] \n\t"
91 "cmp %[tmp],#8 \n\t"
92 "blt "AP"singleloop2 \n\t"
93
94 AP "dualloop2: \n\t"
95 "sub %[tmp],%[e],$0x7 \n\t"
96 AP "dualloop2int: \n\t"
97 "vldr.64 d0, [%[d]] \n\t"
98 "vmull.u8 q1, d0, d14 \n\t"
99 "vqrshrn.u16 d0, q1, #8 \n\t"
100 "vqadd.u8 d0, d0, d12 \n\t"
101
102 "vstr.64 d0, [%[d]] \n\t"
103
104 "add %[d], #8 \n\t"
105 "cmp %[tmp], %[d] \n\t"
106 "bhi "AP"dualloop2int \n\t"
107
108 // Single ??
109 "cmp %[e], %[d] \n\t"
110 "beq "AP"done \n\t"
111
112 AP "singleloop2: \n\t"
113 "vld1.32 d0[0], [%[d]] \n\t"
114 "vmull.u8 q1, d0, d14 \n\t"
115 "vqrshrn.u16 d0, q1, #8 \n\t"
116 "vqadd.u8 d0, d0, d12 \n\t"
117
118 "vst1.32 d0[0], [%[d]] \n\t"
119
120 AP "done:\n\t"
121
122 : // output regs
123 // Input
124 : [e] "r" (e = d + l), [d] "r" (d), [c] "r" (c), [tmp] "r" (tmp)
125 : "q0", "q1", "q2","q3", "q4","q5","q6", "q7","memory" // clobbered
126
127 );
128#undef AP
129
130}
131
132#define _op_blend_caa_dp_neon _op_blend_c_dp_neon
133
134#define _op_blend_c_dpan_neon _op_blend_c_dp_neon
135#define _op_blend_caa_dpan_neon _op_blend_c_dpan_neon
136
137static void
138init_blend_color_span_funcs_neon(void)
139{
140 op_blend_span_funcs[SP_N][SM_N][SC][DP][CPU_NEON] = _op_blend_c_dp_neon;
141 op_blend_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_NEON] = _op_blend_caa_dp_neon;
142
143 op_blend_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_c_dpan_neon;
144 op_blend_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_caa_dpan_neon;
145}
146#endif
147
148#ifdef BUILD_NEON
149static void
150_op_blend_pt_c_dp_neon(DATA32 s __UNUSED__, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
151 s = 256 - (c >> 24);
152 *d = c + MUL_256(s, *d);
153}
154
155#define _op_blend_pt_caa_dp_neon _op_blend_pt_c_dp_neon
156
157#define _op_blend_pt_c_dpan_neon _op_blend_pt_c_dp_neon
158#define _op_blend_pt_caa_dpan_neon _op_blend_pt_c_dpan_neon
159
160static void
161init_blend_color_pt_funcs_neon(void)
162{
163 op_blend_pt_funcs[SP_N][SM_N][SC][DP][CPU_NEON] = _op_blend_pt_c_dp_neon;
164 op_blend_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_NEON] = _op_blend_pt_caa_dp_neon;
165
166 op_blend_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_pt_c_dpan_neon;
167 op_blend_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_pt_caa_dpan_neon;
168}
169#endif
170/*-----*/
171
172/* blend_rel color -> dst */
173
174#ifdef BUILD_NEON
175static void
176_op_blend_rel_c_dp_neon(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
177 DATA32 *e;
178 int alpha = 256 - (c >> 24);
179 UNROLL8_PLD_WHILE(d, l, e,
180 {
181 *d = MUL_SYM(*d >> 24, c) + MUL_256(alpha, *d);
182 d++;
183 });
184}
185
186#define _op_blend_rel_caa_dp_neon _op_blend_rel_c_dp_neon
187
188#define _op_blend_rel_c_dpan_neon _op_blend_c_dpan_neon
189#define _op_blend_rel_caa_dpan_neon _op_blend_caa_dpan_neon
190
191static void
192init_blend_rel_color_span_funcs_neon(void)
193{
194 op_blend_rel_span_funcs[SP_N][SM_N][SC][DP][CPU_NEON] = _op_blend_rel_c_dp_neon;
195 op_blend_rel_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_NEON] = _op_blend_rel_caa_dp_neon;
196
197 op_blend_rel_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_rel_c_dpan_neon;
198 op_blend_rel_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_rel_caa_dpan_neon;
199}
200#endif
201
202#ifdef BUILD_NEON
203static void
204_op_blend_rel_pt_c_dp_neon(DATA32 s __UNUSED__, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
205 s = *d >> 24;
206 *d = MUL_SYM(s, c) + MUL_256(256 - (c >> 24), *d);
207}
208
209#define _op_blend_rel_pt_caa_dp_neon _op_blend_rel_pt_c_dp_neon
210
211#define _op_blend_rel_pt_c_dpan_neon _op_blend_pt_c_dpan_neon
212#define _op_blend_rel_pt_caa_dpan_neon _op_blend_pt_caa_dpan_neon
213
214static void
215init_blend_rel_color_pt_funcs_neon(void)
216{
217 op_blend_rel_pt_funcs[SP_N][SM_N][SC][DP][CPU_NEON] = _op_blend_rel_pt_c_dp_neon;
218 op_blend_rel_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_NEON] = _op_blend_rel_pt_caa_dp_neon;
219
220 op_blend_rel_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_rel_pt_c_dpan_neon;
221 op_blend_rel_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_rel_pt_caa_dpan_neon;
222}
223#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c
deleted file mode 100644
index 1843265..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_color_sse3.c
+++ /dev/null
@@ -1,167 +0,0 @@
1/* blend color -> dst */
2
3#ifdef BUILD_SSE3
4
5static void
6_op_blend_c_dp_sse3(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
7
8 DATA32 a = 256 - (c >> 24);
9
10 const __m128i c_packed = _mm_set_epi32(c, c, c, c);
11 const __m128i a_packed = _mm_set_epi32(a, a, a, a);
12
13 LOOP_ALIGNED_U1_A48_SSE3(d, l,
14 { /* UOP */
15
16 *d = c + MUL_256(a, *d);
17 d++; l--;
18 },
19 { /* A4OP */
20
21 __m128i d0 = _mm_load_si128((__m128i *)d);
22
23 d0 = mul_256_sse3(a_packed, d0);
24 d0 = _mm_add_epi32(d0, c_packed);
25
26 _mm_store_si128((__m128i *)d, d0);
27
28 d += 4; l -= 4;
29 },
30 { /* A8OP */
31
32 __m128i d0 = _mm_load_si128((__m128i *)d);
33 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
34
35 d0 = mul_256_sse3(a_packed, d0);
36 d1 = mul_256_sse3(a_packed, d1);
37
38 d0 = _mm_add_epi32(d0, c_packed);
39 d1 = _mm_add_epi32(d1, c_packed);
40
41 _mm_store_si128((__m128i *)d, d0);
42 _mm_store_si128((__m128i *)(d+4), d1);
43
44 d += 8; l -= 8;
45 })
46}
47
48#define _op_blend_caa_dp_sse3 _op_blend_c_dp_sse3
49
50#define _op_blend_c_dpan_sse3 _op_blend_c_dp_sse3
51#define _op_blend_caa_dpan_sse3 _op_blend_c_dpan_sse3
52
53static void
54init_blend_color_span_funcs_sse3(void)
55{
56// FIXME: BUGGY BUGGY Core i5 750 (32bit), 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text and rectangle)
57// op_blend_span_funcs[SP_N][SM_N][SC][DP][CPU_SSE3] = _op_blend_c_dp_sse3;
58 op_blend_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_caa_dp_sse3;
59
60// FIXME: BUGGY BUGGY Core i5 750 (32bit), 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text and rectangle)
61// op_blend_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_c_dpan_sse3;
62 op_blend_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_caa_dpan_sse3;
63}
64
65#define _op_blend_pt_c_dp_sse3 NULL
66#define _op_blend_pt_caa_dp_sse3 _op_blend_pt_c_dp_sse3
67
68#define _op_blend_pt_c_dpan_sse3 _op_blend_pt_c_dp_sse3
69#define _op_blend_pt_caa_dpan_sse3 _op_blend_pt_c_dpan_sse3
70
71#define _op_blend_pt_c_dpas_sse3 _op_blend_pt_c_dp_sse3
72#define _op_blend_pt_caa_dpas_sse3 _op_blend_pt_c_dp_sse3
73
74static void
75init_blend_color_pt_funcs_sse3(void)
76{
77 op_blend_pt_funcs[SP_N][SM_N][SC][DP][CPU_SSE3] = _op_blend_pt_c_dp_sse3;
78 op_blend_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_pt_caa_dp_sse3;
79
80 op_blend_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_pt_c_dpan_sse3;
81 op_blend_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_pt_caa_dpan_sse3;
82}
83
84
85/*-----*/
86
87/* blend_rel color -> dst */
88
89static void
90_op_blend_rel_c_dp_sse3(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
91
92 int alpha = 256 - (c >> 24);
93
94 const __m128i c_packed = _mm_set_epi32(c, c, c, c);
95 const __m128i alpha_packed = _mm_set_epi32(alpha, alpha, alpha, alpha);
96
97 LOOP_ALIGNED_U1_A48_SSE3(d, l,
98 { /* UOP */
99
100 *d = MUL_SYM(*d >> 24, c) + MUL_256(alpha, *d);
101 d++; l--;
102 },
103 { /* A4OP */
104
105 __m128i d0 = _mm_load_si128((__m128i *)d);
106
107 __m128i mul0 = mul_256_sse3(alpha_packed, d0);
108 __m128i sym0 = mul_sym_sse3(_mm_srli_epi32(d0, 24), c_packed);
109
110 d0 = _mm_add_epi32(mul0, sym0);
111
112 _mm_store_si128((__m128i *)d, d0);
113
114 d += 4; l -= 4;
115 },
116 { /* A8OP */
117
118 __m128i d0 = _mm_load_si128((__m128i *)d);
119 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
120
121 __m128i mul0 = mul_256_sse3(alpha_packed, d0);
122 __m128i mul1 = mul_256_sse3(alpha_packed, d1);
123
124 __m128i sym0 = mul_sym_sse3(_mm_srli_epi32(d0, 24), c_packed);
125 __m128i sym1 = mul_sym_sse3(_mm_srli_epi32(d1, 24), c_packed);
126
127 d0 = _mm_add_epi32(mul0, sym0);
128 d1 = _mm_add_epi32(mul1, sym1);
129
130 _mm_store_si128((__m128i *)d, d0);
131 _mm_store_si128((__m128i *)(d+4), d1);
132
133 d += 8; l -= 8;
134 })
135}
136
137#define _op_blend_rel_caa_dp_sse3 _op_blend_rel_c_dp_sse3
138#define _op_blend_rel_c_dpan_sse3 _op_blend_c_dpan_sse3
139#define _op_blend_rel_caa_dpan_sse3 _op_blend_caa_dpan_sse3
140
141static void
142init_blend_rel_color_span_funcs_sse3(void)
143{
144 op_blend_rel_span_funcs[SP_N][SM_N][SC][DP][CPU_SSE3] = _op_blend_rel_c_dp_sse3;
145 op_blend_rel_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_rel_caa_dp_sse3;
146
147 op_blend_rel_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_rel_c_dpan_sse3;
148 op_blend_rel_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_rel_caa_dpan_sse3;
149}
150
151#define _op_blend_rel_pt_c_dp_sse3 NULL
152#define _op_blend_rel_pt_caa_dp_sse3 _op_blend_rel_pt_c_dp_sse3
153
154#define _op_blend_rel_pt_c_dpan_sse3 _op_blend_pt_c_dpan_sse3
155#define _op_blend_rel_pt_caa_dpan_sse3 _op_blend_pt_caa_dpan_sse3
156
157static void
158init_blend_rel_color_pt_funcs_sse3(void)
159{
160 op_blend_rel_pt_funcs[SP_N][SM_N][SC][DP][CPU_SSE3] = _op_blend_rel_pt_c_dp_sse3;
161 op_blend_rel_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_rel_pt_caa_dp_sse3;
162
163 op_blend_rel_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_rel_pt_c_dpan_sse3;
164 op_blend_rel_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_rel_pt_caa_dpan_sse3;
165}
166
167#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_.c
deleted file mode 100644
index 12a0a75..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_.c
+++ /dev/null
@@ -1,185 +0,0 @@
1/* blend mask x color -> dst */
2
3#ifdef BUILD_C
4static void
5_op_blend_mas_c_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e;
7 int alpha = 256 - (c >> 24);
8 UNROLL8_PLD_WHILE(d, l, e,
9 {
10 DATA32 a = *m;
11 switch(a)
12 {
13 case 0:
14 break;
15 case 255:
16 *d = c + MUL_256(alpha, *d);
17 break;
18 default:
19 {
20 DATA32 mc = MUL_SYM(a, c);
21 a = 256 - (mc >> 24);
22 *d = mc + MUL_256(a, *d);
23 }
24 break;
25 }
26 m++; d++;
27 });
28}
29
30static void
31_op_blend_mas_can_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
32 DATA32 *e;
33 int alpha;
34 UNROLL8_PLD_WHILE(d, l, e,
35 {
36 alpha = *m;
37 switch(alpha)
38 {
39 case 0:
40 break;
41 case 255:
42 *d = c;
43 break;
44 default:
45 alpha++;
46 *d = INTERP_256(alpha, c, *d);
47 break;
48 }
49 m++; d++;
50 });
51}
52
53#define _op_blend_mas_cn_dp _op_blend_mas_can_dp
54#define _op_blend_mas_caa_dp _op_blend_mas_c_dp
55
56#define _op_blend_mas_c_dpan _op_blend_mas_c_dp
57#define _op_blend_mas_cn_dpan _op_blend_mas_cn_dp
58#define _op_blend_mas_can_dpan _op_blend_mas_can_dp
59#define _op_blend_mas_caa_dpan _op_blend_mas_caa_dp
60
61static void
62init_blend_mask_color_span_funcs_c(void)
63{
64 op_blend_span_funcs[SP_N][SM_AS][SC][DP][CPU_C] = _op_blend_mas_c_dp;
65 op_blend_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_C] = _op_blend_mas_cn_dp;
66 op_blend_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_C] = _op_blend_mas_can_dp;
67 op_blend_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_C] = _op_blend_mas_caa_dp;
68
69 op_blend_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_C] = _op_blend_mas_c_dpan;
70 op_blend_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_mas_cn_dpan;
71 op_blend_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_C] = _op_blend_mas_can_dpan;
72 op_blend_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_C] = _op_blend_mas_caa_dpan;
73}
74#endif
75
76#ifdef BUILD_C
77static void
78_op_blend_pt_mas_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
79 s = MUL_SYM(m, c);
80 m = 256 - (s >> 24);
81 *d = s + MUL_256(m, *d);
82}
83
84static void
85_op_blend_pt_mas_can_dp(DATA32 s __UNUSED__, DATA8 m, DATA32 c, DATA32 *d) {
86 *d = INTERP_256(m + 1, c, *d);
87}
88
89#define _op_blend_pt_mas_cn_dp _op_blend_pt_mas_can_dp
90#define _op_blend_pt_mas_caa_dp _op_blend_pt_mas_c_dp
91
92#define _op_blend_pt_mas_c_dpan _op_blend_pt_mas_c_dp
93#define _op_blend_pt_mas_cn_dpan _op_blend_pt_mas_cn_dp
94#define _op_blend_pt_mas_can_dpan _op_blend_pt_mas_can_dp
95#define _op_blend_pt_mas_caa_dpan _op_blend_pt_mas_caa_dp
96
97static void
98init_blend_mask_color_pt_funcs_c(void)
99{
100 op_blend_pt_funcs[SP_N][SM_AS][SC][DP][CPU_C] = _op_blend_pt_mas_c_dp;
101 op_blend_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_C] = _op_blend_pt_mas_cn_dp;
102 op_blend_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_C] = _op_blend_pt_mas_can_dp;
103 op_blend_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_C] = _op_blend_pt_mas_caa_dp;
104
105 op_blend_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_C] = _op_blend_pt_mas_c_dpan;
106 op_blend_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_pt_mas_cn_dpan;
107 op_blend_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_C] = _op_blend_pt_mas_can_dpan;
108 op_blend_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_C] = _op_blend_pt_mas_caa_dpan;
109}
110#endif
111
112/*-----*/
113
114/* blend_rel mask x color --> dst */
115
116#ifdef BUILD_C
117static void
118_op_blend_rel_mas_c_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
119 DATA32 *e;
120 int alpha;
121 UNROLL8_PLD_WHILE(d, l, e,
122 {
123 DATA32 mc = MUL_SYM(*m, c);
124 alpha = 256 - (mc >> 24);
125 *d = MUL_SYM(*d >> 24, mc) + MUL_256(alpha, *d);
126 d++;
127 m++;
128 });
129}
130
131#define _op_blend_rel_mas_cn_dp _op_blend_rel_mas_c_dp
132#define _op_blend_rel_mas_can_dp _op_blend_rel_mas_c_dp
133#define _op_blend_rel_mas_caa_dp _op_blend_rel_mas_c_dp
134
135#define _op_blend_rel_mas_c_dpan _op_blend_mas_c_dpan
136#define _op_blend_rel_mas_cn_dpan _op_blend_mas_cn_dpan
137#define _op_blend_rel_mas_can_dpan _op_blend_mas_can_dpan
138#define _op_blend_rel_mas_caa_dpan _op_blend_mas_caa_dpan
139
140static void
141init_blend_rel_mask_color_span_funcs_c(void)
142{
143 op_blend_rel_span_funcs[SP_N][SM_AS][SC][DP][CPU_C] = _op_blend_rel_mas_c_dp;
144 op_blend_rel_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_mas_can_dp;
145 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_C] = _op_blend_rel_mas_can_dp;
146 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_C] = _op_blend_rel_mas_caa_dp;
147
148 op_blend_rel_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_C] = _op_blend_rel_mas_c_dpan;
149 op_blend_rel_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_mas_cn_dpan;
150 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_C] = _op_blend_rel_mas_can_dpan;
151 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_C] = _op_blend_rel_mas_caa_dpan;
152}
153#endif
154
155#ifdef BUILD_C
156static void
157_op_blend_rel_pt_mas_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
158 s = MUL_SYM(m, c);
159 c = 256 - (s >> 24);
160 *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
161}
162
163#define _op_blend_rel_pt_mas_cn_dp _op_blend_rel_pt_mas_c_dp
164#define _op_blend_rel_pt_mas_can_dp _op_blend_rel_pt_mas_c_dp
165#define _op_blend_rel_pt_mas_caa_dp _op_blend_rel_pt_mas_c_dp
166
167#define _op_blend_rel_pt_mas_c_dpan _op_blend_pt_mas_c_dpan
168#define _op_blend_rel_pt_mas_cn_dpan _op_blend_pt_mas_cn_dpan
169#define _op_blend_rel_pt_mas_can_dpan _op_blend_pt_mas_can_dpan
170#define _op_blend_rel_pt_mas_caa_dpan _op_blend_pt_mas_caa_dpan
171
172static void
173init_blend_rel_mask_color_pt_funcs_c(void)
174{
175 op_blend_rel_pt_funcs[SP_N][SM_AS][SC][DP][CPU_C] = _op_blend_rel_pt_mas_c_dp;
176 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_pt_mas_cn_dp;
177 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_C] = _op_blend_rel_pt_mas_can_dp;
178 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_C] = _op_blend_rel_pt_mas_caa_dp;
179
180 op_blend_rel_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_C] = _op_blend_rel_pt_mas_c_dpan;
181 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_pt_mas_cn_dpan;
182 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pt_mas_can_dpan;
183 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pt_mas_caa_dpan;
184}
185#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_i386.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_i386.c
deleted file mode 100644
index f8fe02e..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_i386.c
+++ /dev/null
@@ -1,251 +0,0 @@
1/* blend mask x color -> dst */
2
3#ifdef BUILD_MMX
4static void
5_op_blend_mas_c_dp_mmx(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e = d + l;
7 pxor_r2r(mm0, mm0);
8 MOV_A2R(ALPHA_256, mm6)
9 MOV_P2R(c, mm2, mm0)
10 c = 256 - (c >> 24);
11 MOV_A2R(c, mm4)
12 while (d < e) {
13 l = *m;
14 switch(l)
15 {
16 case 0:
17 break;
18 case 255:
19 MOV_P2R(*d, mm1, mm0)
20 MUL4_256_R2R(mm4, mm1)
21 paddw_r2r(mm2, mm1);
22 MOV_R2P(mm1, *d, mm0)
23 break;
24 default:
25 l++;
26 MOV_A2R(l, mm3)
27 MUL4_256_R2R(mm2, mm3)
28
29 MOV_RA2R(mm3, mm1)
30 movq_r2r(mm6, mm7);
31 psubw_r2r(mm1, mm7);
32
33 MOV_P2R(*d, mm1, mm0)
34 MUL4_256_R2R(mm7, mm1)
35
36 paddw_r2r(mm3, mm1);
37 MOV_R2P(mm1, *d, mm0)
38 break;
39 }
40 m++; d++;
41 }
42}
43
44static void
45_op_blend_mas_can_dp_mmx(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
46 DATA32 *e = d + l;
47 pxor_r2r(mm0, mm0);
48 MOV_P2R(c, mm2, mm0)
49 MOV_A2R(ALPHA_255, mm5)
50 while (d < e) {
51 l = *m;
52 switch(l)
53 {
54 case 0:
55 break;
56 case 255:
57 *d = c;
58 break;
59 default:
60 l++;
61 MOV_A2R(l, mm3)
62 MOV_P2R(*d, mm1, mm0)
63 movq_r2r(mm2, mm4);
64 INTERP_256_R2R(mm3, mm4, mm1, mm5)
65 MOV_R2P(mm1, *d, mm0)
66 break;
67 }
68 m++; d++;
69 }
70}
71
72#define _op_blend_mas_cn_dp_mmx _op_blend_mas_can_dp_mmx
73#define _op_blend_mas_caa_dp_mmx _op_blend_mas_c_dp_mmx
74
75#define _op_blend_mas_c_dpan_mmx _op_blend_mas_c_dp_mmx
76#define _op_blend_mas_cn_dpan_mmx _op_blend_mas_cn_dp_mmx
77#define _op_blend_mas_can_dpan_mmx _op_blend_mas_can_dp_mmx
78#define _op_blend_mas_caa_dpan_mmx _op_blend_mas_caa_dp_mmx
79
80static void
81init_blend_mask_color_span_funcs_mmx(void)
82{
83 op_blend_span_funcs[SP_N][SM_AS][SC][DP][CPU_MMX] = _op_blend_mas_c_dp_mmx;
84 op_blend_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_MMX] = _op_blend_mas_cn_dp_mmx;
85 op_blend_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_MMX] = _op_blend_mas_can_dp_mmx;
86 op_blend_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_MMX] = _op_blend_mas_caa_dp_mmx;
87
88 op_blend_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_MMX] = _op_blend_mas_c_dpan_mmx;
89 op_blend_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_mas_cn_dpan_mmx;
90 op_blend_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_MMX] = _op_blend_mas_can_dpan_mmx;
91 op_blend_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_MMX] = _op_blend_mas_caa_dpan_mmx;
92}
93#endif
94
95#ifdef BUILD_MMX
96static void
97_op_blend_pt_mas_c_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
98 s = m + 1;
99 MOV_A2R(s, mm3)
100 MOV_A2R(ALPHA_256, mm6)
101 pxor_r2r(mm0, mm0);
102 MOV_P2R(c, mm2, mm0)
103 MUL4_256_R2R(mm2, mm3)
104
105 MOV_RA2R(mm3, mm1)
106 psubw_r2r(mm1, mm6);
107
108 MOV_P2R(*d, mm1, mm0)
109 MUL4_256_R2R(mm6, mm1)
110
111 paddw_r2r(mm3, mm1);
112 MOV_R2P(mm1, *d, mm0)
113}
114
115
116#define _op_blend_pt_mas_cn_dp_mmx _op_blend_pt_mas_c_dp_mmx
117#define _op_blend_pt_mas_can_dp_mmx _op_blend_pt_mas_c_dp_mmx
118#define _op_blend_pt_mas_caa_dp_mmx _op_blend_pt_mas_c_dp_mmx
119
120#define _op_blend_pt_mas_c_dpan_mmx _op_blend_pt_mas_c_dp_mmx
121#define _op_blend_pt_mas_cn_dpan_mmx _op_blend_pt_mas_cn_dp_mmx
122#define _op_blend_pt_mas_can_dpan_mmx _op_blend_pt_mas_can_dp_mmx
123#define _op_blend_pt_mas_caa_dpan_mmx _op_blend_pt_mas_caa_dp_mmx
124
125static void
126init_blend_mask_color_pt_funcs_mmx(void)
127{
128 op_blend_pt_funcs[SP_N][SM_AS][SC][DP][CPU_MMX] = _op_blend_pt_mas_c_dp_mmx;
129 op_blend_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_MMX] = _op_blend_pt_mas_cn_dp_mmx;
130 op_blend_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_MMX] = _op_blend_pt_mas_can_dp_mmx;
131 op_blend_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_MMX] = _op_blend_pt_mas_caa_dp_mmx;
132
133 op_blend_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_MMX] = _op_blend_pt_mas_c_dpan_mmx;
134 op_blend_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_pt_mas_cn_dpan_mmx;
135 op_blend_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_MMX] = _op_blend_pt_mas_can_dpan_mmx;
136 op_blend_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_MMX] = _op_blend_pt_mas_caa_dpan_mmx;
137}
138#endif
139
140/*-----*/
141
142/* blend_rel mask x color -> dst */
143
144#ifdef BUILD_MMX
145static void
146_op_blend_rel_mas_c_dp_mmx(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
147 DATA32 *e = d + l;
148 pxor_r2r(mm0, mm0);
149 MOV_A2R(ALPHA_256, mm6)
150 MOV_A2R(ALPHA_255, mm5)
151 MOV_P2R(c, mm2, mm0)
152 while (d < e) {
153 l = *m;
154 switch(l)
155 {
156 case 0:
157 break;
158 default:
159 l++;
160 MOV_A2R(l, mm3)
161 MUL4_256_R2R(mm2, mm3)
162
163 MOV_RA2R(mm3, mm1)
164 movq_r2r(mm6, mm7);
165 psubw_r2r(mm1, mm7);
166
167 MOV_P2R(*d, mm1, mm0)
168 MOV_RA2R(mm1, mm4)
169 MUL4_256_R2R(mm7, mm1)
170
171 MUL4_SYM_R2R(mm4, mm3, mm5)
172
173 paddw_r2r(mm3, mm1);
174 MOV_R2P(mm1, *d, mm0)
175 break;
176 }
177 m++; d++;
178 }
179}
180
181#define _op_blend_rel_mas_cn_dp_mmx _op_blend_rel_mas_c_dp_mmx
182#define _op_blend_rel_mas_can_dp_mmx _op_blend_rel_mas_c_dp_mmx
183#define _op_blend_rel_mas_caa_dp_mmx _op_blend_rel_mas_c_dp_mmx
184
185#define _op_blend_rel_mas_c_dpan_mmx _op_blend_mas_c_dpan_mmx
186#define _op_blend_rel_mas_cn_dpan_mmx _op_blend_mas_cn_dpan_mmx
187#define _op_blend_rel_mas_can_dpan_mmx _op_blend_mas_can_dpan_mmx
188#define _op_blend_rel_mas_caa_dpan_mmx _op_blend_mas_caa_dpan_mmx
189
190static void
191init_blend_rel_mask_color_span_funcs_mmx(void)
192{
193 op_blend_rel_span_funcs[SP_N][SM_AS][SC][DP][CPU_MMX] = _op_blend_rel_mas_c_dp_mmx;
194 op_blend_rel_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_MMX] = _op_blend_rel_mas_cn_dp_mmx;
195 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_MMX] = _op_blend_rel_mas_can_dp_mmx;
196 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_MMX] = _op_blend_rel_mas_caa_dp_mmx;
197
198 op_blend_rel_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_MMX] = _op_blend_rel_mas_c_dpan_mmx;
199 op_blend_rel_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_rel_mas_cn_dpan_mmx;
200 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_MMX] = _op_blend_rel_mas_can_dpan_mmx;
201 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_MMX] = _op_blend_rel_mas_caa_dpan_mmx;
202}
203#endif
204
205#ifdef BUILD_MMX
206static void
207_op_blend_rel_pt_mas_c_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
208 pxor_r2r(mm0, mm0);
209 MOV_A2R(ALPHA_256, mm6)
210 MOV_A2R(ALPHA_255, mm5)
211 s = m + 1;
212 MOV_A2R(s, mm3)
213 MOV_P2R(c, mm2, mm0)
214 MUL4_256_R2R(mm2, mm3)
215
216 MOV_RA2R(mm3, mm1)
217 psubw_r2r(mm1, mm6);
218
219 MOV_P2R(*d, mm1, mm0)
220 MOV_RA2R(mm1, mm4)
221 MUL4_256_R2R(mm6, mm1)
222
223 MUL4_SYM_R2R(mm4, mm3, mm5)
224
225 paddw_r2r(mm3, mm1);
226 MOV_R2P(mm1, *d, mm0)
227}
228
229#define _op_blend_rel_pt_mas_cn_dp_mmx _op_blend_rel_pt_mas_c_dp_mmx
230#define _op_blend_rel_pt_mas_can_dp_mmx _op_blend_rel_pt_mas_c_dp_mmx
231#define _op_blend_rel_pt_mas_caa_dp_mmx _op_blend_rel_pt_mas_c_dp_mmx
232
233#define _op_blend_rel_pt_mas_c_dpan_mmx _op_blend_pt_mas_c_dpan_mmx
234#define _op_blend_rel_pt_mas_cn_dpan_mmx _op_blend_pt_mas_cn_dpan_mmx
235#define _op_blend_rel_pt_mas_can_dpan_mmx _op_blend_pt_mas_can_dpan_mmx
236#define _op_blend_rel_pt_mas_caa_dpan_mmx _op_blend_pt_mas_caa_dpan_mmx
237
238static void
239init_blend_rel_mask_color_pt_funcs_mmx(void)
240{
241 op_blend_rel_pt_funcs[SP_N][SM_AS][SC][DP][CPU_MMX] = _op_blend_rel_pt_mas_c_dp_mmx;
242 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_MMX] = _op_blend_rel_pt_mas_cn_dp_mmx;
243 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_MMX] = _op_blend_rel_pt_mas_can_dp_mmx;
244 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_MMX] = _op_blend_rel_pt_mas_caa_dp_mmx;
245
246 op_blend_rel_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_MMX] = _op_blend_rel_pt_mas_c_dpan_mmx;
247 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_rel_pt_mas_cn_dpan_mmx;
248 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_MMX] = _op_blend_rel_pt_mas_can_dpan_mmx;
249 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_MMX] = _op_blend_rel_pt_mas_caa_dpan_mmx;
250}
251#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_neon.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_neon.c
deleted file mode 100644
index f5eb480..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_neon.c
+++ /dev/null
@@ -1,562 +0,0 @@
1#define NEONDEBUG 0
2
3
4#if NEONDEBUG
5#define DEBUG_FNCOUNT(x) \
6 do { \
7 static int _foo = 0; \
8 if (_foo++%10000 ==0) \
9 printf("%s %+d %s: %d (%s)\n",__FILE__,__LINE__,__FUNCTION__,\
10 _foo, x " optimised");\
11 } while (0)
12#else
13#define DEBUG_FNCOUNT(x) ((void)x)
14#endif
15
16
17/* blend mask x color -> dst */
18
19#ifdef BUILD_NEON
20static void
21_op_blend_mas_c_dp_neon(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
22 DATA32 *e;
23
24 DEBUG_FNCOUNT("");
25
26#define AP "blend_mas_c_dp_"
27 asm volatile (
28 ".fpu neon \n\t"
29 " vdup.i32 q15, %[c] \n\t"
30 " vmov.i8 q14, #1 \n\t"
31
32 // If aligned already - straight to quads
33 " andS %[tmp], %[d],$0xf \n\t"
34 " beq "AP"quadloops \n\t"
35
36 " andS %[tmp], %[d],$0x4 \n\t"
37 " beq "AP"dualloop \n\t"
38
39 AP"singleloop: \n\t"
40 " vld1.8 d0[0], [%[m]]! \n\t"
41 " vld1.32 d4[0], [%[d]] \n\t"
42 " vdup.u8 d0, d0[0] \n\t"
43 " vmull.u8 q4, d0, d30 \n\t"
44 " vqrshrn.u16 d12, q4, #8 \n\t"
45 " vmvn.u16 d14, d12 \n\t"
46 " vshr.u32 d16, d14, #24 \n\t"
47 " vmul.u32 d16, d16, d28 \n\t"
48 " vmull.u8 q7, d16, d4 \n\t"
49 " vqrshrn.u16 d0, q7, #8 \n\t"
50 " vqadd.u8 d0, d0, d12 \n\t"
51 " vst1.32 d0[0], [%[d]]! \n\t"
52
53 // Can we go the fast path?
54 " andS %[tmp], %[d],$0xf \n\t"
55 " beq "AP"quadloops \n\t"
56
57 AP"dualloop: \n\t"
58 " sub %[tmp], %[e], %[d] \n\t"
59 " cmp %[tmp], #16 \n\t"
60 " blt "AP"loopout \n\t"
61
62 " vld1.16 d0[0], [%[m]]! \n\t"
63 " vldm %[d], {d4} \n\t"
64 " vmovl.u8 q0, d0 \n\t"
65 " vmovl.u8 q0, d0 \n\t"
66 " vmul.u32 q0, q14 \n\t"
67 " vmull.u8 q4, d0, d30 \n\t"
68 " vqrshrn.u16 d12, q4, #8 \n\t"
69 " vmvn.u16 d14, d12 \n\t"
70 " vshr.u32 d16, d14, #24 \n\t"
71 " vmul.u32 d16, d16, d28 \n\t"
72 " vmull.u8 q7, d16, d4 \n\t"
73 " vqrshrn.u16 d0, q7, #8 \n\t"
74 " vqadd.u8 q0, q0, q6 \n\t"
75 " vstm %[d]!, {d0} \n\t"
76
77 AP"quadloops: \n\t"
78 " sub %[tmp], %[e], %[d] \n\t"
79 " cmp %[tmp], #16 \n\t"
80 " blt "AP"loopout \n\t"
81
82
83 " sub %[tmp], %[e], #15 \n\t"
84
85 " sub %[d], #16 \n\t"
86 AP"fastloop:"
87 " add %[d], #16 \n\t"
88 " cmp %[tmp], %[d] \n\t"
89 " ble "AP"loopout \n\t"
90 AP"quadloopint: \n\t"
91 " ldr %[x], [%[m]] \n\t"
92 " add %[m], #4 \n\t"
93 " cmp %[x], #0 \n\t"
94 " beq "AP"fastloop \n\t"
95 " vmov.32 d0[0], %[x] \n\t"
96 " vldm %[d], {d4,d5} \n\t"
97
98 // Expand M: Fixme: Can we do this quicker?
99 " vmovl.u8 q0, d0 \n\t"
100 " vmovl.u8 q0, d0 \n\t"
101 " vmul.u32 q0, q14 \n\t"
102
103 // Multiply a * c
104 " vmull.u8 q4, d0, d30 \n\t"
105 " vmull.u8 q5, d1, d31 \n\t"
106
107 // Shorten
108 " vqrshrn.u16 d12, q4, #8 \n\t"
109 " vqrshrn.u16 d13, q5, #8 \n\t"
110
111 // extract negated alpha
112 " vmvn.u16 q7, q6 \n\t"
113 " vshr.u32 q8, q7, #24 \n\t"
114 " vmul.u32 q8, q8, q14 \n\t"
115
116 // Multiply
117 " vmull.u8 q7, d16, d4 \n\t"
118 " vmull.u8 q8, d17, d5 \n\t"
119
120 " vqrshrn.u16 d0, q7, #8 \n\t"
121 " vqrshrn.u16 d1, q8, #8 \n\t"
122
123 // Add
124 " vqadd.u8 q0, q0, q6 \n\t"
125
126 " vstm %[d]!, {d0,d1} \n\t"
127
128 " cmp %[tmp], %[d] \n\t"
129 " bhi "AP"quadloopint \n\t"
130
131 AP"loopout: \n\t"
132#if NEONDEBUG
133 "cmp %[d], %[e] \n\t"
134 "ble "AP"foo \n\t"
135 "cmp %[tmp], %[m] \n\t"
136 "sub %[x], %[x] \n\t"
137 "vst1.32 d0[0], [%[x]] \n\t"
138 AP"foo: \n\t"
139#endif
140
141 " cmp %[d], %[e] \n\t"
142 " beq "AP"done \n\t"
143 " sub %[tmp],%[e], %[d] \n\t"
144 " cmp %[tmp],#4 \n\t"
145 " beq "AP"singleout \n\t"
146
147 AP "dualloop2: \n\t"
148 "sub %[tmp],%[e],$0x8 \n\t"
149 " vld1.16 d0[0], [%[m]]! \n\t"
150 " vldm %[d], {d4} \n\t"
151 " vmovl.u8 q0, d0 \n\t"
152 " vmovl.u8 q0, d0 \n\t"
153 " vmul.u32 q0, q14 \n\t"
154 " vmull.u8 q4, d0, d30 \n\t"
155 " vqrshrn.u16 d12, q4, #8 \n\t"
156 " vmvn.u16 d14, d12 \n\t"
157 " vshr.u32 d16, d14, #24 \n\t"
158 " vmul.u32 d16, d16, d28 \n\t"
159 " vmull.u8 q7, d16, d4 \n\t"
160 " vqrshrn.u16 d0, q7, #8 \n\t"
161 " vqadd.u8 q0, q0, q6 \n\t"
162 " vstm %[d]!, {d0} \n\t"
163
164 " cmp %[e], %[d] \n\t"
165 " beq "AP"done \n\t"
166
167 AP"singleout: \n\t"
168 " vld1.8 d0[0], [%[m]]! \n\t"
169 " vld1.32 d4[0], [%[d]] \n\t"
170 " vdup.u8 d0, d0[0] \n\t"
171 " vmull.u8 q4, d0, d30 \n\t"
172 " vqrshrn.u16 d12, q4, #8 \n\t"
173 " vmvn.u16 d14, d12 \n\t"
174 " vshr.u32 d16, d14, #24 \n\t"
175 " vmul.u32 d16, d16, d28 \n\t"
176 " vmull.u8 q7, d16, d4 \n\t"
177 " vqrshrn.u16 d0, q7, #8 \n\t"
178 " vqadd.u8 q0, q0, q6 \n\t"
179 " vst1.32 d0[0], [%[d]]! \n\t"
180
181 AP"done: \n\t"
182#if NEONDEBUG
183 "cmp %[d], %[e] \n\t"
184 "beq "AP"reallydone \n\t"
185 "sub %[tmp], %[tmp] \n\t"
186 "vst1.32 d0[0], [%[tmp]] \n\t"
187 AP"reallydone:"
188#endif
189 : // Out
190 : [e] "r" (d + l), [d] "r" (d), [c] "r" (c),
191 [tmp] "r" (7), [m] "r" (m), [x] "r" (0)
192 : "q0", "q1", "q2","q3", "q4","q5","q6", "q7","q8","q14","q15",
193 "memory" // clobbered
194 );
195#undef AP
196}
197#endif
198
199#ifdef BUILD_NEON
200static void
201_op_blend_mas_can_dp_neon(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
202 DATA32 *e,*tmp;
203 int alpha;
204
205 DEBUG_FNCOUNT("");
206
207#define AP "_blend_mas_can_dp_neon_"
208 asm volatile (
209 ".fpu neon \n\t"
210 "vdup.u32 q9, %[c] \n\t"
211 "vmov.i8 q15, #1 \n\t"
212 "vmov.i8 q14, #0 \n\t"
213
214 // Make C 16 bit (C in q3/q2)
215 "vmovl.u8 q3, d19 \n\t"
216 "vmovl.u8 q2, d18 \n\t"
217
218 // Which loop to start
219 " andS %[tmp], %[d],$0xf \n\t"
220 " beq "AP"quadloop \n\t"
221
222 " andS %[tmp], %[d], #4 \n\t"
223 " beq "AP"dualstart \n\t"
224
225
226 AP"singleloop: \n\t"
227 " vld1.8 d0[0], [%[m]]! \n\t"
228 " vld1.32 d8[0], [%[d]] \n\t"
229 " vdup.u8 d0, d0[0] \n\t"
230 " vshr.u8 d0, d0, #1 \n\t"
231 " vmovl.u8 q0, d0 \n\t"
232 " vmovl.u8 q4, d8 \n\t"
233 " vsub.s16 q6, q2, q4 \n\t"
234 " vmul.s16 q6, q0 \n\t"
235 " vshr.s16 q6, #7 \n\t"
236 " vadd.s16 q6, q4 \n\t"
237 " vqmovun.s16 d2, q6 \n\t"
238 " vst1.32 d2[0], [%[d]]! \n\t"
239
240 " andS %[tmp], %[d], $0xf \n\t"
241 " beq "AP"quadloop \n\t"
242
243 AP"dualstart: \n\t"
244 " sub %[tmp], %[e], %[d] \n\t"
245 " cmp %[tmp], #16 \n\t"
246 " blt "AP"loopout \n\t"
247
248 AP"dualloop: \n\t"
249 " vld1.16 d0[0], [%[m]]! \n\t"
250 " vldm %[d], {d8} \n\t"
251 " vmovl.u8 q0, d0 \n\t"
252 " vmovl.u8 q0, d0 \n\t"
253 " vmul.u32 d0, d0, d30 \n\t"
254 " vshr.u8 d0, d0, #1 \n\t"
255 " vmovl.u8 q0, d0 \n\t"
256 " vmovl.u8 q4, d8 \n\t"
257 " vsub.s16 q6, q2, q4 \n\t"
258 " vmul.s16 q6, q0 \n\t"
259 " vshr.s16 q6, #7 \n\t"
260 " vadd.s16 q6, q4 \n\t"
261 " vqmovun.s16 d2, q6 \n\t"
262 " vstm %[d]!, {d2} \n\t"
263
264 AP"quadloop: \n\t"
265 " sub %[tmp], %[e], %[d] \n\t"
266 " cmp %[tmp], #16 \n\t"
267 " blt "AP"loopout \n\t"
268 " sub %[tmp], %[e], #15 \n\t"
269
270 " sub %[d], #16 \n\t"
271 AP"fastloop: \n\t"
272 " add %[d], #16 \n\t"
273 " cmp %[tmp], %[d] \n\t"
274 " blt "AP"loopout \n\t"
275
276 AP"quadloopint: \n\t"
277 // Load the mask: 4 bytes: It has d0/d1
278 " ldr %[x], [%[m]] \n\t"
279 " add %[m], #4 \n\t"
280
281 // Check for shortcuts
282 " cmp %[x], #0 \n\t"
283 " beq "AP"fastloop \n\t"
284
285 " cmp %[x], $0xffffffff \n\t"
286 " beq "AP"quadstore \n\t"
287
288 " vmov.32 d0[0], %[x] \n\t"
289 // Load d into d8/d9 q4
290 " vldm %[d], {d8,d9} \n\t"
291
292 // Get the alpha channel ready (m)
293 " vmovl.u8 q0, d0 \n\t"
294 " vmovl.u8 q0, d0 \n\t"
295 " vmul.u32 q0, q0,q15 \n\t"
296 // Lop a bit off to prevent overflow
297 " vshr.u8 q0, q0, #1 \n\t"
298
299 // Now make it 16 bit
300 " vmovl.u8 q1, d1 \n\t"
301 " vmovl.u8 q0, d0 \n\t"
302
303 // 16 bit 'd'
304 " vmovl.u8 q5, d9 \n\t"
305 " vmovl.u8 q4, d8 \n\t"
306
307 // Diff 'd' & 'c'
308 " vsub.s16 q7, q3, q5 \n\t"
309 " vsub.s16 q6, q2, q4 \n\t"
310
311 " vmul.s16 q7, q1 \n\t"
312 " vmul.s16 q6, q0 \n\t"
313
314 // Shift results a bit
315 " vshr.s16 q7, #7 \n\t"
316 " vshr.s16 q6, #7 \n\t"
317
318 // Add 'd'
319 " vadd.s16 q7, q5 \n\t"
320 " vadd.s16 q6, q4 \n\t"
321
322 // Make sure none are negative
323 " vqmovun.s16 d9, q7 \n\t"
324 " vqmovun.s16 d8, q6 \n\t"
325
326 " vstm %[d]!, {d8,d9} \n\t"
327
328 " cmp %[tmp], %[d] \n\t"
329 " bhi "AP"quadloopint \n\t"
330 " b "AP"loopout \n\t"
331
332 AP"quadstore: \n\t"
333 " vstm %[d]!, {d18,d19} \n\t"
334 " cmp %[tmp], %[d] \n\t"
335 " bhi "AP"quadloopint \n\t"
336
337 AP"loopout: \n\t"
338#if NEONDEBUG
339 "cmp %[d], %[e] \n\t"
340 "ble "AP"foo \n\t"
341 "sub %[tmp], %[tmp] \n\t"
342 "vst1.32 d0[0], [%[tmp]] \n\t"
343 AP"foo: \n\t"
344#endif
345
346 " cmp %[e], %[d] \n\t"
347 " beq "AP"done \n\t"
348
349 " sub %[tmp],%[e], %[d] \n\t"
350 " cmp %[tmp],#8 \n\t"
351
352 " blt "AP"onebyte \n\t"
353
354 // Load the mask: 2 bytes: It has d0
355 " vld1.16 d0[0], [%[m]]! \n\t"
356
357 // Load d into d8/d9 q4
358 " vldm %[d], {d8} \n\t"
359
360 // Get the alpha channel ready (m)
361 " vmovl.u8 q0, d0 \n\t"
362 " vmovl.u8 q0, d0 \n\t"
363 " vmul.u32 d0, d0, d30 \n\t"
364 // Lop a bit off to prevent overflow
365 " vshr.u8 d0, d0, #1 \n\t"
366
367 // Now make it 16 bit
368 " vmovl.u8 q0, d0 \n\t"
369
370 // 16 bit 'd'
371 " vmovl.u8 q4, d8 \n\t"
372
373 // Diff 'd' & 'c'
374 " vsub.s16 q6, q2, q4 \n\t"
375
376 " vmul.s16 q6, q0 \n\t"
377
378 // Shift results a bit
379 " vshr.s16 q6, #7 \n\t"
380
381 // Add 'd'
382 "vadd.s16 q6, q4 \n\t"
383
384 // Make sure none are negative
385 "vqmovun.s16 d2, q6 \n\t"
386
387 "vstm %[d]!, {d2} \n\t"
388
389 "cmp %[e], %[d] \n\t"
390 "beq "AP"done \n\t"
391
392 AP"onebyte: \n\t"
393 "vld1.8 d0[0], [%[m]]! \n\t"
394 "vld1.32 d8[0], [%[d]] \n\t"
395 "vdup.u8 d0, d0[0] \n\t"
396 "vshr.u8 d0, d0, #1 \n\t"
397 "vmovl.u8 q0, d0 \n\t"
398 "vmovl.u8 q4, d8 \n\t"
399 "vsub.s16 q6, q2, q4 \n\t"
400 "vmul.s16 q6, q0 \n\t"
401 "vshr.s16 q6, #7 \n\t"
402 "vadd.s16 q6, q4 \n\t"
403 "vqmovun.s16 d2, q6 \n\t"
404 "vst1.32 d2[0], [%[d]]! \n\t"
405
406
407 AP"done: \n\t"
408#if NEONDEBUG
409 "cmp %[d], %[e] \n\t"
410 "beq "AP"reallydone \n\t"
411 "sub %[m], %[m] \n\t"
412 "vst1.32 d0[0], [%[m]] \n\t"
413 AP"reallydone:"
414#endif
415
416
417 : // output regs
418 // Input
419 : [e] "r" (e = d + l), [d] "r" (d), [c] "r" (c),
420 [m] "r" (m), [tmp] "r" (7), [x] "r" (33)
421 : "q0", "q1", "q2","q3", "q4","q5","q6", "q7","q9","q14","q15",
422 "memory" // clobbered
423
424 );
425#undef AP
426}
427#endif
428
429#ifdef BUILD_NEON
430#define _op_blend_mas_cn_dp_neon _op_blend_mas_can_dp_neon
431#define _op_blend_mas_caa_dp_neon _op_blend_mas_c_dp_neon
432
433#define _op_blend_mas_c_dpan_neon _op_blend_mas_c_dp_neon
434#define _op_blend_mas_cn_dpan_neon _op_blend_mas_cn_dp_neon
435#define _op_blend_mas_can_dpan_neon _op_blend_mas_can_dp_neon
436#define _op_blend_mas_caa_dpan_neon _op_blend_mas_caa_dp_neon
437
438static void
439init_blend_mask_color_span_funcs_neon(void)
440{
441 op_blend_span_funcs[SP_N][SM_AS][SC][DP][CPU_NEON] = _op_blend_mas_c_dp_neon;
442 op_blend_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_NEON] = _op_blend_mas_cn_dp_neon;
443 op_blend_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_NEON] = _op_blend_mas_can_dp_neon;
444 op_blend_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_NEON] = _op_blend_mas_caa_dp_neon;
445
446 op_blend_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_NEON] = _op_blend_mas_c_dpan_neon;
447 op_blend_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_mas_cn_dpan_neon;
448 op_blend_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_NEON] = _op_blend_mas_can_dpan_neon;
449 op_blend_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_NEON] = _op_blend_mas_caa_dpan_neon;
450}
451#endif
452
453#ifdef BUILD_NEON
454static void
455_op_blend_pt_mas_c_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
456 s = MUL_SYM(m, c);
457 c = 256 - (s >> 24);
458 *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
459}
460
461
462#define _op_blend_pt_mas_cn_dp_neon _op_blend_pt_mas_c_dp_neon
463#define _op_blend_pt_mas_can_dp_neon _op_blend_pt_mas_c_dp_neon
464#define _op_blend_pt_mas_caa_dp_neon _op_blend_pt_mas_c_dp_neon
465
466#define _op_blend_pt_mas_c_dpan_neon _op_blend_pt_mas_c_dp_neon
467#define _op_blend_pt_mas_cn_dpan_neon _op_blend_pt_mas_cn_dp_neon
468#define _op_blend_pt_mas_can_dpan_neon _op_blend_pt_mas_can_dp_neon
469#define _op_blend_pt_mas_caa_dpan_neon _op_blend_pt_mas_caa_dp_neon
470
471static void
472init_blend_mask_color_pt_funcs_neon(void)
473{
474 op_blend_pt_funcs[SP_N][SM_AS][SC][DP][CPU_NEON] = _op_blend_pt_mas_c_dp_neon;
475 op_blend_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_NEON] = _op_blend_pt_mas_cn_dp_neon;
476 op_blend_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_NEON] = _op_blend_pt_mas_can_dp_neon;
477 op_blend_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_NEON] = _op_blend_pt_mas_caa_dp_neon;
478
479 op_blend_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_NEON] = _op_blend_pt_mas_c_dpan_neon;
480 op_blend_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_pt_mas_cn_dpan_neon;
481 op_blend_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_NEON] = _op_blend_pt_mas_can_dpan_neon;
482 op_blend_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_NEON] = _op_blend_pt_mas_caa_dpan_neon;
483}
484#endif
485
486/*-----*/
487
488/* blend_rel mask x color -> dst */
489
490#ifdef BUILD_NEON
491static void
492_op_blend_rel_mas_c_dp_neon(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
493 DATA32 *e;
494 int alpha;
495
496 DEBUG_FNCOUNT("not");
497
498 UNROLL8_PLD_WHILE(d, l, e,
499 {
500 DATA32 mc = MUL_SYM(*m, c);
501 alpha = 256 - (mc >> 24);
502 *d = MUL_SYM(*d >> 24, mc) + MUL_256(alpha, *d);
503 d++;
504 m++;
505 });
506}
507
508#define _op_blend_rel_mas_cn_dp_neon _op_blend_rel_mas_c_dp_neon
509#define _op_blend_rel_mas_can_dp_neon _op_blend_rel_mas_c_dp_neon
510#define _op_blend_rel_mas_caa_dp_neon _op_blend_rel_mas_c_dp_neon
511
512#define _op_blend_rel_mas_c_dpan_neon _op_blend_mas_c_dpan_neon
513#define _op_blend_rel_mas_cn_dpan_neon _op_blend_mas_cn_dpan_neon
514#define _op_blend_rel_mas_can_dpan_neon _op_blend_mas_can_dpan_neon
515#define _op_blend_rel_mas_caa_dpan_neon _op_blend_mas_caa_dpan_neon
516
517static void
518init_blend_rel_mask_color_span_funcs_neon(void)
519{
520 op_blend_rel_span_funcs[SP_N][SM_AS][SC][DP][CPU_NEON] = _op_blend_rel_mas_c_dp_neon;
521 op_blend_rel_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_NEON] = _op_blend_rel_mas_cn_dp_neon;
522 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_NEON] = _op_blend_rel_mas_can_dp_neon;
523 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_NEON] = _op_blend_rel_mas_caa_dp_neon;
524
525 op_blend_rel_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_NEON] = _op_blend_rel_mas_c_dpan_neon;
526 op_blend_rel_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_rel_mas_cn_dpan_neon;
527 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_NEON] = _op_blend_rel_mas_can_dpan_neon;
528 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_NEON] = _op_blend_rel_mas_caa_dpan_neon;
529}
530#endif
531
532#ifdef BUILD_NEON
533static void
534_op_blend_rel_pt_mas_c_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
535 s = MUL_SYM(m, c);
536 c = 256 - (s >> 24);
537 *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
538}
539
540#define _op_blend_rel_pt_mas_cn_dp_neon _op_blend_rel_pt_mas_c_dp_neon
541#define _op_blend_rel_pt_mas_can_dp_neon _op_blend_rel_pt_mas_c_dp_neon
542#define _op_blend_rel_pt_mas_caa_dp_neon _op_blend_rel_pt_mas_c_dp_neon
543
544#define _op_blend_rel_pt_mas_c_dpan_neon _op_blend_pt_mas_c_dpan_neon
545#define _op_blend_rel_pt_mas_cn_dpan_neon _op_blend_pt_mas_cn_dpan_neon
546#define _op_blend_rel_pt_mas_can_dpan_neon _op_blend_pt_mas_can_dpan_neon
547#define _op_blend_rel_pt_mas_caa_dpan_neon _op_blend_pt_mas_caa_dpan_neon
548
549static void
550init_blend_rel_mask_color_pt_funcs_neon(void)
551{
552 op_blend_rel_pt_funcs[SP_N][SM_AS][SC][DP][CPU_NEON] = _op_blend_rel_pt_mas_c_dp_neon;
553 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_NEON] = _op_blend_rel_pt_mas_cn_dp_neon;
554 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_NEON] = _op_blend_rel_pt_mas_can_dp_neon;
555 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_NEON] = _op_blend_rel_pt_mas_caa_dp_neon;
556
557 op_blend_rel_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_NEON] = _op_blend_rel_pt_mas_c_dpan_neon;
558 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_rel_pt_mas_cn_dpan_neon;
559 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_NEON] = _op_blend_rel_pt_mas_can_dpan_neon;
560 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_NEON] = _op_blend_rel_pt_mas_caa_dpan_neon;
561}
562#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_sse3.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_sse3.c
deleted file mode 100644
index 5883d15..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_mask_color_sse3.c
+++ /dev/null
@@ -1,321 +0,0 @@
1/* blend mask x color -> dst */
2
3#ifdef BUILD_SSE3
4
5static void
6_op_blend_mas_c_dp_sse3(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
7
8 const __m128i c_packed = _mm_set_epi32(c, c, c, c);
9
10 LOOP_ALIGNED_U1_A48_SSE3(d, l,
11 { /* UOP */
12
13 DATA32 a = *m;
14 DATA32 mc = MUL_SYM(a, c);
15 a = 256 - (mc >> 24);
16 *d = mc + MUL_256(a, *d);
17 m++; d++; l--;
18 },
19 { /* A4OP */
20
21 if ((m[3] | m[2] | m[1] | m[0]) == 0) {
22 m += 4; d += 4; l -= 4;
23 continue;
24 }
25
26 __m128i m0 = _mm_set_epi32(m[3], m[2], m[1], m[0]);
27 __m128i d0 = _mm_load_si128((__m128i *)d);
28
29 __m128i mc0 = mul_sym_sse3(m0, c_packed);
30 __m128i a0 = sub4_alpha_sse3(mc0);
31 __m128i mul0 = mul_256_sse3(a0, d0);
32
33 mul0 = _mm_add_epi32(mul0, mc0);
34
35 _mm_store_si128((__m128i *)d, mul0);
36
37 m += 4; d += 4; l -= 4;
38 },
39 { /* A8OP */
40
41 if((m[7] | m[6] | m[5] | m[4] | m[3] | m[2] | m[1] | m[0]) == 0) {
42 m += 8; d += 8; l -= 8;
43 continue;
44 }
45
46 __m128i m0 = _mm_set_epi32(m[3], m[2], m[1], m[0]);
47 __m128i d0 = _mm_load_si128((__m128i *)d);
48
49 __m128i m1 = _mm_set_epi32(m[7], m[6], m[5], m[4]);
50 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
51
52 __m128i mc0 = mul_sym_sse3(m0, c_packed);
53 __m128i a0 = sub4_alpha_sse3(mc0);
54 __m128i mul0 = mul_256_sse3(a0, d0);
55
56 mul0 = _mm_add_epi32(mc0, mul0);
57
58 __m128i mc1 = mul_sym_sse3(m1, c_packed);
59 __m128i a1 = sub4_alpha_sse3(mc1);
60 __m128i mul1 = mul_256_sse3(a1, d1);
61
62 mul1 = _mm_add_epi32(mc1, mul1);
63
64 _mm_store_si128((__m128i *)d, mul0);
65 _mm_store_si128((__m128i *)(d+4), mul1);
66
67 m += 8; d += 8; l -= 8;
68 })
69}
70
71static void
72_op_blend_mas_can_dp_sse3(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
73
74 DATA32 alpha;
75
76 const __m128i one = _mm_set_epi32(1, 1, 1, 1);
77 const __m128i c_packed = _mm_set_epi32(c, c, c, c);
78
79 LOOP_ALIGNED_U1_A48_SSE3(d, l,
80 { /* UOP */
81
82 alpha = *m;
83 switch(alpha)
84 {
85 case 0:
86 break;
87 case 255:
88 *d = c;
89 break;
90 default:
91 alpha++;
92 *d = INTERP_256(alpha, c, *d);
93 break;
94 }
95 m++; d++; l--;
96 },
97 { /* A4OP */
98
99 if ((m[3] | m[2] | m[1] | m[0]) == 0) {
100 m += 4; d += 4; l -= 4;
101 continue;
102 }
103
104 __m128i m0 = _mm_set_epi32(m[3], m[2], m[1], m[0]);
105 __m128i d0 = _mm_load_si128((__m128i *)d);
106
107 __m128i zm0 = _mm_cmpeq_epi32(m0, _mm_setzero_si128());
108
109 m0 = _mm_add_epi32(one, m0);
110
111 __m128i r0 = interp4_256_sse3(m0, c_packed, d0);
112
113 r0 = _mm_and_si128(~zm0, r0);
114 d0 = _mm_and_si128(zm0, d0);
115
116 d0 = _mm_add_epi32(r0, d0);
117
118 _mm_store_si128((__m128i *)d, d0);
119
120 m += 4; d += 4; l -= 4;
121 },
122 { /* A8OP */
123
124 if ((m[7] | m[6] | m[5] | m[4] | m[3] | m[2] | m[1] | m[0]) == 0) {
125 m += 8; d += 8; l -= 8;
126 continue;
127 }
128
129 __m128i m0 = _mm_set_epi32(m[3], m[2], m[1], m[0]);
130 __m128i d0 = _mm_load_si128((__m128i *)d);
131
132 __m128i m1 = _mm_set_epi32(m[7], m[6], m[5], m[4]);
133 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
134
135 __m128i zm0 = _mm_cmpeq_epi32(m0, _mm_setzero_si128());
136 __m128i zm1 = _mm_cmpeq_epi32(m1, _mm_setzero_si128());
137
138 m0 = _mm_add_epi32(one, m0);
139 m1 = _mm_add_epi32(one, m1);
140
141 __m128i r0 = interp4_256_sse3(m0, c_packed, d0);
142 __m128i r1 = interp4_256_sse3(m1, c_packed, d1);
143
144 r0 = _mm_and_si128(~zm0, r0);
145 d0 = _mm_and_si128(zm0, d0);
146
147 r1 = _mm_and_si128(~zm1, r1);
148 d1 = _mm_and_si128(zm1, d1);
149
150 d0 = _mm_add_epi32(d0, r0);
151 d1 = _mm_add_epi32(d1, r1);
152
153 _mm_store_si128((__m128i *)d, d0);
154 _mm_store_si128((__m128i *)(d+4), d1);
155
156 m += 8; d += 8; l -= 8;
157 })
158}
159
160#define _op_blend_mas_cn_dp_sse3 _op_blend_mas_can_dp_sse3
161#define _op_blend_mas_caa_dp_sse3 _op_blend_mas_c_dp_sse3
162
163#define _op_blend_mas_c_dpan_sse3 _op_blend_mas_c_dp_sse3
164#define _op_blend_mas_cn_dpan_sse3 _op_blend_mas_cn_dp_sse3
165#define _op_blend_mas_can_dpan_sse3 _op_blend_mas_can_dp_sse3
166#define _op_blend_mas_caa_dpan_sse3 _op_blend_mas_caa_dp_sse3
167
168static void
169init_blend_mask_color_span_funcs_sse3(void)
170{
171// FIXME: BUGGY BUGGY Core i5 750 (32bit), 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text and rectangle)
172// op_blend_span_funcs[SP_N][SM_AS][SC][DP][CPU_SSE3] = _op_blend_mas_c_dp_sse3;
173 op_blend_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_mas_cn_dp_sse3;
174 op_blend_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_SSE3] = _op_blend_mas_can_dp_sse3;
175 op_blend_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_SSE3] = _op_blend_mas_caa_dp_sse3;
176
177// FIXME: BUGGY BUGGY Core i5 2500 (64bit), gcc version 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text)
178// op_blend_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_SSE3] = _op_blend_mas_c_dpan_sse3;
179 op_blend_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_mas_cn_dpan_sse3;
180 op_blend_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_SSE3] = _op_blend_mas_can_dpan_sse3;
181 op_blend_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_SSE3] = _op_blend_mas_caa_dpan_sse3;
182}
183
184#define _op_blend_pt_mas_c_dp_sse3 NULL
185#define _op_blend_pt_mas_can_dp_sse3 NULL
186
187#define _op_blend_pt_mas_cn_dp_sse3 _op_blend_pt_mas_can_dp_sse3
188#define _op_blend_pt_mas_caa_dp_sse3 _op_blend_pt_mas_c_dp_sse3
189
190#define _op_blend_pt_mas_c_dpan_sse3 _op_blend_pt_mas_c_dp_sse3
191#define _op_blend_pt_mas_cn_dpan_sse3 _op_blend_pt_mas_cn_dp_sse3
192#define _op_blend_pt_mas_can_dpan_sse3 _op_blend_pt_mas_can_dp_sse3
193#define _op_blend_pt_mas_caa_dpan_sse3 _op_blend_pt_mas_caa_dp_sse3
194
195static void
196init_blend_mask_color_pt_funcs_sse3(void)
197{
198 op_blend_pt_funcs[SP_N][SM_AS][SC][DP][CPU_SSE3] = _op_blend_pt_mas_c_dp_sse3;
199 op_blend_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_pt_mas_cn_dp_sse3;
200 op_blend_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_SSE3] = _op_blend_pt_mas_can_dp_sse3;
201 op_blend_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_SSE3] = _op_blend_pt_mas_caa_dp_sse3;
202
203 op_blend_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_SSE3] = _op_blend_pt_mas_c_dpan_sse3;
204 op_blend_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_pt_mas_cn_dpan_sse3;
205 op_blend_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_SSE3] = _op_blend_pt_mas_can_dpan_sse3;
206 op_blend_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_SSE3] = _op_blend_pt_mas_caa_dpan_sse3;
207}
208
209/*-----*/
210
211/* blend_rel mask x color --> dst */
212
213static void
214_op_blend_rel_mas_c_dp_sse3(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
215
216 const __m128i c_packed = _mm_set_epi32(c, c, c, c);
217
218 LOOP_ALIGNED_U1_A48_SSE3(d, l,
219 { /* UOP */
220
221 DATA32 mc = MUL_SYM(*m, c);
222 int alpha = 256 - (mc >> 24);
223 *d = MUL_SYM(*d >> 24, mc) + MUL_256(alpha, *d);
224 d++; m++; l--;
225 },
226 { /* A4OP */
227
228 __m128i m0 = _mm_set_epi32(m[3], m[2], m[1], m[0]);
229 __m128i d0 = _mm_load_si128((__m128i *) d);
230
231 __m128i mc0 = mul_sym_sse3(m0, c_packed);
232 __m128i a0 = sub4_alpha_sse3(mc0);
233
234 __m128i d0_sym = mul_sym_sse3(_mm_srli_epi32(d0, 24), mc0);
235 d0 = mul_256_sse3(a0, d0);
236
237 d0 = _mm_add_epi32(d0, d0_sym);
238
239 _mm_store_si128((__m128i *)d, d0);
240
241 d += 4; m += 4; l -= 4;
242 },
243 { /* A8OP */
244
245 __m128i m0 = _mm_set_epi32(m[3], m[2], m[1], m[0]);
246 __m128i d0 = _mm_load_si128((__m128i *)d);
247
248 __m128i m1 = _mm_set_epi32(m[7], m[6], m[5], m[4]);
249 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
250
251 __m128i mc0 = mul_sym_sse3(m0, c_packed);
252 __m128i mc1 = mul_sym_sse3(m1, c_packed);
253
254 __m128i a0 = sub4_alpha_sse3(mc0);
255 __m128i a1 = sub4_alpha_sse3(mc1);
256
257 __m128i d0_sym = mul_sym_sse3(_mm_srli_epi32(d0, 24), mc0);
258 __m128i d1_sym = mul_sym_sse3(_mm_srli_epi32(d1, 24), mc1);
259
260 d0 = mul_256_sse3(a0, d0);
261 d1 = mul_256_sse3(a1, d1);
262
263 d0 = _mm_add_epi32(d0, d0_sym);
264 d1 = _mm_add_epi32(d1, d1_sym);
265
266 _mm_store_si128((__m128i *)d, d0);
267 _mm_store_si128((__m128i *)(d+4), d1);
268
269 d += 8; m += 8; l -= 8;
270 })
271}
272
273#define _op_blend_rel_mas_cn_dp_sse3 _op_blend_rel_mas_c_dp_sse3
274#define _op_blend_rel_mas_can_dp_sse3 _op_blend_rel_mas_c_dp_sse3
275#define _op_blend_rel_mas_caa_dp_sse3 _op_blend_rel_mas_c_dp_sse3
276
277#define _op_blend_rel_mas_c_dpan_sse3 _op_blend_mas_c_dpan_sse3
278#define _op_blend_rel_mas_cn_dpan_sse3 _op_blend_mas_cn_dpan_sse3
279#define _op_blend_rel_mas_can_dpan_sse3 _op_blend_mas_can_dpan_sse3
280#define _op_blend_rel_mas_caa_dpan_sse3 _op_blend_mas_caa_dpan_sse3
281
282static void
283init_blend_rel_mask_color_span_funcs_sse3(void)
284{
285 op_blend_rel_span_funcs[SP_N][SM_AS][SC][DP][CPU_SSE3] = _op_blend_rel_mas_c_dp_sse3;
286 op_blend_rel_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_rel_mas_can_dp_sse3;
287 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_SSE3] = _op_blend_rel_mas_can_dp_sse3;
288 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_SSE3] = _op_blend_rel_mas_caa_dp_sse3;
289
290 op_blend_rel_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_SSE3] = _op_blend_rel_mas_c_dpan_sse3;
291 op_blend_rel_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_rel_mas_cn_dpan_sse3;
292 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_SSE3] = _op_blend_rel_mas_can_dpan_sse3;
293 op_blend_rel_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_SSE3] = _op_blend_rel_mas_caa_dpan_sse3;
294}
295
296#define _op_blend_rel_pt_mas_c_dp_sse3 NULL
297
298#define _op_blend_rel_pt_mas_cn_dp_sse3 _op_blend_rel_pt_mas_c_dp_sse3
299#define _op_blend_rel_pt_mas_can_dp_sse3 _op_blend_rel_pt_mas_c_dp_sse3
300#define _op_blend_rel_pt_mas_caa_dp_sse3 _op_blend_rel_pt_mas_c_dp_sse3
301
302#define _op_blend_rel_pt_mas_c_dpan_sse3 _op_blend_pt_mas_c_dpan_sse3
303#define _op_blend_rel_pt_mas_cn_dpan_sse3 _op_blend_pt_mas_cn_dpan_sse3
304#define _op_blend_rel_pt_mas_can_dpan_sse3 _op_blend_pt_mas_can_dpan_sse3
305#define _op_blend_rel_pt_mas_caa_dpan_sse3 _op_blend_pt_mas_caa_dpan_sse3
306
307static void
308init_blend_rel_mask_color_pt_funcs_sse3(void)
309{
310 op_blend_rel_pt_funcs[SP_N][SM_AS][SC][DP][CPU_SSE3] = _op_blend_rel_pt_mas_c_dp_sse3;
311 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_rel_pt_mas_cn_dp_sse3;
312 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_SSE3] = _op_blend_rel_pt_mas_can_dp_sse3;
313 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_SSE3] = _op_blend_rel_pt_mas_caa_dp_sse3;
314
315 op_blend_rel_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_SSE3] = _op_blend_rel_pt_mas_c_dpan_sse3;
316 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_rel_pt_mas_cn_dpan_sse3;
317 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_SSE3] = _op_blend_rel_pt_mas_can_dpan_sse3;
318 op_blend_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_SSE3] = _op_blend_rel_pt_mas_caa_dpan_sse3;
319}
320
321#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_master_sse3.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_master_sse3.c
deleted file mode 100644
index eac6755..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_master_sse3.c
+++ /dev/null
@@ -1,77 +0,0 @@
1#define NEED_SSE3 1
2
3#include "evas_common.h"
4
5#ifdef BUILD_SSE3
6static __m128i A_MASK_SSE3;
7#endif
8
9extern RGBA_Gfx_Func op_blend_span_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
10extern RGBA_Gfx_Pt_Func op_blend_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
11
12extern RGBA_Gfx_Func op_blend_rel_span_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
13extern RGBA_Gfx_Pt_Func op_blend_rel_pt_funcs[SP_LAST][SM_LAST][SC_LAST][DP_LAST][CPU_LAST];
14
15# include "op_blend_pixel_sse3.c"
16# include "op_blend_color_sse3.c"
17# include "op_blend_pixel_color_sse3.c"
18# include "op_blend_pixel_mask_sse3.c"
19# include "op_blend_mask_color_sse3.c"
20
21void
22evas_common_op_blend_init_sse3(void)
23{
24#ifdef BUILD_SSE3
25 GA_MASK_SSE3 = _mm_set_epi32(0x00FF00FF, 0x00FF00FF, 0x00FF00FF, 0x00FF00FF);
26 RB_MASK_SSE3 = _mm_set_epi32(0xFF00FF00, 0xFF00FF00, 0xFF00FF00, 0xFF00FF00);
27 SYM4_MASK_SSE3 = _mm_set_epi32(0x00FF00FF, 0x000000FF, 0x00FF00FF, 0x000000FF);
28 RGB_MASK_SSE3 = _mm_set_epi32(0xFFFFFF, 0xFFFFFF, 0xFFFFFF, 0xFFFFFF);
29 A_MASK_SSE3 = _mm_set_epi32(0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000);
30 ALPHA_SSE3 = _mm_set_epi32(256, 256, 256, 256);
31
32 init_blend_pixel_span_funcs_sse3();
33 init_blend_pixel_color_span_funcs_sse3();
34 init_blend_pixel_mask_span_funcs_sse3();
35 init_blend_color_span_funcs_sse3();
36 init_blend_mask_color_span_funcs_sse3();
37
38 init_blend_pixel_pt_funcs_sse3();
39 init_blend_pixel_color_pt_funcs_sse3();
40 init_blend_pixel_mask_pt_funcs_sse3();
41 init_blend_color_pt_funcs_sse3();
42 init_blend_mask_color_pt_funcs_sse3();
43#endif
44}
45
46void
47evas_common_op_blend_rel_init_sse3(void)
48{
49#ifdef BUILD_SSE3
50 init_blend_rel_pixel_span_funcs_sse3();
51 init_blend_rel_pixel_color_span_funcs_sse3();
52 init_blend_rel_pixel_mask_span_funcs_sse3();
53 init_blend_rel_color_span_funcs_sse3();
54 init_blend_rel_mask_color_span_funcs_sse3();
55
56 init_blend_rel_pixel_pt_funcs_sse3();
57 init_blend_rel_pixel_color_pt_funcs_sse3();
58 init_blend_rel_pixel_mask_pt_funcs_sse3();
59 init_blend_rel_color_pt_funcs_sse3();
60 init_blend_rel_mask_color_pt_funcs_sse3();
61#endif
62}
63
64//#pragma GCC push_options
65//#pragma GCC optimize ("O0")
66void
67evas_common_op_sse3_test(void)
68{
69#ifdef BUILD_SSE3
70 DATA32 s[64] = {0x11883399}, d[64] = {0xff88cc33};
71
72 s[0] = rand(); d[1] = rand();
73 _op_blend_pas_dp_sse3(s, NULL, 0, d, 64);
74 evas_common_cpu_end_opt();
75#endif
76}
77//#pragma GCC pop_options
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_.c
deleted file mode 100644
index 0ce78d8..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_.c
+++ /dev/null
@@ -1,162 +0,0 @@
1/* blend pixel --> dst */
2
3#ifdef BUILD_C
4static void
5_op_blend_p_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
6 DATA32 *e;
7 int alpha;
8 UNROLL8_PLD_WHILE(d, l, e,
9 {
10 alpha = 256 - (*s >> 24);
11 *d = *s++ + MUL_256(alpha, *d);
12 d++;
13 });
14}
15
16static void
17_op_blend_pas_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
18 DATA32 *e;
19 int alpha;
20 UNROLL8_PLD_WHILE(d, l, e,
21 {
22 switch (*s & 0xff000000)
23 {
24 case 0:
25 break;
26 case 0xff000000:
27 *d = *s;
28 break;
29 default:
30 alpha = 256 - (*s >> 24);
31 *d = *s + MUL_256(alpha, *d);
32 break;
33 }
34 s++; d++;
35 });
36}
37
38#define _op_blend_pan_dp NULL
39
40#define _op_blend_p_dpan _op_blend_p_dp
41#define _op_blend_pas_dpan _op_blend_pas_dp
42#define _op_blend_pan_dpan _op_blend_pan_dp
43
44static void
45init_blend_pixel_span_funcs_c(void)
46{
47 op_blend_span_funcs[SP][SM_N][SC_N][DP][CPU_C] = _op_blend_p_dp;
48 op_blend_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_C] = _op_blend_pas_dp;
49 op_blend_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_C] = _op_blend_pan_dp;
50
51 op_blend_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_C] = _op_blend_p_dpan;
52 op_blend_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_C] = _op_blend_pas_dpan;
53 op_blend_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_C] = _op_blend_pan_dpan;
54}
55#endif
56
57#ifdef BUILD_C
58static void
59_op_blend_pt_p_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
60 c = 256 - (s >> 24);
61 *d = s + MUL_256(c, *d);
62}
63
64#define _op_blend_pt_pas_dp _op_blend_pt_p_dp
65#define _op_blend_pt_pan_dp NULL
66
67#define _op_blend_pt_p_dpan _op_blend_pt_p_dp
68#define _op_blend_pt_pan_dpan _op_blend_pt_pan_dp
69#define _op_blend_pt_pas_dpan _op_blend_pt_pas_dp
70
71static void
72init_blend_pixel_pt_funcs_c(void)
73{
74 op_blend_pt_funcs[SP][SM_N][SC_N][DP][CPU_C] = _op_blend_pt_p_dp;
75 op_blend_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_C] = _op_blend_pt_pas_dp;
76 op_blend_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_C] = _op_blend_pt_pan_dp;
77
78 op_blend_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_C] = _op_blend_pt_p_dpan;
79 op_blend_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_C] = _op_blend_pt_pas_dpan;
80 op_blend_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_C] = _op_blend_pt_pan_dpan;
81}
82#endif
83
84/*-----*/
85
86/* blend_rel pixel -> dst */
87
88#ifdef BUILD_C
89static void
90_op_blend_rel_p_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
91 DATA32 *e;
92 int alpha;
93 UNROLL8_PLD_WHILE(d, l, e,
94 {
95 alpha = 256 - (*s >> 24);
96 c = 1 + (*d >> 24);
97 *d = MUL_256(c, *s) + MUL_256(alpha, *d);
98 d++;
99 s++;
100 });
101}
102
103static void
104_op_blend_rel_pan_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
105 DATA32 *e;
106 UNROLL8_PLD_WHILE(d, l, e,
107 {
108 c = 1 + (*d >> 24);
109 *d++ = MUL_256(c, *s);
110 s++;
111 });
112}
113
114#define _op_blend_rel_pas_dp _op_blend_rel_p_dp
115
116#define _op_blend_rel_p_dpan _op_blend_p_dpan
117#define _op_blend_rel_pan_dpan _op_blend_pan_dpan
118#define _op_blend_rel_pas_dpan _op_blend_pas_dpan
119
120static void
121init_blend_rel_pixel_span_funcs_c(void)
122{
123 op_blend_rel_span_funcs[SP][SM_N][SC_N][DP][CPU_C] = _op_blend_rel_p_dp;
124 op_blend_rel_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_C] = _op_blend_rel_pas_dp;
125 op_blend_rel_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_C] = _op_blend_rel_pan_dp;
126
127 op_blend_rel_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_C] = _op_blend_rel_p_dpan;
128 op_blend_rel_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_C] = _op_blend_rel_pas_dpan;
129 op_blend_rel_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_C] = _op_blend_rel_pan_dpan;
130}
131#endif
132
133#ifdef BUILD_C
134static void
135_op_blend_rel_pt_p_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
136 c = 256 - (s >> 24);
137 *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
138}
139
140static void
141_op_blend_rel_pt_pan_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d) {
142 *d = MUL_SYM(*d >> 24, s);
143}
144
145#define _op_blend_rel_pt_pas_dp _op_blend_rel_pt_p_dp
146
147#define _op_blend_rel_pt_p_dpan _op_blend_pt_p_dpan
148#define _op_blend_rel_pt_pan_dpan _op_blend_pt_pan_dpan
149#define _op_blend_rel_pt_pas_dpan _op_blend_pt_pas_dpan
150
151static void
152init_blend_rel_pixel_pt_funcs_c(void)
153{
154 op_blend_rel_pt_funcs[SP][SM_N][SC_N][DP][CPU_C] = _op_blend_rel_pt_p_dp;
155 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_C] = _op_blend_rel_pt_pas_dp;
156 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_C] = _op_blend_rel_pt_pan_dp;
157
158 op_blend_rel_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_C] = _op_blend_rel_pt_p_dpan;
159 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_C] = _op_blend_rel_pt_pas_dpan;
160 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_C] = _op_blend_rel_pt_pan_dpan;
161}
162#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_.c
deleted file mode 100644
index c5e40a0..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_.c
+++ /dev/null
@@ -1,284 +0,0 @@
1/* blend pixel x color --> dst */
2
3#ifdef BUILD_C
4static void
5_op_blend_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e;
7 int alpha;
8 UNROLL8_PLD_WHILE(d, l, e,
9 {
10 DATA32 sc = MUL4_SYM(c, *s);
11 alpha = 256 - (sc >> 24);
12 *d = sc + MUL_256(alpha, *d);
13 d++;
14 s++;
15 });
16}
17
18static void
19_op_blend_pan_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
20 DATA32 *e;
21 int alpha = 256 - (c >> 24);
22 UNROLL8_PLD_WHILE(d, l, e,
23 {
24 *d = ((c & 0xff000000) + MUL3_SYM(c, *s)) + MUL_256(alpha, *d);
25 d++;
26 s++;
27 });
28}
29
30static void
31_op_blend_p_can_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
32 DATA32 *e;
33 int alpha;
34 UNROLL8_PLD_WHILE(d, l, e,
35 {
36 alpha = 256 - (*s >> 24);
37 *d = ((*s & 0xff000000) + MUL3_SYM(c, *s)) + MUL_256(alpha, *d);
38 d++;
39 s++;
40 });
41}
42
43static void
44_op_blend_pan_can_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
45 DATA32 *e;
46 UNROLL8_PLD_WHILE(d, l, e,
47 {
48 *d++ = 0xff000000 + MUL3_SYM(c, *s);
49 s++;
50 });
51}
52
53static void
54_op_blend_p_caa_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
55 DATA32 *e;
56 int alpha;
57 c = 1 + (c & 0xff);
58 UNROLL8_PLD_WHILE(d, l, e,
59 {
60 DATA32 sc = MUL_256(c, *s);
61 alpha = 256 - (sc >> 24);
62 *d = sc + MUL_256(alpha, *d);
63 d++;
64 s++;
65 });
66}
67
68static void
69_op_blend_pan_caa_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
70 DATA32 *e;
71 c = 1 + (c & 0xff);
72 UNROLL8_PLD_WHILE(d, l, e,
73 {
74 *d = INTERP_256(c, *s, *d);
75 d++;
76 s++;
77 });
78}
79
80#define _op_blend_pas_c_dp _op_blend_p_c_dp
81#define _op_blend_pas_can_dp _op_blend_p_can_dp
82#define _op_blend_pas_caa_dp _op_blend_p_caa_dp
83
84#define _op_blend_p_c_dpan _op_blend_p_c_dp
85#define _op_blend_pas_c_dpan _op_blend_pas_c_dp
86#define _op_blend_pan_c_dpan _op_blend_pan_c_dp
87#define _op_blend_p_can_dpan _op_blend_p_can_dp
88#define _op_blend_pas_can_dpan _op_blend_pas_can_dp
89#define _op_blend_pan_can_dpan _op_blend_pan_can_dp
90#define _op_blend_p_caa_dpan _op_blend_p_caa_dp
91#define _op_blend_pas_caa_dpan _op_blend_pas_caa_dp
92#define _op_blend_pan_caa_dpan _op_blend_pan_caa_dp
93
94static void
95init_blend_pixel_color_span_funcs_c(void)
96{
97 op_blend_span_funcs[SP][SM_N][SC][DP][CPU_C] = _op_blend_p_c_dp;
98 op_blend_span_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_blend_pas_c_dp;
99 op_blend_span_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_blend_pan_c_dp;
100 op_blend_span_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_blend_p_can_dp;
101 op_blend_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_blend_pas_can_dp;
102 op_blend_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_blend_pan_can_dp;
103 op_blend_span_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_blend_p_caa_dp;
104 op_blend_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_blend_pas_caa_dp;
105 op_blend_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_blend_pan_caa_dp;
106
107 op_blend_span_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_blend_p_c_dpan;
108 op_blend_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_blend_pas_c_dpan;
109 op_blend_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_blend_pan_c_dpan;
110 op_blend_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_p_can_dpan;
111 op_blend_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pas_can_dpan;
112 op_blend_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pan_can_dpan;
113 op_blend_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_p_caa_dpan;
114 op_blend_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pas_caa_dpan;
115 op_blend_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pan_caa_dpan;
116}
117#endif
118
119#ifdef BUILD_C
120static void
121_op_blend_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
122 s = MUL4_SYM(c, s);
123 c = 256 - (s >> 24);
124 *d = s + MUL_256(c, *d);
125}
126
127#define _op_blend_pt_pas_c_dp _op_blend_pt_p_c_dp
128#define _op_blend_pt_pan_c_dp _op_blend_pt_p_c_dp
129#define _op_blend_pt_p_can_dp _op_blend_pt_p_c_dp
130#define _op_blend_pt_pas_can_dp _op_blend_pt_p_c_dp
131#define _op_blend_pt_pan_can_dp _op_blend_pt_p_c_dp
132#define _op_blend_pt_p_caa_dp _op_blend_pt_p_c_dp
133#define _op_blend_pt_pas_caa_dp _op_blend_pt_p_c_dp
134#define _op_blend_pt_pan_caa_dp _op_blend_pt_p_c_dp
135
136#define _op_blend_pt_p_c_dpan _op_blend_pt_p_c_dp
137#define _op_blend_pt_pas_c_dpan _op_blend_pt_pas_c_dp
138#define _op_blend_pt_pan_c_dpan _op_blend_pt_pan_c_dp
139#define _op_blend_pt_p_can_dpan _op_blend_pt_p_can_dp
140#define _op_blend_pt_pas_can_dpan _op_blend_pt_pas_can_dp
141#define _op_blend_pt_pan_can_dpan _op_blend_pt_pan_can_dp
142#define _op_blend_pt_p_caa_dpan _op_blend_pt_p_caa_dp
143#define _op_blend_pt_pas_caa_dpan _op_blend_pt_pas_caa_dp
144#define _op_blend_pt_pan_caa_dpan _op_blend_pt_pan_caa_dp
145
146static void
147init_blend_pixel_color_pt_funcs_c(void)
148{
149 op_blend_pt_funcs[SP][SM_N][SC][DP][CPU_C] = _op_blend_pt_p_c_dp;
150 op_blend_pt_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_blend_pt_pas_c_dp;
151 op_blend_pt_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_blend_pt_pan_c_dp;
152 op_blend_pt_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_blend_pt_p_can_dp;
153 op_blend_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_blend_pt_pas_can_dp;
154 op_blend_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_blend_pt_pan_can_dp;
155 op_blend_pt_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_blend_pt_p_caa_dp;
156 op_blend_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_blend_pt_pas_caa_dp;
157 op_blend_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_blend_pt_pan_caa_dp;
158
159 op_blend_pt_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_blend_pt_p_c_dpan;
160 op_blend_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_blend_pt_pas_c_dpan;
161 op_blend_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_blend_pt_pan_c_dpan;
162 op_blend_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pt_p_can_dpan;
163 op_blend_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pt_pas_can_dpan;
164 op_blend_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_pt_pan_can_dpan;
165 op_blend_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pt_p_caa_dpan;
166 op_blend_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pt_pas_caa_dpan;
167 op_blend_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_pt_pan_caa_dpan;
168}
169#endif
170
171/*-----*/
172
173/* blend_rel pixel x color -> dst */
174
175#ifdef BUILD_C
176static void
177_op_blend_rel_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
178 DATA32 *e;
179 int alpha;
180 UNROLL8_PLD_WHILE(d, l, e,
181 {
182 DATA32 sc = MUL4_SYM(c, *s);
183 alpha = 256 - (sc >> 24);
184 *d = MUL_SYM(*d >> 24, sc) + MUL_256(alpha, *d);
185 d++;
186 s++;
187 });
188}
189
190#define _op_blend_rel_pas_c_dp _op_blend_rel_p_c_dp
191#define _op_blend_rel_pan_c_dp _op_blend_rel_p_c_dp
192#define _op_blend_rel_p_can_dp _op_blend_rel_p_c_dp
193#define _op_blend_rel_pas_can_dp _op_blend_rel_p_c_dp
194#define _op_blend_rel_pan_can_dp _op_blend_rel_p_c_dp
195#define _op_blend_rel_p_caa_dp _op_blend_rel_p_c_dp
196#define _op_blend_rel_pas_caa_dp _op_blend_rel_p_c_dp
197#define _op_blend_rel_pan_caa_dp _op_blend_rel_p_c_dp
198
199#define _op_blend_rel_p_c_dpan _op_blend_p_c_dpan
200#define _op_blend_rel_pas_c_dpan _op_blend_pas_c_dpan
201#define _op_blend_rel_pan_c_dpan _op_blend_pan_c_dpan
202#define _op_blend_rel_p_can_dpan _op_blend_p_can_dpan
203#define _op_blend_rel_pas_can_dpan _op_blend_pas_can_dpan
204#define _op_blend_rel_pan_can_dpan _op_blend_pan_can_dpan
205#define _op_blend_rel_p_caa_dpan _op_blend_p_caa_dpan
206#define _op_blend_rel_pas_caa_dpan _op_blend_pas_caa_dpan
207#define _op_blend_rel_pan_caa_dpan _op_blend_pan_caa_dpan
208
209static void
210init_blend_rel_pixel_color_span_funcs_c(void)
211{
212 op_blend_rel_span_funcs[SP][SM_N][SC][DP][CPU_C] = _op_blend_rel_p_c_dp;
213 op_blend_rel_span_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_blend_rel_pas_c_dp;
214 op_blend_rel_span_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_blend_rel_pan_c_dp;
215 op_blend_rel_span_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_p_can_dp;
216 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pas_can_dp;
217 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pan_can_dp;
218 op_blend_rel_span_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_p_caa_dp;
219 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pas_caa_dp;
220 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pan_caa_dp;
221
222 op_blend_rel_span_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_p_c_dpan;
223 op_blend_rel_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pas_c_dpan;
224 op_blend_rel_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pan_c_dpan;
225 op_blend_rel_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_p_can_dpan;
226 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pas_can_dpan;
227 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pan_can_dpan;
228 op_blend_rel_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_p_caa_dpan;
229 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pas_caa_dpan;
230 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pan_caa_dpan;
231}
232#endif
233
234#ifdef BUILD_C
235static void
236_op_blend_rel_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
237 s = MUL4_SYM(c, s);
238 c = 256 - (s >> 24);
239 *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
240}
241
242#define _op_blend_rel_pt_pas_c_dp _op_blend_rel_pt_p_c_dp
243#define _op_blend_rel_pt_pan_c_dp _op_blend_rel_pt_p_c_dp
244#define _op_blend_rel_pt_p_can_dp _op_blend_rel_pt_p_c_dp
245#define _op_blend_rel_pt_pas_can_dp _op_blend_rel_pt_p_c_dp
246#define _op_blend_rel_pt_pan_can_dp _op_blend_rel_pt_p_c_dp
247#define _op_blend_rel_pt_p_caa_dp _op_blend_rel_pt_p_c_dp
248#define _op_blend_rel_pt_pas_caa_dp _op_blend_rel_pt_p_c_dp
249#define _op_blend_rel_pt_pan_caa_dp _op_blend_rel_pt_p_c_dp
250
251#define _op_blend_rel_pt_p_c_dpan _op_blend_pt_p_c_dpan
252#define _op_blend_rel_pt_pas_c_dpan _op_blend_pt_pas_c_dpan
253#define _op_blend_rel_pt_pan_c_dpan _op_blend_pt_pan_c_dpan
254#define _op_blend_rel_pt_p_can_dpan _op_blend_pt_p_can_dpan
255#define _op_blend_rel_pt_pas_can_dpan _op_blend_pt_pas_can_dpan
256#define _op_blend_rel_pt_pan_can_dpan _op_blend_pt_pan_can_dpan
257#define _op_blend_rel_pt_p_caa_dpan _op_blend_pt_p_caa_dpan
258#define _op_blend_rel_pt_pas_caa_dpan _op_blend_pt_pas_caa_dpan
259#define _op_blend_rel_pt_pan_caa_dpan _op_blend_pt_pan_caa_dpan
260
261static void
262init_blend_rel_pixel_color_pt_funcs_c(void)
263{
264 op_blend_rel_pt_funcs[SP][SM_N][SC][DP][CPU_C] = _op_blend_rel_pt_p_c_dp;
265 op_blend_rel_pt_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_blend_rel_pt_pas_c_dp;
266 op_blend_rel_pt_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_blend_rel_pt_pan_c_dp;
267 op_blend_rel_pt_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pt_p_can_dp;
268 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pt_pas_can_dp;
269 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_blend_rel_pt_pan_can_dp;
270 op_blend_rel_pt_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pt_p_caa_dp;
271 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pt_pas_caa_dp;
272 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_blend_rel_pt_pan_caa_dp;
273
274 op_blend_rel_pt_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pt_p_c_dpan;
275 op_blend_rel_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pt_pas_c_dpan;
276 op_blend_rel_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_blend_rel_pt_pan_c_dpan;
277 op_blend_rel_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pt_p_can_dpan;
278 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pt_pas_can_dpan;
279 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_blend_rel_pt_pan_can_dpan;
280 op_blend_rel_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pt_p_caa_dpan;
281 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pt_pas_caa_dpan;
282 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_blend_rel_pt_pan_caa_dpan;
283}
284#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_i386.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_i386.c
deleted file mode 100644
index 52751f4..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_i386.c
+++ /dev/null
@@ -1,221 +0,0 @@
1/* blend pixel x color --> dst */
2
3#ifdef BUILD_MMX
4static void
5_op_blend_p_c_dp_mmx(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e = d + l;
7 MOV_A2R(ALPHA_256, mm6)
8 MOV_A2R(ALPHA_255, mm5)
9 pxor_r2r(mm0, mm0);
10 MOV_P2R(c, mm2, mm0)
11 while (d < e) {
12 MOV_P2R(*s, mm3, mm0)
13 MUL4_SYM_R2R(mm2, mm3, mm5)
14
15 MOV_RA2R(mm3, mm1)
16 movq_r2r(mm6, mm4);
17 psubw_r2r(mm1, mm4);
18
19 MOV_P2R(*d, mm1, mm0)
20 MUL4_256_R2R(mm4, mm1)
21
22 paddw_r2r(mm3, mm1);
23 MOV_R2P(mm1, *d, mm0)
24 s++; d++;
25 }
26}
27
28static void
29_op_blend_pan_can_dp_mmx(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
30 DATA32 *e = d + l;
31 pxor_r2r(mm0, mm0);
32 MOV_P2R(c, mm2, mm0)
33 MOV_A2R(ALPHA_255, mm5)
34 while (d < e) {
35 MOV_P2R(*s, mm1, mm0)
36 MUL4_SYM_R2R(mm2, mm1, mm5)
37 MOV_R2P(mm1, *d, mm0)
38 s++; d++;
39 }
40}
41
42static void
43_op_blend_pan_caa_dp_mmx(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
44 DATA32 *e = d + l;
45 c = 1 + (c & 0xff);
46 MOV_A2R(c, mm2)
47 MOV_A2R(ALPHA_255, mm5)
48 pxor_r2r(mm0, mm0);
49 while (d < e) {
50 MOV_P2R(*s, mm3, mm0)
51 MOV_P2R(*d, mm1, mm0)
52 INTERP_256_R2R(mm2, mm3, mm1, mm5)
53 MOV_R2P(mm1, *d, mm0)
54 s++; d++;
55 }
56}
57
58#define _op_blend_pas_c_dp_mmx _op_blend_p_c_dp_mmx
59#define _op_blend_pan_c_dp_mmx _op_blend_p_c_dp_mmx
60#define _op_blend_p_can_dp_mmx _op_blend_p_c_dp_mmx
61#define _op_blend_pas_can_dp_mmx _op_blend_p_c_dp_mmx
62#define _op_blend_p_caa_dp_mmx _op_blend_p_c_dp_mmx
63#define _op_blend_pas_caa_dp_mmx _op_blend_p_c_dp_mmx
64
65#define _op_blend_p_c_dpan_mmx _op_blend_p_c_dp_mmx
66#define _op_blend_pas_c_dpan_mmx _op_blend_pas_c_dp_mmx
67#define _op_blend_pan_c_dpan_mmx _op_blend_pan_c_dp_mmx
68#define _op_blend_p_can_dpan_mmx _op_blend_p_can_dp_mmx
69#define _op_blend_pas_can_dpan_mmx _op_blend_pas_can_dp_mmx
70#define _op_blend_pan_can_dpan_mmx _op_blend_pan_can_dp_mmx
71#define _op_blend_p_caa_dpan_mmx _op_blend_p_caa_dp_mmx
72#define _op_blend_pas_caa_dpan_mmx _op_blend_pas_caa_dp_mmx
73#define _op_blend_pan_caa_dpan_mmx _op_blend_pan_caa_dp_mmx
74
75
76static void
77init_blend_pixel_color_span_funcs_mmx(void)
78{
79 op_blend_span_funcs[SP][SM_N][SC][DP][CPU_MMX] = _op_blend_p_c_dp_mmx;
80 op_blend_span_funcs[SP_AS][SM_N][SC][DP][CPU_MMX] = _op_blend_pas_c_dp_mmx;
81 op_blend_span_funcs[SP_AN][SM_N][SC][DP][CPU_MMX] = _op_blend_pan_c_dp_mmx;
82 op_blend_span_funcs[SP][SM_N][SC_AN][DP][CPU_MMX] = _op_blend_p_can_dp_mmx;
83 op_blend_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_MMX] = _op_blend_pas_can_dp_mmx;
84 op_blend_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_MMX] = _op_blend_pan_can_dp_mmx;
85 op_blend_span_funcs[SP][SM_N][SC_AA][DP][CPU_MMX] = _op_blend_p_caa_dp_mmx;
86 op_blend_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_MMX] = _op_blend_pas_caa_dp_mmx;
87 op_blend_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_MMX] = _op_blend_pan_caa_dp_mmx;
88
89 op_blend_span_funcs[SP][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_p_c_dpan_mmx;
90 op_blend_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_pas_c_dpan_mmx;
91 op_blend_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_pan_c_dpan_mmx;
92 op_blend_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_blend_p_can_dpan_mmx;
93 op_blend_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_blend_pas_can_dpan_mmx;
94 op_blend_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_blend_pan_can_dpan_mmx;
95 op_blend_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_p_caa_dpan_mmx;
96 op_blend_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_pas_caa_dpan_mmx;
97 op_blend_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_pan_caa_dpan_mmx;
98}
99#endif
100
101#ifdef BUILD_MMX
102static void
103_op_blend_pt_p_c_dp_mmx(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
104 MOV_A2R(ALPHA_256, mm4)
105 MOV_A2R(ALPHA_255, mm5)
106 pxor_r2r(mm0, mm0);
107 MOV_P2R(c, mm2, mm0)
108 MOV_P2R(s, mm3, mm0)
109 MUL4_SYM_R2R(mm2, mm3, mm5)
110
111 MOV_RA2R(mm3, mm1)
112 psubw_r2r(mm1, mm4);
113
114 MOV_P2R(*d, mm1, mm0)
115 MUL4_256_R2R(mm4, mm1)
116
117 paddw_r2r(mm3, mm1);
118 MOV_R2P(mm1, *d, mm0)
119}
120
121#define _op_blend_pt_pas_c_dp_mmx _op_blend_pt_p_c_dp_mmx
122#define _op_blend_pt_pan_c_dp_mmx _op_blend_pt_p_c_dp_mmx
123#define _op_blend_pt_p_can_dp_mmx _op_blend_pt_p_c_dp_mmx
124#define _op_blend_pt_pas_can_dp_mmx _op_blend_pt_p_c_dp_mmx
125#define _op_blend_pt_pan_can_dp_mmx _op_blend_pt_p_c_dp_mmx
126#define _op_blend_pt_p_caa_dp_mmx _op_blend_pt_p_c_dp_mmx
127#define _op_blend_pt_pas_caa_dp_mmx _op_blend_pt_p_c_dp_mmx
128#define _op_blend_pt_pan_caa_dp_mmx _op_blend_pt_p_c_dp_mmx
129
130#define _op_blend_pt_p_c_dpan_mmx _op_blend_pt_p_c_dp_mmx
131#define _op_blend_pt_pas_c_dpan_mmx _op_blend_pt_p_c_dp_mmx
132#define _op_blend_pt_pan_c_dpan_mmx _op_blend_pt_p_c_dp_mmx
133#define _op_blend_pt_p_can_dpan_mmx _op_blend_pt_p_c_dp_mmx
134#define _op_blend_pt_pas_can_dpan_mmx _op_blend_pt_p_c_dp_mmx
135#define _op_blend_pt_pan_can_dpan_mmx _op_blend_pt_p_c_dp_mmx
136#define _op_blend_pt_p_caa_dpan_mmx _op_blend_pt_p_c_dp_mmx
137#define _op_blend_pt_pas_caa_dpan_mmx _op_blend_pt_p_c_dp_mmx
138#define _op_blend_pt_pan_caa_dpan_mmx _op_blend_pt_p_c_dp_mmx
139
140static void
141init_blend_pixel_color_pt_funcs_mmx(void)
142{
143 op_blend_pt_funcs[SP][SM_N][SC][DP][CPU_MMX] = _op_blend_pt_p_c_dp_mmx;
144 op_blend_pt_funcs[SP_AS][SM_N][SC][DP][CPU_MMX] = _op_blend_pt_pas_c_dp_mmx;
145 op_blend_pt_funcs[SP_AN][SM_N][SC][DP][CPU_MMX] = _op_blend_pt_pan_c_dp_mmx;
146 op_blend_pt_funcs[SP][SM_N][SC_AN][DP][CPU_MMX] = _op_blend_pt_p_can_dp_mmx;
147 op_blend_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_MMX] = _op_blend_pt_pas_can_dp_mmx;
148 op_blend_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_MMX] = _op_blend_pt_pan_can_dp_mmx;
149 op_blend_pt_funcs[SP][SM_N][SC_AA][DP][CPU_MMX] = _op_blend_pt_p_caa_dp_mmx;
150 op_blend_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_MMX] = _op_blend_pt_pas_caa_dp_mmx;
151 op_blend_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_MMX] = _op_blend_pt_pan_caa_dp_mmx;
152
153 op_blend_pt_funcs[SP][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_pt_p_c_dpan_mmx;
154 op_blend_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_pt_pas_c_dpan_mmx;
155 op_blend_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_pt_pan_c_dpan_mmx;
156 op_blend_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_blend_pt_p_can_dpan_mmx;
157 op_blend_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_blend_pt_pas_can_dpan_mmx;
158 op_blend_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_blend_pt_pan_can_dpan_mmx;
159 op_blend_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_pt_p_caa_dpan_mmx;
160 op_blend_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_pt_pas_caa_dpan_mmx;
161 op_blend_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_pt_pan_caa_dpan_mmx;
162}
163#endif
164
165/*-----*/
166
167/* blend_rel pixel x color -> dst */
168
169#ifdef BUILD_MMX
170
171#define _op_blend_rel_p_c_dpan_mmx _op_blend_p_c_dpan_mmx
172#define _op_blend_rel_pas_c_dpan_mmx _op_blend_pas_c_dpan_mmx
173#define _op_blend_rel_pan_c_dpan_mmx _op_blend_pan_c_dpan_mmx
174#define _op_blend_rel_p_can_dpan_mmx _op_blend_p_can_dpan_mmx
175#define _op_blend_rel_pas_can_dpan_mmx _op_blend_pas_can_dpan_mmx
176#define _op_blend_rel_pan_can_dpan_mmx _op_blend_pan_can_dpan_mmx
177#define _op_blend_rel_p_caa_dpan_mmx _op_blend_p_caa_dpan_mmx
178#define _op_blend_rel_pas_caa_dpan_mmx _op_blend_pas_caa_dpan_mmx
179#define _op_blend_rel_pan_caa_dpan_mmx _op_blend_pan_caa_dpan_mmx
180
181static void
182init_blend_rel_pixel_color_span_funcs_mmx(void)
183{
184 op_blend_rel_span_funcs[SP][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_rel_p_c_dpan_mmx;
185 op_blend_rel_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_rel_pas_c_dpan_mmx;
186 op_blend_rel_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_rel_pan_c_dpan_mmx;
187 op_blend_rel_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_blend_rel_p_can_dpan_mmx;
188 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_blend_rel_pas_can_dpan_mmx;
189 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_blend_rel_pan_can_dpan_mmx;
190 op_blend_rel_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_rel_p_caa_dpan_mmx;
191 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_rel_pas_caa_dpan_mmx;
192 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_rel_pan_caa_dpan_mmx;
193}
194#endif
195
196#ifdef BUILD_MMX
197
198#define _op_blend_rel_pt_p_c_dpan_mmx _op_blend_pt_p_c_dpan_mmx
199#define _op_blend_rel_pt_pas_c_dpan_mmx _op_blend_pt_pas_c_dpan_mmx
200#define _op_blend_rel_pt_pan_c_dpan_mmx _op_blend_pt_pan_c_dpan_mmx
201#define _op_blend_rel_pt_p_can_dpan_mmx _op_blend_pt_p_can_dpan_mmx
202#define _op_blend_rel_pt_pas_can_dpan_mmx _op_blend_pt_pas_can_dpan_mmx
203#define _op_blend_rel_pt_pan_can_dpan_mmx _op_blend_pt_pan_can_dpan_mmx
204#define _op_blend_rel_pt_p_caa_dpan_mmx _op_blend_pt_p_caa_dpan_mmx
205#define _op_blend_rel_pt_pas_caa_dpan_mmx _op_blend_pt_pas_caa_dpan_mmx
206#define _op_blend_rel_pt_pan_caa_dpan_mmx _op_blend_pt_pan_caa_dpan_mmx
207
208static void
209init_blend_rel_pixel_color_pt_funcs_mmx(void)
210{
211 op_blend_rel_pt_funcs[SP][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_rel_pt_p_c_dpan_mmx;
212 op_blend_rel_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_rel_pt_pas_c_dpan_mmx;
213 op_blend_rel_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_MMX] = _op_blend_rel_pt_pan_c_dpan_mmx;
214 op_blend_rel_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_blend_rel_pt_p_can_dpan_mmx;
215 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_blend_rel_pt_pas_can_dpan_mmx;
216 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_blend_rel_pt_pan_can_dpan_mmx;
217 op_blend_rel_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_rel_pt_p_caa_dpan_mmx;
218 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_rel_pt_pas_caa_dpan_mmx;
219 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_blend_rel_pt_pan_caa_dpan_mmx;
220}
221#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_neon.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_neon.c
deleted file mode 100644
index 6e35970..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_neon.c
+++ /dev/null
@@ -1,570 +0,0 @@
1/* blend pixel x color --> dst */
2#ifdef BUILD_NEON
3/* Note: Optimisation is based on keeping _dest_ aligned: else it's a pair of
4 * reads, then two writes, a miss on read is 'just' two reads */
5static void
6_op_blend_p_c_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
7#define AP "blend_p_c_dp_"
8 asm volatile (
9 ".fpu neon \n\t"
10 // Load 'c'
11 "vdup.u32 q7, %[c] \n\t"
12 "vmov.i8 q6, #1 \n\t"
13
14 // Choose a loop
15 "andS %[tmp], %[d], $0xf \n\t"
16 "beq "AP"quadstart \n\t"
17
18 "andS %[tmp],%[d], $0x4 \n\t"
19 "beq "AP"dualloop \n\t"
20
21 AP"singleloop:"
22 "vld1.32 d0[0], [%[s]]! \n\t"
23 "vld1.32 d2[0], [%[d]] \n\t"
24 // Mulitply s * c (= sc)
25 "vmull.u8 q4, d0,d14 \n\t"
26 // sc in d8
27 "vqrshrn.u16 d4, q4, #8 \n\t"
28
29 // sca in d9
30 "vmvn.u32 d6, d4 \n\t"
31 "vshr.u32 d6, d6, #24 \n\t"
32
33 "vmul.u32 d6, d12, d6 \n\t"
34
35 /* d * alpha */
36 "vmull.u8 q4, d6, d2 \n\t"
37 "vqrshrn.u16 d0, q4, #8 \n\t"
38
39 "vqadd.u8 d2, d0, d4 \n\t"
40
41 // Save dsc + sc
42 "vst1.32 d2[0], [%[d]]! \n\t"
43
44 // Now where?
45 // Can we go the fast path?
46 "andS %[tmp], %[d],$0xf \n\t"
47 "beq "AP"quadstart \n\t"
48
49 AP"dualloop: \n\t"
50 // Check we have enough to bother with!
51 "sub %[tmp], %[e], %[d] \n\t"
52 "cmp %[tmp], #16 \n\t"
53 "blt "AP"loopout \n\t"
54
55 // load 's' -> q0, 'd' -> q1
56 "vldm %[s]!, {d0} \n\t"
57 "vldm %[d], {d2} \n\t"
58 // Mulitply s * c (= sc)
59 "vmull.u8 q4, d0,d14 \n\t"
60 // sc in d8
61 "vqrshrn.u16 d4, q4, #8 \n\t"
62
63 // sca in d9
64 "vmvn.u32 d6, d4 \n\t"
65 "vshr.u32 d6, d6, #24 \n\t"
66
67 "vmul.u32 d6, d12, d6 \n\t"
68
69 /* d * alpha */
70 "vmull.u8 q4, d6, d2 \n\t"
71 "vqrshrn.u16 d0, q4, #8 \n\t"
72
73 "vqadd.u8 d2, d0, d4 \n\t"
74
75 // Save dsc + sc
76 "vst1.32 d2, [%[d]]! \n\t"
77
78 AP"quadstart: \n\t"
79 "sub %[tmp], %[e], %[d] \n\t"
80 "cmp %[tmp], #16 \n\t"
81 "blt "AP"loopout \n\t"
82
83 "sub %[tmp], %[e], #15 \n\t"
84
85 AP"quadloop:\n\t"
86 // load 's' -> q0, 'd' -> q1
87 "vldm %[s]!, {d0,d1} \n\t"
88 "vldm %[d], {d2,d3} \n\t"
89 // Mulitply s * c (= sc)
90 "vmull.u8 q4, d0,d14 \n\t"
91 "vmull.u8 q5, d1,d14 \n\t"
92
93 // Get sc & sc alpha
94 "vqrshrn.u16 d4, q4, #8 \n\t"
95 "vqrshrn.u16 d5, q5, #8 \n\t"
96 // sc is now in q2, 8bpp
97 // Shift out, then spread alpha for q2
98 "vmvn.u32 q3, q2 \n\t"
99 "vshr.u32 q3, q3, $0x18 \n\t"
100 "vmul.u32 q3, q6,q3 \n\t"
101
102 // Multiply 'd' by sc.alpha (dsca)
103 "vmull.u8 q4, d6,d2 \n\t"
104 "vmull.u8 q5, d7,d3 \n\t"
105
106 "vqrshrn.u16 d0, q4, #8 \n\t"
107 "vqrshrn.u16 d1, q5, #8 \n\t"
108
109 "vqadd.u8 q1, q0, q2 \n\t"
110
111 // Save dsc + sc
112 "vstm %[d]!, {d2,d3} \n\t"
113
114 "cmp %[tmp], %[d] \n\t"
115
116 "bhi "AP"quadloop \n\t"
117
118 /* Trailing stuff */
119 AP"loopout: \n\t"
120
121 "cmp %[d], %[e] \n\t"
122 "beq "AP"done\n\t"
123 "sub %[tmp],%[e], %[d] \n\t"
124 "cmp %[tmp],$0x04 \n\t"
125 "beq "AP"singleloop2 \n\t"
126
127 "sub %[tmp], %[e], #7 \n\t"
128 /* Dual loop */
129 AP"dualloop2: \n\t"
130 "vldm %[s]!, {d0} \n\t"
131 "vldm %[d], {d2} \n\t"
132 // Mulitply s * c (= sc)
133 "vmull.u8 q4, d0,d14 \n\t"
134 // sc in d8
135 "vqrshrn.u16 d4, q4, #8 \n\t"
136
137 // sca in d9
138 // XXX: I can probably squash one of these 3
139 "vmvn.u32 d6, d4 \n\t"
140 "vshr.u32 d6, d6, #24 \n\t"
141 "vmul.u32 d6, d6, d12 \n\t"
142
143 /* d * alpha */
144 "vmull.u8 q4, d6, d2 \n\t"
145 "vqrshrn.u16 d0, q4, #8 \n\t"
146
147 "vqadd.u8 d2, d0, d4 \n\t"
148
149 // Save dsc + sc
150 "vstm %[d]!, {d2} \n\t"
151
152 "cmp %[tmp], %[d] \n\t"
153 "bhi "AP"dualloop2 \n\t"
154
155 "cmp %[d], %[e] \n\t"
156 "beq "AP"done \n\t"
157
158 AP"singleloop2: \n\t"
159 "vld1.32 d0[0], [%[s]]! \n\t"
160 "vld1.32 d2[0], [%[d]] \n\t"
161 // Mulitply s * c (= sc)
162 "vmull.u8 q4, d0,d14 \n\t"
163 // sc in d8
164 "vqrshrn.u16 d4, q4, #8 \n\t"
165
166 // sca in d6
167 "vmvn.u32 d6, d4 \n\t"
168 "vshr.u32 d6, d6, #24 \n\t"
169 "vmul.u32 d6, d12,d6 \n\t"
170
171 /* d * alpha */
172 "vmull.u8 q4, d6, d2 \n\t"
173 "vqrshrn.u16 d0, q4, #8 \n\t"
174
175 "vqadd.u8 d2, d0, d4 \n\t"
176
177 // Save dsc + sc
178 "vst1.32 d2[0], [%[d]]! \n\t"
179
180
181 AP"done:"
182 : // No output
183 //
184 : [s] "r" (s), [e] "r" (d + l), [d] "r" (d), [c] "r" (c),
185 [tmp] "r" (12)
186 : "q0","q1","q2","q3","q4","q5","q6","q7","memory"
187 );
188#undef AP
189}
190
191static void
192_op_blend_pan_can_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
193 DATA32 *e;
194 UNROLL8_PLD_WHILE(d, l, e,
195 {
196 *d++ = 0xff000000 + MUL3_SYM(c, *s);
197 s++;
198 });
199}
200
201static void
202_op_blend_pan_caa_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
203#if 1
204 DATA32 *e;
205 int alpha;
206 c = 1 + (c & 0xff);
207 UNROLL8_PLD_WHILE(d, l, e,
208 {
209 DATA32 sc = MUL_256(c, *s);
210 alpha = 256 - (sc >> 24);
211 *d = sc + MUL_256(alpha, *d);
212 d++;
213 s++;
214 });
215#else // the below neon is buggy!! misses rendering of spans, i think with alignment. quick - just disable this.
216#define AP "_op_blend_pan_caa_dp_"
217 DATA32 *e = d + l, *tmp = (void*)73;
218 asm volatile (
219 ".fpu neon \n\t"
220 /* Set up 'c' */
221 "vdup.u8 d14, %[c] \n\t"
222 "vmov.i8 d15, #1 \n\t"
223 "vaddl.u8 q15, d14, d15 \n\t"
224 "vshr.u8 q15,#1 \n\t"
225
226 // Pick a loop
227 "andS %[tmp], %[d], $0xf \n\t"
228 "beq "AP"quadstart \n\t"
229
230 "andS %[tmp], %[d], $0x4 \n\t"
231 "beq "AP"dualstart \n\t"
232
233 AP"singleloop: \n\t"
234 "vld1.32 d4[0], [%[d]] \n\t"
235 "vld1.32 d0[0], [%[s]]! \n\t"
236
237 // Long version of 'd'
238 "vmovl.u8 q8, d4 \n\t"
239
240 // Long version of 's'
241 "vmovl.u8 q6, d0 \n\t"
242
243 // d8 = s -d
244 "vsub.s16 d8, d12, d16 \n\t"
245
246 // Multiply
247 "vmul.s16 d8, d8, d30 \n\t"
248
249 // Shift down
250 "vshr.s16 d8, #7 \n\t"
251
252 // Add 'd'
253 "vqadd.s16 d8, d8, d16 \n\t"
254
255 // Shrink to save
256 "vqmovun.s16 d0, q4 \n\t"
257 "vst1.32 d0[0], [%[d]]! \n\t"
258
259 // Now where?
260 "andS %[tmp], %[d], $0xf \n\t"
261 "beq "AP"quadstart \n\t"
262
263 AP"dualstart: \n\t"
264 // Check we have enough
265 "sub %[tmp], %[e], %[d] \n\t"
266 "cmp %[tmp], #16 \n\t"
267 "blt "AP"loopout \n\t"
268
269 AP"dualloop:"
270 "vldm %[d], {d4} \n\t"
271 "vldm %[s]!, {d0} \n\t"
272
273 // Long version of d
274 "vmovl.u8 q8, d4 \n\t"
275
276 // Long version of s
277 "vmovl.u8 q6, d0 \n\t"
278
279 // q4/q5 = s-d
280 "vsub.s16 q4, q6, q8 \n\t"
281
282 // Multiply
283 "vmul.s16 q4, q4,q15 \n\t"
284
285 // Shift down
286 "vshr.s16 q4, #7 \n\t"
287
288 // Add d
289 "vqadd.s16 q4, q4, q8 \n\t"
290
291 // Shrink to save
292 "vqmovun.s16 d0, q4 \n\t"
293
294 "vstm %[d]!, {d0} \n\t"
295 AP"quadstart: \n\t"
296 "sub %[tmp], %[e], %[d] \n\t"
297 "cmp %[tmp], #16 \n\t"
298 "blt "AP"loopout \n\t"
299
300 "sub %[tmp], %[e], #15 \n\t"
301
302 AP"quadloop: \n\t"
303 // load 's' -> q0, 'd' -> q2
304 "vldm %[d], {d4,d5} \n\t"
305 "vldm %[s]!, {d0,d1} \n\t"
306
307 // Long version of d
308 "vmovl.u8 q8, d4 \n\t"
309 "vmovl.u8 q9, d5 \n\t"
310
311 // Long version of s
312 "vmovl.u8 q6, d0 \n\t"
313 "vmovl.u8 q7, d1 \n\t"
314
315 // q4/q5 = s-d
316 "vsub.s16 q4, q6, q8 \n\t"
317 "vsub.s16 q5, q7, q9 \n\t"
318
319 // Multiply
320 "vmul.s16 q4, q4,q15 \n\t"
321 "vmul.s16 q5, q5,q15 \n\t"
322
323 // Shift down
324 "vshr.s16 q4, #7 \n\t"
325 "vshr.s16 q5, #7 \n\t"
326
327 // Add d
328 "vqadd.s16 q4, q4, q8 \n\t"
329 "vqadd.s16 q5, q5, q9 \n\t"
330
331 // Shrink to save
332 "vqmovun.s16 d0, q4 \n\t"
333 "vqmovun.s16 d1, q5 \n\t"
334 "vstm %[d]!, {d0,d1} \n\t"
335 "cmp %[tmp], %[d] \n\t"
336
337 "bhi "AP"quadloop\n\t"
338
339
340 "b "AP"done\n\t"
341 AP"loopout: \n\t"
342 "cmp %[d], %[e] \n\t"
343 "beq "AP"done\n\t"
344 "sub %[tmp],%[e], %[d] \n\t"
345 "cmp %[tmp],$0x04 \n\t"
346 "beq "AP"singleloop2 \n\t"
347
348 AP"dualloop2: \n\t"
349 "vldm %[d], {d4} \n\t"
350 "vldm %[s]!, {d0} \n\t"
351
352 // Long version of d
353 "vmovl.u8 q8, d4 \n\t"
354
355 // Long version of s
356 "vmovl.u8 q6, d0 \n\t"
357
358 // q4/q5 = s-d
359 "vsub.s16 q4, q6, q8 \n\t"
360
361 // Multiply
362 "vmul.s16 q4, q4,q15 \n\t"
363
364 // Shift down
365 "vshr.s16 q4, #7 \n\t"
366
367 // Add d
368 "vqadd.s16 q4, q4, q8 \n\t"
369
370 // Shrink to save
371 "vqmovun.s16 d0, q4 \n\t"
372
373 "vstm %[d]!, {d0} \n\t"
374
375 "cmp %[d], %[e] \n\t"
376 "beq "AP"done \n\t"
377
378 AP"singleloop2: \n\t"
379 "vld1.32 d4[0], [%[d]] \n\t"
380 "vld1.32 d0[0], [%[s]]! \n\t"
381
382 // Long version of 'd'
383 "vmovl.u8 q8, d4 \n\t"
384
385 // Long version of 's'
386 "vmovl.u8 q6, d0 \n\t"
387
388 // d8 = s -d
389 "vsub.s16 d8, d12, d16 \n\t"
390
391 // Multiply
392 "vmul.s16 d8, d8, d30 \n\t"
393
394 // Shift down
395 "vshr.s16 d8, #7 \n\t"
396
397 // Add 'd'
398 "vqadd.s16 d8, d8, d16 \n\t"
399
400 // Shrink to save
401 "vqmovun.s16 d0, q4 \n\t"
402
403 "vst1.32 d0[0], [%[d]] \n\t"
404
405
406 AP"done: \n\t"
407
408 // No output
409 :
410 // Input
411 : [s] "r" (s), [d] "r" (d), [e] "r" (e), [c] "r" (c), [tmp] "r" (tmp)
412 // Clobbered
413 : "q0", "q1", "q2", "q3", "q4", "q5", "q6", "q7", "q8", "q9", "memory"
414 );
415#undef AP
416#endif
417}
418
419#define _op_blend_pas_c_dp_neon _op_blend_p_c_dp_neon
420#define _op_blend_pan_c_dp_neon _op_blend_p_c_dp_neon
421#define _op_blend_p_can_dp_neon _op_blend_p_c_dp_neon
422#define _op_blend_pas_can_dp_neon _op_blend_p_c_dp_neon
423#define _op_blend_p_caa_dp_neon _op_blend_p_c_dp_neon
424#define _op_blend_pas_caa_dp_neon _op_blend_p_c_dp_neon
425
426#define _op_blend_p_c_dpan_neon _op_blend_p_c_dp_neon
427#define _op_blend_pas_c_dpan_neon _op_blend_pas_c_dp_neon
428#define _op_blend_pan_c_dpan_neon _op_blend_pan_c_dp_neon
429#define _op_blend_p_can_dpan_neon _op_blend_p_can_dp_neon
430#define _op_blend_pas_can_dpan_neon _op_blend_pas_can_dp_neon
431#define _op_blend_pan_can_dpan_neon _op_blend_pan_can_dp_neon
432#define _op_blend_p_caa_dpan_neon _op_blend_p_caa_dp_neon
433#define _op_blend_pas_caa_dpan_neon _op_blend_pas_caa_dp_neon
434#define _op_blend_pan_caa_dpan_neon _op_blend_pan_caa_dp_neon
435
436
437static void
438init_blend_pixel_color_span_funcs_neon(void)
439{
440 op_blend_span_funcs[SP][SM_N][SC][DP][CPU_NEON] = _op_blend_p_c_dp_neon;
441 op_blend_span_funcs[SP_AS][SM_N][SC][DP][CPU_NEON] = _op_blend_pas_c_dp_neon;
442 op_blend_span_funcs[SP_AN][SM_N][SC][DP][CPU_NEON] = _op_blend_pan_c_dp_neon;
443 op_blend_span_funcs[SP][SM_N][SC_AN][DP][CPU_NEON] = _op_blend_p_can_dp_neon;
444 op_blend_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_NEON] = _op_blend_pas_can_dp_neon;
445 op_blend_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_NEON] = _op_blend_pan_can_dp_neon;
446 op_blend_span_funcs[SP][SM_N][SC_AA][DP][CPU_NEON] = _op_blend_p_caa_dp_neon;
447 op_blend_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_NEON] = _op_blend_pas_caa_dp_neon;
448 op_blend_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_NEON] = _op_blend_pan_caa_dp_neon;
449
450 op_blend_span_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_p_c_dpan_neon;
451 op_blend_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_pas_c_dpan_neon;
452 op_blend_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_pan_c_dpan_neon;
453 op_blend_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_blend_p_can_dpan_neon;
454 op_blend_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_blend_pas_can_dpan_neon;
455 op_blend_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_blend_pan_can_dpan_neon;
456 op_blend_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_p_caa_dpan_neon;
457 op_blend_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_pas_caa_dpan_neon;
458 op_blend_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_pan_caa_dpan_neon;
459}
460#endif
461
462#ifdef BUILD_NEON
463static void
464_op_blend_pt_p_c_dp_neon(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
465 s = MUL4_SYM(c, s);
466 c = 256 - (s >> 24);
467 *d = s + MUL_256(c, *d);
468}
469
470#define _op_blend_pt_pas_c_dp_neon _op_blend_pt_p_c_dp_neon
471#define _op_blend_pt_pan_c_dp_neon _op_blend_pt_p_c_dp_neon
472#define _op_blend_pt_p_can_dp_neon _op_blend_pt_p_c_dp_neon
473#define _op_blend_pt_pas_can_dp_neon _op_blend_pt_p_c_dp_neon
474#define _op_blend_pt_pan_can_dp_neon _op_blend_pt_p_c_dp_neon
475#define _op_blend_pt_p_caa_dp_neon _op_blend_pt_p_c_dp_neon
476#define _op_blend_pt_pas_caa_dp_neon _op_blend_pt_p_c_dp_neon
477#define _op_blend_pt_pan_caa_dp_neon _op_blend_pt_p_c_dp_neon
478
479#define _op_blend_pt_p_c_dpan_neon _op_blend_pt_p_c_dp_neon
480#define _op_blend_pt_pas_c_dpan_neon _op_blend_pt_p_c_dp_neon
481#define _op_blend_pt_pan_c_dpan_neon _op_blend_pt_p_c_dp_neon
482#define _op_blend_pt_p_can_dpan_neon _op_blend_pt_p_c_dp_neon
483#define _op_blend_pt_pas_can_dpan_neon _op_blend_pt_p_c_dp_neon
484#define _op_blend_pt_pan_can_dpan_neon _op_blend_pt_p_c_dp_neon
485#define _op_blend_pt_p_caa_dpan_neon _op_blend_pt_p_c_dp_neon
486#define _op_blend_pt_pas_caa_dpan_neon _op_blend_pt_p_c_dp_neon
487#define _op_blend_pt_pan_caa_dpan_neon _op_blend_pt_p_c_dp_neon
488
489static void
490init_blend_pixel_color_pt_funcs_neon(void)
491{
492 op_blend_pt_funcs[SP][SM_N][SC][DP][CPU_NEON] = _op_blend_pt_p_c_dp_neon;
493 op_blend_pt_funcs[SP_AS][SM_N][SC][DP][CPU_NEON] = _op_blend_pt_pas_c_dp_neon;
494 op_blend_pt_funcs[SP_AN][SM_N][SC][DP][CPU_NEON] = _op_blend_pt_pan_c_dp_neon;
495 op_blend_pt_funcs[SP][SM_N][SC_AN][DP][CPU_NEON] = _op_blend_pt_p_can_dp_neon;
496 op_blend_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_NEON] = _op_blend_pt_pas_can_dp_neon;
497 op_blend_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_NEON] = _op_blend_pt_pan_can_dp_neon;
498 op_blend_pt_funcs[SP][SM_N][SC_AA][DP][CPU_NEON] = _op_blend_pt_p_caa_dp_neon;
499 op_blend_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_NEON] = _op_blend_pt_pas_caa_dp_neon;
500 op_blend_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_NEON] = _op_blend_pt_pan_caa_dp_neon;
501
502 op_blend_pt_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_pt_p_c_dpan_neon;
503 op_blend_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_pt_pas_c_dpan_neon;
504 op_blend_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_pt_pan_c_dpan_neon;
505 op_blend_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_blend_pt_p_can_dpan_neon;
506 op_blend_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_blend_pt_pas_can_dpan_neon;
507 op_blend_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_blend_pt_pan_can_dpan_neon;
508 op_blend_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_pt_p_caa_dpan_neon;
509 op_blend_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_pt_pas_caa_dpan_neon;
510 op_blend_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_pt_pan_caa_dpan_neon;
511}
512#endif
513
514/*-----*/
515
516/* blend_rel pixel x color -> dst */
517
518#ifdef BUILD_NEON
519
520#define _op_blend_rel_p_c_dpan_neon _op_blend_p_c_dpan_neon
521#define _op_blend_rel_pas_c_dpan_neon _op_blend_pas_c_dpan_neon
522#define _op_blend_rel_pan_c_dpan_neon _op_blend_pan_c_dpan_neon
523#define _op_blend_rel_p_can_dpan_neon _op_blend_p_can_dpan_neon
524#define _op_blend_rel_pas_can_dpan_neon _op_blend_pas_can_dpan_neon
525#define _op_blend_rel_pan_can_dpan_neon _op_blend_pan_can_dpan_neon
526#define _op_blend_rel_p_caa_dpan_neon _op_blend_p_caa_dpan_neon
527#define _op_blend_rel_pas_caa_dpan_neon _op_blend_pas_caa_dpan_neon
528#define _op_blend_rel_pan_caa_dpan_neon _op_blend_pan_caa_dpan_neon
529
530static void
531init_blend_rel_pixel_color_span_funcs_neon(void)
532{
533 op_blend_rel_span_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_rel_p_c_dpan_neon;
534 op_blend_rel_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_rel_pas_c_dpan_neon;
535 op_blend_rel_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_rel_pan_c_dpan_neon;
536 op_blend_rel_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_blend_rel_p_can_dpan_neon;
537 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_blend_rel_pas_can_dpan_neon;
538 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_blend_rel_pan_can_dpan_neon;
539 op_blend_rel_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_rel_p_caa_dpan_neon;
540 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_rel_pas_caa_dpan_neon;
541 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_rel_pan_caa_dpan_neon;
542}
543#endif
544
545#ifdef BUILD_NEON
546
547#define _op_blend_rel_pt_p_c_dpan_neon _op_blend_pt_p_c_dpan_neon
548#define _op_blend_rel_pt_pas_c_dpan_neon _op_blend_pt_pas_c_dpan_neon
549#define _op_blend_rel_pt_pan_c_dpan_neon _op_blend_pt_pan_c_dpan_neon
550#define _op_blend_rel_pt_p_can_dpan_neon _op_blend_pt_p_can_dpan_neon
551#define _op_blend_rel_pt_pas_can_dpan_neon _op_blend_pt_pas_can_dpan_neon
552#define _op_blend_rel_pt_pan_can_dpan_neon _op_blend_pt_pan_can_dpan_neon
553#define _op_blend_rel_pt_p_caa_dpan_neon _op_blend_pt_p_caa_dpan_neon
554#define _op_blend_rel_pt_pas_caa_dpan_neon _op_blend_pt_pas_caa_dpan_neon
555#define _op_blend_rel_pt_pan_caa_dpan_neon _op_blend_pt_pan_caa_dpan_neon
556
557static void
558init_blend_rel_pixel_color_pt_funcs_neon(void)
559{
560 op_blend_rel_pt_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_rel_pt_p_c_dpan_neon;
561 op_blend_rel_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_rel_pt_pas_c_dpan_neon;
562 op_blend_rel_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_blend_rel_pt_pan_c_dpan_neon;
563 op_blend_rel_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_blend_rel_pt_p_can_dpan_neon;
564 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_blend_rel_pt_pas_can_dpan_neon;
565 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_blend_rel_pt_pan_can_dpan_neon;
566 op_blend_rel_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_rel_pt_p_caa_dpan_neon;
567 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_rel_pt_pas_caa_dpan_neon;
568 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_blend_rel_pt_pan_caa_dpan_neon;
569}
570#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_sse3.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_sse3.c
deleted file mode 100644
index 4ee31f5..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_color_sse3.c
+++ /dev/null
@@ -1,543 +0,0 @@
1/* blend pixel x color --> dst */
2
3#ifdef BUILD_SSE3
4
5static void
6_op_blend_p_c_dp_sse3(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
7
8 DATA32 alpha;
9
10 const __m128i c_packed = _mm_set_epi32(c, c, c, c);
11
12 LOOP_ALIGNED_U1_A48_SSE3(d, l,
13 { /* UOP */
14
15 DATA32 sc = MUL4_SYM(c, *s);
16 alpha = 256 - (sc >> 24);
17 *d = sc + MUL_256(alpha, *d);
18 d++; s++; l--;
19 },
20 { /* A4OP */
21
22 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
23 __m128i d0 = _mm_load_si128((__m128i *)d);
24
25 __m128i sc0 = mul4_sym_sse3(c_packed, s0);
26 __m128i a0 = sub4_alpha_sse3(sc0);
27 __m128i mul0 = mul_256_sse3(a0, d0);
28
29 d0 = _mm_add_epi32(sc0, mul0);
30
31 _mm_store_si128((__m128i *)d, d0);
32
33 d += 4; s += 4; l -= 4;
34 },
35 { /* A8OP */
36
37 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
38 __m128i d0 = _mm_load_si128((__m128i *)d);
39
40 __m128i s1 = _mm_lddqu_si128((__m128i *)(s+4));
41 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
42
43 __m128i sc0 = mul4_sym_sse3(c_packed, s0);
44 __m128i sc1 = mul4_sym_sse3(c_packed, s1);
45
46 __m128i a0 = sub4_alpha_sse3(sc0);
47 __m128i a1 = sub4_alpha_sse3(sc1);
48
49 __m128i mul0 = mul_256_sse3(a0, d0);
50 __m128i mul1 = mul_256_sse3(a1, d1);
51
52 d0 = _mm_add_epi32(sc0, mul0);
53 d1 = _mm_add_epi32(sc1, mul1);
54
55 _mm_store_si128((__m128i *)d, d0);
56 _mm_store_si128((__m128i *)(d+4), d1);
57
58 d += 8; s += 8; l -= 8;
59 })
60}
61
62static void
63_op_blend_pan_c_dp_sse3(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
64
65 DATA32 c_a = c & 0xFF000000;
66 DATA32 alpha = 256 - (c >> 24);
67
68 const __m128i c_packed = _mm_set_epi32(c, c, c, c);
69 const __m128i c_alpha = _mm_set_epi32(c_a, c_a, c_a, c_a);
70 const __m128i a0 = _mm_set_epi32(alpha, alpha, alpha, alpha);
71
72 LOOP_ALIGNED_U1_A48_SSE3(d, l,
73 { /* UOP */
74
75 *d = ((c & 0xff000000) + MUL3_SYM(c, *s)) + MUL_256(alpha, *d);
76 d++; s++; l--;
77 },
78 { /* A4OP */
79
80 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
81 __m128i d0 = _mm_load_si128((__m128i *)d);
82
83 __m128i r0 = _mm_add_epi32(mul3_sym_sse3(c_packed, s0),
84 mul_256_sse3(a0, d0));
85
86 r0 = _mm_add_epi32(r0, c_alpha);
87
88 _mm_store_si128((__m128i *)d, r0);
89
90 d += 4; s += 4; l -= 4;
91 },
92 { /* A8OP */
93
94 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
95 __m128i d0 = _mm_load_si128((__m128i *)d);
96
97 __m128i s1 = _mm_lddqu_si128((__m128i *)(s+4));
98 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
99
100 __m128i r0 = _mm_add_epi32(mul3_sym_sse3(c_packed, s0),
101 mul_256_sse3(a0, d0));
102
103 __m128i r1 = _mm_add_epi32(mul3_sym_sse3(c_packed, s1),
104 mul_256_sse3(a0, d1));
105
106 r0 = _mm_add_epi32(r0, c_alpha);
107 r1 = _mm_add_epi32(r1, c_alpha);
108
109 _mm_store_si128((__m128i *)d, r0);
110 _mm_store_si128((__m128i *)(d+4), r1);
111
112 d += 8; s += 8; l -= 8;
113 })
114}
115
116static void
117_op_blend_p_can_dp_sse3(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
118
119 int alpha;
120 const __m128i c_packed = _mm_set_epi32(c, c, c, c);
121
122 LOOP_ALIGNED_U1_A48_SSE3(d, l,
123 { /* UOP */
124
125 alpha = 256 - (*s >> 24);
126 *d = ((*s & 0xff000000) + MUL3_SYM(c, *s)) + MUL_256(alpha, *d);
127 d++; s++; l--;
128 },
129 { /* A4OP */
130
131 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
132 __m128i d0 = _mm_load_si128((__m128i *)d);
133
134 __m128i a0 = sub4_alpha_sse3(s0);
135
136 __m128i r0 = _mm_add_epi32(mul3_sym_sse3(c_packed, s0),
137 mul_256_sse3(a0, d0));
138
139 r0 = _mm_add_epi32(r0, _mm_and_si128(s0, A_MASK_SSE3));
140
141 _mm_store_si128((__m128i *)d, r0);
142
143 d += 4; s += 4; l -= 4;
144 },
145 {
146 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
147 __m128i d0 = _mm_load_si128((__m128i *)d);
148
149 __m128i s1 = _mm_lddqu_si128((__m128i *)(s+4));
150 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
151
152 __m128i a0 = sub4_alpha_sse3(s0);
153 __m128i a1 = sub4_alpha_sse3(s1);
154
155 __m128i r0 = _mm_add_epi32(mul3_sym_sse3(c_packed, s0),
156 mul_256_sse3(a0, d0));
157
158 __m128i r1 = _mm_add_epi32(mul3_sym_sse3(c_packed, s1),
159 mul_256_sse3(a1, d1));
160
161 r0 = _mm_add_epi32(r0, _mm_and_si128(s0, A_MASK_SSE3));
162 r1 = _mm_add_epi32(r1, _mm_and_si128(s1, A_MASK_SSE3));
163
164 _mm_store_si128((__m128i *)d, r0);
165 _mm_store_si128((__m128i *)(d+4), r1);
166
167 d += 8; s += 8; l -= 8;
168 })
169}
170
171static void
172_op_blend_pan_can_dp_sse3(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
173
174 const __m128i c_packed = _mm_set_epi32(c, c, c, c);
175
176 LOOP_ALIGNED_U1_A48_SSE3(d, l,
177 { /* UOP */
178
179 *d++ = 0xff000000 + MUL3_SYM(c, *s);
180 s++; l--;
181 },
182 { /* A4OP */
183
184 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
185
186 __m128i r0 = mul3_sym_sse3(c_packed, s0);
187 r0 = _mm_add_epi32(r0, A_MASK_SSE3);
188
189 _mm_store_si128((__m128i *)d, r0);
190
191 d += 4; s += 4; l -= 4;
192 },
193 { /* A8OP */
194
195 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
196 __m128i s1 = _mm_lddqu_si128((__m128i *)(s+4));
197
198 __m128i r0 = mul3_sym_sse3(c_packed, s0);
199 __m128i r1 = mul3_sym_sse3(c_packed, s1);
200
201 r0 = _mm_add_epi32(r0, A_MASK_SSE3);
202 r1 = _mm_add_epi32(r1, A_MASK_SSE3);
203
204 _mm_store_si128((__m128i *)d, r0);
205 _mm_store_si128((__m128i *)(d+4), r1);
206
207 d += 8; s += 8; l -= 8;
208 })
209}
210
211static void
212_op_blend_p_caa_dp_sse3(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
213
214 int alpha;
215 c = 1 + (c & 0xff);
216 const __m128i c_packed = _mm_set_epi32(c, c, c, c);
217
218 LOOP_ALIGNED_U1_A48_SSE3(d, l,
219 { /* UOP */
220
221 DATA32 sc = MUL_256(c, *s);
222 alpha = 256 - (sc >> 24);
223 *d = sc + MUL_256(alpha, *d);
224 d++;
225 s++;
226 l--;
227 },
228 { /* A4OP */
229
230 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
231 __m128i d0 = _mm_load_si128 ((__m128i *)d);
232
233 __m128i sc0 = mul_256_sse3(c_packed, s0);
234 __m128i a0 = sub4_alpha_sse3(sc0);
235
236 __m128i r0 = _mm_add_epi32(mul_256_sse3(a0, d0), sc0);
237
238 _mm_store_si128((__m128i *)d, r0);
239
240 d += 4; s += 4; l -= 4;
241 },
242 {
243 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
244 __m128i d0 = _mm_load_si128((__m128i *)d);
245
246 __m128i s1 = _mm_lddqu_si128((__m128i *)(s+4));
247 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
248
249 __m128i sc0 = mul_256_sse3(c_packed, s0);
250 __m128i sc1 = mul_256_sse3(c_packed, s1);
251
252 __m128i a0 = sub4_alpha_sse3(sc0);
253 __m128i a1 = sub4_alpha_sse3(sc1);
254
255 __m128i r0 = _mm_add_epi32(mul_256_sse3(a0, d0), sc0);
256 __m128i r1 = _mm_add_epi32(mul_256_sse3(a1, d1), sc1);
257
258 _mm_store_si128((__m128i *)d, r0);
259 _mm_store_si128((__m128i *)(d+4), r1);
260
261 d += 8; s += 8; l -= 8;
262 })
263}
264
265static void
266_op_blend_pan_caa_dp_sse3(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
267
268 c = 1 + (c & 0xff);
269 const __m128i c_packed = _mm_set_epi32(c, c, c,c);
270
271 LOOP_ALIGNED_U1_A48_SSE3(d, l,
272 { /* UOP */
273
274 *d = INTERP_256(c, *s, *d);
275 d++; s++; l--;
276 },
277 { /* A4OP */
278
279 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
280 __m128i d0 = _mm_load_si128((__m128i *)d);
281
282 __m128i r0 = interp4_256_sse3(c_packed, s0, d0);
283
284 _mm_store_si128((__m128i *)d, r0);
285
286 d += 4; s += 4; l -= 4;
287 },
288 {
289
290 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
291 __m128i d0 = _mm_load_si128((__m128i *)d);
292
293 __m128i s1 = _mm_lddqu_si128((__m128i *)(s+4));
294 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
295
296 __m128i r0 = interp4_256_sse3(c_packed, s0, d0);
297 __m128i r1 = interp4_256_sse3(c_packed, s1, d1);
298
299 _mm_store_si128((__m128i *)d, r0);
300 _mm_store_si128((__m128i *)(d+4), r1);
301
302 d += 8; s += 8; l -= 8;
303 })
304}
305
306#define _op_blend_pas_c_dp_sse3 _op_blend_p_c_dp_sse3
307#define _op_blend_pas_can_dp_sse3 _op_blend_p_can_dp_sse3
308#define _op_blend_pas_caa_dp_sse3 _op_blend_p_caa_dp_sse3
309
310#define _op_blend_p_c_dpan_sse3 _op_blend_p_c_dp_sse3
311#define _op_blend_pas_c_dpan_sse3 _op_blend_pas_c_dp_sse3
312#define _op_blend_pan_c_dpan_sse3 _op_blend_pan_c_dp_sse3
313#define _op_blend_p_can_dpan_sse3 _op_blend_p_can_dp_sse3
314#define _op_blend_pas_can_dpan_sse3 _op_blend_pas_can_dp_sse3
315#define _op_blend_pan_can_dpan_sse3 _op_blend_pan_can_dp_sse3
316#define _op_blend_p_caa_dpan_sse3 _op_blend_p_caa_dp_sse3
317#define _op_blend_pas_caa_dpan_sse3 _op_blend_pas_caa_dp_sse3
318#define _op_blend_pan_caa_dpan_sse3 _op_blend_pan_caa_dp_sse3
319
320static void
321init_blend_pixel_color_span_funcs_sse3(void)
322{
323 op_blend_span_funcs[SP][SM_N][SC][DP][CPU_SSE3] = _op_blend_p_c_dp_sse3;
324 op_blend_span_funcs[SP_AS][SM_N][SC][DP][CPU_SSE3] = _op_blend_pas_c_dp_sse3;
325 op_blend_span_funcs[SP_AN][SM_N][SC][DP][CPU_SSE3] = _op_blend_pan_c_dp_sse3;
326 op_blend_span_funcs[SP][SM_N][SC_AN][DP][CPU_SSE3] = _op_blend_p_can_dp_sse3;
327 op_blend_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_SSE3] = _op_blend_pas_can_dp_sse3;
328 op_blend_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_SSE3] = _op_blend_pan_can_dp_sse3;
329 op_blend_span_funcs[SP][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_p_caa_dp_sse3;
330 op_blend_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_pas_caa_dp_sse3;
331 op_blend_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_pan_caa_dp_sse3;
332
333 op_blend_span_funcs[SP][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_p_c_dpan_sse3;
334 op_blend_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_pas_c_dpan_sse3;
335 op_blend_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_pan_c_dpan_sse3;
336 op_blend_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_SSE3] = _op_blend_p_can_dpan_sse3;
337 op_blend_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_SSE3] = _op_blend_pas_can_dpan_sse3;
338 op_blend_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_SSE3] = _op_blend_pan_can_dpan_sse3;
339 op_blend_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_p_caa_dpan_sse3;
340 op_blend_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_pas_caa_dpan_sse3;
341 op_blend_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_pan_caa_dpan_sse3;
342}
343
344#define _op_blend_pt_p_c_dp_sse3 NULL
345
346#define _op_blend_pt_pas_c_dp_sse3 _op_blend_pt_p_c_dp_sse3
347#define _op_blend_pt_pan_c_dp_sse3 _op_blend_pt_p_c_dp_sse3
348#define _op_blend_pt_p_can_dp_sse3 _op_blend_pt_p_c_dp_sse3
349#define _op_blend_pt_pas_can_dp_sse3 _op_blend_pt_p_c_dp_sse3
350#define _op_blend_pt_pan_can_dp_sse3 _op_blend_pt_p_c_dp_sse3
351#define _op_blend_pt_p_caa_dp_sse3 _op_blend_pt_p_c_dp_sse3
352#define _op_blend_pt_pas_caa_dp_sse3 _op_blend_pt_p_c_dp_sse3
353#define _op_blend_pt_pan_caa_dp_sse3 _op_blend_pt_p_c_dp_sse3
354
355#define _op_blend_pt_p_c_dpan_sse3 _op_blend_pt_p_c_dp_sse3
356#define _op_blend_pt_pas_c_dpan_sse3 _op_blend_pt_pas_c_dp_sse3
357#define _op_blend_pt_pan_c_dpan_sse3 _op_blend_pt_pan_c_dp_sse3
358#define _op_blend_pt_p_can_dpan_sse3 _op_blend_pt_p_can_dp_sse3
359#define _op_blend_pt_pas_can_dpan_sse3 _op_blend_pt_pas_can_dp_sse3
360#define _op_blend_pt_pan_can_dpan_sse3 _op_blend_pt_pan_can_dp_sse3
361#define _op_blend_pt_p_caa_dpan_sse3 _op_blend_pt_p_caa_dp_sse3
362#define _op_blend_pt_pas_caa_dpan_sse3 _op_blend_pt_pas_caa_dp_sse3
363#define _op_blend_pt_pan_caa_dpan_sse3 _op_blend_pt_pan_caa_dp_sse3
364
365static void
366init_blend_pixel_color_pt_funcs_sse3(void)
367{
368 op_blend_pt_funcs[SP][SM_N][SC][DP][CPU_SSE3] = _op_blend_pt_p_c_dp_sse3;
369 op_blend_pt_funcs[SP_AS][SM_N][SC][DP][CPU_SSE3] = _op_blend_pt_pas_c_dp_sse3;
370 op_blend_pt_funcs[SP_AN][SM_N][SC][DP][CPU_SSE3] = _op_blend_pt_pan_c_dp_sse3;
371 op_blend_pt_funcs[SP][SM_N][SC_AN][DP][CPU_SSE3] = _op_blend_pt_p_can_dp_sse3;
372 op_blend_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_SSE3] = _op_blend_pt_pas_can_dp_sse3;
373 op_blend_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_SSE3] = _op_blend_pt_pan_can_dp_sse3;
374 op_blend_pt_funcs[SP][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_pt_p_caa_dp_sse3;
375 op_blend_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_pt_pas_caa_dp_sse3;
376 op_blend_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_pt_pan_caa_dp_sse3;
377
378 op_blend_pt_funcs[SP][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_pt_p_c_dpan_sse3;
379 op_blend_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_pt_pas_c_dpan_sse3;
380 op_blend_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_pt_pan_c_dpan_sse3;
381 op_blend_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_SSE3] = _op_blend_pt_p_can_dpan_sse3;
382 op_blend_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_SSE3] = _op_blend_pt_pas_can_dpan_sse3;
383 op_blend_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_SSE3] = _op_blend_pt_pan_can_dpan_sse3;
384 op_blend_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_pt_p_caa_dpan_sse3;
385 op_blend_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_pt_pas_caa_dpan_sse3;
386 op_blend_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_pt_pan_caa_dpan_sse3;
387}
388
389/*-----*/
390
391/* blend_rel pixel x color -> dst */
392
393static void
394_op_blend_rel_p_c_dp_sse3(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
395
396 int alpha;
397
398 const __m128i c_packed = _mm_set_epi32(c, c, c, c);
399
400 LOOP_ALIGNED_U1_A48_SSE3(d, l,
401 { /* UOP */
402
403 DATA32 sc = MUL4_SYM(c, *s);
404 alpha = 256 - (sc >> 24);
405 *d = MUL_SYM(*d >> 24, sc) + MUL_256(alpha, *d);
406 d++; s++; l--;
407 },
408 { /* A4OP */
409
410 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
411 __m128i d0 = _mm_load_si128((__m128i *)d);
412
413 __m128i sc0 = mul4_sym_sse3(c_packed, s0);
414 __m128i a0 = sub4_alpha_sse3(sc0);
415
416 __m128i l0 = mul_sym_sse3(_mm_srli_epi32(d0, 24), sc0);
417 __m128i r0 = mul_256_sse3(a0, d0);
418
419 r0 = _mm_add_epi32(l0, r0);
420
421 _mm_store_si128((__m128i *)d, r0);
422
423 d += 4; s += 4; l -= 4;
424 },
425 { /* A8OP */
426
427 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
428 __m128i d0 = _mm_load_si128((__m128i *)d);
429
430 __m128i s1 = _mm_lddqu_si128((__m128i *)(s+4));
431 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
432
433 __m128i sc0 = mul4_sym_sse3(c_packed, s0);
434 __m128i sc1 = mul4_sym_sse3(c_packed, s1);
435
436 __m128i a0 = sub4_alpha_sse3(sc0);
437 __m128i a1 = sub4_alpha_sse3(sc1);
438
439 __m128i l0 = mul_sym_sse3(_mm_srli_epi32(d0, 24), sc0);
440 __m128i r0 = mul_256_sse3(a0, d0);
441
442 __m128i l1 = mul_sym_sse3(_mm_srli_epi32(d1, 24), sc1);
443 __m128i r1 = mul_256_sse3(a1, d1);
444
445 r0 = _mm_add_epi32(l0, r0);
446 r1 = _mm_add_epi32(l1, r1);
447
448 _mm_store_si128((__m128i *)d, r0);
449 _mm_store_si128((__m128i *)(d+4), r1);
450
451 d += 8; s += 8; l -= 8;
452 })
453}
454
455#define _op_blend_rel_pas_c_dp_sse3 _op_blend_rel_p_c_dp_sse3
456#define _op_blend_rel_pan_c_dp_sse3 _op_blend_rel_p_c_dp_sse3
457#define _op_blend_rel_p_can_dp_sse3 _op_blend_rel_p_c_dp_sse3
458#define _op_blend_rel_pas_can_dp_sse3 _op_blend_rel_p_c_dp_sse3
459#define _op_blend_rel_pan_can_dp_sse3 _op_blend_rel_p_c_dp_sse3
460#define _op_blend_rel_p_caa_dp_sse3 _op_blend_rel_p_c_dp_sse3
461#define _op_blend_rel_pas_caa_dp_sse3 _op_blend_rel_p_c_dp_sse3
462#define _op_blend_rel_pan_caa_dp_sse3 _op_blend_rel_p_c_dp_sse3
463
464#define _op_blend_rel_p_c_dpan_sse3 _op_blend_p_c_dpan_sse3
465#define _op_blend_rel_pas_c_dpan_sse3 _op_blend_pas_c_dpan_sse3
466#define _op_blend_rel_pan_c_dpan_sse3 _op_blend_pan_c_dpan_sse3
467#define _op_blend_rel_p_can_dpan_sse3 _op_blend_p_can_dpan_sse3
468#define _op_blend_rel_pas_can_dpan_sse3 _op_blend_pas_can_dpan_sse3
469#define _op_blend_rel_pan_can_dpan_sse3 _op_blend_pan_can_dpan_sse3
470#define _op_blend_rel_p_caa_dpan_sse3 _op_blend_p_caa_dpan_sse3
471#define _op_blend_rel_pas_caa_dpan_sse3 _op_blend_pas_caa_dpan_sse3
472#define _op_blend_rel_pan_caa_dpan_sse3 _op_blend_pan_caa_dpan_sse3
473
474static void
475init_blend_rel_pixel_color_span_funcs_sse3(void)
476{
477 op_blend_rel_span_funcs[SP][SM_N][SC][DP][CPU_SSE3] = _op_blend_rel_p_c_dp_sse3;
478 op_blend_rel_span_funcs[SP_AS][SM_N][SC][DP][CPU_SSE3] = _op_blend_rel_pas_c_dp_sse3;
479 op_blend_rel_span_funcs[SP_AN][SM_N][SC][DP][CPU_SSE3] = _op_blend_rel_pan_c_dp_sse3;
480 op_blend_rel_span_funcs[SP][SM_N][SC_AN][DP][CPU_SSE3] = _op_blend_rel_p_can_dp_sse3;
481 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_SSE3] = _op_blend_rel_pas_can_dp_sse3;
482 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_SSE3] = _op_blend_rel_pan_can_dp_sse3;
483 op_blend_rel_span_funcs[SP][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_rel_p_caa_dp_sse3;
484 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_rel_pas_caa_dp_sse3;
485 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_rel_pan_caa_dp_sse3;
486
487 op_blend_rel_span_funcs[SP][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_rel_p_c_dpan_sse3;
488 op_blend_rel_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_rel_pas_c_dpan_sse3;
489 op_blend_rel_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_rel_pan_c_dpan_sse3;
490 op_blend_rel_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_SSE3] = _op_blend_rel_p_can_dpan_sse3;
491 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_SSE3] = _op_blend_rel_pas_can_dpan_sse3;
492 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_SSE3] = _op_blend_rel_pan_can_dpan_sse3;
493 op_blend_rel_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_rel_p_caa_dpan_sse3;
494 op_blend_rel_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_rel_pas_caa_dpan_sse3;
495 op_blend_rel_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_rel_pan_caa_dpan_sse3;
496}
497
498#define _op_blend_rel_pt_p_c_dp_sse3 NULL
499
500#define _op_blend_rel_pt_pas_c_dp_sse3 _op_blend_rel_pt_p_c_dp_sse3
501#define _op_blend_rel_pt_pan_c_dp_sse3 _op_blend_rel_pt_p_c_dp_sse3
502#define _op_blend_rel_pt_p_can_dp_sse3 _op_blend_rel_pt_p_c_dp_sse3
503#define _op_blend_rel_pt_pas_can_dp_sse3 _op_blend_rel_pt_p_c_dp_sse3
504#define _op_blend_rel_pt_pan_can_dp_sse3 _op_blend_rel_pt_p_c_dp_sse3
505#define _op_blend_rel_pt_p_caa_dp_sse3 _op_blend_rel_pt_p_c_dp_sse3
506#define _op_blend_rel_pt_pas_caa_dp_sse3 _op_blend_rel_pt_p_c_dp_sse3
507#define _op_blend_rel_pt_pan_caa_dp_sse3 _op_blend_rel_pt_p_c_dp_sse3
508
509#define _op_blend_rel_pt_p_c_dpan_sse3 _op_blend_pt_p_c_dpan_sse3
510#define _op_blend_rel_pt_pas_c_dpan_sse3 _op_blend_pt_pas_c_dpan_sse3
511#define _op_blend_rel_pt_pan_c_dpan_sse3 _op_blend_pt_pan_c_dpan_sse3
512#define _op_blend_rel_pt_p_can_dpan_sse3 _op_blend_pt_p_can_dpan_sse3
513#define _op_blend_rel_pt_pas_can_dpan_sse3 _op_blend_pt_pas_can_dpan_sse3
514#define _op_blend_rel_pt_pan_can_dpan_sse3 _op_blend_pt_pan_can_dpan_sse3
515#define _op_blend_rel_pt_p_caa_dpan_sse3 _op_blend_pt_p_caa_dpan_sse3
516#define _op_blend_rel_pt_pas_caa_dpan_sse3 _op_blend_pt_pas_caa_dpan_sse3
517#define _op_blend_rel_pt_pan_caa_dpan_sse3 _op_blend_pt_pan_caa_dpan_sse3
518
519static void
520init_blend_rel_pixel_color_pt_funcs_sse3(void)
521{
522 op_blend_rel_pt_funcs[SP][SM_N][SC][DP][CPU_SSE3] = _op_blend_rel_pt_p_c_dp_sse3;
523 op_blend_rel_pt_funcs[SP_AS][SM_N][SC][DP][CPU_SSE3] = _op_blend_rel_pt_pas_c_dp_sse3;
524 op_blend_rel_pt_funcs[SP_AN][SM_N][SC][DP][CPU_SSE3] = _op_blend_rel_pt_pan_c_dp_sse3;
525 op_blend_rel_pt_funcs[SP][SM_N][SC_AN][DP][CPU_SSE3] = _op_blend_rel_pt_p_can_dp_sse3;
526 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_SSE3] = _op_blend_rel_pt_pas_can_dp_sse3;
527 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_SSE3] = _op_blend_rel_pt_pan_can_dp_sse3;
528 op_blend_rel_pt_funcs[SP][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_rel_pt_p_caa_dp_sse3;
529 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_rel_pt_pas_caa_dp_sse3;
530 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_SSE3] = _op_blend_rel_pt_pan_caa_dp_sse3;
531
532 op_blend_rel_pt_funcs[SP][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_rel_pt_p_c_dpan_sse3;
533 op_blend_rel_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_rel_pt_pas_c_dpan_sse3;
534 op_blend_rel_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_SSE3] = _op_blend_rel_pt_pan_c_dpan_sse3;
535 op_blend_rel_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_SSE3] = _op_blend_rel_pt_p_can_dpan_sse3;
536 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_SSE3] = _op_blend_rel_pt_pas_can_dpan_sse3;
537 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_SSE3] = _op_blend_rel_pt_pan_can_dpan_sse3;
538 op_blend_rel_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_rel_pt_p_caa_dpan_sse3;
539 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_rel_pt_pas_caa_dpan_sse3;
540 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_SSE3] = _op_blend_rel_pt_pan_caa_dpan_sse3;
541}
542
543#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_i386.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_i386.c
deleted file mode 100644
index 9b5abe6..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_i386.c
+++ /dev/null
@@ -1,217 +0,0 @@
1/* blend pixel --> dst */
2
3#ifdef BUILD_MMX
4static void
5_op_blend_p_dp_mmx(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
6 DATA32 *e = d + l;
7 pxor_r2r(mm0, mm0);
8 MOV_A2R(ALPHA_256, mm6)
9 while (d < e)
10 {
11 MOV_P2R(*s, mm2, mm0)
12 MOV_RA2R(mm2, mm1)
13 movq_r2r(mm6, mm3);
14 psubw_r2r(mm1, mm3);
15
16 MOV_P2R(*d, mm1, mm0)
17 MUL4_256_R2R(mm3, mm1)
18
19 paddw_r2r(mm2, mm1);
20 MOV_R2P(mm1, *d, mm0)
21 s++; d++;
22 }
23}
24
25static void
26_op_blend_pas_dp_mmx(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
27 _op_blend_p_dp_mmx(s, m, c, d, l);
28 return;
29 DATA32 *e = d + l;
30 pxor_r2r(mm0, mm0);
31 MOV_A2R(ALPHA_256, mm6)
32 while (d < e)
33 {
34 switch (*s & 0xff000000)
35 {
36 case 0:
37 break;
38 case 0xff000000:
39 *d = *s;
40 break;
41 default :
42 MOV_P2R(*s, mm2, mm0)
43 MOV_RA2R(mm2, mm1)
44 movq_r2r(mm6, mm3);
45 psubw_r2r(mm1, mm3);
46
47 MOV_P2R(*d, mm1, mm0)
48 MUL4_256_R2R(mm3, mm1)
49
50 paddw_r2r(mm2, mm1);
51 MOV_R2P(mm1, *d, mm0)
52 break;
53 }
54 s++; d++;
55 }
56}
57
58#define _op_blend_pan_dp_mmx NULL
59
60#define _op_blend_p_dpan_mmx _op_blend_p_dp_mmx
61#define _op_blend_pas_dpan_mmx _op_blend_pas_dp_mmx
62#define _op_blend_pan_dpan_mmx _op_blend_pan_dp_mmx
63
64static void
65init_blend_pixel_span_funcs_mmx(void)
66{
67 op_blend_span_funcs[SP][SM_N][SC_N][DP][CPU_MMX] = _op_blend_p_dp_mmx;
68 op_blend_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_MMX] = _op_blend_pas_dp_mmx;
69 op_blend_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_MMX] = _op_blend_pan_dp_mmx;
70
71 op_blend_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_MMX] = _op_blend_p_dpan_mmx;
72 op_blend_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_MMX] = _op_blend_pas_dpan_mmx;
73 op_blend_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_MMX] = _op_blend_pan_dpan_mmx;
74}
75#endif
76
77#ifdef BUILD_MMX
78static void
79_op_blend_pt_p_dp_mmx(DATA32 s, DATA8 m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d) {
80 pxor_r2r(mm0, mm0);
81 MOV_A2R(ALPHA_256, mm6)
82 MOV_P2R(s, mm2, mm0)
83 MOV_RA2R(mm2, mm1)
84 movq_r2r(mm6, mm3);
85 psubw_r2r(mm1, mm3);
86
87 MOV_P2R(*d, mm1, mm0)
88 MUL4_256_R2R(mm3, mm1)
89
90 paddw_r2r(mm2, mm1);
91 MOV_R2P(mm1, *d, mm0)
92}
93
94
95#define _op_blend_pt_pan_dp_mmx NULL
96#define _op_blend_pt_pas_dp_mmx _op_blend_pt_p_dp_mmx
97
98#define _op_blend_pt_p_dpan_mmx _op_blend_pt_p_dp_mmx
99#define _op_blend_pt_pan_dpan_mmx _op_blend_pt_pan_dp_mmx
100#define _op_blend_pt_pas_dpan_mmx _op_blend_pt_pas_dp_mmx
101
102static void
103init_blend_pixel_pt_funcs_mmx(void)
104{
105 op_blend_pt_funcs[SP][SM_N][SC_N][DP][CPU_MMX] = _op_blend_pt_p_dp_mmx;
106 op_blend_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_MMX] = _op_blend_pt_pas_dp_mmx;
107 op_blend_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_MMX] = _op_blend_pt_pan_dp_mmx;
108
109 op_blend_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_MMX] = _op_blend_pt_p_dpan_mmx;
110 op_blend_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_MMX] = _op_blend_pt_pas_dpan_mmx;
111 op_blend_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_MMX] = _op_blend_pt_pan_dpan_mmx;
112}
113#endif
114
115/*-----*/
116
117/* blend_rel pixel -> dst */
118
119#ifdef BUILD_MMX
120static void
121_op_blend_rel_p_dp_mmx(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
122 DATA32 *e = d + l;
123 pxor_r2r(mm0, mm0);
124 MOV_A2R(ALPHA_256, mm6)
125 MOV_A2R(ALPHA_255, mm5)
126 while (d < e)
127 {
128 MOV_P2R(*s, mm2, mm0)
129 MOV_RA2R(mm2, mm1)
130 movq_r2r(mm6, mm3);
131 psubw_r2r(mm1, mm3);
132
133 MOV_P2R(*d, mm1, mm0)
134 MOV_RA2R(mm1, mm4)
135 MUL4_256_R2R(mm3, mm1)
136
137 MUL4_SYM_R2R(mm4, mm2, mm5)
138 paddw_r2r(mm2, mm1);
139 MOV_R2P(mm1, *d, mm0)
140 s++; d++;
141 }
142}
143
144static void
145_op_blend_rel_pan_dp_mmx(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
146 DATA32 *e = d + l;
147 pxor_r2r(mm0, mm0);
148 MOV_A2R(ALPHA_256, mm6)
149 MOV_A2R(ALPHA_255, mm5)
150 while (d < e)
151 {
152 MOV_P2R(*s, mm2, mm0)
153 MOV_PA2R(*d, mm1)
154 MUL4_SYM_R2R(mm2, mm1, mm5)
155 MOV_R2P(mm1, *d, mm0)
156 s++; d++;
157 }
158}
159
160#define _op_blend_rel_pas_dp_mmx _op_blend_rel_p_dp_mmx
161
162#define _op_blend_rel_p_dpan_mmx _op_blend_p_dpan_mmx
163#define _op_blend_rel_pan_dpan_mmx _op_blend_pan_dpan_mmx
164#define _op_blend_rel_pas_dpan_mmx _op_blend_pas_dpan_mmx
165
166static void
167init_blend_rel_pixel_span_funcs_mmx(void)
168{
169 op_blend_rel_span_funcs[SP][SM_N][SC_N][DP][CPU_MMX] = _op_blend_rel_p_dp_mmx;
170 op_blend_rel_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_MMX] = _op_blend_rel_pas_dp_mmx;
171 op_blend_rel_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_MMX] = _op_blend_rel_pan_dp_mmx;
172
173 op_blend_rel_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_MMX] = _op_blend_rel_p_dpan_mmx;
174 op_blend_rel_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_MMX] = _op_blend_rel_pas_dpan_mmx;
175 op_blend_rel_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_MMX] = _op_blend_rel_pan_dpan_mmx;
176}
177#endif
178
179#ifdef BUILD_MMX
180static void
181_op_blend_rel_pt_p_dp_mmx(DATA32 s, DATA8 m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d) {
182 pxor_r2r(mm0, mm0);
183 MOV_A2R(ALPHA_256, mm6)
184 MOV_A2R(ALPHA_255, mm5)
185
186 MOV_P2R(s, mm2, mm0)
187 MOV_RA2R(mm2, mm1)
188 psubw_r2r(mm1, mm6);
189
190 MOV_P2R(*d, mm1, mm0)
191 MOV_RA2R(mm1, mm4)
192 MUL4_256_R2R(mm6, mm1)
193
194 MUL4_SYM_R2R(mm4, mm2, mm5)
195 paddw_r2r(mm2, mm1);
196 MOV_R2P(mm1, *d, mm0)
197}
198
199#define _op_blend_rel_pt_pas_dp_mmx _op_blend_rel_pt_p_dp_mmx
200#define _op_blend_rel_pt_pan_dp_mmx _op_blend_rel_pt_p_dp_mmx
201
202#define _op_blend_rel_pt_p_dpan_mmx _op_blend_pt_p_dpan_mmx
203#define _op_blend_rel_pt_pas_dpan_mmx _op_blend_pt_pas_dpan_mmx
204#define _op_blend_rel_pt_pan_dpan_mmx _op_blend_pt_pan_dpan_mmx
205
206static void
207init_blend_rel_pixel_pt_funcs_mmx(void)
208{
209 op_blend_rel_pt_funcs[SP][SM_N][SC_N][DP][CPU_MMX] = _op_blend_rel_pt_p_dp_mmx;
210 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_MMX] = _op_blend_rel_pt_pas_dp_mmx;
211 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_MMX] = _op_blend_rel_pt_pan_dp_mmx;
212
213 op_blend_rel_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_MMX] = _op_blend_rel_pt_p_dpan_mmx;
214 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_MMX] = _op_blend_rel_pt_pas_dpan_mmx;
215 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_MMX] = _op_blend_rel_pt_pan_dpan_mmx;
216}
217#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_.c
deleted file mode 100644
index a9d0f4b..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_.c
+++ /dev/null
@@ -1,189 +0,0 @@
1/* blend pixel x mask --> dst */
2
3#ifdef BUILD_C
4static void
5_op_blend_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e;
7 int alpha;
8 UNROLL8_PLD_WHILE(d, l, e,
9 {
10 alpha = *m;
11 switch(alpha)
12 {
13 case 0:
14 break;
15 case 255:
16 alpha = 256 - (*s >> 24);
17 *d = *s + MUL_256(alpha, *d);
18 break;
19 default:
20 c = MUL_SYM(alpha, *s);
21 alpha = 256 - (c >> 24);
22 *d = c + MUL_256(alpha, *d);
23 break;
24 }
25 m++; s++; d++;
26 });
27}
28
29static void
30_op_blend_pas_mas_dp(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
31 DATA32 *e;
32 int alpha;
33 UNROLL8_PLD_WHILE(d, l, e,
34 {
35 alpha = *m;
36 switch(alpha)
37 {
38 case 0:
39 break;
40 case 255:
41 *d = *s;
42 break;
43 default:
44 alpha++;
45 *d = INTERP_256(alpha, *s, *d);
46 break;
47 }
48 m++; s++; d++;
49 });
50}
51
52static void
53_op_blend_pan_mas_dp(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
54 DATA32 *e;
55 int alpha;
56 UNROLL8_PLD_WHILE(d, l, e,
57 {
58 alpha = *m;
59 switch(alpha)
60 {
61 case 0:
62 break;
63 case 255:
64 *d = *s;
65 break;
66 default:
67 alpha++;
68 *d = INTERP_256(alpha, *s, *d);
69 break;
70 }
71 m++; s++; d++;
72 });
73}
74
75
76#define _op_blend_p_mas_dpan _op_blend_p_mas_dp
77#define _op_blend_pas_mas_dpan _op_blend_pas_mas_dp
78#define _op_blend_pan_mas_dpan _op_blend_pan_mas_dp
79
80static void
81init_blend_pixel_mask_span_funcs_c(void)
82{
83 op_blend_span_funcs[SP][SM_AS][SC_N][DP][CPU_C] = _op_blend_p_mas_dp;
84 op_blend_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_C] = _op_blend_pas_mas_dp;
85 op_blend_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_C] = _op_blend_pan_mas_dp;
86
87 op_blend_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_p_mas_dpan;
88 op_blend_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_pas_mas_dpan;
89 op_blend_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_pan_mas_dpan;
90}
91#endif
92
93#ifdef BUILD_C
94static void
95_op_blend_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
96 s = MUL_SYM(m, s);
97 c = 256 - (s >> 24);
98 *d = s + MUL_256(c, *d);
99}
100
101static void
102_op_blend_pt_pan_mas_dp(DATA32 s, DATA8 m, DATA32 c __UNUSED__, DATA32 *d) {
103 *d = INTERP_256(m + 1, s, *d);
104}
105
106#define _op_blend_pt_pas_mas_dp _op_blend_pt_p_mas_dp
107
108#define _op_blend_pt_p_mas_dpan _op_blend_pt_p_mas_dp
109#define _op_blend_pt_pas_mas_dpan _op_blend_pt_pas_mas_dp
110#define _op_blend_pt_pan_mas_dpan _op_blend_pt_pan_mas_dp
111
112static void
113init_blend_pixel_mask_pt_funcs_c(void)
114{
115 op_blend_pt_funcs[SP][SM_AS][SC_N][DP][CPU_C] = _op_blend_pt_p_mas_dp;
116 op_blend_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_C] = _op_blend_pt_pas_mas_dp;
117 op_blend_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_C] = _op_blend_pt_pan_mas_dp;
118
119 op_blend_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_pt_p_mas_dpan;
120 op_blend_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_pt_pas_mas_dpan;
121 op_blend_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_pt_pan_mas_dpan;
122}
123#endif
124
125/*-----*/
126
127/* blend_rel pixel x mask -> dst */
128
129#ifdef BUILD_C
130static void
131_op_blend_rel_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
132 DATA32 *e;
133 int alpha;
134 UNROLL8_PLD_WHILE(d, l, e,
135 {
136 c = MUL_SYM(*m, *s);
137 alpha = 256 - (c >> 24);
138 *d = MUL_SYM(*d >> 24, c) + MUL_256(alpha, *d);
139 d++; m++; s++;
140 });
141}
142
143#define _op_blend_rel_pas_mas_dp _op_blend_rel_p_mas_dp
144#define _op_blend_rel_pan_mas_dp _op_blend_rel_p_mas_dp
145
146#define _op_blend_rel_p_mas_dpan _op_blend_p_mas_dpan
147#define _op_blend_rel_pas_mas_dpan _op_blend_pas_mas_dpan
148#define _op_blend_rel_pan_mas_dpan _op_blend_pan_mas_dpan
149
150static void
151init_blend_rel_pixel_mask_span_funcs_c(void)
152{
153 op_blend_rel_span_funcs[SP][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_p_mas_dp;
154 op_blend_rel_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_pas_mas_dp;
155 op_blend_rel_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_pan_mas_dp;
156
157 op_blend_rel_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_p_mas_dpan;
158 op_blend_rel_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_pas_mas_dpan;
159 op_blend_rel_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_pan_mas_dpan;
160}
161#endif
162
163#ifdef BUILD_C
164static void
165_op_blend_rel_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
166 s = MUL_SYM(m, s);
167 c = 256 - (s >> 24);
168 *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
169}
170
171#define _op_blend_rel_pt_pas_mas_dp _op_blend_rel_pt_p_mas_dp
172#define _op_blend_rel_pt_pan_mas_dp _op_blend_rel_pt_p_mas_dp
173
174#define _op_blend_rel_pt_p_mas_dpan _op_blend_pt_p_mas_dpan
175#define _op_blend_rel_pt_pas_mas_dpan _op_blend_pt_pas_mas_dpan
176#define _op_blend_rel_pt_pan_mas_dpan _op_blend_pt_pan_mas_dpan
177
178static void
179init_blend_rel_pixel_mask_pt_funcs_c(void)
180{
181 op_blend_rel_pt_funcs[SP][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_pt_p_mas_dp;
182 op_blend_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_pt_pas_mas_dp;
183 op_blend_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_C] = _op_blend_rel_pt_pan_mas_dp;
184
185 op_blend_rel_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_pt_p_mas_dpan;
186 op_blend_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_pt_pas_mas_dpan;
187 op_blend_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_C] = _op_blend_rel_pt_pan_mas_dpan;
188}
189#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_i386.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_i386.c
deleted file mode 100644
index 4fa50a9..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_i386.c
+++ /dev/null
@@ -1,157 +0,0 @@
1/* blend pixel x mask --> dst */
2
3#ifdef BUILD_MMX
4static void
5_op_blend_pas_mas_dp_mmx(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
6 DATA32 *e = d + l;
7 pxor_r2r(mm0, mm0);
8 MOV_A2R(ALPHA_256, mm6)
9 while (d < e) {
10 l = (*s >> 24);
11 switch(*m & l)
12 {
13 case 0:
14 break;
15 case 255:
16 *d = *s;
17 break;
18 default:
19 l = 1 + *m;
20 MOV_A2R(l, mm3)
21 MOV_P2R(*s, mm2, mm0)
22 MUL4_256_R2R(mm3, mm2)
23
24 MOV_RA2R(mm2, mm1)
25 movq_r2r(mm6, mm3);
26 psubw_r2r(mm1, mm3);
27
28 MOV_P2R(*d, mm1, mm0)
29 MUL4_256_R2R(mm3, mm1)
30
31 paddw_r2r(mm2, mm1);
32 MOV_R2P(mm1, *d, mm0)
33 break;
34 }
35 m++; s++; d++;
36 }
37}
38
39static void
40_op_blend_pan_mas_dp_mmx(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
41 DATA32 *e = d + l;
42 MOV_A2R(ALPHA_255, mm5)
43 pxor_r2r(mm0, mm0);
44 while (d < e) {
45 l = *m;
46 switch(l)
47 {
48 case 0:
49 break;
50 case 255:
51 *d = *s;
52 break;
53 default:
54 l++;
55 MOV_A2R(l, mm3)
56 MOV_P2R(*s, mm2, mm0)
57 MOV_P2R(*d, mm1, mm0)
58 INTERP_256_R2R(mm3, mm2, mm1, mm5)
59 MOV_R2P(mm1, *d, mm0)
60 break;
61 }
62 m++; s++; d++;
63 }
64}
65
66#define _op_blend_p_mas_dp_mmx _op_blend_pas_mas_dp_mmx
67
68#define _op_blend_p_mas_dpan_mmx _op_blend_p_mas_dp_mmx
69#define _op_blend_pan_mas_dpan_mmx _op_blend_pan_mas_dp_mmx
70#define _op_blend_pas_mas_dpan_mmx _op_blend_pas_mas_dp_mmx
71
72static void
73init_blend_pixel_mask_span_funcs_mmx(void)
74{
75 op_blend_span_funcs[SP][SM_AS][SC_N][DP][CPU_MMX] = _op_blend_p_mas_dp_mmx;
76 op_blend_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_MMX] = _op_blend_pas_mas_dp_mmx;
77 op_blend_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_MMX] = _op_blend_pan_mas_dp_mmx;
78
79 op_blend_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_p_mas_dpan_mmx;
80 op_blend_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_pas_mas_dpan_mmx;
81 op_blend_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_pan_mas_dpan_mmx;
82}
83#endif
84
85#ifdef BUILD_MMX
86static void
87_op_blend_pt_p_mas_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
88 c = m + 1;
89 MOV_A2R(c, mm3)
90 pxor_r2r(mm0, mm0);
91 MOV_A2R(ALPHA_256, mm6)
92 MOV_P2R(s, mm2, mm0)
93 MUL4_256_R2R(mm3, mm2)
94
95 MOV_RA2R(mm2, mm1)
96 psubw_r2r(mm1, mm6);
97
98 MOV_P2R(*d, mm1, mm0)
99 MUL4_256_R2R(mm6, mm1)
100
101 paddw_r2r(mm2, mm1);
102 MOV_R2P(mm1, *d, mm0)
103}
104
105#define _op_blend_pt_pan_mas_dp_mmx _op_blend_pt_p_mas_dp_mmx
106#define _op_blend_pt_pas_mas_dp_mmx _op_blend_pt_p_mas_dp_mmx
107
108#define _op_blend_pt_p_mas_dpan_mmx _op_blend_pt_p_mas_dp_mmx
109#define _op_blend_pt_pas_mas_dpan_mmx _op_blend_pt_pas_mas_dp_mmx
110#define _op_blend_pt_pan_mas_dpan_mmx _op_blend_pt_pan_mas_dp_mmx
111
112static void
113init_blend_pixel_mask_pt_funcs_mmx(void)
114{
115 op_blend_pt_funcs[SP][SM_AS][SC_N][DP][CPU_MMX] = _op_blend_pt_p_mas_dp_mmx;
116 op_blend_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_MMX] = _op_blend_pt_pas_mas_dp_mmx;
117 op_blend_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_MMX] = _op_blend_pt_pan_mas_dp_mmx;
118
119 op_blend_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_pt_p_mas_dpan_mmx;
120 op_blend_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_pt_pas_mas_dpan_mmx;
121 op_blend_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_pt_pan_mas_dpan_mmx;
122}
123#endif
124
125/*-----*/
126
127/* blend_rel pixel x mask -> dst */
128
129#ifdef BUILD_MMX
130
131#define _op_blend_rel_p_mas_dpan_mmx _op_blend_p_mas_dpan_mmx
132#define _op_blend_rel_pas_mas_dpan_mmx _op_blend_pas_mas_dpan_mmx
133#define _op_blend_rel_pan_mas_dpan_mmx _op_blend_pan_mas_dpan_mmx
134
135static void
136init_blend_rel_pixel_mask_span_funcs_mmx(void)
137{
138 op_blend_rel_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_rel_p_mas_dpan_mmx;
139 op_blend_rel_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_rel_pas_mas_dpan_mmx;
140 op_blend_rel_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_rel_pan_mas_dpan_mmx;
141}
142#endif
143
144#ifdef BUILD_MMX
145
146#define _op_blend_rel_pt_p_mas_dpan_mmx _op_blend_pt_p_mas_dpan_mmx
147#define _op_blend_rel_pt_pas_mas_dpan_mmx _op_blend_pt_pas_mas_dpan_mmx
148#define _op_blend_rel_pt_pan_mas_dpan_mmx _op_blend_pt_pan_mas_dpan_mmx
149
150static void
151init_blend_rel_pixel_mask_pt_funcs_mmx(void)
152{
153 op_blend_rel_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_rel_pt_p_mas_dpan_mmx;
154 op_blend_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_rel_pt_pas_mas_dpan_mmx;
155 op_blend_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_blend_rel_pt_pan_mas_dpan_mmx;
156}
157#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_neon.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_neon.c
deleted file mode 100644
index b252a67..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_neon.c
+++ /dev/null
@@ -1,129 +0,0 @@
1/* blend pixel x mask --> dst */
2
3#ifdef BUILD_NEON
4static void
5_op_blend_pas_mas_dp_neon(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
6 DATA32 *e;
7 int alpha;
8 UNROLL8_PLD_WHILE(d, l, e,
9 {
10 alpha = *m;
11 switch(alpha)
12 {
13 case 0:
14 break;
15 case 255:
16 *d = *s;
17 break;
18 default:
19 alpha++;
20 *d = INTERP_256(alpha, *s, *d);
21 break;
22 }
23 m++; s++; d++;
24 });
25}
26
27static void
28_op_blend_pan_mas_dp_neon(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
29 DATA32 *e;
30 int alpha;
31 UNROLL8_PLD_WHILE(d, l, e,
32 {
33 alpha = *m;
34 switch(alpha)
35 {
36 case 0:
37 break;
38 case 255:
39 *d = *s;
40 break;
41 default:
42 alpha++;
43 *d = INTERP_256(alpha, *s, *d);
44 break;
45 }
46 m++; s++; d++;
47 });
48}
49
50#define _op_blend_p_mas_dp_neon _op_blend_pas_mas_dp_neon
51
52#define _op_blend_p_mas_dpan_neon _op_blend_p_mas_dp_neon
53#define _op_blend_pan_mas_dpan_neon _op_blend_pan_mas_dp_neon
54#define _op_blend_pas_mas_dpan_neon _op_blend_pas_mas_dp_neon
55
56static void
57init_blend_pixel_mask_span_funcs_neon(void)
58{
59 op_blend_span_funcs[SP][SM_AS][SC_N][DP][CPU_NEON] = _op_blend_p_mas_dp_neon;
60 op_blend_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_NEON] = _op_blend_pas_mas_dp_neon;
61 op_blend_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_NEON] = _op_blend_pan_mas_dp_neon;
62
63 op_blend_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_p_mas_dpan_neon;
64 op_blend_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_pas_mas_dpan_neon;
65 op_blend_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_pan_mas_dpan_neon;
66}
67#endif
68
69#ifdef BUILD_NEON
70static void
71_op_blend_pt_p_mas_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
72 s = MUL_SYM(m, s);
73 c = 256 - (s >> 24);
74 *d = s + MUL_256(c, *d);
75}
76
77#define _op_blend_pt_pan_mas_dp_neon _op_blend_pt_p_mas_dp_neon
78#define _op_blend_pt_pas_mas_dp_neon _op_blend_pt_p_mas_dp_neon
79
80#define _op_blend_pt_p_mas_dpan_neon _op_blend_pt_p_mas_dp_neon
81#define _op_blend_pt_pas_mas_dpan_neon _op_blend_pt_pas_mas_dp_neon
82#define _op_blend_pt_pan_mas_dpan_neon _op_blend_pt_pan_mas_dp_neon
83
84static void
85init_blend_pixel_mask_pt_funcs_neon(void)
86{
87 op_blend_pt_funcs[SP][SM_AS][SC_N][DP][CPU_NEON] = _op_blend_pt_p_mas_dp_neon;
88 op_blend_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_NEON] = _op_blend_pt_pas_mas_dp_neon;
89 op_blend_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_NEON] = _op_blend_pt_pan_mas_dp_neon;
90
91 op_blend_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_pt_p_mas_dpan_neon;
92 op_blend_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_pt_pas_mas_dpan_neon;
93 op_blend_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_pt_pan_mas_dpan_neon;
94}
95#endif
96
97/*-----*/
98
99/* blend_rel pixel x mask -> dst */
100
101#ifdef BUILD_NEON
102
103#define _op_blend_rel_p_mas_dpan_neon _op_blend_p_mas_dpan_neon
104#define _op_blend_rel_pas_mas_dpan_neon _op_blend_pas_mas_dpan_neon
105#define _op_blend_rel_pan_mas_dpan_neon _op_blend_pan_mas_dpan_neon
106
107static void
108init_blend_rel_pixel_mask_span_funcs_neon(void)
109{
110 op_blend_rel_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_rel_p_mas_dpan_neon;
111 op_blend_rel_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_rel_pas_mas_dpan_neon;
112 op_blend_rel_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_rel_pan_mas_dpan_neon;
113}
114#endif
115
116#ifdef BUILD_NEON
117
118#define _op_blend_rel_pt_p_mas_dpan_neon _op_blend_pt_p_mas_dpan_neon
119#define _op_blend_rel_pt_pas_mas_dpan_neon _op_blend_pt_pas_mas_dpan_neon
120#define _op_blend_rel_pt_pan_mas_dpan_neon _op_blend_pt_pan_mas_dpan_neon
121
122static void
123init_blend_rel_pixel_mask_pt_funcs_neon(void)
124{
125 op_blend_rel_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_rel_pt_p_mas_dpan_neon;
126 op_blend_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_rel_pt_pas_mas_dpan_neon;
127 op_blend_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_blend_rel_pt_pan_mas_dpan_neon;
128}
129#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_sse3.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_sse3.c
deleted file mode 100644
index 617b9e2..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_mask_sse3.c
+++ /dev/null
@@ -1,300 +0,0 @@
1/* blend pixel x mask --> dst */
2
3#ifdef BUILD_SSE3
4
5static void
6_op_blend_p_mas_dp_sse3(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
7
8 int alpha;
9
10 LOOP_ALIGNED_U1_A48_SSE3(d, l,
11 { /* UOP */
12
13 alpha = *m;
14 c = MUL_SYM(alpha, *s);
15 alpha = 256 - (c >> 24);
16 *d = c + MUL_256(alpha, *d);
17 m++; s++; d++; l--;
18 },
19 { /* A4OP */
20
21 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
22 __m128i d0 = _mm_load_si128((__m128i *)d);
23 __m128i m0 = _mm_set_epi32(m[3], m[2], m[1], m[0]);
24
25 __m128i c0 = mul_sym_sse3(m0, s0);
26 __m128i a0 = sub4_alpha_sse3(c0);
27 __m128i r0 = mul_256_sse3(a0, d0);
28
29 r0 = _mm_add_epi32(r0, c0);
30
31 _mm_store_si128((__m128i *)d, r0);
32
33 m += 4; s += 4; d += 4; l -= 4;
34 },
35 { /* A8OP */
36
37 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
38 __m128i d0 = _mm_load_si128((__m128i *)d);
39 __m128i m0 = _mm_set_epi32(m[3], m[2], m[1], m[0]);
40
41 __m128i s1 = _mm_lddqu_si128((__m128i *)(s+4));
42 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
43 __m128i m1 = _mm_set_epi32(m[7], m[6], m[5], m[4]);
44
45 __m128i c0 = mul_sym_sse3(m0, s0);
46 __m128i c1 = mul_sym_sse3(m1, s1);
47
48 __m128i a0 = sub4_alpha_sse3(c0);
49 __m128i a1 = sub4_alpha_sse3(c1);
50
51 __m128i r0 = mul_256_sse3(a0, d0);
52 __m128i r1 = mul_256_sse3(a1, d1);
53
54 r0 = _mm_add_epi32(r0, c0);
55 r1 = _mm_add_epi32(r1, c1);
56
57 _mm_store_si128((__m128i *)d, r0);
58 _mm_store_si128((__m128i *)(d+4), r1);
59
60 m += 8; s += 8; d += 8; l -= 8;
61 })
62}
63
64static void
65_op_blend_pas_mas_dp_sse3(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
66
67 const __m128i ones = _mm_set_epi32(1, 1, 1, 1);
68 int alpha;
69
70 LOOP_ALIGNED_U1_A48_SSE3(d, l,
71 { /* UOP */
72
73 alpha = *m;
74 switch(alpha)
75 {
76 case 0:
77 break;
78 case 255:
79 *d = *s;
80 break;
81 default:
82 alpha++;
83 *d = INTERP_256(alpha, *s, *d);
84 break;
85 }
86 m++; s++; d++; l--;
87 },
88 { /*A4OP */
89
90 if ((m[3] | m[2] | m[1] | m[0]) == 0) {
91 m += 4; s += 4; d += 4; l -= 4;
92 continue;
93 }
94
95 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
96 __m128i d0 = _mm_load_si128((__m128i *)d);
97 __m128i m0 = _mm_set_epi32(m[3], m[2], m[1], m[0]);
98
99 __m128i zm0 = _mm_cmpeq_epi32(m0, _mm_setzero_si128());
100
101 m0 = _mm_add_epi32(m0, ones);
102
103 __m128i r0 = interp4_256_sse3(m0, s0, d0);
104
105 r0 = _mm_and_si128(~zm0, r0);
106 d0 = _mm_and_si128(zm0, d0);
107
108 d0 = _mm_add_epi32(r0, d0);
109
110 _mm_store_si128((__m128i *)d, d0);
111
112 m += 4; s += 4; d += 4; l -= 4;
113 },
114 { /* A8OP */
115
116 if ((m[7] | m[6] | m[5] | m[4] | m[3] | m[2] | m[1] | m[0]) == 0) {
117 m += 8; s += 8; d += 8; l -= 8;
118 continue;
119 }
120
121 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
122 __m128i d0 = _mm_load_si128((__m128i *)d);
123 __m128i m0 = _mm_set_epi32(m[3], m[2], m[1], m[0]);
124
125 __m128i s1 = _mm_lddqu_si128((__m128i *)(s+4));
126 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
127 __m128i m1 = _mm_set_epi32(m[7], m[6], m[5], m[4]);
128
129 __m128i zm0 = _mm_cmpeq_epi32(m0, _mm_setzero_si128());
130 __m128i zm1 = _mm_cmpeq_epi32(m1, _mm_setzero_si128());
131
132 m0 = _mm_add_epi32(m0, ones);
133 m1 = _mm_add_epi32(m1, ones);
134
135 __m128i r0 = interp4_256_sse3(m0, s0, d0);
136 __m128i r1 = interp4_256_sse3(m1, s1, d1);
137
138 r0 = _mm_and_si128(~zm0, r0);
139 d0 = _mm_and_si128(zm0, d0);
140
141 r1 = _mm_and_si128(~zm1, r1);
142 d1 = _mm_and_si128(zm1, d1);
143
144 d0 = _mm_add_epi32(d0, r0);
145 d1 = _mm_add_epi32(d1, r1);
146
147 _mm_store_si128((__m128i *)d, d0);
148 _mm_store_si128((__m128i *)(d+4), d1);
149
150 m += 8; s += 8; d += 8; l -= 8;
151 })
152}
153
154#define _op_blend_pan_mas_dp_sse3 _op_blend_pas_mas_dp_sse3
155
156#define _op_blend_p_mas_dpan_sse3 _op_blend_p_mas_dp_sse3
157#define _op_blend_pas_mas_dpan_sse3 _op_blend_pas_mas_dp_sse3
158#define _op_blend_pan_mas_dpan_sse3 _op_blend_pan_mas_dp_sse3
159
160static void
161init_blend_pixel_mask_span_funcs_sse3(void)
162{
163 op_blend_span_funcs[SP][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_p_mas_dp_sse3;
164 op_blend_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_pas_mas_dp_sse3;
165 op_blend_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_pan_mas_dp_sse3;
166
167 op_blend_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_p_mas_dpan_sse3;
168 op_blend_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_pas_mas_dpan_sse3;
169 op_blend_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_pan_mas_dpan_sse3;
170}
171
172#define _op_blend_pt_p_mas_dp_sse3 NULL
173#define _op_blend_pt_pan_mas_dp_sse3 NULL
174
175#define _op_blend_pt_pas_mas_dp_sse3 _op_blend_pt_p_mas_dp_sse3
176
177#define _op_blend_pt_p_mas_dpan_sse3 _op_blend_pt_p_mas_dp_sse3
178#define _op_blend_pt_pas_mas_dpan_sse3 _op_blend_pt_pas_mas_dp_sse3
179#define _op_blend_pt_pan_mas_dpan_sse3 _op_blend_pt_pan_mas_dp_sse3
180
181static void
182init_blend_pixel_mask_pt_funcs_sse3(void)
183{
184 op_blend_pt_funcs[SP][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_pt_p_mas_dp_sse3;
185 op_blend_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_pt_pas_mas_dp_sse3;
186 op_blend_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_pt_pan_mas_dp_sse3;
187
188 op_blend_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_pt_p_mas_dpan_sse3;
189 op_blend_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_pt_pas_mas_dpan_sse3;
190 op_blend_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_pt_pan_mas_dpan_sse3;
191}
192
193/*-----*/
194
195/* blend_rel pixel x mask -> dst */
196
197static void
198_op_blend_rel_p_mas_dp_sse3(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
199
200 int alpha;
201
202 LOOP_ALIGNED_U1_A48_SSE3(d, l,
203 { /* UOP */
204
205 c = MUL_SYM(*m, *s);
206 alpha = 256 - (c >> 24);
207 *d = MUL_SYM(*d >> 24, c) + MUL_256(alpha, *d);
208 d++; m++; s++; l--;
209 },
210 { /* A4OP */
211
212 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
213 __m128i m0 = _mm_set_epi32(m[3], m[2], m[1], m[0]);
214 __m128i d0 = _mm_load_si128((__m128i *)d);
215
216 __m128i c0 = mul_sym_sse3(m0, s0);
217 __m128i a0 = sub4_alpha_sse3(c0);
218
219 __m128i l0 = mul_sym_sse3(_mm_srli_epi32(d0, 24), c0);
220 __m128i r0 = mul_256_sse3(a0, d0);
221
222 d0 = _mm_add_epi32(l0, r0);
223
224 _mm_store_si128((__m128i *)d, d0);
225
226 d += 4; m += 4; s += 4; l -= 4;
227 },
228 { /* A8OP */
229
230 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
231 __m128i m0 = _mm_set_epi32(m[3], m[2], m[1], m[0]);
232 __m128i d0 = _mm_load_si128((__m128i *)d);
233
234 __m128i s1 = _mm_lddqu_si128((__m128i *)(s+4));
235 __m128i m1 = _mm_set_epi32(m[7], m[6], m[5], m[4]);
236 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
237
238 __m128i c0 = mul_sym_sse3(m0, s0);
239 __m128i c1 = mul_sym_sse3(m1, s1);
240
241 __m128i a0 = sub4_alpha_sse3(c0);
242 __m128i a1 = sub4_alpha_sse3(c1);
243
244 __m128i l0 = mul_sym_sse3(_mm_srli_epi32(d0, 24), c0);
245 __m128i r0 = mul_256_sse3(a0, d0);
246
247 __m128i l1 = mul_sym_sse3(_mm_srli_epi32(d1, 24), c1);
248 __m128i r1 = mul_256_sse3(a1, d1);
249
250 d0 = _mm_add_epi32(l0, r0);
251 d1 = _mm_add_epi32(l1, r1);
252
253 _mm_store_si128((__m128i *)d, d0);
254 _mm_store_si128((__m128i *)(d+4), d1);
255
256 d += 8; m += 8; s += 8; l -= 8;
257 })
258}
259
260#define _op_blend_rel_pas_mas_dp_sse3 _op_blend_rel_p_mas_dp_sse3
261#define _op_blend_rel_pan_mas_dp_sse3 _op_blend_rel_p_mas_dp_sse3
262
263#define _op_blend_rel_p_mas_dpan_sse3 _op_blend_p_mas_dpan_sse3
264#define _op_blend_rel_pas_mas_dpan_sse3 _op_blend_pas_mas_dpan_sse3
265#define _op_blend_rel_pan_mas_dpan_sse3 _op_blend_pan_mas_dpan_sse3
266
267static void
268init_blend_rel_pixel_mask_span_funcs_sse3(void)
269{
270 op_blend_rel_span_funcs[SP][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_rel_p_mas_dp_sse3;
271 op_blend_rel_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_rel_pas_mas_dp_sse3;
272 op_blend_rel_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_rel_pan_mas_dp_sse3;
273
274 op_blend_rel_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_rel_p_mas_dpan_sse3;
275 op_blend_rel_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_rel_pas_mas_dpan_sse3;
276 op_blend_rel_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_rel_pan_mas_dpan_sse3;
277}
278
279#define _op_blend_rel_pt_p_mas_dp_sse3 NULL
280
281#define _op_blend_rel_pt_pas_mas_dp_sse3 _op_blend_rel_pt_p_mas_dp_sse3
282#define _op_blend_rel_pt_pan_mas_dp_sse3 _op_blend_rel_pt_p_mas_dp_sse3
283
284#define _op_blend_rel_pt_p_mas_dpan_sse3 _op_blend_pt_p_mas_dpan_sse3
285#define _op_blend_rel_pt_pas_mas_dpan_sse3 _op_blend_pt_pas_mas_dpan_sse3
286#define _op_blend_rel_pt_pan_mas_dpan_sse3 _op_blend_pt_pan_mas_dpan_sse3
287
288static void
289init_blend_rel_pixel_mask_pt_funcs_sse3(void)
290{
291 op_blend_rel_pt_funcs[SP][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_rel_pt_p_mas_dp_sse3;
292 op_blend_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_rel_pt_pas_mas_dp_sse3;
293 op_blend_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_SSE3] = _op_blend_rel_pt_pan_mas_dp_sse3;
294
295 op_blend_rel_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_rel_pt_p_mas_dpan_sse3;
296 op_blend_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_rel_pt_pas_mas_dpan_sse3;
297 op_blend_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_SSE3] = _op_blend_rel_pt_pan_mas_dpan_sse3;
298}
299
300#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_neon.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_neon.c
deleted file mode 100644
index 1cb50b6..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_neon.c
+++ /dev/null
@@ -1,530 +0,0 @@
1/* blend pixel --> dst */
2
3#ifdef BUILD_NEON
4static void
5_op_blend_p_dp_neon(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
6#define AP "blend_p_dp_"
7 asm volatile (
8 ".fpu neon \n\t"
9 //** init
10 "vmov.i8 q8, $0x1 \n\t"
11
12 AP "loopchoose: \n\t"
13 // If aligned already - straight to octs
14 "andS %[tmp], %[d],$0x1f \n\t"
15 "beq "AP"octloops \n\t"
16
17 "andS %[tmp], %[d],$0xf \n\t"
18 "beq "AP"quadloops \n\t"
19
20 "andS %[tmp], %[d],$0x4 \n\t"
21 "beq "AP"dualloop \n\t"
22
23 // Only ever executes once, fall through to dual
24 AP "singleloop: \n\t"
25 "vld1.32 d0[0], [%[s]]! \n\t"
26 "vld1.32 d4[0], [%[d]] \n\t"
27
28 "vmvn.u8 d8, d0 \n\t"
29 "vshr.u32 d8, d8, #24 \n\t"
30
31 "vmul.u32 d8, d16, d8 \n\t"
32
33 "vmull.u8 q6, d4,d8 \n\t"
34 "vqrshrn.u16 d8, q6, #8 \n\t"
35 // Add to 's'
36 "vqadd.u8 q2, q4,q0 \n\t"
37
38 "vst1.32 d4[0], [%[d]] \n\t"
39 "add %[d], #4 \n\t"
40
41 // Can we go the fast path?
42 "andS %[tmp], %[d],$0x1f \n\t"
43 "beq "AP"octloops \n\t"
44
45 "andS %[tmp], %[d],$0x0f \n\t"
46 "beq "AP"quadloops \n\t"
47
48
49 AP "dualloop: \n\t"
50 "sub %[tmp], %[e], %[d] \n\t"
51 "cmp %[tmp], #32 \n\t"
52 "blt "AP"loopout \n\t"
53
54 AP "dualloopint: \n\t"
55 //** Dual Loop
56 "vldm %[s]!, {d0} \n\t"
57 "vldr d4, [%[d]] \n\t"
58
59 "vmvn.u8 d8, d0 \n\t"
60 "vshr.u32 d8, d8, #24 \n\t"
61
62 "vmul.u32 d8, d16, d8 \n\t"
63
64 "vmull.u8 q6, d4,d8 \n\t"
65 "vqrshrn.u16 d8, q6, #8 \n\t"
66 // Add to 's'
67 "vqadd.u8 d4, d8,d0 \n\t"
68 "vstr d4, [%[d]] \n\t"
69 "add %[d], #8 \n\t"
70
71 "ands %[tmp], %[d], $0x1f \n\t"
72 "beq "AP"octloops \n\t"
73
74 AP"quadloops: \n\t"
75 "sub %[tmp], %[e], %[d] \n\t"
76 "cmp %[tmp], #32 \n\t"
77 "blt "AP"loopout \n\t"
78
79 "vldm %[s]!, {d0,d1) \n\t"
80 "vldm %[d], {d4,d5} \n\t"
81
82
83 // Copy s.a into q2 (>> 24) & subtract from 255
84 "vmvn.u8 q4, q0 \n\t"
85 "vshr.u32 q4, q4,$0x18 \n\t"
86
87 // Multiply into all fields
88 "vmul.u32 q4, q8,q4 \n\t"
89
90 // a * d (clobbering 'd'/q7)
91 "vmull.u8 q6, d4,d8 \n\t"
92 "vmull.u8 q2, d5,d9 \n\t"
93
94 // Shift & narrow it
95 "vqrshrn.u16 d8, q6, #8 \n\t"
96 "vqrshrn.u16 d9, q2, #8 \n\t"
97
98 // Add to s
99 "vqadd.u8 q2, q4,q0 \n\t"
100
101 // Write it
102 "vstm %[d]!, {d4,d5} \n\t"
103
104 AP "octloops: \n\t"
105 "sub %[tmp], %[e], %[d] \n\t"
106 "cmp %[tmp], #32 \n\t"
107 "ble "AP"loopout \n\t"
108
109 "sub %[tmp],%[e],#64 \n\t"
110
111
112 AP "octloopint:\n\t"
113 //** Oct loop
114 "vldm %[s]!, {d0,d1,d2,d3) \n\t"
115 "vldm %[d], {d4,d5,d6,d7} \n\t"
116 "pld [%[s], #64] \n\t"
117
118
119 // Copy s.a into q2 (>> 24) & subtract from 255
120 "vmvn.u8 q4, q0 \n\t"
121 "vmvn.u8 q5, q1 \n\t"
122 "vshr.u32 q4, q4,$0x18 \n\t"
123 "vshr.u32 q5, q5,$0x18\n\t"
124
125 // Multiply into all fields
126 "vmul.u32 q4, q8,q4 \n\t"
127 "vmul.u32 q5, q8,q5 \n\t"
128
129
130 // a * d (clobbering 'd'/q7)
131 "vmull.u8 q6, d4,d8 \n\t"
132 "vmull.u8 q2, d5,d9 \n\t"
133 "vmull.u8 q7, d6,d10 \n\t"
134 "vmull.u8 q3, d7,d11 \n\t"
135
136 "cmp %[tmp], %[d]\n\t"
137
138 // Shift & narrow it
139 "vqrshrn.u16 d8, q6, #8 \n\t"
140 "vqrshrn.u16 d9, q2, #8 \n\t"
141 "vqrshrn.u16 d10, q7, #8 \n\t"
142 "vqrshrn.u16 d11, q3, #8 \n\t"
143
144
145 // Add to s
146 "vqadd.u8 q2, q4,q0 \n\t"
147 "vqadd.u8 q3, q5,q1 \n\t"
148
149 // Write it
150 "vstm %[d]!, {d4,d5,d6,d7} \n\t"
151
152 "bhi "AP"octloopint\n\t"
153
154 AP "loopout: \n\t"
155 "cmp %[d], %[e] \n\t"
156 "beq "AP"done \n\t"
157 "sub %[tmp],%[e], %[d] \n\t"
158 "cmp %[tmp],$0x04 \n\t"
159 "ble "AP"singleloop2 \n\t"
160
161 AP "dualloop2: \n\t"
162 "sub %[tmp],%[e],$0x7 \n\t"
163 AP "dualloop2int: \n\t"
164 //** Trailing double
165
166 "vldm %[s]!, {d0} \n\t"
167 "vldm %[d], {d4} \n\t"
168
169 "vmvn.u8 d8, d0 \n\t"
170 "vshr.u32 d8, d8, #24 \n\t"
171
172 "vmul.u32 d8, d16, d8 \n\t"
173
174 "vmull.u8 q6, d4,d8 \n\t"
175 "vqrshrn.u16 d8, q6, #8 \n\t"
176 // Add to 's'
177 "vqadd.u8 d4, d8,d0 \n\t"
178
179 "vstr.32 d4, [%[d]] \n\t"
180 "add %[d], #8 \n\t"
181
182 "cmp %[tmp], %[d] \n\t"
183 "bhi "AP"dualloop2int \n\t"
184
185 // Single ??
186 "cmp %[e], %[d] \n\t"
187 "beq "AP"done \n\t"
188
189 AP"singleloop2: \n\t"
190 "vld1.32 d0[0], [%[s]] \n\t"
191 "vld1.32 d4[0], [%[d]] \n\t"
192
193 "vmvn.u8 d8, d0 \n\t"
194 "vshr.u32 d8, d8, #24 \n\t"
195
196 "vmul.u32 d8, d8, d16 \n\t"
197
198 "vmull.u8 q6, d8,d4 \n\t"
199 "vqrshrn.u16 d8, q6, #8 \n\t"
200 // Add to 's'
201 "vqadd.u8 d0, d0,d8 \n\t"
202 "vst1.32 d0[0], [%[d]] \n\t"
203
204 //** Trailing single
205
206 AP"done:\n\t"
207//"sub %[tmp], %[e], #4 \n\t"
208//"vmov.i32 d0, $0xffff0000 \n\t"
209//"vst1.32 d0[0], [%[tmp]] \n\t"
210
211
212 : // output regs
213 // Input
214 : [e] "r" (d + l), [d] "r" (d), [s] "r" (s), [c] "r" (c),
215 [tmp] "r" (7)
216 : "q0", "q1", "q2","q3", "q4","q5","q6", "q7","q8","memory" // clobbered
217 );
218#undef AP
219
220}
221
222static void
223_op_blend_pas_dp_neon(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
224#define AP "blend_pas_dp_"
225 DATA32 *e = d + l,*tmp = e + 32,*pl=(void*)912;
226 asm volatile (
227 ".fpu neon \n\t"
228 "vmov.i8 q8, #1 \n\t"
229 AP"loopchoose: \n\t"
230 // If aliged - go as fast we can
231 "andS %[tmp], %[d], #31 \n\t"
232 "beq "AP"quadstart \n\t"
233
234 // See if we can at least do our double loop
235 "andS %[tmp], %[d], $0x7 \n\t"
236 "beq "AP"dualstart \n\t"
237
238 // Ugly single word version
239 AP "singleloop: \n\t"
240 "vld1.32 d0[0], [%[s]]! \n\t"
241 "vld1.32 d4[0], [%[d]] \n\t"
242
243 "vmvn.u8 d8, d0 \n\t"
244
245 "vshr.u32 d8, d8,$0x18 \n\t"
246
247 // Mulitply into all fields
248 "vmul.u32 d8, d8, d16 \n\t"
249
250 // Multiply out
251 "vmull.u8 q6, d8, d4 \n\t"
252
253 "vqrshrn.u16 d8, q6, #8 \n\t"
254
255 // Add to s
256 "vqadd.u8 d0, d0,d8 \n\t"
257 "vst1.32 d0[0], [%[d]]! \n\t"
258
259 AP"dualstart: \n\t"
260 "sub %[tmp], %[e], %[d] \n\t"
261 "cmp %[tmp], #32 \n\t"
262 "blt "AP"loopout \n\t"
263
264 // If aligned - go as fast we can
265 "andS %[tmp], %[d], #31 \n\t"
266 "beq "AP"quadstart \n\t"
267
268
269 AP"dualloop: \n\t"
270
271 "vldm %[s]!, {d0) \n\t"
272 "vldm %[d], {d4} \n\t"
273
274 // Subtract from 255 (ie negate) and extract alpha channel
275 "vmvn.u8 d8, d0 \n\t"
276 "vshr.u32 d8, d8,$0x18 \n\t"
277
278 // Mulitply into all fields
279 "vmul.u32 d8, d8, d16 \n\t"
280
281 // Multiply out
282 "vmull.u8 q6, d8, d4 \n\t"
283
284 "vqrshrn.u16 d8, q6, #8 \n\t"
285
286 // Add to s
287 "vqadd.u8 d0, d0,d8 \n\t"
288 "vstm %[d]!, {d0} \n\t"
289
290 "andS %[tmp], %[d], $0x1f \n\t"
291 "bne "AP"dualloop \n\t"
292
293
294 AP"quadstart: \n\t"
295 "sub %[tmp], %[e], %[d] \n\t"
296 "cmp %[tmp], #32 \n\t"
297 "blt "AP"loopout \n\t"
298
299 "sub %[tmp], %[e], #31 \n\t"
300
301 AP"quadloop:\n\t"
302 "vldm %[s]!, {d0,d1,d2,d3) \n\t"
303 "vldm %[d], {d4,d5,d6,d7} \n\t"
304
305 // Subtract from 255 (ie negate) and extract alpha channel
306 "vmvn.u8 q4, q0 \n\t"
307 "vmvn.u8 q5, q1 \n\t"
308 "vshr.u32 q4, q4,$0x18 \n\t"
309 "vshr.u32 q5, q5,$0x18 \n\t"
310
311 // Prepare to preload
312 "add %[pl], %[s], #32 \n\t"
313
314 // Mulitply into all fields
315 "vmul.u32 q4, q4, q8 \n\t"
316 "vmul.u32 q5, q5, q8 \n\t"
317 "pld [%[pl]] \n\t"
318
319 // Multiply out
320 "vmull.u8 q6, d8, d4 \n\t"
321 "vmull.u8 q7, d10, d6 \n\t"
322 "vmull.u8 q2, d9, d5 \n\t"
323 "vmull.u8 q3, d11, d7 \n\t"
324
325 "add %[pl], %[d], #32 \n\t"
326
327 "vqrshrn.u16 d8, q6, #8 \n\t"
328 "vqrshrn.u16 d10, q7, #8 \n\t"
329 "vqrshrn.u16 d9, q2, #8 \n\t"
330 "vqrshrn.u16 d11, q3, #8 \n\t"
331 "pld [%[pl]] \n\t"
332
333 "cmp %[tmp], %[pl] \n\t"
334 // Add to s
335 "vqadd.u8 q0, q0,q4 \n\t"
336 "vqadd.u8 q1, q1,q5 \n\t"
337
338 "vstm %[d]!, {d0,d1,d2,d3} \n\t"
339
340 "bhi "AP"quadloop \n\t"
341
342 AP "loopout: \n\t"
343 "cmp %[d], %[e] \n\t"
344 "beq "AP"done \n\t"
345
346 "sub %[tmp],%[e], %[d] \n\t"
347 "cmp %[tmp],$0x04 \n\t"
348 "beq "AP"singleloop2 \n\t"
349
350 "sub %[tmp],%[e],$0x7 \n\t"
351
352 AP"dualloop2: \n\t"
353 "vldm %[s]!, {d0) \n\t"
354 "vldm %[d], {d4} \n\t"
355
356 // Subtract from 255 (ie negate) and extract alpha channel
357 "vmvn.u8 d8, d0 \n\t"
358 "vshr.u32 d8, d8,$0x18 \n\t"
359
360 // Mulitply into all fields
361 "vmul.u32 d8, d8, d16 \n\t"
362
363 // Multiply out
364 "vmull.u8 q6, d8, d4 \n\t"
365
366 "vqrshrn.u16 d8, q6, #8 \n\t"
367
368 // Add to s
369 "vqadd.u8 d0, d0,d8 \n\t"
370
371 "vstm %[d]!, {d0} \n\t"
372 "cmp %[tmp], %[d] \n\t"
373
374 "bhi "AP"dualloop2 \n\t"
375
376 // Single ??
377 "cmp %[e], %[d] \n\t"
378 "beq "AP"done \n\t"
379
380 AP "singleloop2: \n\t"
381 "vld1.32 d0[0], [%[s]] \n\t"
382 "vld1.32 d4[0], [%[d]] \n\t"
383
384 "vmvn.u8 d8, d0 \n\t"
385
386 "vshr.u32 d8, d8,$0x18 \n\t"
387
388 // Mulitply into all fields
389 "vmul.u32 d8, d8, d16 \n\t"
390
391 // Multiply out
392 "vmull.u8 q6, d8, d4 \n\t"
393
394 "vqrshrn.u16 d8, q6, #8 \n\t"
395
396 // Add to s
397 "vqadd.u8 d0, d0,d8 \n\t"
398
399 "vst1.32 d0[0], [%[d]] \n\t"
400 AP "done:\n\t"
401
402
403 : /* Out */
404 : /* In */ [s] "r" (s), [e] "r" (e), [d] "r" (d), [tmp] "r" (tmp),
405 [pl] "r" (pl)
406 : /* Clobbered */
407 "q0","q1","q2","q3","q4","q5","q6","q7","q8","memory"
408 );
409#undef AP
410}
411
412#define _op_blend_pan_dp_neon NULL
413
414#define _op_blend_p_dpan_neon _op_blend_p_dp_neon
415#define _op_blend_pas_dpan_neon _op_blend_pas_dp_neon
416#define _op_blend_pan_dpan_neon _op_blend_pan_dp_neon
417
418static void
419init_blend_pixel_span_funcs_neon(void)
420{
421 op_blend_span_funcs[SP][SM_N][SC_N][DP][CPU_NEON] = _op_blend_p_dp_neon;
422 op_blend_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_NEON] = _op_blend_pas_dp_neon;
423 op_blend_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_NEON] = _op_blend_pan_dp_neon;
424
425 op_blend_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_NEON] = _op_blend_p_dpan_neon;
426 op_blend_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_NEON] = _op_blend_pas_dpan_neon;
427 op_blend_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_NEON] = _op_blend_pan_dpan_neon;
428}
429#endif
430
431#ifdef BUILD_NEON
432static void
433_op_blend_pt_p_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
434 c = 256 - (s >> 24);
435 *d = s + MUL_256(c, *d);
436}
437
438
439#define _op_blend_pt_pan_dp_neon NULL
440#define _op_blend_pt_pas_dp_neon _op_blend_pt_p_dp_neon
441
442#define _op_blend_pt_p_dpan_neon _op_blend_pt_p_dp_neon
443#define _op_blend_pt_pan_dpan_neon _op_blend_pt_pan_dp_neon
444#define _op_blend_pt_pas_dpan_neon _op_blend_pt_pas_dp_neon
445
446static void
447init_blend_pixel_pt_funcs_neon(void)
448{
449 op_blend_pt_funcs[SP][SM_N][SC_N][DP][CPU_NEON] = _op_blend_pt_p_dp_neon;
450 op_blend_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_NEON] = _op_blend_pt_pas_dp_neon;
451 op_blend_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_NEON] = _op_blend_pt_pan_dp_neon;
452
453 op_blend_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_NEON] = _op_blend_pt_p_dpan_neon;
454 op_blend_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_NEON] = _op_blend_pt_pas_dpan_neon;
455 op_blend_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_NEON] = _op_blend_pt_pan_dpan_neon;
456}
457#endif
458
459/*-----*/
460
461/* blend_rel pixel -> dst */
462
463#ifdef BUILD_NEON
464static void
465_op_blend_rel_p_dp_neon(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
466 DATA32 *e = d + l;
467 while (d < e) {
468 l = 256 - (*s >> 24);
469 c = 1 + (*d >> 24);
470 *d = MUL_256(c, *s) + MUL_256(l, *d);
471 d++;
472 s++;
473 }
474}
475
476static void
477_op_blend_rel_pan_dp_neon(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
478 DATA32 *e = d + l;
479 while (d < e) {
480 c = 1 + (*d >> 24);
481 *d++ = MUL_256(c, *s);
482 s++;
483 }
484}
485
486#define _op_blend_rel_pas_dp_neon _op_blend_rel_p_dp_neon
487
488#define _op_blend_rel_p_dpan_neon _op_blend_p_dpan_neon
489#define _op_blend_rel_pan_dpan_neon _op_blend_pan_dpan_neon
490#define _op_blend_rel_pas_dpan_neon _op_blend_pas_dpan_neon
491
492static void
493init_blend_rel_pixel_span_funcs_neon(void)
494{
495 op_blend_rel_span_funcs[SP][SM_N][SC_N][DP][CPU_NEON] = _op_blend_rel_p_dp_neon;
496 op_blend_rel_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_NEON] = _op_blend_rel_pas_dp_neon;
497 op_blend_rel_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_NEON] = _op_blend_rel_pan_dp_neon;
498
499 op_blend_rel_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_NEON] = _op_blend_rel_p_dpan_neon;
500 op_blend_rel_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_NEON] = _op_blend_rel_pas_dpan_neon;
501 op_blend_rel_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_NEON] = _op_blend_rel_pan_dpan_neon;
502}
503#endif
504
505#ifdef BUILD_NEON
506static void
507_op_blend_rel_pt_p_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
508 c = 256 - (s >> 24);
509 *d = MUL_SYM(*d >> 24, s) + MUL_256(c, *d);
510}
511
512#define _op_blend_rel_pt_pas_dp_neon _op_blend_rel_pt_p_dp_neon
513#define _op_blend_rel_pt_pan_dp_neon _op_blend_rel_pt_p_dp_neon
514
515#define _op_blend_rel_pt_p_dpan_neon _op_blend_pt_p_dpan_neon
516#define _op_blend_rel_pt_pas_dpan_neon _op_blend_pt_pas_dpan_neon
517#define _op_blend_rel_pt_pan_dpan_neon _op_blend_pt_pan_dpan_neon
518
519static void
520init_blend_rel_pixel_pt_funcs_neon(void)
521{
522 op_blend_rel_pt_funcs[SP][SM_N][SC_N][DP][CPU_NEON] = _op_blend_rel_pt_p_dp_neon;
523 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_NEON] = _op_blend_rel_pt_pas_dp_neon;
524 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_NEON] = _op_blend_rel_pt_pan_dp_neon;
525
526 op_blend_rel_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_NEON] = _op_blend_rel_pt_p_dpan_neon;
527 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_NEON] = _op_blend_rel_pt_pas_dpan_neon;
528 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_NEON] = _op_blend_rel_pt_pan_dpan_neon;
529}
530#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_sse3.c b/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_sse3.c
deleted file mode 100644
index 69c597c..0000000
--- a/libraries/evas/src/lib/engines/common/evas_op_blend/op_blend_pixel_sse3.c
+++ /dev/null
@@ -1,315 +0,0 @@
1/* blend pixel --> dst */
2
3#ifdef BUILD_SSE3
4
5static void
6_op_blend_p_dp_sse3(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
7
8 LOOP_ALIGNED_U1_A48_SSE3(d, l,
9 { /* UOP */
10
11 int alpha = 256 - (*s >> 24);
12 *d = *s + MUL_256(alpha, *d);
13 s++; d++; l--;
14 },
15 { /* A4OP */
16
17 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
18 __m128i d0 = _mm_load_si128((__m128i *)d);
19
20 __m128i a0 = sub4_alpha_sse3(s0);
21 __m128i mul0 = mul_256_sse3(a0, d0);
22 d0 = _mm_add_epi32(mul0, s0);
23
24 _mm_store_si128((__m128i *)d, d0);
25
26 s += 4; d += 4; l -= 4;
27 },
28 { /* A8OP */
29
30 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
31 __m128i d0 = _mm_load_si128((__m128i *)d);
32
33 __m128i s1 = _mm_lddqu_si128((__m128i *)(s+4));
34 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
35
36 __m128i a0 = sub4_alpha_sse3(s0);
37 __m128i a1 = sub4_alpha_sse3(s1);
38
39 __m128i mul0 = mul_256_sse3(a0, d0);
40 __m128i mul1 = mul_256_sse3(a1, d1);
41
42 d0 = _mm_add_epi32(mul0, s0);
43 d1 = _mm_add_epi32(mul1, s1);
44
45 _mm_store_si128((__m128i *)d, d0);
46 _mm_store_si128((__m128i *)(d+4), d1);
47
48 s += 8; d += 8; l -= 8;
49 })
50}
51
52static void
53_op_blend_pas_dp_sse3(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
54
55 int alpha;
56
57 const __m128i zero = _mm_setzero_si128();
58
59 LOOP_ALIGNED_U1_A48_SSE3(d, l,
60 { /* UOP */
61 switch (*s & 0xff000000)
62 {
63 case 0:
64 break;
65 case 0xff000000:
66 *d = *s;
67 break;
68 default:
69 alpha = 256 - (*s >> 24);
70 *d = *s + MUL_256(alpha, *d);
71 break;
72 }
73 s++; d++; l--;
74 },
75 { /* A4OP */
76
77 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
78 __m128i d0 = _mm_load_si128((__m128i *)d);
79
80 __m128i a0 = sub4_alpha_sse3(s0);
81 __m128i mul0 = mul_256_sse3(a0, d0);
82
83 mul0 = _mm_add_epi32(s0, mul0);
84
85 __m128i zmask0 = _mm_cmpeq_epi32(_mm_srli_epi32(s0, 24), zero);
86 __m128i imask0 = ~zmask0;
87
88 mul0 = _mm_and_si128(imask0, mul0);
89 d0 = _mm_and_si128(zmask0, d0);
90
91 d0 = _mm_add_epi32(mul0, d0);
92
93 _mm_store_si128((__m128i *)d, d0);
94
95 s += 4; d += 4; l -= 4;
96 },
97 { /* A8OP */
98
99 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
100 __m128i d0 = _mm_load_si128((__m128i *)d);
101
102 __m128i s1 = _mm_lddqu_si128((__m128i *)(s+4));
103 __m128i d1 = _mm_load_si128((__m128i *)(d+4));
104
105 __m128i a0 = sub4_alpha_sse3(s0);
106 __m128i a1 = sub4_alpha_sse3(s1);
107
108 __m128i mul0 = mul_256_sse3(a0, d0);
109 __m128i mul1 = mul_256_sse3(a1, d1);
110
111 mul0 = _mm_add_epi32(s0, mul0);
112 mul1 = _mm_add_epi32(s1, mul1);
113
114 __m128i zmask0 = _mm_cmpeq_epi32(_mm_srli_epi32(s0, 24), zero);
115 __m128i zmask1 = _mm_cmpeq_epi32(_mm_srli_epi32(s1, 24), zero);
116
117 __m128i imask0 = ~zmask0;
118 __m128i imask1 = ~zmask1;
119
120 mul0 = _mm_and_si128(imask0, mul0);
121 d0 = _mm_and_si128(zmask0, d0);
122
123 mul1 = _mm_and_si128(imask1, mul1);
124 d1 = _mm_and_si128(zmask1, d1);
125
126 d0 = _mm_add_epi32(mul0, d0);
127 d1 = _mm_add_epi32(mul1, d1);
128
129 _mm_store_si128((__m128i *)d, d0);
130 _mm_store_si128((__m128i *)(d+4), d1);
131
132 s += 8; d += 8; l -= 8;
133 })
134}
135
136#define _op_blend_pan_dp_sse3 NULL
137
138#define _op_blend_p_dpan_sse3 _op_blend_p_dp_sse3
139#define _op_blend_pas_dpan_sse3 _op_blend_pas_dp_sse3
140#define _op_blend_pan_dpan_sse3 _op_blend_pan_dp_sse3
141
142static void
143init_blend_pixel_span_funcs_sse3(void)
144{
145 op_blend_span_funcs[SP][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_p_dp_sse3;
146 op_blend_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_pas_dp_sse3;
147 op_blend_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_pan_dp_sse3;
148
149// FIXME: BUGGY BUGGY Core i5 750 (32bit), 4.5.2 (Ubuntu/Linaro 4.5.2-8ubuntu4), ello (text and rectangle)
150// op_blend_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_p_dpan_sse3;
151 op_blend_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_pas_dpan_sse3;
152 op_blend_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_pan_dpan_sse3;
153}
154
155#define _op_blend_pt_p_dp_sse3 NULL
156
157#define _op_blend_pt_pas_dp_sse3 _op_blend_pt_p_dp_sse3
158#define _op_blend_pt_pan_dp_sse3 NULL
159
160#define _op_blend_pt_p_dpan_sse3 _op_blend_pt_p_dp_sse3
161#define _op_blend_pt_pan_dpan_sse3 _op_blend_pt_pan_dp_sse3
162#define _op_blend_pt_pas_dpan_sse3 _op_blend_pt_pas_dp_sse3
163
164static void
165init_blend_pixel_pt_funcs_sse3(void)
166{
167 op_blend_pt_funcs[SP][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_pt_p_dp_sse3;
168 op_blend_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_pt_pas_dp_sse3;
169 op_blend_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_pt_pan_dp_sse3;
170
171 op_blend_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_pt_p_dpan_sse3;
172 op_blend_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_pt_pas_dpan_sse3;
173 op_blend_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_pt_pan_dpan_sse3;
174}
175
176/*-----*/
177
178/* blend_rel pixel -> dst */
179
180static void
181_op_blend_rel_p_dp_sse3(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
182
183 const __m128i ones = _mm_set_epi32(1, 1, 1, 1);
184
185 LOOP_ALIGNED_U1_A48_SSE3(d, l,
186 { /* UOP */
187
188 int alpha = 256 - (*s >> 24);
189 c = 1 + (*d >> 24);
190 *d = MUL_256(c, *s) + MUL_256(alpha, *d);
191 d++; s++; l--;
192 },
193 { /*A4OP */
194
195 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
196 __m128i d0 = _mm_load_si128((__m128i *)d);
197
198 __m128i c0 = _mm_add_epi32(_mm_srli_epi32(d0, 24), ones);
199 __m128i a0 = sub4_alpha_sse3(s0);
200
201 d0 = _mm_add_epi32(mul_256_sse3(c0, s0), mul_256_sse3(a0, d0));
202
203 _mm_store_si128((__m128i *)d, d0);
204
205 d += 4; s += 4; l -= 4;
206 },
207 { /* A8OP */
208
209 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
210 __m128i d0 = _mm_load_si128 ((__m128i *)d);
211
212 __m128i s1 = _mm_lddqu_si128((__m128i *)(s+4));
213 __m128i d1 = _mm_load_si128 ((__m128i *)(d+4));
214
215 __m128i c0 = _mm_add_epi32(_mm_srli_epi32(d0, 24), ones);
216 __m128i c1 = _mm_add_epi32(_mm_srli_epi32(d1, 24), ones);
217
218 __m128i a0 = sub4_alpha_sse3(s0);
219 __m128i a1 = sub4_alpha_sse3(s1);
220
221 d0 = _mm_add_epi32(mul_256_sse3(c0, s0), mul_256_sse3(a0, d0));
222 d1 = _mm_add_epi32(mul_256_sse3(c1, s1), mul_256_sse3(a1, d1));
223
224 _mm_store_si128((__m128i *)d, d0);
225 _mm_store_si128((__m128i *)(d+4), d1);
226
227 d += 8; s += 8; l -= 8;
228 })
229}
230
231static void
232_op_blend_rel_pan_dp_sse3(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
233
234 const __m128i ones = _mm_set_epi32(1, 1, 1, 1);
235
236 LOOP_ALIGNED_U1_A48_SSE3(d, l,
237 { /* UOP */
238
239 c = 1 + (*d >> 24);
240 *d++ = MUL_256(c, *s);
241 s++; l--;
242 },
243 { /* A4OP */
244
245 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
246 __m128i d0 = _mm_load_si128((__m128i *)d);
247
248 __m128i c0 = _mm_add_epi32(_mm_srli_epi32(d0, 24), ones);
249 d0 = mul_256_sse3(c0, s0);
250
251 _mm_store_si128((__m128i *)d, d0);
252
253 d += 4; s += 4; l -= 4;
254 },
255 { /* A8OP */
256
257 __m128i s0 = _mm_lddqu_si128((__m128i *)s);
258 __m128i d0 = _mm_load_si128 ((__m128i *)d);
259
260 __m128i s1 = _mm_lddqu_si128((__m128i *)(s+4));
261 __m128i d1 = _mm_load_si128 ((__m128i *)(d+4));
262
263 __m128i c0 = _mm_add_epi32(_mm_srli_epi32(d0, 24), ones);
264 __m128i c1 = _mm_add_epi32(_mm_srli_epi32(d1, 24), ones);
265
266 d0 = mul_256_sse3(c0, s0);
267 d1 = mul_256_sse3(c1, s1);
268
269 _mm_store_si128((__m128i *)d, d0);
270 _mm_store_si128((__m128i *)(d+4), d1);
271
272 d += 8; s += 8; l -= 8;
273 })
274}
275
276#define _op_blend_rel_pas_dp_sse3 _op_blend_rel_p_dp_sse3
277
278#define _op_blend_rel_p_dpan_sse3 _op_blend_p_dpan_sse3
279#define _op_blend_rel_pan_dpan_sse3 _op_blend_pan_dpan_sse3
280#define _op_blend_rel_pas_dpan_sse3 _op_blend_pas_dpan_sse3
281
282static void
283init_blend_rel_pixel_span_funcs_sse3(void)
284{
285 op_blend_rel_span_funcs[SP][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_rel_p_dp_sse3;
286 op_blend_rel_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_rel_pas_dp_sse3;
287 op_blend_rel_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_rel_pan_dp_sse3;
288
289 op_blend_rel_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_rel_p_dpan_sse3;
290 op_blend_rel_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_rel_pas_dpan_sse3;
291 op_blend_rel_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_rel_pan_dpan_sse3;
292}
293
294#define _op_blend_rel_pt_p_dp_sse3 NULL
295#define _op_blend_rel_pt_pan_dp_sse3 NULL
296
297#define _op_blend_rel_pt_pas_dp_sse3 _op_blend_rel_pt_p_dp_sse3
298
299#define _op_blend_rel_pt_p_dpan_sse3 _op_blend_pt_p_dpan_sse3
300#define _op_blend_rel_pt_pan_dpan_sse3 _op_blend_pt_pan_dpan_sse3
301#define _op_blend_rel_pt_pas_dpan_sse3 _op_blend_pt_pas_dpan_sse3
302
303static void
304init_blend_rel_pixel_pt_funcs_sse3(void)
305{
306 op_blend_rel_pt_funcs[SP][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_rel_pt_p_dp_sse3;
307 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_rel_pt_pas_dp_sse3;
308 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_SSE3] = _op_blend_rel_pt_pan_dp_sse3;
309
310 op_blend_rel_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_rel_pt_p_dpan_sse3;
311 op_blend_rel_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_rel_pt_pas_dpan_sse3;
312 op_blend_rel_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_SSE3] = _op_blend_rel_pt_pan_dpan_sse3;
313}
314
315#endif