OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_47/] [or1ksim/] [testbench/] [except_test_s.S] - Blame information for rev 519

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 519 simons
/* Support file for c based tests */
2
 
3
#include "spr_defs.h"
4
 
5
#define reset _main
6
 
7
        .global _except_basic
8
        .global _lo_dmmu_en
9
        .global _lo_immu_en
10
        .global _call
11
        .global _call_with_int
12
        .global _load_acc_32
13
        .global _load_acc_16
14
        .global _store_acc_32
15
        .global _store_acc_16
16
        .global _load_b_acc_32
17
        .global _trap
18
        .global _b_trap
19
        .global _range
20
        .global _b_range
21
        .global _int_trigger
22
        .global _int_loop
23
        .global _jump_back
24
 
25
        .section .stack
26
        .space 0x1000
27
_stack:
28
 
29
  .section .except
30
        .extern _reset_support
31
        .extern _c_reset
32
        .extern _excpt_buserr
33
        .extern _excpt_dpfault
34
        .extern _excpt_ipfault
35
        .extern _excpt_lpint
36
        .extern _excpt_align
37
        .extern _excpt_illinsn
38
        .extern _excpt_hpint
39
        .extern _excpt_dtlbmiss
40
        .extern _excpt_itlbmiss
41
        .extern _excpt_range
42
        .extern _excpt_syscall
43
        .extern _excpt_break
44
        .extern _excpt_trap
45
 
46
 
47
        .org    0x100
48
_reset_vector:
49
        l.nop
50
        l.nop
51
        l.addi  r2,r0,0x0
52
        l.addi  r3,r0,0x0
53
        l.addi  r4,r0,0x0
54
        l.addi  r5,r0,0x0
55
        l.addi  r6,r0,0x0
56
        l.addi  r7,r0,0x0
57
        l.addi  r8,r0,0x0
58
        l.addi  r9,r0,0x0
59
        l.addi  r10,r0,0x0
60
        l.addi  r11,r0,0x0
61
        l.addi  r12,r0,0x0
62
        l.addi  r13,r0,0x0
63
        l.addi  r14,r0,0x0
64
        l.addi  r15,r0,0x0
65
        l.addi  r16,r0,0x0
66
        l.addi  r17,r0,0x0
67
        l.addi  r18,r0,0x0
68
        l.addi  r19,r0,0x0
69
        l.addi  r20,r0,0x0
70
        l.addi  r21,r0,0x0
71
        l.addi  r22,r0,0x0
72
        l.addi  r23,r0,0x0
73
        l.addi  r24,r0,0x0
74
        l.addi  r25,r0,0x0
75
        l.addi  r26,r0,0x0
76
        l.addi  r27,r0,0x0
77
        l.addi  r28,r0,0x0
78
        l.addi  r29,r0,0x0
79
        l.addi  r30,r0,0x0
80
        l.addi  r31,r0,0x0
81
 
82
        l.movhi r1,hi(_stack)
83
        l.ori   r1,r1,lo(_stack)
84
 
85
        /* Check if this is RTL version */
86
        l.lbz   r3,0(r0)
87
        l.sfeqi r3,0xff
88
        l.bf    2f
89
        l.nop
90
        l.movhi r3,hi(_src_beg)
91
        l.ori   r3,r3,lo(_src_beg)
92
        l.movhi r4,hi(_dst_beg)
93
        l.ori   r4,r4,lo(_dst_beg)
94
        l.movhi r5,hi(_dst_end)
95
        l.ori   r5,r5,lo(_dst_end)
96
        l.sub   r5,r5,r4
97
        l.sfeqi r5,0
98
        l.bf    2f
99
        l.nop
100
1:      l.lwz   r6,0(r3)
101
        l.sw    0(r4),r6
102
        l.addi  r3,r3,4
103
        l.addi  r4,r4,4
104
        l.addi  r5,r5,-4
105
        l.sfgtsi r5,0
106
        l.bf    1b
107
        l.nop
108
 
109
2:
110
 
111
        l.movhi r2,hi(reset)
112
        l.ori   r2,r2,lo(reset)
113
        l.jr    r2
114
        l.nop
115
 
