OpenCores
URL https://opencores.org/ocsvn/altor32/altor32/trunk

Subversion Repositories altor32

[/] [altor32/] [trunk/] [sw/] [gdb_stub/] [exception.inc] - Blame information for rev 43

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 43 ultra_embe
#-------------------------------------------------------------
2
# Context Stack Frame - 140 bytes / 35 words
3
#-------------------------------------------------------------
4
#   0: R0
5
#   4: R1 (SP)
6
#   8: R2
7
#  12: R3 (ARG0)
8
#  16: R4
9
#  20: R5
10
#  24: R6
11
#  28: R7
12
#  32: R8
13
#  36: R9 (LR)
14
#  40: R10
15
#  44: R11
16
#  48: R12
17
#  52: R13
18
#  56: R14
19
#  60: R15
20
#  64: R16
21
#  68: R17
22
#  72: R18
23
#  76: R19
24
#  80: R20
25
#  84: R21
26
#  88: R22
27
#  92: R23
28
#  96: R24
29
# 100: R25
30
# 104: R26
31
# 108: R27
32
# 112: R28
33
# 116: R29
34
# 120: R30
35
# 124: R31
36
# 128: X
37
# 132: EPC
38
# 136: ESR
39
#-------------------------------------------------------------
40
 
41
#-------------------------------------------------------------
42
# asm_save_context:
43
#-------------------------------------------------------------
44
.macro asm_save_context
45
 
46
    l.nop
47
    l.nop
48
 
49
    # Adjust SP (frame size is 140 + allow for 128 uncommitted in-use stack)
50
    l.addi  r1, r1, -268
51
 
52
    # Save register file to stack
53
    l.sw 124(r1), r31
54
    l.sw 120(r1), r30
55
    l.sw 116(r1), r29
56
    l.sw 112(r1), r28
57
    l.sw 108(r1), r27
58
    l.sw 104(r1), r26
59
    l.sw 100(r1), r25
60
    l.sw 96(r1),  r24
61
    l.sw 92(r1),  r23
62
    l.sw 88(r1),  r22
63
    l.sw 84(r1),  r21
64
    l.sw 80(r1),  r20
65
    l.sw 76(r1),  r19
66
    l.sw 72(r1),  r18
67
    l.sw 68(r1),  r17
68
    l.sw 64(r1),  r16
69
    l.sw 60(r1),  r15
70
    l.sw 56(r1),  r14
71
    l.sw 52(r1),  r13
72
    l.sw 48(r1),  r12
73
    l.sw 44(r1),  r11
74
    l.sw 40(r1),  r10
75
    l.sw 36(r1),  r9
76
    l.sw 32(r1),  r8
77
    l.sw 28(r1),  r7
78
    l.sw 24(r1),  r6
79
    l.sw 20(r1),  r5
80
    l.sw 16(r1),  r4
81
    l.sw 12(r1),  r3
82
    l.sw 8(r1),   r2
83
    l.sw 0(r1),   r0
84
 
85
    # R10 = EPC
86
    l.mfspr r10, r0, 32
87
    l.sw 132(r1),  r10
88
 
89
    # R10 = ESR
90
    l.mfspr r10, r0, 64
91
    l.sw 136(r1),  r10
92
 
93
    # Stack pointer (R1)
94
    l.or   r10, r0,  r1
95
    l.addi r10, r10, +268
96
    l.sw 4(r1), r10
97
 
98
.endm
99
 
100
#-------------------------------------------------------------
101
# asm_load_context:
102
#-------------------------------------------------------------
103
.macro asm_load_context
104
 
105
    # Restore EPC (PC of non-exception code)
106
    l.lwz r10, 132(r1)
107
 
108
    # EPC = R10
109
    l.mtspr r0,r10,32
110
 
111
    # Restore ESR (SR of non-exception code)
112
    l.lwz r10, 136(r1)
113
 
114
    # ESR = R10
115
    l.mtspr r0,r10,64
116
 
117
    # Restore register set
118
    # r1/r1 already set
119
    l.lwz r2,   8(r1)
120
    l.lwz r3,  12(r1)
121
    l.lwz r4,  16(r1)
122
    l.lwz r5,  20(r1)
123
    l.lwz r6,  24(r1)
124
    l.lwz r7,  28(r1)
125
    l.lwz r8,  32(r1)
126
    l.lwz r9,  36(r1)
127
    l.lwz r10, 40(r1)
128
    l.lwz r11, 44(r1)
129
    l.lwz r12, 48(r1)
130
    l.lwz r13, 52(r1)
131
    l.lwz r14, 56(r1)
132
    l.lwz r15, 60(r1)
133
    l.lwz r16, 64(r1)
134
    l.lwz r17, 68(r1)
135
    l.lwz r18, 72(r1)
136
    l.lwz r19, 76(r1)
137
    l.lwz r20, 80(r1)
138
    l.lwz r21, 84(r1)
139
    l.lwz r22, 88(r1)
140
    l.lwz r23, 92(r1)
141
    l.lwz r24, 96(r1)
142
    l.lwz r25,100(r1)
143
    l.lwz r26,104(r1)
144
    l.lwz r27,108(r1)
145
    l.lwz r28,112(r1)
146
    l.lwz r29,116(r1)
147
    l.lwz r30,120(r1)
148
    l.lwz r31,124(r1)
149
 
150
    # Adjust SP past register set
151
    l.addi  r1, r1, +268
152
 
153
    # Return from interrupt (to restore PC & SR)
154
    l.rfe
155
    l.nop
156
 
157
.endm

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.