amd64 asm patches

SVN revision: 14121
This commit is contained in:
Carsten Haitzler 2005-04-09 00:08:58 +00:00
parent 05735b6091
commit 155fb31bab
5 changed files with 5727 additions and 1 deletions

View File

@ -90,11 +90,16 @@ AC_DEFINE_UNQUOTED(PACKAGE_SOURCE_DIR, "${packagesrcdir}", [Source code director
requirements="freetype2"
mmx=no
amd64=no
case $target_cpu in
i*86)
mmx="yes"
;;
x86_64)
amd64="yes"
;;
esac
AC_ARG_ENABLE(mmx,[ --enable-mmx attempt compiling using mmx assembly [default=auto]],
[
if test x$enableval = xyes; then
@ -106,6 +111,21 @@ AC_ARG_ENABLE(mmx,[ --enable-mmx attempt compiling using mmx assembly
fi
]
)
AC_ARG_ENABLE(amd64,[ --enable-amd64 attempt compiling using amd64 assembly [default=auto]],
[
if test x$enableval = xyes; then
amd64=yes
# Cannot compile with both options enabled
mmx=no
AC_MSG_RESULT(enabling amd64 support)
else
amd64=no
AC_MSG_RESULT(disabling amd64 support)
fi
]
)
if test x$mmx = xyes; then
AC_DEFINE(DO_MMX_ASM, 1, [enabling MMX Assembly])
AC_MSG_RESULT(enabled mmx support)
@ -113,6 +133,13 @@ else
AC_MSG_RESULT(disabled mmx support)
fi
AM_CONDITIONAL(BUILD_MMX, test x$mmx = xyes)
if test x$amd64 = xyes; then
AC_DEFINE(DO_AMD64_ASM, 1, [enabling AMD64 Assembly])
AC_MSG_RESULT(enabled amd64 support)
else
AC_MSG_RESULT(disabled amd64 support)
fi
AM_CONDITIONAL(BUILD_AMD64, test x$amd64 = xyes)
# check for freetype
AC_ARG_WITH(freetype-config, [ --with-freetype-config=FREETYPE_CONFIG use freetype-config specified ],
@ -386,6 +413,7 @@ echo " BZIP2...................: $bz2_ok"
echo
echo
echo "Use MMX for extra speed...: $mmx"
echo "Use AMD64 for extra speed.: $amd64"
echo
echo
echo "Installation Path.........: $prefix"

View File

@ -74,15 +74,25 @@ asm_rgba.S \
asm_rotate.S \
asm_scale.S
EXTRA_libImlib2_la_SOURCES = $(MMX_SRCS)
AMD64_SRCS = \
amd64_blend.S
MMX_OBJS = $(MMX_SRCS:.S=.lo)
AMD64_OBJS = $(AMD64_SRCS:.S=.lo)
if BUILD_MMX
libImlib2_la_LIBADD = $(MMX_OBJS) @my_libs@
libImlib2_la_DEPENDENCIES = $(top_builddir)/config.h $(MMX_OBJS)
EXTRA_libImlib2_la_SOURCES = $(MMX_SRCS)
else
if BUILD_AMD64
libImlib2_la_LIBADD = $(AMD64_OBJS) @my_libs@
libImlib2_la_DEPENDENCIES = $(top_builddir)/config.h $(AMD64_OBJS)
EXTRA_libImlib2_la_SOURCES = $(AMD64_SOURCES)
else
libImlib2_la_LIBADD = @my_libs@
libImlib2_la_DEPENDENCIES = $(top_builddir)/config.h
endif
endif
libImlib2_la_LDFLAGS = -version-info 3:0:2

5560
src/lib/amd64_blend.S Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1397,6 +1397,9 @@ __imlib_ReCopyRGBToRGBACmod(DATA32 * src, int srcw, DATA32 * dst, int dstw,
#define __imlib_mmx_copy_rgb_to_rgb __imlib_mmx_copy_rgb_to_rgba
#define __imlib_mmx_blend_rgb_to_rgb __imlib_mmx_copy_rgb_to_rgb
#define __imlib_mmx_blend_rgb_to_rgba __imlib_mmx_copy_rgb_to_rgba
#define __imlib_amd64_copy_rgb_to_rgb __imlib_amd64_copy_rgb_to_rgba
#define __imlib_amd64_blend_rgb_to_rgb __imlib_amd64_copy_rgb_to_rgb
#define __imlib_amd64_blend_rgb_to_rgba __imlib_amd64_copy_rgb_to_rgba
#define __imlib_CopyRGBToRGBCmod __imlib_CopyRGBAToRGBCmod
#define __imlib_mmx_copy_rgb_to_rgb_cmod __imlib_mmx_copy_rgba_to_rgb_cmod
@ -1406,6 +1409,9 @@ __imlib_ReCopyRGBToRGBACmod(DATA32 * src, int srcw, DATA32 * dst, int dstw,
#define __imlib_mmx_add_copy_rgb_to_rgb __imlib_mmx_add_copy_rgba_to_rgb
#define __imlib_mmx_add_blend_rgb_to_rgb __imlib_mmx_add_copy_rgb_to_rgb
#define __imlib_mmx_add_blend_rgb_to_rgba __imlib_mmx_add_copy_rgb_to_rgba
#define __imlib_amd64_add_copy_rgb_to_rgb __imlib_amd64_add_copy_rgba_to_rgb
#define __imlib_amd64_add_blend_rgb_to_rgb __imlib_amd64_add_copy_rgb_to_rgb
#define __imlib_amd64_add_blend_rgb_to_rgba __imlib_amd64_add_copy_rgb_to_rgba
#define __imlib_AddCopyRGBToRGBCmod __imlib_AddCopyRGBAToRGBCmod
#define __imlib_mmx_add_copy_rgb_to_rgb_cmod __imlib_mmx_add_copy_rgb_to_rgba_cmod
@ -1416,6 +1422,9 @@ __imlib_ReCopyRGBToRGBACmod(DATA32 * src, int srcw, DATA32 * dst, int dstw,
#define __imlib_mmx_subtract_copy_rgb_to_rgb __imlib_mmx_subtract_copy_rgba_to_rgb
#define __imlib_mmx_subtract_blend_rgb_to_rgb __imlib_mmx_subtract_copy_rgb_to_rgb
#define __imlib_mmx_subtract_blend_rgb_to_rgba __imlib_mmx_subtract_copy_rgb_to_rgba
#define __imlib_amd64_subtract_copy_rgb_to_rgb __imlib_amd64_subtract_copy_rgba_to_rgb
#define __imlib_amd64_subtract_blend_rgb_to_rgb __imlib_amd64_subtract_copy_rgb_to_rgb
#define __imlib_amd64_subtract_blend_rgb_to_rgba __imlib_amd64_subtract_copy_rgb_to_rgba
#define __imlib_SubCopyRGBToRGBCmod __imlib_SubCopyRGBAToRGBCmod
#define __imlib_mmx_subtract_copy_rgb_to_rgb_cmod __imlib_mmx_subtract_copy_rgb_to_rgba_cmod
@ -1426,6 +1435,9 @@ __imlib_ReCopyRGBToRGBACmod(DATA32 * src, int srcw, DATA32 * dst, int dstw,
#define __imlib_mmx_reshade_copy_rgb_to_rgb __imlib_mmx_reshade_copy_rgba_to_rgb
#define __imlib_mmx_reshade_blend_rgb_to_rgb __imlib_mmx_reshade_copy_rgb_to_rgb
#define __imlib_mmx_reshade_blend_rgb_to_rgba __imlib_mmx_reshade_copy_rgb_to_rgba
#define __imlib_amd64_reshade_copy_rgb_to_rgb __imlib_amd64_reshade_copy_rgba_to_rgb
#define __imlib_amd64_reshade_blend_rgb_to_rgb __imlib_amd64_reshade_copy_rgb_to_rgb
#define __imlib_amd64_reshade_blend_rgb_to_rgba __imlib_amd64_reshade_copy_rgb_to_rgba
#define __imlib_ReCopyRGBToRGBCmod __imlib_ReCopyRGBAToRGBCmod
#define __imlib_mmx_reshade_copy_rgb_to_rgb_cmod __imlib_mmx_reshade_copy_rgb_to_rgba_cmod
@ -1551,6 +1563,59 @@ __imlib_GetBlendFunction(ImlibOp op, char blend, char merge_alpha, char rgb_src,
/*__imlib_mmx_reshade_blend_rgba_to_rgba_cmod*/ },
{__imlib_ReCopyRGBToRGBACmod /*__imlib_mmx_reshade_copy_rgb_to_rgba_cmod*/,
__imlib_ReBlendRGBToRGBACmod /*__imlib_mmx_reshade_blend_rgb_to_rgba_cmod*/}}}}},
#elif DO_AMD64_ASM
/*\ OP_COPY \ */
{{{{{__imlib_amd64_copy_rgba_to_rgb, __imlib_amd64_blend_rgba_to_rgb},
{__imlib_amd64_copy_rgb_to_rgb, __imlib_amd64_blend_rgb_to_rgb}},
{{__imlib_amd64_copy_rgba_to_rgba, __imlib_amd64_blend_rgba_to_rgba },
{__imlib_amd64_copy_rgb_to_rgba, __imlib_amd64_blend_rgb_to_rgba}}},
{{{__imlib_CopyRGBAToRGBCmod, __imlib_BlendRGBAToRGBCmod},
{__imlib_CopyRGBToRGBCmod, __imlib_BlendRGBToRGBCmod}},
{{__imlib_CopyRGBAToRGBACmod, __imlib_BlendRGBAToRGBACmod},
{__imlib_CopyRGBToRGBACmod, __imlib_BlendRGBToRGBACmod}}}},
/*\ OP_ADD \ */
{{{{__imlib_amd64_add_copy_rgba_to_rgb,
__imlib_amd64_add_blend_rgba_to_rgb},
{__imlib_amd64_add_copy_rgb_to_rgb,
__imlib_amd64_add_blend_rgb_to_rgb}},
{{__imlib_amd64_add_copy_rgba_to_rgba,
__imlib_amd64_add_blend_rgba_to_rgba},
{__imlib_amd64_add_copy_rgb_to_rgba,
__imlib_amd64_add_blend_rgb_to_rgba}}},
{{{__imlib_AddCopyRGBAToRGBCmod, __imlib_AddBlendRGBAToRGBCmod},
{__imlib_AddCopyRGBToRGBCmod, __imlib_AddBlendRGBToRGBCmod}},
{{__imlib_AddCopyRGBAToRGBACmod, __imlib_AddBlendRGBAToRGBACmod},
{__imlib_AddCopyRGBToRGBACmod, __imlib_AddBlendRGBToRGBACmod}}}},
/*\ OP_SUBTRACT \ */
{{{{__imlib_amd64_subtract_copy_rgba_to_rgb,
__imlib_amd64_subtract_blend_rgba_to_rgb},
{__imlib_amd64_subtract_copy_rgb_to_rgb,
__imlib_amd64_subtract_blend_rgb_to_rgb}},
{{__imlib_amd64_subtract_copy_rgba_to_rgba,
__imlib_amd64_subtract_blend_rgba_to_rgba},
{__imlib_amd64_subtract_copy_rgb_to_rgba,
__imlib_amd64_subtract_blend_rgb_to_rgba}}},
{{{__imlib_SubCopyRGBAToRGBCmod, __imlib_SubBlendRGBAToRGBCmod},
{__imlib_SubCopyRGBToRGBCmod, __imlib_SubBlendRGBToRGBCmod}},
{{__imlib_SubCopyRGBAToRGBACmod, __imlib_SubBlendRGBAToRGBACmod},
{__imlib_SubCopyRGBToRGBACmod, __imlib_SubBlendRGBToRGBACmod}}}},
/*\ OP_RESHADE \ */
{{{{__imlib_amd64_reshade_copy_rgba_to_rgb,
__imlib_amd64_reshade_blend_rgba_to_rgb},
{__imlib_amd64_reshade_copy_rgb_to_rgb,
__imlib_amd64_reshade_blend_rgb_to_rgb}},
{{__imlib_amd64_reshade_copy_rgba_to_rgba,
__imlib_amd64_reshade_blend_rgba_to_rgba},
{__imlib_amd64_reshade_copy_rgb_to_rgba,
__imlib_amd64_reshade_blend_rgb_to_rgba}}},
{{{__imlib_ReCopyRGBAToRGBCmod, __imlib_ReBlendRGBAToRGBCmod},
{__imlib_ReCopyRGBToRGBCmod, __imlib_ReBlendRGBToRGBCmod}},
{{__imlib_ReCopyRGBAToRGBACmod, __imlib_ReBlendRGBAToRGBACmod},
{__imlib_ReCopyRGBToRGBACmod, __imlib_ReBlendRGBToRGBACmod}}}}},
#endif
};
@ -1564,6 +1629,8 @@ __imlib_GetBlendFunction(ImlibOp op, char blend, char merge_alpha, char rgb_src,
#ifdef DO_MMX_ASM
do_mmx = !!(__imlib_get_cpuid() & CPUID_MMX);
#elif DO_AMD64_ASM
do_mmx = 1; // instruction set is always present
#endif
if (cm && rgb_src && (A_CMOD(cm, 0xff) == 0xff))
blend = 0;

View File

@ -551,6 +551,67 @@ __imlib_mmx_reshade_copy_rgba_to_rgba_cmod(DATA32 *src, int sw, DATA32 *dst,
void
__imlib_mmx_reshade_copy_rgb_to_rgba_cmod(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
#elif DO_AMD64_ASM
void
__imlib_amd64_blend_rgba_to_rgb(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_blend_rgba_to_rgba(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_copy_rgba_to_rgb(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_copy_rgba_to_rgba(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_copy_rgb_to_rgba(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_add_blend_rgba_to_rgb(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_add_blend_rgba_to_rgba(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_add_copy_rgba_to_rgb(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_add_copy_rgba_to_rgba(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_add_copy_rgb_to_rgba(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_subtract_blend_rgba_to_rgb(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_subtract_blend_rgba_to_rgba(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_subtract_copy_rgba_to_rgb(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_subtract_copy_rgba_to_rgba(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_subtract_copy_rgb_to_rgba(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_reshade_blend_rgba_to_rgb(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_reshade_blend_rgba_to_rgba(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_reshade_copy_rgba_to_rgb(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_reshade_copy_rgba_to_rgba(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
void
__imlib_amd64_reshade_copy_rgb_to_rgba(DATA32 *src, int sw, DATA32 *dst,
int dw, int w, int h, ImlibColorModifier *cm);
#endif
#endif