116
        .org    0x200
117
_buserr_vector:
118
        l.addi  r1,r1,-116
119
        l.sw    0x18(r1),r9
120
        l.jal   store_regs
121
        l.nop
122
 
123
        l.mfspr r3,r0,SPR_EPCR_BASE
124
        l.movhi r4,hi(_except_pc)
125
        l.ori   r4,r4,lo(_except_pc)
126
        l.sw    0(r4),r3
127
 
128
        l.mfspr r3,r0,SPR_EEAR_BASE
129
        l.movhi r4,hi(_except_ea)
130
        l.ori   r4,r4,lo(_except_ea)
131
        l.sw    0(r4),r3
132
 
133
        l.movhi r9,hi(end_except)
134
        l.ori   r9,r9,lo(end_except)
135
        l.movhi r10,hi(_excpt_buserr)
136
        l.ori   r10,r10,lo(_excpt_buserr)
137
        l.lwz   r10,0x0(r10)
138
        l.jr    r10
139
        l.nop
140
 
141
        .org    0x300
142
_dpfault_vector:
143
        l.addi  r1,r1,-116
144
        l.sw    0x18(r1),r9
145
        l.jal   store_regs
146
        l.nop
147
 
148
        l.mfspr r3,r0,SPR_EPCR_BASE
149
        l.movhi r4,hi(_except_pc)
150
        l.ori   r4,r4,lo(_except_pc)
151
        l.sw    0(r4),r3
152
 
153
        l.mfspr r3,r0,SPR_EEAR_BASE
154
        l.movhi r4,hi(_except_ea)
155
        l.ori   r4,r4,lo(_except_ea)
156
        l.sw    0(r4),r3
157
 
158
        l.movhi r9,hi(end_except)
159
        l.ori   r9,r9,lo(end_except)
160
        l.movhi r10,hi(_excpt_dpfault)
161
        l.ori   r10,r10,lo(_excpt_dpfault)
162
        l.lwz   r10,0(r10)
163
        l.jr    r10
164
        l.nop
165
 
166
        .org    0x400
167
_ipfault_vector:
168
        l.addi  r1,r1,-116
169
        l.sw    0x18(r1),r9
170
        l.jal   store_regs
171
        l.nop
172
 
173
        l.mfspr r3,r0,SPR_EPCR_BASE
174
        l.movhi r4,hi(_except_pc)
175
        l.ori   r4,r4,lo(_except_pc)
176
        l.sw    0(r4),r3
177
 
178
        l.mfspr r3,r0,SPR_EEAR_BASE
179
        l.movhi r4,hi(_except_ea)
180
        l.ori   r4,r4,lo(_except_ea)
181
        l.sw    0(r4),r3
182
 
183
        l.movhi r9,hi(end_except)
184
        l.ori   r9,r9,lo(end_except)
185
        l.movhi r10,hi(_excpt_ipfault)
186
        l.ori   r10,r10,lo(_excpt_ipfault)
187
        l.lwz   r10,0(r10)
188
        l.jr    r10
189
        l.nop
190
 
191
        .org    0x500
192
_lpint_vector:
193
        l.addi  r1,r1,-116
194
        l.sw    0x18(r1),r9
195
        l.jal   store_regs
196
        l.nop
197
 
198
        l.mfspr r3,r0,SPR_EPCR_BASE
199
        l.movhi r4,hi(_except_pc)
200
        l.ori   r4,r4,lo(_except_pc)
201
        l.sw    0(r4),r3
202
 
203
        l.mfspr r3,r0,SPR_EEAR_BASE
204
        l.movhi r4,hi(_except_ea)
205
        l.ori   r4,r4,lo(_except_ea)
206
        l.sw    0(r4),r3
207
 
208
        l.movhi r9,hi(end_except)
209
        l.ori   r9,r9,lo(end_except)
210
        l.movhi r10,hi(_excpt_lpint)
211
        l.ori   r10,r10,lo(_excpt_lpint)
212
        l.lwz   r10,0(r10)
213
        l.jr    r10
214
        l.nop
215
 
216
        .org    0x600
217
_align_vector:
218
        l.addi  r1,r1,-116
