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

Subversion Repositories ion

[/] [ion/] [trunk/] [src/] [opcodes/] [opcodes.s] - Blame information for rev 148

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

Line No. Rev Author Line
1 2 ja_rd
################################################################################
2 4 ja_rd
# opcode.s -- MIPS opcode tester for Ion project
3 2 ja_rd
#-------------------------------------------------------------------------------
4
# ORIGINAL AUTHOR: Steve Rhoads (rhoadss@yahoo.com) -- 1/10/01
5
#
6
# This file is an edited version of 'opcodes.asm', which is part of the Plasma
7
# project (http://opencores.org/project,plasma).
8
# COPYRIGHT: Software placed into the public domain by the original author.
9
# Software 'as is' without warranty.  Author liable for nothing.
10 4 ja_rd
#
11 2 ja_rd
#-------------------------------------------------------------------------------
12 4 ja_rd
# This assembly file tests all of the opcodes supported by the Ion core.
13 2 ja_rd
# This test assumes that address 0x20000000 is the UART write register.
14
# Successful tests will print out "A" or "AB" or "ABC" or ....
15
# Missing letters or letters out of order indicate a failure.
16 14 ja_rd
#
17 2 ja_rd
#-------------------------------------------------------------------------------
18 4 ja_rd
# NOTE: This test bench relies on the simulation logs to catch errors. That is,
19 38 ja_rd
# unlike the original Plasma code, this one does not check the test success
20
# conditions. Instead, it performs the operations to be tested and relies on you
21 4 ja_rd
# to compare the logs from the logic simulation and the software simulation.
22
# Test that work this way have been commented with this tag: "@log"
23
#
24 2 ja_rd
#-------------------------------------------------------------------------------
25 4 ja_rd
# NOTE: NOPs have been inserted after load instructions.
26 2 ja_rd
#
27
################################################################################
28
 
29 4 ja_rd
    #-- Set flags below to >0 to enable/disable test assembly ------------------
30 2 ja_rd
 
31 4 ja_rd
    .set TEST_UNALIGNED_LOADS, 0        # unaligned loads
32
    .set TEST_UNALIGNED_STORES, 0       # unaligned stores
33
    .set TEST_BREAK, 1                  # BREAK instruction
34
    # WARNING: the assembler expands div instructions, see 'as' manual
35 14 ja_rd
    .set TEST_DIV, 1                    # DIV* instructions
36
    .set TEST_MUL, 1                    # MUL* instructions
37 148 ja_rd
    .set USE_CACHE, 1                   # Initialize and enable cache
38
 
39
    .set ICACHE_NUM_LINES, 256              # no. of lines in the I-Cache
40
    .set DCACHE_NUM_LINES, 256              # no. of lines in the D-Cache
41
    .set DCACHE_LINE_SIZE, 4                # D-Cache line size in words
42 2 ja_rd
 
43 4 ja_rd
    #---------------------------------------------------------------------------
44
 
45 2 ja_rd
    .text
46
    .align  2
47
    .globl  entry
48
    .ent    entry
49
entry:
50
    .set    noreorder
51
 
52
    la      $gp, _gp            #initialize stack pointer
53
    la      $4, __bss_start     #$4 = .sbss_start
54
    la      $5, _end            #$5 = .bss_end
55
    nop                         #no stack needed
56
    nop
57
 
58
    b       StartTest
59
    nop
60
 
61 29 ja_rd
 
62
    # Trap handler address
63 66 ja_rd
    #.org    0x3c
64
    .org    0x0180
65
 
66 29 ja_rd
    # We have three trap sources: syscall, break and unimplemented opcode
67
    # Plus we have to account for a faulty cause code; that's 4 causes
68
    # Besides, we have to look out for the branch delay flag (BD)
69
    # We'll just increment $4 by a fixed constant depending on the cause
70
    # so we will not save any registers (there's no stack anyway)
71
InterruptVector:
72
    mfc0    $k0,$13             # Get trap cause code
73
    andi    $k0,$k0,0x01f
74
    ori     $k1,$zero,0x8       # was it a syscall?
75
    beq     $k0,$k1,trap_syscall
76
    addi    $k1,$k1,0x1         # was it a break?
77
    beq     $k0,$k1,trap_break
78
    addi    $k1,$k1,0x1         # was it a bad opcode?
79
    bne     $k0,$k1,trap_invalid
80 2 ja_rd
    nop
81 29 ja_rd
 
82
    # Unimplemented instruction
83
trap_unimplemented:
84
    j       trap_return
85
    add     $4,$4,4
86 2 ja_rd
 
87 29 ja_rd
    # Break instruction
88
trap_break:
89
    j       trap_return
90 2 ja_rd
    add     $4,$4,5
91 29 ja_rd
 
92
    # Syscall instruction
93
trap_syscall:
94
    j       trap_return
95
    add     $4,$4,6
96
 
97
    # Invalid trap cause code, most likely hardware bug
98
trap_invalid:
99
    j       trap_return
100
    add     $4,$4,0xf
101
 
102
trap_return:
103
    mfc0    $k1,$14             # C0_EPC=14 (Exception PC)
104
    mfc0    $k0,$13             # Get bit 31 (BD) from C0 cause register
105
    srl     $k0,31
106
    andi    $k0,$k0,1
107
    bnez    $k0,trap_return_delay_slot
108
    addi    $k1,$k1,4           # skip trap instruction
109
    jr      $k1
110
    nop
111
trap_return_delay_slot:
112
    addi    $k1,$k1,4           # skip jump instruction too
113
    jr      $k1                 # (we just added 8 to epc)
114
 
115
 
116 2 ja_rd
StartTest:
117 148 ja_rd
    .ifgt   USE_CACHE
118
    jal     setup_cache
119
    nop
120
    .else
121 110 ja_rd
    mtc0    $0,$12              # disable interrupts, disable cache
122 148 ja_rd
    .endif
123 2 ja_rd
    lui     $20,0x2000          # serial port write address
124
    ori     $21,$0,'\n'         # <CR> character
125
    ori     $22,$0,'X'          # 'X' letter
126
    ori     $23,$0,'\r'
127
    ori     $24,$0,0x0f80       # temp memory
128
 
129
    sb      $23,0($20)
130
    sb      $21,0($20)
131
    sb      $23,0($20)
132
    sb      $21,0($20)
133
    sb      $23,0($20)
134
    sb      $21,0($20)
135
    sb      $23,0($20)
136
    sb      $21,0($20)
137 29 ja_rd
 
138 2 ja_rd
    ######################################
139
    #Arithmetic Instructions
140
    ######################################
141
ArthmeticTest:
142
    ori     $2,$0,'A'
