Procházet zdrojové kódy

Kernel: Initialize the CPU to allow SSE on startup.

I still need to add support for SSE to the context switching code, but now
at least one process can use it.
Andreas Kling před 6 roky
rodič
revize
750d79dcaf
3 změnil soubory, kde provedl 16 přidání a 0 odebrání
  1. 13 0
      Kernel/i386.cpp
  2. 1 0
      Kernel/i386.h
  3. 2 0
      Kernel/init.cpp

+ 13 - 0
Kernel/i386.cpp

@@ -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"
+    );
+}

+ 1 - 0
Kernel/i386.h

@@ -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&);

+ 2 - 0
Kernel/init.cpp

@@ -140,6 +140,8 @@ VFS* vfs;
 {
     cli();
 
+    sse_init();
+
     kmalloc_init();
     init_ksyms();