From ae878d21833e1a8ff29332fc3d03ae2b252446af Mon Sep 17 00:00:00 2001 From: raster Date: Mon, 16 Mar 2009 10:50:37 +0000 Subject: [PATCH] more neon infra - just for "copies" right now. only 1 func filled in. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@39502 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- src/lib/canvas/evas_object_textblock.c | 2 +- src/lib/engines/common/evas_op_copy/Makefile.am | 5 +- .../common/evas_op_copy/op_copy_color_neon.c | 11 +- .../common/evas_op_copy/op_copy_mask_color_neon.c | 171 +++++++++++++++ .../common/evas_op_copy/op_copy_pixel_color_neon.c | 239 +++++++++++++++++++++ .../common/evas_op_copy/op_copy_pixel_mask_neon.c | 152 +++++++++++++ .../common/evas_op_copy/op_copy_pixel_neon.c | 118 ++++++++++ src/lib/engines/common/evas_op_copy_main_.c | 18 +- 8 files changed, 701 insertions(+), 15 deletions(-) create mode 100644 src/lib/engines/common/evas_op_copy/op_copy_mask_color_neon.c create mode 100644 src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c create mode 100644 src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c create mode 100644 src/lib/engines/common/evas_op_copy/op_copy_pixel_neon.c diff --git a/src/lib/canvas/evas_object_textblock.c b/src/lib/canvas/evas_object_textblock.c index 316ff49..00b87e3 100644 --- a/src/lib/canvas/evas_object_textblock.c +++ b/src/lib/canvas/evas_object_textblock.c @@ -2279,7 +2279,7 @@ _find_layout_item_line_match(Evas_Object *obj, Evas_Object_Textblock_Node *n, in { *lnr = ln; /* FIXME: Is that really what we want ? */ - *itr = fit; + *itr = (Evas_Object_Textblock_Item *)fit; return; } } diff --git a/src/lib/engines/common/evas_op_copy/Makefile.am b/src/lib/engines/common/evas_op_copy/Makefile.am index faa3501..9f11a04 100644 --- a/src/lib/engines/common/evas_op_copy/Makefile.am +++ b/src/lib/engines/common/evas_op_copy/Makefile.am @@ -6,9 +6,12 @@ op_copy_color_i386.c \ op_copy_color_neon.c \ op_copy_mask_color_.c \ op_copy_mask_color_i386.c \ +op_copy_mask_color_neon.c \ op_copy_pixel_.c \ op_copy_pixel_color_.c \ op_copy_pixel_color_i386.c \ +op_copy_pixel_color_neon.c \ op_copy_pixel_i386.c \ op_copy_pixel_mask_.c \ -op_copy_pixel_mask_i386.c +op_copy_pixel_mask_i386.c \ +op_copy_pixel_mask_neon.c diff --git a/src/lib/engines/common/evas_op_copy/op_copy_color_neon.c b/src/lib/engines/common/evas_op_copy/op_copy_color_neon.c index d6b593d..d276bc0 100644 --- a/src/lib/engines/common/evas_op_copy/op_copy_color_neon.c +++ b/src/lib/engines/common/evas_op_copy/op_copy_color_neon.c @@ -4,9 +4,9 @@ #ifdef BUILD_NEON static void _op_copy_c_dp_neon(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) { - // FIXME: handle unaligned stores - stores not aligned to 16bytes may suck uint32_t *e; uint32_t dalign = ((uint32_t)d) & 0xf; // get alignment + // handle unaligned stores - stores not aligned to 16bytes may suck if (dalign > 0) { dalign = 16 - dalign; @@ -20,7 +20,9 @@ _op_copy_c_dp_neon(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) { } e = d + l; e -= 15; + // expand the color in c to a 128 bit register as "cccc" i.e 4 pixels of c uint32x4_t col = vdupq_n_u32(c); + // fill a run of 4x4 (16) pixels with the color for (; d < e; d += 16) { vst1q_u32(d+0, col); // OP vst1q_u32(d+4, col); // OP @@ -28,6 +30,7 @@ _op_copy_c_dp_neon(DATA32 *s, DATA8 *m, DATA32 c, DATA32 *d, int l) { vst1q_u32(d+12, col); // OP } e += 15; + // fixup any leftover pixels in the run for (; d < e; d++) { *d = c; // OP } @@ -60,7 +63,7 @@ init_copy_color_span_funcs_neon(void) #ifdef BUILD_NEON static void _op_copy_pt_c_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) { - *d = c; + *d = c; } #define _op_copy_pt_cn_dp_neon _op_copy_pt_c_dp_neon @@ -128,8 +131,8 @@ init_copy_rel_color_span_funcs_neon(void) #ifdef BUILD_NEON static void _op_copy_rel_pt_c_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) { - s = 1 + (*d >> 24); - *d = MUL_256(s, c); + s = 1 + (*d >> 24); + *d = MUL_256(s, c); } diff --git a/src/lib/engines/common/evas_op_copy/op_copy_mask_color_neon.c b/src/lib/engines/common/evas_op_copy/op_copy_mask_color_neon.c new file mode 100644 index 0000000..e2f3bdb --- /dev/null +++ b/src/lib/engines/common/evas_op_copy/op_copy_mask_color_neon.c @@ -0,0 +1,171 @@ + +/* copy mask x color -> dst */ + +#ifdef BUILD_NEON +static void +_op_copy_mas_c_dp_neon(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) { + // FIXME: neon-it + DATA32 *e; + int color; + UNROLL8_PLD_WHILE(d, l, e, + { + color = *m; + switch(color) + { + case 0: + break; + case 255: + *d = c; + break; + default: + color++; + *d = INTERP_256(color, c, *d); + break; + } + m++; d++; + }); +} + +#define _op_copy_mas_cn_dp_neon _op_copy_mas_c_dp_neon +#define _op_copy_mas_can_dp_neon _op_copy_mas_c_dp_neon +#define _op_copy_mas_caa_dp_neon _op_copy_mas_c_dp_neon + +#define _op_copy_mas_c_dpan_neon _op_copy_mas_c_dp_neon +#define _op_copy_mas_cn_dpan_neon _op_copy_mas_c_dpan_neon +#define _op_copy_mas_can_dpan_neon _op_copy_mas_c_dpan_neon +#define _op_copy_mas_caa_dpan_neon _op_copy_mas_c_dpan_neon + +static void +init_copy_mask_color_span_funcs_neon(void) +{ + op_copy_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_mas_cn_dp_neon; + op_copy_span_funcs[SP_N][SM_AS][SC][DP][CPU_NEON] = _op_copy_mas_c_dp_neon; + op_copy_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_NEON] = _op_copy_mas_can_dp_neon; + op_copy_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_NEON] = _op_copy_mas_caa_dp_neon; + + op_copy_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_mas_cn_dpan_neon; + op_copy_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_NEON] = _op_copy_mas_c_dpan_neon; + op_copy_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_NEON] = _op_copy_mas_can_dpan_neon; + op_copy_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_NEON] = _op_copy_mas_caa_dpan_neon; +} +#endif + +#ifdef BUILD_NEON +static void +_op_copy_pt_mas_c_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) { + *d = INTERP_256(m + 1, c, *d); +} + +#define _op_copy_pt_mas_cn_dp_neon _op_copy_pt_mas_c_dp_neon +#define _op_copy_pt_mas_can_dp_neon _op_copy_pt_mas_c_dp_neon +#define _op_copy_pt_mas_caa_dp_neon _op_copy_pt_mas_c_dp_neon + +#define _op_copy_pt_mas_c_dpan_neon _op_copy_pt_mas_c_dp_neon +#define _op_copy_pt_mas_cn_dpan_neon _op_copy_pt_mas_c_dpan_neon +#define _op_copy_pt_mas_can_dpan_neon _op_copy_pt_mas_c_dpan_neon +#define _op_copy_pt_mas_caa_dpan_neon _op_copy_pt_mas_c_dpan_neon + +static void +init_copy_mask_color_pt_funcs_neon(void) +{ + op_copy_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pt_mas_cn_dp_neon; + op_copy_pt_funcs[SP_N][SM_AS][SC][DP][CPU_NEON] = _op_copy_pt_mas_c_dp_neon; + op_copy_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_NEON] = _op_copy_pt_mas_can_dp_neon; + op_copy_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_NEON] = _op_copy_pt_mas_caa_dp_neon; + + op_copy_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_mas_cn_dpan_neon; + op_copy_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_NEON] = _op_copy_pt_mas_c_dpan_neon; + op_copy_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_NEON] = _op_copy_pt_mas_can_dpan_neon; + op_copy_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_NEON] = _op_copy_pt_mas_caa_dpan_neon; +} +#endif + +/*-----*/ + +/* copy_rel mask x color -> dst */ + +#ifdef BUILD_NEON +static void +_op_copy_rel_mas_c_dp_neon(DATA32 *s __UNUSED__, DATA8 *m, DATA32 c, DATA32 *d, int l) { + // FIXME: neon-it + DATA32 *e; + int color; + UNROLL8_PLD_WHILE(d, l, e, + { + color = *m; + switch(color) + { + case 0: + break; + case 255: + color = 1 + (*d >> 24); + *d = MUL_256(color, c); + break; + default: + { + DATA32 da = 1 + (*d >> 24); + da = MUL_256(da, c); + color++; + *d = INTERP_256(color, da, *d); + } + break; + } + m++; d++; + }); +} + +#define _op_copy_rel_mas_cn_dp_neon _op_copy_rel_mas_c_dp_neon +#define _op_copy_rel_mas_can_dp_neon _op_copy_rel_mas_c_dp_neon +#define _op_copy_rel_mas_caa_dp_neon _op_copy_rel_mas_c_dp_neon + +#define _op_copy_rel_mas_c_dpan_neon _op_copy_mas_c_dpan_neon +#define _op_copy_rel_mas_cn_dpan_neon _op_copy_mas_cn_dpan_neon +#define _op_copy_rel_mas_can_dpan_neon _op_copy_mas_can_dpan_neon +#define _op_copy_rel_mas_caa_dpan_neon _op_copy_mas_caa_dpan_neon + +static void +init_copy_rel_mask_color_span_funcs_neon(void) +{ + op_copy_rel_span_funcs[SP_N][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_mas_cn_dp_neon; + op_copy_rel_span_funcs[SP_N][SM_AS][SC][DP][CPU_NEON] = _op_copy_rel_mas_c_dp_neon; + op_copy_rel_span_funcs[SP_N][SM_AS][SC_AN][DP][CPU_NEON] = _op_copy_rel_mas_can_dp_neon; + op_copy_rel_span_funcs[SP_N][SM_AS][SC_AA][DP][CPU_NEON] = _op_copy_rel_mas_caa_dp_neon; + + op_copy_rel_span_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_mas_cn_dpan_neon; + op_copy_rel_span_funcs[SP_N][SM_AS][SC][DP_AN][CPU_NEON] = _op_copy_rel_mas_c_dpan_neon; + op_copy_rel_span_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_mas_can_dpan_neon; + op_copy_rel_span_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_mas_caa_dpan_neon; +} +#endif + +#ifdef BUILD_NEON +static void +_op_copy_rel_pt_mas_c_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) { + s = 1 + (*d >> 24); + s = MUL_256(s, c); + *d = INTERP_256(m + 1, s, *d); +} + +#define _op_copy_rel_pt_mas_cn_dp_neon _op_copy_rel_pt_mas_c_dp_neon +#define _op_copy_rel_pt_mas_can_dp_neon _op_copy_rel_pt_mas_c_dp_neon +#define _op_copy_rel_pt_mas_caa_dp_neon _op_copy_rel_pt_mas_c_dp_neon + +#define _op_copy_rel_pt_mas_c_dpan_neon _op_copy_pt_mas_c_dpan_neon +#define _op_copy_rel_pt_mas_cn_dpan_neon _op_copy_pt_mas_cn_dpan_neon +#define _op_copy_rel_pt_mas_can_dpan_neon _op_copy_pt_mas_can_dpan_neon +#define _op_copy_rel_pt_mas_caa_dpan_neon _op_copy_pt_mas_caa_dpan_neon + +static void +init_copy_rel_mask_color_pt_funcs_neon(void) +{ + op_copy_rel_pt_funcs[SP_N][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_mas_cn_dp_neon; + op_copy_rel_pt_funcs[SP_N][SM_AS][SC][DP][CPU_NEON] = _op_copy_rel_pt_mas_c_dp_neon; + op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP][CPU_NEON] = _op_copy_rel_pt_mas_can_dp_neon; + op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP][CPU_NEON] = _op_copy_rel_pt_mas_caa_dp_neon; + + op_copy_rel_pt_funcs[SP_N][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_mas_cn_dpan_neon; + op_copy_rel_pt_funcs[SP_N][SM_AS][SC][DP_AN][CPU_NEON] = _op_copy_rel_pt_mas_c_dpan_neon; + op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pt_mas_can_dpan_neon; + op_copy_rel_pt_funcs[SP_N][SM_AS][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pt_mas_caa_dpan_neon; +} +#endif diff --git a/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c b/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c new file mode 100644 index 0000000..af8e9e0 --- /dev/null +++ b/src/lib/engines/common/evas_op_copy/op_copy_pixel_color_neon.c @@ -0,0 +1,239 @@ + +/* copy pixel x color --> dst */ + +#ifdef BUILD_NEON +static void +_op_copy_p_c_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { + // FIXME: neon-it + DATA32 *e; + UNROLL8_PLD_WHILE(d, l, e, + { + *d = MUL4_SYM(c, *s); + d++; + s++; + }); +} + + +static void +_op_copy_p_caa_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { // FIXME: neon-it + // FIXME: neon-it + DATA32 *e; + c = 1 + (c >> 24); + UNROLL8_PLD_WHILE(d, l, e, + { + *d = MUL_256(c, *s); + d++; + s++; + }); +} + + +#define _op_copy_pas_c_dp_neon _op_copy_p_c_dp_neon +#define _op_copy_pan_c_dp_neon _op_copy_p_c_dp_neon +#define _op_copy_p_can_dp_neon _op_copy_p_c_dp_neon +#define _op_copy_pas_can_dp_neon _op_copy_pas_c_dp_neon +#define _op_copy_pan_can_dp_neon _op_copy_pan_c_dp_neon +#define _op_copy_pas_caa_dp_neon _op_copy_p_caa_dp_neon +#define _op_copy_pan_caa_dp_neon _op_copy_p_caa_dp_neon + +#define _op_copy_p_c_dpan_neon _op_copy_p_c_dp_neon +#define _op_copy_pas_c_dpan_neon _op_copy_pas_c_dp_neon +#define _op_copy_pan_c_dpan_neon _op_copy_pan_c_dp_neon +#define _op_copy_p_can_dpan_neon _op_copy_p_can_dp_neon +#define _op_copy_pas_can_dpan_neon _op_copy_pas_can_dp_neon +#define _op_copy_pan_can_dpan_neon _op_copy_pan_can_dp_neon +#define _op_copy_p_caa_dpan_neon _op_copy_p_caa_dp_neon +#define _op_copy_pas_caa_dpan_neon _op_copy_pas_caa_dp_neon +#define _op_copy_pan_caa_dpan_neon _op_copy_pan_caa_dp_neon + +static void +init_copy_pixel_color_span_funcs_neon(void) +{ + op_copy_span_funcs[SP][SM_N][SC][DP][CPU_NEON] = _op_copy_p_c_dp_neon; + op_copy_span_funcs[SP_AS][SM_N][SC][DP][CPU_NEON] = _op_copy_pas_c_dp_neon; + op_copy_span_funcs[SP_AN][SM_N][SC][DP][CPU_NEON] = _op_copy_pan_c_dp_neon; + op_copy_span_funcs[SP][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_p_can_dp_neon; + op_copy_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pas_can_dp_neon; + op_copy_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pan_can_dp_neon; + op_copy_span_funcs[SP][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_p_caa_dp_neon; + op_copy_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pas_caa_dp_neon; + op_copy_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pan_caa_dp_neon; + + op_copy_span_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_p_c_dpan_neon; + op_copy_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pas_c_dpan_neon; + op_copy_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pan_c_dpan_neon; + op_copy_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_p_can_dpan_neon; + op_copy_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pas_can_dpan_neon; + op_copy_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pan_can_dpan_neon; + op_copy_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_p_caa_dpan_neon; + op_copy_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pas_caa_dpan_neon; + op_copy_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pan_caa_dpan_neon; +} +#endif + +#ifdef BUILD_NEON +static void +_op_copy_pt_p_c_dp_neon(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { + *d = MUL4_SYM(c, s); +} + +#define _op_copy_pt_pas_c_dp_neon _op_copy_pt_p_c_dp_neon +#define _op_copy_pt_pan_c_dp_neon _op_copy_pt_p_c_dp_neon +#define _op_copy_pt_p_can_dp_neon _op_copy_pt_p_c_dp_neon +#define _op_copy_pt_pas_can_dp_neon _op_copy_pt_p_c_dp_neon +#define _op_copy_pt_pan_can_dp_neon _op_copy_pt_p_c_dp_neon +#define _op_copy_pt_p_caa_dp_neon _op_copy_pt_p_c_dp_neon +#define _op_copy_pt_pas_caa_dp_neon _op_copy_pt_p_c_dp_neon +#define _op_copy_pt_pan_caa_dp_neon _op_copy_pt_p_c_dp_neon + +#define _op_copy_pt_p_c_dpan_neon _op_copy_pt_p_c_dp_neon +#define _op_copy_pt_pas_c_dpan_neon _op_copy_pt_pas_c_dp_neon +#define _op_copy_pt_pan_c_dpan_neon _op_copy_pt_pan_c_dp_neon +#define _op_copy_pt_p_can_dpan_neon _op_copy_pt_p_can_dp_neon +#define _op_copy_pt_pas_can_dpan_neon _op_copy_pt_pas_can_dp_neon +#define _op_copy_pt_pan_can_dpan_neon _op_copy_pt_pan_can_dp_neon +#define _op_copy_pt_p_caa_dpan_neon _op_copy_pt_p_caa_dp_neon +#define _op_copy_pt_pas_caa_dpan_neon _op_copy_pt_pas_caa_dp_neon +#define _op_copy_pt_pan_caa_dpan_neon _op_copy_pt_pan_caa_dp_neon + +static void +init_copy_pixel_color_pt_funcs_neon(void) +{ + op_copy_pt_funcs[SP][SM_N][SC][DP][CPU_NEON] = _op_copy_pt_p_c_dp_neon; + op_copy_pt_funcs[SP_AS][SM_N][SC][DP][CPU_NEON] = _op_copy_pt_pas_c_dp_neon; + op_copy_pt_funcs[SP_AN][SM_N][SC][DP][CPU_NEON] = _op_copy_pt_pan_c_dp_neon; + op_copy_pt_funcs[SP][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pt_p_can_dp_neon; + op_copy_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pt_pas_can_dp_neon; + op_copy_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_pt_pan_can_dp_neon; + op_copy_pt_funcs[SP][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pt_p_caa_dp_neon; + op_copy_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pt_pas_caa_dp_neon; + op_copy_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_pt_pan_caa_dp_neon; + + op_copy_pt_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pt_p_c_dpan_neon; + op_copy_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pt_pas_c_dpan_neon; + op_copy_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_pt_pan_c_dpan_neon; + op_copy_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pt_p_can_dpan_neon; + op_copy_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pt_pas_can_dpan_neon; + op_copy_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_pt_pan_can_dpan_neon; + op_copy_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pt_p_caa_dpan_neon; + op_copy_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pt_pas_caa_dpan_neon; + op_copy_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_pt_pan_caa_dpan_neon; +} +#endif + +/*-----*/ + +/* copy_rel pixel x color --> dst */ + +#ifdef BUILD_NEON +static void +_op_copy_rel_p_c_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c, DATA32 *d, int l) { + // FIXME: neon-it + DATA32 *e; + UNROLL8_PLD_WHILE(d, l, e, + { + DATA32 cs = MUL4_SYM(c, *s); + *d = MUL_SYM(*d >> 24, cs); + d++; + s++; + }); +} + + +#define _op_copy_rel_pas_c_dp_neon _op_copy_rel_p_c_dp_neon +#define _op_copy_rel_pan_c_dp_neon _op_copy_rel_p_c_dp_neon +#define _op_copy_rel_p_can_dp_neon _op_copy_rel_p_c_dp_neon +#define _op_copy_rel_pas_can_dp_neon _op_copy_rel_p_c_dp_neon +#define _op_copy_rel_pan_can_dp_neon _op_copy_rel_p_c_dp_neon +#define _op_copy_rel_p_caa_dp_neon _op_copy_rel_p_c_dp_neon +#define _op_copy_rel_pas_caa_dp_neon _op_copy_rel_p_c_dp_neon +#define _op_copy_rel_pan_caa_dp_neon _op_copy_rel_p_c_dp_neon + +#define _op_copy_rel_p_c_dpan_neon _op_copy_p_c_dpan_neon +#define _op_copy_rel_pas_c_dpan_neon _op_copy_pas_c_dpan_neon +#define _op_copy_rel_pan_c_dpan_neon _op_copy_pan_c_dpan_neon +#define _op_copy_rel_p_can_dpan_neon _op_copy_p_can_dpan_neon +#define _op_copy_rel_pas_can_dpan_neon _op_copy_pas_can_dpan_neon +#define _op_copy_rel_pan_can_dpan_neon _op_copy_pan_can_dpan_neon +#define _op_copy_rel_p_caa_dpan_neon _op_copy_p_caa_dpan_neon +#define _op_copy_rel_pas_caa_dpan_neon _op_copy_pas_caa_dpan_neon +#define _op_copy_rel_pan_caa_dpan_neon _op_copy_pan_caa_dpan_neon + +static void +init_copy_rel_pixel_color_span_funcs_neon(void) +{ + op_copy_rel_span_funcs[SP][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_p_c_dp_neon; + op_copy_rel_span_funcs[SP_AS][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pas_c_dp_neon; + op_copy_rel_span_funcs[SP_AN][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pan_c_dp_neon; + op_copy_rel_span_funcs[SP][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_p_can_dp_neon; + op_copy_rel_span_funcs[SP_AS][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pas_can_dp_neon; + op_copy_rel_span_funcs[SP_AN][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pan_can_dp_neon; + op_copy_rel_span_funcs[SP][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_p_caa_dp_neon; + op_copy_rel_span_funcs[SP_AS][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pas_caa_dp_neon; + op_copy_rel_span_funcs[SP_AN][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pan_caa_dp_neon; + + op_copy_rel_span_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_p_c_dpan_neon; + op_copy_rel_span_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pas_c_dpan_neon; + op_copy_rel_span_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pan_c_dpan_neon; + op_copy_rel_span_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_p_can_dpan_neon; + op_copy_rel_span_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pas_can_dpan_neon; + op_copy_rel_span_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pan_can_dpan_neon; + op_copy_rel_span_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_p_caa_dpan_neon; + op_copy_rel_span_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pas_caa_dpan_neon; + op_copy_rel_span_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pan_caa_dpan_neon; +} +#endif + +#ifdef BUILD_NEON +static void +_op_copy_rel_pt_p_c_dp_neon(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { + s = MUL4_SYM(c, s); + *d = MUL_SYM(*d >> 24, s); +} + + +#define _op_copy_rel_pt_pas_c_dp_neon _op_copy_rel_pt_p_c_dp_neon +#define _op_copy_rel_pt_pan_c_dp_neon _op_copy_rel_pt_p_c_dp_neon +#define _op_copy_rel_pt_p_can_dp_neon _op_copy_rel_pt_p_c_dp_neon +#define _op_copy_rel_pt_pas_can_dp_neon _op_copy_rel_pt_p_c_dp_neon +#define _op_copy_rel_pt_pan_can_dp_neon _op_copy_rel_pt_p_c_dp_neon +#define _op_copy_rel_pt_p_caa_dp_neon _op_copy_rel_pt_p_c_dp_neon +#define _op_copy_rel_pt_pas_caa_dp_neon _op_copy_rel_pt_p_c_dp_neon +#define _op_copy_rel_pt_pan_caa_dp_neon _op_copy_rel_pt_p_c_dp_neon + +#define _op_copy_rel_pt_p_c_dpan_neon _op_copy_pt_p_c_dpan_neon +#define _op_copy_rel_pt_pas_c_dpan_neon _op_copy_pt_pas_c_dpan_neon +#define _op_copy_rel_pt_pan_c_dpan_neon _op_copy_pt_pan_c_dpan_neon +#define _op_copy_rel_pt_p_can_dpan_neon _op_copy_pt_p_can_dpan_neon +#define _op_copy_rel_pt_pas_can_dpan_neon _op_copy_pt_pas_can_dpan_neon +#define _op_copy_rel_pt_pan_can_dpan_neon _op_copy_pt_pan_can_dpan_neon +#define _op_copy_rel_pt_p_caa_dpan_neon _op_copy_pt_p_caa_dpan_neon +#define _op_copy_rel_pt_pas_caa_dpan_neon _op_copy_pt_pas_caa_dpan_neon +#define _op_copy_rel_pt_pan_caa_dpan_neon _op_copy_pt_pan_caa_dpan_neon + + +static void +init_copy_rel_pixel_color_pt_funcs_neon(void) +{ + op_copy_rel_pt_funcs[SP][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pt_p_c_dp_neon; + op_copy_rel_pt_funcs[SP_AS][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pt_pas_c_dp_neon; + op_copy_rel_pt_funcs[SP_AN][SM_N][SC][DP][CPU_NEON] = _op_copy_rel_pt_pan_c_dp_neon; + op_copy_rel_pt_funcs[SP][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pt_p_can_dp_neon; + op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pt_pas_can_dp_neon; + op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP][CPU_NEON] = _op_copy_rel_pt_pan_can_dp_neon; + op_copy_rel_pt_funcs[SP][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pt_p_caa_dp_neon; + op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pt_pas_caa_dp_neon; + op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP][CPU_NEON] = _op_copy_rel_pt_pan_caa_dp_neon; + + op_copy_rel_pt_funcs[SP][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pt_p_c_dpan_neon; + op_copy_rel_pt_funcs[SP_AS][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pt_pas_c_dpan_neon; + op_copy_rel_pt_funcs[SP_AN][SM_N][SC][DP_AN][CPU_NEON] = _op_copy_rel_pt_pan_c_dpan_neon; + op_copy_rel_pt_funcs[SP][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pt_p_can_dpan_neon; + op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pt_pas_can_dpan_neon; + op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AN][DP_AN][CPU_NEON] = _op_copy_rel_pt_pan_can_dpan_neon; + op_copy_rel_pt_funcs[SP][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pt_p_caa_dpan_neon; + op_copy_rel_pt_funcs[SP_AS][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pt_pas_caa_dpan_neon; + op_copy_rel_pt_funcs[SP_AN][SM_N][SC_AA][DP_AN][CPU_NEON] = _op_copy_rel_pt_pan_caa_dpan_neon; +} +#endif diff --git a/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c b/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c new file mode 100644 index 0000000..3d89ff8 --- /dev/null +++ b/src/lib/engines/common/evas_op_copy/op_copy_pixel_mask_neon.c @@ -0,0 +1,152 @@ + +/* copy pixel x mask --> dst */ + +#ifdef BUILD_NEON +static void +_op_copy_p_mas_dp_neon(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) { + // FIXME: neon-it + DATA32 *e; + int color; + UNROLL8_PLD_WHILE(d, l, e, + { + color = *m; + switch(color) + { + case 0: + break; + case 255: + *d = *s; + break; + default: + color++; + *d = INTERP_256(color, *s, *d); + break; + } + m++; s++; d++; + }); +} + +#define _op_copy_pan_mas_dp_neon _op_copy_p_mas_dp_neon +#define _op_copy_pas_mas_dp_neon _op_copy_p_mas_dp_neon + +#define _op_copy_p_mas_dpan_neon _op_copy_p_mas_dp_neon +#define _op_copy_pan_mas_dpan_neon _op_copy_p_mas_dpan_neon +#define _op_copy_pas_mas_dpan_neon _op_copy_p_mas_dpan_neon + +static void +init_copy_pixel_mask_span_funcs_neon(void) +{ + op_copy_span_funcs[SP][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_p_mas_dp_neon; + op_copy_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pan_mas_dp_neon; + op_copy_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pas_mas_dp_neon; + + op_copy_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_p_mas_dpan_neon; + op_copy_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pan_mas_dpan_neon; + op_copy_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pas_mas_dpan_neon; +} +#endif + +#ifdef BUILD_NEON +static void +_op_copy_pt_p_mas_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) { + *d = INTERP_256(m + 1, s, *d); +} + +#define _op_copy_pt_pan_mas_dp_neon _op_copy_pt_p_mas_dp_neon +#define _op_copy_pt_pas_mas_dp_neon _op_copy_pt_p_mas_dp_neon + +#define _op_copy_pt_p_mas_dpan_neon _op_copy_pt_p_mas_dp_neon +#define _op_copy_pt_pan_mas_dpan_neon _op_copy_pt_p_mas_dpan_neon +#define _op_copy_pt_pas_mas_dpan_neon _op_copy_pt_p_mas_dpan_neon + +static void +init_copy_pixel_mask_pt_funcs_neon(void) +{ + op_copy_pt_funcs[SP][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pt_p_mas_dp_neon; + op_copy_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pt_pan_mas_dp_neon; + op_copy_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_pt_pas_mas_dp_neon; + + op_copy_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_p_mas_dpan_neon; + op_copy_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_pan_mas_dpan_neon; + op_copy_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_pas_mas_dpan_neon; +} +#endif + +/*-----*/ + +/* copy_rel pixel x mask --> dst */ + +#ifdef BUILD_NEON +static void +_op_copy_rel_p_mas_dp_neon(DATA32 *s, DATA8 *m, DATA32 c __UNUSED__, DATA32 *d, int l) { + // FIXME: neon-it + DATA32 *e; + int color; + UNROLL8_PLD_WHILE(d, l, e, + { + color = *m; + switch(color) + { + case 0: + break; + case 255: + *d = MUL_SYM(*d >> 24, *s); + break; + default: + c = MUL_SYM(*d >> 24, *s); + l++; + *d = INTERP_256(l, c, *d); + break; + } + m++; s++; d++; + }); +} + +#define _op_copy_rel_pan_mas_dp_neon _op_copy_rel_p_mas_dp_neon +#define _op_copy_rel_pas_mas_dp_neon _op_copy_rel_p_mas_dp_neon + +#define _op_copy_rel_p_mas_dpan_neon _op_copy_p_mas_dpan_neon +#define _op_copy_rel_pan_mas_dpan_neon _op_copy_pan_mas_dpan_neon +#define _op_copy_rel_pas_mas_dpan_neon _op_copy_pas_mas_dpan_neon + +static void +init_copy_rel_pixel_mask_span_funcs_neon(void) +{ + op_copy_rel_span_funcs[SP][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_p_mas_dp_neon; + op_copy_rel_span_funcs[SP_AN][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pan_mas_dp_neon; + op_copy_rel_span_funcs[SP_AS][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pas_mas_dp_neon; + + op_copy_rel_span_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_p_mas_dpan_neon; + op_copy_rel_span_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pan_mas_dpan_neon; + op_copy_rel_span_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pas_mas_dpan_neon; +} +#endif + +#ifdef BUILD_NEON +static void +_op_copy_rel_pt_p_mas_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) { + c = MUL_SYM(*d >> 24, s); + *d = INTERP_256(m + 1, c, *d); +} + + +#define _op_copy_rel_pt_pan_mas_dp_neon _op_copy_rel_pt_p_mas_dp_neon +#define _op_copy_rel_pt_pas_mas_dp_neon _op_copy_rel_pt_p_mas_dp_neon + +#define _op_copy_rel_pt_p_mas_dpan_neon _op_copy_pt_p_mas_dpan_neon +#define _op_copy_rel_pt_pan_mas_dpan_neon _op_copy_pt_pan_mas_dpan_neon +#define _op_copy_rel_pt_pas_mas_dpan_neon _op_copy_pt_pas_mas_dpan_neon + +static void +init_copy_rel_pixel_mask_pt_funcs_neon(void) +{ + op_copy_rel_pt_funcs[SP][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_p_mas_dp_neon; + op_copy_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_pan_mas_dp_neon; + op_copy_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_pas_mas_dp_neon; + + op_copy_rel_pt_funcs[SP][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_p_mas_dpan_neon; + op_copy_rel_pt_funcs[SP_AN][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_pan_mas_dpan_neon; + op_copy_rel_pt_funcs[SP_AS][SM_AS][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_pas_mas_dpan_neon; +} +#endif + diff --git a/src/lib/engines/common/evas_op_copy/op_copy_pixel_neon.c b/src/lib/engines/common/evas_op_copy/op_copy_pixel_neon.c new file mode 100644 index 0000000..2b6b35b --- /dev/null +++ b/src/lib/engines/common/evas_op_copy/op_copy_pixel_neon.c @@ -0,0 +1,118 @@ + +/* copy pixel --> dst */ + +#ifdef BUILD_NEON +static void +_op_copy_p_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) { + memcpy(d, s, l * sizeof(DATA32)); +} + +#define _op_copy_pan_dp_neon _op_copy_p_dp_neon +#define _op_copy_pas_dp_neon _op_copy_p_dp_neon + +#define _op_copy_p_dpan_neon _op_copy_p_dp_neon +#define _op_copy_pan_dpan_neon _op_copy_pan_dp_neon +#define _op_copy_pas_dpan_neon _op_copy_pas_dp_neon + +static void +init_copy_pixel_span_funcs_neon(void) +{ + op_copy_span_funcs[SP][SM_N][SC_N][DP][CPU_NEON] = _op_copy_p_dp_neon; + op_copy_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_NEON] = _op_copy_pan_dp_neon; + op_copy_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_NEON] = _op_copy_pas_dp_neon; + + op_copy_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_p_dpan_neon; + op_copy_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_pan_dpan_neon; + op_copy_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_pas_dpan_neon; +} +#endif + +#ifdef BUILD_NEON +static void +_op_copy_pt_p_dp_neon(DATA32 s, DATA8 m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d) { + *d = s; +} + +#define _op_copy_pt_pan_dp_neon _op_copy_pt_p_dp_neon +#define _op_copy_pt_pas_dp_neon _op_copy_pt_p_dp_neon + +#define _op_copy_pt_p_dpan_neon _op_copy_pt_p_dp_neon +#define _op_copy_pt_pan_dpan_neon _op_copy_pt_pan_dp_neon +#define _op_copy_pt_pas_dpan_neon _op_copy_pt_pas_dp_neon + +static void +init_copy_pixel_pt_funcs_neon(void) +{ + op_copy_pt_funcs[SP][SM_N][SC_N][DP][CPU_NEON] = _op_copy_pt_p_dp_neon; + op_copy_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_NEON] = _op_copy_pt_pan_dp_neon; + op_copy_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_NEON] = _op_copy_pt_pas_dp_neon; + + op_copy_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_p_dpan_neon; + op_copy_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_pan_dpan_neon; + op_copy_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_pt_pas_dpan_neon; +} +#endif + +/*-----*/ + +/* copy_rel pixel --> dst */ + +#ifdef BUILD_NEON +static void +_op_copy_rel_p_dp_neon(DATA32 *s, DATA8 *m __UNUSED__, DATA32 c __UNUSED__, DATA32 *d, int l) { + DATA32 *e; + UNROLL8_PLD_WHILE(d, l, e, + { + *d = MUL_SYM(*d >> 24, c); + d++; + }); +} + + +#define _op_copy_rel_pas_dp_neon _op_copy_rel_p_dp_neon +#define _op_copy_rel_pan_dp_neon _op_copy_rel_p_dp_neon + +#define _op_copy_rel_p_dpan_neon _op_copy_p_dpan_neon +#define _op_copy_rel_pan_dpan_neon _op_copy_pan_dpan_neon +#define _op_copy_rel_pas_dpan_neon _op_copy_pas_dpan_neon + +static void +init_copy_rel_pixel_span_funcs_neon(void) +{ + op_copy_rel_span_funcs[SP][SM_N][SC_N][DP][CPU_NEON] = _op_copy_rel_p_dp_neon; + op_copy_rel_span_funcs[SP_AN][SM_N][SC_N][DP][CPU_NEON] = _op_copy_rel_pan_dp_neon; + op_copy_rel_span_funcs[SP_AS][SM_N][SC_N][DP][CPU_NEON] = _op_copy_rel_pas_dp_neon; + + op_copy_rel_span_funcs[SP][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_p_dpan_neon; + op_copy_rel_span_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pan_dpan_neon; + op_copy_rel_span_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pas_dpan_neon; +} +#endif + +#ifdef BUILD_NEON +static void +_op_copy_rel_pt_p_dp_neon(DATA32 s, DATA8 m __UNUSED__, DATA32 c, DATA32 *d) { + s = 1 + (*d >> 24); + *d = MUL_256(s, c); +} + + +#define _op_copy_rel_pt_pan_dp_neon _op_copy_rel_pt_p_dp_neon +#define _op_copy_rel_pt_pas_dp_neon _op_copy_rel_pt_p_dp_neon + +#define _op_copy_rel_pt_p_dpan_neon _op_copy_pt_p_dpan_neon +#define _op_copy_rel_pt_pan_dpan_neon _op_copy_pt_pan_dpan_neon +#define _op_copy_rel_pt_pas_dpan_neon _op_copy_pt_pas_dpan_neon + +static void +init_copy_rel_pixel_pt_funcs_neon(void) +{ + op_copy_rel_pt_funcs[SP][SM_N][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_p_dp_neon; + op_copy_rel_pt_funcs[SP_AN][SM_N][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_pan_dp_neon; + op_copy_rel_pt_funcs[SP_AS][SM_N][SC_N][DP][CPU_NEON] = _op_copy_rel_pt_pas_dp_neon; + + op_copy_rel_pt_funcs[SP][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_p_dpan_neon; + op_copy_rel_pt_funcs[SP_AN][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_pan_dpan_neon; + op_copy_rel_pt_funcs[SP_AS][SM_N][SC_N][DP_AN][CPU_NEON] = _op_copy_rel_pt_pas_dpan_neon; +} +#endif diff --git a/src/lib/engines/common/evas_op_copy_main_.c b/src/lib/engines/common/evas_op_copy_main_.c index 2491fad..2c7c318 100644 --- a/src/lib/engines/common/evas_op_copy_main_.c +++ b/src/lib/engines/common/evas_op_copy_main_.c @@ -89,12 +89,12 @@ evas_common_gfx_compositor_copy_rel_get(void) # include "./evas_op_copy/op_copy_mask_color_i386.c" //# include "./evas_op_copy/op_copy_pixel_mask_color_i386.c" -//# include "./evas_op_copy/op_copy_pixel_i386.c" +# include "./evas_op_copy/op_copy_pixel_neon.c" # include "./evas_op_copy/op_copy_color_neon.c" -//# include "./evas_op_copy/op_copy_pixel_color_i386.c" -//# include "./evas_op_copy/op_copy_pixel_mask_i386.c" -//# include "./evas_op_copy/op_copy_mask_color_i386.c" -////# include "./evas_op_copy/op_copy_pixel_mask_color_i386.c" +# include "./evas_op_copy/op_copy_pixel_color_neon.c" +# include "./evas_op_copy/op_copy_pixel_mask_neon.c" +# include "./evas_op_copy/op_copy_mask_color_neon.c" +//# include "./evas_op_copy/op_copy_pixel_mask_color_neon.c" static void @@ -129,11 +129,11 @@ op_copy_init(void) init_copy_mask_color_pt_funcs_c(); #endif #ifdef BUILD_NEON -// init_copy_pixel_span_funcs_neon(); -// init_copy_pixel_color_span_funcs_neon(); -// init_copy_pixel_mask_span_funcs_neon(); + init_copy_pixel_span_funcs_neon(); + init_copy_pixel_color_span_funcs_neon(); + init_copy_pixel_mask_span_funcs_neon(); init_copy_color_span_funcs_neon(); -// init_copy_mask_color_span_funcs_neon(); + init_copy_mask_color_span_funcs_neon(); // init_copy_pixel_pt_funcs_neon(); // init_copy_pixel_color_pt_funcs_neon(); -- 2.7.4