Kernel: Use fxsave64 and fxrstor64 on 64 bit target
This commit is contained in:
parent
5b0e5512a8
commit
9e895e5286
|
@ -55,7 +55,13 @@ namespace Kernel
|
||||||
asm volatile(
|
asm volatile(
|
||||||
"finit;"
|
"finit;"
|
||||||
"ldmxcsr %[mxcsr];"
|
"ldmxcsr %[mxcsr];"
|
||||||
|
#if ARCH(x86_64)
|
||||||
|
"fxsave64 %[storage];"
|
||||||
|
#elif ARCH(i686)
|
||||||
"fxsave %[storage];"
|
"fxsave %[storage];"
|
||||||
|
#else
|
||||||
|
#error
|
||||||
|
#endif
|
||||||
: [storage]"=m"(s_default_sse_storage)
|
: [storage]"=m"(s_default_sse_storage)
|
||||||
: [mxcsr]"m"(mxcsr)
|
: [mxcsr]"m"(mxcsr)
|
||||||
);
|
);
|
||||||
|
@ -670,12 +676,24 @@ namespace Kernel
|
||||||
|
|
||||||
void Thread::save_sse()
|
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));
|
asm volatile("fxsave %0" :: "m"(m_sse_storage));
|
||||||
|
#else
|
||||||
|
#error
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Thread::load_sse()
|
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));
|
asm volatile("fxrstor %0" :: "m"(m_sse_storage));
|
||||||
|
#else
|
||||||
|
#error
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue