Commit 32d25582 authored by nickols_k's avatar nickols_k

memalign autodetection


git-svn-id: file:///var/local/repositories/ffmpeg/trunk@115 9553f0bf-9b14-0410-a0b8-cfaf0461ba5b
parent 005e215d
#!/bin/sh #!/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 # default parameters
prefix="/usr/local" prefix="/usr/local"
cc="gcc" cc="gcc"
...@@ -75,6 +96,31 @@ if [ "$win32" = "yes" ] ; then ...@@ -75,6 +96,31 @@ if [ "$win32" = "yes" ] ; then
grab="no" grab="no"
fi fi
# ---
# check availability of some header files
cat > $TMPC << EOF
#include <malloc.h>
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 <malloc.h>
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 "Install prefix $prefix"
echo "C compiler $cc" echo "C compiler $cc"
echo "CPU $cpu" echo "CPU $cpu"
...@@ -136,3 +182,17 @@ if [ "$win32" = "yes" ] ; then ...@@ -136,3 +182,17 @@ if [ "$win32" = "yes" ] ; then
echo "#define CONFIG_WIN32 1" >> config.h echo "#define CONFIG_WIN32 1" >> config.h
echo "CONFIG_WIN32=yes" >> config.mak echo "CONFIG_WIN32=yes" >> config.mak
fi 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
...@@ -16,37 +16,23 @@ ...@@ -16,37 +16,23 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
#include <stdlib.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <errno.h> #include <errno.h>
#include <limits.h> /* __GLIBC__ and __GLIBC_MINOR__ are defined here */
#if __GLIBC__ >=2 && __GLIBC_MINOR__ >= 1 /* Fixme about glibc-2.0 */
#define HAVE_MEMALIGN 1
#include <malloc.h>
#endif
#include "common.h" #include "common.h"
#include "dsputil.h" #include "dsputil.h"
#include "avcodec.h" #include "avcodec.h"
#ifdef HAVE_MALLOC_H
#include <malloc.h>
#else
#include <stdlib.h>
#endif
/* memory alloc */ /* memory alloc */
void *av_mallocz(int size) void *av_mallocz(int size)
{ {
void *ptr; void *ptr;
#if defined ( ARCH_X86 ) && defined ( HAVE_MEMALIGN ) #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); ptr = memalign(64,size);
/* Why 64? /* Why 64?
Indeed, we should align it: Indeed, we should align it:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment