source: trunk/Softwares/Common/src/sys/crt0.s

Last change on this file was 111, checked in by rosiere, 16 years ago

1) Decod_queue : multi implementation (one_fifo, multi_fifo)
2) Issue_queue : multi implementation (in_order, out_of_order)
3) Direction : Add Meta predictor
4) Context_State : re add Branch_complete, More priority to Load miss (is not speculative)
5) Return_Address_Stack : update reg_PREDICT pointer on decod miss prediction
6) UPT : Fix bug in multi event
7) Prediction_glue : in read_stack case, insert in UPT pc_next
8) Rename select : when rob have an event (need flush), read_r{a,b,c} and write_r{d,e} is set at 0

  • Property svn:keywords set to Id
File size: 12.0 KB
Line 
1/*
2 * Routine system dependant
3 *  - reset
4 *  - exception handler
5 *  - start / exit
6 */
7
8/*             
9#define DEFAULT_EXCEPTION_HANDLER     \
10        l.addi  r1, r1, -128         ;\
11        l.sw    4(r1), r3            ;\
12        l.sw    8(r1), r4            ;\
13        l.mfspr r3,r0,16             ;\
14        l.mfspr r4,r0,32             ;\
15        l.j default_exception_handler;\
16        l.nop   0                    ;
17*/
18       
19        .file   "crt0.s"
20        /*
21        .section .vector
22        */
23        .section .text
24        .align  4       
25
26/* ---[ 0x0  : Print a error ]------------------------------------------- */
27
28        .org 0x0
29
30        l.movhi r3,   0xdead
31        l.jal   _quit
32        l.ori   r3,r3,0xdead
33
34/* ---[ 0x100: RESET exception ]----------------------------------------- */
35        .org 0x100
36        .global _exception_reset
37_exception_reset:
38
39        l.movhi r2,   hi(_start)
40        l.ori   r2,r2,lo(_start)
41        l.jr    r2               /* Go _start */
42        l.nop   0
43
44/* ---[ 0x200: BUS exception ]------------------------------------------- */
45        .org 0x200
46        /*DEFAULT_EXCEPTION_HANDLER*/
47        l.addi  r1, r1, -128         
48        l.sw    4(r1), r3             
49        l.sw    8(r1), r4           
50        l.mfspr r3,r0,16             
51        l.mfspr r4,r0,32             
52        l.j default_exception_handler
53        l.nop   0                   
54       
55
56/* ---[ 0x300: Data Page Fault exception ]------------------------------- */
57        .org 0x300
58        /*DEFAULT_EXCEPTION_HANDLER*/
59        l.addi  r1, r1, -128         
60        l.sw    4(r1), r3             
61        l.sw    8(r1), r4           
62        l.mfspr r3,r0,16             
63        l.mfspr r4,r0,32             
64        l.j default_exception_handler
65        l.nop   0                   
66
67       
68/* ---[ 0x400: Insn Page Fault exception ]------------------------------- */
69        .org 0x400
70        /*DEFAULT_EXCEPTION_HANDLER*/
71        l.addi  r1, r1, -128         
72        l.sw    4(r1), r3             
73        l.sw    8(r1), r4           
74        l.mfspr r3,r0,16             
75        l.mfspr r4,r0,32             
76        l.j default_exception_handler
77        l.nop   0                   
78
79
80/* ---[ 0x500: Timer exception ]----------------------------------------- */
81        .org 0x500
82        /*DEFAULT_EXCEPTION_HANDLER*/
83        l.addi  r1, r1, -128         
84        l.sw    4(r1), r3             
85        l.sw    8(r1), r4           
86        l.mfspr r3,r0,16             
87        l.mfspr r4,r0,32             
88        l.j default_exception_handler
89        l.nop   0                   
90
91
92/* ---[ 0x600: Aligment exception ]-------------------------------------- */
93        .org 0x600
94        /*DEFAULT_EXCEPTION_HANDLER*/
95        l.addi  r1, r1, -128         
96        l.sw    4(r1), r3             
97        l.sw    8(r1), r4           
98        l.mfspr r3,r0,16             
99        l.mfspr r4,r0,32             
100        l.j default_exception_handler
101        l.nop   0                   
102
103       
104/* ---[ 0x700: Illegal insn exception ]---------------------------------- */
105        .org 0x700
106        /*DEFAULT_EXCEPTION_HANDLER*/
107        l.addi  r1, r1, -128         
108        l.sw    4(r1), r3             
109        l.sw    8(r1), r4           
110        l.mfspr r3,r0,16             
111        l.mfspr r4,r0,32             
112        l.j default_exception_handler
113        l.nop   0                   
114
115
116/* ---[ 0x800: External interrupt exception ]---------------------------- */
117        .org 0x800
118        /*DEFAULT_EXCEPTION_HANDLER*/
119        l.addi  r1, r1, -128         
120        l.sw    4(r1), r3             
121        l.sw    8(r1), r4           
122        l.mfspr r3,r0,16             
123        l.mfspr r4,r0,32             
124        l.j default_exception_handler
125        l.nop   0                   
126
127
128/* ---[ 0x900: DTLB miss exception ]------------------------------------- */
129        .org 0x900
130        /*DEFAULT_EXCEPTION_HANDLER*/
131        l.addi  r1, r1, -128         
132        l.sw    4(r1), r3             
133        l.sw    8(r1), r4           
134        l.mfspr r3,r0,16             
135        l.mfspr r4,r0,32             
136        l.j default_exception_handler
137        l.nop   0                   
138
139       
140/* ---[ 0xa00: ITLB miss exception ]------------------------------------- */
141        .org 0xa00
142        /*DEFAULT_EXCEPTION_HANDLER*/
143        l.addi  r1, r1, -128         
144        l.sw    4(r1), r3             
145        l.sw    8(r1), r4           
146        l.mfspr r3,r0,16             
147        l.mfspr r4,r0,32             
148        l.j default_exception_handler
149        l.nop   0                   
150
151       
152               
153/* ---[ 0xb00: Range exception ]----------------------------------------- */
154        .org 0xb00
155        /*DEFAULT_EXCEPTION_HANDLER*/
156        l.addi  r1, r1, -128         
157        l.sw    4(r1), r3             
158        l.sw    8(r1), r4           
159        l.mfspr r3,r0,16             
160        l.mfspr r4,r0,32             
161        l.j default_exception_handler
162        l.nop   0                   
163
164       
165
166/* ---[ 0xc00: Syscall exception ]--------------------------------------- */
167        .org 0xc00
168        /*DEFAULT_EXCEPTION_HANDLER*/
169        l.addi  r1, r1, -128         
170        l.sw    4(r1), r3             
171        l.sw    8(r1), r4           
172        l.mfspr r3,r0,16             
173        l.mfspr r4,r0,32             
174        l.j default_exception_handler
175        l.nop   0                   
176
177       
178
179/* ---[ 0xd00: Trap exception ]------------------------------------------ */
180        .org 0xd00
181        /*DEFAULT_EXCEPTION_HANDLER*/
182        l.addi  r1, r1, -128         
183        l.sw    4(r1), r3             
184        l.sw    8(r1), r4           
185        l.mfspr r3,r0,16             
186        l.mfspr r4,r0,32             
187        l.j default_exception_handler
188        l.nop   0                   
189
190       
191
192/* ---[ 0xe00: Trap exception ]------------------------------------------ */
193        .org 0xe00
194        /*DEFAULT_EXCEPTION_HANDLER*/
195        l.addi  r1, r1, -128         
196        l.sw    4(r1), r3             
197        l.sw    8(r1), r4           
198        l.mfspr r3,r0,16             
199        l.mfspr r4,r0,32             
200        l.j default_exception_handler
201        l.nop   0                   
202
203       
204       
205/* ---[ 0xf00: Reserved exceptions ]------------------------------------- */
206        .org 0xf00
207        /*DEFAULT_EXCEPTION_HANDLER*/
208        l.addi  r1, r1, -128         
209        l.sw    4(r1), r3             
210        l.sw    8(r1), r4           
211        l.mfspr r3,r0,16             
212        l.mfspr r4,r0,32             
213        l.j default_exception_handler
214        l.nop   0                   
215
216       
217        .org 0x1000
218        /*DEFAULT_EXCEPTION_HANDLER*/
219        l.addi  r1, r1, -128         
220        l.sw    4(r1), r3             
221        l.sw    8(r1), r4           
222        l.mfspr r3,r0,16             
223        l.mfspr r4,r0,32             
224        l.j default_exception_handler
225        l.nop   0                   
226
227       
228        .org 0x1100
229        /*DEFAULT_EXCEPTION_HANDLER*/
230        l.addi  r1, r1, -128         
231        l.sw    4(r1), r3             
232        l.sw    8(r1), r4           
233        l.mfspr r3,r0,16             
234        l.mfspr r4,r0,32             
235        l.j default_exception_handler
236        l.nop   0                   
237
238       
239        .org 0x1200
240        /*DEFAULT_EXCEPTION_HANDLER*/
241        l.addi  r1, r1, -128         
242        l.sw    4(r1), r3             
243        l.sw    8(r1), r4           
244        l.mfspr r3,r0,16             
245        l.mfspr r4,r0,32             
246        l.j default_exception_handler
247        l.nop   0                   
248
249       
250        .org 0x1300
251        /*DEFAULT_EXCEPTION_HANDLER*/
252        l.addi  r1, r1, -128         
253        l.sw    4(r1), r3             
254        l.sw    8(r1), r4           
255        l.mfspr r3,r0,16             
256        l.mfspr r4,r0,32             
257        l.j default_exception_handler
258        l.nop   0                   
259
260       
261        .org 0x1400
262        /*DEFAULT_EXCEPTION_HANDLER*/
263        l.addi  r1, r1, -128         
264        l.sw    4(r1), r3             
265        l.sw    8(r1), r4           
266        l.mfspr r3,r0,16             
267        l.mfspr r4,r0,32             
268        l.j default_exception_handler
269        l.nop   0                   
270
271       
272        .org 0x1500
273        /*DEFAULT_EXCEPTION_HANDLER*/
274        l.addi  r1, r1, -128         
275        l.sw    4(r1), r3             
276        l.sw    8(r1), r4           
277        l.mfspr r3,r0,16             
278        l.mfspr r4,r0,32             
279        l.j default_exception_handler
280        l.nop   0                   
281
282       
283        .org 0x1600
284        /*DEFAULT_EXCEPTION_HANDLER*/
285        l.addi  r1, r1, -128         
286        l.sw    4(r1), r3             
287        l.sw    8(r1), r4           
288        l.mfspr r3,r0,16             
289        l.mfspr r4,r0,32             
290        l.j default_exception_handler
291        l.nop   0                   
292
293       
294        .org 0x1700
295        /*DEFAULT_EXCEPTION_HANDLER*/
296        l.addi  r1, r1, -128         
297        l.sw    4(r1), r3             
298        l.sw    8(r1), r4           
299        l.mfspr r3,r0,16             
300        l.mfspr r4,r0,32             
301        l.j default_exception_handler
302        l.nop   0                   
303
304       
305        .org 0x1800
306        /*DEFAULT_EXCEPTION_HANDLER*/
307        l.addi  r1, r1, -128         
308        l.sw    4(r1), r3             
309        l.sw    8(r1), r4           
310        l.mfspr r3,r0,16             
311        l.mfspr r4,r0,32             
312        l.j default_exception_handler
313        l.nop   0                   
314
315       
316        .org 0x1900
317        /*DEFAULT_EXCEPTION_HANDLER*/
318        l.addi  r1, r1, -128         
319        l.sw    4(r1), r3             
320        l.sw    8(r1), r4           
321        l.mfspr r3,r0,16             
322        l.mfspr r4,r0,32             
323        l.j default_exception_handler
324        l.nop   0                   
325
326       
327        .org 0x1a00
328        /*DEFAULT_EXCEPTION_HANDLER*/
329        l.addi  r1, r1, -128         
330        l.sw    4(r1), r3             
331        l.sw    8(r1), r4           
332        l.mfspr r3,r0,16             
333        l.mfspr r4,r0,32             
334        l.j default_exception_handler
335        l.nop   0                   
336
337       
338        .org 0x1b00
339        /*DEFAULT_EXCEPTION_HANDLER*/
340        l.addi  r1, r1, -128         
341        l.sw    4(r1), r3             
342        l.sw    8(r1), r4           
343        l.mfspr r3,r0,16             
344        l.mfspr r4,r0,32             
345        l.j default_exception_handler
346        l.nop   0                   
347
348       
349        .org 0x1c00
350        /*DEFAULT_EXCEPTION_HANDLER*/
351        l.addi  r1, r1, -128         
352        l.sw    4(r1), r3             
353        l.sw    8(r1), r4           
354        l.mfspr r3,r0,16             
355        l.mfspr r4,r0,32             
356        l.j default_exception_handler
357        l.nop   0                   
358
359       
360        .org 0x1d00
361        /*DEFAULT_EXCEPTION_HANDLER*/
362        l.addi  r1, r1, -128         
363        l.sw    4(r1), r3             
364        l.sw    8(r1), r4           
365        l.mfspr r3,r0,16             
366        l.mfspr r4,r0,32             
367        l.j default_exception_handler
368        l.nop   0                   
369
370       
371        .org 0x1e00
372        /*DEFAULT_EXCEPTION_HANDLER*/
373        l.addi  r1, r1, -128         
374        l.sw    4(r1), r3             
375        l.sw    8(r1), r4           
376        l.mfspr r3,r0,16             
377        l.mfspr r4,r0,32             
378        l.j default_exception_handler
379        l.nop   0                   
380
381       
382        .org 0x1f00
383        /*DEFAULT_EXCEPTION_HANDLER*/
384        l.addi  r1, r1, -128         
385        l.sw    4(r1), r3             
386        l.sw    8(r1), r4           
387        l.mfspr r3,r0,16             
388        l.mfspr r4,r0,32             
389        l.j default_exception_handler
390        l.nop   0                   
391
392
393/* ========================================================= [ entry ] === */
394
395        .org 0x2000
396        .global _start
397       
398_start:
399        /* Initialise stack */
400
401        l.movhi r1,     hi(_stack)
402        l.ori   r1, r1, lo(_stack)
403        l.addi  r2, r0, -3                /* 0xFFFF_FFFC */
404
405        l.jal   _get_cpu_id               /* give the id of the cpu */
406        l.and   r1, r1, r2
407
408        l.movhi r4,     hi(_stack_alloc)
409        l.ori   r4, r4, lo(_stack_alloc)
410
411        l.mul   r4, r11,r4
412        l.sub   r1, r1 ,r4                /* each thread have a <<_stack>> with a size <<_stack_alloc>> */
413        l.or    r2, r1, r0                /* copy in frame_pointer register */
414
415        /* Clear BSS */
416/*
417        l.movhi r28,      hi(___bss_start)
418        l.ori   r28, r28, lo(___bss_start)
419        l.movhi r30,      hi(__end)
420        l.ori   r30, r30, lo(__end)
4211:
422        l.sw    (0)(r28), r0
423        l.sfltu r28, r30
424        l.bf    1b
425        l.addi  r28, r28, 4
426*/
427        /* Jump to main program entry point (argc = argv = 0) */
428        l.and   r3,r0,r0
429        l.jal   _main
430        l.and   r4,r0,r0
431       
432        /* If program exits, call exit routine */
433/*
434        l.addi  r3, r11, 0
435        l.jal   __exit
436        l.nop   0
437*/
438/* ====================================== [ default exception handler ] === */
439
440default_exception_handler:
441        l.sw    0x00(r1), r2
442        l.sw    0x0c(r1), r5
443        l.sw    0x10(r1), r6
444        l.sw    0x14(r1), r7
445        l.sw    0x18(r1), r8
446        l.sw    0x1c(r1), r9
447        l.sw    0x20(r1), r10
448        l.sw    0x24(r1), r11
449        l.sw    0x28(r1), r12
450        l.sw    0x2c(r1), r13
451        l.sw    0x30(r1), r14
452        l.sw    0x34(r1), r15
453        l.sw    0x38(r1), r16
454        l.sw    0x3c(r1), r17
455        l.sw    0x40(r1), r18
456        l.sw    0x44(r1), r19
457        l.sw    0x48(r1), r20
458        l.sw    0x4c(r1), r21
459        l.sw    0x50(r1), r22
460        l.sw    0x54(r1), r23
461        l.sw    0x58(r1), r24
462        l.sw    0x5c(r1), r25
463        l.sw    0x60(r1), r26
464        l.sw    0x64(r1), r27
465        l.sw    0x68(r1), r28
466        l.sw    0x6c(r1), r29
467        l.sw    0x70(r1), r30
468        l.sw    0x74(r1), r31
469        l.sw    0x78(r1), r32
470       
471        /*
472         * Jump to a handler (write in C by example)
473         */
474       
475        l.jal   _exception_handler
476        l.nop   0
477       
478        l.lwz   r2 , 0x00(r1)
479        l.lwz   r3 , 0x04(r1)
480        l.lwz   r4 , 0x08(r1)
481        l.lwz   r5 , 0x0c(r1)
482        l.lwz   r6 , 0x10(r1)
483        l.lwz   r7 , 0x14(r1)
484        l.lwz   r8 , 0x18(r1)
485        l.lwz   r9 , 0x1c(r1)
486        l.lwz   r10, 0x20(r1)
487        l.lwz   r11, 0x24(r1)
488        l.lwz   r12, 0x28(r1)
489        l.lwz   r13, 0x2c(r1)
490        l.lwz   r14, 0x30(r1)
491        l.lwz   r15, 0x34(r1)
492        l.lwz   r16, 0x38(r1)
493        l.lwz   r17, 0x3c(r1)
494        l.lwz   r18, 0x40(r1)
495        l.lwz   r19, 0x44(r1)
496        l.lwz   r20, 0x48(r1)
497        l.lwz   r21, 0x4c(r1)
498        l.lwz   r22, 0x50(r1)
499        l.lwz   r23, 0x54(r1)
500        l.lwz   r24, 0x58(r1)
501        l.lwz   r25, 0x5c(r1)
502        l.lwz   r26, 0x60(r1)
503        l.lwz   r27, 0x64(r1)
504        l.lwz   r28, 0x68(r1)
505        l.lwz   r29, 0x6c(r1)
506        l.lwz   r30, 0x70(r1)
507        l.lwz   r31, 0x74(r1)
508        l.lwz   r32, 0x78(r1)
509
510        l.addi  r1, r1, 128
511
512        l.rfe
513        l.nop   0
Note: See TracBrowser for help on using the repository browser.