A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 91 lines 1.8 kB view raw
1#include "mips.h" 2/* s0-s7 not saved as this are callee saved registers 3 * CO_STATUS is not saved as nested interrupts are not supported 4 * 5 * Separate irqstack is used for context save and irq processing 6 * k0 holds the address of the top of this stack and k1 is used 7 * to hold original sp value. Since we do not support nesting 8 * there is nothing to warry about 9 */ 10 .extern irqvector 11 12 .global irq_handler 13 .set mips32r2 14 .set noreorder 15 .set noat 16 .section .irq_vector,"ax",%progbits 17 18irq_handler: 19 move k1, sp 20 move sp, k0 21 addiu sp, sp, -84 22 23 /* context save */ 24 sw AT, 0(sp) 25 sw v0, 4(sp) 26 sw v1, 8(sp) 27 sw a0, 12(sp) 28 sw a1, 16(sp) 29 sw a2, 20(sp) 30 sw a3, 24(sp) 31 sw t0, 28(sp) 32 sw t1, 32(sp) 33 sw t2, 36(sp) 34 sw t3, 40(sp) 35 sw t4, 44(sp) 36 sw t5, 48(sp) 37 sw t6, 52(sp) 38 sw t7, 56(sp) 39 sw t8, 60(sp) 40 sw t9, 64(sp) 41 sw fp, 68(sp) 42 sw ra, 72(sp) 43 44 mfhi t0 45 mflo t1 46 sw t0, 76(sp) 47 sw t1, 80(sp) 48 49 /* handle interrupt */ 50 lui t0, 0xb002 /* INTC base */ 51 lw t1, 0(t0) /* INTC_PD */ 52 clz t1, t1 53 sll t0, t1, 2 /* offset */ 54 la t1, irqvector 55 addu t0, t1, t0 /* irq handler pointer address */ 56 lw t0, 0(t0) 57 jalr t0 /* call handler function */ 58 nop 59 60 /* context restore */ 61 lw t0, 76(sp) 62 lw t1, 80(sp) 63 mthi t0 64 mtlo t1 65 66 lw AT, 0(sp) 67 lw v0, 4(sp) 68 lw v1, 8(sp) 69 lw a0, 12(sp) 70 lw a1, 16(sp) 71 lw a2, 20(sp) 72 lw a3, 24(sp) 73 lw t0, 28(sp) 74 lw t1, 32(sp) 75 lw t2, 36(sp) 76 lw t3, 40(sp) 77 lw t4, 44(sp) 78 lw t5, 48(sp) 79 lw t6, 52(sp) 80 lw t7, 56(sp) 81 lw t8, 60(sp) 82 lw t9, 64(sp) 83 lw fp, 68(sp) 84 lw ra, 72(sp) 85 86 addiu sp, sp, 84 87 move sp, k1 88 eret 89 90 .set reorder 91 .set at