blob: 146790e3c7e48db08a4523559bd9434108c3af73 [file] [log] [blame]
njn9a55ee82009-04-15 05:35:00 +00001// Replacement for malloc.h which factors out platform differences.
2
3#include <stdlib.h>
njnf76d27a2009-05-28 01:53:07 +00004#if defined(VGO_darwin)
5# include <malloc/malloc.h>
6#else
7# include <malloc.h>
8#endif
njn9a55ee82009-04-15 05:35:00 +00009
10#include <assert.h>
11
12// Allocates a 16-aligned block. Asserts if the allocation fails.
13__attribute__((unused))
14static void* memalign16(size_t szB)
15{
16 void* x;
njnf76d27a2009-05-28 01:53:07 +000017#if defined(VGO_darwin)
18 // Darwin lacks memalign, but its malloc is always 16-aligned anyway.
sewardjc84e18e2015-09-07 08:20:45 +000019 posix_memalign((void **)&x, 16, szB);
njnf76d27a2009-05-28 01:53:07 +000020#else
njn9a55ee82009-04-15 05:35:00 +000021 x = memalign(16, szB);
njnf76d27a2009-05-28 01:53:07 +000022#endif
njn9a55ee82009-04-15 05:35:00 +000023 assert(x);
24 assert(0 == ((16-1) & (unsigned long)x));
25 return x;
rhyskidd681b4662015-08-15 10:47:55 +000026}
27
28// Allocates a 32-aligned block. Asserts if the allocation fails.
29__attribute__((unused))
30static void* memalign32(size_t szB)
31{
32 void* x;
33#if defined(VGO_darwin)
34 // Darwin lacks memalign
35 posix_memalign((void **)&x, 32, szB);
36#else
37 x = memalign(32, szB);
38#endif
39 assert(x);
40 assert(0 == ((32-1) & (unsigned long)x));
41 return x;
42}
njn9a55ee82009-04-15 05:35:00 +000043
rhyskidd07d0c9e2015-08-15 11:16:35 +000044// Allocates a 64-aligned block. Asserts if the allocation fails.
45__attribute__((unused))
46static void* memalign64(size_t szB)
47{
48 void* x;
49#if defined(VGO_darwin)
50 // Darwin lacks memalign
51 posix_memalign((void **)&x, 64, szB);
52#else
53 x = memalign(64, szB);
54#endif
55 assert(x);
56 assert(0 == ((64-1) & (unsigned long)x));
57 return x;
58}
59