SSE support
authorBarret Rhoden <brho@cs.berkeley.edu>
Tue, 4 May 2010 22:56:26 +0000 (15:56 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:47 +0000 (17:35 -0700)
Enables basic SSE support in the kernel.  Like with FP, this doesn't
handle exceptions or anything.  Save/restore should be working (at
least, the save_fp_state() works, maybe we don't call it at the right
times).

Untested, might work.

kern/arch/i686/cpuinfo.c
kern/arch/i686/smp_boot.c

index 523be5a..61ec777 100644 (file)
@@ -87,6 +87,8 @@ void print_cpuinfo(void)
        printk("SSE support: ");
        if (edx & (1 << 25))
                printk("sse ");
+       else
+               panic("SSE Support Not Detected!!\n");
        if (edx & (1 << 26))
                printk("sse2 ");
        if (ecx & (1 << 0))
index ef7ee3c..98bcdd8 100644 (file)
@@ -309,6 +309,11 @@ void smp_percpu_init(void)
        /* Ensure the FPU units are initialized */
        asm volatile ("fninit");
 
+       /* Enable SSE instructions.  We might have to do more, like masking certain
+        * flags or exceptions in the MXCSR, or at least handle the SIMD exceptions.
+        * We don't do it for FP yet either, so YMMV. */
+       lcr4(rcr4() | CR4_OSFXSR | CR4_OSXMME);
+
        /* core 0 sets up via the global gdt symbol */
        if (!coreid)
                per_cpu_info[0].gdt = gdt;