mirror of
https://github.com/Atmosphere-NX/Atmosphere-libs.git
synced 2025-08-06 23:49:29 +02:00
kern: switch memset to optimized impl
This commit is contained in:
parent
4a38e5d4b6
commit
911a81430a
@ -23,6 +23,17 @@
|
||||
|
||||
namespace ams::kern::arch::arm64::init {
|
||||
|
||||
inline void ClearPhysicalMemory(KPhysicalAddress address, size_t size) {
|
||||
MESOSPHERE_INIT_ABORT_UNLESS(util::IsAligned(size, sizeof(u64)));
|
||||
|
||||
/* This Physical Address -> void * conversion is valid, because this is init page table code. */
|
||||
/* The MMU is necessarily not yet turned on, if we are creating an initial page table. */
|
||||
volatile u64 *ptr = reinterpret_cast<volatile u64 *>(GetInteger(address));
|
||||
for (size_t i = 0; i < size / sizeof(u64); ++i) {
|
||||
ptr[i] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
class KInitialPageTable {
|
||||
public:
|
||||
class IPageAllocator {
|
||||
@ -61,9 +72,7 @@ namespace ams::kern::arch::arm64::init {
|
||||
}
|
||||
|
||||
static ALWAYS_INLINE void ClearNewPageTable(KPhysicalAddress address) {
|
||||
/* This Physical Address -> void * conversion is valid, because this is page table code. */
|
||||
/* The MMU is necessarily not yet turned on, if we are creating an initial page table. */
|
||||
std::memset(reinterpret_cast<void *>(GetInteger(address)), 0, PageSize);
|
||||
ClearPhysicalMemory(address, PageSize);
|
||||
}
|
||||
private:
|
||||
size_t NOINLINE GetBlockCount(KVirtualAddress virt_addr, size_t size, size_t block_size) {
|
||||
@ -705,7 +714,7 @@ namespace ams::kern::arch::arm64::init {
|
||||
this->state.next_address += PageSize;
|
||||
}
|
||||
|
||||
std::memset(reinterpret_cast<void *>(allocated), 0, PageSize);
|
||||
ClearPhysicalMemory(allocated, PageSize);
|
||||
return allocated;
|
||||
}
|
||||
|
||||
|
@ -76,11 +76,13 @@ L(set96):
|
||||
.p2align 4
|
||||
L(set_long):
|
||||
stp val, val, [dstin]
|
||||
bic dst, dstin, 15
|
||||
#if DC_ZVA_THRESHOLD
|
||||
cmp count, DC_ZVA_THRESHOLD
|
||||
ccmp val, 0, 0, cs
|
||||
bic dst, dstin, 15
|
||||
b.eq L(zva_64)
|
||||
#else
|
||||
bic dst, dstin, 15
|
||||
#endif
|
||||
/* Small-size or non-zero memset does not use DC ZVA. */
|
||||
sub count, dstend, dst
|
@ -19,6 +19,6 @@
|
||||
#define MESOSPHERE_LIBC_MEMCPY_GENERIC 0
|
||||
#define MESOSPHERE_LIBC_MEMCMP_GENERIC 0
|
||||
#define MESOSPHERE_LIBC_MEMMOVE_GENERIC 0
|
||||
#define MESOSPHERE_LIBC_MEMSET_GENERIC 1
|
||||
#define MESOSPHERE_LIBC_MEMSET_GENERIC 0
|
||||
#define MESOSPHERE_LIBC_STRNCPY_GENERIC 1
|
||||
#define MESOSPHERE_LIBC_STRNCMP_GENERIC 1
|
||||
#define MESOSPHERE_LIBC_STRNCMP_GENERIC 1
|
||||
|
@ -23,4 +23,4 @@
|
||||
|
||||
#error "Unknown architecture for libc"
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user