143
    sb      $2,0($20)
144
    ori     $2,$0,'r'
145
    sb      $2,0($20)
146
    ori     $2,$0,'i'
147
    sb      $2,0($20)
148
    ori     $2,$0,'t'
149
    sb      $2,0($20)
150
    ori     $2,$0,'h'
151
    sb      $2,0($20)
152
    sb      $23,0($20)
153
    sb      $21,0($20)
154
 
155
    #a: ADD
156
    ori     $2,$0,'a'
157
    sb      $2,0($20)
158
    ori     $3,$0,5
159
    ori     $4,$0,60
160
    add     $2,$3,$4
161
    sb      $2,0($20)    #A
162
    sb      $23,0($20)
163
    sb      $21,0($20)
164
 
165
    #b: ADDI
166
    ori     $2,$0,'b'
167
    sb      $2,0($20)
168
    ori     $4,$0,60
169
    addi    $2,$4,5
170
    sb      $2,0($20)    #A
171
    sb      $23,0($20)
172
    sb      $21,0($20)
173
 
174
    #c: ADDIU
175
    ori     $2,$0,'c'
176
    sb      $2,0($20)
177
    ori     $4,$0,50
178
    addiu   $5,$4,15
179
    sb      $5,0($20)    #A
180
    sb      $23,0($20)
181
    sb      $21,0($20)
182
 
183
    #d: ADDU
184
    ori     $2,$0,'d'
185
    sb      $2,0($20)
186
    ori     $3,$0,5
187
    ori     $4,$0,60
188
    add     $2,$3,$4
189
    sb      $2,0($20)    #A
190
    sb      $23,0($20)
191
    sb      $21,0($20)
192
 
193 4 ja_rd
    # DIV tests, skip conditionally
194
    .ifgt TEST_DIV
195 2 ja_rd
 
196
    #e: DIV
197
    ori     $2,$0,'e'
198
    sb      $2,0($20)
199
    ori     $2,$0,65*117+41
200
    ori     $3,$0,117
201
    div     $2,$3
202
    nop
203
    mflo    $4
204
    sb      $4,0($20)    #A
205
    mfhi    $4
206
    addi    $4,$4,66-41
207
    sb      $4,0($20)    #B
208
    li      $2,-67*19
209
    ori     $3,$0,19
210
    div     $2,$3
211
    nop
212
    mflo    $4
213
    sub     $4,$0,$4
214
    sb      $4,0($20)    #C
215
    ori     $2,$0,68*23
216
    li      $3,-23
217
    div     $2,$3
218
    nop
219
    mflo    $4
220
    sub     $4,$0,$4
221
    sb      $4,0($20)    #D
222
    li      $2,-69*13
223
    li      $3,-13
224
    div     $2,$3
225
    mflo    $4
226
    sb      $4,0($20)    #E
227
    sb      $23,0($20)
228
    sb      $21,0($20)
229
 
230
    #f: DIVU
231
    ori     $2,$0,'f'
232
    sb      $2,0($20)
233
    ori     $2,$0,65*13
234
    ori     $3,$0,13
235
    divu    $2,$3
236
    nop
237
    mflo    $4
238
    sb      $4,0($20)    #A
239
    sb      $23,0($20)
240
    sb      $21,0($20)
241 4 ja_rd
    .endif
242 2 ja_rd
 
243 4 ja_rd
    # MUL tests, skip conditionally
244
    .ifgt   TEST_MUL
245 2 ja_rd
 
246
    #g: MULT
247
    ori     $2,$0,'g'
248
    sb      $2,0($20)
249
    ori     $2,$0,5
250
    ori     $3,$0,13
251
    mult    $2,$3
252
    nop
253
    mflo    $4
254
    sb      $4,0($20)    #A
255
    li      $2,-5
256
    ori     $3,$0,13
257
    mult    $2,$3
258
    mfhi    $5
259
    mflo    $4
260
    sub     $4,$0,$4
261
    addu    $4,$4,$5
262
    addi    $4,$4,2
263
    sb      $4,0($20)    #B
264
    ori     $2,$0,5
265
    li      $3,-13
266
    mult    $2,$3
267
    mfhi    $5
268
    mflo    $4
269
    sub     $4,$0,$4
270
    addu    $4,$4,$5
271
    addi    $4,$4,3
272
    sb      $4,0($20)    #C
273
    li      $2,-5
274
    li      $3,-13
275
    mult    $2,$3
276
    mfhi    $5
277
    mflo    $4
278
    addu    $4,$4,$5
279
    addi    $4,$4,3
280
    sb      $4,0($20)    #D
281
    lui     $4,0xfe98
282
    ori     $4,$4,0x62e5
283
    lui     $5,0x6
284
    ori     $5,0x8db8
285
    mult    $4,$5
286
    mfhi    $6
287
    addiu   $7,$6,2356+1+'E' #E
288
    sb      $7,0($20)
289
    sb      $23,0($20)
290
    sb      $21,0($20)
291
 
292
    #h: MULTU
293
    ori     $2,$0,'h'
294
    sb      $2,0($20)
295
    ori     $2,$0,5
296
    ori     $3,$0,13
297
    multu   $2,$3
298
    nop
299
    mflo    $4
300
    sb      $4,0($20)    #A
301
    sb      $23,0($20)
302
    sb      $21,0($20)
303 4 ja_rd
    .endif
304 2 ja_rd
 
305
    #i: SLT
306
    ori     $2,$0,'i'
307
    sb      $2,0($20)
308
    ori     $2,$0,10
309
    ori     $3,$0,12
310
    slt     $4,$2,$3
311
    addi    $5,$4,64
312
    sb      $5,0($20)    #A
313
    slt     $4,$3,$2
314
    addi    $5,$4,66
315
    sb      $5,0($20)    #B
316
    li      $2,0xfffffff0
317
    slt     $4,$2,$3
318
    addi    $5,$4,66
319
    sb      $5,0($20)    #C
320
    slt     $4,$3,$2
321
    addi    $5,$4,68
322
    sb      $5,0($20)    #D
323
    li      $3,0xffffffff
324
    slt     $4,$2,$3
325
    addi    $5,$4,68
326
    sb      $5,0($20)    #E
327
    slt     $4,$3,$2
328
    addi    $5,$4,70
329
    sb      $5,0($20)    #F
330
    sb      $23,0($20)
331
    sb      $21,0($20)
332
 
333
    #j: SLTI
334
    ori     $2,$0,'j'
335
    sb      $2,0($20)
336
    ori     $2,$0,10
337
    slti    $4,$2,12
338
    addi    $5,$4,64
339
    sb      $5,0($20)    #A
340
    slti    $4,$2,8
