From 44a629fc9cf1158bab1b826b9279106cf5ab2924 Mon Sep 17 00:00:00 2001 From: Martin Ridgers Date: Thu, 9 Sep 2021 13:35:53 +0200 Subject: Use std::aligned_alloc() instead of Intel's _mm_malloc --- zencore/memory.cpp | 37 +++++++++++++++++++++++++++++++------ 1 file changed, 31 insertions(+), 6 deletions(-) (limited to 'zencore/memory.cpp') diff --git a/zencore/memory.cpp b/zencore/memory.cpp index 63d61f5e1..25a8d4761 100644 --- a/zencore/memory.cpp +++ b/zencore/memory.cpp @@ -10,6 +10,33 @@ namespace zen { ////////////////////////////////////////////////////////////////////////// +static void* AlignedAllocImpl(size_t size, size_t alignment) +{ +#if ZEN_PLATFORM_WINDOWS + // return _aligned_malloc(size, alignment); // MSVC alternative + return _mm_malloc(size, alignment); +#else + // posix_memalign(&Ret, Alignment, Size); // Apple, AndroidApi<28 + return std::aligned_alloc(alignment, size); +#endif +} + +void AlignedFreeImpl(void* ptr) +{ + if (ptr == nullptr) + return; + +#if ZEN_PLATFORM_WINDOWS + // _aligned_free(ptr); MSVC alternative + _mm_free(ptr); +#else + // free(ptr) // Apple :) + std::free(ptr); +#endif +} + +////////////////////////////////////////////////////////////////////////// + MemoryArena::MemoryArena() { } @@ -21,14 +48,13 @@ MemoryArena::~MemoryArena() void* MemoryArena::Alloc(size_t size, size_t alignment) { - return _mm_malloc(size, alignment); + return AlignedAllocImpl(size, alignment); } void MemoryArena::Free(void* ptr) { - if (ptr) - _mm_free(ptr); + AlignedFreeImpl(ptr); } ////////////////////////////////////////////////////////////////////////// @@ -36,14 +62,13 @@ MemoryArena::Free(void* ptr) void* Memory::Alloc(size_t size, size_t alignment) { - return _mm_malloc(size, alignment); + return AlignedAllocImpl(size, alignment); } void Memory::Free(void* ptr) { - if (ptr) - _mm_free(ptr); + AlignedFreeImpl(ptr); } ////////////////////////////////////////////////////////////////////////// -- cgit v1.2.3 From 072bdd1ceaa99a06a3cb75658f3f6d3b80e6984e Mon Sep 17 00:00:00 2001 From: Martin Ridgers Date: Wed, 15 Sep 2021 10:26:36 +0200 Subject: Correct platform-specific _mm_malloc/aligned_alloc includes --- zencore/memory.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'zencore/memory.cpp') diff --git a/zencore/memory.cpp b/zencore/memory.cpp index 25a8d4761..9c7fb8333 100644 --- a/zencore/memory.cpp +++ b/zencore/memory.cpp @@ -1,9 +1,14 @@ // Copyright Epic Games, Inc. All Rights Reserved. -#include #include #include +#ifdef ZEN_PLATFORM_WINDOWS +# include +#else +# include +#endif + #include namespace zen { -- cgit v1.2.3