46 lines
605 B
ArmAsm

#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