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

Subversion Repositories mips_enhanced

[/] [mips_enhanced/] [trunk/] [grlib-gpl-1.0.19-b3188/] [software/] [leon3/] [regtest.S] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dimamali
 
2
        .text
3
        .align 4
4
        .global _regtest, regtest
5
        .proc   04
6
 
7
_regtest:
8
regtest:
9
 
10
 
11
#ifndef _FLAT
12
        save %sp, -96, %sp
13
#endif
14
 
15
# do jmp/jmpl pipeline tests
16
 
17
        set  0, %o2
18
        set  b1, %o0
19
        set  b1+4, %o1
20
        set  b2, %o3
21
        set  b2+4, %o4
22
 
23
        jmpl  %o0, %o1
24
        jmp  %o1
25
        ba   err1
26
b1:
27
        jmp  %o3
28
        jmp  %o4
29
        ba   err1
30
b2:
31
        add %o2, 1, %o2
32
        add %o2, 1, %o2
33
        subcc %o2, 3, %g0
34
        bne err1
35
        nop
36
 
37
#ifdef LEON2
38
        set     0x80000024, %l2
39
        ld      [%l2], %l2
40
        srl     %l2, 20, %g5
41
        and     %g5, 0x1f, %g5
42
        ba 2f
43
        mov     %g5, %g6
44
#else
45
!       ba 1f
46
 
47
 
48
!       mov %g0, %asr16
49
!       nop; nop; nop
50
        mov %asr16, %g3
51
        srl %g3, 14, %g6
52
        andcc %g6, 7, %g6
53
        subcc %g6, 0, %g0
54
        be 1f                   ! no FT
55
        nop
56
        srl %g3, 11, %l7
57
        and %l7, 0x7, %l7
58
        subcc %l7, 0, %g0       ! error counter should be 0
59
        bne 1f
60
        nop
61
        subcc %g6, 2, %g0
62
        bne ft1                 ! only test if IUFT = 2
63
        nop
64
 
65
        set 0x40000000, %l2
66
        ldd [%l2], %l2          ! pre-load dcache
67
        set 0x40000000, %l2
68
        set 0x40000104, %l4
69
        mov %l2, %l3
70
        mov %l2, %l5
71
        mov %l4, %l6
72
        mov 0x46, %asr16        ! single bit error in byte 0
73
        mov %g0, %l2
74
        mov %g0, %l5
75
        nop;
76
        mov 0x4E, %asr16        ! double bit error in byte 0 & 3
77
        mov 0x100, %l4
78
        nop;
79
        mov %g0, %asr16         ! test mode off
80
        nop; nop;
81
 
82
        std %l4, [%l2+0x30]
83
 
84
        subcc %l2, %l3, %g1     ! %l3 should be 0 (corrected)
85
        bne err1
86
        subcc %l4, %l6, %g1     ! %l6 should be 0 (corrected)
87
        bne err1
88
        nop
89
        nop; nop                ! wait until error counters are updated
90
        mov %asr16, %g3
91
        srl %g3, 11, %g6
92
        andcc %g6, 0x7, %g6
93
        subcc %g6, 5, %g6
94
        bne err1                ! error counter should be 4
95
        mov %g0, %asr16         ! test mode off
96
        nop; nop; nop
97
        ldd [%l2+0x30], %l4
98
        subcc %l4, %l6, %g1     ! %l3 should be 0 (corrected)
99
        bne err1
100
        subcc %l5, %l2, %g1     ! %l6 should be 0 (corrected)
101
        mov %g0, %l2            ! clear remaining error
102
        bne err1
103
        nop; nop                ! wait until error counters are updated
104
        mov %asr16, %g3
105
        srl %g3, 11, %g6
106
        andcc %g6, 0x7, %g6
107
        subcc %g6, 3, %g6
108
        bne err1                ! error counter should be 4
109
        nop
110
 
111
 
112
        ba 1f
113
        nop
114
 
115
ft1:
116
        subcc %g6, 1, %g0
117
        bne ft3                 ! only test if IUFT = 1
118
 
119
        set 0x40000000, %l2
120
        ldd [%l2], %l2          ! pre-load dcache
121
        set 0x40000000, %l2
122
        set 0x40000104, %l4
123
        mov %l2, %l3
