Fix negative alignments

This commit is contained in:
Maschell
2022-02-13 13:23:40 +01:00
parent 7bdac3957d
commit ad3d99a941

View File

@@ -1,15 +1,11 @@
#include "memory_mapping.h" #include "memory_mapping.h"
#include <coreinit/cache.h> #include <coreinit/cache.h>
#include <coreinit/memblockheap.h>
#include <coreinit/memdefaultheap.h>
#include <coreinit/memexpheap.h> #include <coreinit/memexpheap.h>
#include <coreinit/memlist.h>
#include <coreinit/memorymap.h> #include <coreinit/memorymap.h>
#include <coreinit/thread.h> #include <coreinit/thread.h>
#include "CThread.h" #include "CThread.h"
#include "logger.h" #include "logger.h"
#include "memory.h"
#include <coreinit/mutex.h> #include <coreinit/mutex.h>
#include <cstring> #include <cstring>
#include <vector> #include <vector>
@@ -413,7 +409,15 @@ void *MemoryMapping_allocEx(uint32_t size, int32_t align, bool videoOnly) {
continue; continue;
} }
res = MEMAllocFromExpHeapEx(heapHandle, (size + align - 1) & ~(align - 1), align); uint32_t allocSize;
if (align > 0) {
allocSize = (size + align - 1) & ~(align - 1);
} else {
uint32_t alignAbs = -align;
allocSize = (size + alignAbs - 1) & ~(alignAbs - 1);
}
res = MEMAllocFromExpHeapEx(heapHandle, allocSize, align);
if (res != nullptr) { if (res != nullptr) {
break; break;
} }