Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/evas

Dir     : e17/libs/evas/src/lib/engines/common


Modified Files:
        evas_blend_pixel_pixel.c evas_cpu.c evas_draw_main.c 


Log Message:


1. mmx2 pixel copy and cleanup of pixel copy routines
2. gl engine cleanups. working on it.

===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_blend_pixel_pixel.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- evas_blend_pixel_pixel.c    12 May 2003 02:26:26 -0000      1.4
+++ evas_blend_pixel_pixel.c    10 Sep 2003 08:52:17 -0000      1.5
@@ -146,18 +146,22 @@
    int src_align;
    int dst_align;
 
-   src_align = (int)src & 0x7; /* 8 byte alignment */
-   dst_align = (int)dst & 0x7; /* 8 byte alignment */
-   if ((!src_align) && (!dst_align))
-     /* both not aligned. do fixup */
-     {
-       *dst = *src;
-       dst++;
-       src++;
-       len--;
+   src_align = (int)src & 0x3f; /* 64 byte alignment */
+   dst_align = (int)dst & 0x3f; /* 64 byte alignment */
+   if ((src_align != 0) && 
+       (!(src_align & 0x3)) && 
+       (src_align == dst_align))
+     {
+       while ((src_align > 0) && (len > 0))
+         {
+            *dst = *src;
+            dst++;
+            src++;
+            len--;
+            src_align -= sizeof(DATA32);
+         }
      }
-   else if ((!src_align) || (!dst_align))
-     /* one isnt aligned. we can't do fixup. do it the slow way */
+   else
      {
 #ifdef BUILD_C
        evas_common_copy_pixels_rgba_to_rgba_c(src, dst, len);
@@ -184,6 +188,56 @@
 }
 #endif
 
+#ifdef BUILD_MMX
+void
+evas_common_copy_pixels_rgba_to_rgba_mmx2(DATA32 *src, DATA32 *dst, int len)
+{
+   DATA32 *src_ptr, *dst_ptr, *dst_end_ptr, *dst_end_ptr_pre;
+   int src_align;
+   int dst_align;
+
+   src_align = (int)src & 0x3f; /* 64 byte alignment */
+   dst_align = (int)dst & 0x3f; /* 64 byte alignment */
+   if ((src_align != 0) && 
+       (!(src_align & 0x3)) && 
+       (src_align == dst_align))
+     {
+       while ((src_align > 0) && (len > 0))
+         {
+            *dst = *src;
+            dst++;
+            src++;
+            len--;
+            src_align -= sizeof(DATA32);
+         }
+     }
+   else
+     {
+#ifdef BUILD_C
+       evas_common_copy_pixels_rgba_to_rgba_c(src, dst, len);
+#endif
+       return;
+     }
+   src_ptr = src;
+   dst_ptr = dst;
+   dst_end_ptr = dst + len;
+   dst_end_ptr_pre = dst + ((len / 16) * 16);
+   
+   while (dst_ptr < dst_end_ptr_pre)
+     {
+       MOVE_16DWORDS_MMX2(src_ptr, dst_ptr);
+       src_ptr+=16;
+       dst_ptr+=16;
+     }
+   while (dst_ptr < dst_end_ptr)
+     {
+       *dst_ptr = *src_ptr;
+       src_ptr++;
+       dst_ptr++;
+     }
+}
+#endif
+
 #ifdef BUILD_SSE
 void
 evas_common_copy_pixels_rgba_to_rgba_sse(DATA32 *src, DATA32 *dst, int len)
@@ -192,18 +246,22 @@
    int src_align;
    int dst_align;
 
-   src_align = (int)src & 0x7; /* 8 byte alignment */
-   dst_align = (int)dst & 0x7; /* 8 byte alignment */
-   if ((!src_align) && (!dst_align))
-     /* both not aligned. do fixup */
-     {
-       *dst = *src;
-       dst++;
-       src++;
-       len--;
+   src_align = (int)src & 0x3f; /* 64 byte alignment */
+   dst_align = (int)dst & 0x3f; /* 64 byte alignment */
+   if ((src_align != 0) && 
+       (!(src_align & 0x3)) && 
+       (src_align == dst_align))
+     {
+       while ((src_align > 0) && (len > 0))
+         {
+            *dst = *src;
+            dst++;
+            src++;
+            len--;
+            src_align -= sizeof(DATA32);
+         }
      }
-   else if ((!src_align) || (!dst_align))
-     /* one isnt aligned. we can't do fixup. do it the slow way */
+   else
      {
 #ifdef BUILD_C
        evas_common_copy_pixels_rgba_to_rgba_c(src, dst, len);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_cpu.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- evas_cpu.c  7 Sep 2003 11:24:48 -0000       1.12
+++ evas_cpu.c  10 Sep 2003 08:52:17 -0000      1.13
@@ -23,6 +23,17 @@
 }
 
 void
+evas_common_cpu_mmx2_test(void)
+{
+#ifdef BUILD_MMX
+   char data[128];
+   char data2[128];
+   
+   MOVE_16DWORDS_MMX2(data, data2);
+#endif   
+}
+
+void
 evas_common_cpu_sse_test(void)
 {
 #ifdef BUILD_SSE   
@@ -79,6 +90,8 @@
 #ifdef BUILD_MMX
    cpu_feature_mask |= CPU_FEATURE_MMX * 
      evas_common_cpu_feature_test(evas_common_cpu_mmx_test);
+   cpu_feature_mask |= CPU_FEATURE_MMX2 * 
+     evas_common_cpu_feature_test(evas_common_cpu_mmx2_test);
 #ifdef BUILD_SSE
    cpu_feature_mask |= CPU_FEATURE_SSE * 
      evas_common_cpu_feature_test(evas_common_cpu_sse_test);
@@ -133,6 +146,7 @@
        cpu_feature_mask |= CPU_FEATURE_MMX;
 #endif
        if (cpu_feature_mask & CPU_FEATURE_MMX) do_mmx = 1;
+       if (cpu_feature_mask & CPU_FEATURE_MMX2) do_mmx = 2;
        if (cpu_feature_mask & CPU_FEATURE_SSE) do_sse = 1;
      }
 //   printf("%i %i %i\n", do_mmx, do_sse, do_sse2);
@@ -146,7 +160,8 @@
 void
 evas_common_cpu_end_opt(void)
 {
-   if (cpu_feature_mask & CPU_FEATURE_MMX)
+   if (cpu_feature_mask & 
+       (CPU_FEATURE_MMX | CPU_FEATURE_MMX2))
      {
        emms();
      }
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/evas/src/lib/engines/common/evas_draw_main.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- evas_draw_main.c    9 Sep 2003 05:51:02 -0000       1.4
+++ evas_draw_main.c    10 Sep 2003 08:52:17 -0000      1.5
@@ -538,7 +538,11 @@
 #endif        
 #ifdef BUILD_MMX
 # ifdef BUILD_C
-              if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
+              if (evas_common_cpu_has_feature(CPU_FEATURE_MMX2))
+# endif               
+                return evas_common_copy_pixels_rgba_to_rgba_mmx2;
+# ifdef BUILD_C
+              else if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
 # endif               
                 return evas_common_copy_pixels_rgba_to_rgba_mmx;
 # ifdef BUILD_C
@@ -763,7 +767,9 @@
 # ifdef BUILD_SSE           
        else
 # endif               
-         if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
+         if (evas_common_cpu_has_feature(CPU_FEATURE_MMX2))
+           return evas_common_copy_pixels_rgba_to_rgba_mmx2;
+         else if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
            return evas_common_copy_pixels_rgba_to_rgba_mmx;
 #endif
 #ifdef BUILD_C




-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to