/src/xnnpack/src/allocator.c
Line | Count | Source |
1 | | // Copyright 2019 Google LLC |
2 | | // |
3 | | // This source code is licensed under the BSD-style license found in the |
4 | | // LICENSE file in the root directory of this source tree. |
5 | | |
6 | | #include <assert.h> |
7 | | #include <stddef.h> |
8 | | #include <stdlib.h> |
9 | | |
10 | | #ifdef __ANDROID__ |
11 | | #include <malloc.h> |
12 | | #endif |
13 | | |
14 | | #include "include/xnnpack.h" |
15 | | #include "src/xnnpack/allocator.h" |
16 | | #include "src/xnnpack/common.h" |
17 | | |
18 | | |
19 | | extern int posix_memalign(void **memptr, size_t alignment, size_t size); |
20 | | |
21 | | |
22 | 0 | static void* xnn_allocate(void* context, size_t size) { |
23 | 0 | return malloc(size); |
24 | 0 | } |
25 | | |
26 | 0 | static void* xnn_reallocate(void* context, void* pointer, size_t size) { |
27 | 0 | return realloc(pointer, size); |
28 | 0 | } |
29 | | |
30 | 0 | static void xnn_deallocate(void* context, void* pointer) { |
31 | 0 | if XNN_LIKELY(pointer != NULL) { |
32 | 0 | free(pointer); |
33 | 0 | } |
34 | 0 | } |
35 | | |
36 | 0 | static void* xnn_aligned_allocate(void* context, size_t alignment, size_t size) { |
37 | | #if XNN_ARCH_WASM |
38 | | assert(alignment <= 2 * sizeof(void*)); |
39 | | return malloc(size); |
40 | | #elif XNN_PLATFORM_ANDROID |
41 | | return memalign(alignment, size); |
42 | | #elif XNN_PLATFORM_WINDOWS |
43 | | return _aligned_malloc(size, alignment); |
44 | | #else |
45 | 0 | void* memory_ptr = NULL; |
46 | 0 | if (posix_memalign(&memory_ptr, alignment, size) != 0) { |
47 | 0 | return NULL; |
48 | 0 | } |
49 | 0 | return memory_ptr; |
50 | 0 | #endif |
51 | 0 | } |
52 | | |
53 | 0 | static void xnn_aligned_deallocate(void* context, void* pointer) { |
54 | 0 | if XNN_LIKELY(pointer != NULL) { |
55 | | #if defined(_WIN32) |
56 | | _aligned_free(pointer); |
57 | | #else |
58 | 0 | free(pointer); |
59 | 0 | #endif |
60 | 0 | } |
61 | 0 | } |
62 | | |
63 | | const struct xnn_allocator xnn_default_allocator = { |
64 | | .allocate = xnn_allocate, |
65 | | .reallocate = xnn_reallocate, |
66 | | .deallocate = xnn_deallocate, |
67 | | .aligned_allocate = xnn_aligned_allocate, |
68 | | .aligned_deallocate = xnn_aligned_deallocate, |
69 | | }; |