Files
mop3/kernel/amd64/intr_stub.S
2025-12-23 19:50:37 +01:00

111 lines
2.1 KiB
ArmAsm

.extern amd64_intr_handler
#define err(z) \
pushq $z;
#define no_err(z) \
pushq $0; \
pushq $z;
#define push_regs \
pushq %rax; \
pushq %rcx; \
pushq %rdx; \
pushq %rsi; \
pushq %rdi; \
pushq %rbp; \
pushq %rbx; \
pushq %r8; \
pushq %r9; \
pushq %r10; \
pushq %r11; \
pushq %r12; \
pushq %r13; \
pushq %r14; \
pushq %r15;
#define pop_regs \
popq %r15; \
popq %r14; \
popq %r13; \
popq %r12; \
popq %r11; \
popq %r10; \
popq %r9; \
popq %r8; \
popq %rbx; \
popq %rbp; \
popq %rdi; \
popq %rsi; \
popq %rdx; \
popq %rcx; \
popq %rax;
#define make_intr_stub(x, n) \
.global amd64_intr ## n; \
amd64_intr ## n:; \
x(n); \
cli; \
push_regs; \
cld; \
movq %rsp, %rdi; \
movq %rsp, %rax; \
subq $8, %rsp; \
andq $~0xF, %rsp; \
movq %rax, (%rsp); \
callq amd64_intr_handler; \
movq (%rsp), %rsp; \
pop_regs; \
addq $16, %rsp; \
iretq;
make_intr_stub(no_err, 0)
make_intr_stub(no_err, 1)
make_intr_stub(no_err, 2)
make_intr_stub(no_err, 3)
make_intr_stub(no_err, 4)
make_intr_stub(no_err, 5)
make_intr_stub(no_err, 6)
make_intr_stub(no_err, 7)
make_intr_stub(err, 8)
make_intr_stub(no_err, 9)
make_intr_stub(err, 10)
make_intr_stub(err, 11)
make_intr_stub(err, 12)
make_intr_stub(err, 13)
make_intr_stub(err, 14)
make_intr_stub(no_err, 15)
make_intr_stub(no_err, 16)
make_intr_stub(err, 17)
make_intr_stub(no_err, 18)
make_intr_stub(no_err, 19)
make_intr_stub(no_err, 20)
make_intr_stub(err, 21)
make_intr_stub(no_err, 22)
make_intr_stub(no_err, 23)
make_intr_stub(no_err, 24)
make_intr_stub(no_err, 25)
make_intr_stub(no_err, 26)
make_intr_stub(no_err, 27)
make_intr_stub(no_err, 28)
make_intr_stub(err, 29)
make_intr_stub(err, 30)
make_intr_stub(no_err, 31)
make_intr_stub(no_err, 32)
make_intr_stub(no_err, 33)
make_intr_stub(no_err, 34)
make_intr_stub(no_err, 35)
make_intr_stub(no_err, 36)
make_intr_stub(no_err, 37)
make_intr_stub(no_err, 38)
make_intr_stub(no_err, 39)
make_intr_stub(no_err, 40)
make_intr_stub(no_err, 41)
make_intr_stub(no_err, 42)
make_intr_stub(no_err, 43)
make_intr_stub(no_err, 44)
make_intr_stub(no_err, 45)
make_intr_stub(no_err, 46)
make_intr_stub(no_err, 47)