aboutsummaryrefslogtreecommitdiff
path: root/boot.old/boot64.s
blob: 6ee4e852fc3e04f10dbc2c28eb5789e2f8cf093a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
.code64
.section .text
.global setup_page_tables_64

setup_page_tables_64:
    push %rbx
    push %rcx
    push %rdx
    
    mov %rdi, %rax
    shr $39, %rax
    and $0x1FF, %rax
    
    mov %rdi, %rbx
    shr $30, %rbx
    and $0x1FF, %rbx
    
    mov %rdi, %rcx
    shr $21, %rcx
    and $0x1FF, %rcx
    
    mov %cr3, %rdx
    
    mov (%rdx,%rax,8), %rax
    and $~0xFFF, %rax
    
    mov (%rax,%rbx,8), %rax
    and $~0xFFF, %rax
    
    mov %rdi, %rdx
    and $~0x1FFFFF, %rdx
    or $0x8B, %rdx
    mov %rdx, (%rax,%rcx,8)
    
    invlpg (%rdi)
    
    pop %rdx
    pop %rcx
    pop %rbx
    ret