aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/libraries/evas/src/lib/engines/common/evas_op_copy
diff options
context:
space:
mode:
authorDavid Walter Seikel2012-01-04 18:41:13 +1000
committerDavid Walter Seikel2012-01-04 18:41:13 +1000
commitdd7595a3475407a7fa96a97393bae8c5220e8762 (patch)
treee341e911d7eb911a51684a7412ef7f7c7605d28e /libraries/evas/src/lib/engines/common/evas_op_copy
parentAdd the skeleton. (diff)
downloadSledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.zip
SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.gz
SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.bz2
SledjHamr-dd7595a3475407a7fa96a97393bae8c5220e8762.tar.xz
Add the base Enlightenment Foundation Libraries - eina, eet, evas, ecore, embryo, and edje.
Note that embryo wont be used, but I'm not sure yet if you can build edje without it.
Diffstat (limited to 'libraries/evas/src/lib/engines/common/evas_op_copy')
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/Makefile.am18
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/Makefile.in548
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_color_.c138
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_color_i386.c150
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_color_neon.c212
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_.c170
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_i386.c193
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_neon.c170
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_.c117
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_.c236
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_i386.c255
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c238
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_i386.c131
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_.c150
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_i386.c176
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c151
-rw-r--r--libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_neon.c158
17 files changed, 3211 insertions, 0 deletions
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/Makefile.am b/libraries/evas/src/lib/engines/common/evas_op_copy/Makefile.am
new file mode 100644
index 0000000..599e98d
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/Makefile.am
@@ -0,0 +1,18 @@
1MAINTAINERCLEANFILES = Makefile.in
2
3EXTRA_DIST = \
4op_copy_color_.c \
5op_copy_color_i386.c \
6op_copy_color_neon.c \
7op_copy_mask_color_.c \
8op_copy_mask_color_i386.c \
9op_copy_mask_color_neon.c \
10op_copy_pixel_.c \
11op_copy_pixel_neon.c \
12op_copy_pixel_color_.c \
13op_copy_pixel_color_i386.c \
14op_copy_pixel_color_neon.c \
15op_copy_pixel_i386.c \
16op_copy_pixel_mask_.c \
17op_copy_pixel_mask_i386.c \
18op_copy_pixel_mask_neon.c
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/Makefile.in b/libraries/evas/src/lib/engines/common/evas_op_copy/Makefile.in
new file mode 100644
index 0000000..52658a4
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/Makefile.in
@@ -0,0 +1,548 @@
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@
17VPATH = @srcdir@
18pkgdatadir = $(datadir)/@PACKAGE@
19pkgincludedir = $(includedir)/@PACKAGE@
20pkglibdir = $(libdir)/@PACKAGE@
21pkglibexecdir = $(libexecdir)/@PACKAGE@
22am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
23install_sh_DATA = $(install_sh) -c -m 644
24install_sh_PROGRAM = $(install_sh) -c
25install_sh_SCRIPT = $(install_sh) -c
26INSTALL_HEADER = $(INSTALL_DATA)
27transform = $(program_transform_name)
28NORMAL_INSTALL = :
29PRE_INSTALL = :
30POST_INSTALL = :
31NORMAL_UNINSTALL = :
32PRE_UNINSTALL = :
33POST_UNINSTALL = :
34build_triplet = @build@
35host_triplet = @host@
36subdir = src/lib/engines/common/evas_op_copy
37DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
38ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
39am__aclocal_m4_deps = $(top_srcdir)/m4/efl_attribute.m4 \
40 $(top_srcdir)/m4/efl_coverage.m4 \
41 $(top_srcdir)/m4/efl_doxygen.m4 \
42 $(top_srcdir)/m4/efl_fnmatch.m4 \
43 $(top_srcdir)/m4/efl_path_max.m4 $(top_srcdir)/m4/efl_tests.m4 \
44 $(top_srcdir)/m4/evas_check_engine.m4 \
45 $(top_srcdir)/m4/evas_check_loader.m4 \
46 $(top_srcdir)/m4/evas_converter.m4 \
47 $(top_srcdir)/m4/evas_dither.m4 \
48 $(top_srcdir)/m4/evas_scaler.m4 $(top_srcdir)/m4/libtool.m4 \
49 $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
50 $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
51 $(top_srcdir)/configure.ac
52am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
53 $(ACLOCAL_M4)
54mkinstalldirs = $(install_sh) -d
55CONFIG_HEADER = $(top_builddir)/config.h
56CONFIG_CLEAN_FILES =
57CONFIG_CLEAN_VPATH_FILES =
58AM_V_GEN = $(am__v_GEN_$(V))
59am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
60am__v_GEN_0 = @echo " GEN " $@;
61AM_V_at = $(am__v_at_$(V))
62am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
63am__v_at_0 = @
64SOURCES =
65DIST_SOURCES =
66DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
67ACLOCAL = @ACLOCAL@
68ALLOCA = @ALLOCA@
69AMTAR = @AMTAR@
70AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
71AR = @AR@
72AS = @AS@
73AUTOCONF = @AUTOCONF@
74AUTOHEADER = @AUTOHEADER@
75AUTOMAKE = @AUTOMAKE@
76AWK = @AWK@
77CC = @CC@
78CCDEPMODE = @CCDEPMODE@
79CFLAGS = @CFLAGS@
80CHECK_CFLAGS = @CHECK_CFLAGS@
81CHECK_LIBS = @CHECK_LIBS@
82CPP = @CPP@
83CPPFLAGS = @CPPFLAGS@
84CXX = @CXX@
85CXXCPP = @CXXCPP@
86CXXDEPMODE = @CXXDEPMODE@
87CXXFLAGS = @CXXFLAGS@
88CYGPATH_W = @CYGPATH_W@
89DEFS = @DEFS@
90DEPDIR = @DEPDIR@
91DIRECTFB_CFLAGS = @DIRECTFB_CFLAGS@
92DIRECTFB_LIBS = @DIRECTFB_LIBS@
93DLLTOOL = @DLLTOOL@
94DSYMUTIL = @DSYMUTIL@
95DUMPBIN = @DUMPBIN@
96ECHO_C = @ECHO_C@
97ECHO_N = @ECHO_N@
98ECHO_T = @ECHO_T@
99ECORE_EVAS_CFLAGS = @ECORE_EVAS_CFLAGS@
100ECORE_EVAS_LIBS = @ECORE_EVAS_LIBS@
101EDB_CFLAGS = @EDB_CFLAGS@
102EDB_LIBS = @EDB_LIBS@
103EDJE_CFLAGS = @EDJE_CFLAGS@
104EDJE_LIBS = @EDJE_LIBS@
105EET_CFLAGS = @EET_CFLAGS@
106EET_LIBS = @EET_LIBS@
107EFL_COVERAGE_CFLAGS = @EFL_COVERAGE_CFLAGS@
108EFL_COVERAGE_LIBS = @EFL_COVERAGE_LIBS@
109EFL_FNMATCH_LIBS = @EFL_FNMATCH_LIBS@
110EGREP = @EGREP@
111EINA_CFLAGS = @EINA_CFLAGS@
112EINA_LIBS = @EINA_LIBS@
113EVAS_CFLAGS = @EVAS_CFLAGS@
114EVAS_LIBS = @EVAS_LIBS@
115EVAS_SSE3_CFLAGS = @EVAS_SSE3_CFLAGS@
116EVIL_CFLAGS = @EVIL_CFLAGS@
117EVIL_LIBS = @EVIL_LIBS@
118EXEEXT = @EXEEXT@
119FGREP = @FGREP@
120FONTCONFIG_CFLAGS = @FONTCONFIG_CFLAGS@
121FONTCONFIG_LIBS = @FONTCONFIG_LIBS@
122FREETYPE_CFLAGS = @FREETYPE_CFLAGS@
123FREETYPE_LIBS = @FREETYPE_LIBS@
124FRIBIDI_CFLAGS = @FRIBIDI_CFLAGS@
125FRIBIDI_LIBS = @FRIBIDI_LIBS@
126GL_EET_CFLAGS = @GL_EET_CFLAGS@
127GL_EET_LIBS = @GL_EET_LIBS@
128GREP = @GREP@
129HARFBUZZ_CFLAGS = @HARFBUZZ_CFLAGS@
130HARFBUZZ_LIBS = @HARFBUZZ_LIBS@
131INSTALL = @INSTALL@
132INSTALL_DATA = @INSTALL_DATA@
133INSTALL_PROGRAM = @INSTALL_PROGRAM@
134INSTALL_SCRIPT = @INSTALL_SCRIPT@
135INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
136LD = @LD@
137LDFLAGS = @LDFLAGS@
138LIBOBJS = @LIBOBJS@
139LIBS = @LIBS@
140LIBTOOL = @LIBTOOL@
141LINEBREAK_CFLAGS = @LINEBREAK_CFLAGS@
142LINEBREAK_LIBS = @LINEBREAK_LIBS@
143LIPO = @LIPO@
144LN_S = @LN_S@
145LTLIBOBJS = @LTLIBOBJS@
146MAKEINFO = @MAKEINFO@
147MKDIR_P = @MKDIR_P@
148MODULE_ARCH = @MODULE_ARCH@
149NM = @NM@
150NMEDIT = @NMEDIT@
151OBJC = @OBJC@
152OBJCDEPMODE = @OBJCDEPMODE@
153OBJCFLAGS = @OBJCFLAGS@
154OBJDUMP = @OBJDUMP@
155OBJEXT = @OBJEXT@
156OTOOL = @OTOOL@
157OTOOL64 = @OTOOL64@
158PACKAGE = @PACKAGE@
159PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
160PACKAGE_NAME = @PACKAGE_NAME@
161PACKAGE_STRING = @PACKAGE_STRING@
162PACKAGE_TARNAME = @PACKAGE_TARNAME@
163PACKAGE_URL = @PACKAGE_URL@
164PACKAGE_VERSION = @PACKAGE_VERSION@
165PATH_SEPARATOR = @PATH_SEPARATOR@
166PIXMAN_CFLAGS = @PIXMAN_CFLAGS@
167PIXMAN_LIBS = @PIXMAN_LIBS@
168PKG_CONFIG = @PKG_CONFIG@
169PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
170PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
171PNG_CFLAGS = @PNG_CFLAGS@
172PNG_LIBS = @PNG_LIBS@
173RANLIB = @RANLIB@
174SDL_CFLAGS = @SDL_CFLAGS@
175SDL_LIBS = @SDL_LIBS@
176SED = @SED@
177SET_MAKE = @SET_MAKE@
178SHELL = @SHELL@
179SHM_OPEN_LINK = @SHM_OPEN_LINK@
180STRIP = @STRIP@
181SVG_CFLAGS = @SVG_CFLAGS@
182SVG_LIBS = @SVG_LIBS@
183VALGRIND_CFLAGS = @VALGRIND_CFLAGS@
184VALGRIND_LIBS = @VALGRIND_LIBS@
185VERSION = @VERSION@
186VMAJ = @VMAJ@
187WIN32_CFLAGS = @WIN32_CFLAGS@
188WIN32_CPPFLAGS = @WIN32_CPPFLAGS@
189XCB_CFLAGS = @XCB_CFLAGS@
190XCB_GL_CFLAGS = @XCB_GL_CFLAGS@
191XCB_GL_LIBS = @XCB_GL_LIBS@
192XCB_LIBS = @XCB_LIBS@
193XEXT_CFLAGS = @XEXT_CFLAGS@
194XEXT_LIBS = @XEXT_LIBS@
195XMKMF = @XMKMF@
196X_CFLAGS = @X_CFLAGS@
197X_EXTRA_LIBS = @X_EXTRA_LIBS@
198X_LIBS = @X_LIBS@
199X_PRE_LIBS = @X_PRE_LIBS@
200abs_builddir = @abs_builddir@
201abs_srcdir = @abs_srcdir@
202abs_top_builddir = @abs_top_builddir@
203abs_top_srcdir = @abs_top_srcdir@
204ac_ct_CC = @ac_ct_CC@
205ac_ct_CXX = @ac_ct_CXX@
206ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
207ac_ct_OBJC = @ac_ct_OBJC@
208altivec_cflags = @altivec_cflags@
209am__include = @am__include@
210am__leading_dot = @am__leading_dot@
211am__quote = @am__quote@
212am__tar = @am__tar@
213am__untar = @am__untar@
214bindir = @bindir@
215build = @build@
216build_alias = @build_alias@
217build_cpu = @build_cpu@
218build_os = @build_os@
219build_vendor = @build_vendor@
220builddir = @builddir@
221datadir = @datadir@
222datarootdir = @datarootdir@
223dlopen_libs = @dlopen_libs@
224docdir = @docdir@
225dvidir = @dvidir@
226edje_cc = @edje_cc@
227efl_doxygen = @efl_doxygen@
228efl_have_doxygen = @efl_have_doxygen@
229evas_engine_buffer_cflags = @evas_engine_buffer_cflags@
230evas_engine_buffer_libs = @evas_engine_buffer_libs@
231evas_engine_direct3d_cflags = @evas_engine_direct3d_cflags@
232evas_engine_direct3d_libs = @evas_engine_direct3d_libs@
233evas_engine_directfb_cflags = @evas_engine_directfb_cflags@
234evas_engine_directfb_libs = @evas_engine_directfb_libs@
235evas_engine_fb_cflags = @evas_engine_fb_cflags@
236evas_engine_fb_libs = @evas_engine_fb_libs@
237evas_engine_gl_cocoa_cflags = @evas_engine_gl_cocoa_cflags@
238evas_engine_gl_cocoa_libs = @evas_engine_gl_cocoa_libs@
239evas_engine_gl_common_libs = @evas_engine_gl_common_libs@
240evas_engine_gl_sdl_cflags = @evas_engine_gl_sdl_cflags@
241evas_engine_gl_sdl_libs = @evas_engine_gl_sdl_libs@
242evas_engine_gl_xcb_cflags = @evas_engine_gl_xcb_cflags@
243evas_engine_gl_xcb_libs = @evas_engine_gl_xcb_libs@
244evas_engine_gl_xlib_cflags = @evas_engine_gl_xlib_cflags@
245evas_engine_gl_xlib_libs = @evas_engine_gl_xlib_libs@
246evas_engine_psl1ght_cflags = @evas_engine_psl1ght_cflags@
247evas_engine_psl1ght_libs = @evas_engine_psl1ght_libs@
248evas_engine_software_16_ddraw_cflags = @evas_engine_software_16_ddraw_cflags@
249evas_engine_software_16_ddraw_libs = @evas_engine_software_16_ddraw_libs@
250evas_engine_software_16_sdl_cflags = @evas_engine_software_16_sdl_cflags@
251evas_engine_software_16_sdl_libs = @evas_engine_software_16_sdl_libs@
252evas_engine_software_16_wince_cflags = @evas_engine_software_16_wince_cflags@
253evas_engine_software_16_wince_libs = @evas_engine_software_16_wince_libs@
254evas_engine_software_16_x11_cflags = @evas_engine_software_16_x11_cflags@
255evas_engine_software_16_x11_libs = @evas_engine_software_16_x11_libs@
256evas_engine_software_8_x11_cflags = @evas_engine_software_8_x11_cflags@
257evas_engine_software_8_x11_libs = @evas_engine_software_8_x11_libs@
258evas_engine_software_ddraw_cflags = @evas_engine_software_ddraw_cflags@
259evas_engine_software_ddraw_libs = @evas_engine_software_ddraw_libs@
260evas_engine_software_gdi_cflags = @evas_engine_software_gdi_cflags@
261evas_engine_software_gdi_libs = @evas_engine_software_gdi_libs@
262evas_engine_software_sdl_cflags = @evas_engine_software_sdl_cflags@
263evas_engine_software_sdl_libs = @evas_engine_software_sdl_libs@
264evas_engine_software_xcb_cflags = @evas_engine_software_xcb_cflags@
265evas_engine_software_xcb_libs = @evas_engine_software_xcb_libs@
266evas_engine_software_xlib_cflags = @evas_engine_software_xlib_cflags@
267evas_engine_software_xlib_libs = @evas_engine_software_xlib_libs@
268evas_image_loader_bmp_cflags = @evas_image_loader_bmp_cflags@
269evas_image_loader_bmp_libs = @evas_image_loader_bmp_libs@
270evas_image_loader_edb_cflags = @evas_image_loader_edb_cflags@
271evas_image_loader_edb_libs = @evas_image_loader_edb_libs@
272evas_image_loader_eet_cflags = @evas_image_loader_eet_cflags@
273evas_image_loader_eet_libs = @evas_image_loader_eet_libs@
274evas_image_loader_generic_cflags = @evas_image_loader_generic_cflags@
275evas_image_loader_generic_libs = @evas_image_loader_generic_libs@
276evas_image_loader_gif_cflags = @evas_image_loader_gif_cflags@
277evas_image_loader_gif_libs = @evas_image_loader_gif_libs@
278evas_image_loader_ico_cflags = @evas_image_loader_ico_cflags@
279evas_image_loader_ico_libs = @evas_image_loader_ico_libs@
280evas_image_loader_jpeg_cflags = @evas_image_loader_jpeg_cflags@
281evas_image_loader_jpeg_libs = @evas_image_loader_jpeg_libs@
282evas_image_loader_pmaps_cflags = @evas_image_loader_pmaps_cflags@
283evas_image_loader_pmaps_libs = @evas_image_loader_pmaps_libs@
284evas_image_loader_png_cflags = @evas_image_loader_png_cflags@
285evas_image_loader_png_libs = @evas_image_loader_png_libs@
286evas_image_loader_psd_cflags = @evas_image_loader_psd_cflags@
287evas_image_loader_psd_libs = @evas_image_loader_psd_libs@
288evas_image_loader_svg_cflags = @evas_image_loader_svg_cflags@
289evas_image_loader_svg_libs = @evas_image_loader_svg_libs@
290evas_image_loader_tga_cflags = @evas_image_loader_tga_cflags@
291evas_image_loader_tga_libs = @evas_image_loader_tga_libs@
292evas_image_loader_tiff_cflags = @evas_image_loader_tiff_cflags@
293evas_image_loader_tiff_libs = @evas_image_loader_tiff_libs@
294evas_image_loader_wbmp_cflags = @evas_image_loader_wbmp_cflags@
295evas_image_loader_wbmp_libs = @evas_image_loader_wbmp_libs@
296evas_image_loader_xpm_cflags = @evas_image_loader_xpm_cflags@
297evas_image_loader_xpm_libs = @evas_image_loader_xpm_libs@
298exec_prefix = @exec_prefix@
299have_evas_engine_gl_x11 = @have_evas_engine_gl_x11@
300have_evas_engine_gl_xcb = @have_evas_engine_gl_xcb@
301have_evas_engine_gl_xlib = @have_evas_engine_gl_xlib@
302have_evas_engine_software_x11 = @have_evas_engine_software_x11@
303have_evas_engine_software_xcb = @have_evas_engine_software_xcb@
304have_evas_engine_software_xlib = @have_evas_engine_software_xlib@
305have_lcov = @have_lcov@
306host = @host@
307host_alias = @host_alias@
308host_cpu = @host_cpu@
309host_os = @host_os@
310host_vendor = @host_vendor@
311htmldir = @htmldir@
312includedir = @includedir@
313infodir = @infodir@
314install_sh = @install_sh@
315libdir = @libdir@
316libexecdir = @libexecdir@
317localedir = @localedir@
318localstatedir = @localstatedir@
319lt_ECHO = @lt_ECHO@
320lt_enable_auto_import = @lt_enable_auto_import@
321mandir = @mandir@
322mkdir_p = @mkdir_p@
323oldincludedir = @oldincludedir@
324pdfdir = @pdfdir@
325pkgconfig_requires_private = @pkgconfig_requires_private@
326prefix = @prefix@
327program_transform_name = @program_transform_name@
328psdir = @psdir@
329pthread_cflags = @pthread_cflags@
330pthread_libs = @pthread_libs@
331release_info = @release_info@
332requirement_evas = @requirement_evas@
333sbindir = @sbindir@
334sharedstatedir = @sharedstatedir@
335srcdir = @srcdir@
336sysconfdir = @sysconfdir@
337target_alias = @target_alias@
338top_build_prefix = @top_build_prefix@
339top_builddir = @top_builddir@
340top_srcdir = @top_srcdir@
341version_info = @version_info@
342MAINTAINERCLEANFILES = Makefile.in
343EXTRA_DIST = \
344op_copy_color_.c \
345op_copy_color_i386.c \
346op_copy_color_neon.c \
347op_copy_mask_color_.c \
348op_copy_mask_color_i386.c \
349op_copy_mask_color_neon.c \
350op_copy_pixel_.c \
351op_copy_pixel_neon.c \
352op_copy_pixel_color_.c \
353op_copy_pixel_color_i386.c \
354op_copy_pixel_color_neon.c \
355op_copy_pixel_i386.c \
356op_copy_pixel_mask_.c \
357op_copy_pixel_mask_i386.c \
358op_copy_pixel_mask_neon.c
359
360all: all-am
361
362.SUFFIXES:
363$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
364 @for dep in $?; do \
365 case '$(am__configure_deps)' in \
366 *$$dep*) \
367 ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
368 && { if test -f $@; then exit 0; else break; fi; }; \
369 exit 1;; \
370 esac; \
371 done; \
372 echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/lib/engines/common/evas_op_copy/Makefile'; \
373 $(am__cd) $(top_srcdir) && \
374 $(AUTOMAKE) --gnu src/lib/engines/common/evas_op_copy/Makefile
375.PRECIOUS: Makefile
376Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
377 @case '$?' in \
378 *config.status*) \
379 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
380 *) \
381 echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
382 cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
383 esac;
384
385$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
386 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
387
388$(top_srcdir)/configure: $(am__configure_deps)
389 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
390$(ACLOCAL_M4): $(am__aclocal_m4_deps)
391 cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
392$(am__aclocal_m4_deps):
393
394mostlyclean-libtool:
395 -rm -f *.lo
396
397clean-libtool:
398 -rm -rf .libs _libs
399tags: TAGS
400TAGS:
401
402ctags: CTAGS
403CTAGS:
404
405
406distdir: $(DISTFILES)
407 @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
408 topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
409 list='$(DISTFILES)'; \
410 dist_files=`for file in $$list; do echo $$file; done | \
411 sed -e "s|^$$srcdirstrip/||;t" \
412 -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
413 case $$dist_files in \
414 */*) $(MKDIR_P) `echo "$$dist_files" | \
415 sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
416 sort -u` ;; \
417 esac; \
418 for file in $$dist_files; do \
419 if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
420 if test -d $$d/$$file; then \
421 dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
422 if test -d "$(distdir)/$$file"; then \
423 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
424 fi; \
425 if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
426 cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
427 find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
428 fi; \
429 cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
430 else \
431 test -f "$(distdir)/$$file" \
432 || cp -p $$d/$$file "$(distdir)/$$file" \
433 || exit 1; \
434 fi; \
435 done
436check-am: all-am
437check: check-am
438all-am: Makefile
439installdirs:
440install: install-am
441install-exec: install-exec-am
442install-data: install-data-am
443uninstall: uninstall-am
444
445install-am: all-am
446 @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
447
448installcheck: installcheck-am
449install-strip:
450 $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
451 install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
452 `test -z '$(STRIP)' || \
453 echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
454mostlyclean-generic:
455
456clean-generic:
457
458distclean-generic:
459 -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
460 -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
461
462maintainer-clean-generic:
463 @echo "This command is intended for maintainers to use"
464 @echo "it deletes files that may require special tools to rebuild."
465 -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
466clean: clean-am
467
468clean-am: clean-generic clean-libtool mostlyclean-am
469
470distclean: distclean-am
471 -rm -f Makefile
472distclean-am: clean-am distclean-generic
473
474dvi: dvi-am
475
476dvi-am:
477
478html: html-am
479
480html-am:
481
482info: info-am
483
484info-am:
485
486install-data-am:
487
488install-dvi: install-dvi-am
489
490install-dvi-am:
491
492install-exec-am:
493
494install-html: install-html-am
495
496install-html-am:
497
498install-info: install-info-am
499
500install-info-am:
501
502install-man:
503
504install-pdf: install-pdf-am
505
506install-pdf-am:
507
508install-ps: install-ps-am
509
510install-ps-am:
511
512installcheck-am:
513
514maintainer-clean: maintainer-clean-am
515 -rm -f Makefile
516maintainer-clean-am: distclean-am maintainer-clean-generic
517
518mostlyclean: mostlyclean-am
519
520mostlyclean-am: mostlyclean-generic mostlyclean-libtool
521
522pdf: pdf-am
523
524pdf-am:
525
526ps: ps-am
527
528ps-am:
529
530uninstall-am:
531
532.MAKE: install-am install-strip
533
534.PHONY: all all-am check check-am clean clean-generic clean-libtool \
535 distclean distclean-generic distclean-libtool distdir dvi \
536 dvi-am html html-am info info-am install install-am \
537 install-data install-data-am install-dvi install-dvi-am \
538 install-exec install-exec-am install-html install-html-am \
539 install-info install-info-am install-man install-pdf \
540 install-pdf-am install-ps install-ps-am install-strip \
541 installcheck installcheck-am installdirs maintainer-clean \
542 maintainer-clean-generic mostlyclean mostlyclean-generic \
543 mostlyclean-libtool pdf pdf-am ps ps-am uninstall uninstall-am
544
545
546# Tell versions [3.59,3.63) of GNU make to not export all variables.
547# Otherwise a system limit (for SysV at least) may be exceeded.
548.NOEXPORT:
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_color_.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_color_.c
new file mode 100644
index 0000000..0178358
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_color_.c
@@ -0,0 +1,138 @@
1/* copy color --> dst */
2
3#ifdef BUILD_C
4static void
5_op_copy_c_dp(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e;
7 UNROLL8_PLD_WHILE(d, l, e,
8 {
9 *d = c;
10 d++;
11 });
12}
13
14#define _op_copy_cn_dp _op_copy_c_dp
15#define _op_copy_can_dp _op_copy_c_dp
16#define _op_copy_caa_dp _op_copy_c_dp
17
18#define _op_copy_c_dpan _op_copy_c_dp
19#define _op_copy_cn_dpan _op_copy_c_dp
20#define _op_copy_can_dpan _op_copy_c_dp
21#define _op_copy_caa_dpan _op_copy_c_dp
22
23static void
24init_copy_color_span_funcs_c(void)
25{
26 op_copy_span_funcs[SP_N][SM_N][SC_N][DP][CPU_C] = _op_copy_cn_dp;
27 op_copy_span_funcs[SP_N][SM_N][SC][DP][CPU_C] = _op_copy_c_dp;
28 op_copy_span_funcs[SP_N][SM_N][SC_AN][DP][CPU_C] = _op_copy_can_dp;
29 op_copy_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_C] = _op_copy_caa_dp;
30
31 op_copy_span_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_cn_dpan;
32 op_copy_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_C] = _op_copy_c_dpan;
33 op_copy_span_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_can_dpan;
34 op_copy_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_caa_dpan;
35}
36#endif
37
38#ifdef BUILD_C
39static void
40_op_copy_pt_c_dp(DATA32 s __UNUSED__, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
41 *d = c;
42}
43
44#define _op_copy_pt_cn_dp _op_copy_pt_c_dp
45#define _op_copy_pt_can_dp _op_copy_pt_c_dp
46#define _op_copy_pt_caa_dp _op_copy_pt_c_dp
47
48#define _op_copy_pt_c_dpan _op_copy_pt_c_dp
49#define _op_copy_pt_cn_dpan _op_copy_pt_c_dp
50#define _op_copy_pt_can_dpan _op_copy_pt_c_dp
51#define _op_copy_pt_caa_dpan _op_copy_pt_c_dp
52
53static void
54init_copy_color_pt_funcs_c(void)
55{
56 op_copy_pt_funcs[SP_N][SM_N][SC_N][DP][CPU_C] = _op_copy_pt_cn_dp;
57 op_copy_pt_funcs[SP_N][SM_N][SC][DP][CPU_C] = _op_copy_pt_c_dp;
58 op_copy_pt_funcs[SP_N][SM_N][SC_AN][DP][CPU_C] = _op_copy_pt_can_dp;
59 op_copy_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_C] = _op_copy_pt_caa_dp;
60
61 op_copy_pt_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_pt_cn_dpan;
62 op_copy_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_C] = _op_copy_pt_c_dpan;
63 op_copy_pt_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_pt_can_dpan;
64 op_copy_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_pt_caa_dpan;
65}
66#endif
67
68/*-----*/
69
70/* copy_rel color --> dst */
71
72#ifdef BUILD_C
73static void
74_op_copy_rel_c_dp(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
75 DATA32 *e;
76 UNROLL8_PLD_WHILE(d, l, e,
77 {
78 *d = MUL_SYM(*d >> 24, c);
79 d++;
80 });
81}
82
83
84#define _op_copy_rel_cn_dp _op_copy_rel_c_dp
85#define _op_copy_rel_can_dp _op_copy_rel_c_dp
86#define _op_copy_rel_caa_dp _op_copy_rel_c_dp
87
88#define _op_copy_rel_c_dpan _op_copy_c_dp
89#define _op_copy_rel_cn_dpan _op_copy_cn_dp
90#define _op_copy_rel_can_dpan _op_copy_can_dp
91#define _op_copy_rel_caa_dpan _op_copy_caa_dp
92
93static void
94init_copy_rel_color_span_funcs_c(void)
95{
96 op_copy_rel_span_funcs[SP_N][SM_N][SC_N][DP][CPU_C] = _op_copy_rel_cn_dp;
97 op_copy_rel_span_funcs[SP_N][SM_N][SC][DP][CPU_C] = _op_copy_rel_c_dp;
98 op_copy_rel_span_funcs[SP_N][SM_N][SC_AN][DP][CPU_C] = _op_copy_rel_can_dp;
99 op_copy_rel_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_C] = _op_copy_rel_caa_dp;
100
101 op_copy_rel_span_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_rel_cn_dpan;
102 op_copy_rel_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_C] = _op_copy_rel_c_dpan;
103 op_copy_rel_span_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_rel_can_dpan;
104 op_copy_rel_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_rel_caa_dpan;
105}
106#endif
107
108#ifdef BUILD_C
109static void
110_op_copy_rel_pt_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
111 s = 1 + (*d >> 24);
112 *d = MUL_256(s, c);
113}
114
115
116#define _op_copy_rel_pt_cn_dp _op_copy_rel_pt_c_dp
117#define _op_copy_rel_pt_can_dp _op_copy_rel_pt_c_dp
118#define _op_copy_rel_pt_caa_dp _op_copy_rel_pt_c_dp
119
120#define _op_copy_rel_pt_c_dpan _op_copy_pt_c_dp
121#define _op_copy_rel_pt_cn_dpan _op_copy_pt_cn_dp
122#define _op_copy_rel_pt_can_dpan _op_copy_pt_can_dp
123#define _op_copy_rel_pt_caa_dpan _op_copy_pt_caa_dp
124
125static void
126init_copy_rel_color_pt_funcs_c(void)
127{
128 op_copy_rel_pt_funcs[SP_N][SM_N][SC_N][DP][CPU_C] = _op_copy_rel_pt_cn_dp;
129 op_copy_rel_pt_funcs[SP_N][SM_N][SC][DP][CPU_C] = _op_copy_rel_pt_c_dp;
130 op_copy_rel_pt_funcs[SP_N][SM_N][SC_AN][DP][CPU_C] = _op_copy_rel_pt_can_dp;
131 op_copy_rel_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_C] = _op_copy_rel_pt_caa_dp;
132
133 op_copy_rel_pt_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_rel_pt_cn_dpan;
134 op_copy_rel_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_C] = _op_copy_rel_pt_c_dpan;
135 op_copy_rel_pt_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_rel_pt_can_dpan;
136 op_copy_rel_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_rel_pt_caa_dpan;
137}
138#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_color_i386.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_color_i386.c
new file mode 100644
index 0000000..d864d92
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_color_i386.c
@@ -0,0 +1,150 @@
1/* copy color --> dst */
2
3#ifdef BUILD_MMX
4static void
5_op_copy_c_dp_mmx(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e = d + l - 1;
7 movd_m2r(c, mm1);
8 movq_r2r(mm1, mm2);
9 psllq_i2r(32, mm1);
10 por_r2r(mm2, mm1);
11 for (; d < e; d+=2) {
12 movq_r2m(mm1, d[0]);
13 }
14 e+=1;
15 for (; d < e; d++) {
16 *d = c;
17 }
18}
19
20#define _op_copy_cn_dp_mmx _op_copy_c_dp_mmx
21#define _op_copy_can_dp_mmx _op_copy_c_dp_mmx
22#define _op_copy_caa_dp_mmx _op_copy_c_dp_mmx
23
24#define _op_copy_cn_dpan_mmx _op_copy_c_dp_mmx
25#define _op_copy_c_dpan_mmx _op_copy_c_dp_mmx
26#define _op_copy_can_dpan_mmx _op_copy_c_dp_mmx
27#define _op_copy_caa_dpan_mmx _op_copy_c_dp_mmx
28
29static void
30init_copy_color_span_funcs_mmx(void)
31{
32 op_copy_span_funcs[SP_N][SM_N][SC_N][DP][CPU_MMX] = _op_copy_cn_dp_mmx;
33 op_copy_span_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_copy_c_dp_mmx;
34 op_copy_span_funcs[SP_N][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_can_dp_mmx;
35 op_copy_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_caa_dp_mmx;
36
37 op_copy_span_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_cn_dpan_mmx;
38 op_copy_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_c_dpan_mmx;
39 op_copy_span_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_can_dpan_mmx;
40 op_copy_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_caa_dpan_mmx;
41}
42#endif
43
44#ifdef BUILD_MMX
45static void
46_op_copy_pt_c_dp_mmx(DATA32 s __UNUSED__, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
47 *d = c;
48}
49
50#define _op_copy_pt_cn_dp_mmx _op_copy_pt_c_dp_mmx
51#define _op_copy_pt_can_dp_mmx _op_copy_pt_c_dp_mmx
52#define _op_copy_pt_caa_dp_mmx _op_copy_pt_c_dp_mmx
53
54#define _op_copy_pt_cn_dpan_mmx _op_copy_pt_c_dp_mmx
55#define _op_copy_pt_c_dpan_mmx _op_copy_pt_c_dp_mmx
56#define _op_copy_pt_can_dpan_mmx _op_copy_pt_c_dp_mmx
57#define _op_copy_pt_caa_dpan_mmx _op_copy_pt_c_dp_mmx
58
59static void
60init_copy_color_pt_funcs_mmx(void)
61{
62 op_copy_pt_funcs[SP_N][SM_N][SC_N][DP][CPU_MMX] = _op_copy_pt_cn_dp_mmx;
63 op_copy_pt_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_copy_pt_c_dp_mmx;
64 op_copy_pt_funcs[SP_N][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_pt_can_dp_mmx;
65 op_copy_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_pt_caa_dp_mmx;
66
67 op_copy_pt_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_pt_cn_dpan_mmx;
68 op_copy_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_pt_c_dpan_mmx;
69 op_copy_pt_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_pt_can_dpan_mmx;
70 op_copy_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_pt_caa_dpan_mmx;
71}
72#endif
73
74/*-----*/
75
76/* copy_rel color --> dst */
77
78#ifdef BUILD_MMX
79static void
80_op_copy_rel_c_dp_mmx(DATA32 *s __UNUSED__, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
81 DATA32 *e = d + l;
82 pxor_r2r(mm0, mm0);
83 MOV_P2R(c, mm2, mm0)
84 for (; d < e; d++) {
85 DATA32 da = 1 + (*d >> 24);
86 MOV_A2R(da, mm1)
87 MUL4_256_R2R(mm2, mm1)
88 MOV_R2P(mm1, *d, mm0)
89 }
90}
91
92#define _op_copy_rel_cn_dp_mmx _op_copy_rel_c_dp_mmx
93#define _op_copy_rel_can_dp_mmx _op_copy_rel_c_dp_mmx
94#define _op_copy_rel_caa_dp_mmx _op_copy_rel_c_dp_mmx
95
96#define _op_copy_rel_cn_dpan_mmx _op_copy_cn_dpan_mmx
97#define _op_copy_rel_c_dpan_mmx _op_copy_c_dpan_mmx
98#define _op_copy_rel_can_dpan_mmx _op_copy_can_dpan_mmx
99#define _op_copy_rel_caa_dpan_mmx _op_copy_caa_dpan_mmx
100
101static void
102init_copy_rel_color_span_funcs_mmx(void)
103{
104 op_copy_rel_span_funcs[SP_N][SM_N][SC_N][DP][CPU_MMX] = _op_copy_rel_cn_dp_mmx;
105 op_copy_rel_span_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_copy_rel_c_dp_mmx;
106 op_copy_rel_span_funcs[SP_N][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_rel_can_dp_mmx;
107 op_copy_rel_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_rel_caa_dp_mmx;
108
109 op_copy_rel_span_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_cn_dpan_mmx;
110 op_copy_rel_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_rel_c_dpan_mmx;
111 op_copy_rel_span_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_rel_can_dpan_mmx;
112 op_copy_rel_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_rel_caa_dpan_mmx;
113}
114#endif
115
116#ifdef BUILD_MMX
117static void
118_op_copy_rel_pt_c_dp_mmx(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
119 s = 1 + (*d >> 24);
120 pxor_r2r(mm0, mm0);
121 MOV_P2R(c, mm2, mm0)
122 MOV_A2R(s, mm1)
123 MUL4_256_R2R(mm2, mm1)
124 MOV_R2P(mm1, *d, mm0)
125}
126
127
128#define _op_copy_rel_pt_cn_dp_mmx _op_copy_rel_pt_c_dp_mmx
129#define _op_copy_rel_pt_can_dp_mmx _op_copy_rel_pt_c_dp_mmx
130#define _op_copy_rel_pt_caa_dp_mmx _op_copy_rel_pt_c_dp_mmx
131
132#define _op_copy_rel_pt_cn_dpan_mmx _op_copy_pt_cn_dpan_mmx
133#define _op_copy_rel_pt_c_dpan_mmx _op_copy_pt_c_dpan_mmx
134#define _op_copy_rel_pt_can_dpan_mmx _op_copy_pt_can_dpan_mmx
135#define _op_copy_rel_pt_caa_dpan_mmx _op_copy_pt_caa_dpan_mmx
136
137static void
138init_copy_rel_color_pt_funcs_mmx(void)
139{
140 op_copy_rel_pt_funcs[SP_N][SM_N][SC_N][DP][CPU_MMX] = _op_copy_rel_pt_cn_dp_mmx;
141 op_copy_rel_pt_funcs[SP_N][SM_N][SC][DP][CPU_MMX] = _op_copy_rel_pt_c_dp_mmx;
142 op_copy_rel_pt_funcs[SP_N][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_rel_pt_can_dp_mmx;
143 op_copy_rel_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_rel_pt_caa_dp_mmx;
144
145 op_copy_rel_pt_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pt_cn_dpan_mmx;
146 op_copy_rel_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_rel_pt_c_dpan_mmx;
147 op_copy_rel_pt_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_rel_pt_can_dpan_mmx;
148 op_copy_rel_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_rel_pt_caa_dpan_mmx;
149}
150#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_color_neon.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_color_neon.c
new file mode 100644
index 0000000..96310cd
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_color_neon.c
@@ -0,0 +1,212 @@
1/* copy color --> dst */
2
3#ifdef BUILD_NEON
4static void
5_op_copy_c_dp_neon(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
6#define AP "COPY_C_DP_"
7 uint32_t *e = d + l,*tmp;
8 asm volatile (
9 ".fpu neon \n\t"
10
11 "vdup.i32 q0, %[c] \n\t"
12
13 // Can we do 32 byte?
14 "andS %[tmp], %[d], $0x1f \n\t"
15 "beq "AP"quadstart \n\t"
16
17 // Can we do at least 16 byte?
18 "andS %[tmp], %[d], $0x4 \n\t"
19 "beq "AP"dualstart \n\t"
20
21 // Only once
22 AP"singleloop: \n\t"
23 "vst1.32 d0[0], [%[d]] \n\t"
24 "add %[d], #4 \n\t"
25
26 // Up to 3 times
27 AP"dualstart: \n\t"
28 "sub %[tmp], %[e], %[d] \n\t"
29 "cmp %[tmp], #32 \n\t"
30 "blt "AP"loopout \n\t"
31
32 AP"dualloop: \n\t"
33 "vstr.32 d0, [%[d]] \n\t"
34
35 "add %[d], #8 \n\t"
36 "andS %[tmp], %[d], $0x1f \n\t"
37 "bne "AP"dualloop \n\t"
38
39
40 AP"quadstart: \n\t"
41 "sub %[tmp], %[e], %[d] \n\t"
42 "cmp %[tmp], #32 \n\t"
43 "blt "AP"loopout \n\t"
44
45 "vmov q1, q0 \n\t"
46 "sub %[tmp],%[e],#31 \n\t"
47
48 AP "quadloop: \n\t"
49 "vstm %[d]!, {d0,d1,d2,d3} \n\t"
50
51 "cmp %[tmp], %[d] \n\t"
52 "bhi "AP"quadloop \n\t"
53
54
55 AP "loopout: \n\t"
56 "cmp %[d], %[e] \n\t"
57 "beq "AP"done \n\t"
58 "sub %[tmp],%[e], %[d] \n\t"
59 "cmp %[tmp],$0x04 \n\t"
60 "beq "AP"singleloop2 \n\t"
61
62 AP "dualloop2: \n\t"
63 "sub %[tmp],%[e],#7 \n\t"
64 AP "dualloop2int: \n\t"
65 "vstr.64 d0, [%[d]] \n\t"
66
67 "add %[d], #8 \n\t"
68 "cmp %[tmp], %[d] \n\t"
69 "bhi "AP"dualloop2int \n\t"
70
71 // Single ??
72 "cmp %[e], %[d] \n\t"
73 "beq "AP"done \n\t"
74
75 AP "singleloop2: \n\t"
76 "vst1.32 d0[0], [%[d]] \n\t"
77
78 AP "done:\n\t"
79
80 : // No output regs
81 // Input
82 : [c] "r" (c), [e] "r" (e), [d] "r" (d),[tmp] "r" (tmp)
83 // Clobbered
84 : "q0","q1","memory"
85
86
87 );
88}
89
90#define _op_copy_cn_dp_neon _op_copy_c_dp_neon
91#define _op_copy_can_dp_neon _op_copy_c_dp_neon
92#define _op_copy_caa_dp_neon _op_copy_c_dp_neon
93
94#define _op_copy_cn_dpan_neon _op_copy_c_dp_neon
95#define _op_copy_c_dpan_neon _op_copy_c_dp_neon
96#define _op_copy_can_dpan_neon _op_copy_c_dp_neon
97#define _op_copy_caa_dpan_neon _op_copy_c_dp_neon
98
99static void
100init_copy_color_span_funcs_neon(void)
101{
102 op_copy_span_funcs[SP_N][SM_N][SC_N][DP][CPU_NEON] = _op_copy_cn_dp_neon;
103 op_copy_span_funcs[SP_N][SM_N][SC][DP][CPU_NEON] = _op_copy_c_dp_neon;
104 op_copy_span_funcs[SP_N][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_can_dp_neon;
105 op_copy_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_caa_dp_neon;
106
107 op_copy_span_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_cn_dpan_neon;
108 op_copy_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_c_dpan_neon;
109 op_copy_span_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_can_dpan_neon;
110 op_copy_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_caa_dpan_neon;
111}
112#endif
113
114#ifdef BUILD_NEON
115static void
116_op_copy_pt_c_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
117 *d = c;
118}
119
120#define _op_copy_pt_cn_dp_neon _op_copy_pt_c_dp_neon
121#define _op_copy_pt_can_dp_neon _op_copy_pt_c_dp_neon
122#define _op_copy_pt_caa_dp_neon _op_copy_pt_c_dp_neon
123
124#define _op_copy_pt_cn_dpan_neon _op_copy_pt_c_dp_neon
125#define _op_copy_pt_c_dpan_neon _op_copy_pt_c_dp_neon
126#define _op_copy_pt_can_dpan_neon _op_copy_pt_c_dp_neon
127#define _op_copy_pt_caa_dpan_neon _op_copy_pt_c_dp_neon
128
129static void
130init_copy_color_pt_funcs_neon(void)
131{
132 op_copy_pt_funcs[SP_N][SM_N][SC_N][DP][CPU_NEON] = _op_copy_pt_cn_dp_neon;
133 op_copy_pt_funcs[SP_N][SM_N][SC][DP][CPU_NEON] = _op_copy_pt_c_dp_neon;
134 op_copy_pt_funcs[SP_N][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pt_can_dp_neon;
135 op_copy_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pt_caa_dp_neon;
136
137 op_copy_pt_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_cn_dpan_neon;
138 op_copy_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pt_c_dpan_neon;
139 op_copy_pt_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pt_can_dpan_neon;
140 op_copy_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pt_caa_dpan_neon;
141}
142#endif
143
144/*-----*/
145
146/* copy_rel color --> dst */
147
148#ifdef BUILD_NEON
149static void
150_op_copy_rel_c_dp_neon(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
151 // FIXME: neon-it
152 DATA32 *e = d + l;
153 for (; d < e; d++) {
154 *d = MUL_SYM(*d >> 24, c);
155 }
156}
157
158#define _op_copy_rel_cn_dp_neon _op_copy_rel_c_dp_neon
159#define _op_copy_rel_can_dp_neon _op_copy_rel_c_dp_neon
160#define _op_copy_rel_caa_dp_neon _op_copy_rel_c_dp_neon
161
162#define _op_copy_rel_cn_dpan_neon _op_copy_cn_dpan_neon
163#define _op_copy_rel_c_dpan_neon _op_copy_c_dpan_neon
164#define _op_copy_rel_can_dpan_neon _op_copy_can_dpan_neon
165#define _op_copy_rel_caa_dpan_neon _op_copy_caa_dpan_neon
166
167static void
168init_copy_rel_color_span_funcs_neon(void)
169{
170 op_copy_rel_span_funcs[SP_N][SM_N][SC_N][DP][CPU_NEON] = _op_copy_rel_cn_dp_neon;
171 op_copy_rel_span_funcs[SP_N][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_c_dp_neon;
172 op_copy_rel_span_funcs[SP_N][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_can_dp_neon;
173 op_copy_rel_span_funcs[SP_N][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_caa_dp_neon;
174
175 op_copy_rel_span_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_cn_dpan_neon;
176 op_copy_rel_span_funcs[SP_N][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_c_dpan_neon;
177 op_copy_rel_span_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_can_dpan_neon;
178 op_copy_rel_span_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_caa_dpan_neon;
179}
180#endif
181
182#ifdef BUILD_NEON
183static void
184_op_copy_rel_pt_c_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
185 s = 1 + (*d >> 24);
186 *d = MUL_256(s, c);
187}
188
189
190#define _op_copy_rel_pt_cn_dp_neon _op_copy_rel_pt_c_dp_neon
191#define _op_copy_rel_pt_can_dp_neon _op_copy_rel_pt_c_dp_neon
192#define _op_copy_rel_pt_caa_dp_neon _op_copy_rel_pt_c_dp_neon
193
194#define _op_copy_rel_pt_cn_dpan_neon _op_copy_pt_cn_dpan_neon
195#define _op_copy_rel_pt_c_dpan_neon _op_copy_pt_c_dpan_neon
196#define _op_copy_rel_pt_can_dpan_neon _op_copy_pt_can_dpan_neon
197#define _op_copy_rel_pt_caa_dpan_neon _op_copy_pt_caa_dpan_neon
198
199static void
200init_copy_rel_color_pt_funcs_neon(void)
201{
202 op_copy_rel_pt_funcs[SP_N][SM_N][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_cn_dp_neon;
203 op_copy_rel_pt_funcs[SP_N][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pt_c_dp_neon;
204 op_copy_rel_pt_funcs[SP_N][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pt_can_dp_neon;
205 op_copy_rel_pt_funcs[SP_N][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pt_caa_dp_neon;
206
207 op_copy_rel_pt_funcs[SP_N][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_cn_dpan_neon;
208 op_copy_rel_pt_funcs[SP_N][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pt_c_dpan_neon;
209 op_copy_rel_pt_funcs[SP_N][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pt_can_dpan_neon;
210 op_copy_rel_pt_funcs[SP_N][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pt_caa_dpan_neon;
211}
212#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_.c
new file mode 100644
index 0000000..c03a843
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_.c
@@ -0,0 +1,170 @@
1/* copy mask x color -> dst */
2
3#ifdef BUILD_C
4static void
5_op_copy_mas_c_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e;
7 int color;
8 UNROLL8_PLD_WHILE(d, l, e,
9 {
10 color = *m;
11 switch(color)
12 {
13 case 0:
14 break;
15 case 255:
16 *d = c;
17 break;
18 default:
19 color++;
20 *d = INTERP_256(color, c, *d);
21 break;
22 }
23 m++; d++;
24 });
25}
26
27#define _op_copy_mas_cn_dp _op_copy_mas_c_dp
28#define _op_copy_mas_can_dp _op_copy_mas_c_dp
29#define _op_copy_mas_caa_dp _op_copy_mas_c_dp
30
31#define _op_copy_mas_c_dpan _op_copy_mas_c_dp
32#define _op_copy_mas_cn_dpan _op_copy_mas_c_dpan
33#define _op_copy_mas_can_dpan _op_copy_mas_c_dpan
34#define _op_copy_mas_caa_dpan _op_copy_mas_c_dpan
35
36static void
37init_copy_mask_color_span_funcs_c(void)
38{
39 op_copy_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_C] = _op_copy_mas_cn_dp;
40 op_copy_span_funcs[SP_N][SM_AS][SC][DP][CPU_C] = _op_copy_mas_c_dp;
41 op_copy_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_C] = _op_copy_mas_can_dp;
42 op_copy_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_C] = _op_copy_mas_caa_dp;
43
44 op_copy_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_mas_cn_dpan;
45 op_copy_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_C] = _op_copy_mas_c_dpan;
46 op_copy_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_C] = _op_copy_mas_can_dpan;
47 op_copy_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_C] = _op_copy_mas_caa_dpan;
48}
49#endif
50
51#ifdef BUILD_C
52static void
53_op_copy_pt_mas_c_dp(DATA32 s __UNUSED__, DATA8 m, DATA32 c, DATA32 *d) {
54 *d = INTERP_256(m + 1, c, *d);
55}
56
57
58#define _op_copy_pt_mas_cn_dp _op_copy_pt_mas_c_dp
59#define _op_copy_pt_mas_can_dp _op_copy_pt_mas_c_dp
60#define _op_copy_pt_mas_caa_dp _op_copy_pt_mas_c_dp
61
62#define _op_copy_pt_mas_c_dpan _op_copy_pt_mas_c_dp
63#define _op_copy_pt_mas_cn_dpan _op_copy_pt_mas_c_dpan
64#define _op_copy_pt_mas_can_dpan _op_copy_pt_mas_c_dpan
65#define _op_copy_pt_mas_caa_dpan _op_copy_pt_mas_c_dpan
66
67static void
68init_copy_mask_color_pt_funcs_c(void)
69{
70 op_copy_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_C] = _op_copy_pt_mas_cn_dp;
71 op_copy_pt_funcs[SP_N][SM_AS][SC][DP][CPU_C] = _op_copy_pt_mas_c_dp;
72 op_copy_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_C] = _op_copy_pt_mas_can_dp;
73 op_copy_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_C] = _op_copy_pt_mas_caa_dp;
74
75 op_copy_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_pt_mas_cn_dpan;
76 op_copy_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_C] = _op_copy_pt_mas_c_dpan;
77 op_copy_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_C] = _op_copy_pt_mas_can_dpan;
78 op_copy_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_C] = _op_copy_pt_mas_caa_dpan;
79}
80#endif
81
82/*-----*/
83
84/* copy_rel mask x color -> dst */
85
86#ifdef BUILD_C
87static void
88_op_copy_rel_mas_c_dp(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
89 DATA32 *e;
90 int color;
91 UNROLL8_PLD_WHILE(d, l, e,
92 {
93 color = *m;
94 switch(color)
95 {
96 case 0:
97 break;
98 case 255:
99 color = 1 + (*d >> 24);
100 *d = MUL_256(color, c);
101 break;
102 default:
103 {
104 DATA32 da = 1 + (*d >> 24);
105 da = MUL_256(da, c);
106 color++;
107 *d = INTERP_256(color, da, *d);
108 }
109 break;
110 }
111 m++; d++;
112 });
113}
114
115
116#define _op_copy_rel_mas_cn_dp _op_copy_rel_mas_c_dp
117#define _op_copy_rel_mas_can_dp _op_copy_rel_mas_c_dp
118#define _op_copy_rel_mas_caa_dp _op_copy_rel_mas_c_dp
119
120#define _op_copy_rel_mas_c_dpan _op_copy_mas_c_dpan
121#define _op_copy_rel_mas_cn_dpan _op_copy_mas_cn_dpan
122#define _op_copy_rel_mas_can_dpan _op_copy_mas_can_dpan
123#define _op_copy_rel_mas_caa_dpan _op_copy_mas_caa_dpan
124
125static void
126init_copy_rel_mask_color_span_funcs_c(void)
127{
128 op_copy_rel_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_C] = _op_copy_rel_mas_cn_dp;
129 op_copy_rel_span_funcs[SP_N][SM_AS][SC][DP][CPU_C] = _op_copy_rel_mas_c_dp;
130 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_C] = _op_copy_rel_mas_can_dp;
131 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_C] = _op_copy_rel_mas_caa_dp;
132
133 op_copy_rel_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_rel_mas_cn_dpan;
134 op_copy_rel_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_C] = _op_copy_rel_mas_c_dpan;
135 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_C] = _op_copy_rel_mas_can_dpan;
136 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_C] = _op_copy_rel_mas_caa_dpan;
137}
138#endif
139
140#ifdef BUILD_C
141static void
142_op_copy_rel_pt_mas_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
143 s = 1 + (*d >> 24);
144 s = MUL_256(s, c);
145 *d = INTERP_256(m + 1, s, *d);
146}
147
148#define _op_copy_rel_pt_mas_cn_dp _op_copy_rel_pt_mas_c_dp
149#define _op_copy_rel_pt_mas_can_dp _op_copy_rel_pt_mas_c_dp
150#define _op_copy_rel_pt_mas_caa_dp _op_copy_rel_pt_mas_c_dp
151
152#define _op_copy_rel_pt_mas_c_dpan _op_copy_pt_mas_c_dpan
153#define _op_copy_rel_pt_mas_cn_dpan _op_copy_pt_mas_cn_dpan
154#define _op_copy_rel_pt_mas_can_dpan _op_copy_pt_mas_can_dpan
155#define _op_copy_rel_pt_mas_caa_dpan _op_copy_pt_mas_caa_dpan
156
157static void
158init_copy_rel_mask_color_pt_funcs_c(void)
159{
160 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_C] = _op_copy_rel_pt_mas_cn_dp;
161 op_copy_rel_pt_funcs[SP_N][SM_AS][SC][DP][CPU_C] = _op_copy_rel_pt_mas_c_dp;
162 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_C] = _op_copy_rel_pt_mas_can_dp;
163 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_C] = _op_copy_rel_pt_mas_caa_dp;
164
165 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_rel_pt_mas_cn_dpan;
166 op_copy_rel_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_C] = _op_copy_rel_pt_mas_c_dpan;
167 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_C] = _op_copy_rel_pt_mas_can_dpan;
168 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_C] = _op_copy_rel_pt_mas_caa_dpan;
169}
170#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_i386.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_i386.c
new file mode 100644
index 0000000..e27493f
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_i386.c
@@ -0,0 +1,193 @@
1/* copy mask x color -> dst */
2
3#ifdef BUILD_MMX
4static void
5_op_copy_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_P2R(c, mm2, mm0)
9 MOV_A2R(ALPHA_255, mm5)
10 while (d < e) {
11 l = *m;
12 switch(l)
13 {
14 case 0:
15 break;
16 case 255:
17 *d = c;
18 break;
19 default:
20 {
21 l++;
22 MOV_A2R(l, mm3)
23 MOV_P2R(*d, mm1, mm0)
24 movq_r2r(mm2, mm4);
25 INTERP_256_R2R(mm3, mm4, mm1, mm5);
26 MOV_R2P(mm1, *d, mm0)
27 }
28 break;
29 }
30 m++; d++;
31 }
32}
33
34#define _op_copy_mas_cn_dp_mmx _op_copy_mas_c_dp_mmx
35#define _op_copy_mas_can_dp_mmx _op_copy_mas_c_dp_mmx
36#define _op_copy_mas_caa_dp_mmx _op_copy_mas_c_dp_mmx
37
38#define _op_copy_mas_c_dpan_mmx _op_copy_mas_c_dp_mmx
39#define _op_copy_mas_cn_dpan_mmx _op_copy_mas_c_dpan_mmx
40#define _op_copy_mas_can_dpan_mmx _op_copy_mas_c_dpan_mmx
41#define _op_copy_mas_caa_dpan_mmx _op_copy_mas_c_dpan_mmx
42
43static void
44init_copy_mask_color_span_funcs_mmx(void)
45{
46 op_copy_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_mas_cn_dp_mmx;
47 op_copy_span_funcs[SP_N][SM_AS][SC][DP][CPU_MMX] = _op_copy_mas_c_dp_mmx;
48 op_copy_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_MMX] = _op_copy_mas_can_dp_mmx;
49 op_copy_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_MMX] = _op_copy_mas_caa_dp_mmx;
50
51 op_copy_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_mas_cn_dpan_mmx;
52 op_copy_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_MMX] = _op_copy_mas_c_dpan_mmx;
53 op_copy_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_MMX] = _op_copy_mas_can_dpan_mmx;
54 op_copy_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_MMX] = _op_copy_mas_caa_dpan_mmx;
55}
56#endif
57
58#ifdef BUILD_MMX
59static void
60_op_copy_pt_mas_c_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
61 s = m + 1;
62 MOV_A2R(ALPHA_255, mm5)
63 pxor_r2r(mm0, mm0);
64 MOV_P2R(c, mm2, mm0)
65 MOV_A2R(s, mm3)
66 MOV_P2R(*d, mm1, mm0)
67 INTERP_256_R2R(mm3, mm2, mm1, mm5);
68 MOV_R2P(mm1, *d, mm0)
69}
70
71#define _op_copy_pt_mas_cn_dp_mmx _op_copy_pt_mas_c_dp_mmx
72#define _op_copy_pt_mas_can_dp_mmx _op_copy_pt_mas_c_dp_mmx
73#define _op_copy_pt_mas_caa_dp_mmx _op_copy_pt_mas_c_dp_mmx
74
75#define _op_copy_pt_mas_c_dpan_mmx _op_copy_pt_mas_c_dp_mmx
76#define _op_copy_pt_mas_cn_dpan_mmx _op_copy_pt_mas_c_dpan_mmx
77#define _op_copy_pt_mas_can_dpan_mmx _op_copy_pt_mas_c_dpan_mmx
78#define _op_copy_pt_mas_caa_dpan_mmx _op_copy_pt_mas_c_dpan_mmx
79
80static void
81init_copy_mask_color_pt_funcs_mmx(void)
82{
83 op_copy_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_pt_mas_cn_dp_mmx;
84 op_copy_pt_funcs[SP_N][SM_AS][SC][DP][CPU_MMX] = _op_copy_pt_mas_c_dp_mmx;
85 op_copy_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_MMX] = _op_copy_pt_mas_can_dp_mmx;
86 op_copy_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_MMX] = _op_copy_pt_mas_caa_dp_mmx;
87
88 op_copy_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_pt_mas_cn_dpan_mmx;
89 op_copy_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_MMX] = _op_copy_pt_mas_c_dpan_mmx;
90 op_copy_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_MMX] = _op_copy_pt_mas_can_dpan_mmx;
91 op_copy_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_MMX] = _op_copy_pt_mas_caa_dpan_mmx;
92}
93#endif
94
95/*-----*/
96
97/* copy_rel mask x color -> dst */
98
99#ifdef BUILD_MMX
100static void
101_op_copy_rel_mas_c_dp_mmx(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
102 DATA32 *e = d + l;
103 pxor_r2r(mm0, mm0);
104 MOV_P2R(c, mm2, mm0)
105 MOV_A2R(ALPHA_255, mm5)
106 while (d < e) {
107 l = *m;
108 switch(l)
109 {
110 case 0:
111 break;
112 case 255:
113 l = 1 + (*d >> 24);
114 MOV_A2R(l, mm1)
115 MUL4_256_R2R(mm2, mm1)
116 MOV_R2P(mm1, *d, mm0)
117 break;
118 default:
119 l++;
120 MOV_A2R(l, mm3)
121 MOV_P2R(*d, mm1, mm0)
122 MOV_RA2R(mm1, mm4)
123 MUL4_256_R2R(mm2, mm4)
124 INTERP_256_R2R(mm3, mm4, mm1, mm5)
125 MOV_R2P(mm1, *d, mm0)
126 break;
127 }
128 m++; d++;
129 }
130}
131
132#define _op_copy_rel_mas_cn_dp_mmx _op_copy_rel_mas_c_dp_mmx
133#define _op_copy_rel_mas_can_dp_mmx _op_copy_rel_mas_c_dp_mmx
134#define _op_copy_rel_mas_caa_dp_mmx _op_copy_rel_mas_c_dp_mmx
135
136#define _op_copy_rel_mas_c_dpan_mmx _op_copy_mas_c_dpan_mmx
137#define _op_copy_rel_mas_cn_dpan_mmx _op_copy_mas_cn_dpan_mmx
138#define _op_copy_rel_mas_can_dpan_mmx _op_copy_mas_can_dpan_mmx
139#define _op_copy_rel_mas_caa_dpan_mmx _op_copy_mas_caa_dpan_mmx
140
141static void
142init_copy_rel_mask_color_span_funcs_mmx(void)
143{
144 op_copy_rel_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_mas_cn_dp_mmx;
145 op_copy_rel_span_funcs[SP_N][SM_AS][SC][DP][CPU_MMX] = _op_copy_rel_mas_c_dp_mmx;
146 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_MMX] = _op_copy_rel_mas_can_dp_mmx;
147 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_MMX] = _op_copy_rel_mas_caa_dp_mmx;
148
149 op_copy_rel_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_mas_cn_dpan_mmx;
150 op_copy_rel_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_MMX] = _op_copy_rel_mas_c_dpan_mmx;
151 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_MMX] = _op_copy_rel_mas_can_dpan_mmx;
152 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_MMX] = _op_copy_rel_mas_caa_dpan_mmx;
153}
154#endif
155
156#ifdef BUILD_MMX
157static void
158_op_copy_rel_pt_mas_c_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
159 s = m + 1;
160 MOV_A2R(ALPHA_255, mm5)
161 pxor_r2r(mm0, mm0);
162 MOV_A2R(s, mm3)
163 MOV_P2R(*d, mm1, mm0)
164 MOV_RA2R(mm1, mm4)
165 MOV_P2R(c, mm2, mm0)
166 MUL4_256_R2R(mm2, mm4)
167 INTERP_256_R2R(mm3, mm4, mm1, mm5)
168 MOV_R2P(mm1, *d, mm0)
169}
170
171#define _op_copy_rel_pt_mas_cn_dp_mmx _op_copy_rel_pt_mas_c_dp_mmx
172#define _op_copy_rel_pt_mas_can_dp_mmx _op_copy_rel_pt_mas_c_dp_mmx
173#define _op_copy_rel_pt_mas_caa_dp_mmx _op_copy_rel_pt_mas_c_dp_mmx
174
175#define _op_copy_rel_pt_mas_c_dpan_mmx _op_copy_pt_mas_c_dpan_mmx
176#define _op_copy_rel_pt_mas_cn_dpan_mmx _op_copy_pt_mas_cn_dpan_mmx
177#define _op_copy_rel_pt_mas_can_dpan_mmx _op_copy_pt_mas_can_dpan_mmx
178#define _op_copy_rel_pt_mas_caa_dpan_mmx _op_copy_pt_mas_caa_dpan_mmx
179
180static void
181init_copy_rel_mask_color_pt_funcs_mmx(void)
182{
183 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_pt_mas_cn_dp_mmx;
184 op_copy_rel_pt_funcs[SP_N][SM_AS][SC][DP][CPU_MMX] = _op_copy_rel_pt_mas_c_dp_mmx;
185 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_MMX] = _op_copy_rel_pt_mas_can_dp_mmx;
186 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_MMX] = _op_copy_rel_pt_mas_caa_dp_mmx;
187
188 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pt_mas_cn_dpan_mmx;
189 op_copy_rel_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_MMX] = _op_copy_rel_pt_mas_c_dpan_mmx;
190 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_MMX] = _op_copy_rel_pt_mas_can_dpan_mmx;
191 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_MMX] = _op_copy_rel_pt_mas_caa_dpan_mmx;
192}
193#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_neon.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_neon.c
new file mode 100644
index 0000000..dc7f78f
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_mask_color_neon.c
@@ -0,0 +1,170 @@
1/* copy mask x color -> dst */
2
3#ifdef BUILD_NEON
4static void
5_op_copy_mas_c_dp_neon(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
6 // FIXME: neon-it
7 DATA32 *e;
8 int color;
9 UNROLL8_PLD_WHILE(d, l, e,
10 {
11 color = *m;
12 switch(color)
13 {
14 case 0:
15 break;
16 case 255:
17 *d = c;
18 break;
19 default:
20 color++;
21 *d = INTERP_256(color, c, *d);
22 break;
23 }
24 m++; d++;
25 });
26}
27
28#define _op_copy_mas_cn_dp_neon _op_copy_mas_c_dp_neon
29#define _op_copy_mas_can_dp_neon _op_copy_mas_c_dp_neon
30#define _op_copy_mas_caa_dp_neon _op_copy_mas_c_dp_neon
31
32#define _op_copy_mas_c_dpan_neon _op_copy_mas_c_dp_neon
33#define _op_copy_mas_cn_dpan_neon _op_copy_mas_c_dpan_neon
34#define _op_copy_mas_can_dpan_neon _op_copy_mas_c_dpan_neon
35#define _op_copy_mas_caa_dpan_neon _op_copy_mas_c_dpan_neon
36
37static void
38init_copy_mask_color_span_funcs_neon(void)
39{
40 op_copy_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_mas_cn_dp_neon;
41 op_copy_span_funcs[SP_N][SM_AS][SC][DP][CPU_NEON] = _op_copy_mas_c_dp_neon;
42 op_copy_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_NEON] = _op_copy_mas_can_dp_neon;
43 op_copy_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_NEON] = _op_copy_mas_caa_dp_neon;
44
45 op_copy_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_mas_cn_dpan_neon;
46 op_copy_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_NEON] = _op_copy_mas_c_dpan_neon;
47 op_copy_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_NEON] = _op_copy_mas_can_dpan_neon;
48 op_copy_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_NEON] = _op_copy_mas_caa_dpan_neon;
49}
50#endif
51
52#ifdef BUILD_NEON
53static void
54_op_copy_pt_mas_c_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
55 *d = INTERP_256(m + 1, c, *d);
56}
57
58#define _op_copy_pt_mas_cn_dp_neon _op_copy_pt_mas_c_dp_neon
59#define _op_copy_pt_mas_can_dp_neon _op_copy_pt_mas_c_dp_neon
60#define _op_copy_pt_mas_caa_dp_neon _op_copy_pt_mas_c_dp_neon
61
62#define _op_copy_pt_mas_c_dpan_neon _op_copy_pt_mas_c_dp_neon
63#define _op_copy_pt_mas_cn_dpan_neon _op_copy_pt_mas_c_dpan_neon
64#define _op_copy_pt_mas_can_dpan_neon _op_copy_pt_mas_c_dpan_neon
65#define _op_copy_pt_mas_caa_dpan_neon _op_copy_pt_mas_c_dpan_neon
66
67static void
68init_copy_mask_color_pt_funcs_neon(void)
69{
70 op_copy_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pt_mas_cn_dp_neon;
71 op_copy_pt_funcs[SP_N][SM_AS][SC][DP][CPU_NEON] = _op_copy_pt_mas_c_dp_neon;
72 op_copy_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_NEON] = _op_copy_pt_mas_can_dp_neon;
73 op_copy_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_NEON] = _op_copy_pt_mas_caa_dp_neon;
74
75 op_copy_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_mas_cn_dpan_neon;
76 op_copy_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_NEON] = _op_copy_pt_mas_c_dpan_neon;
77 op_copy_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_NEON] = _op_copy_pt_mas_can_dpan_neon;
78 op_copy_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_NEON] = _op_copy_pt_mas_caa_dpan_neon;
79}
80#endif
81
82/*-----*/
83
84/* copy_rel mask x color -> dst */
85
86#ifdef BUILD_NEON
87static void
88_op_copy_rel_mas_c_dp_neon(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) {
89 // FIXME: neon-it
90 DATA32 *e;
91 int color;
92 UNROLL8_PLD_WHILE(d, l, e,
93 {
94 color = *m;
95 switch(color)
96 {
97 case 0:
98 break;
99 case 255:
100 color = 1 + (*d >> 24);
101 *d = MUL_256(color, c);
102 break;
103 default:
104 {
105 DATA32 da = 1 + (*d >> 24);
106 da = MUL_256(da, c);
107 color++;
108 *d = INTERP_256(color, da, *d);
109 }
110 break;
111 }
112 m++; d++;
113 });
114}
115
116#define _op_copy_rel_mas_cn_dp_neon _op_copy_rel_mas_c_dp_neon
117#define _op_copy_rel_mas_can_dp_neon _op_copy_rel_mas_c_dp_neon
118#define _op_copy_rel_mas_caa_dp_neon _op_copy_rel_mas_c_dp_neon
119
120#define _op_copy_rel_mas_c_dpan_neon _op_copy_mas_c_dpan_neon
121#define _op_copy_rel_mas_cn_dpan_neon _op_copy_mas_cn_dpan_neon
122#define _op_copy_rel_mas_can_dpan_neon _op_copy_mas_can_dpan_neon
123#define _op_copy_rel_mas_caa_dpan_neon _op_copy_mas_caa_dpan_neon
124
125static void
126init_copy_rel_mask_color_span_funcs_neon(void)
127{
128 op_copy_rel_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_mas_cn_dp_neon;
129 op_copy_rel_span_funcs[SP_N][SM_AS][SC][DP][CPU_NEON] = _op_copy_rel_mas_c_dp_neon;
130 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_NEON] = _op_copy_rel_mas_can_dp_neon;
131 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_NEON] = _op_copy_rel_mas_caa_dp_neon;
132
133 op_copy_rel_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_mas_cn_dpan_neon;
134 op_copy_rel_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_NEON] = _op_copy_rel_mas_c_dpan_neon;
135 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_mas_can_dpan_neon;
136 op_copy_rel_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_mas_caa_dpan_neon;
137}
138#endif
139
140#ifdef BUILD_NEON
141static void
142_op_copy_rel_pt_mas_c_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
143 s = 1 + (*d >> 24);
144 s = MUL_256(s, c);
145 *d = INTERP_256(m + 1, s, *d);
146}
147
148#define _op_copy_rel_pt_mas_cn_dp_neon _op_copy_rel_pt_mas_c_dp_neon
149#define _op_copy_rel_pt_mas_can_dp_neon _op_copy_rel_pt_mas_c_dp_neon
150#define _op_copy_rel_pt_mas_caa_dp_neon _op_copy_rel_pt_mas_c_dp_neon
151
152#define _op_copy_rel_pt_mas_c_dpan_neon _op_copy_pt_mas_c_dpan_neon
153#define _op_copy_rel_pt_mas_cn_dpan_neon _op_copy_pt_mas_cn_dpan_neon
154#define _op_copy_rel_pt_mas_can_dpan_neon _op_copy_pt_mas_can_dpan_neon
155#define _op_copy_rel_pt_mas_caa_dpan_neon _op_copy_pt_mas_caa_dpan_neon
156
157static void
158init_copy_rel_mask_color_pt_funcs_neon(void)
159{
160 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_mas_cn_dp_neon;
161 op_copy_rel_pt_funcs[SP_N][SM_AS][SC][DP][CPU_NEON] = _op_copy_rel_pt_mas_c_dp_neon;
162 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_NEON] = _op_copy_rel_pt_mas_can_dp_neon;
163 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_NEON] = _op_copy_rel_pt_mas_caa_dp_neon;
164
165 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_mas_cn_dpan_neon;
166 op_copy_rel_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_NEON] = _op_copy_rel_pt_mas_c_dpan_neon;
167 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pt_mas_can_dpan_neon;
168 op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pt_mas_caa_dpan_neon;
169}
170#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_.c
new file mode 100644
index 0000000..45d59d0
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_.c
@@ -0,0 +1,117 @@
1/* copy pixel --> dst */
2
3#ifdef BUILD_C
4static void
5_op_copy_p_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
6 memcpy(d, s, l * sizeof(DATA32));
7}
8
9#define _op_copy_pan_dp _op_copy_p_dp
10#define _op_copy_pas_dp _op_copy_p_dp
11
12#define _op_copy_p_dpan _op_copy_p_dp
13#define _op_copy_pan_dpan _op_copy_pan_dp
14#define _op_copy_pas_dpan _op_copy_pas_dp
15
16static void
17init_copy_pixel_span_funcs_c(void)
18{
19 op_copy_span_funcs[SP][SM_N][SC_N][DP][CPU_C] = _op_copy_p_dp;
20 op_copy_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_C] = _op_copy_pan_dp;
21 op_copy_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_C] = _op_copy_pas_dp;
22
23 op_copy_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_p_dpan;
24 op_copy_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_pan_dpan;
25 op_copy_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_pas_dpan;
26}
27#endif
28
29#ifdef BUILD_C
30static void
31_op_copy_pt_p_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d) {
32 *d = s;
33}
34
35#define _op_copy_pt_pan_dp _op_copy_pt_p_dp
36#define _op_copy_pt_pas_dp _op_copy_pt_p_dp
37
38#define _op_copy_pt_p_dpan _op_copy_pt_p_dp
39#define _op_copy_pt_pan_dpan _op_copy_pt_pan_dp
40#define _op_copy_pt_pas_dpan _op_copy_pt_pas_dp
41
42static void
43init_copy_pixel_pt_funcs_c(void)
44{
45 op_copy_pt_funcs[SP][SM_N][SC_N][DP][CPU_C] = _op_copy_pt_p_dp;
46 op_copy_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_C] = _op_copy_pt_pan_dp;
47 op_copy_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_C] = _op_copy_pt_pas_dp;
48
49 op_copy_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_pt_p_dpan;
50 op_copy_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_pt_pan_dpan;
51 op_copy_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_pt_pas_dpan;
52}
53#endif
54
55/*-----*/
56
57/* copy_rel pixel --> dst */
58
59#ifdef BUILD_C
60static void
61_op_copy_rel_p_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
62 DATA32 *e;
63 UNROLL8_PLD_WHILE(d, l, e,
64 {
65 *d = MUL_SYM(*d >> 24, *s);
66 d++; s++;
67 });
68}
69
70
71#define _op_copy_rel_pas_dp _op_copy_rel_p_dp
72#define _op_copy_rel_pan_dp _op_copy_rel_p_dp
73
74#define _op_copy_rel_p_dpan _op_copy_p_dpan
75#define _op_copy_rel_pan_dpan _op_copy_pan_dpan
76#define _op_copy_rel_pas_dpan _op_copy_pas_dpan
77
78static void
79init_copy_rel_pixel_span_funcs_c(void)
80{
81 op_copy_rel_span_funcs[SP][SM_N][SC_N][DP][CPU_C] = _op_copy_rel_p_dp;
82 op_copy_rel_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_C] = _op_copy_rel_pan_dp;
83 op_copy_rel_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_C] = _op_copy_rel_pas_dp;
84
85 op_copy_rel_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_rel_p_dpan;
86 op_copy_rel_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_rel_pan_dpan;
87 op_copy_rel_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_rel_pas_dpan;
88}
89#endif
90
91#ifdef BUILD_C
92static void
93_op_copy_rel_pt_p_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
94 c = 1 + (*d >> 24);
95 *d = MUL_256(c, s);
96}
97
98
99#define _op_copy_rel_pt_pan_dp _op_copy_rel_pt_p_dp
100#define _op_copy_rel_pt_pas_dp _op_copy_rel_pt_p_dp
101
102#define _op_copy_rel_pt_p_dpan _op_copy_pt_p_dpan
103#define _op_copy_rel_pt_pan_dpan _op_copy_pt_pan_dpan
104#define _op_copy_rel_pt_pas_dpan _op_copy_pt_pas_dpan
105
106static void
107init_copy_rel_pixel_pt_funcs_c(void)
108{
109 op_copy_rel_pt_funcs[SP][SM_N][SC_N][DP][CPU_C] = _op_copy_rel_pt_p_dp;
110 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_C] = _op_copy_rel_pt_pan_dp;
111 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_C] = _op_copy_rel_pt_pas_dp;
112
113 op_copy_rel_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_rel_pt_p_dpan;
114 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_rel_pt_pan_dpan;
115 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_C] = _op_copy_rel_pt_pas_dpan;
116}
117#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_.c
new file mode 100644
index 0000000..12b616d
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_.c
@@ -0,0 +1,236 @@
1/* copy pixel x color --> dst */
2
3#ifdef BUILD_C
4static void
5_op_copy_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e;
7 UNROLL8_PLD_WHILE(d, l, e,
8 {
9 *d = MUL4_SYM(c, *s);
10 d++;
11 s++;
12 });
13}
14
15static void
16_op_copy_p_caa_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
17 DATA32 *e;
18 c = 1 + (c >> 24);
19 UNROLL8_PLD_WHILE(d, l, e,
20 {
21 *d = MUL_256(c, *s);
22 d++;
23 s++;
24 });
25}
26
27
28#define _op_copy_pas_c_dp _op_copy_p_c_dp
29#define _op_copy_pan_c_dp _op_copy_p_c_dp
30#define _op_copy_p_can_dp _op_copy_p_c_dp
31#define _op_copy_pas_can_dp _op_copy_p_can_dp
32#define _op_copy_pan_can_dp _op_copy_p_c_dp
33#define _op_copy_pas_caa_dp _op_copy_p_caa_dp
34#define _op_copy_pan_caa_dp _op_copy_p_caa_dp
35
36#define _op_copy_p_c_dpan _op_copy_p_c_dp
37#define _op_copy_pas_c_dpan _op_copy_pas_c_dp
38#define _op_copy_pan_c_dpan _op_copy_pan_c_dp
39#define _op_copy_p_can_dpan _op_copy_p_can_dp
40#define _op_copy_pas_can_dpan _op_copy_pas_can_dp
41#define _op_copy_pan_can_dpan _op_copy_pan_can_dp
42#define _op_copy_p_caa_dpan _op_copy_p_caa_dp
43#define _op_copy_pas_caa_dpan _op_copy_pas_caa_dp
44#define _op_copy_pan_caa_dpan _op_copy_pan_caa_dp
45
46static void
47init_copy_pixel_color_span_funcs_c(void)
48{
49 op_copy_span_funcs[SP][SM_N][SC][DP][CPU_C] = _op_copy_p_c_dp;
50 op_copy_span_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_copy_pas_c_dp;
51 op_copy_span_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_copy_pan_c_dp;
52 op_copy_span_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_copy_p_can_dp;
53 op_copy_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_copy_pas_can_dp;
54 op_copy_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_copy_pan_can_dp;
55 op_copy_span_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_copy_p_caa_dp;
56 op_copy_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_copy_pas_caa_dp;
57 op_copy_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_copy_pan_caa_dp;
58
59 op_copy_span_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_copy_p_c_dpan;
60 op_copy_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_copy_pas_c_dpan;
61 op_copy_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_copy_pan_c_dpan;
62 op_copy_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_p_can_dpan;
63 op_copy_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_pas_can_dpan;
64 op_copy_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_pan_can_dpan;
65 op_copy_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_p_caa_dpan;
66 op_copy_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_pas_caa_dpan;
67 op_copy_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_pan_caa_dpan;
68}
69#endif
70
71#ifdef BUILD_C
72static void
73_op_copy_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
74 *d = MUL4_SYM(c, s);
75}
76
77static void
78_op_copy_pt_p_caa_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
79 *d = MUL_SYM(c >> 24, s);
80}
81
82
83#define _op_copy_pt_p_can_dp _op_copy_pt_p_c_dp
84#define _op_copy_pt_pan_c_dp _op_copy_pt_p_c_dp
85#define _op_copy_pt_pan_can_dp _op_copy_pt_p_c_dp
86#define _op_copy_pt_pan_caa_dp _op_copy_pt_p_caa_dp
87#define _op_copy_pt_pas_c_dp _op_copy_pt_p_c_dp
88#define _op_copy_pt_pas_can_dp _op_copy_pt_p_can_dp
89#define _op_copy_pt_pas_caa_dp _op_copy_pt_p_caa_dp
90
91#define _op_copy_pt_p_c_dpan _op_copy_pt_p_c_dp
92#define _op_copy_pt_pas_c_dpan _op_copy_pt_pas_c_dp
93#define _op_copy_pt_pan_c_dpan _op_copy_pt_pan_c_dp
94#define _op_copy_pt_p_can_dpan _op_copy_pt_p_can_dp
95#define _op_copy_pt_pas_can_dpan _op_copy_pt_pas_can_dp
96#define _op_copy_pt_pan_can_dpan _op_copy_pt_pan_can_dp
97#define _op_copy_pt_p_caa_dpan _op_copy_pt_p_caa_dp
98#define _op_copy_pt_pas_caa_dpan _op_copy_pt_pas_caa_dp
99#define _op_copy_pt_pan_caa_dpan _op_copy_pt_pan_caa_dp
100
101static void
102init_copy_pixel_color_pt_funcs_c(void)
103{
104 op_copy_pt_funcs[SP][SM_N][SC][DP][CPU_C] = _op_copy_pt_p_c_dp;
105 op_copy_pt_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_copy_pt_pas_c_dp;
106 op_copy_pt_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_copy_pt_pan_c_dp;
107 op_copy_pt_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_copy_pt_p_can_dp;
108 op_copy_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_copy_pt_pas_can_dp;
109 op_copy_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_copy_pt_pan_can_dp;
110 op_copy_pt_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_copy_pt_p_caa_dp;
111 op_copy_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_copy_pt_pas_caa_dp;
112 op_copy_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_copy_pt_pan_caa_dp;
113
114 op_copy_pt_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_copy_pt_p_c_dpan;
115 op_copy_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_copy_pt_pas_c_dpan;
116 op_copy_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_copy_pt_pan_c_dpan;
117 op_copy_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_pt_p_can_dpan;
118 op_copy_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_pt_pas_can_dpan;
119 op_copy_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_pt_pan_can_dpan;
120 op_copy_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_pt_p_caa_dpan;
121 op_copy_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_pt_pas_caa_dpan;
122 op_copy_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_pt_pan_caa_dpan;
123}
124#endif
125
126/*-----*/
127
128/* copy_rel pixel x color --> dst */
129
130#ifdef BUILD_C
131static void
132_op_copy_rel_p_c_dp(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
133 DATA32 *e;
134 UNROLL8_PLD_WHILE(d, l, e,
135 {
136 DATA32 cs = MUL4_SYM(c, *s);
137 *d = MUL_SYM(*d >> 24, cs);
138 d++;
139 s++;
140 });
141}
142
143#define _op_copy_rel_pas_c_dp _op_copy_rel_p_c_dp
144#define _op_copy_rel_pan_c_dp _op_copy_rel_p_c_dp
145#define _op_copy_rel_p_can_dp _op_copy_rel_p_c_dp
146#define _op_copy_rel_pas_can_dp _op_copy_rel_pas_c_dp
147#define _op_copy_rel_pan_can_dp _op_copy_rel_p_c_dp
148#define _op_copy_rel_p_caa_dp _op_copy_rel_p_c_dp
149#define _op_copy_rel_pas_caa_dp _op_copy_rel_p_c_dp
150#define _op_copy_rel_pan_caa_dp _op_copy_rel_p_c_dp
151
152#define _op_copy_rel_p_c_dpan _op_copy_p_c_dpan
153#define _op_copy_rel_pas_c_dpan _op_copy_pas_c_dpan
154#define _op_copy_rel_pan_c_dpan _op_copy_pan_c_dpan
155#define _op_copy_rel_p_can_dpan _op_copy_p_can_dpan
156#define _op_copy_rel_pas_can_dpan _op_copy_pas_can_dpan
157#define _op_copy_rel_pan_can_dpan _op_copy_pan_can_dpan
158#define _op_copy_rel_p_caa_dpan _op_copy_p_caa_dpan
159#define _op_copy_rel_pas_caa_dpan _op_copy_pas_caa_dpan
160#define _op_copy_rel_pan_caa_dpan _op_copy_pan_caa_dpan
161
162static void
163init_copy_rel_pixel_color_span_funcs_c(void)
164{
165 op_copy_rel_span_funcs[SP][SM_N][SC][DP][CPU_C] = _op_copy_rel_p_c_dp;
166 op_copy_rel_span_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_copy_rel_pas_c_dp;
167 op_copy_rel_span_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_copy_rel_pan_c_dp;
168 op_copy_rel_span_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_copy_rel_p_can_dp;
169 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_copy_rel_pas_can_dp;
170 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_copy_rel_pan_can_dp;
171 op_copy_rel_span_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_copy_rel_p_caa_dp;
172 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_copy_rel_pas_caa_dp;
173 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_copy_rel_pan_caa_dp;
174
175 op_copy_rel_span_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_copy_rel_p_c_dpan;
176 op_copy_rel_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_copy_rel_pas_c_dpan;
177 op_copy_rel_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_copy_rel_pan_c_dpan;
178 op_copy_rel_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_rel_p_can_dpan;
179 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_rel_pas_can_dpan;
180 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_rel_pan_can_dpan;
181 op_copy_rel_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_rel_p_caa_dpan;
182 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_rel_pas_caa_dpan;
183 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_rel_pan_caa_dpan;
184}
185#endif
186
187#ifdef BUILD_C
188static void
189_op_copy_rel_pt_p_c_dp(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
190 s = MUL4_SYM(c, s);
191 *d = MUL_SYM(*d >> 24, s);
192}
193
194#define _op_copy_rel_pt_pas_c_dp _op_copy_rel_pt_p_c_dp
195#define _op_copy_rel_pt_pan_c_dp _op_copy_rel_pt_p_c_dp
196#define _op_copy_rel_pt_p_can_dp _op_copy_rel_pt_p_c_dp
197#define _op_copy_rel_pt_pas_can_dp _op_copy_rel_pt_p_can_dp
198#define _op_copy_rel_pt_pan_can_dp _op_copy_rel_pt_p_c_dp
199#define _op_copy_rel_pt_p_caa_dp _op_copy_rel_pt_p_c_dp
200#define _op_copy_rel_pt_pas_caa_dp _op_copy_rel_pt_p_caa_dp
201#define _op_copy_rel_pt_pan_caa_dp _op_copy_rel_pt_p_caa_dp
202
203#define _op_copy_rel_pt_p_c_dpan _op_copy_pt_p_c_dpan
204#define _op_copy_rel_pt_pas_c_dpan _op_copy_pt_pas_c_dpan
205#define _op_copy_rel_pt_pan_c_dpan _op_copy_pt_pan_c_dpan
206#define _op_copy_rel_pt_p_can_dpan _op_copy_pt_p_can_dpan
207#define _op_copy_rel_pt_pas_can_dpan _op_copy_pt_pas_can_dpan
208#define _op_copy_rel_pt_pan_can_dpan _op_copy_pt_pan_can_dpan
209#define _op_copy_rel_pt_p_caa_dpan _op_copy_pt_p_caa_dpan
210#define _op_copy_rel_pt_pas_caa_dpan _op_copy_pt_pas_caa_dpan
211#define _op_copy_rel_pt_pan_caa_dpan _op_copy_pt_pan_caa_dpan
212
213static void
214init_copy_rel_pixel_color_pt_funcs_c(void)
215{
216 op_copy_rel_pt_funcs[SP][SM_N][SC][DP][CPU_C] = _op_copy_rel_pt_p_c_dp;
217 op_copy_rel_pt_funcs[SP_AS][SM_N][SC][DP][CPU_C] = _op_copy_rel_pt_pas_c_dp;
218 op_copy_rel_pt_funcs[SP_AN][SM_N][SC][DP][CPU_C] = _op_copy_rel_pt_pan_c_dp;
219 op_copy_rel_pt_funcs[SP][SM_N][SC_AN][DP][CPU_C] = _op_copy_rel_pt_p_can_dp;
220 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_C] = _op_copy_rel_pt_pas_can_dp;
221 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_C] = _op_copy_rel_pt_pan_can_dp;
222 op_copy_rel_pt_funcs[SP][SM_N][SC_AA][DP][CPU_C] = _op_copy_rel_pt_p_caa_dp;
223 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_C] = _op_copy_rel_pt_pas_caa_dp;
224 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_C] = _op_copy_rel_pt_pan_caa_dp;
225
226 op_copy_rel_pt_funcs[SP][SM_N][SC][DP_AN][CPU_C] = _op_copy_rel_pt_p_c_dpan;
227 op_copy_rel_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_C] = _op_copy_rel_pt_pas_c_dpan;
228 op_copy_rel_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_C] = _op_copy_rel_pt_pan_c_dpan;
229 op_copy_rel_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_rel_pt_p_can_dpan;
230 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_rel_pt_pas_can_dpan;
231 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_C] = _op_copy_rel_pt_pan_can_dpan;
232 op_copy_rel_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_rel_pt_p_caa_dpan;
233 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_rel_pt_pas_caa_dpan;
234 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_C] = _op_copy_rel_pt_pan_caa_dpan;
235}
236#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_i386.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_i386.c
new file mode 100644
index 0000000..fb5bc70
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_i386.c
@@ -0,0 +1,255 @@
1/* copy pixel x color --> dst */
2
3#ifdef BUILD_MMX
4static void
5_op_copy_p_c_dp_mmx(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 DATA32 *e = d + l;
7 pxor_r2r(mm0, mm0);
8 MOV_P2R(c, mm3, mm0)
9 MOV_A2R(ALPHA_255, mm5)
10 while (d < e) {
11 MOV_P2R(*s, mm2, mm0)
12 MUL4_SYM_R2R(mm3, mm2, mm5);
13 MOV_R2P(mm2, *d, mm0)
14 s++; d++;
15 }
16}
17
18
19static void
20_op_copy_p_caa_dp_mmx(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
21 DATA32 *e = d + l;
22 c = 1 + (c >> 24);
23 MOV_A2R(c, mm3)
24 pxor_r2r(mm0, mm0);
25 while (d < e) {
26 MOV_P2R(*s, mm2, mm0)
27 MUL4_256_R2R(mm3, mm2);
28 MOV_R2P(mm2, *d, mm0)
29 s++; d++;
30 }
31}
32
33
34#define _op_copy_pas_c_dp_mmx _op_copy_p_c_dp_mmx
35#define _op_copy_pan_c_dp_mmx _op_copy_p_c_dp_mmx
36#define _op_copy_p_can_dp_mmx _op_copy_p_c_dp_mmx
37#define _op_copy_pas_can_dp_mmx _op_copy_pas_c_dp_mmx
38#define _op_copy_pan_can_dp_mmx _op_copy_pan_c_dp_mmx
39#define _op_copy_pas_caa_dp_mmx _op_copy_p_caa_dp_mmx
40#define _op_copy_pan_caa_dp_mmx _op_copy_p_caa_dp_mmx
41
42#define _op_copy_p_c_dpan_mmx _op_copy_p_c_dp_mmx
43#define _op_copy_pas_c_dpan_mmx _op_copy_pas_c_dp_mmx
44#define _op_copy_pan_c_dpan_mmx _op_copy_pan_c_dp_mmx
45#define _op_copy_p_can_dpan_mmx _op_copy_p_can_dp_mmx
46#define _op_copy_pas_can_dpan_mmx _op_copy_pas_can_dp_mmx
47#define _op_copy_pan_can_dpan_mmx _op_copy_pan_can_dp_mmx
48#define _op_copy_p_caa_dpan_mmx _op_copy_p_caa_dp_mmx
49#define _op_copy_pas_caa_dpan_mmx _op_copy_pas_caa_dp_mmx
50#define _op_copy_pan_caa_dpan_mmx _op_copy_pan_caa_dp_mmx
51
52static void
53init_copy_pixel_color_span_funcs_mmx(void)
54{
55 op_copy_span_funcs[SP][SM_N][SC][DP][CPU_MMX] = _op_copy_p_c_dp_mmx;
56 op_copy_span_funcs[SP_AS][SM_N][SC][DP][CPU_MMX] = _op_copy_pas_c_dp_mmx;
57 op_copy_span_funcs[SP_AN][SM_N][SC][DP][CPU_MMX] = _op_copy_pan_c_dp_mmx;
58 op_copy_span_funcs[SP][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_p_can_dp_mmx;
59 op_copy_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_pas_can_dp_mmx;
60 op_copy_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_pan_can_dp_mmx;
61 op_copy_span_funcs[SP][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_p_caa_dp_mmx;
62 op_copy_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_pas_caa_dp_mmx;
63 op_copy_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_pan_caa_dp_mmx;
64
65 op_copy_span_funcs[SP][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_p_c_dpan_mmx;
66 op_copy_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_pas_c_dpan_mmx;
67 op_copy_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_pan_c_dpan_mmx;
68 op_copy_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_p_can_dpan_mmx;
69 op_copy_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_pas_can_dpan_mmx;
70 op_copy_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_pan_can_dpan_mmx;
71 op_copy_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_p_caa_dpan_mmx;
72 op_copy_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_pas_caa_dpan_mmx;
73 op_copy_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_pan_caa_dpan_mmx;
74}
75#endif
76
77#ifdef BUILD_MMX
78static void
79_op_copy_pt_p_c_dp_mmx(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
80 pxor_r2r(mm0, mm0);
81 MOV_A2R(ALPHA_255, mm5)
82 MOV_P2R(c, mm2, mm0)
83 MOV_P2R(s, mm2, mm0)
84 MUL4_SYM_R2R(mm3, mm2, mm5);
85 MOV_R2P(mm2, *d, mm0)
86}
87
88#define _op_copy_pt_pas_c_dp_mmx _op_copy_pt_p_c_dp_mmx
89#define _op_copy_pt_pan_c_dp_mmx _op_copy_pt_p_c_dp_mmx
90#define _op_copy_pt_p_can_dp_mmx _op_copy_pt_p_c_dp_mmx
91#define _op_copy_pt_pas_can_dp_mmx _op_copy_pt_p_c_dp_mmx
92#define _op_copy_pt_pan_can_dp_mmx _op_copy_pt_p_c_dp_mmx
93#define _op_copy_pt_p_caa_dp_mmx _op_copy_pt_p_c_dp_mmx
94#define _op_copy_pt_pas_caa_dp_mmx _op_copy_pt_p_c_dp_mmx
95#define _op_copy_pt_pan_caa_dp_mmx _op_copy_pt_p_c_dp_mmx
96
97#define _op_copy_pt_p_c_dpan_mmx _op_copy_pt_p_c_dp_mmx
98#define _op_copy_pt_pas_c_dpan_mmx _op_copy_pt_pas_c_dp_mmx
99#define _op_copy_pt_pan_c_dpan_mmx _op_copy_pt_pan_c_dp_mmx
100#define _op_copy_pt_p_can_dpan_mmx _op_copy_pt_p_can_dp_mmx
101#define _op_copy_pt_pas_can_dpan_mmx _op_copy_pt_pas_can_dp_mmx
102#define _op_copy_pt_pan_can_dpan_mmx _op_copy_pt_pan_can_dp_mmx
103#define _op_copy_pt_p_caa_dpan_mmx _op_copy_pt_p_caa_dp_mmx
104#define _op_copy_pt_pas_caa_dpan_mmx _op_copy_pt_pas_caa_dp_mmx
105#define _op_copy_pt_pan_caa_dpan_mmx _op_copy_pt_pan_caa_dp_mmx
106
107static void
108init_copy_pixel_color_pt_funcs_mmx(void)
109{
110 op_copy_pt_funcs[SP][SM_N][SC][DP][CPU_MMX] = _op_copy_pt_p_c_dp_mmx;
111 op_copy_pt_funcs[SP_AS][SM_N][SC][DP][CPU_MMX] = _op_copy_pt_pas_c_dp_mmx;
112 op_copy_pt_funcs[SP_AN][SM_N][SC][DP][CPU_MMX] = _op_copy_pt_pan_c_dp_mmx;
113 op_copy_pt_funcs[SP][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_pt_p_can_dp_mmx;
114 op_copy_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_pt_pas_can_dp_mmx;
115 op_copy_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_pt_pan_can_dp_mmx;
116 op_copy_pt_funcs[SP][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_pt_p_caa_dp_mmx;
117 op_copy_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_pt_pas_caa_dp_mmx;
118 op_copy_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_pt_pan_caa_dp_mmx;
119
120 op_copy_pt_funcs[SP][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_pt_p_c_dpan_mmx;
121 op_copy_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_pt_pas_c_dpan_mmx;
122 op_copy_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_pt_pan_c_dpan_mmx;
123 op_copy_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_pt_p_can_dpan_mmx;
124 op_copy_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_pt_pas_can_dpan_mmx;
125 op_copy_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_pt_pan_can_dpan_mmx;
126 op_copy_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_pt_p_caa_dpan_mmx;
127 op_copy_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_pt_pas_caa_dpan_mmx;
128 op_copy_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_pt_pan_caa_dpan_mmx;
129}
130#endif
131
132/*-----*/
133
134/* copy_rel pixel x color --> dst */
135
136#ifdef BUILD_MMX
137static void
138_op_copy_rel_p_c_dp_mmx(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
139 DATA32 *e = d + l;
140 pxor_r2r(mm0, mm0);
141 MOV_P2R(c, mm3, mm0)
142 MOV_A2R(ALPHA_255, mm5)
143 while (d < e) {
144 MOV_PA2R(*d, mm1)
145 MOV_P2R(*s, mm2, mm0)
146 MUL4_SYM_R2R(mm3, mm2, mm5);
147 MUL4_SYM_R2R(mm2, mm1, mm5);
148 MOV_R2P(mm1, *d, mm0)
149 s++; d++;
150 }
151}
152
153
154#define _op_copy_rel_pas_c_dp_mmx _op_copy_rel_p_c_dp_mmx
155#define _op_copy_rel_pan_c_dp_mmx _op_copy_rel_p_c_dp_mmx
156#define _op_copy_rel_p_can_dp_mmx _op_copy_rel_p_c_dp_mmx
157#define _op_copy_rel_pas_can_dp_mmx _op_copy_rel_p_c_dp_mmx
158#define _op_copy_rel_pan_can_dp_mmx _op_copy_rel_p_c_dp_mmx
159#define _op_copy_rel_p_caa_dp_mmx _op_copy_rel_p_c_dp_mmx
160#define _op_copy_rel_pas_caa_dp_mmx _op_copy_rel_p_c_dp_mmx
161#define _op_copy_rel_pan_caa_dp_mmx _op_copy_rel_p_c_dp_mmx
162
163#define _op_copy_rel_p_c_dpan_mmx _op_copy_p_c_dpan_mmx
164#define _op_copy_rel_pas_c_dpan_mmx _op_copy_pas_c_dpan_mmx
165#define _op_copy_rel_pan_c_dpan_mmx _op_copy_pan_c_dpan_mmx
166#define _op_copy_rel_p_can_dpan_mmx _op_copy_p_can_dpan_mmx
167#define _op_copy_rel_pas_can_dpan_mmx _op_copy_pas_can_dpan_mmx
168#define _op_copy_rel_pan_can_dpan_mmx _op_copy_pan_can_dpan_mmx
169#define _op_copy_rel_p_caa_dpan_mmx _op_copy_p_caa_dpan_mmx
170#define _op_copy_rel_pas_caa_dpan_mmx _op_copy_pas_caa_dpan_mmx
171#define _op_copy_rel_pan_caa_dpan_mmx _op_copy_pan_caa_dpan_mmx
172
173static void
174init_copy_rel_pixel_color_span_funcs_mmx(void)
175{
176 op_copy_rel_span_funcs[SP][SM_N][SC][DP][CPU_MMX] = _op_copy_rel_p_c_dp_mmx;
177 op_copy_rel_span_funcs[SP_AS][SM_N][SC][DP][CPU_MMX] = _op_copy_rel_pas_c_dp_mmx;
178 op_copy_rel_span_funcs[SP_AN][SM_N][SC][DP][CPU_MMX] = _op_copy_rel_pan_c_dp_mmx;
179 op_copy_rel_span_funcs[SP][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_rel_p_can_dp_mmx;
180 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_rel_pas_can_dp_mmx;
181 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_rel_pan_can_dp_mmx;
182 op_copy_rel_span_funcs[SP][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_rel_p_caa_dp_mmx;
183 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_rel_pas_caa_dp_mmx;
184 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_rel_pan_caa_dp_mmx;
185
186 op_copy_rel_span_funcs[SP][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_rel_p_c_dpan_mmx;
187 op_copy_rel_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_rel_pas_c_dpan_mmx;
188 op_copy_rel_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_rel_pan_c_dpan_mmx;
189 op_copy_rel_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_rel_p_can_dpan_mmx;
190 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_rel_pas_can_dpan_mmx;
191 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_rel_pan_can_dpan_mmx;
192 op_copy_rel_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_rel_p_caa_dpan_mmx;
193 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_rel_pas_caa_dpan_mmx;
194 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_rel_pan_caa_dpan_mmx;
195}
196#endif
197
198#ifdef BUILD_MMX
199static void
200_op_copy_rel_pt_p_c_dp_mmx(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
201 pxor_r2r(mm0, mm0);
202 MOV_P2R(c, mm3, mm0)
203 MOV_A2R(ALPHA_255, mm5)
204 MOV_PA2R(*d, mm1)
205 MOV_P2R(s, mm2, mm0)
206 MUL4_SYM_R2R(mm3, mm2, mm5);
207 MUL4_SYM_R2R(mm2, mm1, mm5);
208 MOV_R2P(mm1, *d, mm0)
209}
210
211
212#define _op_copy_rel_pt_pas_c_dp_mmx _op_copy_rel_pt_p_c_dp_mmx
213#define _op_copy_rel_pt_pan_c_dp_mmx _op_copy_rel_pt_p_c_dp_mmx
214#define _op_copy_rel_pt_p_can_dp_mmx _op_copy_rel_pt_p_c_dp_mmx
215#define _op_copy_rel_pt_pas_can_dp_mmx _op_copy_rel_pt_p_c_dp_mmx
216#define _op_copy_rel_pt_pan_can_dp_mmx _op_copy_rel_pt_p_c_dp_mmx
217#define _op_copy_rel_pt_p_caa_dp_mmx _op_copy_rel_pt_p_c_dp_mmx
218#define _op_copy_rel_pt_pas_caa_dp_mmx _op_copy_rel_pt_p_c_dp_mmx
219#define _op_copy_rel_pt_pan_caa_dp_mmx _op_copy_rel_pt_p_c_dp_mmx
220
221#define _op_copy_rel_pt_p_c_dpan_mmx _op_copy_pt_p_c_dpan_mmx
222#define _op_copy_rel_pt_pas_c_dpan_mmx _op_copy_pt_pas_c_dpan_mmx
223#define _op_copy_rel_pt_pan_c_dpan_mmx _op_copy_pt_pan_c_dpan_mmx
224#define _op_copy_rel_pt_p_can_dpan_mmx _op_copy_pt_p_can_dpan_mmx
225#define _op_copy_rel_pt_pas_can_dpan_mmx _op_copy_pt_pas_can_dpan_mmx
226#define _op_copy_rel_pt_pan_can_dpan_mmx _op_copy_pt_pan_can_dpan_mmx
227#define _op_copy_rel_pt_p_caa_dpan_mmx _op_copy_pt_p_caa_dpan_mmx
228#define _op_copy_rel_pt_pas_caa_dpan_mmx _op_copy_pt_pas_caa_dpan_mmx
229#define _op_copy_rel_pt_pan_caa_dpan_mmx _op_copy_pt_pan_caa_dpan_mmx
230
231
232static void
233init_copy_rel_pixel_color_pt_funcs_mmx(void)
234{
235 op_copy_rel_pt_funcs[SP][SM_N][SC][DP][CPU_MMX] = _op_copy_rel_pt_p_c_dp_mmx;
236 op_copy_rel_pt_funcs[SP_AS][SM_N][SC][DP][CPU_MMX] = _op_copy_rel_pt_pas_c_dp_mmx;
237 op_copy_rel_pt_funcs[SP_AN][SM_N][SC][DP][CPU_MMX] = _op_copy_rel_pt_pan_c_dp_mmx;
238 op_copy_rel_pt_funcs[SP][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_rel_pt_p_can_dp_mmx;
239 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_rel_pt_pas_can_dp_mmx;
240 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_MMX] = _op_copy_rel_pt_pan_can_dp_mmx;
241 op_copy_rel_pt_funcs[SP][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_rel_pt_p_caa_dp_mmx;
242 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_rel_pt_pas_caa_dp_mmx;
243 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_MMX] = _op_copy_rel_pt_pan_caa_dp_mmx;
244
245 op_copy_rel_pt_funcs[SP][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_rel_pt_p_c_dpan_mmx;
246 op_copy_rel_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_rel_pt_pas_c_dpan_mmx;
247 op_copy_rel_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_MMX] = _op_copy_rel_pt_pan_c_dpan_mmx;
248 op_copy_rel_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_rel_pt_p_can_dpan_mmx;
249 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_rel_pt_pas_can_dpan_mmx;
250 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_MMX] = _op_copy_rel_pt_pan_can_dpan_mmx;
251 op_copy_rel_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_rel_pt_p_caa_dpan_mmx;
252 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_rel_pt_pas_caa_dpan_mmx;
253 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_MMX] = _op_copy_rel_pt_pan_caa_dpan_mmx;
254}
255#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c
new file mode 100644
index 0000000..f8a1e79
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c
@@ -0,0 +1,238 @@
1/* copy pixel x color --> dst */
2
3#ifdef BUILD_NEON
4static void
5_op_copy_p_c_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
6 // FIXME: neon-it
7 DATA32 *e;
8 UNROLL8_PLD_WHILE(d, l, e,
9 {
10 *d = MUL4_SYM(c, *s);
11 d++;
12 s++;
13 });
14}
15
16
17static void
18_op_copy_p_caa_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { // FIXME: neon-it
19 // FIXME: neon-it
20 DATA32 *e;
21 c = 1 + (c >> 24);
22 UNROLL8_PLD_WHILE(d, l, e,
23 {
24 *d = MUL_256(c, *s);
25 d++;
26 s++;
27 });
28}
29
30
31#define _op_copy_pas_c_dp_neon _op_copy_p_c_dp_neon
32#define _op_copy_pan_c_dp_neon _op_copy_p_c_dp_neon
33#define _op_copy_p_can_dp_neon _op_copy_p_c_dp_neon
34#define _op_copy_pas_can_dp_neon _op_copy_pas_c_dp_neon
35#define _op_copy_pan_can_dp_neon _op_copy_pan_c_dp_neon
36#define _op_copy_pas_caa_dp_neon _op_copy_p_caa_dp_neon
37#define _op_copy_pan_caa_dp_neon _op_copy_p_caa_dp_neon
38
39#define _op_copy_p_c_dpan_neon _op_copy_p_c_dp_neon
40#define _op_copy_pas_c_dpan_neon _op_copy_pas_c_dp_neon
41#define _op_copy_pan_c_dpan_neon _op_copy_pan_c_dp_neon
42#define _op_copy_p_can_dpan_neon _op_copy_p_can_dp_neon
43#define _op_copy_pas_can_dpan_neon _op_copy_pas_can_dp_neon
44#define _op_copy_pan_can_dpan_neon _op_copy_pan_can_dp_neon
45#define _op_copy_p_caa_dpan_neon _op_copy_p_caa_dp_neon
46#define _op_copy_pas_caa_dpan_neon _op_copy_pas_caa_dp_neon
47#define _op_copy_pan_caa_dpan_neon _op_copy_pan_caa_dp_neon
48
49static void
50init_copy_pixel_color_span_funcs_neon(void)
51{
52 op_copy_span_funcs[SP][SM_N][SC][DP][CPU_NEON] = _op_copy_p_c_dp_neon;
53 op_copy_span_funcs[SP_AS][SM_N][SC][DP][CPU_NEON] = _op_copy_pas_c_dp_neon;
54 op_copy_span_funcs[SP_AN][SM_N][SC][DP][CPU_NEON] = _op_copy_pan_c_dp_neon;
55 op_copy_span_funcs[SP][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_p_can_dp_neon;
56 op_copy_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pas_can_dp_neon;
57 op_copy_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pan_can_dp_neon;
58 op_copy_span_funcs[SP][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_p_caa_dp_neon;
59 op_copy_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pas_caa_dp_neon;
60 op_copy_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pan_caa_dp_neon;
61
62 op_copy_span_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_p_c_dpan_neon;
63 op_copy_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pas_c_dpan_neon;
64 op_copy_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pan_c_dpan_neon;
65 op_copy_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_p_can_dpan_neon;
66 op_copy_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pas_can_dpan_neon;
67 op_copy_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pan_can_dpan_neon;
68 op_copy_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_p_caa_dpan_neon;
69 op_copy_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pas_caa_dpan_neon;
70 op_copy_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pan_caa_dpan_neon;
71}
72#endif
73
74#ifdef BUILD_NEON
75static void
76_op_copy_pt_p_c_dp_neon(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
77 *d = MUL4_SYM(c, s);
78}
79
80#define _op_copy_pt_pas_c_dp_neon _op_copy_pt_p_c_dp_neon
81#define _op_copy_pt_pan_c_dp_neon _op_copy_pt_p_c_dp_neon
82#define _op_copy_pt_p_can_dp_neon _op_copy_pt_p_c_dp_neon
83#define _op_copy_pt_pas_can_dp_neon _op_copy_pt_p_c_dp_neon
84#define _op_copy_pt_pan_can_dp_neon _op_copy_pt_p_c_dp_neon
85#define _op_copy_pt_p_caa_dp_neon _op_copy_pt_p_c_dp_neon
86#define _op_copy_pt_pas_caa_dp_neon _op_copy_pt_p_c_dp_neon
87#define _op_copy_pt_pan_caa_dp_neon _op_copy_pt_p_c_dp_neon
88
89#define _op_copy_pt_p_c_dpan_neon _op_copy_pt_p_c_dp_neon
90#define _op_copy_pt_pas_c_dpan_neon _op_copy_pt_pas_c_dp_neon
91#define _op_copy_pt_pan_c_dpan_neon _op_copy_pt_pan_c_dp_neon
92#define _op_copy_pt_p_can_dpan_neon _op_copy_pt_p_can_dp_neon
93#define _op_copy_pt_pas_can_dpan_neon _op_copy_pt_pas_can_dp_neon
94#define _op_copy_pt_pan_can_dpan_neon _op_copy_pt_pan_can_dp_neon
95#define _op_copy_pt_p_caa_dpan_neon _op_copy_pt_p_caa_dp_neon
96#define _op_copy_pt_pas_caa_dpan_neon _op_copy_pt_pas_caa_dp_neon
97#define _op_copy_pt_pan_caa_dpan_neon _op_copy_pt_pan_caa_dp_neon
98
99static void
100init_copy_pixel_color_pt_funcs_neon(void)
101{
102 op_copy_pt_funcs[SP][SM_N][SC][DP][CPU_NEON] = _op_copy_pt_p_c_dp_neon;
103 op_copy_pt_funcs[SP_AS][SM_N][SC][DP][CPU_NEON] = _op_copy_pt_pas_c_dp_neon;
104 op_copy_pt_funcs[SP_AN][SM_N][SC][DP][CPU_NEON] = _op_copy_pt_pan_c_dp_neon;
105 op_copy_pt_funcs[SP][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pt_p_can_dp_neon;
106 op_copy_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pt_pas_can_dp_neon;
107 op_copy_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pt_pan_can_dp_neon;
108 op_copy_pt_funcs[SP][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pt_p_caa_dp_neon;
109 op_copy_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pt_pas_caa_dp_neon;
110 op_copy_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pt_pan_caa_dp_neon;
111
112 op_copy_pt_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pt_p_c_dpan_neon;
113 op_copy_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pt_pas_c_dpan_neon;
114 op_copy_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pt_pan_c_dpan_neon;
115 op_copy_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pt_p_can_dpan_neon;
116 op_copy_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pt_pas_can_dpan_neon;
117 op_copy_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pt_pan_can_dpan_neon;
118 op_copy_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pt_p_caa_dpan_neon;
119 op_copy_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pt_pas_caa_dpan_neon;
120 op_copy_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pt_pan_caa_dpan_neon;
121}
122#endif
123
124/*-----*/
125
126/* copy_rel pixel x color --> dst */
127
128#ifdef BUILD_NEON
129static void
130_op_copy_rel_p_c_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) {
131 // FIXME: neon-it
132 DATA32 *e;
133 UNROLL8_PLD_WHILE(d, l, e,
134 {
135 DATA32 cs = MUL4_SYM(c, *s);
136 *d = MUL_SYM(*d >> 24, cs);
137 d++;
138 s++;
139 });
140}
141
142
143#define _op_copy_rel_pas_c_dp_neon _op_copy_rel_p_c_dp_neon
144#define _op_copy_rel_pan_c_dp_neon _op_copy_rel_p_c_dp_neon
145#define _op_copy_rel_p_can_dp_neon _op_copy_rel_p_c_dp_neon
146#define _op_copy_rel_pas_can_dp_neon _op_copy_rel_p_c_dp_neon
147#define _op_copy_rel_pan_can_dp_neon _op_copy_rel_p_c_dp_neon
148#define _op_copy_rel_p_caa_dp_neon _op_copy_rel_p_c_dp_neon
149#define _op_copy_rel_pas_caa_dp_neon _op_copy_rel_p_c_dp_neon
150#define _op_copy_rel_pan_caa_dp_neon _op_copy_rel_p_c_dp_neon
151
152#define _op_copy_rel_p_c_dpan_neon _op_copy_p_c_dpan_neon
153#define _op_copy_rel_pas_c_dpan_neon _op_copy_pas_c_dpan_neon
154#define _op_copy_rel_pan_c_dpan_neon _op_copy_pan_c_dpan_neon
155#define _op_copy_rel_p_can_dpan_neon _op_copy_p_can_dpan_neon
156#define _op_copy_rel_pas_can_dpan_neon _op_copy_pas_can_dpan_neon
157#define _op_copy_rel_pan_can_dpan_neon _op_copy_pan_can_dpan_neon
158#define _op_copy_rel_p_caa_dpan_neon _op_copy_p_caa_dpan_neon
159#define _op_copy_rel_pas_caa_dpan_neon _op_copy_pas_caa_dpan_neon
160#define _op_copy_rel_pan_caa_dpan_neon _op_copy_pan_caa_dpan_neon
161
162static void
163init_copy_rel_pixel_color_span_funcs_neon(void)
164{
165 op_copy_rel_span_funcs[SP][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_p_c_dp_neon;
166 op_copy_rel_span_funcs[SP_AS][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pas_c_dp_neon;
167 op_copy_rel_span_funcs[SP_AN][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pan_c_dp_neon;
168 op_copy_rel_span_funcs[SP][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_p_can_dp_neon;
169 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pas_can_dp_neon;
170 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pan_can_dp_neon;
171 op_copy_rel_span_funcs[SP][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_p_caa_dp_neon;
172 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pas_caa_dp_neon;
173 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pan_caa_dp_neon;
174
175 op_copy_rel_span_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_p_c_dpan_neon;
176 op_copy_rel_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pas_c_dpan_neon;
177 op_copy_rel_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pan_c_dpan_neon;
178 op_copy_rel_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_p_can_dpan_neon;
179 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pas_can_dpan_neon;
180 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pan_can_dpan_neon;
181 op_copy_rel_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_p_caa_dpan_neon;
182 op_copy_rel_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pas_caa_dpan_neon;
183 op_copy_rel_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pan_caa_dpan_neon;
184}
185#endif
186
187#ifdef BUILD_NEON
188static void
189_op_copy_rel_pt_p_c_dp_neon(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
190 s = MUL4_SYM(c, s);
191 *d = MUL_SYM(*d >> 24, s);
192}
193
194
195#define _op_copy_rel_pt_pas_c_dp_neon _op_copy_rel_pt_p_c_dp_neon
196#define _op_copy_rel_pt_pan_c_dp_neon _op_copy_rel_pt_p_c_dp_neon
197#define _op_copy_rel_pt_p_can_dp_neon _op_copy_rel_pt_p_c_dp_neon
198#define _op_copy_rel_pt_pas_can_dp_neon _op_copy_rel_pt_p_c_dp_neon
199#define _op_copy_rel_pt_pan_can_dp_neon _op_copy_rel_pt_p_c_dp_neon
200#define _op_copy_rel_pt_p_caa_dp_neon _op_copy_rel_pt_p_c_dp_neon
201#define _op_copy_rel_pt_pas_caa_dp_neon _op_copy_rel_pt_p_c_dp_neon
202#define _op_copy_rel_pt_pan_caa_dp_neon _op_copy_rel_pt_p_c_dp_neon
203
204#define _op_copy_rel_pt_p_c_dpan_neon _op_copy_pt_p_c_dpan_neon
205#define _op_copy_rel_pt_pas_c_dpan_neon _op_copy_pt_pas_c_dpan_neon
206#define _op_copy_rel_pt_pan_c_dpan_neon _op_copy_pt_pan_c_dpan_neon
207#define _op_copy_rel_pt_p_can_dpan_neon _op_copy_pt_p_can_dpan_neon
208#define _op_copy_rel_pt_pas_can_dpan_neon _op_copy_pt_pas_can_dpan_neon
209#define _op_copy_rel_pt_pan_can_dpan_neon _op_copy_pt_pan_can_dpan_neon
210#define _op_copy_rel_pt_p_caa_dpan_neon _op_copy_pt_p_caa_dpan_neon
211#define _op_copy_rel_pt_pas_caa_dpan_neon _op_copy_pt_pas_caa_dpan_neon
212#define _op_copy_rel_pt_pan_caa_dpan_neon _op_copy_pt_pan_caa_dpan_neon
213
214
215static void
216init_copy_rel_pixel_color_pt_funcs_neon(void)
217{
218 op_copy_rel_pt_funcs[SP][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pt_p_c_dp_neon;
219 op_copy_rel_pt_funcs[SP_AS][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pt_pas_c_dp_neon;
220 op_copy_rel_pt_funcs[SP_AN][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pt_pan_c_dp_neon;
221 op_copy_rel_pt_funcs[SP][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pt_p_can_dp_neon;
222 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pt_pas_can_dp_neon;
223 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pt_pan_can_dp_neon;
224 op_copy_rel_pt_funcs[SP][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pt_p_caa_dp_neon;
225 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pt_pas_caa_dp_neon;
226 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pt_pan_caa_dp_neon;
227
228 op_copy_rel_pt_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pt_p_c_dpan_neon;
229 op_copy_rel_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pt_pas_c_dpan_neon;
230 op_copy_rel_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pt_pan_c_dpan_neon;
231 op_copy_rel_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pt_p_can_dpan_neon;
232 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pt_pas_can_dpan_neon;
233 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pt_pan_can_dpan_neon;
234 op_copy_rel_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pt_p_caa_dpan_neon;
235 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pt_pas_caa_dpan_neon;
236 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pt_pan_caa_dpan_neon;
237}
238#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_i386.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_i386.c
new file mode 100644
index 0000000..b03022b
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_i386.c
@@ -0,0 +1,131 @@
1/* copy pixel --> dst */
2
3#ifdef BUILD_MMX
4static void
5_op_copy_p_dp_mmx(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
6 DATA32 *e = d + l - 15;
7 for (; d < e; d+=16, s+=16) {
8 MOVE_16DWORDS_MMX(s, d);
9 }
10 e+=15;
11 for (; d < e; d++, s++) {
12 *d = *s;
13 }
14}
15
16#define _op_copy_pan_dp_mmx _op_copy_p_dp_mmx
17#define _op_copy_pas_dp_mmx _op_copy_p_dp_mmx
18
19#define _op_copy_p_dpan_mmx _op_copy_p_dp_mmx
20#define _op_copy_pan_dpan_mmx _op_copy_pan_dp_mmx
21#define _op_copy_pas_dpan_mmx _op_copy_pas_dp_mmx
22
23static void
24init_copy_pixel_span_funcs_mmx(void)
25{
26 op_copy_span_funcs[SP][SM_N][SC_N][DP][CPU_MMX] = _op_copy_p_dp_mmx;
27 op_copy_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_MMX] = _op_copy_pan_dp_mmx;
28 op_copy_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_MMX] = _op_copy_pas_dp_mmx;
29
30 op_copy_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_p_dpan_mmx;
31 op_copy_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_pan_dpan_mmx;
32 op_copy_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_pas_dpan_mmx;
33}
34#endif
35
36#ifdef BUILD_MMX
37static void
38_op_copy_pt_p_dp_mmx(DATA32 s, DATA8 m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d) {
39 *d = s;
40}
41
42#define _op_copy_pt_pan_dp_mmx _op_copy_pt_p_dp_mmx
43#define _op_copy_pt_pas_dp_mmx _op_copy_pt_p_dp_mmx
44
45#define _op_copy_pt_p_dpan_mmx _op_copy_pt_p_dp_mmx
46#define _op_copy_pt_pan_dpan_mmx _op_copy_pt_pan_dp_mmx
47#define _op_copy_pt_pas_dpan_mmx _op_copy_pt_pas_dp_mmx
48
49static void
50init_copy_pixel_pt_funcs_mmx(void)
51{
52 op_copy_pt_funcs[SP][SM_N][SC_N][DP][CPU_MMX] = _op_copy_pt_p_dp_mmx;
53 op_copy_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_MMX] = _op_copy_pt_pan_dp_mmx;
54 op_copy_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_MMX] = _op_copy_pt_pas_dp_mmx;
55
56 op_copy_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_pt_p_dpan_mmx;
57 op_copy_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_pt_pan_dpan_mmx;
58 op_copy_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_pt_pas_dpan_mmx;
59}
60#endif
61
62/*-----*/
63
64/* copy_rel pixel --> dst */
65
66#ifdef BUILD_MMX
67static void
68_op_copy_rel_p_dp_mmx(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
69 DATA32 *e = d + l;
70 pxor_r2r(mm0, mm0);
71 MOV_A2R(ALPHA_255, mm5)
72 for (; d < e; d++, s++) {
73 MOV_PA2R(*d, mm1)
74 MOV_P2R(*s, mm2, mm0)
75 MUL4_SYM_R2R(mm2, mm1, mm5)
76 MOV_R2P(mm1, *d, mm0)
77 }
78}
79
80
81#define _op_copy_rel_pas_dp_mmx _op_copy_rel_p_dp_mmx
82#define _op_copy_rel_pan_dp_mmx _op_copy_rel_p_dp_mmx
83
84#define _op_copy_rel_p_dpan_mmx _op_copy_p_dpan_mmx
85#define _op_copy_rel_pan_dpan_mmx _op_copy_pan_dpan_mmx
86#define _op_copy_rel_pas_dpan_mmx _op_copy_pas_dpan_mmx
87
88static void
89init_copy_rel_pixel_span_funcs_mmx(void)
90{
91 op_copy_rel_span_funcs[SP][SM_N][SC_N][DP][CPU_MMX] = _op_copy_rel_p_dp_mmx;
92 op_copy_rel_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_MMX] = _op_copy_rel_pan_dp_mmx;
93 op_copy_rel_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_MMX] = _op_copy_rel_pas_dp_mmx;
94
95 op_copy_rel_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_p_dpan_mmx;
96 op_copy_rel_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pan_dpan_mmx;
97 op_copy_rel_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pas_dpan_mmx;
98}
99#endif
100
101#ifdef BUILD_MMX
102static void
103_op_copy_rel_pt_p_dp_mmx(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
104 c = 1 + (*d >> 24);
105 MOV_A2R(c, mm1)
106 pxor_r2r(mm0, mm0);
107 MOV_P2R(s, mm2, mm0)
108 MUL4_256_R2R(mm2, mm1)
109 MOV_R2P(mm1, *d, mm0)
110}
111
112
113#define _op_copy_rel_pt_pan_dp_mmx _op_copy_rel_pt_p_dp_mmx
114#define _op_copy_rel_pt_pas_dp_mmx _op_copy_rel_pt_p_dp_mmx
115
116#define _op_copy_rel_pt_p_dpan_mmx _op_copy_pt_p_dpan_mmx
117#define _op_copy_rel_pt_pan_dpan_mmx _op_copy_pt_pan_dpan_mmx
118#define _op_copy_rel_pt_pas_dpan_mmx _op_copy_pt_pas_dpan_mmx
119
120static void
121init_copy_rel_pixel_pt_funcs_mmx(void)
122{
123 op_copy_rel_pt_funcs[SP][SM_N][SC_N][DP][CPU_MMX] = _op_copy_rel_pt_p_dp_mmx;
124 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_MMX] = _op_copy_rel_pt_pan_dp_mmx;
125 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_MMX] = _op_copy_rel_pt_pas_dp_mmx;
126
127 op_copy_rel_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pt_p_dpan_mmx;
128 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pt_pan_dpan_mmx;
129 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pt_pas_dpan_mmx;
130}
131#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_.c
new file mode 100644
index 0000000..48b5338
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_.c
@@ -0,0 +1,150 @@
1/* copy pixel x mask --> dst */
2
3#ifdef BUILD_C
4static void
5_op_copy_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
6 DATA32 *e;
7 int color;
8 UNROLL8_PLD_WHILE(d, l, e,
9 {
10 color = *m;
11 switch(color)
12 {
13 case 0:
14 break;
15 case 255:
16 *d = *s;
17 break;
18 default:
19 color++;
20 *d = INTERP_256(color, *s, *d);
21 break;
22 }
23 m++; s++; d++;
24 });
25}
26
27
28#define _op_copy_pan_mas_dp _op_copy_p_mas_dp
29#define _op_copy_pas_mas_dp _op_copy_p_mas_dp
30
31#define _op_copy_p_mas_dpan _op_copy_p_mas_dp
32#define _op_copy_pan_mas_dpan _op_copy_p_mas_dpan
33#define _op_copy_pas_mas_dpan _op_copy_p_mas_dpan
34
35static void
36init_copy_pixel_mask_span_funcs_c(void)
37{
38 op_copy_span_funcs[SP][SM_AS][SC_N][DP][CPU_C] = _op_copy_p_mas_dp;
39 op_copy_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_C] = _op_copy_pan_mas_dp;
40 op_copy_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_C] = _op_copy_pas_mas_dp;
41
42 op_copy_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_p_mas_dpan;
43 op_copy_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_pan_mas_dpan;
44 op_copy_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_pas_mas_dpan;
45}
46#endif
47
48#ifdef BUILD_C
49static void
50_op_copy_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c __UNUSED__, DATA32 *d) {
51 *d = INTERP_256(m + 1, s, *d);
52}
53
54#define _op_copy_pt_pan_mas_dp _op_copy_pt_p_mas_dp
55#define _op_copy_pt_pas_mas_dp _op_copy_pt_p_mas_dp
56
57#define _op_copy_pt_p_mas_dpan _op_copy_pt_p_mas_dp
58#define _op_copy_pt_pan_mas_dpan _op_copy_pt_p_mas_dpan
59#define _op_copy_pt_pas_mas_dpan _op_copy_pt_p_mas_dpan
60
61static void
62init_copy_pixel_mask_pt_funcs_c(void)
63{
64 op_copy_pt_funcs[SP][SM_AS][SC_N][DP][CPU_C] = _op_copy_pt_p_mas_dp;
65 op_copy_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_C] = _op_copy_pt_pan_mas_dp;
66 op_copy_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_C] = _op_copy_pt_pas_mas_dp;
67
68 op_copy_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_pt_p_mas_dpan;
69 op_copy_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_pt_pan_mas_dpan;
70 op_copy_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_pt_pas_mas_dpan;
71}
72#endif
73
74/*-----*/
75
76/* copy_rel pixel x mask --> dst */
77
78#ifdef BUILD_C
79static void
80_op_copy_rel_p_mas_dp(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) {
81 DATA32 *e;
82 int color;
83 UNROLL8_PLD_WHILE(d, l, e,
84 {
85 color = *m;
86 switch(color)
87 {
88 case 0:
89 break;
90 case 255:
91 *d = MUL_SYM(*d >> 24, *s);
92 break;
93 default:
94 c = MUL_SYM(*d >> 24, *s);
95 l++;
96 *d = INTERP_256(l, c, *d);
97 break;
98 }
99 m++; s++; d++;
100 });
101}
102
103
104#define _op_copy_rel_pan_mas_dp _op_copy_rel_p_mas_dp
105#define _op_copy_rel_pas_mas_dp _op_copy_rel_p_mas_dp
106
107#define _op_copy_rel_p_mas_dpan _op_copy_p_mas_dpan
108#define _op_copy_rel_pan_mas_dpan _op_copy_pan_mas_dpan
109#define _op_copy_rel_pas_mas_dpan _op_copy_pas_mas_dpan
110
111static void
112init_copy_rel_pixel_mask_span_funcs_c(void)
113{
114 op_copy_rel_span_funcs[SP][SM_AS][SC_N][DP][CPU_C] = _op_copy_rel_p_mas_dp;
115 op_copy_rel_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_C] = _op_copy_rel_pan_mas_dp;
116 op_copy_rel_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_C] = _op_copy_rel_pas_mas_dp;
117
118 op_copy_rel_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_rel_p_mas_dpan;
119 op_copy_rel_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_rel_pan_mas_dpan;
120 op_copy_rel_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_rel_pas_mas_dpan;
121}
122#endif
123
124#ifdef BUILD_C
125static void
126_op_copy_rel_pt_p_mas_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
127 c = MUL_SYM(*d >> 24, s);
128 *d = INTERP_256(m + 1, c, *d);
129}
130
131
132#define _op_copy_rel_pt_pan_mas_dp _op_copy_rel_pt_p_mas_dp
133#define _op_copy_rel_pt_pas_mas_dp _op_copy_rel_pt_p_mas_dp
134
135#define _op_copy_rel_pt_p_mas_dpan _op_copy_pt_p_mas_dpan
136#define _op_copy_rel_pt_pan_mas_dpan _op_copy_pt_pan_mas_dpan
137#define _op_copy_rel_pt_pas_mas_dpan _op_copy_pt_pas_mas_dpan
138
139static void
140init_copy_rel_pixel_mask_pt_funcs_c(void)
141{
142 op_copy_rel_pt_funcs[SP][SM_AS][SC_N][DP][CPU_C] = _op_copy_rel_pt_p_mas_dp;
143 op_copy_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_C] = _op_copy_rel_pt_pan_mas_dp;
144 op_copy_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_C] = _op_copy_rel_pt_pas_mas_dp;
145
146 op_copy_rel_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_rel_pt_p_mas_dpan;
147 op_copy_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_rel_pt_pan_mas_dpan;
148 op_copy_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_C] = _op_copy_rel_pt_pas_mas_dpan;
149}
150#endif
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_i386.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_i386.c
new file mode 100644
index 0000000..2511c41
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_i386.c
@@ -0,0 +1,176 @@
1/* copy pixel x mask --> dst */
2
3#ifdef BUILD_MMX
4static void
5_op_copy_p_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_255, mm5)
9 while (d < e) {
10 l = *m;
11 switch(l)
12 {
13 case 0:
14 break;
15 case 255:
16 *d = *s;
17 break;
18 default:
19 l++;
20 MOV_A2R(l, mm3)
21 MOV_P2R(*s, mm2, mm0)
22 MOV_P2R(*d, mm1, mm0)
23 INTERP_256_R2R(mm3, mm2, mm1, mm5);
24 MOV_R2P(mm1, *d, mm0)
25 break;
26 }
27 m++; d++;
28 }
29}
30
31#define _op_copy_pan_mas_dp_mmx _op_copy_p_mas_dp_mmx
32#define _op_copy_pas_mas_dp_mmx _op_copy_p_mas_dp_mmx
33
34#define _op_copy_p_mas_dpan_mmx _op_copy_p_mas_dp_mmx
35#define _op_copy_pan_mas_dpan_mmx _op_copy_p_mas_dpan_mmx
36#define _op_copy_pas_mas_dpan_mmx _op_copy_p_mas_dpan_mmx
37
38static void
39init_copy_pixel_mask_span_funcs_mmx(void)
40{
41 op_copy_span_funcs[SP][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_p_mas_dp_mmx;
42 op_copy_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_pan_mas_dp_mmx;
43 op_copy_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_pas_mas_dp_mmx;
44
45 op_copy_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_p_mas_dpan_mmx;
46 op_copy_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_pan_mas_dpan_mmx;
47 op_copy_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_pas_mas_dpan_mmx;
48}
49#endif
50
51#ifdef BUILD_MMX
52static void
53_op_copy_pt_p_mas_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
54 c = m + 1;
55 MOV_A2R(ALPHA_255, mm5)
56 MOV_A2R(c, mm3)
57 pxor_r2r(mm0, mm0);
58 MOV_P2R(s, mm2, mm0)
59 MOV_P2R(*d, mm1, mm0)
60 INTERP_256_R2R(mm3, mm2, mm1, mm5);
61 MOV_R2P(mm1, *d, mm0)
62}
63
64#define _op_copy_pt_pan_mas_dp_mmx _op_copy_pt_p_mas_dp_mmx
65#define _op_copy_pt_pas_mas_dp_mmx _op_copy_pt_p_mas_dp_mmx
66
67#define _op_copy_pt_p_mas_dpan_mmx _op_copy_pt_p_mas_dp_mmx
68#define _op_copy_pt_pan_mas_dpan_mmx _op_copy_pt_p_mas_dpan_mmx
69#define _op_copy_pt_pas_mas_dpan_mmx _op_copy_pt_p_mas_dpan_mmx
70
71static void
72init_copy_pixel_mask_pt_funcs_mmx(void)
73{
74 op_copy_pt_funcs[SP][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_pt_p_mas_dp_mmx;
75 op_copy_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_pt_pan_mas_dp_mmx;
76 op_copy_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_pt_pas_mas_dp_mmx;
77
78 op_copy_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_pt_p_mas_dpan_mmx;
79 op_copy_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_pt_pan_mas_dpan_mmx;
80 op_copy_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_pt_pas_mas_dpan_mmx;
81}
82#endif
83
84/*-----*/
85
86/* copy_rel pixel x mask --> dst */
87
88#ifdef BUILD_MMX
89static void
90_op_copy_rel_p_mas_dp_mmx(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
91 DATA32 *e = d + l;
92 pxor_r2r(mm0, mm0);
93 MOV_A2R(ALPHA_255, mm5)
94 while (d < e) {
95 l = *m;
96 switch(l)
97 {
98 case 0:
99 break;
100 case 255:
101 MOV_P2R(*s, mm2, mm0)
102 MOV_PA2R(*d, mm1)
103 MUL4_SYM_R2R(mm2, mm1, mm5)
104 MOV_R2P(mm1, *d, mm0)
105 break;
106 default:
107 l++;
108 MOV_P2R(*s, mm3, mm0)
109 MOV_P2R(*d, mm1, mm0)
110 MOV_RA2R(mm1, mm2)
111 MUL4_SYM_R2R(mm3, mm2, mm5)
112 MOV_A2R(l, mm3)
113 INTERP_256_R2R(mm3, mm2, mm1, mm5)
114 MOV_R2P(mm1, *d, mm0)
115 break;
116 }
117 m++; s++; d++;
118 }
119}
120
121#define _op_copy_rel_pan_mas_dp_mmx _op_copy_rel_p_mas_dp_mmx
122#define _op_copy_rel_pas_mas_dp_mmx _op_copy_rel_p_mas_dp_mmx
123
124#define _op_copy_rel_p_mas_dpan_mmx _op_copy_p_mas_dpan_mmx
125#define _op_copy_rel_pan_mas_dpan_mmx _op_copy_pan_mas_dpan_mmx
126#define _op_copy_rel_pas_mas_dpan_mmx _op_copy_pas_mas_dpan_mmx
127
128static void
129init_copy_rel_pixel_mask_span_funcs_mmx(void)
130{
131 op_copy_rel_span_funcs[SP][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_p_mas_dp_mmx;
132 op_copy_rel_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_pan_mas_dp_mmx;
133 op_copy_rel_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_pas_mas_dp_mmx;
134
135 op_copy_rel_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_p_mas_dpan_mmx;
136 op_copy_rel_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pan_mas_dpan_mmx;
137 op_copy_rel_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pas_mas_dpan_mmx;
138}
139#endif
140
141#ifdef BUILD_MMX
142static void
143_op_copy_rel_pt_p_mas_dp_mmx(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
144 c = m + 1;
145 pxor_r2r(mm0, mm0);
146 MOV_A2R(ALPHA_255, mm5)
147 MOV_P2R(s, mm3, mm0)
148 MOV_P2R(*d, mm1, mm0)
149 MOV_RA2R(mm1, mm2)
150 MUL4_SYM_R2R(mm3, mm2, mm5)
151 MOV_A2R(c, mm3)
152 INTERP_256_R2R(mm3, mm2, mm1, mm5)
153 MOV_R2P(mm1, *d, mm0)
154}
155
156
157#define _op_copy_rel_pt_pan_mas_dp_mmx _op_copy_rel_pt_p_mas_dp_mmx
158#define _op_copy_rel_pt_pas_mas_dp_mmx _op_copy_rel_pt_p_mas_dp_mmx
159
160#define _op_copy_rel_pt_p_mas_dpan_mmx _op_copy_pt_p_mas_dpan_mmx
161#define _op_copy_rel_pt_pan_mas_dpan_mmx _op_copy_pt_pan_mas_dpan_mmx
162#define _op_copy_rel_pt_pas_mas_dpan_mmx _op_copy_pt_pas_mas_dpan_mmx
163
164static void
165init_copy_rel_pixel_mask_pt_funcs_mmx(void)
166{
167 op_copy_rel_pt_funcs[SP][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_pt_p_mas_dp_mmx;
168 op_copy_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_pt_pan_mas_dp_mmx;
169 op_copy_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_MMX] = _op_copy_rel_pt_pas_mas_dp_mmx;
170
171 op_copy_rel_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pt_p_mas_dpan_mmx;
172 op_copy_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pt_pan_mas_dpan_mmx;
173 op_copy_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_MMX] = _op_copy_rel_pt_pas_mas_dpan_mmx;
174}
175#endif
176
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c
new file mode 100644
index 0000000..e25f8f8
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c
@@ -0,0 +1,151 @@
1/* copy pixel x mask --> dst */
2
3#ifdef BUILD_NEON
4static void
5_op_copy_p_mas_dp_neon(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
6 // FIXME: neon-it
7 DATA32 *e;
8 int color;
9 UNROLL8_PLD_WHILE(d, l, e,
10 {
11 color = *m;
12 switch(color)
13 {
14 case 0:
15 break;
16 case 255:
17 *d = *s;
18 break;
19 default:
20 color++;
21 *d = INTERP_256(color, *s, *d);
22 break;
23 }
24 m++; s++; d++;
25 });
26}
27
28#define _op_copy_pan_mas_dp_neon _op_copy_p_mas_dp_neon
29#define _op_copy_pas_mas_dp_neon _op_copy_p_mas_dp_neon
30
31#define _op_copy_p_mas_dpan_neon _op_copy_p_mas_dp_neon
32#define _op_copy_pan_mas_dpan_neon _op_copy_p_mas_dpan_neon
33#define _op_copy_pas_mas_dpan_neon _op_copy_p_mas_dpan_neon
34
35static void
36init_copy_pixel_mask_span_funcs_neon(void)
37{
38 op_copy_span_funcs[SP][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_p_mas_dp_neon;
39 op_copy_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pan_mas_dp_neon;
40 op_copy_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pas_mas_dp_neon;
41
42 op_copy_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_p_mas_dpan_neon;
43 op_copy_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pan_mas_dpan_neon;
44 op_copy_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pas_mas_dpan_neon;
45}
46#endif
47
48#ifdef BUILD_NEON
49static void
50_op_copy_pt_p_mas_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
51 *d = INTERP_256(m + 1, s, *d);
52}
53
54#define _op_copy_pt_pan_mas_dp_neon _op_copy_pt_p_mas_dp_neon
55#define _op_copy_pt_pas_mas_dp_neon _op_copy_pt_p_mas_dp_neon
56
57#define _op_copy_pt_p_mas_dpan_neon _op_copy_pt_p_mas_dp_neon
58#define _op_copy_pt_pan_mas_dpan_neon _op_copy_pt_p_mas_dpan_neon
59#define _op_copy_pt_pas_mas_dpan_neon _op_copy_pt_p_mas_dpan_neon
60
61static void
62init_copy_pixel_mask_pt_funcs_neon(void)
63{
64 op_copy_pt_funcs[SP][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pt_p_mas_dp_neon;
65 op_copy_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pt_pan_mas_dp_neon;
66 op_copy_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pt_pas_mas_dp_neon;
67
68 op_copy_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_p_mas_dpan_neon;
69 op_copy_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_pan_mas_dpan_neon;
70 op_copy_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_pas_mas_dpan_neon;
71}
72#endif
73
74/*-----*/
75
76/* copy_rel pixel x mask --> dst */
77
78#ifdef BUILD_NEON
79static void
80_op_copy_rel_p_mas_dp_neon(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) {
81 // FIXME: neon-it
82 DATA32 *e;
83 int color;
84 UNROLL8_PLD_WHILE(d, l, e,
85 {
86 color = *m;
87 switch(color)
88 {
89 case 0:
90 break;
91 case 255:
92 *d = MUL_SYM(*d >> 24, *s);
93 break;
94 default:
95 c = MUL_SYM(*d >> 24, *s);
96 l++;
97 *d = INTERP_256(l, c, *d);
98 break;
99 }
100 m++; s++; d++;
101 });
102}
103
104#define _op_copy_rel_pan_mas_dp_neon _op_copy_rel_p_mas_dp_neon
105#define _op_copy_rel_pas_mas_dp_neon _op_copy_rel_p_mas_dp_neon
106
107#define _op_copy_rel_p_mas_dpan_neon _op_copy_p_mas_dpan_neon
108#define _op_copy_rel_pan_mas_dpan_neon _op_copy_pan_mas_dpan_neon
109#define _op_copy_rel_pas_mas_dpan_neon _op_copy_pas_mas_dpan_neon
110
111static void
112init_copy_rel_pixel_mask_span_funcs_neon(void)
113{
114 op_copy_rel_span_funcs[SP][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_p_mas_dp_neon;
115 op_copy_rel_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pan_mas_dp_neon;
116 op_copy_rel_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pas_mas_dp_neon;
117
118 op_copy_rel_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_p_mas_dpan_neon;
119 op_copy_rel_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pan_mas_dpan_neon;
120 op_copy_rel_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pas_mas_dpan_neon;
121}
122#endif
123
124#ifdef BUILD_NEON
125static void
126_op_copy_rel_pt_p_mas_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
127 c = MUL_SYM(*d >> 24, s);
128 *d = INTERP_256(m + 1, c, *d);
129}
130
131
132#define _op_copy_rel_pt_pan_mas_dp_neon _op_copy_rel_pt_p_mas_dp_neon
133#define _op_copy_rel_pt_pas_mas_dp_neon _op_copy_rel_pt_p_mas_dp_neon
134
135#define _op_copy_rel_pt_p_mas_dpan_neon _op_copy_pt_p_mas_dpan_neon
136#define _op_copy_rel_pt_pan_mas_dpan_neon _op_copy_pt_pan_mas_dpan_neon
137#define _op_copy_rel_pt_pas_mas_dpan_neon _op_copy_pt_pas_mas_dpan_neon
138
139static void
140init_copy_rel_pixel_mask_pt_funcs_neon(void)
141{
142 op_copy_rel_pt_funcs[SP][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_p_mas_dp_neon;
143 op_copy_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_pan_mas_dp_neon;
144 op_copy_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_pas_mas_dp_neon;
145
146 op_copy_rel_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_p_mas_dpan_neon;
147 op_copy_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_pan_mas_dpan_neon;
148 op_copy_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_pas_mas_dpan_neon;
149}
150#endif
151
diff --git a/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_neon.c b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_neon.c
new file mode 100644
index 0000000..5b8bd60
--- /dev/null
+++ b/libraries/evas/src/lib/engines/common/evas_op_copy/op_copy_pixel_neon.c
@@ -0,0 +1,158 @@
1/* copy pixel --> dst */
2
3#ifdef BUILD_NEON
4static void
5_op_copy_p_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
6//#define USENEON 1
7#ifndef USENEON
8 memcpy(d, s, l * sizeof(DATA32));
9 return;
10#else
11 DATA32 *e;
12 e = d + l - 23;
13 if (e > d)
14 {
15 int dl;
16
17 asm volatile
18 (".fpu neon \n\t"
19 "_op_copy_p_dp_neon_asmloop: \n\t"
20 "pld [%[s], #192] \n\t" // preload 256 bytes ahead
21 "pld [%[s], #320] \n\t" // preload 320 bytes ahead
22 "vld1.32 {d0-d3}, [%[s]]! \n\t" // load 256bits (32 bytes 8 pix), 32bit aligned
23 "vld1.32 {d4-d7} , [%[s]]! \n\t" // load 256bits (32 bytes 8 pix), 32bit aligned
24 "vld1.32 {d8-d11}, [%[s]]! \n\t" // load 256bits (32 bytes 8 pix), 32bit aligned
25 "vst1.32 {d0-d3}, [%[d]]! \n\t" // store 256bits (32 bytes 8 pix), 32bit aligned
26 "vst1.32 {d4-d7}, [%[d]]! \n\t" // store 256bits (32 bytes 8 pix), 32bit aligned
27 "vst1.32 {d8-d11}, [%[d]]! \n\t" // store 256bits (32 bytes 8 pix), 32bit aligned
28 "cmp %[e], %[d] \n\t" // compare current and end ptr
29 "bgt _op_copy_p_dp_neon_asmloop \n\t"
30 : /*out*/
31 : /*in */ [s] "r" (s), [e] "r" (e), [d] "r" (d)
32 : /*clobber*/
33 "q0", "q1", "q2","q3", "q4", "q5", "q6",
34 "d0", "d1", "d2", "d3",
35 "d4", "d5", "d6", "d7",
36 "d8", "d9", "d10", "d11",
37 "memory" // clobbered
38 );
39 dl = l % 24; // dl is how many pixels at end that is not a multiple of 24
40 l = l - dl; // jump to there at the end of the run?
41 s = s + l;
42 d = d + l;
43 }
44 e += 23;
45 for (;d < e; d++, s++) *d = *s;
46#endif
47}
48
49#define _op_copy_pan_dp_neon _op_copy_p_dp_neon
50#define _op_copy_pas_dp_neon _op_copy_p_dp_neon
51
52#define _op_copy_p_dpan_neon _op_copy_p_dp_neon
53#define _op_copy_pan_dpan_neon _op_copy_pan_dp_neon
54#define _op_copy_pas_dpan_neon _op_copy_pas_dp_neon
55
56static void
57init_copy_pixel_span_funcs_neon(void)
58{
59 op_copy_span_funcs[SP][SM_N][SC_N][DP][CPU_NEON] = _op_copy_p_dp_neon;
60 op_copy_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_NEON] = _op_copy_pan_dp_neon;
61 op_copy_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_NEON] = _op_copy_pas_dp_neon;
62
63 op_copy_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_p_dpan_neon;
64 op_copy_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_pan_dpan_neon;
65 op_copy_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_pas_dpan_neon;
66}
67#endif
68
69#ifdef BUILD_NEON
70static void
71_op_copy_pt_p_dp_neon(DATA32 s, DATA8 m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d) {
72 *d = s;
73}
74
75#define _op_copy_pt_pan_dp_neon _op_copy_pt_p_dp_neon
76#define _op_copy_pt_pas_dp_neon _op_copy_pt_p_dp_neon
77
78#define _op_copy_pt_p_dpan_neon _op_copy_pt_p_dp_neon
79#define _op_copy_pt_pan_dpan_neon _op_copy_pt_pan_dp_neon
80#define _op_copy_pt_pas_dpan_neon _op_copy_pt_pas_dp_neon
81
82static void
83init_copy_pixel_pt_funcs_neon(void)
84{
85 op_copy_pt_funcs[SP][SM_N][SC_N][DP][CPU_NEON] = _op_copy_pt_p_dp_neon;
86 op_copy_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_NEON] = _op_copy_pt_pan_dp_neon;
87 op_copy_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_NEON] = _op_copy_pt_pas_dp_neon;
88
89 op_copy_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_p_dpan_neon;
90 op_copy_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_pan_dpan_neon;
91 op_copy_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_pas_dpan_neon;
92}
93#endif
94
95/*-----*/
96
97/* copy_rel pixel --> dst */
98
99#ifdef BUILD_NEON
100static void
101_op_copy_rel_p_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) {
102 // FIXME: neon-it
103 DATA32 *e;
104 UNROLL8_PLD_WHILE(d, l, e,
105 {
106 *d = MUL_SYM(*d >> 24, c);
107 d++;
108 });
109}
110
111
112#define _op_copy_rel_pas_dp_neon _op_copy_rel_p_dp_neon
113#define _op_copy_rel_pan_dp_neon _op_copy_rel_p_dp_neon
114
115#define _op_copy_rel_p_dpan_neon _op_copy_p_dpan_neon
116#define _op_copy_rel_pan_dpan_neon _op_copy_pan_dpan_neon
117#define _op_copy_rel_pas_dpan_neon _op_copy_pas_dpan_neon
118
119static void
120init_copy_rel_pixel_span_funcs_neon(void)
121{
122 op_copy_rel_span_funcs[SP][SM_N][SC_N][DP][CPU_NEON] = _op_copy_rel_p_dp_neon;
123 op_copy_rel_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_NEON] = _op_copy_rel_pan_dp_neon;
124 op_copy_rel_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_NEON] = _op_copy_rel_pas_dp_neon;
125
126 op_copy_rel_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_p_dpan_neon;
127 op_copy_rel_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pan_dpan_neon;
128 op_copy_rel_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pas_dpan_neon;
129}
130#endif
131
132#ifdef BUILD_NEON
133static void
134_op_copy_rel_pt_p_dp_neon(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) {
135 s = 1 + (*d >> 24);
136 *d = MUL_256(s, c);
137}
138
139
140#define _op_copy_rel_pt_pan_dp_neon _op_copy_rel_pt_p_dp_neon
141#define _op_copy_rel_pt_pas_dp_neon _op_copy_rel_pt_p_dp_neon
142
143#define _op_copy_rel_pt_p_dpan_neon _op_copy_pt_p_dpan_neon
144#define _op_copy_rel_pt_pan_dpan_neon _op_copy_pt_pan_dpan_neon
145#define _op_copy_rel_pt_pas_dpan_neon _op_copy_pt_pas_dpan_neon
146
147static void
148init_copy_rel_pixel_pt_funcs_neon(void)
149{
150 op_copy_rel_pt_funcs[SP][SM_N][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_p_dp_neon;
151 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_pan_dp_neon;
152 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_pas_dp_neon;
153
154 op_copy_rel_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_p_dpan_neon;
155 op_copy_rel_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_pan_dpan_neon;
156 op_copy_rel_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_pas_dpan_neon;
157}
158#endif