341
    addi    $5,$4,66
342
    sb      $5,0($20)    #B
343
    sb      $23,0($20)
344
    sb      $21,0($20)
345
 
346
    #k: SLTIU
347
    ori     $2,$0,'k'
348
    sb      $2,0($20)
349
    ori     $2,$0,10
350
    sltiu   $4,$2,12
351
    addi    $5,$4,64
352
    sb      $5,0($20)    #A
353
    sltiu   $4,$2,8
354
    addi    $5,$4,66
355
    sb      $5,0($20)    #B
356
    sb      $23,0($20)
357
    sb      $21,0($20)
358
 
359
    #l: SLTU
360
    ori     $2,$0,'l'
361
    sb      $2,0($20)
362
    ori     $2,$0,10
363
    ori     $3,$0,12
364
    slt     $4,$2,$3
365
    addi    $5,$4,64
366
    sb      $5,0($20)    #A
367
    slt     $4,$3,$2
368
    addi    $5,$4,66
369
    sb      $5,0($20)    #B
370
    sb      $23,0($20)
371
    sb      $21,0($20)
372
 
373
    #m: SUB
374
    ori     $2,$0,'m'
375
    sb      $2,0($20)
376
    ori     $3,$0,70
377
    ori     $4,$0,5
378
    sub     $2,$3,$4
379
    sb      $2,0($20)    #A
380
    sb      $23,0($20)
381
    sb      $21,0($20)
382
 
383
    #n: SUBU
384
    ori     $2,$0,'n'
385
    sb      $2,0($20)
386
    ori     $3,$0,70
387
    ori     $4,$0,5
388
    sub     $2,$3,$4
389
    sb      $2,0($20)    #A
390
    sb      $23,0($20)
391
    sb      $21,0($20)
392
 
393
    ######################################
394
    #Branch and Jump Instructions
395
    ######################################
396
BranchTest:
397
    ori     $2,$0,'B'
398
    sb      $2,0($20)
399
    ori     $2,$0,'r'
400
    sb      $2,0($20)
401
    ori     $2,$0,'a'
402
    sb      $2,0($20)
403
    ori     $2,$0,'n'
404
    sb      $2,0($20)
405
    ori     $2,$0,'c'
406
    sb      $2,0($20)
407
    ori     $2,$0,'h'
408
    sb      $2,0($20)
409
    sb      $23,0($20)
410
    sb      $21,0($20)
411
 
412
    #a: B
413
    ori     $2,$0,'a'
414
    sb      $2,0($20)
415
    ori     $10,$0,'A'
416
    ori     $11,$0,'B'
417
    b       $B1
418
    sb      $10,0($20)
419
    sb      $22,0($20)
420
$B1:
421
    sb      $11,0($20)
422
    sb      $23,0($20)
423
    sb      $21,0($20)
424
 
425
    #b: BAL
426
    ori     $2,$0,'b'
427
    sb      $2,0($20)
428
    ori     $10,$0,'A'
429
    ori     $11,$0,'B'
430
    ori     $12,$0,'C'
431
    ori     $13,$0,'D'
432
    ori     $14,$0,'E'
433
    ori     $15,$0,'X'
434
    bal     $BAL1
435
    sb      $10,0($20)
436
    sb      $13,0($20)
437
    b       $BAL2
438
    sb      $14,0($20)
439
    sb      $15,0($20)
440
$BAL1:
441
    sb      $11,0($20)
442
    jr      $31
443
    sb      $12,0($20)
444
    sb      $22,0($20)
445
$BAL2:
446
    sb      $23,0($20)
447
    sb      $21,0($20)
448
 
449
    #c: BEQ
450
    ori     $2,$0,'c'
451
    sb      $2,0($20)
452
    ori     $10,$0,'A'
453
    ori     $11,$0,'B'
454
    ori     $12,$0,'C'
455
    ori     $13,$0,'D'
456
    ori     $2,$0,100
457
    ori     $3,$0,123
458
    ori     $4,$0,123
459
    beq     $2,$3,$BEQ1
460
    sb      $10,0($20)
461
    sb      $11,0($20)
462
    beq     $3,$4,$BEQ1
463
    sb      $12,0($20)
464
    sb      $22,0($20)
465
$BEQ1:
466
    sb      $13,0($20)
467
    sb      $23,0($20)
468
    sb      $21,0($20)
469
 
470
    #d: BGEZ
471
    ori     $2,$0,'d'
472
    sb      $2,0($20)
473
    ori     $10,$0,'A'
474
    ori     $11,$0,'B'
475
    ori     $12,$0,'C'
476
    ori     $13,$0,'D'
477
    or      $15,$0,'X'
478
    ori     $2,$0,100
479
    li      $3,0xffff1234
480
    ori     $4,$0,123
481
    bgez    $3,$BGEZ1
482
    sb      $10,0($20)
483
    sb      $11,0($20)
484
    bgez    $2,$BGEZ1
485
    sb      $12,0($20)
486
    sb      $22,0($20)
487
$BGEZ1:
488
    bgez    $0,$BGEZ2
489
    nop
490
    sb      $15,0($20)
491
$BGEZ2:
492
    sb      $13,0($20)
493
    sb      $23,0($20)
494
    sb      $21,0($20)
495
 
496
    #e: BGEZAL
497
    ori     $2,$0,'e'
498
    sb      $2,0($20)
499
    ori     $10,$0,'A'
500
    ori     $11,$0,'B'
501
    ori     $12,$0,'C'
502
    ori     $13,$0,'D'
503
    ori     $14,$0,'E'
504
    ori     $15,$0,'X'
505
    li      $3,0xffff1234
506
    bgezal  $3,$BGEZAL1
507
    nop
508
    sb      $10,0($20)
509
    bgezal  $0,$BGEZAL1
510
    nop
511
    sb      $13,0($20)
512
    b       $BGEZAL2
513
    sb      $14,0($20)
514
    sb      $15,0($20)
515
$BGEZAL1:
516
    sb      $11,0($20)
517
    jr      $31
518
    sb      $12,0($20)
519
    sb      $22,0($20)
520
$BGEZAL2:
521
    sb      $23,0($20)
522
    sb      $21,0($20)
523
 
524
    #f: BGTZ
525
    ori     $2,$0,'f'
526
    sb      $2,0($20)
527
    ori     $10,$0,'A'
528
    ori     $11,$0,'B'
529
    ori     $12,$0,'C'
530
    ori     $13,$0,'D'
531
    ori     $2,$0,100
532
    li      $3,0xffff1234
533
    bgtz    $3,$BGTZ1
534
    sb      $10,0($20)
535
    sb      $11,0($20)