124
        mov %l2, %l5
125
        mov %l4, %l6
126
        mov 0x46, %asr16        ! single bit error in byte 0
127
        mov %g0, %l2
128
        mov %g0, %l5
129
        nop;
130
        mov 0x4E, %asr16        ! double bit error in byte 0 & 3
131
        mov 0x100, %l4
132
        nop;
133
        mov %g0, %asr16         ! test mode off
134
        nop; nop; nop
135
 
136
        std %l4, [%l2]
137
 
138
        subcc %l2, %l3, %g1     ! %l3 should be 0 (corrected)
139
        bne err1
140
        subcc %l4, %l6, %g1     ! %l6 should be 0 (corrected)
141
        bne err1
142
        nop; nop                ! wait until error counters are updated
143
        mov %asr16, %g3
144
        srl %g3, 11, %g6
145
        andcc %g6, 0x7, %g6
146
        subcc %g6, 2, %g6
147
        bne err1                ! error counter should be 2
148
        nop
149
        ba 1f
150
        nop
151
 
152
 
153
ft3:
154
        subcc %g6, 3, %g0
155
        bne 1f                  ! only test if IUFT = 3
156
        mov %g0, %l3
157
        set 0xe, %l1            ! test mode enable, xor lsb of check bits
158
        mov %l1, %asr16         ! regfile EDAC test mode enable
159
        mov %g0, %l3
160
        mov %g0, %asr16
161
        or %l3, 0, %l4
162
        mov %asr16, %l5
163
        nop
164
        or %l3, 0, %l6
165
        nop
166
        mov %asr16, %l7
167
        subcc %l4, 0, %g0       ! %l4 should be zero
168
        bne err1
169
        andcc %l5, 0xe00, %l5   ! data-forwarding should not trigger EDAC error
170
        subcc %l5, %g0, %g0
171
        bne err1
172
        subcc %l6, 0, %g0       ! %l6 should be 0 (corrected)
173
        bne err1
174
        srl %l7, 11, %l7
175
        and %l7, 0x7, %l7
176
        subcc %l7, 1, %g0       ! error counter should be incremented
177
        bne err1
178
        nop
179
 
180
        mov %g0, %l0            ! correctable EDAC error in LD
181
        mov %l1, %asr16
182
        mov %g0, %l3
183
        mov %g0, %asr16
184
        ldd [%g0], %l4
185
        mov %g0, %l6
186
        mov %g0, %l7
187
        ld [%l3], %l6
188
        ld [%l3 + 4], %l7
189
        cmp %l4, %l6
190
        bne err1
191
        cmp %l5, %l7
192
        bne err1
193
        nop
194
        mov %asr16, %l2
195
        srl %l2, 11, %l2
196
        and %l2, 0x7, %l2
197
        subcc %l2, 1, %g0       ! error counter should be incremented
198
        bne err1
199
        nop
200
 
201
        mov %g0, %l0            ! 2 correctable EDAC errors in LD
202
        mov %l1, %asr16
203
        mov %g0, %l3
204
        mov %g0, %asr16
205
        set 0xa, %l1            ! test mode enable, xor lsb of check bits
206
        mov %l1, %asr16
207
        mov %g0, %l2
208
        mov %g0, %asr16
209
        ldd [%g0], %l4
210
        mov %g0, %l6
211
        mov %g0, %l7
212
        ld [%l3 + %l2], %l6
213
        ld [%l3 + 4], %l7
214
        cmp %l4, %l6
215
        bne err1
216
        cmp %l5, %l7
217
        bne err1
218
        nop
219
        mov %asr16, %l2
220
        srl %l2, 11, %l2
221
        and %l2, 0x7, %l2
222
        subcc %l2, 2, %g0       ! error counter should be incremented
223
        bl err1
224
        nop
225
 
226
!       set 0x40000000, %l0             ! 4 correctable EDAC errors in STD
227
        set ftbuf, %l0          ! 4 correctable EDAC errors in STD
228
        ldd [%l0], %l6
229
!       set 0x41000000, %l0
230
        add %l0, 8, %l0
231
        ldd [%l0], %l4
232
        mov %l1, %asr16
233
        mov %g0, %l3
234
        mov %g0, %asr16
235
        set 0xe, %l1            ! test mode enable, xor lsb of check bits
