OSDN Git Service

initial v2.4 GIT import
[linux-kernel-docs/linux-2.4.36.git] / include / asm-mips64 / exception.h
1 /*
2  * This file is subject to the terms and conditions of the GNU General Public
3  * License.  See the file "COPYING" in the main directory of this archive
4  * for more details.
5  *
6  * Copyright (C) 1994 - 1999 by Ralf Baechle
7  * Copyright (C) 1999 Silicon Graphics
8  *
9  * Low level exception handling
10  */
11 #include <asm/asm.h>
12 #include <asm/regdef.h>
13 #include <asm/fpregdef.h>
14 #include <asm/mipsregs.h>
15 #include <asm/stackframe.h>
16
17         .macro  __build_clear_none
18         .endm
19
20         .macro  __build_clear_sti
21         STI
22         .endm
23
24         .macro  __build_clear_cli
25         CLI
26         .endm
27
28         .macro  __build_clear_fpe
29         cfc1    a1, fcr31
30         li      a2, ~(0x3f << 12)
31         and     a2, a1
32         ctc1    a2, fcr31
33         STI
34         .endm
35
36         .macro  __build_clear_ade
37         dmfc0   t0, CP0_BADVADDR
38         sd      t0, PT_BVADDR(sp)
39         KMODE
40         .endm
41
42         .macro  __BUILD_silent exception
43         .endm
44
45         /* Gas tries to parse the PRINT argument as a string containing
46            string escapes and emits bogus warnings if it believes to
47            recognize an unknown escape code.  So make the arguments
48            start with an n and gas will believe \n is ok ...  */
49         .macro  __BUILD_verbose nexception
50         ld      a1, PT_EPC(sp)
51         PRINT("Got \nexception at %016lx\012")
52         .endm
53
54         .macro  __BUILD_count exception
55         .set    reorder
56         ld      t0,exception_count_\exception
57         daddiu  t0, 1
58         sd      t0,exception_count_\exception
59         .set    noreorder
60         .comm   exception_count\exception, 8, 8
61         .endm
62
63         .macro  BUILD_HANDLER exception handler clear verbose
64         .align  5
65         NESTED(handle_\exception, PT_SIZE, sp)
66         .set    noat
67         SAVE_ALL
68         __BUILD_clear_\clear
69         .set    at
70         __BUILD_\verbose \exception
71         move    a0, sp
72         jal     do_\handler
73         j       ret_from_exception
74          nop
75         END(handle_\exception)
76         .endm