219
        l.sw    0x18(r1),r9
220
        l.jal   store_regs
221
        l.nop
222
 
223
        l.mfspr r3,r0,SPR_EPCR_BASE
224
        l.movhi r4,hi(_except_pc)
225
        l.ori   r4,r4,lo(_except_pc)
226
        l.sw    0(r4),r3
227
 
228
        l.mfspr r3,r0,SPR_EEAR_BASE
229
        l.movhi r4,hi(_except_ea)
230
        l.ori   r4,r4,lo(_except_ea)
231
        l.sw    0(r4),r3
232
 
233
        l.movhi r9,hi(end_except)
234
        l.ori   r9,r9,lo(end_except)
235
        l.movhi r10,hi(_excpt_align)
236
        l.ori   r10,r10,lo(_excpt_align)
237
        l.lwz   r10,0(r10)
238
        l.jr    r10
239
        l.nop
240
 
241
        .org    0x700
242
_illinsn_vector:
243
        l.addi  r1,r1,-116
244
        l.sw    0x18(r1),r9
245
        l.jal   store_regs
246
        l.nop
247
 
248
        l.mfspr r3,r0,SPR_EPCR_BASE
249
        l.movhi r4,hi(_except_pc)
250
        l.ori   r4,r4,lo(_except_pc)
251
        l.sw    0(r4),r3
252
 
253
        l.mfspr r3,r0,SPR_EEAR_BASE
254
        l.movhi r4,hi(_except_ea)
255
        l.ori   r4,r4,lo(_except_ea)
256
        l.sw    0(r4),r3
257
 
258
        l.movhi r9,hi(end_except)
259
        l.ori   r9,r9,lo(end_except)
260
        l.movhi r10,hi(_excpt_illinsn)
261
        l.ori   r10,r10,lo(_excpt_illinsn)
262
        l.lwz   r10,0(r10)
263
        l.jr    r10
264
        l.nop
265
 
266
        .org    0x800
267
_hpint_vector:
268
        l.addi  r1,r1,-116
269
        l.sw    0x18(r1),r9
270
        l.jal   store_regs
271
        l.nop
272
 
273
        l.mfspr r3,r0,SPR_EPCR_BASE
274
        l.movhi r4,hi(_except_pc)
275
        l.ori   r4,r4,lo(_except_pc)
276
        l.sw    0(r4),r3
277
 
278
        l.mfspr r3,r0,SPR_EEAR_BASE
279
        l.movhi r4,hi(_except_ea)
280
        l.ori   r4,r4,lo(_except_ea)
281
        l.sw    0(r4),r3
282
 
283
        l.movhi r9,hi(end_except)
284
        l.ori   r9,r9,lo(end_except)
285
        l.movhi r10,hi(_excpt_hpint)
286
        l.ori   r10,r10,lo(_excpt_hpint)
287
        l.lwz   r10,0(r10)
288
        l.jr    r10
289
        l.nop
290
 
291
        .org    0x900
292
_dtlbmiss_vector:
293
        l.addi  r1,r1,-116
294
        l.sw    0x18(r1),r9
295
        l.jal   store_regs
296
        l.nop
297
 
298
        l.mfspr r3,r0,SPR_EPCR_BASE
299
        l.movhi r4,hi(_except_pc)
300
        l.ori   r4,r4,lo(_except_pc)
301
        l.sw    0(r4),r3
302
 
303
        l.mfspr r3,r0,SPR_EEAR_BASE
304
        l.movhi r4,hi(_except_ea)
305
        l.ori   r4,r4,lo(_except_ea)
306
        l.sw    0(r4),r3
307
 
308
        l.movhi r9,hi(end_except)
309
        l.ori   r9,r9,lo(end_except)
310
        l.movhi r10,hi(_excpt_dtlbmiss)
311
        l.ori   r10,r10,lo(_excpt_dtlbmiss)
312
        l.lwz   r10,0(r10)
313
        l.jr    r10
314
        l.nop
315
 
316
        .org    0xa00
317
_itlbmiss_vector:
318
        l.addi  r1,r1,-116
319
        l.sw    0x18(r1),r9
320
        l.jal   store_regs
