Subversion Repositories HelenOS

Rev

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

Rev 326 Rev 329
1
#
1
#
2
# Copyright (C) 2003-2004 Jakub Jermar
2
# Copyright (C) 2003-2004 Jakub Jermar
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
.macro cp0_read reg
33
.macro cp0_read reg
34
	mfc0 $2,\reg
34
	mfc0 $2,\reg
35
	j $31
35
	j $31
36
	nop
36
	nop
37
.endm
37
.endm
38
 
38
 
39
.macro cp0_write reg
39
.macro cp0_write reg
40
	mtc0 $4,\reg
40
	mtc0 $4,\reg
41
	j $31
41
	j $31
42
	nop
42
	nop
43
.endm
43
.endm
44
 
44
 
45
.set noat
45
.set noat
46
.set noreorder
46
.set noreorder
47
.set nomacro
47
.set nomacro
48
 
48
 
49
.global cp0_index_read
49
.global cp0_index_read
50
.global cp0_index_write
50
.global cp0_index_write
51
.global cp0_random_read
51
.global cp0_random_read
52
.global cp0_entry_lo0_read
52
.global cp0_entry_lo0_read
53
.global cp0_entry_lo0_write
53
.global cp0_entry_lo0_write
54
.global cp0_entry_lo1_read
54
.global cp0_entry_lo1_read
55
.global cp0_entry_lo1_write
55
.global cp0_entry_lo1_write
56
.global cp0_context_read
56
.global cp0_context_read
57
.global cp0_context_write
57
.global cp0_context_write
58
.global cp0_pagemask_read
58
.global cp0_pagemask_read
59
.global cp0_pagemask_write
59
.global cp0_pagemask_write
60
.global cp0_wired_read
60
.global cp0_wired_read
61
.global cp0_wired_write
61
.global cp0_wired_write
62
.global cp0_badvaddr_read
62
.global cp0_badvaddr_read
63
.global cp0_count_read
63
.global cp0_count_read
64
.global cp0_count_write
64
.global cp0_count_write
65
.global cp0_hi_read
65
.global cp0_hi_read
66
.global cp0_hi_write
66
.global cp0_hi_write
67
.global cp0_compare_read
67
.global cp0_compare_read
68
.global cp0_compare_write
68
.global cp0_compare_write
69
.global cp0_status_read
69
.global cp0_status_read
70
.global cp0_status_write
70
.global cp0_status_write
71
.global cp0_cause_read
71
.global cp0_cause_read
72
.global cp0_cause_write
72
.global cp0_cause_write
73
.global cp0_epc_read
73
.global cp0_epc_read
74
.global cp0_epc_write
74
.global cp0_epc_write
75
.global cp0_prid_read
75
.global cp0_prid_read
76
 
76
 
77
cp0_index_read:		cp0_read $0
77
cp0_index_read:		cp0_read $0
78
cp0_index_write:	cp0_write $0
78
cp0_index_write:	cp0_write $0
79
 
79
 
80
cp0_random_read:	cp0_read $1
80
cp0_random_read:	cp0_read $1
81
 
81
 
82
cp0_entry_lo0_read:	cp0_read $2
82
cp0_entry_lo0_read:	cp0_read $2
83
cp0_entry_lo0_write:	cp0_write $2
83
cp0_entry_lo0_write:	cp0_write $2
84
 
84
 
85
cp0_entry_lo1_read:	cp0_read $3
85
cp0_entry_lo1_read:	cp0_read $3
86
cp0_entry_lo1_write:	cp0_write $3
86
cp0_entry_lo1_write:	cp0_write $3
87
 
87
 
88
cp0_context_read:	cp0_read $4
88
cp0_context_read:	cp0_read $4
89
cp0_context_write:	cp0_write $4
89
cp0_context_write:	cp0_write $4
90
 
90
 
91
cp0_pagemask_read:	cp0_read $5
91
cp0_pagemask_read:	cp0_read $5
92
cp0_pagemask_write:	cp0_write $5
92
cp0_pagemask_write:	cp0_write $5
93
 
93
 
94
cp0_wired_read:		cp0_read $6
94
cp0_wired_read:		cp0_read $6
95
cp0_wired_write:	cp0_write $6
95
cp0_wired_write:	cp0_write $6
96
 
