123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- /*
- * Copyright (c) 2006-2021, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date Author Notes
- * 2006-09-15 QiuYi The first version.
- */
- /**
- * @addtogroup I386
- */
- /*@{*/
- #define ENTRY(proc)\
- .align 2;\
- .globl proc;\
- .type proc,@function;\
- proc:
- #define TRAPFNC(name,num)\
- ENTRY(name)\
- pushl $(num);\
- jmp _traps;\
- .data;\
- .long name;\
- .text
- #define TRAPFNC_NOEC(name,num)\
- ENTRY(name)\
- pushl $0;\
- pushl $(num);\
- jmp _traps;\
- .data;\
- .long name;\
- .text
- .globl trap_func
- .data
- .align 4
- .type trap_func,@object
- trap_func :
- .text
- /* CPU traps */
- TRAPFNC_NOEC(Xdivide, 0)
- TRAPFNC_NOEC(Xdebug, 1)
- TRAPFNC_NOEC(Xnmi, 2)
- TRAPFNC_NOEC(Xbrkpt, 3)
- TRAPFNC_NOEC(Xoflow, 4)
- TRAPFNC_NOEC(Xbound, 5)
- TRAPFNC_NOEC(Xillop, 6)
- TRAPFNC_NOEC(Xdevice, 7)
- TRAPFNC (Xdblflt, 8)
- TRAPFNC (Xtss, 9)
- TRAPFNC (Xsegnp, 10)
- TRAPFNC (Xstack, 11)
- TRAPFNC (Xgpflt, 12)
- TRAPFNC (Xpgflt, 13)
- TRAPFNC_NOEC(Xfperr, 14)
- TRAPFNC (Xalign, 15)
- /* default handler -- not for any specific trap */
- TRAPFNC (Xdefault, 500)
- .p2align 4,0x90
- .globl _traps
- .type _traps,@function
- .globl rt_interrupt_enter
- .globl rt_interrupt_leave
- _traps:
- push %ds
- push %es
- pushal
- movw $0x10,%ax
- movw %ax,%ds
- movw %ax,%es
- pushl %esp
- call rt_interrupt_enter
- movl %esp, %eax
- addl $0x2c,%eax /*get trapno*/
- movl (%eax),%eax
- pushl %eax /*push trapno*/
- call rt_hw_trap_irq
- addl $4,%esp
- call rt_interrupt_leave
- popl %esp
- popal
- pop %es
- pop %ds
- add $8,%esp
- iret
- /*@}*/
|