mirror of
https://github.com/taigrr/gopher-os
synced 2025-01-18 04:43:13 -08:00
Merge pull request #8 from achilleasa/enable-sse-support
Enable SSE support
This commit is contained in:
commit
4829115647
@ -27,6 +27,7 @@ align 4
|
||||
MULTIBOOT_MAGIC equ 0x36d76289
|
||||
|
||||
err_unsupported_bootloader db '[rt0] kernel not loaded by multiboot-compliant bootloader', 0
|
||||
err_sse_not_available db '[rt0] kernel requires a CPU with SSE support', 0
|
||||
err_kmain_returned db '[rt0] kMain returned; halting system', 0
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
@ -51,6 +52,9 @@ _rt0_entry:
|
||||
; stack grows downwards so we need to point ESP to stack_top
|
||||
mov esp, stack_top
|
||||
|
||||
; Enable SSE
|
||||
call _rt0_enable_sse
|
||||
|
||||
; Load initial GDT
|
||||
call _rt0_load_gdt
|
||||
|
||||
@ -162,3 +166,34 @@ NULL_SEG equ gdt0_nil_seg - gdt0
|
||||
CS_SEG equ gdt0_cs_seg - gdt0
|
||||
DS_SEG equ gdt0_ds_seg - gdt0
|
||||
GS_SEG equ gdt0_gs_seg - gdt0
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; Enable SSE support. Code taken from:
|
||||
; http://wiki.osdev.org/SSE#Checking_for_SSE
|
||||
;------------------------------------------------------------------------------
|
||||
_rt0_enable_sse:
|
||||
pushad
|
||||
|
||||
; check for SSE
|
||||
mov eax, 0x1
|
||||
cpuid
|
||||
test edx, 1<<25
|
||||
jz .no_sse
|
||||
|
||||
; enable SSE
|
||||
mov eax, cr0
|
||||
and ax, 0xFFFB ; clear coprocessor emulation CR0.EM
|
||||
or ax, 0x2 ; set coprocessor monitoring CR0.MP
|
||||
mov cr0, eax
|
||||
mov eax, cr4
|
||||
or ax, 3 << 9 ; set CR4.OSFXSR and CR4.OSXMMEXCPT at the same time
|
||||
mov cr4, eax
|
||||
|
||||
popad
|
||||
ret
|
||||
.no_sse:
|
||||
mov edi, err_sse_not_available
|
||||
call write_string
|
||||
|
||||
cli
|
||||
hlt
|
||||
|
Loading…
x
Reference in New Issue
Block a user