96
 
97
cp0_badvaddr_read:	cp0_read $8
97
cp0_badvaddr_read:	cp0_read $8
98
 
98
 
99
cp0_count_read:		cp0_read $9
99
cp0_count_read:		cp0_read $9
100
cp0_count_write:	cp0_write $9
100
cp0_count_write:	cp0_write $9
101
 
101
 
102
cp0_entry_hi_read:	cp0_read $10
102
cp0_entry_hi_read:	cp0_read $10
103
cp0_entry_hi_write:	cp0_write $10
103
cp0_entry_hi_write:	cp0_write $10
104
 
104
 
105
cp0_compare_read:	cp0_read $11
105
cp0_compare_read:	cp0_read $11
106
cp0_compare_write:	cp0_write $11
106
cp0_compare_write:	cp0_write $11
107
 
107
 
108
cp0_status_read:	cp0_read $12
108
cp0_status_read:	cp0_read $12
109
cp0_status_write:	cp0_write $12
109
cp0_status_write:	cp0_write $12
110
 
110
 
111
cp0_cause_read:		cp0_read $13
111
cp0_cause_read:		cp0_read $13
112
cp0_cause_write:	cp0_write $13
112
cp0_cause_write:	cp0_write $13
113
 
113
 
114
cp0_epc_read:		cp0_read $14
114
cp0_epc_read:		cp0_read $14
115
cp0_epc_write:		cp0_write $14
115
cp0_epc_write:		cp0_write $14
116
 
116
 
117
cp0_prid_read:		cp0_read $15
117
cp0_prid_read:		cp0_read $15
118
 
118
 
119
 
119
 
-
 
120
.global bios_write
-
 
121
bios_write:
-
 
122
	lw	$2, 0x80001020
-
 
123
	lw	$2, 0x6c($2)
-
 
124
	j	$2
-
 
125
	nop
-
 
126
	
120
.global cpu_halt
127
.global cpu_halt
121
cpu_halt:
128
cpu_halt:
122
	j cpu_halt
129
	j cpu_halt
123
	nop
130
	nop
124
 
131
 
125
 
132
 
126
.global memsetb
133
.global memsetb
127
memsetb:
134
memsetb:
128
	j _memsetb
135
	j _memsetb
129
	nop
136
	nop
130
 
137
 
131
.global memcpy
138
.global memcpy
132
memcpy:
139
memcpy:
133
	j _memcpy
140
	j _memcpy
134
	nop
141
	nop
135
 
142
 
136
.macro fpu_gp_save reg ctx
143
.macro fpu_gp_save reg ctx
137
	mfc1 $t0,$\reg
144
	mfc1 $t0,$\reg
138
	sw $t0, \reg*4(\ctx)
145
	sw $t0, \reg*4(\ctx)
139
.endm
146
.endm
140
 
147
 
141
.macro fpu_gp_restore reg ctx
148
.macro fpu_gp_restore reg ctx
142
	lw $t0, \reg*4(\ctx)
149
	lw $t0, \reg*4(\ctx)
143
	mtc1 $t0,$\reg
150
	mtc1 $t0,$\reg
144
.endm
151
.endm
145
 
152
 
146
.macro fpu_ct_save reg ctx
153
.macro fpu_ct_save reg ctx
147
	cfc1 $t0,$1
154
	cfc1 $t0,$1
148
	sw $t0, (\reg+32)*4(\ctx)
155
	sw $t0, (\reg+32)*4(\ctx)
149
.endm	
156
.endm	
150
 
157
 
151
.macro fpu_ct_restore reg ctx
158
.macro fpu_ct_restore reg ctx
152
	lw $t0, (\reg+32)*4(\ctx)
159
	lw $t0, (\reg+32)*4(\ctx)
153
	ctc1 $t0,$\reg
160
	ctc1 $t0,$\reg
154
.endm
161
.endm
155
 
162
 
156
 
163
 
157
.global fpu_context_save
164
.global fpu_context_save
158
fpu_context_save:
165
fpu_context_save:
159
#ifdef HAVE_FPU
166
#ifdef HAVE_FPU
160
	fpu_gp_save 0,$a0
167
	fpu_gp_save 0,$a0
