diff --git a/AK/Memory.h b/AK/Memory.h index 2eda4834146..45d148f74d5 100644 --- a/AK/Memory.h +++ b/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 }