git.ucc.asn.au
/
tpg
/
acess2.git
/ blob
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
history
|
raw
|
HEAD
Kernel/arm7 - Fiddling with PCI etc
[tpg/acess2.git]
/
Kernel
/
arch
/
x86_64
/
proc.asm
1
;
2
;
3
;
4
%include "arch/x86_64/include/common.inc.asm"
5
[BITS 64]
6
[section .text]
7
8
[extern Threads_Exit]
9
10
[global GetRIP]
11
GetRIP:
12
mov rax, [rsp]
13
ret
14
15
[global NewTaskHeader]
16
NewTaskHeader:
17
mov rax, [rsp]
18
mov dr0, rax
19
20
sti
21
mov al, 0x20
22
mov dx, 0x20
23
out dx, al
24
25
mov rdi, [rsp+0x18]
26
dec QWORD [rsp+0x10]
27
jz .call
28
mov rsi, [rsp+0x20]
29
dec QWORD [rsp+0x10]
30
jz .call
31
mov rdx, [rsp+0x28]
32
dec QWORD [rsp+0x10]
33
jz .call
34
mov rcx, [rsp+0x30]
35
dec QWORD [rsp+0x10]
36
jz .call
37
.call:
38
mov rax, [rsp+0x8]
39
; xchg bx, bx
40
call rax
41
42
; Quit thread with RAX as the return code
43
xor rdi, rdi
44
mov rsi, rax
45
call Threads_Exit
46
47
.hlt:
48
jmp .hlt
49
50
[global SaveState]
51
SaveState:
52
; Save regs to RSI
53
xchg bx, bx
54
add rsi, 0x80
55
SAVE_GPR rsi
56
sub rsi, 0x80
57
; Return RSI as the RSP value
58
mov [rdi], rsi
59
call GetRIP
60
cmp eax, 0x80000000
61
ja .fastret
62
.restore:
63
; RSP = RSI from call
64
xchg bx, bx
65
POP_GPR
66
mov rsp, [rsp-0x60] ; Restore RSP from the saved value
67
xor eax, eax
68
ret
69
.fastret:
70
; RAX is still the return addr
71
ret
72
UCC
git Repository :: git.ucc.asn.au