65 lines
1.1 KiB
ArmAsm
65 lines
1.1 KiB
ArmAsm
#include "core-isa.h"
|
|
|
|
.macro vector name
|
|
|
|
.section .vector.\name, "ax"
|
|
.global vector_\name
|
|
vector_\name\():
|
|
j 1f
|
|
.literal_position
|
|
1:
|
|
wsr a0, excsave1
|
|
movi a0, 1f
|
|
ret.n
|
|
|
|
.section .vector.\name\().text, "ax"
|
|
.literal_position
|
|
1:
|
|
rsr a0, excsave1
|
|
wsr a2, excsave1
|
|
movi a2, handler_\name
|
|
l32i a2, a2, 0
|
|
beqz a2, 1f
|
|
jx a2
|
|
1:
|
|
movi a3, 1b
|
|
movi a2, 1
|
|
simcall
|
|
|
|
.align 4
|
|
.global handler_\name
|
|
handler_\name\(): .word 0
|
|
|
|
.endm
|
|
|
|
#if XCHAL_HAVE_WINDOWED
|
|
vector window_overflow_4
|
|
vector window_overflow_8
|
|
vector window_overflow_12
|
|
vector window_underflow_4
|
|
vector window_underflow_8
|
|
vector window_underflow_12
|
|
#endif
|
|
|
|
#if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 2
|
|
vector level2
|
|
#endif
|
|
#if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 3
|
|
vector level3
|
|
#endif
|
|
#if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 4
|
|
vector level4
|
|
#endif
|
|
#if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 5
|
|
vector level5
|
|
#endif
|
|
#if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 6
|
|
vector level6
|
|
#endif
|
|
#if XCHAL_NUM_INTLEVELS + XCHAL_HAVE_NMI >= 7
|
|
vector level7
|
|
#endif
|
|
|
|
vector kernel
|
|
vector user
|
|
vector double
|