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

Subversion Repositories ion

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

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

powered by: WebSVN 2.1.0

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