blob: b42e76a66d54ed5a87b2323047365677d9b2381a [file] [edit]
// Copyright 2019 Google LLC
//
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree.
#ifndef XNNPACK_SRC_XNNPACK_ALLOCATOR_H_
#define XNNPACK_SRC_XNNPACK_ALLOCATOR_H_
#include <limits.h>
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#if defined(_MSC_VER)
#include <malloc.h>
#elif !defined(__GNUC__)
#include <alloca.h>
#endif
#include "include/xnnpack.h"
#include "src/xnnpack/common.h"
#include "src/xnnpack/params.h"
#ifdef __cplusplus
extern "C" {
#endif
XNN_INTERNAL extern const struct xnn_allocator xnn_default_allocator;
inline static void* xnn_allocate_memory(size_t memory_size) {
return xnn_params.allocator.allocate(xnn_params.allocator.context,
memory_size);
}
inline static void* xnn_allocate_zero_memory(size_t memory_size) {
void* memory_pointer =
xnn_params.allocator.allocate(xnn_params.allocator.context, memory_size);
if (memory_pointer != NULL) {
memset(memory_pointer, 0, memory_size);
}
return memory_pointer;
}
inline static void* xnn_reallocate_memory(void* memory_pointer,
size_t memory_size) {
return xnn_params.allocator.reallocate(xnn_params.allocator.context,
memory_pointer, memory_size);
}
inline static void xnn_release_memory(void* memory_pointer) {
xnn_params.allocator.deallocate(xnn_params.allocator.context, memory_pointer);
}
inline static void* xnn_allocate_simd_memory(size_t memory_size) {
return xnn_params.allocator.aligned_allocate(
xnn_params.allocator.context, XNN_ALLOCATION_ALIGNMENT, memory_size);
}
inline static void* xnn_allocate_zero_simd_memory(size_t memory_size) {
void* memory_pointer = xnn_params.allocator.aligned_allocate(
xnn_params.allocator.context, XNN_ALLOCATION_ALIGNMENT, memory_size);
if (memory_pointer != NULL) {
memset(memory_pointer, 0, memory_size);
}
return memory_pointer;
}
inline static void xnn_release_simd_memory(void* memory_pointer) {
xnn_params.allocator.aligned_deallocate(xnn_params.allocator.context,
memory_pointer);
}
#ifdef __cplusplus
} // extern "C"
#endif
#endif // XNNPACK_SRC_XNNPACK_ALLOCATOR_H_