536
    bgtz    $2,$BGTZ1
537
    sb      $12,0($20)
538
    sb      $22,0($20)
539
$BGTZ1:
540
    sb      $13,0($20)
541
    sb      $23,0($20)
542
    sb      $21,0($20)
543
 
544
    #g: BLEZ
545
    ori     $2,$0,'g'
546
    sb      $2,0($20)
547
    ori     $10,$0,'A'
548
    ori     $11,$0,'B'
549
    ori     $12,$0,'C'
550
    ori     $13,$0,'D'
551
    ori     $2,$0,100
552
    li      $3,0xffff1234
553
    blez    $2,$BLEZ1
554
    sb      $10,0($20)
555
    sb      $11,0($20)
556
    blez    $3,$BLEZ1
557
    sb      $12,0($20)
558
    sb      $22,0($20)
559
$BLEZ1:
560
    blez    $0,$BLEZ2
561
    nop
562
    sb      $22,0($20)
563
$BLEZ2:
564
    sb      $13,0($20)
565
    sb      $23,0($20)
566
    sb      $21,0($20)
567
 
568
    #h: BLTZ
569
    ori     $2,$0,'h'
570
    sb      $2,0($20)
571
    ori     $10,$0,'A'
572
    ori     $11,$0,'B'
573
    ori     $12,$0,'C'
574
    ori     $13,$0,'D'
575
    ori     $14,$0,'E'
576
    ori     $2,$0,100
577
    li      $3,0xffff1234
578
    ori     $4,$0,0
579
    bltz    $2,$BLTZ1
580
    sb      $10,0($20)
581
    sb      $11,0($20)
582
    bltz    $3,$BLTZ1
583
    sb      $12,0($20)
584
    sb      $22,0($20)
585
$BLTZ1:
586
    bltz    $4,$BLTZ2
587
    nop
588
    sb      $13,0($20)
589
$BLTZ2:
590
    sb      $14,0($20)
591
    sb      $23,0($20)
592
    sb      $21,0($20)
593
 
594
    #i: BLTZAL
595
    ori     $2,$0,'i'
596
    sb      $2,0($20)
597
    ori     $10,$0,'A'
598
    ori     $11,$0,'B'
599
    ori     $12,$0,'C'
600
    ori     $13,$0,'D'
601
    ori     $14,$0,'E'
602
    ori     $15,$0,'X'
603
    li      $3,0xffff1234
604
    bltzal  $0,$BLTZAL1
605
    nop
606
    sb      $10,0($20)
607
    bltzal  $3,$BLTZAL1
608
    nop
609
    sb      $13,0($20)
610
    b       $BLTZAL2
611
    sb      $14,0($20)
612
    sb      $15,0($20)
613
$BLTZAL1:
614
    sb      $11,0($20)
615
    jr      $31
616
    sb      $12,0($20)
617
    sb      $22,0($20)
618
$BLTZAL2:
619
    sb      $23,0($20)
620
    sb      $21,0($20)
621
 
622
    #j: BNE
623
    ori     $2,$0,'j'
624
    sb      $2,0($20)
625
    ori     $10,$0,'A'
626
    ori     $11,$0,'B'
627
    ori     $12,$0,'C'
628
    ori     $13,$0,'D'
629
    ori     $2,$0,100
630
    ori     $3,$0,123
631
    ori     $4,$0,123
632
    bne     $3,$4,$BNE1
633
    sb      $10,0($20)
634
    sb      $11,0($20)
635
    bne     $2,$3,$BNE1
636
    sb      $12,0($20)
637
    sb      $22,0($20)
638
$BNE1:
639
    sb      $13,0($20)
640
    sb      $23,0($20)
641
    sb      $21,0($20)
642
 
643
    #k: J
644
    ori     $2,$0,'k'
645
    sb      $2,0($20)
646
    ori     $10,$0,'A'
647
    ori     $11,$0,'B'
648
    ori     $15,$0,'X'
649
    j       $J1
650
    sb      $10,0($20)
651
    sb      $15,0($20)
652
$J1:
653
    sb      $11,0($20)
654
    sb      $23,0($20)
655
    sb      $21,0($20)
656
 
657
    #l: JAL
658
    ori     $2,$0,'l'
659
    sb      $2,0($20)
660
    ori     $10,$0,'A'
661
    ori     $11,$0,'B'
662
    ori     $12,$0,'C'
663
    ori     $13,$0,'D'
664
    ori     $14,$0,'E'
665
    ori     $15,$0,'X'
666
    jal     $JAL1
667
    sb      $10,0($20)
668
    sb      $13,0($20)
669
    b       $JAL2
670
    sb      $14,0($20)
671
    sb      $15,0($20)
672
$JAL1:
673
    sb      $11,0($20)
674
    jr      $31
675
    sb      $12,0($20)
676
    sb      $22,0($20)
677
$JAL2:
678
    sb      $23,0($20)
679
    sb      $21,0($20)
680
 
681
    #m: JALR
682
    ori     $2,$0,'m'
683
    sb      $2,0($20)
684
    ori     $10,$0,'A'
685
    ori     $11,$0,'B'
686
    ori     $12,$0,'C'
687
    ori     $13,$0,'D'
688
    ori     $14,$0,'E'
689
    ori     $15,$0,'X'
690
    la      $3,$JALR1
691
    jalr    $3
692
    sb      $10,0($20)
693
    sb      $13,0($20)
694
    b       $JALR2
695
    sb      $14,0($20)
696
    sb      $15,0($20)
697
$JALR1:
698
    sb      $11,0($20)
699
    jr      $31
700
    sb      $12,0($20)
701
    sb      $22,0($20)
702
$JALR2:
703
    sb      $23,0($20)
704
    sb      $21,0($20)
705
 
706
    #n: JR
707
    ori     $2,$0,'n'
708
    sb      $2,0($20)
709
    ori     $10,$0,'A'
710
    ori     $11,$0,'B'
711
    ori     $15,$0,'X'
712
    la      $3,$JR1
713
    jr      $3
714
    sb      $10,0($20)
715
    sb      $15,0($20)
716
$JR1:
717
    sb      $11,0($20)
718
    sb      $23,0($20)
719
    sb      $21,0($20)
720
 
721
    #o: NOP
722
    ori     $2,$0,'o'
723
    sb      $2,0($20)
724
    ori     $2,$0,65
725
    nop
726
    sb      $2,0($20)
727
    sb      $23,0($20)
728
    sb      $21,0($20)
729
 
730
 #   b     LoadTest
731
 
732 4 ja_rd
 
733 2 ja_rd
BreakTest:
734 4 ja_rd
    .ifgt TEST_BREAK
