From 3d2043852d1533c79154c21c7a5f8bb453fa6e63 Mon Sep 17 00:00:00 2001 From: Nick Kurshev Date: Thu, 13 Sep 2001 07:16:59 +0000 Subject: [PATCH] memalign autodetection Originally committed as revision 115 to svn://svn.ffmpeg.org/ffmpeg/trunk --- configure | 60 ++++++++++++++++++++++++++++++++++++++++++++++ libavcodec/utils.c | 24 ++++--------------- 2 files changed, 65 insertions(+), 19 deletions(-) diff --git a/configure b/configure index 468774d0b0..29628b0a23 100755 --- a/configure +++ b/configure @@ -1,5 +1,26 @@ #!/bin/sh +TMPC="ffmpeg-conf-${RANDOM}-$$-${RANDOM}.c" +TMPO="ffmpeg-conf-${RANDOM}-$$-${RANDOM}.o" +TMPS="ffmpeg-conf-${RANDOM}-$$-${RANDOM}.S" + +if [ ! -z "$TMPDIR" ]; then + TMPC="${TMPDIR}/${TMPC}" + TMPCPP="${TMPDIR}/${TMPCPP}" + TMPO="${TMPDIR}/${TMPO}" + TMPS="${TMPDIR}/${TMPS}" +elif [ ! -z "$TEMPDIR" ]; then + TMPC="${TEMPDIR}/${TMPC}" + TMPCPP="${TEMPDIR}/${TMPCPP}" + TMPO="${TEMPDIR}/${TMPO}" + TMPS="${TEMPDIR}/${TMPS}" +else + TMPC="/tmp/${TMPC}" + TMPCPP="/tmp/${TMPCPP}" + TMPO="/tmp/${TMPO}" + TMPS="/tmp/${TMPS}" +fi + # default parameters prefix="/usr/local" cc="gcc" @@ -75,6 +96,31 @@ if [ "$win32" = "yes" ] ; then grab="no" fi +# --- +# check availability of some header files + +cat > $TMPC << EOF +#include +int main( void ) { return 0; } +EOF + +_memalign=no +_malloc_h=no +if $cc -o $TMPO $TMPC 2> /dev/null ; then +_malloc_h=yes +_memalign=yes +# check for memalign - atmos +cat > $TMPC << EOF +#include +int main ( void ) { +char *string = NULL; +string = memalign(64, sizeof(char)); +return 0; +} +EOF +$cc -o $TMPO $TMPC 2> /dev/null || _memalign=no +fi + echo "Install prefix $prefix" echo "C compiler $cc" echo "CPU $cpu" @@ -136,3 +182,17 @@ if [ "$win32" = "yes" ] ; then echo "#define CONFIG_WIN32 1" >> config.h echo "CONFIG_WIN32=yes" >> config.mak fi + +if [ "$_malloc_h" = "yes" ]; then + echo "#define HAVE_MALLOC_H 1" >> config.h +else + echo "#undef HAVE_MALLOC_H" >> config.h +fi + +if [ "$_memalign" = "yes" ]; then + echo "#define HAVE_MEMALIGN 1" >> config.h +else + echo "#undef HAVE_MEMALIGN" >> config.h +fi + +rm -f $TMPO $TMPC $TMPS diff --git a/libavcodec/utils.c b/libavcodec/utils.c index f1253abfd9..78e12469e6 100644 --- a/libavcodec/utils.c +++ b/libavcodec/utils.c @@ -16,37 +16,23 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -#include #include #include #include -#include /* __GLIBC__ and __GLIBC_MINOR__ are defined here */ -#if __GLIBC__ >=2 && __GLIBC_MINOR__ >= 1 /* Fixme about glibc-2.0 */ -#define HAVE_MEMALIGN 1 -#include -#endif #include "common.h" #include "dsputil.h" #include "avcodec.h" +#ifdef HAVE_MALLOC_H +#include +#else +#include +#endif /* memory alloc */ void *av_mallocz(int size) { void *ptr; #if defined ( ARCH_X86 ) && defined ( HAVE_MEMALIGN ) -/* - From glibc-2.1.x manuals: - ------------------------- - The address of a block returned by `malloc' or `realloc' in the GNU -system is always a multiple of eight (or sixteen on 64-bit systems). -If you need a block whose address is a multiple of a higher power of -two than that, use `memalign' or `valloc'. These functions are -declared in `stdlib.h'. - - With the GNU library, you can use `free' to free the blocks that -`memalign' and `valloc' return. That does not work in BSD, -however--BSD does not provide any way to free such blocks. -*/ ptr = memalign(64,size); /* Why 64? Indeed, we should align it: