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