735 2 ja_rd
    #p: BREAK
736 4 ja_rd
    ori     $2,$0,'p'       # check if it jumps to break address and comes back
737 2 ja_rd
    sb      $2,0($20)
738
    ori     $2,$0,'z'
739
    ori     $4,$0,59
740
    break   0
741
    addi    $4,$4,1
742
    sb      $4,0($20)
743 4 ja_rd
 
744
    break   0               # check if load instruction is aborted (@log)
745
    lb      $2,16($2)
746
 
747
    break   0               # check if jump instruction is aborted (@log)
748 9 ja_rd
    j       break_jump_test1
749 4 ja_rd
    add     $4,$4,5
750
 
751 9 ja_rd
break_jump_test1:
752 4 ja_rd
    add     $4,$4,1         # make sure the jump shows in the log (@log)
753
 
754 29 ja_rd
    break   0               # check if store instruction is aborted
755
    sb      $4,0($20)
756
 
757
    j       break_jump_test2# check if break works in delay slot of jump
758
    break   0
759 9 ja_rd
    nop
760
    j       break_continue
761
    nop
762
 
763
break_jump_test2:
764
    add     $4,$4,1
765
 
766
break_continue:
767 2 ja_rd
    sb      $23,0($20)
768 4 ja_rd
    sb      $21,0($20)
769
    .endif
770 2 ja_rd
 
771
    #q: SYSCALL
772 14 ja_rd
    ori     $2,$0,'q'       # check if it jumpts to trap vector and comes back
773 2 ja_rd
    sb      $2,0($20)
774
    ori     $4,$0,61
775
    syscall 0
776
    addi    $4,$4,-1
777
    sb      $4,0($20)
778 14 ja_rd
 
779
    syscall 0               # check if load instruction is aborted (@log)
780
    lb      $2,16($2)
781
 
782
    syscall 0               # check if jump instruction is aborted (@log)
783
    j       syscall_jump_test1
784
    add     $4,$4,5
785
 
786
syscall_jump_test1:
787
    add     $4,$4,1         # make sure the jump shows in the log (@log)
788
 
789
    # TODO traps in delay slots not supported yet
790
    #j       syscall_jump_test2 # check if syscall works in delay slot of jump
791
    #break   0
792
    nop
793
    j       syscall_continue
794
    nop
795
 
796
syscall_jump_test2:
797
    add     $4,$4,1
798
 
799
syscall_continue:
800 2 ja_rd
    sb      $23,0($20)
801
    sb      $21,0($20)
802
 
803
 
804
    ######################################
805
    #Load, Store, and Memory Control Instructions
806
    ######################################
807
LoadTest:
808
    ori     $2,$0,'L'
809
    sb      $2,0($20)
810
    ori     $2,$0,'o'
811
    sb      $2,0($20)
812
    ori     $2,$0,'a'
813
    sb      $2,0($20)
814
    ori     $2,$0,'d'
815
    sb      $2,0($20)
816
    sb      $23,0($20)
817
    sb      $21,0($20)
818
 
819
    #a: LB
820
    ori     $2,$0,'a'
821
    sb      $2,0($20)
822
    or      $2,$0,$24
823
    li      $3,0x414243fc
824
    sw      $3,16($2)              # 16($2)    = 0x414243fc
825
    lb      $4,16($2)              # $4        = 0x41
826
    sb      $4,0($20)              # UART      = 0x41
827
    lb      $4,17($2)              # $4        = 0x42
828
    nop
829
    sb      $4,0($20)              # UART      = 0x42
830
    lb      $4,18($2)              # $4        = 0x43
831
    nop
832
    sb      $4,0($20)              # UART      = 0x43
833
    lb      $2,19($2)              # $2        = 0xffff.fffc
834
    nop
835
    sra     $3,$2,8                # $3        = 0xffff.ffff
836
    addi    $3,$3,0x45             # $3        = 0x44
837
    sb      $3,0($20)              # UART      = 0x44
838
    addi    $2,$2,0x49             # $4        = 0x45, overflow
839
    sb      $2,0($20)              # UART      = 0x45
840
    sb      $23,0($20)             # UART      = CR
841
    sb      $21,0($20)             # UART      = LF
842
 
843
    #b: LBU
844
    ori     $2,$0,'b'
845
    sb      $2,0($20)
846
    or      $2,$0,$24
847
    li      $3,0x41424344
848
    sw      $3,16($2)
849
    lb      $4,16($2)
850
    sb      $4,0($20)
851
    lb      $4,17($2)
852
    sb      $4,0($20)
853
    lb      $4,18($2)
854
    sb      $4,0($20)
855
    lb      $2,19($2)
856
    sb      $2,0($20)
857
    sb      $23,0($20)
858
    sb      $21,0($20)
859
 
860
    #c: LH
861
    ori     $2,$0,'c'
862
    sb      $2,0($20)
863
    or      $2,$0,$24
864
    li      $3,0x00410042
865
    sw      $3,16($2)
866
    lh      $4,16($2)
867
    sb      $4,0($20)
868
    lh      $2,18($2)
869
    sb      $2,0($20)
870
    sb      $23,0($20)
871
    sb      $21,0($20)
872
 
873
    #d: LHU
874
    ori     $2,$0,'d'
875
    sb      $2,0($20)
876
    or      $2,$0,$24
877
    li      $3,0x00410042
878
    sw      $3,16($2)
879
    lh      $4,16($2)
880
    sb      $4,0($20)
881
    lh      $2,18($2)
882
    sb      $2,0($20)
883
    sb      $23,0($20)
884
    sb      $21,0($20)
885
 
886
    #e: LW
887
    ori     $2,$0,'e'
888
    sb      $2,0($20)
889
    or      $2,$0,$24
890
    li      $3,'A'
891
    sw      $3,16($2)
892
    ori     $3,$0,0
893
    lw      $2,16($2)
894
    sb      $2,0($20)
895
    sb      $23,0($20)
896
    sb      $21,0($20)
897
 
898
    .ifgt TEST_UNALIGNED_LOADS
899
    #f: LWL & LWR
900
    ori     $2,$0,'f'
901
    sb      $2,0($20)
902
    or      $2,$0,$24
903
    li      $3,'A'
904
    sw      $3,16($2)
905
    ori     $3,$0,0
906
    lwl     $2,16($2)
907
    lwr     $2,16($2)
908
    sb      $2,0($20)
909
    sb      $23,0($20)
910
    sb      $21,0($20)
911
    .endif
912
 
913
    #g: SB
914
    ori     $2,$0,'g'
915
    sb      $2,0($20)
916
    ori     $2,$0,'A'
917
    sb      $2,0($20)
918
    sb      $23,0($20)
