Kernel: Don't use MMX memcpy() in the kernel.

I just discovered the hard way that clobbering FPU/MMX/SSE registers in the
kernel makes things very confusing for userspace (and other kernel threads.)

Let's banish all of those things from the kernel to keep things simple.
This commit is contained in:
Andreas Kling 2019-04-22 17:13:18 +02:00
parent 1d02c7b6f1
commit 6693cfb26a
3 changed files with 9 additions and 2 deletions

View file

@ -5,6 +5,7 @@
extern "C" {
#ifndef KERNEL
void* mmx_memcpy(void* dest, const void* src, size_t len)
{
ASSERT(len >= 1024);
@ -51,6 +52,7 @@ void* mmx_memcpy(void* dest, const void* src, size_t len)
memcpy(dest_ptr, src_ptr, len);
return dest;
}
#endif
#ifdef KERNEL

View file

@ -11,14 +11,18 @@
#include <AK/Types.h>
#ifndef KERNEL
extern "C" void* mmx_memcpy(void* to, const void* from, size_t);
#endif
[[gnu::always_inline]] inline void fast_dword_copy(dword* dest, const dword* src, size_t count)
{
#ifndef KERNEL
if (count >= 256) {
mmx_memcpy(dest, src, count * sizeof(count));
return;
}
#endif
asm volatile(
"rep movsl\n"
: "=S"(src), "=D"(dest), "=c"(count)

View file

@ -8,9 +8,10 @@ extern "C" {
void* memcpy(void* dest_ptr, const void* src_ptr, size_t n)
{
if (n >= 1024) {
#ifndef KERNEL
if (n >= 1024)
return mmx_memcpy(dest_ptr, src_ptr, n);
}
#endif
size_t dest = (size_t)dest_ptr;
size_t src = (size_t)src_ptr;