// Replacement for malloc.h which factors out platform differences. #include <stdlib.h> #if defined(VGO_darwin) # include <malloc/malloc.h> #else # include <malloc.h> #endif #include <assert.h> // Allocates a 16-aligned block. Asserts if the allocation fails. __attribute__((unused)) static void* memalign16(size_t szB) { void* x; #if defined(VGO_darwin) // Darwin lacks memalign, but its malloc is always 16-aligned anyway. posix_memalign((void **)&x, 16, szB); #else x = memalign(16, szB); #endif assert(x); assert(0 == ((16-1) & (unsigned long)x)); return x; } // Allocates a 32-aligned block. Asserts if the allocation fails. __attribute__((unused)) static void* memalign32(size_t szB) { void* x; #if defined(VGO_darwin) // Darwin lacks memalign posix_memalign((void **)&x, 32, szB); #else x = memalign(32, szB); #endif assert(x); assert(0 == ((32-1) & (unsigned long)x)); return x; } // Allocates a 64-aligned block. Asserts if the allocation fails. __attribute__((unused)) static void* memalign64(size_t szB) { void* x; #if defined(VGO_darwin) // Darwin lacks memalign posix_memalign((void **)&x, 64, szB); #else x = memalign(64, szB); #endif assert(x); assert(0 == ((64-1) & (unsigned long)x)); return x; }