Mercurial > ecos
annotate packages/hal/mips/arch/current/src/context.S @ 210:d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
| author | jlarmour |
|---|---|
| date | Thu, 23 May 2002 22:59:51 +0000 |
| parents | e0c0827131d1 |
| children | 74dbf4c3f2e1 |
| rev | line source |
|---|---|
| 0 | 1 ##=============================================================================## |
| 2 ## context.S | |
| 3 ## | |
| 4 ## MIPS context switch code | |
| 5 ## | |
| 6 ##============================================================================= | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
112
diff
changeset
|
7 #####ECOSGPLCOPYRIGHTBEGIN#### |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
8 ## ------------------------------------------- |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
9 ## This file is part of eCos, the Embedded Configurable Operating System. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
10 ## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
11 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
12 ## eCos is free software; you can redistribute it and/or modify it under |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
13 ## the terms of the GNU General Public License as published by the Free |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
14 ## Software Foundation; either version 2 or (at your option) any later version. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
15 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
16 ## eCos is distributed in the hope that it will be useful, but WITHOUT ANY |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
17 ## WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
18 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
19 ## for more details. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
20 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
21 ## You should have received a copy of the GNU General Public License along |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
22 ## with eCos; if not, write to the Free Software Foundation, Inc., |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
23 ## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
24 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
25 ## As a special exception, if other files instantiate templates or use macros |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
26 ## or inline functions from this file, or you compile this file and link it |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
27 ## with other works to produce a work based on this file, this file does not |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
28 ## by itself cause the resulting work to be covered by the GNU General Public |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
29 ## License. However the source code for this file must still be made available |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
30 ## in accordance with section (3) of the GNU General Public License. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
31 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
32 ## This exception does not invalidate any other reasons why a work based on |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
33 ## this file might be covered by the GNU General Public License. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
34 ## |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
35 ## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc. |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
36 ## at http://sources.redhat.com/ecos/ecos-license/ |
|
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
37 ## ------------------------------------------- |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
112
diff
changeset
|
38 #####ECOSGPLCOPYRIGHTEND#### |
| 0 | 39 ##============================================================================= |
| 40 #######DESCRIPTIONBEGIN#### | |
| 41 ## | |
| 42 ## Author(s): nickg | |
| 43 ## Contributors: nickg | |
| 44 ## Date: 1998-04-27 | |
| 45 ## Purpose: MIPS context switch code | |
| 46 ## Description: This file contains implementations of the thread context | |
| 47 ## switch routines. It also contains the longjmp() and setjmp() | |
| 48 ## routines. | |
| 49 ## | |
| 50 ######DESCRIPTIONEND#### | |
| 51 ## | |
| 52 ##============================================================================= | |
| 53 | |
| 54 #include <pkgconf/hal.h> | |
| 55 | |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
56 #include <cyg/hal/arch.inc> |
| 0 | 57 |
|
112
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
76
diff
changeset
|
58 #ifdef at |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
76
diff
changeset
|
59 #undef at |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
76
diff
changeset
|
60 #endif |
|
02ea4320376c
Merge from eCos master repository on 2000-07-21-21:01:39-BST
jlarmour
parents:
76
diff
changeset
|
61 |
| 0 | 62 #------------------------------------------------------------------------------ |
| 63 # hal_thread_switch_context | |
| 64 # Switch thread contexts | |
| 65 # A0 = address of sp of next thread to execute | |
| 66 # A1 = address of sp save location of current thread | |
| 67 | |
| 68 .global hal_thread_switch_context | |
| 69 hal_thread_switch_context: | |
| 70 | |
| 71 addi sp,sp,-mipsreg_size # space for registers | |
| 72 | |
| 73 # store GPRs | |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
6
diff
changeset
|
74 .set noat |
| 0 | 75 #ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
76 sgpr 0,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
77 sgpr 1,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
78 sgpr 2,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
79 sgpr 3,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
80 sgpr 4,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
81 sgpr 5,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
82 sgpr 6,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
83 sgpr 7,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
84 sgpr 8,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
85 sgpr 9,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
86 sgpr 10,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
87 sgpr 11,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
88 sgpr 12,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
89 sgpr 13,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
90 sgpr 14,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
91 sgpr 15,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
92 sgpr 24,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
93 sgpr 25,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
94 sgpr 28,sp # == GP |
| 0 | 95 #endif |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
96 sgpr 16,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
97 sgpr 17,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
98 sgpr 18,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
99 sgpr 19,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
100 sgpr 20,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
101 sgpr 21,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
102 sgpr 22,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
103 sgpr 23,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
104 # sgpr 26,sp # == K0 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
105 # sgpr 27,sp # == K1 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
106 # sgpr 29,sp # == SP |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
107 sgpr 30,sp # == FP |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
108 sgpr 31,sp # == RA |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
109 spc $31,sp # == PC (to help with debugging) |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
6
diff
changeset
|
110 .set at |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
6
diff
changeset
|
111 |
| 0 | 112 #ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM |
| 113 | |
| 114 mflo t0 # save LO and HI regs | |
| 115 mfhi t1 | |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
116 slo t0,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
117 shi t1,sp |
| 0 | 118 |
| 119 #endif | |
| 120 | |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
121 hal_fpu_save_callee sp |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
122 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
123 #ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
124 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
125 hal_fpu_save_caller sp |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
126 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
127 #endif |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
128 |
| 0 | 129 addi t0,sp,mipsreg_size # save SP in reg dump |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
130 ssp t0,sp |
| 0 | 131 |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
132 mfc0 t1,status # Save status register |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
133 sw t1,mipsreg_sr(sp) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
134 |
| 0 | 135 sw sp,0(a1) # save sp in save loc |
| 136 | |
| 137 # Now load the destination thread by dropping through | |
| 138 # to hal_thread_load_context | |
| 139 | |
| 140 #------------------------------------------------------------------------------ | |
| 141 # hal_thread_load_context | |
| 142 # Load thread context | |
| 143 # A0 = address of sp of next thread to execute | |
| 144 # Note that this function is also the second half of hal_thread_switch_context | |
| 145 # and is simply dropped into from it. | |
| 146 | |
| 147 .global hal_thread_load_context | |
| 148 hal_thread_load_context: | |
| 149 | |
| 150 lw sp,0(a0) # load new SP directly | |
| 151 | |
| 152 #ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM | |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
153 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
154 hal_fpu_load_caller sp |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
155 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
156 #endif |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
157 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
158 hal_fpu_load_callee sp |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
159 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
160 #ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM |
| 0 | 161 |
| 162 lw t0,mipsreg_hi(sp) # load HI and LO regs | |
| 163 lw t1,mipsreg_lo(sp) | |
| 164 mthi t0 | |
| 165 mtlo t1 | |
| 166 | |
| 167 #endif | |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
168 |
| 0 | 169 # load GPRs |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
6
diff
changeset
|
170 .set noat |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
171 # lgpr 0,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
172 lgpr 4,sp # A0, must load for thread startup |
| 0 | 173 #ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
174 lgpr 1,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
175 lgpr 2,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
176 lgpr 3,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
177 lgpr 5,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
178 lgpr 6,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
179 lgpr 7,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
180 lgpr 8,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
181 lgpr 9,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
182 lgpr 10,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
183 lgpr 11,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
184 lgpr 12,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
185 lgpr 13,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
186 lgpr 14,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
187 lgpr 15,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
188 lgpr 24,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
189 lgpr 25,sp |
| 0 | 190 #endif |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
191 lgpr 16,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
192 lgpr 17,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
193 lgpr 18,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
194 lgpr 19,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
195 lgpr 20,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
196 lgpr 21,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
197 lgpr 22,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
198 lgpr 23,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
199 # lgpr 26,sp # == K0 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
200 # lgpr 27,sp # == K1 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
201 # lgpr 28,sp # == GP |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
202 # lgpr 29,sp # == SP |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
203 lgpr 30,sp # == FP |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
204 lgpr 31,sp # == RA |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
6
diff
changeset
|
205 .set at |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
6
diff
changeset
|
206 |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
207 lw a2,mipsreg_sr(sp) # A2 = saved SR |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
208 lsp sp,sp # SP = saved SP |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
209 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
210 hal_cpu_int_merge a2 # Merge with current SR |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
211 |
| 0 | 212 jr ra # return via ra |
| 213 nop # delay slot - must be nop | |
| 214 | |
| 215 #------------------------------------------------------------------------------ | |
| 216 # HAL longjmp, setjmp implementations | |
| 2 | 217 # hal_setjmp saves only to callee save registers 16-23, 28, 30, 31[ra], 29[sp] |
| 218 # into buffer supplied in a0[arg0] | |
| 219 # Note: These definitions are repeated in hal_arch.h. If changes are required | |
| 220 # remember to update both sets. | |
| 221 | |
| 222 #define CYGARC_JMP_BUF_SP 0 | |
| 223 #define CYGARC_JMP_BUF_R16 1 | |
| 224 #define CYGARC_JMP_BUF_R17 2 | |
| 225 #define CYGARC_JMP_BUF_R18 3 | |
| 226 #define CYGARC_JMP_BUF_R19 4 | |
| 227 #define CYGARC_JMP_BUF_R20 5 | |
| 228 #define CYGARC_JMP_BUF_R21 6 | |
| 229 #define CYGARC_JMP_BUF_R22 7 | |
| 230 #define CYGARC_JMP_BUF_R23 8 | |
| 231 #define CYGARC_JMP_BUF_R28 9 | |
| 232 #define CYGARC_JMP_BUF_R30 10 | |
| 233 #define CYGARC_JMP_BUF_R31 11 | |
| 234 | |
| 235 #define CYGARC_JMP_BUF_SIZE 12 | |
| 0 | 236 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
237 // FIXME: The follwing restricts us to using only 32 bit registers |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
238 // in jump buffers. If/when we move to a full 64 bit architecture, |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
239 // this will need to change, as will the instructions that we use to |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
240 // save and restore them. |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
241 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
242 #define jmpbuf_regsize 4 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
243 |
| 0 | 244 .globl hal_setjmp |
| 245 .ent hal_setjmp | |
| 246 hal_setjmp: | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
247 sw $31,CYGARC_JMP_BUF_R31*jmpbuf_regsize(a0) # ra (link) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
248 sw $30,CYGARC_JMP_BUF_R30*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
249 sw $28,CYGARC_JMP_BUF_R28*jmpbuf_regsize(a0) # gp, optimize out? |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
250 sw $23,CYGARC_JMP_BUF_R23*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
251 sw $22,CYGARC_JMP_BUF_R22*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
252 sw $21,CYGARC_JMP_BUF_R21*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
253 sw $20,CYGARC_JMP_BUF_R20*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
254 sw $19,CYGARC_JMP_BUF_R19*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
255 sw $18,CYGARC_JMP_BUF_R18*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
256 sw $17,CYGARC_JMP_BUF_R17*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
257 sw $16,CYGARC_JMP_BUF_R16*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
258 sw sp,CYGARC_JMP_BUF_SP*jmpbuf_regsize(a0) # $29 |
| 0 | 259 li v0,0 |
| 260 jr ra | |
| 261 nop # delay slot | |
| 262 .end hal_setjmp | |
| 263 | |
| 264 .globl hal_longjmp | |
| 265 .ent hal_longjmp | |
| 266 hal_longjmp: | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
267 lw $31,CYGARC_JMP_BUF_R31*jmpbuf_regsize(a0) # ra (link) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
268 lw $30,CYGARC_JMP_BUF_R30*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
269 lw $28,CYGARC_JMP_BUF_R28*jmpbuf_regsize(a0) # gp, optimize out? |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
270 lw $23,CYGARC_JMP_BUF_R23*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
271 lw $22,CYGARC_JMP_BUF_R22*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
272 lw $21,CYGARC_JMP_BUF_R21*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
273 lw $20,CYGARC_JMP_BUF_R20*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
274 lw $19,CYGARC_JMP_BUF_R19*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
275 lw $18,CYGARC_JMP_BUF_R18*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
276 lw $17,CYGARC_JMP_BUF_R17*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
277 lw $16,CYGARC_JMP_BUF_R16*jmpbuf_regsize(a0) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
278 lw sp,CYGARC_JMP_BUF_SP*jmpbuf_regsize(a0) # $29 |
| 0 | 279 move v0,a1 |
| 280 jr ra | |
| 281 nop # delay slot | |
| 282 .end hal_longjmp | |
| 283 | |
| 284 | |
| 285 #------------------------------------------------------------------------------ | |
| 286 # end of context.S |
