Also, mark some functions with a FIXME as they look just wrong.
COPY_REL is never used...
MMX and NEON optimizations should be implemented for COPY MASK+COL.
int alpha;
UNROLL8_PLD_WHILE(d, l, e,
{
+ /* d = m*c */
alpha = *m;
switch(alpha)
{
static void
_op_copy_rel_mas_c_dp(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
+ /* FIXME: THIS FUNCTION HAS PROBABLY NEVER BEEN TESTED */
DATA32 *e;
int color;
UNROLL8_PLD_WHILE(d, l, e,
{
+ /* d = (m*c)*da */
color = *m;
switch(color)
{
case 0:
+ *d = 0;
break;
case 255:
color = 1 + (*d >> 24);
static void
_op_copy_rel_pt_mas_c_dp(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
+ /* FIXME: THIS FUNCTION HAS PROBABLY NEVER BEEN TESTED */
s = 1 + (*d >> 24);
s = MUL_256(s, c);
*d = INTERP_256(m + 1, s, *d);
#ifdef BUILD_MMX
static void
_op_copy_mas_c_dp_mmx(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
+#if 1
+ DATA32 *e;
+ int alpha;
+ UNROLL8_PLD_WHILE(d, l, e,
+ {
+ /* d = m*c */
+ alpha = *m;
+ switch(alpha)
+ {
+ case 0:
+ *d = 0;
+ break;
+ case 255:
+ *d = c;
+ break;
+ default:
+ alpha++;
+ *d = MUL_256(alpha, c);
+ break;
+ }
+ m++; d++;
+ });
+#else
+#warning This MMX function looks broken. Please fixme.
DATA32 *e = d + l;
pxor_r2r(mm0, mm0);
MOV_P2R(c, mm2, mm0)
}
m++; d++;
}
+#endif
}
#define _op_copy_mas_cn_dp_mmx _op_copy_mas_c_dp_mmx
#ifdef BUILD_MMX
static void
_op_copy_rel_mas_c_dp_mmx(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
+ /* FIXME: THIS FUNCTION HAS PROBABLY NEVER BEEN TESTED */
DATA32 *e = d + l;
pxor_r2r(mm0, mm0);
MOV_P2R(c, mm2, mm0)
_op_copy_mas_c_dp_neon(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
// FIXME: neon-it
DATA32 *e;
- int color;
+ int alpha;
UNROLL8_PLD_WHILE(d, l, e,
{
- color = *m;
- switch(color)
+ /* d = m*c */
+ alpha = *m;
+ switch(alpha)
{
case 0:
+ *d = 0;
break;
case 255:
*d = c;
break;
default:
- color++;
- *d = INTERP_256(color, c, *d);
+ alpha++;
+ *d = MUL_256(alpha, c);
break;
}
m++; d++;
#ifdef BUILD_NEON
static void
_op_copy_rel_mas_c_dp_neon(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, DATA32 *d, int l) {
+ /* FIXME: THIS FUNCTION HAS PROBABLY NEVER BEEN TESTED */
// FIXME: neon-it
DATA32 *e;
int color;
#ifdef BUILD_NEON
static void
_op_copy_rel_pt_mas_c_dp_neon(DATA32 s, DATA8 m, DATA32 c, DATA32 *d) {
+ /* FIXME: THIS FUNCTION HAS PROBABLY NEVER BEEN TESTED */
s = 1 + (*d >> 24);
s = MUL_256(s, c);
*d = INTERP_256(m + 1, s, *d);