forked from enlightenment/efl
more neon infra - just for "copies" right now. only 1 func filled in.
SVN revision: 39502
This commit is contained in:
parent
c173f09b34
commit
09176167bd
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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
|
||||
|
|
@ -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
|
|
@ -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();
|
||||
|
|
Loading…
Reference in New Issue