I still need to add support for SSE to the context switching code, but now at least one process can use it.
@@ -493,3 +493,16 @@ void __assertion_failed(const char* msg, const char* file, unsigned line, const
asm volatile("hlt");
for (;;);
}
+
+void sse_init()
+{
+ asm volatile(
+ "mov %cr0, %eax\n"
+ "andl $0xfffffffb, %eax\n"
+ "orl $0x2, %eax\n"
+ "mov %eax, %cr0\n"
+ "mov %cr4, %eax\n"
+ "orl $0x600, %eax\n"
+ "mov %eax, %cr4\n"
+ );
+}
@@ -61,6 +61,7 @@ class IRQHandler;
void gdt_init();
void idt_init();
+void sse_init();
void register_interrupt_handler(byte number, void (*f)());
void register_user_callable_interrupt_handler(byte number, void (*f)());
void register_irq_handler(byte number, IRQHandler&);
@@ -140,6 +140,8 @@ VFS* vfs;
{
cli();
+ sse_init();
kmalloc_init();
init_ksyms();