raster pushed a commit to branch master.

commit 19141484464c42e7376229cbe0e428d7d15288f7
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Fri Jun 14 21:32:15 2013 +0900

    evas: optimization - handle if c1 == c2 for map interplated lines
---
 src/lib/evas/common/evas_map_image_core.c | 34 +++++++++++++++++++++----------
 src/lib/evas/common/evas_map_image_loop.c | 26 ++++++++++++++++++++++-
 2 files changed, 48 insertions(+), 12 deletions(-)

diff --git a/src/lib/evas/common/evas_map_image_core.c 
b/src/lib/evas/common/evas_map_image_core.c
index 89b5051..7e44c4b 100644
--- a/src/lib/evas/common/evas_map_image_core.c
+++ b/src/lib/evas/common/evas_map_image_core.c
@@ -7,13 +7,13 @@
              int x, w, ww;
              FPc u, v, ud, vd, dv, ue, ve;
              DATA32 *d, *s;
-#ifdef COLMUL             
+#ifdef COLMUL
              FPc cv, cd; // col
 # ifdef SCALE_USING_MMX
              FPc cc;
-#endif             
+#endif
              DATA32 c1, c2; // col
-#endif             
+#endif
              Line *line;
              
 #ifdef SCALE_USING_MMX
@@ -74,8 +74,8 @@
                        else
                          d = buf;
 
-#define SMOOTH 1                       
-#ifdef COLMUL             
+#define SMOOTH 1
+#ifdef COLMUL
                        c1 = span->col[0]; // col
                        c2 = span->col[1]; // col
                        cv = 0; // col
@@ -85,16 +85,20 @@
                          {
                             if (c1 == 0xffffffff)
                               {
-#endif                         
+#endif
+#define COLSAME 1
 #include "evas_map_image_loop.c"
-#ifdef COLMUL             
+#undef COLSAME
+#ifdef COLMUL
                               }
                             else if ((c1 == 0x0000ff) && 
(!src->cache_entry.flags.alpha))
                               {
                                  // all black line
 # define COLBLACK 1
+# define COLSAME 1
 # include "evas_map_image_loop.c"
-# undef COLBLACK                                 
+# undef COLSAME
+# undef COLBLACK
                               }
                             else if (c1 == 0x000000)
                               {
@@ -103,7 +107,9 @@
                             else
                               {
                                  // generic loop
+# define COLSAME 1
 # include "evas_map_image_loop.c"
+# undef COLSAME
                               }
                          }
                        else
@@ -132,7 +138,7 @@
 #ifdef COLMUL
              FPc cv, cd; // col
              DATA32 c1, c2; // col
-#endif             
+#endif
              Line *line;
              
              line = &(spans[y - ystart]);
@@ -185,16 +191,20 @@
                          {
                             if (c1 == 0xffffffff)
                               {
-#endif                                 
+#endif
+#define COLSAME 1
 #include "evas_map_image_loop.c"
+#undef COLSAME
 #ifdef COLMUL
                               }
                             else if ((c1 == 0x0000ff) && 
(!src->cache_entry.flags.alpha))
                               {
                                  // all black line
 # define COLBLACK 1
+# define COLSAME 1
 # include "evas_map_image_loop.c"
-# undef COLBLACK                                 
+# undef COLSAME
+# undef COLBLACK
                               }
                             else if (c1 == 0x000000)
                               {
@@ -203,7 +213,9 @@
                             else
                               {
                                  // generic loop
+# define COLSAME 1
 # include "evas_map_image_loop.c"
+# undef COLSAME
                               }
                          }
                        else
diff --git a/src/lib/evas/common/evas_map_image_loop.c 
b/src/lib/evas/common/evas_map_image_loop.c
index c434386..be176ee 100644
--- a/src/lib/evas/common/evas_map_image_loop.c
+++ b/src/lib/evas/common/evas_map_image_loop.c
@@ -1,5 +1,12 @@
 #ifdef SMOOTH
 {
+# ifdef SCALE_USING_MMX
+#   ifdef COLMUL
+#    ifdef COLSAME
+   MOV_P2R(c1, mm7, mm0); // col
+#    endif   
+#   endif   
+#  endif   
    while (ww > 0)
      {
 # ifdef COLBLACK
@@ -56,6 +63,10 @@
           }
         INTERP_256_R2R(mm4, mm2, mm1, mm5);
 #   ifdef COLMUL
+#    ifdef COLSAME
+//        MOV_P2R(c1, mm7, mm0); // col
+        MUL4_SYM_R2R(mm7, mm1, mm5); // col
+#    else        
         cc = cv >> 16; // col
         cv += cd; // col
         MOV_A2R(cc, mm2); // col
@@ -63,6 +74,7 @@
         MOV_P2R(c2, mm4, mm0); // col
         INTERP_256_R2R(mm2, mm4, mm3, mm5); // col
         MUL4_SYM_R2R(mm3, mm1, mm5); // col
+#    endif        
 #   endif                            
         MOV_R2P(mm1, *d, mm0);
 #  else
@@ -70,9 +82,13 @@
         val3 = INTERP_256(ru, val4, val3);
         val1 = INTERP_256(rv, val3, val1); // col
 #   ifdef COLMUL                            
+#   ifdef COLSAME
+        *d = MUL4_SYM(c1, val1);
+#   else        
         val2 = INTERP_256((cv >> 16), c2, c1); // col
         *d   = MUL4_SYM(val2, val1); // col
         cv += cd; // col
+#   endif
 #   else                            
         *d   = INTERP_256(rv, val3, val1);
 #   endif
@@ -90,7 +106,11 @@
      {
 # ifdef COLMUL
 #  ifndef COLBLACK        
-        DATA32 val1, cval; // col
+        DATA32 val1;
+#   ifdef COLSAME
+#   else        
+        DATA32 cval; // col
+#   endif        
 #  endif
 # endif
 # ifdef COLBLACK
@@ -100,9 +120,13 @@
           (u >> (FP + FPI));
 #  ifdef COLMUL
         val1 = *s; // col
+#   ifdef COLSAME
+        *d = MUL4_SYM(c1, val1);
+#   else        
         cval = INTERP_256((cv >> 16), c2, c1); // col
         *d = MUL4_SYM(cval, val1);
         cv += cd; // col              
+#   endif        
 #  else
         *d = *s;
 #  endif

-- 

------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev

Reply via email to