161
	fpu_gp_save 1,$a0
168
	fpu_gp_save 1,$a0
162
	fpu_gp_save 2,$a0
169
	fpu_gp_save 2,$a0
163
	fpu_gp_save 3,$a0
170
	fpu_gp_save 3,$a0
164
	fpu_gp_save 4,$a0
171
	fpu_gp_save 4,$a0
165
	fpu_gp_save 5,$a0
172
	fpu_gp_save 5,$a0
166
	fpu_gp_save 6,$a0
173
	fpu_gp_save 6,$a0
167
	fpu_gp_save 7,$a0
174
	fpu_gp_save 7,$a0
168
	fpu_gp_save 8,$a0
175
	fpu_gp_save 8,$a0
169
	fpu_gp_save 9,$a0
176
	fpu_gp_save 9,$a0
170
	fpu_gp_save 10,$a0
177
	fpu_gp_save 10,$a0
171
	fpu_gp_save 11,$a0
178
	fpu_gp_save 11,$a0
172
	fpu_gp_save 12,$a0
179
	fpu_gp_save 12,$a0
173
	fpu_gp_save 13,$a0
180
	fpu_gp_save 13,$a0
174
	fpu_gp_save 14,$a0
181
	fpu_gp_save 14,$a0
175
	fpu_gp_save 15,$a0
182
	fpu_gp_save 15,$a0
176
	fpu_gp_save 16,$a0
183
	fpu_gp_save 16,$a0
177
	fpu_gp_save 17,$a0
184
	fpu_gp_save 17,$a0
178
	fpu_gp_save 18,$a0
185
	fpu_gp_save 18,$a0
179
	fpu_gp_save 19,$a0
186
	fpu_gp_save 19,$a0
180
	fpu_gp_save 20,$a0
187
	fpu_gp_save 20,$a0
181
	fpu_gp_save 21,$a0
188
	fpu_gp_save 21,$a0
182
	fpu_gp_save 22,$a0
189
	fpu_gp_save 22,$a0
183
	fpu_gp_save 23,$a0
190
	fpu_gp_save 23,$a0
184
	fpu_gp_save 24,$a0
191
	fpu_gp_save 24,$a0
185
	fpu_gp_save 25,$a0
192
	fpu_gp_save 25,$a0
186
	fpu_gp_save 26,$a0
193
	fpu_gp_save 26,$a0
187
	fpu_gp_save 27,$a0
194
	fpu_gp_save 27,$a0
188
	fpu_gp_save 28,$a0
195
	fpu_gp_save 28,$a0
189
	fpu_gp_save 29,$a0
196
	fpu_gp_save 29,$a0
190
	fpu_gp_save 30,$a0
197
	fpu_gp_save 30,$a0
191
	fpu_gp_save 31,$a0
198
	fpu_gp_save 31,$a0
192
 
199
 
193
	fpu_ct_save 1,$a0
200
	fpu_ct_save 1,$a0
194
	fpu_ct_save 2,$a0
201
	fpu_ct_save 2,$a0
195
	fpu_ct_save 3,$a0
202
	fpu_ct_save 3,$a0
196
	fpu_ct_save 4,$a0
203
	fpu_ct_save 4,$a0
197
	fpu_ct_save 5,$a0
204
	fpu_ct_save 5,$a0
198
	fpu_ct_save 6,$a0
205
	fpu_ct_save 6,$a0
199
	fpu_ct_save 7,$a0
206
	fpu_ct_save 7,$a0
200
	fpu_ct_save 8,$a0
207
	fpu_ct_save 8,$a0
201
	fpu_ct_save 9,$a0
208
	fpu_ct_save 9,$a0
202
	fpu_ct_save 10,$a0
209
	fpu_ct_save 10,$a0
203
	fpu_ct_save 11,$a0
210
	fpu_ct_save 11,$a0
204
	fpu_ct_save 12,$a0
211
	fpu_ct_save 12,$a0
205
	fpu_ct_save 13,$a0
212
	fpu_ct_save 13,$a0
206
	fpu_ct_save 14,$a0
213
	fpu_ct_save 14,$a0
207
	fpu_ct_save 15,$a0
214
	fpu_ct_save 15,$a0
208
	fpu_ct_save 16,$a0
