source: rtems/c/src/lib/libcpu/powerpc/new-exceptions/bspsupport/ppc_exc_fatal.S @ a6f84b27

5
Last change on this file since a6f84b27 was a6f84b27, checked in by Sebastian Huber <sebastian.huber@…>, on 08/01/17 at 08:57:46

powerpc: Add 64-bit context/interrupt support

Update #3082.

  • Property mode set to 100644
File size: 7.3 KB
Line 
1/*
2 * Copyright (c) 2011, 2017 embedded brains GmbH.  All rights reserved.
3 *
4 *  embedded brains GmbH
5 *  Dornierstr. 4
6 *  82178 Puchheim
7 *  Germany
8 *  <rtems@embedded-brains.de>
9 *
10 * The license and distribution terms for this file may be
11 * found in the file LICENSE in this distribution or at
12 * http://www.rtems.org/license/LICENSE.
13 */
14
15#include <bspopts.h>
16#include <rtems/score/percpu.h>
17#include <bsp/vectors.h>
18
19#define SCRATCH_REGISTER_0 r3
20#define SCRATCH_REGISTER_1 r4
21
22        .global ppc_exc_fatal_normal
23        .global ppc_exc_fatal_critical
24        .global ppc_exc_fatal_machine_check
25        .global ppc_exc_fatal_debug
26
27ppc_exc_fatal_critical:
28
29        PPC_REG_STORE   SCRATCH_REGISTER_1, GPR4_OFFSET(r1)
30        mfcsrr0 SCRATCH_REGISTER_1
31        PPC_REG_STORE   SCRATCH_REGISTER_1, SRR0_FRAME_OFFSET(r1)
32        mfcsrr1 SCRATCH_REGISTER_1
33        PPC_REG_STORE   SCRATCH_REGISTER_1, SRR1_FRAME_OFFSET(r1)
34        b       .Lppc_exc_fatal
35
36ppc_exc_fatal_machine_check:
37
38        PPC_REG_STORE   SCRATCH_REGISTER_1, GPR4_OFFSET(r1)
39        mfmcsrr0        SCRATCH_REGISTER_1
40        PPC_REG_STORE   SCRATCH_REGISTER_1, SRR0_FRAME_OFFSET(r1)
41        mfmcsrr1        SCRATCH_REGISTER_1
42        PPC_REG_STORE   SCRATCH_REGISTER_1, SRR1_FRAME_OFFSET(r1)
43        b       .Lppc_exc_fatal
44
45ppc_exc_fatal_debug:
46
47        PPC_REG_STORE   SCRATCH_REGISTER_1, GPR4_OFFSET(r1)
48        mfspr   SCRATCH_REGISTER_1, BOOKE_DSRR0
49        PPC_REG_STORE   SCRATCH_REGISTER_1, SRR0_FRAME_OFFSET(r1)
50        mfspr   SCRATCH_REGISTER_1, BOOKE_DSRR1
51        PPC_REG_STORE   SCRATCH_REGISTER_1, SRR1_FRAME_OFFSET(r1)
52        b       .Lppc_exc_fatal
53
54ppc_exc_fatal_normal:
55
56        PPC_REG_STORE   SCRATCH_REGISTER_1, GPR4_OFFSET(r1)
57        mfsrr0  SCRATCH_REGISTER_1
58        PPC_REG_STORE   SCRATCH_REGISTER_1, SRR0_FRAME_OFFSET(r1)
59        mfsrr1  SCRATCH_REGISTER_1
60        PPC_REG_STORE   SCRATCH_REGISTER_1, SRR1_FRAME_OFFSET(r1)
61
62.Lppc_exc_fatal:
63
64        stw     r3, EXCEPTION_NUMBER_OFFSET(r1)
65        mfcr    SCRATCH_REGISTER_1
66        stw     SCRATCH_REGISTER_1, EXC_CR_OFFSET(r1)
67        mfxer   SCRATCH_REGISTER_1
68        stw     SCRATCH_REGISTER_1, EXC_XER_OFFSET(r1)
69        mfctr   SCRATCH_REGISTER_1
70        PPC_REG_STORE   SCRATCH_REGISTER_1, EXC_CTR_OFFSET(r1)
71        mflr    SCRATCH_REGISTER_1
72        PPC_REG_STORE   SCRATCH_REGISTER_1, EXC_LR_OFFSET(r1)
73        PPC_REG_STORE   r0, GPR0_OFFSET(r1)
74        PPC_REG_STORE   r1, GPR1_OFFSET(r1)
75        PPC_REG_STORE   r2, GPR2_OFFSET(r1)
76        PPC_REG_STORE   r5, GPR5_OFFSET(r1)
77        PPC_REG_STORE   r6, GPR6_OFFSET(r1)
78        PPC_REG_STORE   r7, GPR7_OFFSET(r1)
79        PPC_REG_STORE   r8, GPR8_OFFSET(r1)
80        PPC_REG_STORE   r9, GPR9_OFFSET(r1)
81        PPC_REG_STORE   r10, GPR10_OFFSET(r1)
82        PPC_REG_STORE   r11, GPR11_OFFSET(r1)
83        PPC_REG_STORE   r12, GPR12_OFFSET(r1)
84        PPC_REG_STORE   r13, GPR13_OFFSET(r1)
85        PPC_REG_STORE   r14, GPR14_OFFSET(r1)
86        PPC_REG_STORE   r15, GPR15_OFFSET(r1)
87        PPC_REG_STORE   r16, GPR16_OFFSET(r1)
88        PPC_REG_STORE   r17, GPR17_OFFSET(r1)
89        PPC_REG_STORE   r18, GPR18_OFFSET(r1)
90        PPC_REG_STORE   r19, GPR19_OFFSET(r1)
91        PPC_REG_STORE   r20, GPR20_OFFSET(r1)
92        PPC_REG_STORE   r21, GPR21_OFFSET(r1)
93        PPC_REG_STORE   r22, GPR22_OFFSET(r1)
94        PPC_REG_STORE   r23, GPR23_OFFSET(r1)
95        PPC_REG_STORE   r24, GPR24_OFFSET(r1)
96        PPC_REG_STORE   r25, GPR25_OFFSET(r1)
97        PPC_REG_STORE   r26, GPR26_OFFSET(r1)
98        PPC_REG_STORE   r27, GPR27_OFFSET(r1)
99        PPC_REG_STORE   r28, GPR28_OFFSET(r1)
100        PPC_REG_STORE   r29, GPR29_OFFSET(r1)
101        PPC_REG_STORE   r30, GPR30_OFFSET(r1)
102        PPC_REG_STORE   r31, GPR31_OFFSET(r1)
103
104        /* Enable FPU and/or AltiVec */
105#if defined(PPC_MULTILIB_FPU) || defined(PPC_MULTILIB_ALTIVEC)
106        mfmsr   SCRATCH_REGISTER_1
107#ifdef PPC_MULTILIB_FPU
108        ori     SCRATCH_REGISTER_1, SCRATCH_REGISTER_1, MSR_FP
109#endif
110#ifdef PPC_MULTILIB_ALTIVEC
111        oris    SCRATCH_REGISTER_1, SCRATCH_REGISTER_1, MSR_VE >> 16
112#endif
113        mtmsr   SCRATCH_REGISTER_1
114        isync
115#endif
116
117#ifdef PPC_MULTILIB_ALTIVEC
118        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(0)
119        stvx    v0, r1, SCRATCH_REGISTER_1
120        mfvscr  v0
121        li      SCRATCH_REGISTER_1, PPC_EXC_VSCR_OFFSET
122        stvewx  v0, r1, SCRATCH_REGISTER_1
123        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(1)
124        stvx    v1, r1, SCRATCH_REGISTER_1
125        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(2)
126        stvx    v2, r1, SCRATCH_REGISTER_1
127        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(3)
128        stvx    v3, r1, SCRATCH_REGISTER_1
129        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(4)
130        stvx    v4, r1, SCRATCH_REGISTER_1
131        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(5)
132        stvx    v5, r1, SCRATCH_REGISTER_1
133        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(6)
134        stvx    v6, r1, SCRATCH_REGISTER_1
135        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(7)
136        stvx    v7, r1, SCRATCH_REGISTER_1
137        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(8)
138        stvx    v8, r1, SCRATCH_REGISTER_1
139        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(9)
140        stvx    v9, r1, SCRATCH_REGISTER_1
141        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(10)
142        stvx    v10, r1, SCRATCH_REGISTER_1
143        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(11)
144        stvx    v11, r1, SCRATCH_REGISTER_1
145        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(12)
146        stvx    v12, r1, SCRATCH_REGISTER_1
147        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(13)
148        stvx    v13, r1, SCRATCH_REGISTER_1
149        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(14)
150        stvx    v14, r1, SCRATCH_REGISTER_1
151        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(15)
152        stvx    v15, r1, SCRATCH_REGISTER_1
153        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(16)
154        stvx    v16, r1, SCRATCH_REGISTER_1
155        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(17)
156        stvx    v17, r1, SCRATCH_REGISTER_1
157        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(18)
158        stvx    v18, r1, SCRATCH_REGISTER_1
159        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(19)
160        stvx    v19, r1, SCRATCH_REGISTER_1
161        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(20)
162        stvx    v20, r1, SCRATCH_REGISTER_1
163        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(21)
164        stvx    v21, r1, SCRATCH_REGISTER_1
165        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(22)
166        stvx    v22, r1, SCRATCH_REGISTER_1
167        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(23)
168        stvx    v23, r1, SCRATCH_REGISTER_1
169        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(24)
170        stvx    v24, r1, SCRATCH_REGISTER_1
171        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(25)
172        stvx    v25, r1, SCRATCH_REGISTER_1
173        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(26)
174        stvx    v26, r1, SCRATCH_REGISTER_1
175        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(27)
176        stvx    v27, r1, SCRATCH_REGISTER_1
177        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(28)
178        stvx    v28, r1, SCRATCH_REGISTER_1
179        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(29)
180        stvx    v29, r1, SCRATCH_REGISTER_1
181        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(30)
182        stvx    v30, r1, SCRATCH_REGISTER_1
183        li      SCRATCH_REGISTER_1, PPC_EXC_VR_OFFSET(31)
184        stvx    v31, r1, SCRATCH_REGISTER_1
185        mfvrsave        SCRATCH_REGISTER_1
186        stw     SCRATCH_REGISTER_1, PPC_EXC_VRSAVE_OFFSET(r1)
187#endif
188
189#ifdef PPC_MULTILIB_FPU
190        stfd    f0, PPC_EXC_FR_OFFSET(0)(r1)
191        mffs    f0
192        stfd    f0, PPC_EXC_FPSCR_OFFSET(r1)
193        stfd    f1, PPC_EXC_FR_OFFSET(1)(r1)
194        stfd    f2, PPC_EXC_FR_OFFSET(2)(r1)
195        stfd    f3, PPC_EXC_FR_OFFSET(3)(r1)
196        stfd    f4, PPC_EXC_FR_OFFSET(4)(r1)
197        stfd    f5, PPC_EXC_FR_OFFSET(5)(r1)
198        stfd    f6, PPC_EXC_FR_OFFSET(6)(r1)
199        stfd    f7, PPC_EXC_FR_OFFSET(7)(r1)
200        stfd    f8, PPC_EXC_FR_OFFSET(8)(r1)
201        stfd    f9, PPC_EXC_FR_OFFSET(9)(r1)
202        stfd    f10, PPC_EXC_FR_OFFSET(10)(r1)
203        stfd    f11, PPC_EXC_FR_OFFSET(11)(r1)
204        stfd    f12, PPC_EXC_FR_OFFSET(12)(r1)
205        stfd    f13, PPC_EXC_FR_OFFSET(13)(r1)
206        stfd    f14, PPC_EXC_FR_OFFSET(14)(r1)
207        stfd    f15, PPC_EXC_FR_OFFSET(15)(r1)
208        stfd    f16, PPC_EXC_FR_OFFSET(16)(r1)
209        stfd    f17, PPC_EXC_FR_OFFSET(17)(r1)
210        stfd    f18, PPC_EXC_FR_OFFSET(18)(r1)
211        stfd    f19, PPC_EXC_FR_OFFSET(19)(r1)
212        stfd    f20, PPC_EXC_FR_OFFSET(20)(r1)
213        stfd    f21, PPC_EXC_FR_OFFSET(21)(r1)
214        stfd    f22, PPC_EXC_FR_OFFSET(22)(r1)
215        stfd    f23, PPC_EXC_FR_OFFSET(23)(r1)
216        stfd    f24, PPC_EXC_FR_OFFSET(24)(r1)
217        stfd    f25, PPC_EXC_FR_OFFSET(25)(r1)
218        stfd    f26, PPC_EXC_FR_OFFSET(26)(r1)
219        stfd    f27, PPC_EXC_FR_OFFSET(27)(r1)
220        stfd    f28, PPC_EXC_FR_OFFSET(28)(r1)
221        stfd    f29, PPC_EXC_FR_OFFSET(29)(r1)
222        stfd    f30, PPC_EXC_FR_OFFSET(30)(r1)
223        stfd    f31, PPC_EXC_FR_OFFSET(31)(r1)
224#endif
225
226        li      r3, 9
227        addi    r4, r1, FRAME_LINK_SPACE
228        b       _Terminate
Note: See TracBrowser for help on using the repository browser.