321
        l.nop
322
 
323
        l.mfspr r3,r0,SPR_EPCR_BASE
324
        l.movhi r4,hi(_except_pc)
325
        l.ori   r4,r4,lo(_except_pc)
326
        l.sw    0(r4),r3
327
 
328
        l.mfspr r3,r0,SPR_EEAR_BASE
329
        l.movhi r4,hi(_except_ea)
330
        l.ori   r4,r4,lo(_except_ea)
331
        l.sw    0(r4),r3
332
 
333
        l.movhi r9,hi(end_except)
334
        l.ori   r9,r9,lo(end_except)
335
        l.movhi r10,hi(_excpt_itlbmiss)
336
        l.ori   r10,r10,lo(_excpt_itlbmiss)
337
        l.lwz   r10,0(r10)
338
        l.jr    r10
339
        l.nop
340
 
341
        .org    0xb00
342
_range_vector:
343
        l.addi  r1,r1,-116
344
        l.sw    0x18(r1),r9
345
        l.jal   store_regs
346
        l.nop
347
 
348
        l.mfspr r3,r0,SPR_EPCR_BASE
349
        l.movhi r4,hi(_except_pc)
350
        l.ori   r4,r4,lo(_except_pc)
351
        l.sw    0(r4),r3
352
 
353
        l.mfspr r3,r0,SPR_EEAR_BASE
354
        l.movhi r4,hi(_except_ea)
355
        l.ori   r4,r4,lo(_except_ea)
356
        l.sw    0(r4),r3
357
 
358
        l.movhi r9,hi(end_except)
359
        l.ori   r9,r9,lo(end_except)
360
        l.movhi r10,hi(_excpt_range)
361
        l.ori   r10,r10,lo(_excpt_range)
362
        l.lwz   r10,0(r10)
363
        l.jr    r10
364
        l.nop
365
 
366
        .org    0xc00
367
_syscall_vector:
368
        l.addi  r3,r3,4
369
 
370
        l.mfspr r4,r0,SPR_SR
371
        l.andi  r4,r4,7
372
        l.add   r6,r0,r4
373
 
374
        l.mfspr r4,r0,SPR_EPCR_BASE
375
        l.movhi r5,hi(_sys1)
376
        l.ori r5,r5,lo(_sys1)
377
        l.sub r5,r4,r5
378
 
379
        l.mfspr r4,r0,SPR_ESR_BASE  /* ESR - set supvisor mode */
380
        l.ori r4,r4,1
381
        l.mtspr r0,r4,SPR_ESR_BASE
382
 
383
        l.movhi r4,hi(_sys2)
384
        l.ori r4,r4,lo(_sys2)
385
        l.mtspr r0,r4,SPR_EPCR_BASE
386
 
387
        l.rfe
388
        l.addi  r3,r3,8
389
 
390
        .org    0xd00
391
_break_vector:
392
        l.addi  r1,r1,-116
393
        l.sw    0x18(r1),r9
394
        l.jal   store_regs
395
        l.nop
396
 
397
        l.mfspr r3,r0,SPR_EPCR_BASE
398
        l.movhi r4,hi(_except_pc)
399
        l.ori   r4,r4,lo(_except_pc)
400
        l.sw    0(r4),r3
401
 
402
        l.mfspr r3,r0,SPR_EEAR_BASE
403
        l.movhi r4,hi(_except_ea)
404
        l.ori   r4,r4,lo(_except_ea)
405
        l.sw    0(r4),r3
406
 
407
        l.movhi r9,hi(end_except)
408
        l.ori   r9,r9,lo(end_except)
409
        l.movhi r10,hi(_excpt_break)
410
        l.ori   r10,r10,lo(_excpt_break)
411
        l.lwz   r10,0(r10)
412
        l.jr    r10
413
        l.nop
414
 
415
        .org    0xe00
416
_trap_vector:
417
        l.addi  r1,r1,-116
418
        l.sw    0x18(r1),r9
419
        l.jal   store_regs
420
        l.nop
421
 
422
        l.mfspr r3,r0,SPR_EPCR_BASE
423
        l.movhi r4,hi(_except_pc)
