[MODERN FEATURES] SSE
This commit is contained in:
45
kernel/arch/sse.S
Normal file
45
kernel/arch/sse.S
Normal file
@@ -0,0 +1,45 @@
|
||||
#include <registers.h>
|
||||
|
||||
.intel_syntax noprefix
|
||||
|
||||
.global sse_init
|
||||
sse_init:
|
||||
mov rax, cr0
|
||||
and ax, 0xFFFF-CR0_EM
|
||||
or ax, CR0_MP
|
||||
mov cr0, rax
|
||||
|
||||
mov rax, cr4
|
||||
or ax, CR4_OSFXSR
|
||||
or ax, CR4_OSXMMEXCPT
|
||||
mov cr4, rax
|
||||
|
||||
ret
|
||||
|
||||
.global sse_save
|
||||
sse_save:
|
||||
movabs rax, offset _sse_buffer
|
||||
fxsave [rax]
|
||||
movabs rsi, offset _sse_buffer
|
||||
mov rdx, 512
|
||||
call memcpy
|
||||
ret
|
||||
|
||||
.global sse_restore
|
||||
sse_restore:
|
||||
mov rsi, rdi
|
||||
movabs rdi, offset _sse_buffer
|
||||
mov rdx, 512
|
||||
call memcpy
|
||||
movabs rax, offset _sse_buffer
|
||||
fxrstor [rax]
|
||||
ret
|
||||
|
||||
|
||||
.section .data
|
||||
.align 16
|
||||
_sse_buffer:
|
||||
.rept 512
|
||||
.byte 0
|
||||
.endr
|
||||
|
||||
Reference in New Issue
Block a user