Files

51 lines
1.2 KiB
C++
Raw Permalink Normal View History

// SPDX-FileCopyrightText: 2002-2026 PCSX2 Dev Team
2024-07-30 13:42:36 +02:00
// SPDX-License-Identifier: GPL-3.0+
// This module contains implementations of _aligned_malloc for platforms that don't have
// it built into their CRT/libc.
2021-09-03 06:43:33 -04:00
#if !defined(_WIN32)
2021-09-01 16:31:46 -04:00
2021-11-13 19:21:17 -06:00
#include "common/AlignedMalloc.h"
2021-09-01 16:31:46 -04:00
#include "common/Assertions.h"
2023-12-22 19:41:44 +10:00
#include <algorithm>
#include <cstdlib>
void* _aligned_malloc(size_t size, size_t align)
{
2021-09-06 14:28:26 -04:00
pxAssert(align < 0x10000);
2015-09-11 18:28:17 +01:00
#if defined(__USE_ISOC11) && !defined(ASAN_WORKAROUND) // not supported yet on gcc 4.9
2021-09-06 14:28:26 -04:00
return aligned_alloc(align, size);
#else
2022-11-24 20:43:54 -06:00
#ifdef __APPLE__
// MacOS has a bug where posix_memalign is ridiculously slow on unaligned sizes
// This especially bad on M1s for some reason
size = (size + align - 1) & ~(align - 1);
#endif
2021-09-06 14:28:26 -04:00
void* result = 0;
posix_memalign(&result, align, size);
return result;
#endif
}
void* pcsx2_aligned_realloc(void* handle, size_t new_size, size_t align, size_t old_size)
{
2021-09-06 14:28:26 -04:00
pxAssert(align < 0x10000);
2021-09-06 14:28:26 -04:00
void* newbuf = _aligned_malloc(new_size, align);
2021-09-06 14:28:26 -04:00
if (newbuf != NULL && handle != NULL)
{
memcpy(newbuf, handle, std::min(old_size, new_size));
_aligned_free(handle);
}
return newbuf;
}
2021-09-06 14:28:26 -04:00
__fi void _aligned_free(void* pmem)
{
2021-09-06 14:28:26 -04:00
free(pmem);
}
2021-09-01 16:31:46 -04:00
#endif