Mercurial > flash_v2
annotate packages/hal/mips/arch/current/src/context.S @ 66:bf00f99aec69 ecos-sw-2000-02-02
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
| author | jlarmour |
|---|---|
| date | Wed, 02 Feb 2000 19:57:02 +0000 |
| parents | c38311975d4f |
| children | 435cced73e2f |
| rev | line source |
|---|---|
| 0 | 1 ##=============================================================================## |
| 2 ## context.S | |
| 3 ## | |
| 4 ## MIPS context switch code | |
| 5 ## | |
| 6 ##============================================================================= | |
| 7 #####COPYRIGHTBEGIN#### | |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
8 # |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
9 # ------------------------------------------- |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
10 # The contents of this file are subject to the Red Hat eCos Public License |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
11 # Version 1.1 (the "License"); you may not use this file except in |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
12 # compliance with the License. You may obtain a copy of the License at |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
13 # http://www.redhat.com/ |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
14 # |
|
66
bf00f99aec69
Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents:
64
diff
changeset
|
15 # Software distributed under the License is distributed on an "AS IS" |
|
64
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
16 # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
17 # License for the specific language governing rights and limitations under |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
18 # the License. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
19 # |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
20 # The Original Code is eCos - Embedded Configurable Operating System, |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
21 # released September 30, 1998. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
22 # |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
23 # The Initial Developer of the Original Code is Red Hat. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
24 # Portions created by Red Hat are |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
25 # Copyright (C) 1998, 1999, 2000 Red Hat, Inc. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
26 # All Rights Reserved. |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
27 # ------------------------------------------- |
|
c38311975d4f
Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents:
62
diff
changeset
|
28 # |
| 0 | 29 #####COPYRIGHTEND#### |
| 30 ##============================================================================= | |
| 31 #######DESCRIPTIONBEGIN#### | |
| 32 ## | |
| 33 ## Author(s): nickg | |
| 34 ## Contributors: nickg | |
| 35 ## Date: 1998-04-27 | |
| 36 ## Purpose: MIPS context switch code | |
| 37 ## Description: This file contains implementations of the thread context | |
| 38 ## switch routines. It also contains the longjmp() and setjmp() | |
| 39 ## routines. | |
| 40 ## | |
| 41 ######DESCRIPTIONEND#### | |
| 42 ## | |
| 43 ##============================================================================= | |
| 44 | |
| 45 #include <pkgconf/hal.h> | |
| 46 | |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
47 #include <cyg/hal/arch.inc> |
| 0 | 48 |
| 49 #------------------------------------------------------------------------------ | |
| 50 # hal_thread_switch_context | |
| 51 # Switch thread contexts | |
| 52 # A0 = address of sp of next thread to execute | |
| 53 # A1 = address of sp save location of current thread | |
| 54 | |
| 55 .global hal_thread_switch_context | |
| 56 hal_thread_switch_context: | |
| 57 | |
| 58 addi sp,sp,-mipsreg_size # space for registers | |
| 59 | |
| 60 # store GPRs | |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
6
diff
changeset
|
61 .set noat |
| 0 | 62 #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
|
63 sgpr 0,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
64 sgpr 1,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
65 sgpr 2,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
66 sgpr 3,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
67 sgpr 4,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
68 sgpr 5,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
69 sgpr 6,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
70 sgpr 7,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
71 sgpr 8,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
72 sgpr 9,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
73 sgpr 10,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
74 sgpr 11,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
75 sgpr 12,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
76 sgpr 13,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
77 sgpr 14,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
78 sgpr 15,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
79 sgpr 24,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
80 sgpr 25,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
81 sgpr 28,sp # == GP |
| 0 | 82 #endif |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
83 sgpr 16,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
84 sgpr 17,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
85 sgpr 18,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
86 sgpr 19,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
87 sgpr 20,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
88 sgpr 21,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
89 sgpr 22,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
90 sgpr 23,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
91 # sgpr 26,sp # == K0 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
92 # sgpr 27,sp # == K1 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
93 # sgpr 29,sp # == SP |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
94 sgpr 30,sp # == FP |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
95 sgpr 31,sp # == RA |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
96 sgpr 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
|
97 .set at |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
6
diff
changeset
|
98 |
| 0 | 99 #ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM |
| 100 | |
| 101 mflo t0 # save LO and HI regs | |
| 102 mfhi t1 | |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
103 slo t0,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
104 shi t1,sp |
| 0 | 105 |
| 106 #endif | |
| 107 | |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
108 hal_fpu_save_callee sp |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
109 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
110 #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
|
111 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
112 hal_fpu_save_caller sp |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
113 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
114 #endif |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
115 |
| 0 | 116 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
|
117 ssp t0,sp |
| 0 | 118 |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
119 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
|
120 sw t1,mipsreg_sr(sp) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
121 |
| 0 | 122 sw sp,0(a1) # save sp in save loc |
| 123 | |
| 124 # Now load the destination thread by dropping through | |
| 125 # to hal_thread_load_context | |
| 126 | |
| 127 #------------------------------------------------------------------------------ | |
| 128 # hal_thread_load_context | |
| 129 # Load thread context | |
| 130 # A0 = address of sp of next thread to execute | |
| 131 # Note that this function is also the second half of hal_thread_switch_context | |
| 132 # and is simply dropped into from it. | |
| 133 | |
| 134 .global hal_thread_load_context | |
| 135 hal_thread_load_context: | |
| 136 | |
| 137 lw sp,0(a0) # load new SP directly | |
| 138 | |
| 139 #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
|
140 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
141 hal_fpu_load_caller sp |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
142 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
143 #endif |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
144 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
145 hal_fpu_load_callee sp |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
146 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
147 #ifndef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM |
| 0 | 148 |
| 149 lw t0,mipsreg_hi(sp) # load HI and LO regs | |
| 150 lw t1,mipsreg_lo(sp) | |
| 151 mthi t0 | |
| 152 mtlo t1 | |
| 153 | |
| 154 #endif | |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
155 |
| 0 | 156 # load GPRs |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
6
diff
changeset
|
157 .set noat |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
158 # lgpr 0,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
159 lgpr 4,sp # A0, must load for thread startup |
| 0 | 160 #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
|
161 lgpr 1,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
162 lgpr 2,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
163 lgpr 3,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
164 lgpr 5,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
165 lgpr 6,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
166 lgpr 7,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
167 lgpr 8,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
168 lgpr 9,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
169 lgpr 10,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
170 lgpr 11,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
171 lgpr 12,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
172 lgpr 13,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
173 lgpr 14,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
174 lgpr 15,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
175 lgpr 24,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
176 lgpr 25,sp |
| 0 | 177 #endif |
|
62
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
178 lgpr 16,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
179 lgpr 17,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
180 lgpr 18,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
181 lgpr 19,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
182 lgpr 20,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
183 lgpr 21,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
184 lgpr 22,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
185 lgpr 23,sp |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
186 # lgpr 26,sp # == K0 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
187 # lgpr 27,sp # == K1 |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
188 # lgpr 28,sp # == GP |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
189 # lgpr 29,sp # == SP |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
190 lgpr 30,sp # == FP |
|
7a6ac9edc838
Merge from eCos master repository on 2000-01-24-19:43:49-GMT
jlarmour
parents:
8
diff
changeset
|
191 lgpr 31,sp # == RA |
|
8
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
6
diff
changeset
|
192 .set at |
|
ece80412419a
Merge from eCos master repository on 1999-05-21-22:05:54-BST
jlarmour
parents:
6
diff
changeset
|
193 |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
194 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
|
195 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
|
196 |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
197 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
|
198 |
| 0 | 199 jr ra # return via ra |
| 200 nop # delay slot - must be nop | |
| 201 | |
| 202 #------------------------------------------------------------------------------ | |
| 203 # HAL longjmp, setjmp implementations | |
| 2 | 204 # hal_setjmp saves only to callee save registers 16-23, 28, 30, 31[ra], 29[sp] |
| 205 # into buffer supplied in a0[arg0] | |
| 206 # Note: These definitions are repeated in hal_arch.h. If changes are required | |
| 207 # remember to update both sets. | |
| 208 | |
| 209 #define CYGARC_JMP_BUF_SP 0 | |
| 210 #define CYGARC_JMP_BUF_R16 1 | |
| 211 #define CYGARC_JMP_BUF_R17 2 | |
| 212 #define CYGARC_JMP_BUF_R18 3 | |
| 213 #define CYGARC_JMP_BUF_R19 4 | |
| 214 #define CYGARC_JMP_BUF_R20 5 | |
| 215 #define CYGARC_JMP_BUF_R21 6 | |
| 216 #define CYGARC_JMP_BUF_R22 7 | |
| 217 #define CYGARC_JMP_BUF_R23 8 | |
| 218 #define CYGARC_JMP_BUF_R28 9 | |
| 219 #define CYGARC_JMP_BUF_R30 10 | |
| 220 #define CYGARC_JMP_BUF_R31 11 | |
| 221 | |
| 222 #define CYGARC_JMP_BUF_SIZE 12 | |
| 0 | 223 |
| 224 .globl hal_setjmp | |
| 225 .ent hal_setjmp | |
| 226 hal_setjmp: | |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
227 sw $31,CYGARC_JMP_BUF_R31*mips_regsize(a0) # ra (link) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
228 sw $30,CYGARC_JMP_BUF_R30*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
229 sw $28,CYGARC_JMP_BUF_R28*mips_regsize(a0) # gp, optimize out? |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
230 sw $23,CYGARC_JMP_BUF_R23*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
231 sw $22,CYGARC_JMP_BUF_R22*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
232 sw $21,CYGARC_JMP_BUF_R21*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
233 sw $20,CYGARC_JMP_BUF_R20*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
234 sw $19,CYGARC_JMP_BUF_R19*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
235 sw $18,CYGARC_JMP_BUF_R18*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
236 sw $17,CYGARC_JMP_BUF_R17*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
237 sw $16,CYGARC_JMP_BUF_R16*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
238 sw sp,CYGARC_JMP_BUF_SP*mips_regsize(a0) # $29 |
| 0 | 239 li v0,0 |
| 240 jr ra | |
| 241 nop # delay slot | |
| 242 .end hal_setjmp | |
| 243 | |
| 244 .globl hal_longjmp | |
| 245 .ent hal_longjmp | |
| 246 hal_longjmp: | |
|
6
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
247 lw $31,CYGARC_JMP_BUF_R31*mips_regsize(a0) # ra (link) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
248 lw $30,CYGARC_JMP_BUF_R30*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
249 lw $28,CYGARC_JMP_BUF_R28*mips_regsize(a0) # gp, optimize out? |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
250 lw $23,CYGARC_JMP_BUF_R23*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
251 lw $22,CYGARC_JMP_BUF_R22*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
252 lw $21,CYGARC_JMP_BUF_R21*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
253 lw $20,CYGARC_JMP_BUF_R20*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
254 lw $19,CYGARC_JMP_BUF_R19*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
255 lw $18,CYGARC_JMP_BUF_R18*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
256 lw $17,CYGARC_JMP_BUF_R17*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
257 lw $16,CYGARC_JMP_BUF_R16*mips_regsize(a0) |
|
d376b777e2ce
Merge from eCos master repository on 1999-05-14-19:27:43-BST
jlarmour
parents:
2
diff
changeset
|
258 lw sp,CYGARC_JMP_BUF_SP*mips_regsize(a0) # $29 |
| 0 | 259 move v0,a1 |
| 260 jr ra | |
| 261 nop # delay slot | |
| 262 .end hal_longjmp | |
| 263 | |
| 264 | |
| 265 #------------------------------------------------------------------------------ | |
| 266 # end of context.S |