215
	fpu_ct_save 16,$a0
209
	fpu_ct_save 17,$a0
216
	fpu_ct_save 17,$a0
210
	fpu_ct_save 18,$a0
217
	fpu_ct_save 18,$a0
211
	fpu_ct_save 19,$a0
218
	fpu_ct_save 19,$a0
212
	fpu_ct_save 20,$a0
219
	fpu_ct_save 20,$a0
213
	fpu_ct_save 21,$a0
220
	fpu_ct_save 21,$a0
214
	fpu_ct_save 22,$a0
221
	fpu_ct_save 22,$a0
215
	fpu_ct_save 23,$a0
222
	fpu_ct_save 23,$a0
216
	fpu_ct_save 24,$a0
223
	fpu_ct_save 24,$a0
217
	fpu_ct_save 25,$a0
224
	fpu_ct_save 25,$a0
218
	fpu_ct_save 26,$a0
225
	fpu_ct_save 26,$a0
219
	fpu_ct_save 27,$a0
226
	fpu_ct_save 27,$a0
220
	fpu_ct_save 28,$a0
227
	fpu_ct_save 28,$a0
221
	fpu_ct_save 29,$a0
228
	fpu_ct_save 29,$a0
222
	fpu_ct_save 30,$a0
229
	fpu_ct_save 30,$a0
223
	fpu_ct_save 31,$a0
230
	fpu_ct_save 31,$a0
224
#endif		
231
#endif		
225
	j $ra
232
	j $ra
226
	nop
233
	nop
227
 
234
 
228
.global fpu_context_restore
235
.global fpu_context_restore
229
fpu_context_restore:
236
fpu_context_restore:
230
#ifdef HAVE_FPU
237
#ifdef HAVE_FPU
231
	fpu_gp_restore 0,$a0
238
	fpu_gp_restore 0,$a0
232
	fpu_gp_restore 1,$a0
239
	fpu_gp_restore 1,$a0
233
	fpu_gp_restore 2,$a0
240
	fpu_gp_restore 2,$a0
234
	fpu_gp_restore 3,$a0
241
	fpu_gp_restore 3,$a0
235
	fpu_gp_restore 4,$a0
242
	fpu_gp_restore 4,$a0
236
	fpu_gp_restore 5,$a0
243
	fpu_gp_restore 5,$a0
237
	fpu_gp_restore 6,$a0
244
	fpu_gp_restore 6,$a0
238
	fpu_gp_restore 7,$a0
245
	fpu_gp_restore 7,$a0
239
	fpu_gp_restore 8,$a0
246
	fpu_gp_restore 8,$a0
240
	fpu_gp_restore 9,$a0
247
	fpu_gp_restore 9,$a0
241
	fpu_gp_restore 10,$a0
248
	fpu_gp_restore 10,$a0
242
	fpu_gp_restore 11,$a0
249
	fpu_gp_restore 11,$a0
243
	fpu_gp_restore 12,$a0
250
	fpu_gp_restore 12,$a0
244
	fpu_gp_restore 13,$a0
251
	fpu_gp_restore 13,$a0
245
	fpu_gp_restore 14,$a0
252
	fpu_gp_restore 14,$a0
246
	fpu_gp_restore 15,$a0
253
	fpu_gp_restore 15,$a0
247
	fpu_gp_restore 16,$a0
254
	fpu_gp_restore 16,$a0
248
	fpu_gp_restore 17,$a0
255
	fpu_gp_restore 17,$a0
249
	fpu_gp_restore 18,$a0
256
	fpu_gp_restore 18,$a0
250
	fpu_gp_restore 19,$a0
257
	fpu_gp_restore 19,$a0
251
	fpu_gp_restore 20,$a0
258
	fpu_gp_restore 20,$a0
252
	fpu_gp_restore 21,$a0
259
	fpu_gp_restore 21,$a0
253
	fpu_gp_restore 22,$a0
260
	fpu_gp_restore 22,$a0
254
	fpu_gp_restore 23,$a0
261
	fpu_gp_restore 23,$a0
255
	fpu_gp_restore 24,$a0
262
	fpu_gp_restore 24,$a0
256
	fpu_gp_restore 25,$a0
263
	fpu_gp_restore 25,$a0
