Kernel: Use fxsave64 and fxrstor64 on 64 bit target

This commit is contained in:
Bananymous 2025-06-27 21:50:37 +03:00
parent 5b0e5512a8
commit 9e895e5286
1 changed files with 18 additions and 0 deletions

View File

@ -55,7 +55,13 @@ namespace Kernel
asm volatile(
"finit;"
"ldmxcsr %[mxcsr];"
#if ARCH(x86_64)
"fxsave64 %[storage];"
#elif ARCH(i686)
"fxsave %[storage];"
#else
#error
#endif
: [storage]"=m"(s_default_sse_storage)
: [mxcsr]"m"(mxcsr)
);
@ -670,12 +676,24 @@ namespace Kernel
void Thread::save_sse()
{
#if ARCH(x86_64)
asm volatile("fxsave64 %0" :: "m"(m_sse_storage));
#elif ARCH(i686)
asm volatile("fxsave %0" :: "m"(m_sse_storage));
#else
#error
#endif
}
void Thread::load_sse()
{
#if ARCH(x86_64)
asm volatile("fxrstor64 %0" :: "m"(m_sse_storage));
#elif ARCH(i686)
asm volatile("fxrstor %0" :: "m"(m_sse_storage));
#else
#error
#endif
}
}