summaryrefslogtreecommitdiff
path: root/kernel/src/cpu
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-25 05:43:37 +0100
committerAleksa Vuckovic <aleksa@vuckovic.cc>2023-02-25 05:47:59 +0100
commitaaa23fffd02fb49cdbc56a480dbb5a8fa95bff38 (patch)
treecefd59478bb62a2edca523adc9f10cec605f57b0 /kernel/src/cpu
parent4931f266a72dccfb439badfa1070563003c80ce3 (diff)
x86_64_regs.S: (push/pop)_(callee/caller)_regs
Diffstat (limited to 'kernel/src/cpu')
-rw-r--r--kernel/src/cpu/irq_stub.S60
1 files changed, 7 insertions, 53 deletions
diff --git a/kernel/src/cpu/irq_stub.S b/kernel/src/cpu/irq_stub.S
index 3ba4360..33d87e1 100644
--- a/kernel/src/cpu/irq_stub.S
+++ b/kernel/src/cpu/irq_stub.S
@@ -1,61 +1,15 @@
.extern panic_rsp
-.macro pushall
- push %rax
- push %rbx
- push %rcx
- push %rdx
- push %rsi
- push %rdi
- push %r8
- push %r9
- push %r10
- push %r11
- push %r12
- push %r13
- push %r14
- push %r15
- mov %ds, %ax
- push %rax
- mov %es, %ax
- push %rax
- mov %ss, %ax
- push %rax
- mov $0x10, %ax
- mov %ax, %ds
- mov %ax, %es
- mov 0x80(%rsp), %rax
-.endm
-
-.macro popall
- pop %rax
- pop %rax
- mov %ax, %es
- pop %rax
- mov %ax, %ds
- pop %r15
- pop %r14
- pop %r13
- pop %r12
- pop %r11
- pop %r10
- pop %r9
- pop %r8
- pop %rdi
- pop %rsi
- pop %rdx
- pop %rcx
- pop %rbx
- pop %rax
-.endm
+#include "x86_64_regs.S"
.macro isrstub
- pushall
- mov 0x88(%rsp), %rsi
+ push_caller_saved
+ /* get error code from stack */
+ mov 0x50(%rsp), %rsi
mov %rsp, panic_rsp
cld
call isr_def_handler
- popall
+ pop_caller_saved
add $8, %rsp
iretq
.endm
@@ -78,12 +32,12 @@ isr\number:
.macro irq number
.global irq\number
irq\number:
- pushall
+ push_caller_saved
mov $\number, %rdi
mov %rsp, panic_rsp
cld
call irq_def_handler
- popall
+ pop_caller_saved
iretq
.endm