annotate packages/hal/powerpc/arch/current/src/context.S @ 76:435cced73e2f ecos-v1_3_1-release

eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
author jlarmour
date Tue, 28 Mar 2000 14:10:45 +0000
parents bf00f99aec69
children e0c0827131d1
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
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
48 #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
49 #include <cyg/hal/ppc_offsets.inc>
0
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 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
52 # Configure to use either a minimal or maximal thread state
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
53
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
54 #ifdef CYGDBG_HAL_COMMON_CONTEXT_SAVE_MINIMUM
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 #define MIN_SAVE_REG 13
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
57 #define MAX_SAVE_REG 31
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 .macro save_special
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
60 .endm
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
61
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
62 .macro load_special
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
63 .endm
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
64 #else
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 #define MIN_SAVE_REG 6
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
67 #define MAX_SAVE_REG 31
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 save_special
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
70 mfxer r6
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
71 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
72 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
73 stw r7,CYGARC_PPCREG_CTR(sp)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
74 .endm
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 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
77 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
78 lwz r7,CYGARC_PPCREG_CTR(sp)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
79 mtxer r6
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
80 mtctr r7
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 #endif
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
84
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
85 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
86 # hal_thread_switch_context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
87 # Switch thread contexts
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
88 # R3 = address of sp of next thread to execute
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
89 # R4 = address of sp save location of current thread
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
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
92 FUNC_START(hal_thread_switch_context)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
93 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
94 subi sp,sp,CYGARC_PPC_CONTEXT_SIZE # space for state
0
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 # Save registers MIN..MAX
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
97 .set _reg,MIN_SAVE_REG
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
98 .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
99 stw _reg,(CYGARC_PPCREG_REGS+_reg*4)(sp)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
100 .set _reg,_reg+1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
101 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
102
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
103 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
104 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
105 stw r2,CYGARC_PPCREG_REGS+2*4(sp) # R2 = TOC
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
106
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
107 # CR cannot be treated as a special register since GCC will only
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
108 # do partial restore of CR at function exit, depending on which
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
109 # of CR2, CR3, and CR4 have been used in the given function.
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
110 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
111 stw r5,CYGARC_PPCREG_CR(sp)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
112
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
113 #ifdef CYGDBG_HAL_DEBUG_GDB_THREAD_SUPPORT
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
114 # 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
115 # aware debugging is required. This state does not need restoring.
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
116 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
117 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
118 #endif
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
119
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
120 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
121 stw r5,CYGARC_PPCREG_MSR(sp)# msr (or PS)
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
122
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
123 save_special # save special regs
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 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
126 stw r5,CYGARC_PPCREG_LR(sp)
0
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 stw sp,0(r4) # save SP into save location
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
129
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
130 # Now load the destination thread by dropping through
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
131 # to hal_thread_load_context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
132
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 # hal_thread_load_context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
135 # Load thread context
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
136 # R3 = address of sp of next thread to execute
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
137 # 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
138 # and is simply dropped into from it.
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 FUNC_START(hal_thread_load_context)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
141
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
142 lwz sp,0(r3) # load state directly into SP
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 load_special # load special registers
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
145
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
146 lwz r5,CYGARC_PPCREG_CR(sp) # restore CR
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
147 mtcr r5
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
148
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
149 lwz r5,CYGARC_PPCREG_LR(sp) # get LR as set as return link
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
150 mtlr r5
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 # Load registers MIN..MAX
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
153 .set _reg,MIN_SAVE_REG
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
154 .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
155 lwz _reg,(CYGARC_PPCREG_REGS+_reg*4)(sp)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
156 .set _reg,_reg+1
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
157 .endr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
158
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
159 lwz r3,CYGARC_PPCREG_MSR(sp) # merge interrupt state
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
160 hal_cpu_int_merge r3
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
161
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
162 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
163 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
164 lwz r3,CYGARC_PPCREG_REGS+3*4(sp) # load r3
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
165
76
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
166 lwz sp,CYGARC_PPCREG_REGS+1*4(sp) # finally restore true SP
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
167
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
168 blr # jump to LR
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
169
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 # HAL longjmp, setjmp implementations
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
172 # 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
173 # and lr into buffer supplied in r3[arg0]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
174
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
175 FUNC_START(hal_setjmp)
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
176 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
177 stw r5, CYGARC_JMPBUF_CR(r3)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
178 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
179 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
180 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
181 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
182 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
183 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
184 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
185 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
186 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
187 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
188 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
189 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
190 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
191 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
192 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
193 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
194 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
195 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
196 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
197 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
198 stw r13,CYGARC_JMPBUF_R13(r3)
435cced73e2f eCos v1.3.1 merged from eCos master repository on 2000-03-27-23:22:51-BST
jlarmour
parents: 66
diff changeset
199 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
200 stw sp, CYGARC_JMPBUF_SP(r3)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
201 li r3,0 # return 0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
202 blr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
203
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
204 # 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
205 # to the setjmp caller with r4[arg1] as return value
2
443894e2e912 Block commit of eCos version 1.2.1
jlarmour
parents: 0
diff changeset
206
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
207 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
208 lwz r5,CYGARC_JMPBUF_CR(r3)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
209 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
210 lwz r5,CYGARC_JMPBUF_LR(r3)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
211 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
212 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
213 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
214 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
215 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
216 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
217 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
218 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
219 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
220 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
221 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
222 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
223 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
224 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
225 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
226 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
227 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
228 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
229 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
230 lwz r13,CYGARC_JMPBUF_R13(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 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
232 lwz sp, CYGARC_JMPBUF_SP(r3)
0
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
233 mr r3,r4 # return r4[arg1]
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
234 blr
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
235
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
236 #------------------------------------------------------------------------------
3111d98ba7b3 Initial commit of eCos version 1.1
jlarmour
parents:
diff changeset
237 # end of context.S