mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-06-09 09:34:57 +09:00
AK: Move memory stuff (fast memcpy, etc) to a separate header
Move the "fast memcpy" stuff out of StdLibExtras.h and into Memory.h. This will break a ton of things that were relying on StdLibExtras.h to include a bunch of other headers. Fix will follow immediately after. This makes it possible to include StdLibExtras.h from Types.h, which is the main point of this exercise.
This commit is contained in:
parent
fa9fba6901
commit
900f51ccd0
Notes:
sideshowbarker
2024-07-19 08:50:24 +09:00
Author: https://github.com/awesomekling
Commit: 900f51ccd0
11 changed files with 57 additions and 49 deletions
38
AK/Memory.h
Normal file
38
AK/Memory.h
Normal file
|
@ -0,0 +1,38 @@
|
|||
#pragma once
|
||||
|
||||
#include <AK/Types.h>
|
||||
|
||||
#if defined(KERNEL) || defined(BOOTSTRAPPER)
|
||||
# include <LibBareMetal/StdLib.h>
|
||||
#else
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
#endif
|
||||
|
||||
#if defined(__serenity__) && !defined(KERNEL) && !defined(BOOTSTRAPPER)
|
||||
extern "C" void* mmx_memcpy(void* to, const void* from, size_t);
|
||||
#endif
|
||||
|
||||
[[gnu::always_inline]] inline void fast_u32_copy(u32* dest, const u32* src, size_t count)
|
||||
{
|
||||
#if defined(__serenity__) && !defined(KERNEL) && !defined(BOOTSTRAPPER)
|
||||
if (count >= 256) {
|
||||
mmx_memcpy(dest, src, count * sizeof(count));
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
asm volatile(
|
||||
"rep movsl\n"
|
||||
: "=S"(src), "=D"(dest), "=c"(count)
|
||||
: "S"(src), "D"(dest), "c"(count)
|
||||
: "memory");
|
||||
}
|
||||
|
||||
[[gnu::always_inline]] inline void fast_u32_fill(u32* dest, u32 value, size_t count)
|
||||
{
|
||||
asm volatile(
|
||||
"rep stosl\n"
|
||||
: "=D"(dest), "=c"(count)
|
||||
: "D"(dest), "c"(count), "a"(value)
|
||||
: "memory");
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue