Merge pull request #5414 from mariusyo07/feat/libc-mspace-aligned-alloc

feat(libc): implement sceLibcMspaceAlignedAlloc
This commit is contained in:
Dean 2026-10-14 14:26:47 +13:00 committed by GitHub
commit 1535e2c688
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 8 additions and 0 deletions

View File

@ -261,6 +261,10 @@ void* APS5_VABI sceLibcMspaceMemalign_nid_postfix(void* handle, std::size_t alig
return Allocate(Find(handle), size, alignment);
}
void* APS5_VABI sceLibcMspaceAlignedAlloc_nid_postfix(void* handle, std::size_t alignment, std::size_t size) {
return sceLibcMspaceMemalign_nid_postfix(handle, alignment, size);
}
void* APS5_VABI sceLibcMspaceReallocalign_nid_postfix(void* handle, void* pointer, std::size_t size, std::size_t alignment) {
if (alignment == 0 || (alignment & (alignment - 1))) {
Error(22);

View File

@ -18,6 +18,7 @@ void APS5_VABI sceLibcMspaceFree_nid_postfix(void*, void*);
int APS5_VABI sceLibcMspacePosixMemalign_nid_postfix(void*, void**, std::size_t, std::size_t);
std::size_t APS5_VABI sceLibcMspaceMallocUsableSize_nid_postfix(const void*);
void* APS5_VABI sceLibcMspaceMemalign_nid_postfix(void*, std::size_t, std::size_t);
void* APS5_VABI sceLibcMspaceAlignedAlloc_nid_postfix(void*, std::size_t, std::size_t);
void* APS5_VABI sceLibcMspaceReallocalign_nid_postfix(void*, void*, std::size_t, std::size_t);
int APS5_VABI sceLibcMspaceMallocStats_nid_postfix(void*, void*);
int APS5_VABI sceLibcMspaceMallocStatsFast_nid_postfix(void*, void*);
@ -187,6 +188,9 @@ int main() {
void* memaligned = sceLibcMspaceMemalign_nid_postfix(arena, 256, 100);
Require(memaligned && (reinterpret_cast<std::uintptr_t>(memaligned) & 255) == 0);
Require(sceLibcMspaceMemalign_nid_postfix(arena, 24, 100) == nullptr);
void* alignedAlloc = sceLibcMspaceAlignedAlloc_nid_postfix(arena, 128, 256);
Require(alignedAlloc && (reinterpret_cast<std::uintptr_t>(alignedAlloc) & 127) == 0);
Require(sceLibcMspaceAlignedAlloc_nid_postfix(arena, 24, 100) == nullptr);
unsigned char* realigned = static_cast<unsigned char*>(sceLibcMspaceReallocalign_nid_postfix(arena, nullptr, 64, 64));
Require(realigned && (reinterpret_cast<std::uintptr_t>(realigned) & 63) == 0);
for (int i = 0; i < 64; ++i) realigned[i] = static_cast<unsigned char>(i + 1);