257
	fpu_gp_restore 26,$a0
264
	fpu_gp_restore 26,$a0
258
	fpu_gp_restore 27,$a0
265
	fpu_gp_restore 27,$a0
259
	fpu_gp_restore 28,$a0
266
	fpu_gp_restore 28,$a0
260
	fpu_gp_restore 29,$a0
267
	fpu_gp_restore 29,$a0
261
	fpu_gp_restore 30,$a0
268
	fpu_gp_restore 30,$a0
262
	fpu_gp_restore 31,$a0
269
	fpu_gp_restore 31,$a0
263
 
270
 
264
	fpu_ct_restore 1,$a0
271
	fpu_ct_restore 1,$a0
265
	fpu_ct_restore 2,$a0
272
	fpu_ct_restore 2,$a0
266
	fpu_ct_restore 3,$a0
273
	fpu_ct_restore 3,$a0
267
	fpu_ct_restore 4,$a0
274
	fpu_ct_restore 4,$a0
268
	fpu_ct_restore 5,$a0
275
	fpu_ct_restore 5,$a0
269
	fpu_ct_restore 6,$a0
276
	fpu_ct_restore 6,$a0
270
	fpu_ct_restore 7,$a0
277
	fpu_ct_restore 7,$a0
271
	fpu_ct_restore 8,$a0
278
	fpu_ct_restore 8,$a0
272
	fpu_ct_restore 9,$a0
279
	fpu_ct_restore 9,$a0
273
	fpu_ct_restore 10,$a0
280
	fpu_ct_restore 10,$a0
274
	fpu_ct_restore 11,$a0
281
	fpu_ct_restore 11,$a0
275
	fpu_ct_restore 12,$a0
282
	fpu_ct_restore 12,$a0
276
	fpu_ct_restore 13,$a0
283
	fpu_ct_restore 13,$a0
277
	fpu_ct_restore 14,$a0
284
	fpu_ct_restore 14,$a0
278
	fpu_ct_restore 15,$a0
285
	fpu_ct_restore 15,$a0
279
	fpu_ct_restore 16,$a0
286
	fpu_ct_restore 16,$a0
280
	fpu_ct_restore 17,$a0
287
	fpu_ct_restore 17,$a0
281
	fpu_ct_restore 18,$a0
288
	fpu_ct_restore 18,$a0
282
	fpu_ct_restore 19,$a0
289
	fpu_ct_restore 19,$a0
283
	fpu_ct_restore 20,$a0
290
	fpu_ct_restore 20,$a0
284
	fpu_ct_restore 21,$a0
291
	fpu_ct_restore 21,$a0
285
	fpu_ct_restore 22,$a0
292
	fpu_ct_restore 22,$a0
286
	fpu_ct_restore 23,$a0
293
	fpu_ct_restore 23,$a0
287
	fpu_ct_restore 24,$a0
294
	fpu_ct_restore 24,$a0
288
	fpu_ct_restore 25,$a0
295
	fpu_ct_restore 25,$a0
289
	fpu_ct_restore 26,$a0
296
	fpu_ct_restore 26,$a0
290
	fpu_ct_restore 27,$a0
297
	fpu_ct_restore 27,$a0
291
	fpu_ct_restore 28,$a0
298
	fpu_ct_restore 28,$a0
292
	fpu_ct_restore 29,$a0
299
	fpu_ct_restore 29,$a0
293
	fpu_ct_restore 30,$a0
300
	fpu_ct_restore 30,$a0
294
	fpu_ct_restore 31,$a0
301
	fpu_ct_restore 31,$a0
295
#endif	
302
#endif	
296
	j $ra
303
	j $ra
297
	nop
304
	nop
298
	
305
	
299
# THIS IS USERSPACE CODE
306
# THIS IS USERSPACE CODE
300
.global utext
307
.global utext
301
utext:
308
utext:
302
	j $31
309
	j $31
303
	nop
310
	nop
304
utext_end:
311
utext_end:
305
 
312
 
306
.data
313
.data
307
.global utext_size
314
.global utext_size
308
utext_size:
315
utext_size:
309
	.long utext_end-utext
316
	.long utext_end-utext
310
 
317
 
311
 
318
 
312
 
319