Commit be1a839c authored by Ronald S. Bultje's avatar Ronald S. Bultje Committed by Martin Storsjö

mem: add support for _aligned_malloc() as found on Windows

The check uses check_func_header, since this function is
conditionally available depending on the targeted MSVCRT
version.
Signed-off-by: 's avatarMartin Storsjö <martin@martin.st>
parent 7146177d
......@@ -1051,6 +1051,7 @@ HAVE_LIST="
$ARCH_EXT_LIST
$HAVE_LIST_PUB
$THREADS_LIST
aligned_malloc
aligned_stack
alsa_asoundlib_h
altivec_h
......@@ -2838,6 +2839,7 @@ check_func ${malloc_prefix}memalign && enable memalign
check_func mkstemp
check_func mmap
check_func ${malloc_prefix}posix_memalign && enable posix_memalign
check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
check_func setrlimit
check_func strerror_r
check_func strptime
......@@ -3144,7 +3146,7 @@ check_deps $CONFIG_LIST \
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_LIST; }
! enabled_any memalign posix_memalign &&
! enabled_any memalign posix_memalign aligned_malloc &&
enabled_any $need_memalign && enable memalign_hack
echo "install prefix $prefix"
......
......@@ -84,6 +84,8 @@ void *av_malloc(size_t size)
#elif HAVE_POSIX_MEMALIGN
if (posix_memalign(&ptr,32,size))
ptr = NULL;
#elif HAVE_ALIGNED_MALLOC
ptr = _aligned_malloc(size, 32);
#elif HAVE_MEMALIGN
ptr = memalign(32,size);
/* Why 64?
......@@ -131,6 +133,8 @@ void *av_realloc(void *ptr, size_t size)
if(!ptr) return av_malloc(size);
diff= ((char*)ptr)[-1];
return (char*)realloc((char*)ptr - diff, size + diff) + diff;
#elif HAVE_ALIGNED_MALLOC
return _aligned_realloc(ptr, size, 32);
#else
return realloc(ptr, size);
#endif
......@@ -141,6 +145,8 @@ void av_free(void *ptr)
#if CONFIG_MEMALIGN_HACK
if (ptr)
free((char*)ptr - ((char*)ptr)[-1]);
#elif HAVE_ALIGNED_MALLOC
_aligned_free(ptr);
#else
free(ptr);
#endif
......
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