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