919
    sb      $21,0($20)
920
 
921
    #h: SH
922
    ori     $2,$0,'h'
923
    sb      $2,0($20)
924
    or      $4,$0,$24
925
    ori     $2,$0,0x4142
926
    sh      $2,16($4)
927
    lb      $3,16($4)
928
    sb      $3,0($20)
929
    lb      $2,17($4)
930
    sb      $2,0($20)
931
    sb      $23,0($20)
932
    sb      $21,0($20)
933
 
934
    #i: SW
935
    ori     $2,$0,'i'
936
    sb      $2,0($20)
937
    or      $2,$0,$24
938
    li      $3,0x41424344
939
    sw      $3,16($2)
940
    lb      $4,16($2)
941
    sb      $4,0($20)
942
    lb      $4,17($2)
943
    sb      $4,0($20)
944
    lb      $4,18($2)
945
    sb      $4,0($20)
946
    lb      $2,19($2)
947
    sb      $2,0($20)
948
    sb      $23,0($20)
949
    sb      $21,0($20)
950
 
951
    .ifgt  TEST_UNALIGNED_STORES
952
    #j: SWL & SWR
953
    ori     $2,$0,'j'
954
    sb      $2,0($20)
955
    or      $2,$0,$24
956
    li      $3,0x41424344
957
    swl     $3,16($2)
958
    swr     $3,16($2)
959
    lb      $4,16($2)
960
    sb      $4,0($20)
961
    lb      $4,17($2)
962
    sb      $4,0($20)
963
    lb      $4,18($2)
964
    sb      $4,0($20)
965
    lb      $2,19($2)
966
    sb      $2,0($20)
967
    sb      $23,0($20)
968
    sb      $21,0($20)
969
    .endif
970
 
971
    ######################################
972
    #Logical Instructions
973
    ######################################
974
LogicalTest:
975
    ori     $2,$0,'L'
976
    sb      $2,0($20)
977
    ori     $2,$0,'o'
978
    sb      $2,0($20)
979
    ori     $2,$0,'g'
980
    sb      $2,0($20)
981
    ori     $2,$0,'i'
982
    sb      $2,0($20)
983
    ori     $2,$0,'c'
984
    sb      $2,0($20)
985
    sb      $23,0($20)
986
    sb      $21,0($20)
987
 
988
    #a: AND
989
    ori     $2,$0,'a'
990
    sb      $2,0($20)
991
    ori     $2,$0,0x0741
992
    ori     $3,$0,0x60f3
993
    and     $4,$2,$3
994
    sb      $4,0($20)
995
    sb      $23,0($20)
996
    sb      $21,0($20)
997
 
998
    #b: ANDI
999
    ori     $2,$0,'b'
1000
    sb      $2,0($20)
1001
    ori     $2,$0,0x0741
1002
    andi    $4,$2,0x60f3
1003
    sb      $4,0($20)
1004
    sb      $23,0($20)
1005
    sb      $21,0($20)
1006
 
1007
    #c: LUI
1008
    ori     $2,$0,'c'
1009
    sb      $2,0($20)
1010
    lui     $2,0x41
1011
    srl     $3,$2,16
1012
    sb      $3,0($20)
1013
    sb      $23,0($20)
1014
    sb      $21,0($20)
1015
 
1016
    #d: NOR
1017
    ori     $2,$0,'d'
1018
    sb      $2,0($20)
1019
    li      $2,0xf0fff08e
1020
    li      $3,0x0f0f0f30
1021
    nor     $4,$2,$3
1022
    sb      $4,0($20)
1023
    sb      $23,0($20)
1024
    sb      $21,0($20)
1025
 
1026
    #e: OR
1027
    ori     $2,$0,'e'
1028
    sb      $2,0($20)
1029
    ori     $2,$0,0x40
1030
    ori     $3,$0,0x01
1031
    or      $4,$2,$3
1032
    sb      $4,0($20)
1033
    sb      $23,0($20)
1034
    sb      $21,0($20)
1035
 
1036
    #f: ORI
1037
    ori     $2,$0,'f'
1038
    sb      $2,0($20)
1039
    ori     $2,$0,0x40
1040
    ori     $4,$2,0x01
1041
    sb      $4,0($20)
1042
    sb      $23,0($20)
1043
    sb      $21,0($20)
1044
 
1045
    #g: XOR
1046
    ori     $2,$0,'g'
1047
    sb      $2,0($20)
1048
    ori     $2,$0,0xf043
1049
    ori     $3,$0,0xf002
1050
    xor     $4,$2,$3
1051
    sb      $4,0($20)
1052
    sb      $23,0($20)
1053
    sb      $21,0($20)
1054
 
1055
    #h: XORI
1056
    ori     $2,$0,'h'
1057
    sb      $2,0($20)
1058
    ori     $2,$0,0xf043
1059
    xor     $4,$2,0xf002
1060
    sb      $4,0($20)
1061
    sb      $23,0($20)
1062
    sb      $21,0($20)
1063
 
1064
 
1065
    ######################################
1066
    #Move Instructions
1067
    ######################################
1068
MoveTest:
1069
    ori     $2,$0,'M'
1070
    sb      $2,0($20)
1071
    ori     $2,$0,'o'
1072
    sb      $2,0($20)
1073
    ori     $2,$0,'v'
1074
    sb      $2,0($20)
1075
    ori     $2,$0,'e'
1076
    sb      $2,0($20)
1077
    sb      $23,0($20)
1078
    sb      $21,0($20)
1079
 
1080 25 ja_rd
    # HI and LO are only implemented if the mul/div block is
1081
    .ifgt (TEST_DIV + TEST_MUL)
1082 2 ja_rd
    #a: MFHI
1083
    ori     $2,$0,'a'
1084
    sb      $2,0($20)
1085
    ori     $2,$0,65
1086
    mthi    $2
1087
    mfhi    $3
1088
    sb      $3,0($20)
1089
    sb      $23,0($20)
1090
    sb      $21,0($20)
1091
 
1092
    #b: MFLO
1093
    ori     $2,$0,'b'
1094
    sb      $2,0($20)
1095
    ori     $2,$0,65
1096
    mtlo    $2
1097
    mflo    $3
1098
    sb      $3,0($20)
1099
    sb      $23,0($20)
1100
    sb      $21,0($20)
1101
 
1102
    #c: MTHI
1103
    ori     $2,$0,'c'
1104
    sb      $2,0($20)
1105
    ori     $2,$0,65
1106
    mthi    $2
1107
    mfhi    $3
1108
    sb      $3,0($20)
1109
    sb      $23,0($20)
1110
    sb      $21,0($20)
1111
 
