Add support for page-aligned variables/arrays.

- Better account for UltraSPARC's unique memory page size.
- malloc_alignedCacheLine() no longer returns 16-byte aligned memory if the architecture is neither 32-bit or 64-bit. Now, the function only returns 64-byte alignment for 64-bit architectures OR 32-byte alignment for 32-bit architectures.
This commit is contained in:
rogerman 2023-01-19 14:18:58 -08:00
parent 8438a5a647
commit 2b66e756da
2 changed files with 11 additions and 14 deletions

View File

@ -1,5 +1,5 @@
/*
Copyright (C) 2008-2017 DeSmuME team
Copyright (C) 2008-2023 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -105,22 +105,12 @@ void* malloc_aligned64(size_t length)
void* malloc_alignedCacheLine(size_t length)
{
#if defined(HOST_32)
return malloc_aligned32(length);
#elif defined(HOST_64)
return malloc_aligned64(length);
#else
return malloc_aligned16(length);
#endif
return malloc_aligned(length, CACHE_ALIGN_SIZE);
}
void* malloc_alignedPage(size_t length)
{
// WARNING!
//
// This may fail for SPARC users, which have a page size
// of 8KB instead of the more typical 4KB.
return malloc_aligned(length, 4096);
return malloc_aligned(length, PAGE_ALIGN_SIZE);
}
void free_aligned(void *ptr)

View File

@ -1,6 +1,6 @@
/*
Copyright (C) 2005 Guillaume Duhamel
Copyright (C) 2008-2022 DeSmuME team
Copyright (C) 2008-2023 DeSmuME team
This file is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@ -165,8 +165,15 @@
#define CACHE_ALIGN_SIZE 32
#endif
#if defined(__sparc_v9__) || defined(__sparcv9)
#define PAGE_ALIGN_SIZE 8192 // UltraSPARC architecture uses 8 KB pages.
#else
#define PAGE_ALIGN_SIZE 4096 // Most architectures use 4 KB pages.
#endif
//use this for example when you want a byte value to be better-aligned
#define CACHE_ALIGN DS_ALIGN(CACHE_ALIGN_SIZE)
#define PAGE_ALIGN DS_ALIGN(PAGE_ALIGN_SIZE)
#define FAST_ALIGN DS_ALIGN(4)
//---------------------------------------------