diff --git a/libretro-common/include/memalign.h b/libretro-common/include/memalign.h index f57baf152c..6d217437eb 100644 --- a/libretro-common/include/memalign.h +++ b/libretro-common/include/memalign.h @@ -31,6 +31,8 @@ RETRO_BEGIN_DECLS void *memalign_alloc(size_t boundary, size_t size); +void *memalign_alloc_aligned(size_t size); + void memalign_free(void *ptr); RETRO_END_DECLS diff --git a/libretro-common/memmap/memalign.c b/libretro-common/memmap/memalign.c index 88aec3f16d..a89a87830d 100644 --- a/libretro-common/memmap/memalign.c +++ b/libretro-common/memmap/memalign.c @@ -25,6 +25,7 @@ #include + void *memalign_alloc(size_t boundary, size_t size) { void **place = NULL; @@ -50,3 +51,14 @@ void memalign_free(void *ptr) p = (void**)ptr; free(p[-1]); } + +void *memalign_alloc_aligned(size_t size) +{ +#if defined(__x86_64__) || defined(__LP64) || defined(__IA64__) || defined(_M_X64) || defined(_WIN64) + return memalign_alloc(64, size); +#elif defined(__i386__) || defined(__i486__) || defined(__i686__) || defined(GEKKO) + return memalign_alloc(32, size); +#else + return memalign_alloc(32, size); +#endif +}