use mmx2 routines if we can - they are faster! (almost 3 times)

SVN revision: 10361
This commit is contained in:
Carsten Haitzler 2004-05-26 02:45:40 +00:00
parent 1d3f35c515
commit 8c29c3d42b
2 changed files with 104 additions and 16 deletions

View File

@ -4,6 +4,8 @@
#include "evas_mmx.h"
#endif
#define ALIGN_FIX
extern DATA8 *_evas_pow_lut;
extern const DATA16 _evas_const_c1[4];
@ -171,6 +173,7 @@ void
evas_common_copy_pixels_rgba_to_rgba_mmx(DATA32 *src, DATA32 *dst, int len)
{
DATA32 *src_ptr, *dst_ptr, *dst_end_ptr, *dst_end_ptr_pre;
#ifdef ALIGN_FIX
int src_align;
int dst_align;
@ -196,6 +199,8 @@ evas_common_copy_pixels_rgba_to_rgba_mmx(DATA32 *src, DATA32 *dst, int len)
#endif
return;
}
#endif
src_ptr = src;
dst_ptr = dst;
dst_end_ptr = dst + len;
@ -221,6 +226,7 @@ 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;
#ifdef ALIGN_FIX
int src_align;
int dst_align;
@ -246,6 +252,8 @@ evas_common_copy_pixels_rgba_to_rgba_mmx2(DATA32 *src, DATA32 *dst, int len)
#endif
return;
}
#endif
src_ptr = src;
dst_ptr = dst;
dst_end_ptr = dst + len;
@ -271,6 +279,7 @@ void
evas_common_copy_pixels_rgba_to_rgba_sse(DATA32 *src, DATA32 *dst, int len)
{
DATA32 *src_ptr, *dst_ptr, *dst_end_ptr, *dst_end_ptr_pre;
#ifdef ALIGN_FIX
int src_align;
int dst_align;
@ -296,6 +305,7 @@ evas_common_copy_pixels_rgba_to_rgba_sse(DATA32 *src, DATA32 *dst, int len)
#endif
return;
}
#endif
src_ptr = src;
dst_ptr = dst;

View File

@ -532,7 +532,42 @@ evas_common_draw_func_blend_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
}
else
{
#ifdef BUILD_SSE
#if 1
# ifdef BUILD_MMX
# ifdef BUILD_C
if (evas_common_cpu_has_feature(CPU_FEATURE_MMX2))
# endif
return evas_common_copy_pixels_rgba_to_rgba_mmx2;
# ifdef BUILD_SSE
else
# endif
#endif
#ifdef BUILD_SSE
# ifdef BUILD_C
if (evas_common_cpu_has_feature(CPU_FEATURE_SSE) && (pixels > 64 * 64))
# endif
return evas_common_copy_pixels_rgba_to_rgba_sse;
# ifdef BUILD_MMX
else
# endif
#endif
#ifdef BUILD_MMX
# ifdef BUILD_C
if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
# endif
return evas_common_copy_pixels_rgba_to_rgba_mmx;
# ifdef BUILD_C
else
# endif
#endif
#ifdef BUILD_C
return evas_common_copy_pixels_rgba_to_rgba_c;
#endif
#else
# ifdef BUILD_SSE
if (evas_common_cpu_has_feature(CPU_FEATURE_SSE) && (pixels > 256 * 256))
return evas_common_copy_pixels_rgba_to_rgba_sse;
# ifdef BUILD_MMX
@ -554,6 +589,8 @@ evas_common_draw_func_blend_get(RGBA_Image *src, RGBA_Image *dst, int pixels)
#endif
#ifdef BUILD_C
return evas_common_copy_pixels_rgba_to_rgba_c;
#endif
#endif
}
}
@ -596,7 +633,7 @@ evas_common_draw_func_blend_color_get(DATA32 src, RGBA_Image *dst, int pixels)
else
{
#ifdef BUILD_SSE
if (evas_common_cpu_has_feature(CPU_FEATURE_SSE) && (pixels > 256 * 256))
if (evas_common_cpu_has_feature(CPU_FEATURE_SSE) && (pixels > 64 * 64))
return evas_common_copy_color_rgba_to_rgba_sse;
#endif
#ifdef BUILD_MMX
@ -755,25 +792,66 @@ evas_common_draw_func_copy_get(int pixels, int reverse)
}
else
{
#ifdef BUILD_SSE
if (evas_common_cpu_has_feature(CPU_FEATURE_SSE) && (pixels > 256 * 256))
return evas_common_copy_pixels_rgba_to_rgba_sse;
#if 1
# ifdef BUILD_MMX
# ifdef BUILD_C
if (evas_common_cpu_has_feature(CPU_FEATURE_MMX2))
# endif
return evas_common_copy_pixels_rgba_to_rgba_mmx2;
# ifdef BUILD_SSE
else
# endif
#endif
#ifdef BUILD_SSE
# ifdef BUILD_C
if (evas_common_cpu_has_feature(CPU_FEATURE_SSE) && (pixels > 64 * 64))
# endif
return evas_common_copy_pixels_rgba_to_rgba_sse;
# ifdef BUILD_MMX
else
# endif
#endif
#ifdef BUILD_MMX
# ifdef BUILD_SSE
else
# ifdef BUILD_C
if (evas_common_cpu_has_feature(CPU_FEATURE_MMX))
# endif
return evas_common_copy_pixels_rgba_to_rgba_mmx;
# ifdef BUILD_C
else
# endif
#endif
#ifdef BUILD_C
return evas_common_copy_pixels_rgba_to_rgba_c;
#endif
#else
# ifdef BUILD_SSE
if (evas_common_cpu_has_feature(CPU_FEATURE_SSE) && (pixels > 256 * 256))
return evas_common_copy_pixels_rgba_to_rgba_sse;
# ifdef BUILD_MMX
else
# endif
#endif
#ifdef BUILD_MMX
# ifdef BUILD_C
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
else
# endif
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
# ifdef BUILD_MMX
else
# endif
return evas_common_copy_pixels_rgba_to_rgba_c;
#endif
return evas_common_copy_pixels_rgba_to_rgba_c;
#endif
#endif
}
if (!_evas_pow_lut) evas_common_blend_init_evas_pow_lut();
#ifdef BUILD_C