SayoriOS 0.3.3

fpu.c
См. документацию.
1
9 #include "common.h"
10 #include "io/ports.h"
11
12 bool fpu_initialized = false;
13
15 bool fpu_isInitialized() {
16 return fpu_initialized;
17 }
18
20 void fpu_fldcw(const uint16_t cw) {
21 __asm__ volatile("fldcw %0" : : "m"(cw));
22 }
23
25 void fpu_init() {
26 uint32_t cr4 = 0;
27
28 __asm__ volatile ("mov %%cr4, %0":"=r"(cr4));
29 cr4 |= 0x200;
30 __asm__ volatile("mov %0, %%cr4"::"r"(cr4));
31
32 fpu_fldcw(0x37F);
33
34 fpu_initialized = true;
35
36 qemu_log("FPU init result: %f (should be 0.5)", 1.0 / 2.0);
37 }
common.h
Основные определения ядра
fpu_fldcw
void fpu_fldcw(const uint16_t cw)
Для инициализации FPU.
Definition: fpu.c:20
fpu_isInitialized
bool fpu_isInitialized()
Возвращает статус FPU.
Definition: fpu.c:15
fpu_init
void fpu_init()
Инициализация FPU.
Definition: fpu.c:25