424
        l.ori   r4,r4,lo(_except_pc)
425
        l.sw    0(r4),r3
426
 
427
        l.mfspr r3,r0,SPR_EEAR_BASE
428
        l.movhi r4,hi(_except_ea)
429
        l.ori   r4,r4,lo(_except_ea)
430
        l.sw    0(r4),r3
431
 
432
        l.movhi r9,hi(end_except)
433
        l.ori   r9,r9,lo(end_except)
434
        l.movhi r10,hi(_excpt_trap)
435
        l.ori   r10,r10,lo(_excpt_trap)
436
        l.lwz   r10,0(r10)
437
        l.jr    r10
438
        l.nop
439
 
440
store_regs:
441
        l.sw    0x00(r1),r3
442
        l.sw    0x04(r1),r4
443
        l.sw    0x08(r1),r5
444
        l.sw    0x0c(r1),r6
445
        l.sw    0x10(r1),r7
446
        l.sw    0x14(r1),r8
447
        l.sw    0x1c(r1),r10
448
        l.sw    0x20(r1),r11
449
        l.sw    0x24(r1),r12
450
        l.sw    0x28(r1),r13
451
        l.sw    0x2c(r1),r14
452
        l.sw    0x30(r1),r15
453
        l.sw    0x34(r1),r16
454
        l.sw    0x38(r1),r17
455
        l.sw    0x3c(r1),r18
456
        l.sw    0x40(r1),r19
457
        l.sw    0x44(r1),r20
458
        l.sw    0x48(r1),r21
459
        l.sw    0x4c(r1),r22
460
        l.sw    0x50(r1),r23
461
        l.sw    0x54(r1),r24
462
        l.sw    0x58(r1),r25
463
        l.sw    0x5c(r1),r26
464
        l.sw    0x60(r1),r27
465
        l.sw    0x64(r1),r28
466
        l.sw    0x68(r1),r29
467
        l.sw    0x6c(r1),r30
468
        l.sw    0x70(r1),r31
469
        l.jr    r9
470
        l.nop
471
 
472
end_except:
473
        l.lwz   r3,0x00(r1)
474
        l.lwz   r4,0x04(r1)
475
        l.lwz   r5,0x08(r1)
476
        l.lwz   r6,0x0c(r1)
477
        l.lwz   r7,0x10(r1)
478
        l.lwz   r8,0x14(r1)
479
        l.lwz   r9,0x18(r1)
480
        l.lwz   r10,0x1c(r1)
481
        l.lwz   r11,0x20(r1)
482
        l.lwz   r12,0x24(r1)
483
        l.lwz   r13,0x28(r1)
484
        l.lwz   r14,0x2c(r1)
485
        l.lwz   r15,0x30(r1)
486
        l.lwz   r16,0x34(r1)
487
        l.lwz   r17,0x38(r1)
488
        l.lwz   r18,0x3c(r1)
489
        l.lwz   r19,0x40(r1)
490
        l.lwz   r20,0x44(r1)
491
        l.lwz   r21,0x48(r1)
492
        l.lwz   r22,0x4c(r1)
493
        l.lwz   r23,0x50(r1)
494
        l.lwz   r24,0x54(r1)
495
        l.lwz   r25,0x58(r1)
496
        l.lwz   r26,0x5c(r1)
497
        l.lwz   r27,0x60(r1)
498
        l.lwz   r28,0x64(r1)
499
        l.lwz   r29,0x68(r1)
500
        l.lwz   r30,0x6c(r1)
501
        l.lwz   r31,0x70(r1)
502
        l.addi  r1,r1,116
503
        l.mtspr r0,r9,SPR_EPCR_BASE
504
        l.rfe
505
        l.nop
506
 
507
  .section .text
508
 
509
_except_basic:
510
_sys1:
511
        l.addi  r3,r0,-2  /* Enable exceptiom recognition and external interrupt,set user mode */
512
        l.mfspr r4,r0,SPR_SR
513
        l.and   r4,r4,r3
514
        l.ori   r4,r4,6
515
        l.mtspr r0,r4,SPR_SR
516
 
517
        l.addi  r3,r0,0
518
        l.sys   1
519
        l.addi  r3,r3,2
