hypervisor/src/driver/assembly.asm
2022-04-24 21:23:54 +02:00

118 lines
2.5 KiB
NASM

include ksamd64.inc
.code
; -----------------------------------------------------
LEAF_ENTRY _str, _TEXT$00
str word ptr [rcx]
ret
LEAF_END _str, _TEXT$00
; -----------------------------------------------------
LEAF_ENTRY _sldt, _TEXT$00
sldt word ptr [rcx]
ret
LEAF_END _sldt, _TEXT$00
; -----------------------------------------------------
LEAF_ENTRY __lgdt, _TEXT$00
lgdt fword ptr [rcx]
ret
LEAF_END __lgdt, _TEXT$00
; -----------------------------------------------------
LEAF_ENTRY __invept, _TEXT$00
invept rcx, OWORD PTR [rdx]
ret
LEAF_END __invept, _TEXT$00
; -----------------------------------------------------
LEAF_ENTRY restore_context, _TEXT$00
movaps xmm0, CxXmm0[rcx]
movaps xmm1, CxXmm1[rcx]
movaps xmm2, CxXmm2[rcx]
movaps xmm3, CxXmm3[rcx]
movaps xmm4, CxXmm4[rcx]
movaps xmm5, CxXmm5[rcx]
movaps xmm6, CxXmm6[rcx]
movaps xmm7, CxXmm7[rcx]
movaps xmm8, CxXmm8[rcx]
movaps xmm9, CxXmm9[rcx]
movaps xmm10, CxXmm10[rcx]
movaps xmm11, CxXmm11[rcx]
movaps xmm12, CxXmm12[rcx]
movaps xmm13, CxXmm13[rcx]
movaps xmm14, CxXmm14[rcx]
movaps xmm15, CxXmm15[rcx]
ldmxcsr CxMxCsr[rcx]
mov rax, CxRax[rcx]
mov rdx, CxRdx[rcx]
mov r8, CxR8[rcx]
mov r9, CxR9[rcx]
mov r10, CxR10[rcx]
mov r11, CxR11[rcx]
mov rbx, CxRbx[rcx]
mov rsi, CxRsi[rcx]
mov rdi, CxRdi[rcx]
mov rbp, CxRbp[rcx]
mov r12, CxR12[rcx]
mov r13, CxR13[rcx]
mov r14, CxR14[rcx]
mov r15, CxR15[rcx]
cli
push CxEFlags[rcx]
popfq
mov rsp, CxRsp[rcx]
push CxRip[rcx]
mov rcx, CxRcx[rcx]
ret
LEAF_END restore_context, _TEXT$00
; -----------------------------------------------------
extern vm_exit_handler:proc
extern vm_launch_handler:proc
extern RtlCaptureContext:proc
; -----------------------------------------------------
vm_launch PROC
mov rcx, rsp
sub rsp, 30h
jmp vm_launch_handler
vm_launch ENDP
; -----------------------------------------------------
vm_exit PROC
; Load CONTEXT pointer
push rcx
lea rcx, [rsp+8h]
sub rsp, 30h ; Home-space
call RtlCaptureContext
add rsp, 30h
mov rcx, [rsp+CxRsp+8h]
add rcx, 8h ; Fixup push rcx
add rcx, 30h ; Fixup home-space
mov [rsp+CxRsp+8h], rcx
pop rcx
mov [rsp+CxRcx], rcx
mov rcx, rsp
sub rsp, 30h
jmp vm_exit_handler
vm_exit ENDP
end