Mercurial > ecos
annotate packages/hal/powerpc/arch/current/src/context.S @ 3292:7f8e529b4d82 default tip
Fix FREESCALE_EDMA_NBYTES_MLOFFYES_MLOFF() so it works with negative offsets.
| author | vae |
|---|---|
| date | Wed, 29 Apr 2015 23:31:48 +0000 |
| parents | 842a82a508f3 |
| children |
| rev | line source |
|---|---|
| 0 | 1 ##============================================================================= |
| 2 ## | |
| 3 ## context.S | |
| 4 ## | |
| 5 ## PowerPC context switch code | |
| 6 ## | |
| 7 ##============================================================================= | |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
8 ## ####ECOSGPLCOPYRIGHTBEGIN#### |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
9 ## ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
10 ## This file is part of eCos, the Embedded Configurable Operating System. |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
11 ## Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
12 ## |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
13 ## eCos is free software; you can redistribute it and/or modify it under |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
14 ## the terms of the GNU General Public License as published by the Free |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
15 ## Software Foundation; either version 2 or (at your option) any later |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
16 ## version. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
17 ## |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
18 ## eCos is distributed in the hope that it will be useful, but WITHOUT |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
19 ## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
20 ## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
21 ## for more details. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
22 ## |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
23 ## You should have received a copy of the GNU General Public License |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
24 ## along with eCos; if not, write to the Free Software Foundation, Inc., |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
25 ## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
26 ## |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
27 ## As a special exception, if other files instantiate templates or use |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
28 ## macros or inline functions from this file, or you compile this file |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
29 ## and link it with other works to produce a work based on this file, |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
30 ## this file does not by itself cause the resulting work to be covered by |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
31 ## the GNU General Public License. However the source code for this file |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
32 ## must still be made available in accordance with section (3) of the GNU |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
33 ## General Public License v2. |
|
210
d2c90368aeef
Merge from eCos master repository on 2002-05-23-21:39:14-BST
jlarmour
parents:
208
diff
changeset
|
34 ## |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
35 ## This exception does not invalidate any other reasons why a work based |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
36 ## on this file might be covered by the GNU General Public License. |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
37 ## ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
210
diff
changeset
|
38 ## ####ECOSGPLCOPYRIGHTEND#### |
| 0 | 39 ##============================================================================= |
| 40 #######DESCRIPTIONBEGIN#### | |
| 41 ## | |
| 42 ## Author(s): nickg | |
| 43 ## Contributors: nickg | |
| 44 ## Date: 1998-04-27 | |
| 45 ## Purpose: PowerPC 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 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
56 #include <cyg/hal/arch.inc> |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
57 #include <cyg/hal/ppc_offsets.inc> |
| 0 | 58 |
| 59 #------------------------------------------------------------------------------ | |
| 60 # Configure to use either a minimal or maximal thread state | |
| 61 | |
| 62 #ifdef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM | |
| 63 | |
| 64 #define MIN_SAVE_REG 13 | |
| 65 #define MAX_SAVE_REG 31 | |
| 66 | |
| 67 .macro save_special | |
| 68 .endm | |
| 69 | |
| 70 .macro load_special | |
| 71 .endm | |
| 72 #else | |
| 73 | |
| 74 #define MIN_SAVE_REG 6 | |
| 75 #define MAX_SAVE_REG 31 | |
| 76 | |
| 77 .macro save_special | |
| 78 mfxer r6 | |
| 79 mfctr r7 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
80 stw r6,CYGARC_PPCREG_XER(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
81 stw r7,CYGARC_PPCREG_CTR(sp) |
| 0 | 82 .endm |
| 83 | |
| 84 .macro load_special | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
85 lwz r6,CYGARC_PPCREG_XER(sp) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
86 lwz r7,CYGARC_PPCREG_CTR(sp) |
| 0 | 87 mtxer r6 |
| 88 mtctr r7 | |
| 89 .endm | |
| 90 | |
| 91 #endif | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
92 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
93 #ifdef CYGHWR_HAL_POWERPC_FPU |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
94 #ifdef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
95 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
96 #define MIN_CONTEXT_SAVE_FREG 14 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
97 #define MAX_CONTEXT_SAVE_FREG 31 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
98 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
99 #else |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
100 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
101 #define MIN_CONTEXT_SAVE_FREG 0 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
102 #define MAX_CONTEXT_SAVE_FREG 31 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
103 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
104 #endif |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
105 #endif |
| 0 | 106 |
| 107 #------------------------------------------------------------------------------ | |
| 108 # hal_thread_switch_context | |
| 109 # Switch thread contexts | |
| 110 # R3 = address of sp of next thread to execute | |
| 111 # R4 = address of sp save location of current thread | |
| 112 | |
| 113 | |
| 114 FUNC_START(hal_thread_switch_context) | |
| 115 mr r5,sp # R5 = saved stack pointer | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
116 subi sp,sp,CYGARC_PPC_CONTEXT_SIZE # space for state |
| 0 | 117 |
| 118 # Save registers MIN..MAX | |
| 119 .set _reg,MIN_SAVE_REG | |
| 120 .rept MAX_SAVE_REG+1-MIN_SAVE_REG | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
121 stw _reg,(CYGARC_PPCREG_REGS+_reg*4)(sp) |
| 0 | 122 .set _reg,_reg+1 |
| 123 .endr | |
| 124 | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
125 #ifdef CYGHWR_HAL_POWERPC_FPU |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
126 # Save floating point MIN..MAX |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
127 .set _freg, MIN_CONTEXT_SAVE_FREG |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
128 .rept MAX_CONTEXT_SAVE_FREG+1-MIN_CONTEXT_SAVE_FREG |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
129 stfd _freg,(CYGARC_PPCREG_FREGS+_freg*8)(sp) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
130 .set _freg, _freg+1 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
131 .endr |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
132 #endif |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
133 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
134 stw r0,CYGARC_PPCREG_REGS+0*4(sp) # R0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
135 stw r5,CYGARC_PPCREG_REGS+1*4(sp) # R5 = real SP, save in R1 slot |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
136 stw r2,CYGARC_PPCREG_REGS+2*4(sp) # R2 = TOC |
| 0 | 137 |
| 138 # CR cannot be treated as a special register since GCC will only | |
| 139 # do partial restore of CR at function exit, depending on which | |
| 140 # of CR2, CR3, and CR4 have been used in the given function. | |
| 141 mfcr r5 # save CR. | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
142 stw r5,CYGARC_PPCREG_CR(sp) |
| 2 | 143 |
| 144 #ifdef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT | |
| 145 # Make the thread context look like an exception context if thread- | |
| 146 # aware debugging is required. This state does not need restoring. | |
| 147 mflr r5 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
148 stw r5,CYGARC_PPCREG_PC(sp) # pc of caller |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
149 #endif |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
150 |
| 2 | 151 mfmsr r5 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
152 stw r5,CYGARC_PPCREG_MSR(sp)# msr (or PS) |
| 2 | 153 |
| 0 | 154 save_special # save special regs |
| 155 | |
| 156 mflr r5 # save LR == return link for this fn | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
157 stw r5,CYGARC_PPCREG_LR(sp) |
| 0 | 158 |
| 159 stw sp,0(r4) # save SP into save location | |
| 160 | |
| 161 # Now load the destination thread by dropping through | |
| 162 # to hal_thread_load_context | |
| 163 | |
| 164 #------------------------------------------------------------------------------ | |
| 165 # hal_thread_load_context | |
| 166 # Load thread context | |
| 167 # R3 = address of sp of next thread to execute | |
| 168 # Note that this function is also the second half of hal_thread_switch_context | |
| 169 # and is simply dropped into from it. | |
| 170 | |
| 171 FUNC_START(hal_thread_load_context) | |
| 172 | |
| 173 lwz sp,0(r3) # load state directly into SP | |
| 174 | |
| 175 load_special # load special registers | |
| 176 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
177 lwz r5,CYGARC_PPCREG_CR(sp) # restore CR |
| 0 | 178 mtcr r5 |
| 179 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
180 lwz r5,CYGARC_PPCREG_LR(sp) # get LR as set as return link |
| 0 | 181 mtlr r5 |
| 182 | |
| 183 # Load registers MIN..MAX | |
| 184 .set _reg,MIN_SAVE_REG | |
| 185 .rept MAX_SAVE_REG+1-MIN_SAVE_REG | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
186 lwz _reg,(CYGARC_PPCREG_REGS+_reg*4)(sp) |
| 0 | 187 .set _reg,_reg+1 |
| 188 .endr | |
| 189 | |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
190 #ifdef CYGHWR_HAL_POWERPC_FPU |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
191 # Load floating registers MIN..MAX |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
192 .set _freg, MIN_CONTEXT_SAVE_FREG |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
193 .rept MAX_CONTEXT_SAVE_FREG+1-MIN_CONTEXT_SAVE_FREG |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
194 lfd _freg,(CYGARC_PPCREG_FREGS+_freg*8)(sp) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
195 .set _freg,_freg+1 |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
196 .endr |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
197 #endif |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
198 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
199 lwz r3,CYGARC_PPCREG_MSR(sp) # merge interrupt state |
|
2883
842a82a508f3
Add Book E architecture support. See the ChangeLog for full details.
nickg
parents:
2729
diff
changeset
|
200 hal_cpu_int_merge r3,r2 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
201 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
202 lwz r0,CYGARC_PPCREG_REGS+0*4(sp) # R0 |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
203 lwz r2,CYGARC_PPCREG_REGS+2*4(sp) # R2 = TOC |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
204 lwz r3,CYGARC_PPCREG_REGS+3*4(sp) # load r3 |
| 0 | 205 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
206 lwz sp,CYGARC_PPCREG_REGS+1*4(sp) # finally restore true SP |
| 0 | 207 |
| 208 blr # jump to LR | |
| 209 | |
| 210 #------------------------------------------------------------------------------ | |
| 211 # HAL longjmp, setjmp implementations | |
| 212 # hal_setjmp saves only to callee save registers 13-31, r1[sp],r2, cr[2-4] | |
| 213 # and lr into buffer supplied in r3[arg0] | |
| 214 | |
| 215 FUNC_START(hal_setjmp) | |
| 216 mfcr r5 | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
217 stw r5, CYGARC_JMPBUF_CR(r3) |
| 0 | 218 mflr r5 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
219 stw r5, CYGARC_JMPBUF_LR(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
220 stw r31,CYGARC_JMPBUF_R31(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
221 stw r30,CYGARC_JMPBUF_R30(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
222 stw r29,CYGARC_JMPBUF_R29(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
223 stw r28,CYGARC_JMPBUF_R28(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
224 stw r27,CYGARC_JMPBUF_R27(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
225 stw r26,CYGARC_JMPBUF_R26(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
226 stw r25,CYGARC_JMPBUF_R25(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
227 stw r24,CYGARC_JMPBUF_R24(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
228 stw r23,CYGARC_JMPBUF_R23(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
229 stw r22,CYGARC_JMPBUF_R22(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
230 stw r21,CYGARC_JMPBUF_R21(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
231 stw r20,CYGARC_JMPBUF_R20(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
232 stw r19,CYGARC_JMPBUF_R19(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
233 stw r18,CYGARC_JMPBUF_R18(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
234 stw r17,CYGARC_JMPBUF_R17(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
235 stw r16,CYGARC_JMPBUF_R16(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
236 stw r15,CYGARC_JMPBUF_R15(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
237 stw r14,CYGARC_JMPBUF_R14(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
238 stw r13,CYGARC_JMPBUF_R13(r3) |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
239 #ifdef CYGHWR_HAL_POWERPC_FPU |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
240 stfd f31,CYGARC_JMPBUF_F31(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
241 stfd f30,CYGARC_JMPBUF_F30(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
242 stfd f29,CYGARC_JMPBUF_F29(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
243 stfd f28,CYGARC_JMPBUF_F28(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
244 stfd f27,CYGARC_JMPBUF_F27(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
245 stfd f26,CYGARC_JMPBUF_F26(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
246 stfd f25,CYGARC_JMPBUF_F25(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
247 stfd f24,CYGARC_JMPBUF_F24(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
248 stfd f23,CYGARC_JMPBUF_F23(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
249 stfd f22,CYGARC_JMPBUF_F22(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
250 stfd f21,CYGARC_JMPBUF_F21(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
251 stfd f20,CYGARC_JMPBUF_F20(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
252 stfd f19,CYGARC_JMPBUF_F19(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
253 stfd f18,CYGARC_JMPBUF_F18(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
254 stfd f17,CYGARC_JMPBUF_F17(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
255 stfd f16,CYGARC_JMPBUF_F16(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
256 stfd f15,CYGARC_JMPBUF_F15(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
257 stfd f14,CYGARC_JMPBUF_F14(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
258 #endif |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
259 stw r2, CYGARC_JMPBUF_R2(r3) # TOC, 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
|
260 stw sp, CYGARC_JMPBUF_SP(r3) |
| 0 | 261 li r3,0 # return 0 |
| 262 blr | |
| 263 | |
| 264 # hal_longjmp loads state from r3[arg0] and returns | |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
265 # to the setjmp caller with r4[arg1] as return value |
| 2 | 266 |
| 0 | 267 FUNC_START(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
|
268 lwz r5,CYGARC_JMPBUF_CR(r3) |
| 0 | 269 mtcr r5 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
270 lwz r5,CYGARC_JMPBUF_LR(r3) |
| 0 | 271 mtlr r5 |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
272 lwz r31,CYGARC_JMPBUF_R31(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
273 lwz r30,CYGARC_JMPBUF_R30(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
274 lwz r29,CYGARC_JMPBUF_R29(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
275 lwz r28,CYGARC_JMPBUF_R28(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
276 lwz r27,CYGARC_JMPBUF_R27(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
277 lwz r26,CYGARC_JMPBUF_R26(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
278 lwz r25,CYGARC_JMPBUF_R25(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
279 lwz r24,CYGARC_JMPBUF_R24(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
280 lwz r23,CYGARC_JMPBUF_R23(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
281 lwz r22,CYGARC_JMPBUF_R22(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
282 lwz r21,CYGARC_JMPBUF_R21(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
283 lwz r20,CYGARC_JMPBUF_R20(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
284 lwz r19,CYGARC_JMPBUF_R19(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
285 lwz r18,CYGARC_JMPBUF_R18(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
286 lwz r17,CYGARC_JMPBUF_R17(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
287 lwz r16,CYGARC_JMPBUF_R16(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
288 lwz r15,CYGARC_JMPBUF_R15(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
289 lwz r14,CYGARC_JMPBUF_R14(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
290 lwz r13,CYGARC_JMPBUF_R13(r3) |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
291 #ifdef CYGHWR_HAL_POWERPC_FPU |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
292 lfd f31,CYGARC_JMPBUF_F31(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
293 lfd f30,CYGARC_JMPBUF_F30(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
294 lfd f29,CYGARC_JMPBUF_F29(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
295 lfd f28,CYGARC_JMPBUF_F28(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
296 lfd f27,CYGARC_JMPBUF_F27(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
297 lfd f26,CYGARC_JMPBUF_F26(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
298 lfd f25,CYGARC_JMPBUF_F25(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
299 lfd f24,CYGARC_JMPBUF_F24(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
300 lfd f23,CYGARC_JMPBUF_F23(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
301 lfd f22,CYGARC_JMPBUF_F22(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
302 lfd f21,CYGARC_JMPBUF_F21(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
303 lfd f20,CYGARC_JMPBUF_F20(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
304 lfd f19,CYGARC_JMPBUF_F19(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
305 lfd f18,CYGARC_JMPBUF_F18(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
306 lfd f17,CYGARC_JMPBUF_F17(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
307 lfd f16,CYGARC_JMPBUF_F16(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
308 lfd f15,CYGARC_JMPBUF_F15(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
309 lfd f14,CYGARC_JMPBUF_F14(r3) |
|
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
76
diff
changeset
|
310 #endif |
|
76
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
311 lwz r2, CYGARC_JMPBUF_R2(r3) |
|
435cced73e2f
eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents:
66
diff
changeset
|
312 lwz sp, CYGARC_JMPBUF_SP(r3) |
| 0 | 313 mr r3,r4 # return r4[arg1] |
| 314 blr | |
| 315 | |
| 316 #------------------------------------------------------------------------------ | |
| 317 # end of context.S |