520
 
521
_sys2:
522
        l.addi  r11,r0,0
523
 
524
        l.mfspr r4,r0,SPR_SR  /* Check SR */
525
        l.andi  r4,r4,7
526
        l.sfeqi r4,7
527
        l.bf    1f
528
        l.nop
529
        l.addi  r11,r11,1
530
1:
531
        l.sfeqi r3,4          /* Check if l.sys or l.rfe has delay slot */
532
        l.bf    1f
533
        l.nop
534
        l.addi  r11,r11,2
535
1:
536
        l.sfeqi r5,0x1c       /* Check the EPCR */
537
        l.bf    1f
538
        l.nop
539
        l.addi  r11,r11,4
540
1:
541
        l.sfeqi r6,3          /* Check the SR when exception is taken */
542
        l.bf    1f
543
        l.nop
544
        l.addi  r11,r11,8
545
1:
546
        l.jr    r9
547
        l.nop
548
 
549
_lo_dmmu_en:
550
        l.mfspr r3,r0,SPR_SR
551
        l.ori   r3,r3,SPR_SR_EXR
552
        l.ori   r3,r3,SPR_SR_DME
553
        l.mtspr r0,r3,SPR_ESR_BASE
554
        l.mtspr r0,r9,SPR_EPCR_BASE
555
        l.rfe
556
        l.nop
557
 
558
_lo_immu_en:
559
        l.mfspr r3,r0,SPR_SR
560
        l.ori   r3,r3,SPR_SR_EXR
561
        l.ori   r3,r3,SPR_SR_IME
562
        l.mtspr r0,r3,SPR_ESR_BASE
563
        l.mtspr r0,r9,SPR_EPCR_BASE
564
        l.rfe
565
        l.nop
566
 
567
_call:
568
        l.jr    r3
569
        l.nop
570
 
571
_call_with_int:
572
        l.mfspr r8,r0,SPR_SR
573
        l.ori   r8,r8,SPR_SR_EIR
574
        l.mtspr r0,r8,SPR_ESR_BASE
575
        l.mtspr r0,r3,SPR_EPCR_BASE
576
        l.rfe
577
 
578
_load_acc_32:
579
        l.movhi r11,hi(0x12345678)
580
        l.ori   r11,r11,lo(0x12345678)
581
        l.lwz   r11,0(r4)
582
        l.jr    r9
583
        l.nop
584
 
585
_load_acc_16:
586
        l.movhi r11,hi(0x12345678)
587
        l.ori   r11,r11,lo(0x12345678)
588
        l.lhz   r11,0(r4)
589
        l.jr    r9
590
        l.nop
591
 
592
_store_acc_32:
593
        l.movhi r3,hi(0x12345678)
594
        l.ori   r3,r3,lo(0x12345678)
595
        l.sw    0(r4),r3
596
        l.jr    r9
597
        l.nop
598
 
599
_store_acc_16:
600
        l.movhi r3,hi(0x12345678)
601
        l.ori   r3,r3,lo(0x12345678)
602
        l.sh    0(r4),r3
603
        l.jr    r9
604
        l.nop
605
 
606
_load_b_acc_32:
607
        l.movhi r11,hi(0x12345678)
608
        l.ori   r11,r11,lo(0x12345678)
609
        l.jr    r9
610
        l.lwz   r11,0(r4)
611
 
612
_b_trap:
613
        l.jr    r9
614
_trap:
615
        l.trap  1
616
        l.nop
617
 
618
_b_range:
619
        l.jr    r9
620
_range:
621
        l.addi  r3,r0,-1
622
        l.nop
623
 
624
_int_trigger:
625
        l.addi  r11,r0,0
626
        l.mfspr r3,r0,SPR_SR
627
        l.ori   r3,r3,SPR_SR_EIR
628
        l.mtspr r0,r3,SPR_SR
629
        l.addi  r11,r11,1
630
 
631
_int_loop:
632
        l.j     _int_loop
633
        l.lwz   r5,0(r4);
634
 
635
_jump_back:
636
        l.addi  r11,r0,0
637
        l.jr    r9
638
        l.addi  r11,r11,1
639
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.