diff options
author | Kimapr <kimapr@mail.ru> | 2023-12-21 13:09:53 +0500 |
---|---|---|
committer | Lizzy Fleckenstein <lizzy@vlhl.dev> | 2023-12-21 09:16:20 +0100 |
commit | 43a856b5d40ceb570af7755d9f1222093a48aa64 (patch) | |
tree | 7469e90c968290a49e884881a4699a22bac27d45 /stage3/init.c | |
parent | 5b61e495721fe414e43cc52298987f02c9bce24c (diff) | |
download | cuddles-43a856b5d40ceb570af7755d9f1222093a48aa64.tar.xz |
move SSE init code to init, add -mgeneral-regs-only to init.c and pic.c
Diffstat (limited to 'stage3/init.c')
-rw-r--r-- | stage3/init.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/stage3/init.c b/stage3/init.c index e913fee..2e26e19 100644 --- a/stage3/init.c +++ b/stage3/init.c @@ -1,6 +1,18 @@ +#include "def.h" void kmain(); void init() { + // enable SSE. long mode demands it is present + u64 cr0; + asm volatile("mov %%cr0, %0 \n":"=r"(cr0)); + asm volatile("mov %0, %%cr0"::"r"((cr0 & ~(1 << 2)) | (1 << 1))); + + u64 cr4; + asm volatile("mov %%cr4, %0":"=r"(cr4)); + asm volatile("mov %0, %%cr4"::"r"(cr4 | (1 << 9) | (1 << 10))); + + u16 fpu_cw = 0x37a; + asm volatile("fldcw %0"::"m"(fpu_cw)); kmain(); } |