annotate packages/hal/powerpc/arch/current/src/context.S @ 0:3111d98ba7b3 ecos-v1_1-release

Initial commit of eCos version 1.1
author jlarmour
date Tue, 11 May 1999 11:16:07 +0000
parents
children 443894e2e912
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####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
9 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
10 # -------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
11 # The contents of this file are subject to the Cygnus eCos Public License
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
12 # Version 1.0 (the "License"); you may not use this file except in
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
13 # compliance with the License. You may obtain a copy of the License at
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
14 # http://sourceware.cygnus.com/ecos
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
15 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
16 # Software distributed under the License is distributed on an "AS IS"
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
17 # basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
18 # License for the specific language governing rights and limitations under
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
19 # the License.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
20 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
21 # The Original Code is eCos - Embedded Cygnus Operating System, released
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
22 # September 30, 1998.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
23 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
24 # The Initial Developer of the Original Code is Cygnus. Portions created
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
25 # by Cygnus are Copyright (C) 1998 Cygnus Solutions. All Rights Reserved.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
26 # -------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
27 #
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
28 #####COPYRIGHTEND####
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
29 ##=============================================================================
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
30 #######DESCRIPTIONBEGIN####
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 ## Author(s): nickg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
33 ## Contributors: nickg
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
34 ## Date: 1998-04-27
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
35 ## Purpose: PowerPC context switch code
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
36 ## Description: This file contains implementations of the thread context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
37 ## switch routines. It also contains the longjmp() and setjmp()
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
38 ## routines.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
39 ##
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
40 ######DESCRIPTIONEND####
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 ##=============================================================================
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 #include <pkgconf/hal.h>
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 "cyg/hal/ppc.inc"
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 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
49 # function declaration macro
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 #define FUNC_START(name) \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52 .type name,@function; \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53 .globl name; \
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 name:
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
55
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
56 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57 # Configure to use either a minimal or maximal thread state
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 #ifdef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM
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 #define MIN_SAVE_REG 13
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62 #define MAX_SAVE_REG 31
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64 .macro save_special
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
65 .endm
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
66
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67 .macro load_special
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
68 .endm
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
69 #else
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71 #define MIN_SAVE_REG 6
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
72 #define MAX_SAVE_REG 31
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
73
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
74 .macro save_special
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
75 mfxer r6
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
76 mfctr r7
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
77 stw r6,ppcreg_xer(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
78 stw r7,ppcreg_ctr(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79 .endm
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
81 .macro load_special
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
82 lwz r6,ppcreg_xer(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
83 lwz r7,ppcreg_ctr(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84 mtxer r6
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 mtctr r7
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 .endm
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88 #endif
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 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
91 # hal_thread_switch_context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 # Switch thread contexts
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93 # R3 = address of sp of next thread to execute
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
94 # R4 = address of sp save location of current thread
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
95
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
96
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97 FUNC_START(hal_thread_switch_context)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98 mr r5,sp # R5 = saved stack pointer
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
99 subi sp,sp,ppcreg_context_size # space for state
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101 # Save registers MIN..MAX
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102 .set _reg,MIN_SAVE_REG
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
103 .rept MAX_SAVE_REG+1-MIN_SAVE_REG
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
104 stw _reg,(ppcreg_regs+_reg*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
105 .set _reg,_reg+1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
107
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
108 stw r0,0(sp) # R0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 stw r5,4(sp) # R5 = real SP, save in R1 slot
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110 stw r2,8(sp) # R2 = TOC
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
111
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
112 # CR cannot be treated as a special register since GCC will only
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
113 # do partial restore of CR at function exit, depending on which
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
114 # of CR2, CR3, and CR4 have been used in the given function.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
115 mfcr r5 # save CR.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
116 stw r5,ppcreg_cr(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
117
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
118 save_special # save special regs
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
119
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
120 mflr r5 # save LR == return link for this fn
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
121 stw r5,ppcreg_lr(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
122
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
123 stw sp,0(r4) # save SP into save location
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
124
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
125 # Now load the destination thread by dropping through
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
126 # to hal_thread_load_context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
127
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
128 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129 # hal_thread_load_context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
130 # Load thread context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131 # R3 = address of sp of next thread to execute
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
132 # 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
133 # and is simply dropped into from it.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
134
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135 FUNC_START(hal_thread_load_context)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137 lwz sp,0(r3) # load state directly into SP
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 load_special # load special registers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
140
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141 lwz r5,ppcreg_cr(sp) # restore CR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142 mtcr r5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
143
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
144 lwz r5,ppcreg_lr(sp) # get LR as set as return link
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
145 mtlr r5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
146
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
147 # Load registers MIN..MAX
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
148 .set _reg,MIN_SAVE_REG
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
149 .rept MAX_SAVE_REG+1-MIN_SAVE_REG
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150 lwz _reg,(ppcreg_regs+_reg*4)(sp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
151 .set _reg,_reg+1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
152 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154 lwz r0,0(sp) # R0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
155 lwz r2,8(sp) # R2 = TOC
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 lwz r3,12(sp) # load r3
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157 # lwz r4,16(sp) # load r4
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158 # lwz r5,20(sp) # load r5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
159
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
160 lwz sp,4(sp) # finally restore true SP
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
161
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
162 blr # jump to LR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
163
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
164 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
165 # HAL longjmp, setjmp implementations
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
166 # 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
167 # and lr into buffer supplied in r3[arg0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
168
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169 FUNC_START(hal_setjmp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
170 mfcr r5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
171 stw r5,88(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172 mflr r5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
173 stw r5,84(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174 stw r31,80(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 stw r30,76(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 stw r29,72(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
177 stw r28,68(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178 stw r27,64(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
179 stw r26,60(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
180 stw r25,56(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
181 stw r24,52(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
182 stw r23,48(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
183 stw r22,44(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
184 stw r21,40(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
185 stw r20,36(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
186 stw r19,32(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
187 stw r18,28(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
188 stw r17,24(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
189 stw r16,20(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
190 stw r15,16(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
191 stw r14,12(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
192 stw r13,8(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
193 stw r2,4(r3) # TOC, optimize out?
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
194 stw sp,0(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
195 li r3,0 # return 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
196 blr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
197
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
198 # hal_longjmp loads state from r3[arg0] and returns
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
199 # and lr into buffer supplied in r3[arg0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
200
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 FUNC_START(hal_longjmp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202 lwz r5,88(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
203 mtcr r5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204 lwz r5,84(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
205 mtlr r5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
206 lwz r31,80(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
207 lwz r30,76(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
208 lwz r29,72(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209 lwz r28,68(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
210 lwz r27,64(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211 lwz r26,60(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
212 lwz r25,56(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
213 lwz r24,52(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
214 lwz r23,48(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
215 lwz r22,44(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
216 lwz r21,40(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
217 lwz r20,36(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
218 lwz r19,32(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
219 lwz r18,28(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
220 lwz r17,24(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
221 lwz r16,20(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
222 lwz r15,16(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
223 lwz r14,12(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
224 lwz r13,8(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
225 lwz r2,4(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
226 lwz sp,0(r3)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
227 mr r3,r4 # return r4[arg1]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
228 blr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
229
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
230
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
231
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
232 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
233 # end of context.S