annotate packages/hal/powerpc/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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
1 ##=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
2 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
3 ## context.S
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
4 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
5 ## PowerPC context switch code
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
6 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
7 ##=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
8 #####COPYRIGHTBEGIN####
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
9 #
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
10 # -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
11 # 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
12 # 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: 2
diff changeset
13 # 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
14 # http://www.redhat.com/
64
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
15 #
66
bf00f99aec69 Merge from eCos master repository on 2000-02-02-19:16:44-GMT
jlarmour
parents: 64
diff changeset
16 # 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: 2
diff changeset
17 # 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: 2
diff changeset
18 # 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: 2
diff changeset
19 # the License.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
20 #
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
21 # 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: 2
diff changeset
22 # released September 30, 1998.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
23 #
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
24 # 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: 2
diff changeset
25 # Portions created by Red Hat are
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
26 # Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
27 # All Rights Reserved.
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
28 # -------------------------------------------
c38311975d4f Merge from eCos master repository on 2000-01-28-04:28:11-GMT
jlarmour
parents: 2
diff changeset
29 #
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
30 #####COPYRIGHTEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
31 ##=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
32 #######DESCRIPTIONBEGIN####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
33 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
34 ## Author(s): nickg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
35 ## Contributors: nickg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
36 ## Date: 1998-04-27
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
37 ## Purpose: PowerPC context switch code
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
38 ## Description: This file contains implementations of the thread context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
39 ## switch routines. It also contains the longjmp() and setjmp()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
40 ## routines.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
41 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
42 ######DESCRIPTIONEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
43 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
44 ##=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
45
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
46 #include <pkgconf/hal.h>
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
47
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
48 #include "cyg/hal/ppc.inc"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
50 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
51 # function declaration macro
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53 #define FUNC_START(name) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 .type name,@function; \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
55 .globl name; \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
56 name:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
58 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
59 # Configure to use either a minimal or maximal thread state
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
60
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61 #ifdef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63 #define MIN_SAVE_REG 13
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64 #define MAX_SAVE_REG 31
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66 .macro save_special
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67 .endm
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 .macro load_special
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 .endm
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
73 #define MIN_SAVE_REG 6
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
74 #define MAX_SAVE_REG 31
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76 .macro save_special
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
77 mfxer r6
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78 mfctr r7
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79 stw r6,ppcreg_xer(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80 stw r7,ppcreg_ctr(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
81 .endm
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
82
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
83 .macro load_special
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84 lwz r6,ppcreg_xer(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 lwz r7,ppcreg_ctr(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 mtxer r6
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87 mtctr r7
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88 .endm
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
89
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
90 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93 # hal_thread_switch_context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
94 # Switch thread contexts
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95 # R3 = address of sp of next thread to execute
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
96 # R4 = address of sp save location of current thread
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
99 FUNC_START(hal_thread_switch_context)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100 mr r5,sp # R5 = saved stack pointer
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101 subi sp,sp,ppcreg_context_size # space for state
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103 # Save registers MIN..MAX
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104 .set _reg,MIN_SAVE_REG
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 .rept MAX_SAVE_REG+1-MIN_SAVE_REG
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106 stw _reg,(ppcreg_regs+_reg*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
107 .set _reg,_reg+1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
108 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
110 stw r0,ppcreg_regs+0*4(sp) # R0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
111 stw r5,ppcreg_regs+1*4(sp) # R5 = real SP, save in R1 slot
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
112 stw r2,ppcreg_regs+2*4(sp) # R2 = TOC
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114 # CR cannot be treated as a special register since GCC will only
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
115 # do partial restore of CR at function exit, depending on which
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
116 # of CR2, CR3, and CR4 have been used in the given function.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
117 mfcr r5 # save CR.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
118 stw r5,ppcreg_cr(sp)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
119
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
120 #ifdef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
121 # Make the thread context look like an exception context if thread-
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
122 # aware debugging is required. This state does not need restoring.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
123 mflr r5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
124 stw r5,ppcreg_pc(sp) # pc of caller
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
125 mfmsr r5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
126 stw r5,ppcreg_msr(sp) # msr (or PS)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
127 #endif
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
128
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129 save_special # save special regs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
130
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131 mflr r5 # save LR == return link for this fn
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
132 stw r5,ppcreg_lr(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
133
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
134 stw sp,0(r4) # save SP into save location
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136 # Now load the destination thread by dropping through
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137 # to hal_thread_load_context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
138
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
139 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140 # hal_thread_load_context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141 # Load thread context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142 # R3 = address of sp of next thread to execute
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
143 # Note that this function is also the second half of hal_thread_switch_context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
144 # and is simply dropped into from it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
145
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146 FUNC_START(hal_thread_load_context)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
147
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
148 lwz sp,0(r3) # load state directly into SP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
149
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150 load_special # load special registers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
152 lwz r5,ppcreg_cr(sp) # restore CR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153 mtcr r5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155 lwz r5,ppcreg_lr(sp) # get LR as set as return link
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 mtlr r5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158 # Load registers MIN..MAX
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159 .set _reg,MIN_SAVE_REG
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160 .rept MAX_SAVE_REG+1-MIN_SAVE_REG
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161 lwz _reg,(ppcreg_regs+_reg*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 .set _reg,_reg+1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
165 lwz r0,ppcreg_regs+0*4(sp) # R0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
166 lwz r2,ppcreg_regs+2*4(sp) # R2 = TOC
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
167 lwz r3,ppcreg_regs+3*4(sp) # load r3
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
168
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
169 lwz sp,ppcreg_regs+1*4(sp) # finally restore true SP
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 blr # jump to LR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 # HAL longjmp, setjmp implementations
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 # hal_setjmp saves only to callee save registers 13-31, r1[sp],r2, cr[2-4]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 # and lr into buffer supplied in r3[arg0]
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
177 # Note: These definitions are repeated in hal_arch.h. If changes are required
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
178 # remember to update both sets.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
179
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
180 #define CYGARC_JMP_BUF_SP 0
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
181 #define CYGARC_JMP_BUF_R2 1
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
182 #define CYGARC_JMP_BUF_R13 2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
183 #define CYGARC_JMP_BUF_R14 3
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
184 #define CYGARC_JMP_BUF_R15 4
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
185 #define CYGARC_JMP_BUF_R16 5
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
186 #define CYGARC_JMP_BUF_R17 6
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
187 #define CYGARC_JMP_BUF_R18 7
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
188 #define CYGARC_JMP_BUF_R19 8
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
189 #define CYGARC_JMP_BUF_R20 9
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
190 #define CYGARC_JMP_BUF_R21 10
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
191 #define CYGARC_JMP_BUF_R22 11
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
192 #define CYGARC_JMP_BUF_R23 12
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
193 #define CYGARC_JMP_BUF_R24 13
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
194 #define CYGARC_JMP_BUF_R25 14
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
195 #define CYGARC_JMP_BUF_R26 15
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
196 #define CYGARC_JMP_BUF_R27 16
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
197 #define CYGARC_JMP_BUF_R28 17
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
198 #define CYGARC_JMP_BUF_R29 18
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
199 #define CYGARC_JMP_BUF_R30 19
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
200 #define CYGARC_JMP_BUF_R31 20
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
201 #define CYGARC_JMP_BUF_LR 21
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
202 #define CYGARC_JMP_BUF_CR 22
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
203
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
204 #define CYGARC_JMP_BUF_SIZE 23
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206 FUNC_START(hal_setjmp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
207 mfcr r5
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
208 stw r5, CYGARC_JMP_BUF_CR*4(r3)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209 mflr r5
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
210 stw r5, CYGARC_JMP_BUF_LR*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
211 stw r31,CYGARC_JMP_BUF_R31*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
212 stw r30,CYGARC_JMP_BUF_R30*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
213 stw r29,CYGARC_JMP_BUF_R29*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
214 stw r28,CYGARC_JMP_BUF_R28*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
215 stw r27,CYGARC_JMP_BUF_R27*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
216 stw r26,CYGARC_JMP_BUF_R26*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
217 stw r25,CYGARC_JMP_BUF_R25*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
218 stw r24,CYGARC_JMP_BUF_R24*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
219 stw r23,CYGARC_JMP_BUF_R23*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
220 stw r22,CYGARC_JMP_BUF_R22*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
221 stw r21,CYGARC_JMP_BUF_R21*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
222 stw r20,CYGARC_JMP_BUF_R20*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
223 stw r19,CYGARC_JMP_BUF_R19*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
224 stw r18,CYGARC_JMP_BUF_R18*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
225 stw r17,CYGARC_JMP_BUF_R17*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
226 stw r16,CYGARC_JMP_BUF_R16*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
227 stw r15,CYGARC_JMP_BUF_R15*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
228 stw r14,CYGARC_JMP_BUF_R14*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
229 stw r13,CYGARC_JMP_BUF_R13*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
230 stw r2, CYGARC_JMP_BUF_R2*4(r3) # TOC, optimize out?
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
231 stw sp, CYGARC_JMP_BUF_SP*4(r3)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
232 li r3,0 # return 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
233 blr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
234
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
235 # hal_longjmp loads state from r3[arg0] and returns
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
236 # and lr into buffer supplied in r3[arg0]
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
237
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
238 FUNC_START(hal_longjmp)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
239 lwz r5,CYGARC_JMP_BUF_CR*4(r3)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
240 mtcr r5
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
241 lwz r5,CYGARC_JMP_BUF_LR*4(r3)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
242 mtlr r5
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
243 lwz r31,CYGARC_JMP_BUF_R31*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
244 lwz r30,CYGARC_JMP_BUF_R30*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
245 lwz r29,CYGARC_JMP_BUF_R29*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
246 lwz r28,CYGARC_JMP_BUF_R28*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
247 lwz r27,CYGARC_JMP_BUF_R27*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
248 lwz r26,CYGARC_JMP_BUF_R26*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
249 lwz r25,CYGARC_JMP_BUF_R25*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
250 lwz r24,CYGARC_JMP_BUF_R24*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
251 lwz r23,CYGARC_JMP_BUF_R23*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
252 lwz r22,CYGARC_JMP_BUF_R22*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
253 lwz r21,CYGARC_JMP_BUF_R21*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
254 lwz r20,CYGARC_JMP_BUF_R20*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
255 lwz r19,CYGARC_JMP_BUF_R19*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
256 lwz r18,CYGARC_JMP_BUF_R18*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
257 lwz r17,CYGARC_JMP_BUF_R17*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
258 lwz r16,CYGARC_JMP_BUF_R16*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
259 lwz r15,CYGARC_JMP_BUF_R15*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
260 lwz r14,CYGARC_JMP_BUF_R14*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
261 lwz r13,CYGARC_JMP_BUF_R13*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
262 lwz r2, CYGARC_JMP_BUF_R2*4(r3)
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
263 lwz sp, CYGARC_JMP_BUF_SP*4(r3)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
264 mr r3,r4 # return r4[arg1]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
265 blr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
266
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
267 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
268 # end of context.S