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

Subversion Repositories ion

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

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

powered by: WebSVN 2.1.0

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