jpeg pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=e21a40de9dfdebdcd3f350aa5e5104be35058675

commit e21a40de9dfdebdcd3f350aa5e5104be35058675
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Mon Nov 10 18:16:56 2014 +0900

    Evas: Fix COPY op for mask+color
    
    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.
---
 .../evas/common/evas_op_copy/op_copy_mask_color_.c |  5 +++++
 .../common/evas_op_copy/op_copy_mask_color_i386.c  | 26 ++++++++++++++++++++++
 .../common/evas_op_copy/op_copy_mask_color_neon.c  | 14 +++++++-----
 3 files changed, 40 insertions(+), 5 deletions(-)

diff --git a/src/lib/evas/common/evas_op_copy/op_copy_mask_color_.c 
b/src/lib/evas/common/evas_op_copy/op_copy_mask_color_.c
index 3cbecbe..dcb4545 100644
--- a/src/lib/evas/common/evas_op_copy/op_copy_mask_color_.c
+++ b/src/lib/evas/common/evas_op_copy/op_copy_mask_color_.c
@@ -6,6 +6,7 @@ _op_copy_mas_c_dp(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 c, 
DATA32 *d, int l) {
    int alpha;
    UNROLL8_PLD_WHILE(d, l, e,
                      {
+                        /* d = m*c */
                         alpha = *m;
                         switch(alpha)
                           {
@@ -82,14 +83,17 @@ init_copy_mask_color_pt_funcs_c(void)
 
 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);
@@ -134,6 +138,7 @@ init_copy_rel_mask_color_span_funcs_c(void)
 
 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);
diff --git a/src/lib/evas/common/evas_op_copy/op_copy_mask_color_i386.c 
b/src/lib/evas/common/evas_op_copy/op_copy_mask_color_i386.c
index a8c85e0..4381326 100644
--- a/src/lib/evas/common/evas_op_copy/op_copy_mask_color_i386.c
+++ b/src/lib/evas/common/evas_op_copy/op_copy_mask_color_i386.c
@@ -3,6 +3,30 @@
 #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)
@@ -29,6 +53,7 @@ _op_copy_mas_c_dp_mmx(DATA32 *s EINA_UNUSED, DATA8 *m, DATA32 
c, DATA32 *d, int
          }
        m++;  d++;
      }
+#endif
 }
 
 #define _op_copy_mas_cn_dp_mmx _op_copy_mas_c_dp_mmx
@@ -99,6 +124,7 @@ init_copy_mask_color_pt_funcs_mmx(void)
 #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)
diff --git a/src/lib/evas/common/evas_op_copy/op_copy_mask_color_neon.c 
b/src/lib/evas/common/evas_op_copy/op_copy_mask_color_neon.c
index 7d9a44e..e5d6d57 100644
--- a/src/lib/evas/common/evas_op_copy/op_copy_mask_color_neon.c
+++ b/src/lib/evas/common/evas_op_copy/op_copy_mask_color_neon.c
@@ -5,20 +5,22 @@ static void
 _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++;
@@ -86,6 +88,7 @@ init_copy_mask_color_pt_funcs_neon(void)
 #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;
@@ -140,6 +143,7 @@ init_copy_rel_mask_color_span_funcs_neon(void)
 #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);

-- 


Reply via email to