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

Subversion Repositories ion

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

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

powered by: WebSVN 2.1.0

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