1 | /* cpu_asm.c ===> cpu_asm.S or cpu_asm.s |
---|
2 | * |
---|
3 | * This file contains the basic algorithms for all assembly code used |
---|
4 | * in an specific CPU port of RTEMS. These algorithms must be implemented |
---|
5 | * in assembly language |
---|
6 | * |
---|
7 | * NOTE: This is supposed to be a .S or .s file NOT a C file. |
---|
8 | * |
---|
9 | * COPYRIGHT (c) 1989-1999. |
---|
10 | * On-Line Applications Research Corporation (OAR). |
---|
11 | * |
---|
12 | * The license and distribution terms for this file may be |
---|
13 | * found in the file LICENSE in this distribution or at |
---|
14 | * http://www.rtems.com/license/LICENSE. |
---|
15 | * |
---|
16 | * $Id$ |
---|
17 | */ |
---|
18 | |
---|
19 | #include <rtems/asm.h> |
---|
20 | |
---|
21 | /* |
---|
22 | * _CPU_Context_save_fp_context |
---|
23 | * |
---|
24 | * This routine is responsible for saving the FP context |
---|
25 | * at *fp_context_ptr. If the point to load the FP context |
---|
26 | * from is changed then the pointer is modified by this routine. |
---|
27 | * |
---|
28 | * Sometimes a macro implementation of this is in cpu.h which dereferences |
---|
29 | * the ** and a similarly named routine in this file is passed something |
---|
30 | * like a (Context_Control_fp *). The general rule on making this decision |
---|
31 | * is to avoid writing assembly language. |
---|
32 | * |
---|
33 | * void _CPU_Context_save_fp( |
---|
34 | * void **fp_context_ptr |
---|
35 | * |
---|
36 | * C4x Specific Information: |
---|
37 | * |
---|
38 | * There is no distiniction between FP and integer context in this port. |
---|
39 | */ |
---|
40 | |
---|
41 | /* |
---|
42 | * _CPU_Context_restore_fp_context |
---|
43 | * |
---|
44 | * This routine is responsible for restoring the FP context |
---|
45 | * at *fp_context_ptr. If the point to load the FP context |
---|
46 | * from is changed then the pointer is modified by this routine. |
---|
47 | * |
---|
48 | * Sometimes a macro implementation of this is in cpu.h which dereferences |
---|
49 | * the ** and a similarly named routine in this file is passed something |
---|
50 | * like a (Context_Control_fp *). The general rule on making this decision |
---|
51 | * is to avoid writing assembly language. |
---|
52 | * |
---|
53 | * void _CPU_Context_restore_fp( |
---|
54 | * void **fp_context_ptr |
---|
55 | * ) |
---|
56 | * |
---|
57 | * C4x Specific Information: |
---|
58 | * |
---|
59 | * There is no distiniction between FP and integer context in this port. |
---|
60 | */ |
---|
61 | |
---|
62 | |
---|
63 | /* _CPU_Context_switch |
---|
64 | * |
---|
65 | * This routine performs a normal non-FP context switch. |
---|
66 | * |
---|
67 | * void _CPU_Context_switch( |
---|
68 | * Context_Control *run, |
---|
69 | * Context_Control *heir |
---|
70 | * ) |
---|
71 | * |
---|
72 | * TMS320C3x General-Purpose Applications User's Guide, section 2.4 |
---|
73 | * (p 2-11 and following), Context Switching in Interrupts and |
---|
74 | * Subroutines states that "If the program is in a subroutine, it |
---|
75 | * must preserve the dedicated C registers as follows:" |
---|
76 | * |
---|
77 | * Save as Integers Save as Floating-Point |
---|
78 | * ================ ====================== |
---|
79 | * R4 R8 R6 R7 |
---|
80 | * AR4 AR5 |
---|
81 | * AR6 AR7 |
---|
82 | * FP DP (small model only) |
---|
83 | * SP |
---|
84 | */ |
---|
85 | |
---|
86 | .global SYM(_CPU_Context_switch) |
---|
87 | SYM(_CPU_Context_switch): |
---|
88 | .if .REGPARM == 0 |
---|
89 | ldi sp, ar0 |
---|
90 | ldi *ar0, ar2 ; get the location of running context |
---|
91 | .endif |
---|
92 | sti st,*ar2++ ; store status word |
---|
93 | sti ar3,*ar2++ ; store ar3 |
---|
94 | sti ar4,*ar2++ ; store ar4 |
---|
95 | sti ar5,*ar2++ ; store ar5 |
---|
96 | sti ar6,*ar2++ ; store ar6 |
---|
97 | sti ar7,*ar2++ ; store ar7 |
---|
98 | sti r4,*ar2++ ; store integer portion of r4 |
---|
99 | sti r5,*ar2++ ; store integer portion of r5 |
---|
100 | stf r6,*ar2++ ; store float portion of r6 |
---|
101 | stf r7,*ar2++ ; store float portion of r7 |
---|
102 | .if .TMS320C40 |
---|
103 | sti r8,*ar2++ ; store integer portion of r8 |
---|
104 | .endif |
---|
105 | sti sp,*ar2++ ; store sp |
---|
106 | |
---|
107 | ; end of save |
---|
108 | |
---|
109 | .if .REGPARM == 0 |
---|
110 | ldi *-ar0(2), ar2 ; get the location of heir context |
---|
111 | .else |
---|
112 | ldi r2,ar2 |
---|
113 | .endif |
---|
114 | _local_restore: |
---|
115 | ldi *ar2++,ar0 ; load status word into register |
---|
116 | ldi *ar2++,ar3 ; load ar3 |
---|
117 | ldi *ar2++,ar4 ; load ar4 |
---|
118 | ldi *ar2++,ar5 ; load ar5 |
---|
119 | ldi *ar2++,ar6 ; load ar6 |
---|
120 | ldi *ar2++,ar7 ; load ar7 |
---|
121 | ldi *ar2++,r4 ; load integer portion of r4 |
---|
122 | ldi *ar2++,r5 ; load integer portion of r5 |
---|
123 | ldf *ar2++,r6 ; load float portion of r6 |
---|
124 | ldf *ar2++,r7 ; load float portion of r7 |
---|
125 | .if .TMS320C40 |
---|
126 | ldi *ar2++,r8 ; load integer portion of r8 |
---|
127 | .endif |
---|
128 | ldi *ar2++,sp ; load sp |
---|
129 | ldi ar0,st ; restore status word and interrupts |
---|
130 | rets |
---|
131 | |
---|
132 | /* |
---|
133 | * _CPU_Context_restore |
---|
134 | * |
---|
135 | * This routine is generally used only to restart self in an |
---|
136 | * efficient manner. It may simply be a label in _CPU_Context_switch. |
---|
137 | * |
---|
138 | * NOTE: May be unnecessary to reload some registers. |
---|
139 | * |
---|
140 | * void _CPU_Context_restore( |
---|
141 | * Context_Control *new_context |
---|
142 | * ) |
---|
143 | */ |
---|
144 | |
---|
145 | .global SYM(_CPU_Context_restore) |
---|
146 | SYM(_CPU_Context_restore): |
---|
147 | .if .REGPARM == 0 |
---|
148 | ldi sp, ar0 |
---|
149 | ldi *ar0, ar2 ; get the location of context to restore |
---|
150 | .endif |
---|
151 | br _local_restore |
---|
152 | |
---|
153 | /* void _ISR_Handler() |
---|
154 | * |
---|
155 | * This routine provides the RTEMS interrupt management. |
---|
156 | * |
---|
157 | * void _ISR_Handler() |
---|
158 | */ |
---|
159 | |
---|
160 | /* |
---|
161 | * At entry to "common" _ISR_Handler, the vector number must be |
---|
162 | * available. On some CPUs the hardware puts either the vector |
---|
163 | * number or the offset into the vector table for this ISR in a |
---|
164 | * known place. If the hardware does not give us this information, |
---|
165 | * then the assembly portion of RTEMS for this port will contain |
---|
166 | * a set of distinct interrupt entry points which somehow place |
---|
167 | * the vector number in a known place (which is safe if another |
---|
168 | * interrupt nests this one) and branches to _ISR_Handler. |
---|
169 | */ |
---|
170 | |
---|
171 | /* |
---|
172 | * save some or all context on stack |
---|
173 | * may need to save some special interrupt information for exit |
---|
174 | * |
---|
175 | * #if ( CPU_HAS_SOFTWARE_INTERRUPT_STACK == TRUE ) |
---|
176 | * if ( _ISR_Nest_level == 0 ) |
---|
177 | * switch to software interrupt stack |
---|
178 | * #endif |
---|
179 | * |
---|
180 | * _ISR_Nest_level++; |
---|
181 | * |
---|
182 | * _Thread_Dispatch_disable_level++; |
---|
183 | * |
---|
184 | * (*_ISR_Vector_table[ vector ])( vector ); |
---|
185 | * |
---|
186 | * --_ISR_Nest_level; |
---|
187 | * |
---|
188 | * if ( _ISR_Nest_level ) |
---|
189 | * goto the label "exit interrupt (simple case)" |
---|
190 | * |
---|
191 | * #if ( CPU_HAS_SOFTWARE_INTERRUPT_STACK == TRUE ) |
---|
192 | * restore stack |
---|
193 | * #endif |
---|
194 | * |
---|
195 | * if ( !_Context_Switch_necessary ) |
---|
196 | * goto the label "exit interrupt (simple case)" |
---|
197 | * |
---|
198 | * if ( !_ISR_Signals_to_thread_executing ) |
---|
199 | * _ISR_Signals_to_thread_executing = FALSE; |
---|
200 | * goto the label "exit interrupt (simple case)" |
---|
201 | * |
---|
202 | * call _Thread_Dispatch() or prepare to return to _ISR_Dispatch |
---|
203 | * |
---|
204 | * prepare to get out of interrupt |
---|
205 | * return from interrupt (maybe to _ISR_Dispatch) |
---|
206 | * |
---|
207 | * LABEL "exit interrupt (simple case): |
---|
208 | * prepare to get out of interrupt |
---|
209 | * return from interrupt |
---|
210 | */ |
---|
211 | |
---|
212 | .global SYM(_ISR_Handler_save_registers) |
---|
213 | SYM(_ISR_Handler_save_registers): |
---|
214 | ; no push st because it is already pushed |
---|
215 | ; no push ar2 because it is already pushed and vector number loaded |
---|
216 | push ar0 |
---|
217 | push ar1 |
---|
218 | push dp |
---|
219 | push ir0 |
---|
220 | push ir1 |
---|
221 | push rs |
---|
222 | push re |
---|
223 | push rc |
---|
224 | push bk |
---|
225 | |
---|
226 | push r0 |
---|
227 | pushf r0 |
---|
228 | push r1 |
---|
229 | pushf r1 |
---|
230 | push r2 |
---|
231 | pushf r2 |
---|
232 | push r3 |
---|
233 | pushf r3 |
---|
234 | ; no push r4 because other part of register is in basic context |
---|
235 | push r4 |
---|
236 | pushf r4 |
---|
237 | ; no push r5 because other part of register is in basic context |
---|
238 | push r5 |
---|
239 | pushf r5 |
---|
240 | push r6 |
---|
241 | pushf r6 |
---|
242 | ; no pushf r6 because other part of register is in basic context |
---|
243 | push r7 |
---|
244 | pushf r7 |
---|
245 | ; no pushf r7 because other part of register is in basic context |
---|
246 | .if .TMS320C40 |
---|
247 | push r8 |
---|
248 | ; no pushf r8 because other part of register is in basic context |
---|
249 | push r9 |
---|
250 | pushf r9 |
---|
251 | push r10 |
---|
252 | pushf r10 |
---|
253 | push r11 |
---|
254 | pushf r11 |
---|
255 | .endif |
---|
256 | |
---|
257 | ldi sp,r2 |
---|
258 | call SYM(__ISR_Handler) |
---|
259 | |
---|
260 | .if .TMS320C40 |
---|
261 | popf r11 |
---|
262 | pop r11 |
---|
263 | popf r10 |
---|
264 | pop r10 |
---|
265 | popf r9 |
---|
266 | pop r9 |
---|
267 | ; no popf r8 because other part of register is in basic context |
---|
268 | pop r8 |
---|
269 | .endif |
---|
270 | ; no popf r7 because other part of register is in basic context |
---|
271 | popf r7 |
---|
272 | pop r7 |
---|
273 | ; no popf r6 because other part of register is in basic context |
---|
274 | popf r6 |
---|
275 | pop r6 |
---|
276 | ; no popf r5 because other part of register is in basic context |
---|
277 | popf r5 |
---|
278 | pop r5 |
---|
279 | ; no pop r4 because other part of register is in basic context |
---|
280 | popf r4 |
---|
281 | pop r4 |
---|
282 | popf r3 |
---|
283 | pop r3 |
---|
284 | popf r2 |
---|
285 | pop r2 |
---|
286 | popf r1 |
---|
287 | pop r1 |
---|
288 | popf r0 |
---|
289 | pop r0 |
---|
290 | |
---|
291 | pop bk |
---|
292 | pop rc |
---|
293 | pop re |
---|
294 | pop rs |
---|
295 | pop ir1 |
---|
296 | pop ir0 |
---|
297 | pop dp |
---|
298 | pop ar1 |
---|
299 | pop ar0 |
---|
300 | pop ar2 ; because the vector numbers goes here |
---|
301 | pop st |
---|
302 | reti |
---|
303 | |
---|
304 | /* |
---|
305 | * Prologues so we can know the vector number. Generated by this script: |
---|
306 | * |
---|
307 | * i=0 |
---|
308 | * while test $i -lt 64 |
---|
309 | * do |
---|
310 | * |
---|
311 | * printf "\t.global\tSYM(rtems_irq_prologue_%X)\n" $i |
---|
312 | * printf "SYM(rtems_irq_prologue_%X):\n" $i |
---|
313 | * printf "\tpush\tst\n" |
---|
314 | * printf "\tpush\tar2\n" |
---|
315 | * printf "\tldi\t0x%x,ar2\n" $i |
---|
316 | * printf "\tbr\tSYM(_ISR_Handler_save_registers)\n" |
---|
317 | * printf "\n" |
---|
318 | * i=`expr $i + 1` |
---|
319 | * |
---|
320 | * done |
---|
321 | */ |
---|
322 | |
---|
323 | .global SYM(rtems_irq_prologue_0) |
---|
324 | SYM(rtems_irq_prologue_0): |
---|
325 | push st |
---|
326 | push ar2 |
---|
327 | ldi 0x0,ar2 |
---|
328 | br SYM(_ISR_Handler_save_registers) |
---|
329 | |
---|
330 | .global SYM(rtems_irq_prologue_1) |
---|
331 | SYM(rtems_irq_prologue_1): |
---|
332 | push st |
---|
333 | push ar2 |
---|
334 | ldi 0x1,ar2 |
---|
335 | br SYM(_ISR_Handler_save_registers) |
---|
336 | |
---|
337 | .global SYM(rtems_irq_prologue_2) |
---|
338 | SYM(rtems_irq_prologue_2): |
---|
339 | push st |
---|
340 | push ar2 |
---|
341 | ldi 0x2,ar2 |
---|
342 | br SYM(_ISR_Handler_save_registers) |
---|
343 | |
---|
344 | .global SYM(rtems_irq_prologue_3) |
---|
345 | SYM(rtems_irq_prologue_3): |
---|
346 | push st |
---|
347 | push ar2 |
---|
348 | ldi 0x3,ar2 |
---|
349 | br SYM(_ISR_Handler_save_registers) |
---|
350 | |
---|
351 | .global SYM(rtems_irq_prologue_4) |
---|
352 | SYM(rtems_irq_prologue_4): |
---|
353 | push st |
---|
354 | push ar2 |
---|
355 | ldi 0x4,ar2 |
---|
356 | br SYM(_ISR_Handler_save_registers) |
---|
357 | |
---|
358 | .global SYM(rtems_irq_prologue_5) |
---|
359 | SYM(rtems_irq_prologue_5): |
---|
360 | push st |
---|
361 | push ar2 |
---|
362 | ldi 0x5,ar2 |
---|
363 | br SYM(_ISR_Handler_save_registers) |
---|
364 | |
---|
365 | .global SYM(rtems_irq_prologue_6) |
---|
366 | SYM(rtems_irq_prologue_6): |
---|
367 | push st |
---|
368 | push ar2 |
---|
369 | ldi 0x6,ar2 |
---|
370 | br SYM(_ISR_Handler_save_registers) |
---|
371 | |
---|
372 | .global SYM(rtems_irq_prologue_7) |
---|
373 | SYM(rtems_irq_prologue_7): |
---|
374 | push st |
---|
375 | push ar2 |
---|
376 | ldi 0x7,ar2 |
---|
377 | br SYM(_ISR_Handler_save_registers) |
---|
378 | |
---|
379 | .global SYM(rtems_irq_prologue_8) |
---|
380 | SYM(rtems_irq_prologue_8): |
---|
381 | push st |
---|
382 | push ar2 |
---|
383 | ldi 0x8,ar2 |
---|
384 | br SYM(_ISR_Handler_save_registers) |
---|
385 | |
---|
386 | .global SYM(rtems_irq_prologue_9) |
---|
387 | SYM(rtems_irq_prologue_9): |
---|
388 | push st |
---|
389 | push ar2 |
---|
390 | ldi 0x9,ar2 |
---|
391 | br SYM(_ISR_Handler_save_registers) |
---|
392 | |
---|
393 | .global SYM(rtems_irq_prologue_A) |
---|
394 | SYM(rtems_irq_prologue_A): |
---|
395 | push st |
---|
396 | push ar2 |
---|
397 | ldi 0xa,ar2 |
---|
398 | br SYM(_ISR_Handler_save_registers) |
---|
399 | |
---|
400 | .global SYM(rtems_irq_prologue_B) |
---|
401 | SYM(rtems_irq_prologue_B): |
---|
402 | push st |
---|
403 | push ar2 |
---|
404 | ldi 0xb,ar2 |
---|
405 | br SYM(_ISR_Handler_save_registers) |
---|
406 | |
---|
407 | .global SYM(rtems_irq_prologue_C) |
---|
408 | SYM(rtems_irq_prologue_C): |
---|
409 | push st |
---|
410 | push ar2 |
---|
411 | ldi 0xc,ar2 |
---|
412 | br SYM(_ISR_Handler_save_registers) |
---|
413 | |
---|
414 | .global SYM(rtems_irq_prologue_D) |
---|
415 | SYM(rtems_irq_prologue_D): |
---|
416 | push st |
---|
417 | push ar2 |
---|
418 | ldi 0xd,ar2 |
---|
419 | br SYM(_ISR_Handler_save_registers) |
---|
420 | |
---|
421 | .global SYM(rtems_irq_prologue_E) |
---|
422 | SYM(rtems_irq_prologue_E): |
---|
423 | push st |
---|
424 | push ar2 |
---|
425 | ldi 0xe,ar2 |
---|
426 | br SYM(_ISR_Handler_save_registers) |
---|
427 | |
---|
428 | .global SYM(rtems_irq_prologue_F) |
---|
429 | SYM(rtems_irq_prologue_F): |
---|
430 | push st |
---|
431 | push ar2 |
---|
432 | ldi 0xf,ar2 |
---|
433 | br SYM(_ISR_Handler_save_registers) |
---|
434 | |
---|
435 | .global SYM(rtems_irq_prologue_10) |
---|
436 | SYM(rtems_irq_prologue_10): |
---|
437 | push st |
---|
438 | push ar2 |
---|
439 | ldi 0x10,ar2 |
---|
440 | br SYM(_ISR_Handler_save_registers) |
---|
441 | |
---|
442 | .global SYM(rtems_irq_prologue_11) |
---|
443 | SYM(rtems_irq_prologue_11): |
---|
444 | push st |
---|
445 | push ar2 |
---|
446 | ldi 0x11,ar2 |
---|
447 | br SYM(_ISR_Handler_save_registers) |
---|
448 | |
---|
449 | .global SYM(rtems_irq_prologue_12) |
---|
450 | SYM(rtems_irq_prologue_12): |
---|
451 | push st |
---|
452 | push ar2 |
---|
453 | ldi 0x12,ar2 |
---|
454 | br SYM(_ISR_Handler_save_registers) |
---|
455 | |
---|
456 | .global SYM(rtems_irq_prologue_13) |
---|
457 | SYM(rtems_irq_prologue_13): |
---|
458 | push st |
---|
459 | push ar2 |
---|
460 | ldi 0x13,ar2 |
---|
461 | br SYM(_ISR_Handler_save_registers) |
---|
462 | |
---|
463 | .global SYM(rtems_irq_prologue_14) |
---|
464 | SYM(rtems_irq_prologue_14): |
---|
465 | push st |
---|
466 | push ar2 |
---|
467 | ldi 0x14,ar2 |
---|
468 | br SYM(_ISR_Handler_save_registers) |
---|
469 | |
---|
470 | .global SYM(rtems_irq_prologue_15) |
---|
471 | SYM(rtems_irq_prologue_15): |
---|
472 | push st |
---|
473 | push ar2 |
---|
474 | ldi 0x15,ar2 |
---|
475 | br SYM(_ISR_Handler_save_registers) |
---|
476 | |
---|
477 | .global SYM(rtems_irq_prologue_16) |
---|
478 | SYM(rtems_irq_prologue_16): |
---|
479 | push st |
---|
480 | push ar2 |
---|
481 | ldi 0x16,ar2 |
---|
482 | br SYM(_ISR_Handler_save_registers) |
---|
483 | |
---|
484 | .global SYM(rtems_irq_prologue_17) |
---|
485 | SYM(rtems_irq_prologue_17): |
---|
486 | push st |
---|
487 | push ar2 |
---|
488 | ldi 0x17,ar2 |
---|
489 | br SYM(_ISR_Handler_save_registers) |
---|
490 | |
---|
491 | .global SYM(rtems_irq_prologue_18) |
---|
492 | SYM(rtems_irq_prologue_18): |
---|
493 | push st |
---|
494 | push ar2 |
---|
495 | ldi 0x18,ar2 |
---|
496 | br SYM(_ISR_Handler_save_registers) |
---|
497 | |
---|
498 | .global SYM(rtems_irq_prologue_19) |
---|
499 | SYM(rtems_irq_prologue_19): |
---|
500 | push st |
---|
501 | push ar2 |
---|
502 | ldi 0x19,ar2 |
---|
503 | br SYM(_ISR_Handler_save_registers) |
---|
504 | |
---|
505 | .global SYM(rtems_irq_prologue_1A) |
---|
506 | SYM(rtems_irq_prologue_1A): |
---|
507 | push st |
---|
508 | push ar2 |
---|
509 | ldi 0x1a,ar2 |
---|
510 | br SYM(_ISR_Handler_save_registers) |
---|
511 | |
---|
512 | .global SYM(rtems_irq_prologue_1B) |
---|
513 | SYM(rtems_irq_prologue_1B): |
---|
514 | push st |
---|
515 | push ar2 |
---|
516 | ldi 0x1b,ar2 |
---|
517 | br SYM(_ISR_Handler_save_registers) |
---|
518 | |
---|
519 | .global SYM(rtems_irq_prologue_1C) |
---|
520 | SYM(rtems_irq_prologue_1C): |
---|
521 | push st |
---|
522 | push ar2 |
---|
523 | ldi 0x1c,ar2 |
---|
524 | br SYM(_ISR_Handler_save_registers) |
---|
525 | |
---|
526 | .global SYM(rtems_irq_prologue_1D) |
---|
527 | SYM(rtems_irq_prologue_1D): |
---|
528 | push st |
---|
529 | push ar2 |
---|
530 | ldi 0x1d,ar2 |
---|
531 | br SYM(_ISR_Handler_save_registers) |
---|
532 | |
---|
533 | .global SYM(rtems_irq_prologue_1E) |
---|
534 | SYM(rtems_irq_prologue_1E): |
---|
535 | push st |
---|
536 | push ar2 |
---|
537 | ldi 0x1e,ar2 |
---|
538 | br SYM(_ISR_Handler_save_registers) |
---|
539 | |
---|
540 | .global SYM(rtems_irq_prologue_1F) |
---|
541 | SYM(rtems_irq_prologue_1F): |
---|
542 | push st |
---|
543 | push ar2 |
---|
544 | ldi 0x1f,ar2 |
---|
545 | br SYM(_ISR_Handler_save_registers) |
---|
546 | |
---|
547 | .global SYM(rtems_irq_prologue_20) |
---|
548 | SYM(rtems_irq_prologue_20): |
---|
549 | push st |
---|
550 | push ar2 |
---|
551 | ldi 0x20,ar2 |
---|
552 | br SYM(_ISR_Handler_save_registers) |
---|
553 | |
---|
554 | .global SYM(rtems_irq_prologue_21) |
---|
555 | SYM(rtems_irq_prologue_21): |
---|
556 | push st |
---|
557 | push ar2 |
---|
558 | ldi 0x21,ar2 |
---|
559 | br SYM(_ISR_Handler_save_registers) |
---|
560 | |
---|
561 | .global SYM(rtems_irq_prologue_22) |
---|
562 | SYM(rtems_irq_prologue_22): |
---|
563 | push st |
---|
564 | push ar2 |
---|
565 | ldi 0x22,ar2 |
---|
566 | br SYM(_ISR_Handler_save_registers) |
---|
567 | |
---|
568 | .global SYM(rtems_irq_prologue_23) |
---|
569 | SYM(rtems_irq_prologue_23): |
---|
570 | push st |
---|
571 | push ar2 |
---|
572 | ldi 0x23,ar2 |
---|
573 | br SYM(_ISR_Handler_save_registers) |
---|
574 | |
---|
575 | .global SYM(rtems_irq_prologue_24) |
---|
576 | SYM(rtems_irq_prologue_24): |
---|
577 | push st |
---|
578 | push ar2 |
---|
579 | ldi 0x24,ar2 |
---|
580 | br SYM(_ISR_Handler_save_registers) |
---|
581 | |
---|
582 | .global SYM(rtems_irq_prologue_25) |
---|
583 | SYM(rtems_irq_prologue_25): |
---|
584 | push st |
---|
585 | push ar2 |
---|
586 | ldi 0x25,ar2 |
---|
587 | br SYM(_ISR_Handler_save_registers) |
---|
588 | |
---|
589 | .global SYM(rtems_irq_prologue_26) |
---|
590 | SYM(rtems_irq_prologue_26): |
---|
591 | push st |
---|
592 | push ar2 |
---|
593 | ldi 0x26,ar2 |
---|
594 | br SYM(_ISR_Handler_save_registers) |
---|
595 | |
---|
596 | .global SYM(rtems_irq_prologue_27) |
---|
597 | SYM(rtems_irq_prologue_27): |
---|
598 | push st |
---|
599 | push ar2 |
---|
600 | ldi 0x27,ar2 |
---|
601 | br SYM(_ISR_Handler_save_registers) |
---|
602 | |
---|
603 | .global SYM(rtems_irq_prologue_28) |
---|
604 | SYM(rtems_irq_prologue_28): |
---|
605 | push st |
---|
606 | push ar2 |
---|
607 | ldi 0x28,ar2 |
---|
608 | br SYM(_ISR_Handler_save_registers) |
---|
609 | |
---|
610 | .global SYM(rtems_irq_prologue_29) |
---|
611 | SYM(rtems_irq_prologue_29): |
---|
612 | push st |
---|
613 | push ar2 |
---|
614 | ldi 0x29,ar2 |
---|
615 | br SYM(_ISR_Handler_save_registers) |
---|
616 | |
---|
617 | .global SYM(rtems_irq_prologue_2A) |
---|
618 | SYM(rtems_irq_prologue_2A): |
---|
619 | push st |
---|
620 | push ar2 |
---|
621 | ldi 0x2a,ar2 |
---|
622 | br SYM(_ISR_Handler_save_registers) |
---|
623 | |
---|
624 | .global SYM(rtems_irq_prologue_2B) |
---|
625 | SYM(rtems_irq_prologue_2B): |
---|
626 | push st |
---|
627 | push ar2 |
---|
628 | ldi 0x2b,ar2 |
---|
629 | br SYM(_ISR_Handler_save_registers) |
---|
630 | |
---|
631 | .global SYM(rtems_irq_prologue_2C) |
---|
632 | SYM(rtems_irq_prologue_2C): |
---|
633 | push st |
---|
634 | push ar2 |
---|
635 | ldi 0x2c,ar2 |
---|
636 | br SYM(_ISR_Handler_save_registers) |
---|
637 | |
---|
638 | .global SYM(rtems_irq_prologue_2D) |
---|
639 | SYM(rtems_irq_prologue_2D): |
---|
640 | push st |
---|
641 | push ar2 |
---|
642 | ldi 0x2d,ar2 |
---|
643 | br SYM(_ISR_Handler_save_registers) |
---|
644 | |
---|
645 | .global SYM(rtems_irq_prologue_2E) |
---|
646 | SYM(rtems_irq_prologue_2E): |
---|
647 | push st |
---|
648 | push ar2 |
---|
649 | ldi 0x2e,ar2 |
---|
650 | br SYM(_ISR_Handler_save_registers) |
---|
651 | |
---|
652 | .global SYM(rtems_irq_prologue_2F) |
---|
653 | SYM(rtems_irq_prologue_2F): |
---|
654 | push st |
---|
655 | push ar2 |
---|
656 | ldi 0x2f,ar2 |
---|
657 | br SYM(_ISR_Handler_save_registers) |
---|
658 | |
---|
659 | .global SYM(rtems_irq_prologue_30) |
---|
660 | SYM(rtems_irq_prologue_30): |
---|
661 | push st |
---|
662 | push ar2 |
---|
663 | ldi 0x30,ar2 |
---|
664 | br SYM(_ISR_Handler_save_registers) |
---|
665 | |
---|
666 | .global SYM(rtems_irq_prologue_31) |
---|
667 | SYM(rtems_irq_prologue_31): |
---|
668 | push st |
---|
669 | push ar2 |
---|
670 | ldi 0x31,ar2 |
---|
671 | br SYM(_ISR_Handler_save_registers) |
---|
672 | |
---|
673 | .global SYM(rtems_irq_prologue_32) |
---|
674 | SYM(rtems_irq_prologue_32): |
---|
675 | push st |
---|
676 | push ar2 |
---|
677 | ldi 0x32,ar2 |
---|
678 | br SYM(_ISR_Handler_save_registers) |
---|
679 | |
---|
680 | .global SYM(rtems_irq_prologue_33) |
---|
681 | SYM(rtems_irq_prologue_33): |
---|
682 | push st |
---|
683 | push ar2 |
---|
684 | ldi 0x33,ar2 |
---|
685 | br SYM(_ISR_Handler_save_registers) |
---|
686 | |
---|
687 | .global SYM(rtems_irq_prologue_34) |
---|
688 | SYM(rtems_irq_prologue_34): |
---|
689 | push st |
---|
690 | push ar2 |
---|
691 | ldi 0x34,ar2 |
---|
692 | br SYM(_ISR_Handler_save_registers) |
---|
693 | |
---|
694 | .global SYM(rtems_irq_prologue_35) |
---|
695 | SYM(rtems_irq_prologue_35): |
---|
696 | push st |
---|
697 | push ar2 |
---|
698 | ldi 0x35,ar2 |
---|
699 | br SYM(_ISR_Handler_save_registers) |
---|
700 | |
---|
701 | .global SYM(rtems_irq_prologue_36) |
---|
702 | SYM(rtems_irq_prologue_36): |
---|
703 | push st |
---|
704 | push ar2 |
---|
705 | ldi 0x36,ar2 |
---|
706 | br SYM(_ISR_Handler_save_registers) |
---|
707 | |
---|
708 | .global SYM(rtems_irq_prologue_37) |
---|
709 | SYM(rtems_irq_prologue_37): |
---|
710 | push st |
---|
711 | push ar2 |
---|
712 | ldi 0x37,ar2 |
---|
713 | br SYM(_ISR_Handler_save_registers) |
---|
714 | |
---|
715 | .global SYM(rtems_irq_prologue_38) |
---|
716 | SYM(rtems_irq_prologue_38): |
---|
717 | push st |
---|
718 | push ar2 |
---|
719 | ldi 0x38,ar2 |
---|
720 | br SYM(_ISR_Handler_save_registers) |
---|
721 | |
---|
722 | .global SYM(rtems_irq_prologue_39) |
---|
723 | SYM(rtems_irq_prologue_39): |
---|
724 | push st |
---|
725 | push ar2 |
---|
726 | ldi 0x39,ar2 |
---|
727 | br SYM(_ISR_Handler_save_registers) |
---|
728 | |
---|
729 | .global SYM(rtems_irq_prologue_3A) |
---|
730 | SYM(rtems_irq_prologue_3A): |
---|
731 | push st |
---|
732 | push ar2 |
---|
733 | ldi 0x3a,ar2 |
---|
734 | br SYM(_ISR_Handler_save_registers) |
---|
735 | |
---|
736 | .global SYM(rtems_irq_prologue_3B) |
---|
737 | SYM(rtems_irq_prologue_3B): |
---|
738 | push st |
---|
739 | push ar2 |
---|
740 | ldi 0x3b,ar2 |
---|
741 | br SYM(_ISR_Handler_save_registers) |
---|
742 | |
---|
743 | .global SYM(rtems_irq_prologue_3C) |
---|
744 | SYM(rtems_irq_prologue_3C): |
---|
745 | push st |
---|
746 | push ar2 |
---|
747 | ldi 0x3c,ar2 |
---|
748 | br SYM(_ISR_Handler_save_registers) |
---|
749 | |
---|
750 | .global SYM(rtems_irq_prologue_3D) |
---|
751 | SYM(rtems_irq_prologue_3D): |
---|
752 | push st |
---|
753 | push ar2 |
---|
754 | ldi 0x3d,ar2 |
---|
755 | br SYM(_ISR_Handler_save_registers) |
---|
756 | |
---|
757 | .global SYM(rtems_irq_prologue_3E) |
---|
758 | SYM(rtems_irq_prologue_3E): |
---|
759 | push st |
---|
760 | push ar2 |
---|
761 | ldi 0x3e,ar2 |
---|
762 | br SYM(_ISR_Handler_save_registers) |
---|
763 | |
---|
764 | .global SYM(rtems_irq_prologue_3F) |
---|
765 | SYM(rtems_irq_prologue_3F): |
---|
766 | push st |
---|
767 | push ar2 |
---|
768 | ldi 0x3f,ar2 |
---|
769 | br SYM(_ISR_Handler_save_registers) |
---|