mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-04-23 04:55:15 +00:00
AK: Guard inline assembly with ARCH(I386) and provide alternative
For non-x86 targets, it's not very nice to define inline functions in AK/Memory.h with asm volatile implementations. Guard this inline assembly with ARCH(I386) and provide portable alternatives. Since we always compile with optimizations, the hand-vectorized memset and memcpy seem to be of dubious value, but we'll keep them here until proven one way or another. This should fix the Lagom build on native M1 macOS that was reported on Discord the other day.
This commit is contained in:
parent
a10ad24c76
commit
b3746f9745
Notes:
sideshowbarker
2024-07-18 17:07:15 +09:00
Author: https://github.com/ADKaster Commit: https://github.com/SerenityOS/serenity/commit/b3746f97450 Pull-request: https://github.com/SerenityOS/serenity/pull/7634
1 changed files with 10 additions and 0 deletions
10
AK/Memory.h
10
AK/Memory.h
|
@ -17,16 +17,26 @@
|
|||
|
||||
ALWAYS_INLINE void fast_u32_copy(u32* dest, const u32* src, size_t count)
|
||||
{
|
||||
#if ARCH(I386)
|
||||
asm volatile(
|
||||
"rep movsl\n"
|
||||
: "+S"(src), "+D"(dest), "+c"(count)::"memory");
|
||||
#else
|
||||
__builtin_memcpy(dest, src, count * 4);
|
||||
#endif
|
||||
}
|
||||
|
||||
ALWAYS_INLINE void fast_u32_fill(u32* dest, u32 value, size_t count)
|
||||
{
|
||||
#if ARCH(I386)
|
||||
asm volatile(
|
||||
"rep stosl\n"
|
||||
: "=D"(dest), "=c"(count)
|
||||
: "D"(dest), "c"(count), "a"(value)
|
||||
: "memory");
|
||||
#else
|
||||
for (auto* p = dest; p < (dest + count); ++p) {
|
||||
*p = value;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue