source: anotherchoice/tags/jsp-1.4.4-full-UTF8/config/lm32/ecp2/sys_support.S@ 26

Last change on this file since 26 was 26, checked in by ykominami, 10 years ago

initial

File size: 9.3 KB
Line 
1/*
2 * TOPPERS/JSP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Just Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 *
9 * 上記著作権者
10は,以下の (1)〜(4) の条件か,Free Software Foundation
11 * によってå…
12¬è¡¨ã•ã‚Œã¦ã„ã‚‹ GNU General Public License の Version 2 に記
13 * 述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
14 * を改変したものを含む.以下同じ)を使用・複製・改変・再é…
15å¸ƒï¼ˆä»¥ä¸‹ï¼Œ
16 * 利用と呼ぶ)することを無償で許諾する.
17 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
18 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
19 * スコード中に含まれていること.
20 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
21 * 用できる形で再é…
22å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
23å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
24 * 者
25マニュアルなど)に,上記の著作権表示,この利用条件および下記
26 * の無保証規定を掲載すること.
27 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
28 * 用できない形で再é…
29å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
30 * と.
31 * (a) 再é…
32å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
33マニュアルなど)に,上記の著
34 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
35 * (b) 再é…
36å¸ƒã®å½¢æ…
37‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
38 * 報告すること.
39 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
40 * 害からも,上記著作権者
41およびTOPPERSプロジェクトをå…
42è²¬ã™ã‚‹ã“と.
43 *
44 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
45お
46 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
47 * 含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
48 * 接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
49 *
50 * @(#) $Id: sys_support.S,v 1.14 2007/07/27 11:28:44 honda Exp $
51 */
52
53#define _MACRO_ONLY
54#include "jsp_kernel.h"
55
56 .text
57 .align 4
58 .global Interrupt_exception_handler
59 .global _save_all
60 .global _restore_all_and_bret
61 .global _restore_all_and_eret
62 .global _process_exception
63
64_process_exception:
65 addi sp, sp, -4
66 sw (sp+4), ra
67/*
68 rcsr r2, ie
69 ori r3, r0, 1
70 and r2, r2, r3
71 be r2, r0, _normal_process
72bug:
73 bi bug
74*/
75_normal_process:
76 mvhi r2, hi(exception_count)
77 ori r2, r2, lo(exception_count)
78 lw r3, (r2+0)
79 addi r4, r3, 1
80 sw (r2+0), r4
81 bne r3, r0, nest_exception
82
83 mv r2, sp
84 mvhi r3, hi(_fstack)
85 ori r3, r3, lo(_fstack)
86 mv sp, r3
87 addi sp, sp, -4
88 sw (sp+4), r2
89
90nest_exception:
91
92 ori r2, r0, 6
93 be r1, r2, _process_interrupt
94 rcsr r2, ie
95 ori r2, r2, 0x1
96 wcsr ie, r2
97
98_process_interrupt:
99
100 addi sp, sp, -4
101 sw (sp+4), r1
102
103 sli r3, r1, 2
104 mvhi r2, hi(exc_table)
105 ori r2, r2, lo(exc_table)
106 add r3, r3, r2
107 lw r2, (r3+0)
108 call r2
109
110 addi sp, sp, 4
111 lw r1, (sp+0)
112
113 ori r2, r0, 6
114 be r1, r2, _process_interrupt_exit
115 rcsr r2, ie
116 andi r2, r2, 0x6
117 wcsr ie, r2
118
119_process_interrupt_exit:
120
121 mvhi r1, hi(exception_count)
122 ori r1, r1, lo(exception_count)
123 lw r2, (r1+0)
124 addi r2, r2, -1
125 sw (r1+0), r2
126 bne r2, r0, return_to_task_exc
127
128 addi sp, sp, 4
129 lw r1, (sp+0)
130 mv sp, r1
131
132 mvhi r2, hi(reqflg)
133 ori r2, r2, lo(reqflg)
134 lw r1, (r2+0)
135 be r1, r0, return_to_task_exc
136 sw (r2+0), r0
137 bi ret_exc
138
139return_to_task_exc:
140 addi sp, sp, 4
141 lw ra, (sp+0)
142 ret
143
144_save_all:
145 addi sp, sp, -128
146 sw (sp+4), r1
147 sw (sp+8), r2
148 sw (sp+12), r3
149 sw (sp+16), r4
150 sw (sp+20), r5
151 sw (sp+24), r6
152 sw (sp+28), r7
153 sw (sp+32), r8
154 sw (sp+36), r9
155 sw (sp+40), r10
156 sw (sp+44), r11
157 sw (sp+48), r12
158 sw (sp+52), r13
159 sw (sp+56), r14
160 sw (sp+60), r15
161 sw (sp+64), r16
162 sw (sp+68), r17
163 sw (sp+72), r18
164 sw (sp+76), r19
165 sw (sp+80), r20
166 sw (sp+84), r21
167 sw (sp+88), r22
168 sw (sp+92), r23
169 sw (sp+96), r24
170 sw (sp+100), r25
171 sw (sp+104), r26
172 sw (sp+108), r27
173
174 sw (sp+120), ea
175 sw (sp+124), ba
176
177 lw r1, (sp+128)
178 sw (sp+116), r1
179 mv r1, sp
180 addi r1, r1, 128
181 sw (sp+112), r1
182
183 mvhi r1, hi(exception_registers)
184 ori r1, r1, lo(exception_registers)
185 sw (r1+0), r0
186 sw (r1+8), r2
187 sw (r1+12), r3
188 sw (r1+16), r4
189 sw (r1+20), r5
190 sw (r1+24), r6
191 sw (r1+28), r7
192 sw (r1+32), r8
193 sw (r1+36), r9
194 sw (r1+40), r10
195 sw (r1+44), r11
196 sw (r1+48), r12
197 sw (r1+52), r13
198 sw (r1+56), r14
199 sw (r1+60), r15
200 sw (r1+64), r16
201 sw (r1+68), r17
202 sw (r1+72), r18
203 sw (r1+76), r19
204 sw (r1+80), r20
205 sw (r1+84), r21
206 sw (r1+88), r22
207 sw (r1+92), r23
208 sw (r1+96), r24
209 sw (r1+100), r25
210 sw (r1+104), r26
211 sw (r1+108), r27
212 sw (r1+120), ea
213 sw (r1+124), ba
214
215 lw r2, (sp+4)
216 sw (r1+4), r2
217 lw r2, (sp+56)
218 sw (r1+116), r2
219 addi r2, sp, 56
220 sw (r1+112), r2
221 rcsr r2, ie
222 sw (r1+128), r2
223 rcsr r2, im
224 sw (r1+132), r2
225 rcsr r2, ip
226 sw (r1+138), r2
227 rcsr r2, icc
228 sw (r1+140), r2
229 rcsr r2, dcc
230 sw (r1+144), r2
231 rcsr r2, cc
232 sw (r1+148), r2
233 rcsr r2, cfg
234 sw (r1+152), r2
235 rcsr r2, eba
236 sw (r1+158), r2
237
238 ret
239
240_restore_all_and_eret:
241 lw r1, (sp+4)
242 lw r2, (sp+8)
243 lw r3, (sp+12)
244 lw r4, (sp+16)
245 lw r5, (sp+20)
246 lw r6, (sp+24)
247 lw r7, (sp+28)
248 lw r8, (sp+32)
249 lw r9, (sp+36)
250 lw r10, (sp+40)
251 lw r11, (sp+44)
252 lw r12, (sp+48)
253 lw r13, (sp+52)
254 lw r14, (sp+56)
255 lw r15, (sp+60)
256 lw r16, (sp+64)
257 lw r17, (sp+68)
258 lw r18, (sp+72)
259 lw r19, (sp+76)
260 lw r20, (sp+80)
261 lw r21, (sp+84)
262 lw r22, (sp+88)
263 lw r23, (sp+92)
264 lw r24, (sp+96)
265 lw r25, (sp+100)
266 lw r26, (sp+104)
267 lw r27, (sp+108)
268 lw ra, (sp+116)
269 lw ea, (sp+120)
270 lw ba, (sp+124)
271 lw sp, (sp+112)
272 eret
273
274_restore_all_and_bret:
275 lw r1, (sp+4)
276 lw r2, (sp+8)
277 lw r3, (sp+12)
278 lw r4, (sp+16)
279 lw r5, (sp+20)
280 lw r6, (sp+24)
281 lw r7, (sp+28)
282 lw r8, (sp+32)
283 lw r9, (sp+36)
284 lw r10, (sp+40)
285 lw r11, (sp+44)
286 lw r12, (sp+48)
287 lw r13, (sp+52)
288 lw r14, (sp+56)
289 lw r15, (sp+60)
290 lw r16, (sp+64)
291 lw r17, (sp+68)
292 lw r18, (sp+72)
293 lw r19, (sp+76)
294 lw r20, (sp+80)
295 lw r21, (sp+84)
296 lw r22, (sp+88)
297 lw r23, (sp+92)
298 lw r24, (sp+96)
299 lw r25, (sp+100)
300 lw r26, (sp+104)
301 lw r27, (sp+108)
302 lw ra, (sp+116)
303 lw ea, (sp+120)
304 lw ba, (sp+124)
305 lw sp, (sp+112)
306 bret
307
308Interrupt_exception_handler:
309 addi sp, sp, -4
310 sw (sp+4), ra
311
312 rcsr r1, ip
313 rcsr r2, im
314 and r1, r1, r2
315
316 addi r2, r0, 1
317 addi r4, r0, 0
318
319find_bit_loop:
320 and r3, r1, r2
321 sli r2, r2, 1
322 addi r4, r4, 1
323 be r3, r0, find_bit_loop
324 addi r4, r4, -1
325
326save_intr_mask:
327 rcsr r1, im
328 addi sp, sp, -4
329 sw (sp+4), r1
330
331 mvhi r1, hi(int_mask_table)
332 ori r1, r1, lo(int_mask_table)
333 sli r5, r4, 2
334 add r1, r1, r5
335 lw r1, (r1+0)
336 rcsr r2, im
337 and r1, r1, r2
338 wcsr im, r1
339
340 mvhi r2, hi(int_table)
341 ori r2, r2, lo(int_table)
342 sli r5, r4, 2
343 add r2, r2, r5
344 lw r2, (r2+0)
345 be r2, r0, undefined_interrupt
346
347 addi sp, sp, -4
348 sw (sp+4), r4
349
350 /* Enable Interrupt */
351 rcsr r1, ie
352 ori r1, r1, 0x1
353 wcsr ie, r1
354
355call_user_isr:
356 call r2
357
358 /* Disable Interrupt */
359 rcsr r1, ie
360 andi r1, r1, 0x6
361 wcsr ie, r1
362
363clear_intr_pending:
364 addi sp, sp, 4
365 lw r4, (sp+0)
366
367 addi r1, r0, 1
368 sl r2, r1, r4
369 wcsr ip, r2
370
371restore_intr_mask:
372 addi sp, sp, 4
373 lw r1, (sp+0)
374 wcsr im, r1
375
376 addi sp, sp, 4
377 lw ra, (sp+0)
378 ret
379 nop
380
381undefined_interrupt:
382 bi undef_interrupt
Note: See TracBrowser for help on using the repository browser.