RossComputerGuy/stardustos

View on GitHub
newland/arch/x86/src/asm/proc.s

Summary

Maintainability
Test Coverage
/**
 * NewLand Kernel - (C) 2019 Tristan Ross
 */
.globl proc_regswitch
proc_regswitch:
    pusha
    pushf
    mov %cr3, %eax
    push %eax
    mov 44(%esp), %eax
    mov %ebx, 4(%eax)
    mov %ecx, 8(%eax)
    mov %edx, 12(%eax)
    mov %esi, 16(%eax)
    mov %edi, 20(%eax)
    mov 36(%esp), %ebx
    mov 40(%esp), %ecx
    mov 20(%esp), %edx
    add $4, %edx
    mov 16(%esp), %esi
    mov 4(%esp), %edi
    mov %ebx, (%eax)
    mov %edx, 24(%eax)
    mov %esi, 28(%eax)
    mov %ecx, 32(%eax)
    mov %edi, 36(%eax)
    pop %ebx
    mov %ebx, 40(%eax)
    push %ebx
    mov 48(%esp), %eax
    mov 4(%eax), %ebx
    mov 8(%eax), %ecx
    mov 12(%eax), %edx
    mov 16(%eax), %esi
    mov 20(%eax), %edi
    mov 28(%eax), %ebp
    push %eax
    mov 36(%eax), %eax
    push %eax
    popf
    pop %eax
    mov 24(%eax), %esp
    push %eax
    mov 40(%eax), %eax
    mov %eax, %cr3
    pop %eax
    push %eax
    mov 32(%eax), %eax
    xchg (%esp), %eax
    mov (%eax), %eax
    ret