From e8a76b2f6b53d99640ceb2850bf4e45118b923f1 Mon Sep 17 00:00:00 2001 From: Ada Christine Date: Sun, 13 Feb 2022 18:47:58 +0000 Subject: rudimentary irq and timer support --- kc/core/cpu/exceptions.S | 50 +++++++++--------------------------------------- 1 file changed, 9 insertions(+), 41 deletions(-) (limited to 'kc/core/cpu/exceptions.S') diff --git a/kc/core/cpu/exceptions.S b/kc/core/cpu/exceptions.S index 8a19c8c..087cf12 100644 --- a/kc/core/cpu/exceptions.S +++ b/kc/core/cpu/exceptions.S @@ -1,67 +1,35 @@ #include "exceptions.h" +#include "interrupt.h" .macro EXCEPTION_BEGIN vec:req, code=0 // just in case something tried to be clever before cld // push param registers - push %rdi + ISR_STORE_PARAM_REGS // store certain parameters movb $\vec,%dil - push %rsi .if \code - movq 16(%rsp), %rsi + movq ISR_PARAM_REGS_SIZE(%rsp), %rsi .else xor %rsi, %rsi .endif - push %rdx - push %rcx - push %r8 - push %r9 // caller-saved registers - push %rax - push %r10 - push %r11 + ISR_STORE_CALLER_REGS // callee-saved registers - push %rbx - push %rbp - push %r12 - push %r13 - push %r14 - push %r15 + ISR_STORE_CALLEE_REGS .endm .macro EXCEPTION_END vec:req, code=0 // restore all the registers - pop %r15 - pop %r14 - pop %r13 - pop %r12 - pop %rbp - pop %rbx - pop %r11 - pop %r10 - pop %rax - pop %r9 - pop %r8 - pop %rcx - pop %rdx - pop %rsi - pop %rdi + ISR_RESTORE_CALLEE_REGS + ISR_RESTORE_CALLER_REGS + ISR_RESTORE_PARAM_REGS .if \code add $8, %rsp .endif iretq .endm -.macro EXCEPTION_CALL func - // align the stack for the call to the handler function - mov %rsp, %rbp - and $-16, %rsp - call \func - // restore stack pointer, possibly unaligned - mov %rbp, %rsp -.endm - .macro EXCEPTION_DEFINE name:req, vec:req \name\()_isr: .if \vec > 9 && \vec < 15 || \vec == 17 || \vec == 21 || \vec > 28 && \vec < 31 @@ -69,7 +37,7 @@ .else EXCEPTION_BEGIN \vec .endif - EXCEPTION_CALL \name\()_handler + ISR_CALL \name\()_handler .if \vec > 9 && \vec < 15 || \vec == 17 || \vec == 21 || \vec > 28 && \vec < 31 EXCEPTION_END \vec, 1 .else -- cgit v1.3.1-1-g115d