1112
    #d: MTLO
1113
    ori     $2,$0,'d'
1114
    sb      $2,0($20)
1115 66 ja_rd
    ori     $2,$0,66   # use 'B' instead of 'A' to cach change in HI and LO
1116 2 ja_rd
    mtlo    $2
1117
    mflo    $3
1118
    sb      $3,0($20)
1119
    sb      $23,0($20)
1120
    sb      $21,0($20)
1121 25 ja_rd
    .endif
1122 2 ja_rd
 
1123
    ######################################
1124
    #Shift Instructions
1125
    ######################################
1126
ShiftTest:
1127
    ori     $2,$0,'S'
1128
    sb      $2,0($20)
1129
    ori     $2,$0,'h'
1130
    sb      $2,0($20)
1131
    ori     $2,$0,'i'
1132
    sb      $2,0($20)
1133
    ori     $2,$0,'f'
1134
    sb      $2,0($20)
1135
    ori     $2,$0,'t'
1136
    sb      $2,0($20)
1137
    sb      $23,0($20)
1138
    sb      $21,0($20)
1139
 
1140
    #a: SLL
1141
    ori     $2,$0,'a'
1142
    sb      $2,0($20)
1143
    li      $2,0x40414243
1144
    sll     $3,$2,8
1145
    srl     $3,$3,24
1146
    sb      $3,0($20)
1147
    sb      $23,0($20)
1148
    sb      $21,0($20)
1149
 
1150
    #b: SLLV
1151
    ori     $2,$0,'b'
1152
    sb      $2,0($20)
1153
    li      $2,0x40414243
1154
    ori     $3,$0,8
1155
    sllv    $3,$2,$3
1156
    srl     $3,$3,24
1157
    sb      $3,0($20)
1158
    sb      $23,0($20)
1159
    sb      $21,0($20)
1160
 
1161
    #c: SRA
1162
    ori     $2,$0,'c'
1163
    sb      $2,0($20)
1164
    li      $2,0x40414243
1165
    sra     $3,$2,16
1166
    sb      $3,0($20)
1167
    li      $2,0x84000000
1168
    sra     $3,$2,25
1169
    sub     $3,$3,0x80
1170
    sb      $3,0($20)
1171
    sb      $23,0($20)
1172
    sb      $21,0($20)
1173
 
1174
    #d: SRAV
1175
    ori     $2,$0,'d'
1176
    sb      $2,0($20)
1177
    li      $2,0x40414243
1178
    ori     $3,$0,16
1179
    srav    $3,$2,$3
1180
    sb      $3,0($20)
1181
    ori     $3,$0,25
1182
    li      $2,0x84000000
1183
    srav    $3,$2,$3
1184
    sub     $3,$3,0x80
1185
    sb      $3,0($20)
1186
    sb      $23,0($20)
1187
    sb      $21,0($20)
1188
 
1189
    #e: SRL
1190
    ori     $2,$0,'e'
1191
    sb      $2,0($20)
1192
    li      $2,0x40414243
1193
    srl     $3,$2,16
1194
    sb      $3,0($20)
1195
    li      $2,0x84000000
1196
    srl     $3,$2,25
1197
    sb      $3,0($20)
1198
    sb      $23,0($20)
1199
    sb      $21,0($20)
1200
 
1201
    #f: SRLV
1202
    ori     $2,$0,'f'
1203
    sb      $2,0($20)
1204
    li      $2,0x40414243
1205
    ori     $3,$0,16
1206
    srlv    $4,$2,$3
1207
    sb      $4,0($20)
1208
    ori     $3,$0,25
1209
    li      $2,0x84000000
1210
    srlv    $3,$2,$3
1211
    sb      $3,0($20)
1212
    sb      $23,0($20)
1213
    sb      $21,0($20)
1214
 
1215
 
1216
    ori     $2,$0,'D'
1217
    sb      $2,0($20)
1218
    ori     $2,$0,'o'
1219
    sb      $2,0($20)
1220
    ori     $2,$0,'n'
1221
    sb      $2,0($20)
1222
    ori     $2,$0,'e'
1223
    sb      $2,0($20)
1224
    sb      $23,0($20)
1225
    sb      $21,0($20)
1226 38 ja_rd
 
1227 90 ja_rd
    # These tests are to be evaluated by matching logs with the software
1228
    # simulator. There is no need to perform any actual tests here, if there is
1229
    # any error it will show up as a mismatch in the logs.
1230
 
1231
    #-- Arithmetic --------------------------------------------------
1232
    ori     $s0,$zero,0xa5a5
1233
    ori     $s1,$zero,15
1234
    ori     $s2,$zero,1
1235
    li      $s3,-1
1236
    li      $s4,-1000
1237
    li      $s5,0x80000000
1238
    li      $s6,0x7fffffff
1239
 
1240
    #-- ADD ---------------------------
1241
    move    $t0,$s0                     # P + P = P
1242
    move    $t1,$s1
1243
    add     $t0,$t1,$s1
1244
    move    $t0,$s0                     # P + N = P
1245
    move    $t1,$s1
1246
    add     $t0,$t1,$s3
1247
    move    $t0,$s0                     # P + N = N
1248
    move    $t1,$s1
1249
    add     $t0,$t1,$s4
1250
    move    $t0,$s0                     # P + P = N (overflow)
1251
    move    $t1,$s6
1252
    add     $t0,$t1,$s6
1253
    move    $t0,$s0                     # N + N = P (overflow)
1254
    move    $t1,$s5
1255
    add     $t0,$t1,$s5
1256
 
1257
    #-- ADDI --------------------------
1258
    move    $t0,$s0                     # N + N = P (overflow)
1259
    move    $t1,$s5
1260
    addi    $t0,$t1,-1
1261
    move    $t0,$s0                     # N + P = N
1262
    move    $t1,$s5
1263
    addi    $t0,$t1,15
1264
    move    $t0,$s0                     # N + P = P
1265
    move    $t1,$s3
1266
    addi    $t0,$t1,2
1267
    move    $t0,$s0                     # P + P = P
1268
    move    $t1,$s1
1269
    addi    $t0,$t1,2
1270
    move    $t0,$s0                     # P + P = N (overflow)
1271
    move    $t1,$s6
1272
    addi    $t0,$t1,2
1273
 
1274
    #-- ADDIU -------------------------
1275
    move    $t0,$s0                     # N + N = P (overflow)
1276
    move    $t1,$s5
1277
    addiu   $t0,$t1,-1
1278
    move    $t0,$s0                     # N + P = N
1279
    move    $t1,$s5
1280
    addiu   $t0,$t1,15
1281
    move    $t0,$s0                     # N + P = P
