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

Subversion Repositories ion

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

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

powered by: WebSVN 2.1.0

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