Speedup fix to PUSH_GPR and POP_GPR
[tpg/acess2.git] / Kernel / arch / x86_64 / desctab.asm
1 ;
2 ;
3 ;
4 [BITS 64]
5
6 MM_LOCALAPIC    equ     0xFFFFFD0000000000
7
8 [section .text]
9 Desctab_Init:
10         ; Install IRQ Handlers
11
12 [section .data]
13 gIDT:
14         times 256       dw      0x00080000, 0x00008E00, 0, 0    ; 64-bit Interrupt Gate, CS = 0x8, IST0
15
16 %macro DEFERR   1
17 Isr%1:
18         push    0
19         push    %1
20         jmp     ErrorCommon
21 %endmacro
22 %macro DEFERRNO 1
23 Isr%1:
24         push    %1
25         jmp     ErrorCommon
26 %endmacro
27
28 %macro DEFIRQ   1
29 Irq%1:
30         push    0
31         push    %1
32         jmp     IrqCommon
33 %endmacro
34
35 %macro PUSH_EX  1-*
36         %rep %0
37         push %1
38         %rotate 1
39         %endrep
40 %endmacro
41 %macro POP_EX   1-*
42         %rep %0
43         %rotate -1
44         pop %1
45         %endrep
46 %endmacro
47
48 %macro PUSH_GPR 0
49         mov [rsp-0x08], r15
50         mov [rsp-0x10], r14
51         mov [rsp-0x18], r13
52         mov [rsp-0x20], r12
53         mov [rsp-0x28], r11
54         mov [rsp-0x30], r10
55         mov [rsp-0x38], r9
56         mov [rsp-0x40], r8
57         mov [rsp-0x48], rdi
58         mov [rsp-0x50], rsi
59         mov [rsp-0x58], rbp
60         mov [rsp-0x60], rsp
61         mov [rsp-0x68], rbx
62         mov [rsp-0x70], rdx
63         mov [rsp-0x78], rcx
64         mov [rsp-0x80], rax
65         sub rsp, 0x80
66 %endmacro
67 %macro POP_GPR  0
68         add rsp, 0x80
69         mov r15, [rsp-0x08]
70         mov r14, [rsp-0x10]
71         mov r13, [rsp-0x18]
72         mov r12, [rsp-0x20]
73         mov r11, [rsp-0x28]
74         mov r10, [rsp-0x30]
75         mov r9, [rsp-0x38]
76         mov r8, [rsp-0x40]
77         mov rdi, [rsp-0x48]
78         mov rsi, [rsp-0x50]
79         mov rbp, [rsp-0x58]
80         ;mov rsp, [rsp-0x60]
81         mov rbx, [rsp-0x68]
82         mov rdx, [rsp-0x70]
83         mov rcx, [rsp-0x78]
84         mov rax, [rsp-0x80]
85 %endmacro
86
87 [extern Proc_Scheduler]
88 SchedulerIRQ:
89         ; TODO: Find Current CPU
90         PUSH_GPR
91         ;PUSH_FPU
92         ;PUSH_XMM
93         
94         xor rsi, rsi
95         mov rdi, MM_LOCALAPIC+0x20
96         mov esi, [rdi]
97         call Proc_Scheduler
98         
99         ;POP_XMM
100         ;POP_FPU
101         POP_GPR
102         iret

UCC git Repository :: git.ucc.asn.au