diff options
Diffstat (limited to 'arch/sh/kernel/cpu/sh2a/ex.S')
-rw-r--r-- | arch/sh/kernel/cpu/sh2a/ex.S | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/arch/sh/kernel/cpu/sh2a/ex.S b/arch/sh/kernel/cpu/sh2a/ex.S new file mode 100644 index 00000000000..3ead9e63965 --- /dev/null +++ b/arch/sh/kernel/cpu/sh2a/ex.S | |||
@@ -0,0 +1,72 @@ | |||
1 | /* | ||
2 | * arch/sh/kernel/cpu/sh2a/ex.S | ||
3 | * | ||
4 | * The SH-2A exception vector table | ||
5 | * | ||
6 | * Copyright (C) 2008 Yoshinori Sato | ||
7 | * | ||
8 | * This file is subject to the terms and conditions of the GNU General Public | ||
9 | * License. See the file "COPYING" in the main directory of this archive | ||
10 | * for more details. | ||
11 | */ | ||
12 | |||
13 | #include <linux/linkage.h> | ||
14 | |||
15 | ! | ||
16 | ! convert Exception Vector to Exception Number | ||
17 | ! | ||
18 | |||
19 | ! exception no 0 to 255 | ||
20 | exception_entry0: | ||
21 | no = 0 | ||
22 | .rept 256 | ||
23 | mov.l r1,@-sp | ||
24 | bra exception_trampoline0 | ||
25 | mov #no,r1 | ||
26 | no = no + 1 | ||
27 | .endr | ||
28 | exception_trampoline0: | ||
29 | mov.l r0,@-sp | ||
30 | mov.l 1f,r0 | ||
31 | extu.b r1,r1 | ||
32 | jmp @r0 | ||
33 | extu.w r1,r1 | ||
34 | |||
35 | .align 2 | ||
36 | 1: .long exception_handler | ||
37 | |||
38 | ! exception no 256 to 511 | ||
39 | exception_entry1: | ||
40 | no = 0 | ||
41 | .rept 256 | ||
42 | mov.l r1,@-sp | ||
43 | bra exception_trampoline1 | ||
44 | mov #no,r1 | ||
45 | no = no + 1 | ||
46 | .endr | ||
47 | exception_trampoline1: | ||
48 | mov.l r0,@-sp | ||
49 | extu.b r1,r1 | ||
50 | movi20 #0x100,r0 | ||
51 | add r0,r1 | ||
52 | mov.l 1f,r0 | ||
53 | jmp @r0 | ||
54 | extu.w r1,r1 | ||
55 | |||
56 | .align 2 | ||
57 | 1: .long exception_handler | ||
58 | |||
59 | ! | ||
60 | ! Exception Vector Base | ||
61 | ! | ||
62 | .align 2 | ||
63 | ENTRY(vbr_base) | ||
64 | vector = 0 | ||
65 | .rept 256 | ||
66 | .long exception_entry0 + vector * 6 | ||
67 | vector = vector + 1 | ||
68 | .endr | ||
69 | .rept 256 | ||
70 | .long exception_entry1 + vector * 6 | ||
71 | vector = vector + 1 | ||
72 | .endr | ||