aboutsummaryrefslogtreecommitdiff
path: root/kernel/fpu.c
diff options
context:
space:
mode:
authorFranklin Wei <frankhwei536@gmail.com>2015-02-08 12:15:06 -0500
committerFranklin Wei <frankhwei536@gmail.com>2015-02-08 12:15:06 -0500
commit0d7cde7c4d735ebebd39b988440f50f5889bd29f (patch)
tree7ddc66bfc3c64becdb55af3bb6e33a536421b1a6 /kernel/fpu.c
parentea15c8963fa17deaba4356219e481128db66f5bc (diff)
downloadkappa-0d7cde7c4d735ebebd39b988440f50f5889bd29f.zip
kappa-0d7cde7c4d735ebebd39b988440f50f5889bd29f.tar.gz
kappa-0d7cde7c4d735ebebd39b988440f50f5889bd29f.tar.bz2
kappa-0d7cde7c4d735ebebd39b988440f50f5889bd29f.tar.xz
lots of stuff
Diffstat (limited to 'kernel/fpu.c')
-rw-r--r--kernel/fpu.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/kernel/fpu.c b/kernel/fpu.c
new file mode 100644
index 0000000..f5512d6
--- /dev/null
+++ b/kernel/fpu.c
@@ -0,0 +1,25 @@
+/* Copyright (C) 2011-2013 Kevin Lange */
+/* this code from toaruos */
+#include <stddef.h>
+#include "fpu.h"
+
+/**
+ * Enable the FPU and SSE
+ */
+void fpu_enable(void) {
+ asm volatile ("clts");
+ size_t t;
+ asm volatile ("mov %%cr4, %0" : "=r"(t));
+ t |= 3 << 9;
+ asm volatile ("mov %0, %%cr4" :: "r"(t));
+}
+
+/**
+ * Disable FPU and SSE so it traps to the kernel
+ */
+void fpu_disable(void) {
+ size_t t;
+ asm volatile ("mov %%cr0, %0" : "=r"(t));
+ t |= 1 << 3;
+ asm volatile ("mov %0, %%cr0" :: "r"(t));
+}