master
s 65 lines 1.12 KB
Raw
1 #include "core-isa.h"
2
3 .macro vector name
4
5 .section .vector.\name, "ax"
6 .global vector_\name
7 vector_\name\():
8 j 1f
9 .literal_position
10 1:
11 wsr a0, excsave1
12 movi a0, 1f
13 ret.n
14
15 .section .vector.\name\().text, "ax"
16 .literal_position
17 1:
18 rsr a0, excsave1
19 wsr a2, excsave1
20 movi a2, handler_\name
21 l32i a2, a2, 0
22 beqz a2, 1f
23 jx a2
24 1:
25 movi a3, 1b
26 movi a2, 1
27 simcall
28
29 .align 4
30 .global handler_\name
31 handler_\name\(): .word 0
32
33 .endm
34
35 #if XCHAL_HAVE_WINDOWED
36 vector window_overflow_4
37 vector window_overflow_8
38 vector window_overflow_12
39 vector window_underflow_4
40 vector window_underflow_8
41 vector window_underflow_12
42 #endif
43
44 #if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 2
45 vector level2
46 #endif
47 #if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 3
48 vector level3
49 #endif
50 #if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 4
51 vector level4
52 #endif
53 #if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 5
54 vector level5
55 #endif
56 #if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 6
57 vector level6
58 #endif
59 #if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 7
60 vector level7
61 #endif
62
63 vector kernel
64 vector user
65 vector double