/* opencoreC - Timer Preemptive Interrupt Trampoline (Vector 32 / 0x20) */ .global timer_isr_entry .extern timer_interrupt_handler .section .text timer_isr_entry: /* 1. Save all general-purpose registers to form complete interrupt context frame */ push rax push rbx push rcx push rdx push rsi push rdi push rbp push r8 push r9 push r10 push r11 push r12 push r13 push r14 push r15 /* 2. Call handler in Rust (sends EOI and invokes sched.preempt_tick) */ call timer_interrupt_handler /* 3. Restore all general-purpose registers */ pop r15 pop r14 pop r13 pop r12 pop r11 pop r10 pop r9 pop r8 pop rbp pop rdi pop rsi pop rdx pop rcx pop rbx pop rax /* 4. Return from interrupt (IRETQ restores RIP, CS, RFLAGS, RSP, SS) */ iretq