1282
    move    $t1,$s3
1283
    addiu   $t0,$t1,2
1284
    move    $t0,$s0                     # P + P = P
1285
    move    $t1,$s1
1286
    addiu   $t0,$t1,2
1287
    move    $t0,$s0                     # P + P = N (overflow)
1288
    move    $t1,$s6
1289
    addiu   $t0,$t1,2
1290
 
1291
    #-- ADDU --------------------------
1292
    move    $t0,$s0                     # P + P = P
1293
    move    $t1,$s1
1294
    addu    $t0,$t1,$s1
1295
    move    $t0,$s0                     # P + N = P
1296
    move    $t1,$s1
1297
    addu    $t0,$t1,$s3
1298
    move    $t0,$s0                     # P + N = N
1299
    move    $t1,$s1
1300
    addu    $t0,$t1,$s4
1301
    move    $t0,$s0                     # P + P = N (overflow)
1302
    move    $t1,$s6
1303
    addu    $t0,$t1,$s6
1304
    move    $t0,$s0                     # N + N = P (overflow)
1305
    move    $t1,$s5
1306
    addu    $t0,$t1,$s5
1307
 
1308
    #-- SUB ---------------------------
1309
    move    $t0,$s0                     # P - P = P
1310
    move    $t1,$s2
1311
    sub     $t0,$t1,$s1
1312
    move    $t0,$s0                     # P - N = P
1313
    move    $t1,$s1
1314
    add     $t0,$t1,$s3
1315
    move    $t0,$s0                     # P + N = N
1316
    move    $t1,$s1
1317
    add     $t0,$t1,$s4
1318
    move    $t0,$s0                     # P + P = N (overflow)
1319
    move    $t1,$s6
1320
    add     $t0,$t1,$s6
1321
    move    $t0,$s0                     # N + N = P (overflow)
1322
    move    $t1,$s5
1323
    add     $t0,$t1,$s5
1324
 
1325
    # SLT, SLTI, SLTIU
1326
    ori     $a2,$zero,0xa5a5
1327
    ori     $a0,$zero,15
1328
    ori     $a1,$zero,1
1329
    move    $v0,$a3
1330
    slt     $v0,$a0,$a1
1331
    move    $v0,$a3
1332
    slt     $v0,$a1,$a0
1333
    move    $v0,$a3
1334
    slti    $v0,$a0,1
1335
    move    $v0,$a3
1336
    slti    $v0,$a1,15
1337
    move    $v0,$a3
1338
    sltiu   $v0,$a0,1
1339
    move    $v0,$a3
1340
    sltiu   $v0,$a1,15
1341
    li      $a1,0xa5a5
1342
    li      $a0,1029
1343
    addiu   $a0,$a0,-2000
1344
    sltu    $a1,$a0,1000
1345
 
1346
 
1347
    #-- Relative jumps ----------------------------------------------
1348
    li      $s0,0x7fffffff
1349
    ori     $s1,1000
1350
    ori     $s1,15
1351
    ori     $s1,2
1352
    li      $s4,0x80000000
1353
    li      $s5,-1001
1354
    li      $s6,-16
1355
    li      $s7,-3
1356
 
1357
    bgtz    $s1,test_b0
1358
    nop
1359
    ori     $v0,0x5500
1360
test_b0:
1361
    bgtz    $s7,test_b1
1362
    nop
1363
    ori     $v0,0x5501
1364
test_b1:
1365
    bgtz    $s0,test_b2
1366
    nop
1367
    ori     $v0,0x5502
1368
test_b2:
1369
    bgtz    $s4,test_b3
1370
    nop
1371
    ori     $v0,0x5503
1372
test_b3:
1373
    bgez    $s1,test_b4
1374
    nop
1375
    ori     $v0,0x5500
1376
test_b4:
1377
    bgez    $s7,test_b5
1378
    nop
1379
    ori     $v0,0x5501
1380
test_b5:
1381
    bgez    $s0,test_b6
1382
    nop
1383
    ori     $v0,0x5502
1384
test_b6:
1385
    bgez    $s4,test_b7
1386
    nop
1387
    ori     $v0,0x5503
1388
test_b7:
1389
    bltz    $s1,test_b8
1390
    nop
1391
    ori     $v0,0x5500
1392
test_b8:
1393
    bltz    $s7,test_b9
1394
    nop
1395
    ori     $v0,0x5501
1396
test_b9:
1397
    bltz    $s0,test_b10
1398
    nop
1399
    ori     $v0,0x5502
1400
test_b10:
1401
    bltz    $s4,test_b11
1402
    nop
1403
    ori     $v0,0x5503
1404
test_b11:
1405
 
1406 2 ja_rd
$DONE:
1407
    j       $DONE
1408
    nop
1409 148 ja_rd
 
1410
# void setup_cache(void) -- invalidates all I- and D-Cache lines (uses no RAM)
1411
setup_cache:
1412
    lui     $a0,0x0001          # Enable I-cache line invalidation
1413
    mtc0    $a0,$12
1414
 
1415
    # In order to invalidate a I-Cache line we have to write its tag number to
1416
    # any address while bits CP0[12].17:16=01. The write will be executed as a
1417
    # regular write too, as a side effect, so we need to choose a harmless
1418
    # target address. The BSS will do -- it will be cleared later.
1419
    # We'll cover all ICACHE_NUM_LINES lines no matter what the starting
1420
    # address is, anyway.
1421
 
1422
    la      $a0,__bss_start
1423
    li      $a2,0
1424
    li      $a1,ICACHE_NUM_LINES-1
1425
 
1426
inv_i_cache_loop:
1427
    sw      $a2,0($a0)
1428
    blt     $a2,$a1,inv_i_cache_loop
1429
    addi    $a2,1
1430
 
1431
    # Now, the D-Cache is different. To invalidate a D-Cache line you just
1432
    # read from it (by proper selection of a dummy target address)  while bits
1433
    # CP0[12].17:16=01. The data read is undefined and should be discarded.
1434
 
1435
    li      $a0,0               # Use any base address that is mapped
1436
    li      $a2,0
1437
    li      $a1,DCACHE_NUM_LINES-1
1438
 
1439
inv_d_cache_loop:
1440
    lw      $zero,0($a0)
1441
    addi    $a0,DCACHE_LINE_SIZE*4
1442
    blt     $a2,$a1,inv_d_cache_loop
1443
    addi    $a2,1
1444
 
1445
    lui     $a1,0x0002          # Leave with cache enabled
1446
    jr      $ra
1447
    mtc0    $a1,$12
1448 2 ja_rd
    .set    reorder
1449
    .end    entry
1450
 

powered by: WebSVN 2.1.0

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