Subversion Repositories HelenOS-historic

Rev

Rev 1220 | Rev 1277 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

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