236
        mov %l1, %asr16
237
        mov %l0, %l2
238
        mov %g0, %l6
239
        mov %g0, %l7
240
        mov %g0, %asr16
241
        nop; nop
242
        std %l6, [%l2 + %l3]
243
        mov %g0, %l6
244
        mov %g0, %l7
245
        ldd [%l3 + %l2], %l4
246
        cmp %l4, %l6
247
        bne err1
248
        cmp %l5, %l7
249
        bne err1
250
        nop
251
        mov %asr16, %l2
252
        srl %l2, 11, %l2
253
        and %l2, 0x7, %l2
254
        subcc %l2, 4, %g0       ! error counter should be incremented
255
        bne err1
256
        nop
257
        ba 1f
258
        nop
259
 
260
        ! flush all register windows (maximum 32)
261
1:
262
        mov     %asr17, %g5
263
        and     %g5, 0x1f, %g5
264
        subcc   %g5, 1, %g0
265
        be      4f
266
        mov     %g5, %g6
267
#endif
268
2:
269
        save %sp, -96, %sp
270
        subcc   %g5, 1, %g5
271
        bge     2b
272
        nop
273
3:
274
        restore
275
        subcc   %g6, 1, %g6
276
        bge     3b
277
        nop
278
 
279
        ! save global and input registers
280
4:
281
        nop; nop
282
        sub     %sp, 128, %l0
283
        andn    %l0, 0x7, %l0
284
        mov     %l0, %g7
285
        mov     %psr, %l1
286
        st      %l1, [%l0]
287
        st      %g1, [%l0+4]
288
        std     %g2, [%l0+8]
289
        std     %g4, [%l0+16]
290
        std     %g6, [%l0+24]
291
        std     %i0, [%l0+32]
292
        std     %i2, [%l0+40]
293
        std     %i4, [%l0+48]
294
        std     %i6, [%l0+56]
295
        std     %o0, [%l0+64]
296
        std     %o2, [%l0+72]
297
        std     %o4, [%l0+80]
298
        std     %o6, [%l0+88]
299
        mov     %wim, %l2
300
        st      %l2, [%l0+96]
301
 
302
        ! test gloabal registers
303
 
304
        mov     8, %g0
305
        mov     1, %g1
306
        mov     2, %g2
307
        mov     3, %g3
308
        mov     4, %g4
309
        mov     5, %g5
310
        mov     6, %g6
311
!       mov     7, %g7
312
        mov     %g0, %wim
313
        andn    %l1, 0x1f, %l2
314
        mov     %l2, %psr
315
        nop; nop; nop
316
 
317
        ! fill all registers
318
        set     0x01010101, %g1
319
        mov     %g0, %g2
320
        mov     %g0, %g3
321
#ifdef LEON2
322
        set     0x80000024, %g4
323
        ld      [%g4], %g4
324
        srl     %g4, 20, %g4
325
        and     %g4, 0x1f, %g4
326
#else
327
        mov     %asr17, %g4
328
        and     %g4, 0x1f, %g4
329
#endif
330
        mov     %g4, %g3
331
4:
332
        mov     %g2, %l0
333
        add     %g1, %g2, %g2
334
        mov     %g2, %l1
335
        add     %g1, %g2, %g2
336
        mov     %g2, %l2
337
        add     %g1, %g2, %g2
338
        mov     %g2, %l3
339
        add     %g1, %g2, %g2
340
        mov     %g2, %l4
341
        add     %g1, %g2, %g2
342
        mov     %g2, %l5
343
        add     %g1, %g2, %g2
344
        mov     %g2, %l6
345
        add     %g1, %g2, %g2
346
        mov     %g2, %l7
347
        add     %g1, %g2, %g2
348
        mov     %g2, %o0
349
        add     %g1, %g2, %g2
350
        mov     %g2, %o1
351
        add     %g1, %g2, %g2
352
        mov     %g2, %o2
353
        add     %g1, %g2, %g2
354
        mov     %g2, %o3
355
        add     %g1, %g2, %g2
356
        mov     %g2, %o4
357
        add     %g1, %g2, %g2
358
        mov     %g2, %o5
359
        add     %g1, %g2, %g2
360
        mov     %g2, %o6
361
        add     %g1, %g2, %g2
