more neon infra - just for "copies" right now. only 1 func filled in.

SVN revision: 39502
This commit is contained in:
Carsten Haitzler 2009-03-16 10:50:37 +00:00
parent c173f09b34
commit 09176167bd
8 changed files with 701 additions and 15 deletions

View File

@ -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;
}
}

View File

@ -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

View File

@ -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);
}

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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();