X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Futil%2Fos_memory_aligned.h;h=08f12062a7fc4816deddd627d535d5a1dc93da6a;hb=7eab6845e9dd49f0ef0bf9a7d986aaf685e77981;hp=df398a32bfdbd3af9124b73a54dff7efc64ade40;hpb=88c4680b5a50ea8840c38aa0a80acde63ef1677b;p=mesa.git diff --git a/src/util/os_memory_aligned.h b/src/util/os_memory_aligned.h index df398a32bfd..08f12062a7f 100644 --- a/src/util/os_memory_aligned.h +++ b/src/util/os_memory_aligned.h @@ -36,10 +36,6 @@ #endif -#include "pipe/p_compiler.h" - - - /** * Add two size_t values with integer overflow check. * TODO: leverage __builtin_add_overflow where available @@ -52,6 +48,22 @@ add_overflow_size_t(size_t a, size_t b, size_t *res) } +#if defined(HAVE_POSIX_MEMALIGN) + +static inline void * +os_malloc_aligned(size_t size, size_t alignment) +{ + void *ptr; + alignment = (alignment + sizeof(void*) - 1) & ~(sizeof(void*) - 1); + if(posix_memalign(&ptr, alignment, size) != 0) + return NULL; + return ptr; +} + +#define os_free_aligned(_ptr) free(_ptr) + +#else + /** * Return memory on given byte alignment */ @@ -96,3 +108,21 @@ os_free_aligned(void *ptr) os_free(realAddr); } } + +#endif + +/** + * Reallocate memeory, with alignment + */ +static inline void * +os_realloc_aligned(void *ptr, size_t oldsize, size_t newsize, size_t alignment) +{ + const size_t copySize = MIN2(oldsize, newsize); + void *newBuf = os_malloc_aligned(newsize, alignment); + if (newBuf && ptr && copySize > 0) { + memcpy(newBuf, ptr, copySize); + } + + os_free_aligned(ptr); + return newBuf; +}