2
* Copyright (c) 2005 Martin Decky
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
9
* - Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
* - Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
14
* - The name of the author may not be used to endorse or promote products
15
* derived from this software without specific prior written permission.
17
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
#ifndef KERN_mips32_CONTEXT_OFFSET_H_
30
#define KERN_mips32_CONTEXT_OFFSET_H_
36
#define OFFSET_S2 0x10
37
#define OFFSET_S3 0x14
38
#define OFFSET_S4 0x18
39
#define OFFSET_S5 0x1c
40
#define OFFSET_S6 0x20
41
#define OFFSET_S7 0x24
42
#define OFFSET_S8 0x28
43
#define OFFSET_GP 0x2c
46
# define OFFSET_IPL 0x30
48
# define OFFSET_TLS 0x30
50
# define OFFSET_F20 0x34
51
# define OFFSET_F21 0x38
52
# define OFFSET_F22 0x3c
53
# define OFFSET_F23 0x40
54
# define OFFSET_F24 0x44
55
# define OFFSET_F25 0x48
56
# define OFFSET_F26 0x4c
57
# define OFFSET_F27 0x50
58
# define OFFSET_F28 0x54
59
# define OFFSET_F29 0x58
60
# define OFFSET_F30 0x5c
64
#define EOFFSET_AT 0x0
65
#define EOFFSET_V0 0x4
66
#define EOFFSET_V1 0x8
67
#define EOFFSET_A0 0xc
68
#define EOFFSET_A1 0x10
69
#define EOFFSET_A2 0x14
70
#define EOFFSET_A3 0x18
71
#define EOFFSET_T0 0x1c
72
#define EOFFSET_T1 0x20
73
#define EOFFSET_T2 0x24
74
#define EOFFSET_T3 0x28
75
#define EOFFSET_T4 0x2c
76
#define EOFFSET_T5 0x30
77
#define EOFFSET_T6 0x34
78
#define EOFFSET_T7 0x38
79
#define EOFFSET_T8 0x3c
80
#define EOFFSET_T9 0x40
81
#define EOFFSET_GP 0x44
82
#define EOFFSET_SP 0x48
83
#define EOFFSET_RA 0x4c
84
#define EOFFSET_LO 0x50
85
#define EOFFSET_HI 0x54
86
#define EOFFSET_STATUS 0x58
87
#define EOFFSET_EPC 0x5c
88
#define EOFFSET_K1 0x60
89
#define REGISTER_SPACE 104 /* respect stack alignment */
93
#include <arch/asm/regname.h>
95
# ctx: address of the structure with saved context
96
.macro CONTEXT_SAVE_ARCH_CORE ctx:req
97
sw $s0,OFFSET_S0(\ctx)
98
sw $s1,OFFSET_S1(\ctx)
99
sw $s2,OFFSET_S2(\ctx)
100
sw $s3,OFFSET_S3(\ctx)
101
sw $s4,OFFSET_S4(\ctx)
102
sw $s5,OFFSET_S5(\ctx)
103
sw $s6,OFFSET_S6(\ctx)
104
sw $s7,OFFSET_S7(\ctx)
105
sw $s8,OFFSET_S8(\ctx)
106
sw $gp,OFFSET_GP(\ctx)
109
sw $k1,OFFSET_TLS(\ctx)
113
sw $t0, OFFSET_F20(\ctx)
116
sw $t0, OFFSET_F21(\ctx)
119
sw $t0, OFFSET_F22(\ctx)
122
sw $t0, OFFSET_F23(\ctx)
125
sw $t0, OFFSET_F24(\ctx)
128
sw $t0, OFFSET_F25(\ctx)
131
sw $t0, OFFSET_F26(\ctx)
134
sw $t0, OFFSET_F27(\ctx)
137
sw $t0, OFFSET_F28(\ctx)
140
sw $t0, OFFSET_F29(\ctx)
143
sw $t0, OFFSET_F30(\ctx)
144
#endif /* CONFIG_FPU */
147
sw $ra,OFFSET_PC(\ctx)
148
sw $sp,OFFSET_SP(\ctx)
151
# ctx: address of the structure with saved context
152
.macro CONTEXT_RESTORE_ARCH_CORE ctx:req
153
lw $s0,OFFSET_S0(\ctx)
154
lw $s1,OFFSET_S1(\ctx)
155
lw $s2,OFFSET_S2(\ctx)
156
lw $s3,OFFSET_S3(\ctx)
157
lw $s4,OFFSET_S4(\ctx)
158
lw $s5,OFFSET_S5(\ctx)
159
lw $s6,OFFSET_S6(\ctx)
160
lw $s7,OFFSET_S7(\ctx)
161
lw $s8,OFFSET_S8(\ctx)
162
lw $gp,OFFSET_GP(\ctx)
164
lw $k1,OFFSET_TLS(\ctx)
167
lw $t0, OFFSET_F20(\ctx)
170
lw $t0, OFFSET_F21(\ctx)
173
lw $t0, OFFSET_F22(\ctx)
176
lw $t0, OFFSET_F23(\ctx)
179
lw $t0, OFFSET_F24(\ctx)
182
lw $t0, OFFSET_F25(\ctx)
185
lw $t0, OFFSET_F26(\ctx)
188
lw $t0, OFFSET_F27(\ctx)
191
lw $t0, OFFSET_F28(\ctx)
194
lw $t0, OFFSET_F29(\ctx)
197
lw $t0, OFFSET_F30(\ctx)
199
#endif /* CONFIG_FPU */
202
lw $ra,OFFSET_PC(\ctx)
203
lw $sp,OFFSET_SP(\ctx)