source: mainline/arch/ppc32/src/asm.S@ 9417cdc

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 9417cdc was 762a824, checked in by Martin Decky <martin@…>, 19 years ago

ppc32: proper exception handling from user-space
code cleanup

  • Property mode set to 100644
File size: 3.5 KB
Line 
1#
2# Copyright (C) 2005 Martin Decky
3# All rights reserved.
4#
5# Redistribution and use in source and binary forms, with or without
6# modification, are permitted provided that the following conditions
7# are met:
8#
9# - Redistributions of source code must retain the above copyright
10# notice, this list of conditions and the following disclaimer.
11# - Redistributions in binary form must reproduce the above copyright
12# notice, this list of conditions and the following disclaimer in the
13# documentation and/or other materials provided with the distribution.
14# - The name of the author may not be used to endorse or promote products
15# derived from this software without specific prior written permission.
16#
17# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27#
28
29#include <arch/asm/regname.h>
30
31.text
32
33.global userspace_asm
34.global iret
35.global memsetb
36.global memcpy
37
38userspace_asm:
39
40 # r3 = uspace_uarg
41 # r4 = stack
42 # r5 = entry
43
44 # disable interrupts
45
46 mfmsr r31
47 rlwinm r31, r31, 0, 17, 15
48 mtmsr r31
49
50 # set entry point
51
52 mtsrr0 r5
53
54 # set problem state, enable interrupts
55
56 ori r31, r31, msr_pr
57 ori r31, r31, msr_ee
58 mtsrr1 r31
59
60 # set stack
61
62 mr sp, r4
63
64 # jump to userspace
65
66 rfi
67
68iret:
69 lwz r0, 0(sp)
70 lwz r2, 4(sp)
71 lwz r3, 8(sp)
72 lwz r4, 12(sp)
73 lwz r5, 16(sp)
74 lwz r6, 20(sp)
75 lwz r7, 24(sp)
76 lwz r8, 28(sp)
77 lwz r9, 32(sp)
78 lwz r10, 36(sp)
79 lwz r11, 40(sp)
80 lwz r13, 44(sp)
81 lwz r14, 48(sp)
82 lwz r15, 52(sp)
83 lwz r16, 56(sp)
84 lwz r17, 60(sp)
85 lwz r18, 64(sp)
86 lwz r19, 68(sp)
87 lwz r20, 72(sp)
88 lwz r21, 76(sp)
89 lwz r22, 80(sp)
90 lwz r23, 84(sp)
91 lwz r24, 88(sp)
92 lwz r25, 92(sp)
93 lwz r26, 96(sp)
94 lwz r27, 100(sp)
95 lwz r28, 104(sp)
96 lwz r29, 108(sp)
97 lwz r30, 112(sp)
98 lwz r31, 116(sp)
99
100 lwz r12, 120(sp)
101 mtsrr0 r12
102
103 lwz r12, 124(sp)
104 mtsrr1 r12
105
106 lwz r12, 128(sp)
107 mtlr r12
108
109 lwz r12, 132(sp)
110 mtcr r12
111
112 lwz r12, 136(sp)
113 mtctr r12
114
115 lwz r12, 140(sp)
116 mtxer r12
117
118 mfsprg1 sp
119 mfsprg2 r12
120
121 rfi
122
123memsetb:
124 rlwimi r5, r5, 8, 16, 23
125 rlwimi r5, r5, 16, 0, 15
126
127 addi r14, r3, -4
128
129 cmplwi 0, r4, 4
130 blt 7f
131
132 stwu r5, 4(r14)
133 beqlr
134
135 andi. r15, r14, 3
136 add r4, r15, r4
137 subf r14, r15, r14
138 srwi r15, r4, 2
139 mtctr r15
140
141 bdz 6f
142
143 1:
144 stwu r5, 4(r14)
145 bdnz 1b
146
147 6:
148
149 andi. r4, r4, 3
150
151 7:
152
153 cmpwi 0, r4, 0
154 beqlr
155
156 mtctr r4
157 addi r6, r6, 3
158
159 8:
160
161 stbu r5, 1(r14)
162 bdnz 8b
163
164 blr
165
166memcpy:
167 srwi. r7, r5, 3
168 addi r6, r3, -4
169 addi r4, r4, -4
170 beq 2f
171
172 andi. r0, r6, 3
173 mtctr r7
174 bne 5f
175
176 1:
177
178 lwz r7, 4(r4)
179 lwzu r8, 8(r4)
180 stw r7, 4(r6)
181 stwu r8, 8(r6)
182 bdnz 1b
183
184 andi. r5, r5, 7
185
186 2:
187
188 cmplwi 0, r5, 4
189 blt 3f
190
191 lwzu r0, 4(r4)
192 addi r5, r5, -4
193 stwu r0, 4(r6)
194
195 3:
196
197 cmpwi 0, r5, 0
198 beqlr
199 mtctr r5
200 addi r4, r4, 3
201 addi r6, r6, 3
202
203 4:
204
205 lbzu r0, 1(r4)
206 stbu r0, 1(r6)
207 bdnz 4b
208 blr
209
210 5:
211
212 subfic r0, r0, 4
213 mtctr r0
214
215 6:
216
217 lbz r7, 4(r4)
218 addi r4, r4, 1
219 stb r7, 4(r6)
220 addi r6, r6, 1
221 bdnz 6b
222 subf r5, r0, r5
223 rlwinm. r7, r5, 32-3, 3, 31
224 beq 2b
225 mtctr r7
226 b 1b
Note: See TracBrowser for help on using the repository browser.