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