362
        mov     %g2, %o7
363
        add     %g1, %g2, %g2
364
        save
365
        subcc   %g3, 1, %g3
366
        bge     4b
367
        nop
368
 
369
        ! check values
370
 
371
        set     0x01010101, %g1
372
        mov     %g0, %g2
373
        mov     %g4, %g3
374
5:
375
        cmp     %l0, %g2
376
        bne     fail
377
        add     %g1, %g2, %g2
378
        cmp     %l1, %g2
379
        bne     fail
380
        add     %g1, %g2, %g2
381
        cmp     %l2, %g2
382
        bne     fail
383
        add     %g1, %g2, %g2
384
        cmp     %l3, %g2
385
        bne     fail
386
        add     %g1, %g2, %g2
387
        cmp     %l4, %g2
388
        bne     fail
389
        add     %g1, %g2, %g2
390
        cmp     %l5, %g2
391
        bne     fail
392
        add     %g1, %g2, %g2
393
        cmp     %l6, %g2
394
        bne     fail
395
        add     %g1, %g2, %g2
396
        cmp     %l7, %g2
397
        bne     fail
398
        add     %g1, %g2, %g2
399
        cmp     %o0, %g2
400
        bne     fail
401
        add     %g1, %g2, %g2
402
        cmp     %o1, %g2
403
        bne     fail
404
        add     %g1, %g2, %g2
405
        cmp     %o2, %g2
406
        bne     fail
407
        add     %g1, %g2, %g2
408
        cmp     %o3, %g2
409
        bne     fail
410
        add     %g1, %g2, %g2
411
        cmp     %o4, %g2
412
        bne     fail
413
        add     %g1, %g2, %g2
414
        cmp     %o5, %g2
415
        bne     fail
416
        add     %g1, %g2, %g2
417
        cmp     %o6, %g2
418
        bne     fail
419
        add     %g1, %g2, %g2
420
        cmp     %o7, %g2
421
        bne     fail
422
        add     %g1, %g2, %g2
423
 
424
        save
425
        subcc   %g3, 1, %g3
426
        bge     5b
427
        nop
428
 
429
 
430
 
431
        subcc   %g0, 0, %g0
432
        bne     fail
433
        subcc   %g3, -1, %g0
434
        bne     fail
435
        subcc   %g5, 5, %g0
436
        bne     fail
437
        subcc   %g6, 6, %g0
438
        bne     fail
439
!       subcc   %g7, 7, %g0
440
!       bne     fail
441
        nop
442
 
443
testok:
444
        mov     %g7, %l0
445
        ba      exit
446
        st      %g0, [%l0+32]
447
fail:
448
        mov     %g7, %l0
449
        mov     1, %o0
450
        ba      exit
451
        st      %o0, [%l0+32]
452
 
453
exit:
454
 
455
        ! restore state
456
 
457
        mov     %g7, %g1
458
        ld      [%g1], %g2
459
        mov     %g2, %psr
460
        nop; nop; nop
461
        ldd     [%g1+8], %g2
462
        ldd     [%g1+16], %g4
463
        ldd     [%g1+24], %g6
464
        ldd     [%g1+32], %i0
465
        ldd     [%g1+40], %i2
466
        ldd     [%g1+48], %i4
467
        ldd     [%g1+56], %i6
468
 
469
        ldd     [%g1+64], %o0
470
        ldd     [%g1+72], %o2
471
        ldd     [%g1+80], %o4
472
        ldd     [%g1+88], %o6
473
 
474
        ld      [%g1+96], %l2
475
        ld      [%g1+4], %g1
476
        mov     %l2, %wim
477
        nop; nop; nop
478
 
479
last:
480
 
481
        mov     %g7, %l0
482
#ifndef _FLAT
483
        ld      [%l0+32], %i0
484
        ret
485
        restore
486
#else
487
        retl
488
        ld      [%l0+32], %o0
489
#endif
490
 
491
err1:
492
        ba last
493
        mov %g0, %i0
494
 
495
        .align 8
496
!.common   regbuf, 168,"bss"
497
        .data
498
ftbuf:
499
        .word 0
500
        .word 1
501
        .word 2
502
        .word 3
503
 
504
.align 32
505
        .text

powered by: WebSVN 2.1.0

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