diff options
| author | Franklin Wei <frankhwei536@gmail.com> | 2015-02-08 12:15:06 -0500 |
|---|---|---|
| committer | Franklin Wei <frankhwei536@gmail.com> | 2015-02-08 12:15:06 -0500 |
| commit | 0d7cde7c4d735ebebd39b988440f50f5889bd29f (patch) | |
| tree | 7ddc66bfc3c64becdb55af3bb6e33a536421b1a6 /kernel/fpu.c | |
| parent | ea15c8963fa17deaba4356219e481128db66f5bc (diff) | |
| download | kappa-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.c | 25 |
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)); +} |