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=" ...@@ -1051,6 +1051,7 @@ HAVE_LIST="
$ARCH_EXT_LIST $ARCH_EXT_LIST
$HAVE_LIST_PUB $HAVE_LIST_PUB
$THREADS_LIST $THREADS_LIST
aligned_malloc
aligned_stack aligned_stack
alsa_asoundlib_h alsa_asoundlib_h
altivec_h altivec_h
...@@ -2838,6 +2839,7 @@ check_func ${malloc_prefix}memalign && enable memalign ...@@ -2838,6 +2839,7 @@ check_func ${malloc_prefix}memalign && enable memalign
check_func mkstemp check_func mkstemp
check_func mmap check_func mmap
check_func ${malloc_prefix}posix_memalign && enable posix_memalign check_func ${malloc_prefix}posix_memalign && enable posix_memalign
check_func_headers malloc.h _aligned_malloc && enable aligned_malloc
check_func setrlimit check_func setrlimit
check_func strerror_r check_func strerror_r
check_func strptime check_func strptime
...@@ -3144,7 +3146,7 @@ check_deps $CONFIG_LIST \ ...@@ -3144,7 +3146,7 @@ check_deps $CONFIG_LIST \
enabled asm || { arch=c; disable $ARCH_LIST $ARCH_EXT_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 enabled_any $need_memalign && enable memalign_hack
echo "install prefix $prefix" echo "install prefix $prefix"
......
...@@ -84,6 +84,8 @@ void *av_malloc(size_t size) ...@@ -84,6 +84,8 @@ void *av_malloc(size_t size)
#elif HAVE_POSIX_MEMALIGN #elif HAVE_POSIX_MEMALIGN
if (posix_memalign(&ptr,32,size)) if (posix_memalign(&ptr,32,size))
ptr = NULL; ptr = NULL;
#elif HAVE_ALIGNED_MALLOC
ptr = _aligned_malloc(size, 32);
#elif HAVE_MEMALIGN #elif HAVE_MEMALIGN
ptr = memalign(32,size); ptr = memalign(32,size);
/* Why 64? /* Why 64?
...@@ -131,6 +133,8 @@ void *av_realloc(void *ptr, size_t size) ...@@ -131,6 +133,8 @@ void *av_realloc(void *ptr, size_t size)
if(!ptr) return av_malloc(size); if(!ptr) return av_malloc(size);
diff= ((char*)ptr)[-1]; diff= ((char*)ptr)[-1];
return (char*)realloc((char*)ptr - diff, size + diff) + diff; return (char*)realloc((char*)ptr - diff, size + diff) + diff;
#elif HAVE_ALIGNED_MALLOC
return _aligned_realloc(ptr, size, 32);
#else #else
return realloc(ptr, size); return realloc(ptr, size);
#endif #endif
...@@ -141,6 +145,8 @@ void av_free(void *ptr) ...@@ -141,6 +145,8 @@ void av_free(void *ptr)
#if CONFIG_MEMALIGN_HACK #if CONFIG_MEMALIGN_HACK
if (ptr) if (ptr)
free((char*)ptr - ((char*)ptr)[-1]); free((char*)ptr - ((char*)ptr)[-1]);
#elif HAVE_ALIGNED_MALLOC
_aligned_free(ptr);
#else #else
free(ptr); free(ptr);
#endif #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