diff --git a/common/setup.c b/common/setup.c index 6a15d0a8..e4f90b9d 100644 --- a/common/setup.c +++ b/common/setup.c @@ -74,6 +74,9 @@ bool_cmd("apic_timer", opt_apic_timer); bool opt_hpet = false; bool_cmd("hpet", opt_hpet); +bool opt_fpu = false; +bool_cmd("fpu", opt_fpu); + io_port_t __data_rmode com_ports[2] = {COM1_PORT, COM2_PORT}; boot_flags_t boot_flags; @@ -303,6 +306,11 @@ void __noreturn __text_init kernel_start(uint32_t multiboot_magic, if (opt_keyboard) init_keyboard(get_bsp_cpu_id()); + if (opt_fpu) { + printk("Enabling FPU instructions support\n"); + enable_fpu(); + } + #ifdef KTF_PMU printk("Initializing PFM library\n"); diff --git a/include/lib.h b/include/lib.h index abfe8143..6fb4ec3e 100644 --- a/include/lib.h +++ b/include/lib.h @@ -421,7 +421,7 @@ static inline unsigned long ipow(int base, unsigned int exp) { return result; } -static inline void enable_sse(void) { +static inline void enable_fpu(void) { write_cr0((read_cr0() & ~X86_CR0_EM) | X86_CR0_MP); write_cr4(read_cr4() | X86_CR4_OSFXSR | X86_CR4_OSXMMEXCPT); }