?? tt.le.s
字號:
# SPIM S20 MIPS simulator.# A torture test for the SPIM simulator.# Version for little-endian systems.# Copyright (C) 1990-2000 James Larus, larus@cs.wisc.edu.# ALL RIGHTS RESERVED.## SPIM is distributed under the following conditions:## You may make copies of SPIM for your own use and modify those copies.## All copies of SPIM must retain my name and copyright notice.## You may not sell SPIM or distributed SPIM in conjunction with a commerical# product or service without the expressed written consent of James Larus.## THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR# PURPOSE.## $Header: /u/l/a/larus/Software/SPIM/src/Tests/RCS/tt.le.s,v 1.44 1999/01/12 05:57:03 larus Exp $ .datasaved_ret_pc: .word 0 # Holds PC to return from mainm3: .asciiz "The next few lines should contain exception error messages\n"m4: .asciiz "Done with exceptions\n\n" .text .globl mainmain: sw $31 saved_ret_pc## The first thing to do is to test the exceptions:# li $v0 4 # syscall 4 (print_str) la $a0 m3 syscall# Exception 1 (INT) -- Not implemented yet# Exception 4 (ADEL) li $t0 0x400000 lw $3 1($t0)# Exception 5 (ADES) sw $3 1($t0)# Exception 6 (IBUS) -- Can't test and continue# Exception 7 (DBUS) lw $3 10000000($t0)# Exception 8 (SYSCALL) -- Not implemented# Exception 9 (BKPT) break 0# Exception 10 (RI) -- Not implemented (can't enter bad instructions)# Exception 12 (overflow) li $t0 0x7fffffff add $t0 $t0 $t0 li $v0 4 # syscall 4 (print_str) la $a0 m4 syscall## Try modifying R0# add $0, $0, 1 bnez $0 fail## Now, test each instruction# .dataadd_: .asciiz "Testing ADD\n" .text li $v0 4 # syscall 4 (print_str) la $a0 add_ syscall li $2 1 li $3 -1 add $4, $0, $0 bnez $4 fail add $4, $0, $2 bne $4 1 fail add $4, $4, $3 bnez $4 fail .dataaddi_: .asciiz "Testing ADDI\n" .text li $v0 4 # syscall 4 (print_str) la $a0 addi_ syscall addi $4, $0, 0 bnez $4 fail addi $4, $0, 1 bne $4 1 fail addi $4, $4, -1 bnez $4 fail .dataaddiu_: .asciiz "Testing ADDIU\n" .text li $v0 4 # syscall 4 (print_str) la $a0 addiu_ syscall addiu $4, $0, 0 bnez $4 fail addiu $4, $0, 1 bne $4 1 fail addiu $4, $4, -1 bnez $4 fail li $2 0x7fffffff addiu $2 $2 2 # should not trap bne $2 0x80000001 fail .dataaddu_: .asciiz "Testing ADDU\n" .text li $v0 4 # syscall 4 (print_str) la $a0 addu_ syscall li $2 1 li $3 -1 addu $4, $0, $0 bnez $4 fail addu $4, $0, $2 bne $4 1 fail addu $4, $4, $3 bnez $4 fail li $2 0x7fffffff addu $2 $2 $2 # should not trap bne $2 -2 fail .dataand_: .asciiz "Testing AND\n" .text li $v0 4 # syscall 4 (print_str) la $a0 and_ syscall li $2 1 li $3 -1 and $4 $0 $0 bnez $4 fail and $4 $2 $2 beqz $4 fail and $4 $2 $3 bne $4 1 fail .dataandi_: .asciiz "Testing ANDI\n" .text li $v0 4 # syscall 4 (print_str) la $a0 andi_ syscall li $2 1 li $3 -1 andi $4 $0 0 bnez $4 fail and $4 $2 1 beqz $4 fail and $4 $2 -1 bne $4 1 fail and $4 $3 -1 bne $4 $3 fail .databeq_: .asciiz "Testing BEQ\n" .text li $v0 4 # syscall 4 (print_str) la $a0 beq_ syscall li $2 -1 li $3 1 beq $0 $0 l1 j faill1: beq $2 $2 l2 j faill2: beq $3 $2 fail beq $2 $2 far_away # Check long branch j failcome_back: li $2 3l2_1: sub $2 $2 1 bnez $2, l2_1 .databgez_: .asciiz "Testing BGEZ\n" .text li $v0 4 # syscall 4 (print_str) la $a0 bgez_ syscall li $2 -1 li $3 1 bgez $0 l3 j faill3: bgez $3 l4 j faill4: bgez $2 fail .databgezal_:.asciiz "Testing BGEZAL\n" .text li $v0 4 # syscall 4 (print_str) la $a0 bgezal_ syscall li $2 -1 li $3 1 bgezal $0 l5 j fail bgezal $2 faill5: bgezal $3 l6l55: j faill6: la $4 l55 bne $31 $4 fail .databgtz_: .asciiz "Testing BGTZ\n" .text li $v0 4 # syscall 4 (print_str) la $a0 bgtz_ syscall li $2 -1 li $3 1 bgtz $0 faill7: bgtz $3 l8 j faill8: bgtz $2 fail .datablez_: .asciiz "Testing BLEZ\n" .text li $v0 4 # syscall 4 (print_str) la $a0 blez_ syscall li $2 -1 li $3 1 blez $0 l9 j faill9: blez $2 l10 j faill10: blez $3 fail .databltz_: .asciiz "Testing BLTZ\n" .text li $v0 4 # syscall 4 (print_str) la $a0 bltz_ syscall li $2 -1 li $3 1 bltz $0 faill11: bltz $2 l12 j faill12: bltz $3 fail .databltzal_:.asciiz "Testing BLTZAL\n" .text li $v0 4 # syscall 4 (print_str) la $a0 bltzal_ syscall li $2 -1 li $3 1 bltzal $0 fail bltzal $3 faill13: bltzal $2 l15l14: j faill15: la $4 l14 bne $31 $4 fail .databne_: .asciiz "Testing BNE\n" .text li $v0 4 # syscall 4 (print_str) la $a0 bne_ syscall li $2 -1 li $3 1 bne $0 $0 fail bne $2 $2 fail bne $3 $2 l16l16: .databreak_: .asciiz "Testing BREAK\nExpect a exception message:\n " .text li $v0 4 # syscall 4 (print_str) la $a0 break_ syscall break 3# COPz is not implemented or checked .dataccp_: .asciiz "Testing move to/from coprocessor control z\n" .text li $v0 4 # syscall 4 (print_str) la $a0 ccp_ syscall li $2 0x7f7f ctc0 $2 $3 cfc0 $4 $3 bne $2 $4 fail li $2 0x7f7f ctc1 $2 $3 cfc1 $4 $3 bne $2 $4 fail li $2 0x7f7f ctc2 $2 $3 cfc2 $4 $3 bne $2 $4 fail li $2 0x7f7f ctc3 $2 $3 cfc3 $4 $3 bne $2 $4 fail .datadiv_: .asciiz "Testing DIV\n"div2_: .asciiz "Expect exception caused by divide by 0:\n " .text li $v0 4 # syscall 4 (print_str) la $a0 div_ syscall li $2 4 li $3 2 li $4 -2 div $5 $2 $3 bne $5 2 fail mfhi $5 bne $5 0 fail div $5 $2 $4 bne $5 -2 fail mfhi $5 bne $5 0 fail li $v0 4 # syscall 4 (print_str) la $a0 div2_ syscall div $5 $2 $0 .datadivu_: .asciiz "Testing DIVU\n"divu2_: .asciiz "Expect exception caused by divide by 0:\n " .text li $v0 4 # syscall 4 (print_str) la $a0 divu_ syscall li $2 4 li $3 2 li $4 -2 divu $5 $2 $3 bne $5 2 fail mfhi $5 bne $5 0 fail divu $0 $2 $3 mflo $5 bne $5 2 fail mfhi $5 bne $5 0 fail divu $5 $2 $4 bne $5 0 fail mfhi $5 bne $5 4 fail li $v0 4 # syscall 4 (print_str) la $a0 divu2_ syscall divu $5 $2 $0 .dataj_: .asciiz "Testing J\n" .text li $v0 4 # syscall 4 (print_str) la $a0 j_ syscall j l17 j fail .ktext nop # These instructions aren't executed, but j l17a # cause parser errors since high 4 bitsl17a: # don't match j l17b .textl17b: nop j l17a # Correctly flagged as error here.l17: .datajal_: .asciiz "Testing JAL\n" .text li $v0 4 # syscall 4 (print_str) la $a0 jal_ syscall jal l18l19: j l20l18: la $4 l19 bne $31 $4 fail jr $31l20: .datajalr_: .asciiz "Testing JALR\n"jalr2_: .asciiz "Expect an non-word boundary exception:\n " .text li $v0 4 # syscall 4 (print_str) la $a0 jalr_ syscall la $2 l21 jalr $3, $2l23: j l22l21: la $4 l23 bne $3 $4 fail jr $3l22: li $v0 4 # syscall 4 (print_str) la $a0 jalr2_ syscall la $2 l24 add $2 $2 2l24: jalr $3 $2 .datajr_: .asciiz "Testing JR\n"jr2_: .asciiz "Expect an non-word boundary exception:\n " .text li $v0 4 # syscall 4 (print_str) la $a0 jr_ syscall la $2 l25 jr $2 j faill25: li $v0 4 # syscall 4 (print_str) la $a0 jr2_ syscall la $2 l27 add $2 $2 2l27: jr $2 .datala_: .asciiz "Testing LA\n" .text li $v0 4 # syscall 4 (print_str) la $a0 la_ syscall # Simple cases already tested li $4 101 la $5 10($4) bne $5 111 fail .datalb_: .asciiz "Testing LB\n"lb2_: .asciiz "Expect an address error exceptions:\n "lbd_: .byte 1, -1, 0, 128lbd1_: .word 0x76543210, 0xfedcba98 .text li $v0 4 # syscall 4 (print_str) la $a0 lb_ syscall la $2 lbd_ lb $3 0($2) bne $3 1 fail lb $3 1($2) bne $3 -1 fail lb $3 2($2) bne $3 0 fail lb $3 3($2) bne $3 0xffffff80 fail la $t0 lbd1_ lb $t1 0($t0) bne $t1 0x10 fail lb $t1 1($t0) bne $t1 0x32 fail lb $t1 2($t0) bne $t1 0x54 fail lb $t1 3($t0) bne $t1 0x76 fail lb $t1 4($t0) bne $t1 0xffffff98 fail lb $t1 5($t0) bne $t1 0xffffffba fail lb $t1 6($t0) bne $t1 0xffffffdc fail lb $t1 7($t0) bne $t1 0xfffffffe fail li $v0 4 # syscall 4 (print_str) la $a0 lb2_ syscall li $t5 0x7fffffff lb $3 1000($t5) .datalbu_: .asciiz "Testing LBU\n" .text li $v0 4 # syscall 4 (print_str) la $a0 lbu_ syscall la $2 lbd_ lbu $3 0($2) bne $3 1 fail lbu $3 1($2) bne $3 0xff fail lbu $3 2($2) bne $3 0 fail lbu $3 3($2) bne $3 128 fail la $t0 lbd1_ lbu $t1 0($t0) bne $t1 0x10 fail lbu $t1 1($t0) bne $t1 0x32 fail lbu $t1 2($t0) bne $t1 0x54 fail lbu $t1 3($t0) bne $t1 0x76 fail lbu $t1 4($t0) bne $t1 0x98 fail lbu $t1 5($t0) bne $t1 0xba fail lbu $t1 6($t0) bne $t1 0xdc fail lbu $t1 7($t0) bne $t1 0xfe fail li $v0 4 # syscall 4 (print_str) la $a0 lb2_ syscall li $t5 0x7fffffff lbu $3 1000($t5) .datald_: .asciiz "Testing LD\n"ld2_: .asciiz "Expect four address error exceptions:\n"ldd_: .word 1, -1, 0, 0x8000000 .text li $v0 4 # syscall 4 (print_str) la $a0 ld_ syscall la $2 ldd_ ld $3 0($2) bne $3 1 fail bne $4 -1 fail ld $3 8($2) bne $3 0 fail bne $4 0x8000000 fail li $v0 4 # syscall 4 (print_str) la $a0 ld2_ syscall li $t5 0x7fffffff ld $3 1000($t5) ld $3 1001($t5) .datalh_: .asciiz "Testing LH\n"lh2_: .asciiz "Expect two address error exceptions:\n"lhd_: .half 1, -1, 0, 0x8000 .text li $v0 4 # syscall 4 (print_str) la $a0 lh_ syscall la $2 lhd_ lh $3 0($2) bne $3 1 fail lh $3 2($2) bne $3 -1 fail lh $3 4($2) bne $3 0 fail lh $3 6($2) bne $3 0xffff8000 fail li $v0 4 # syscall 4 (print_str) la $a0 lh2_ syscall li $t5 0x7fffffff lh $3 1000($t5) lh $3 1001($t5) .datalhu_: .asciiz "Testing LHU\n" .text li $v0 4 # syscall 4 (print_str) la $a0 lhu_ syscall la $2 lhd_ lhu $3 0($2) bne $3 1 fail lhu $3 2($2) bne $3 0xffff fail lhu $3 4($2) bne $3 0 fail lhu $3 6($2) bne $3 0x8000 fail li $v0 4 # syscall 4 (print_str) la $a0 lh2_ syscall li $t5 0x7fffffff lhu $3 1000($t5) lhu $3 1001($t5) .datalui_: .asciiz "Testing LUI\n" .text li $v0 4 # syscall 4 (print_str) la $a0 lui_ syscall lui $2 0 bne $2 $0 fail lui $2 1 srl $2 $2 16 addiu $2 $2 -1 # Don't do compare directly since it uses LUI bne $2 $0 fail lui $2 1 andi $2 $2 0xffff bne $2 $0 fail lui $2 0xffff srl $2 $2 16 addiu $2 $2 1 andi $2 $2 0xffff bne $2 $0 fail .datalw_: .asciiz "Testing LW\n"lwd_: .word 1, -1, 0, 0x8000000 .text li $v0 4 # syscall 4 (print_str) la $a0 lw_ syscall la $2 lwd_ lw $3 0($2) bne $3 1 fail lw $3 4($2) bne $3 -1 fail lw $3 8($2) bne $3 0 fail lw $3 12($2) bne $3 0x8000000 fail add $2 $2 12 lw $3 -12($2) bne $3 1 fail lw $3 -8($2) bne $3 -1 fail lw $3 -4($2) bne $3 0 fail lw $3 0($2) bne $3 0x8000000 fail li $v0 4 # syscall 4 (print_str) la $a0 lh2_ syscall li $t5 0x7fffffff lw $3 1000($t5) lw $3 1001($t5) .datalwl_: .asciiz "Testing LWL\n" .align 2lwld_: .byte 0 1 2 3 4 5 6 7 .text li $v0 4 # syscall 4 (print_str) la $a0 lwl_ syscall la $2 lwld_ move $3 $0 lwl $3 0($2) bne $3 0 fail move $3 $0 lwl $3 1($2) bne $3 0x01000000 fail li $3 5 lwl $3 1($2) bne $3 0x01000005 fail move $3 $0 lwl $3 2($2) bne $3 0x02010000 fail li $3 5 lwl $3 2($2) bne $3 0x02010005 fail move $3 $0 lwl $3 3($2) bne $3 0x03020100 fail li $3 5 lwl $3 3($2) bne $3 0x03020100 fail li $v0 4 # syscall 4 (print_str) la $a0 lh2_ syscall li $t5 0x7fffffff lwl $3 1000($t5) lwl $3 1001($t5) .datalwr_: .asciiz "Testing LWR\n" .align 2lwrd_: .byte 0 1 2 3 4 5 6 7 .text li $v0 4 # syscall 4 (print_str) la $a0 lwr_ syscall la $2 lwrd_ li $3 0x00000500 lwr $3 0($2) bne $3 0x3020100 fail move $3 $0 lwr $3 1($2) bne $3 0x30201 fail li $3 0x50000000 lwr $3 1($2) bne $3 0x50030201 fail move $3 $0 lwr $3 2($2) bne $3 0x0302 fail li $3 0x50000000 lwr $3 2($2) bne $3 0x50000302 fail li $v0 4 # syscall 4 (print_str) la $a0 lh2_ syscall li $t5 0x7fffffff lwr $3 1000($t5) lwr $3 1001($t5) .datamcp_: .asciiz "Testing move to/from coprocessor z\n" .text li $v0 4 # syscall 4 (print_str) la $a0 mcp_ syscall li $2 0x7f7f mtc0 $2 $3 mfc0 $4 $3 bne $2 $4 fail li $2 0x7f7f mtc1 $2 $3 mfc1 $4 $f3 bne $2 $4 fail li $2 0x7f7f li $3 0xf7f7 mtc1.d $2 $4 mfc1.d $6 $4 bne $2 $6 fail bne $3 $7 fail li $2 0x7f7f mtc2 $2 $3 mfc2 $4 $3 bne $2 $4 fail li $2 0x7f7f mtc3 $2 $3 mfc3 $4 $3 bne $2 $4 fail .datahilo_: .asciiz "Testing move to/from HI/LO\n" .text li $v0 4 # syscall 4 (print_str) la $a0 hilo_ syscall mthi $0 mfhi $2 bnez $2 fail mtlo $0 mflo $2 bnez $2 fail li $2 1 mthi $2 mfhi $3 bne $3 $2 fail li $2 1 mtlo $2 mflo $3 bne $3 $2 fail li $2 -1 mthi $2 mfhi $3 bne $3 $2 fail li $2 -1 mtlo $2 mflo $3 bne $3 $2 fail .datamul_: .asciiz "Testing MUL\n" .text li $v0 4 # syscall 4 (print_str) la $a0 mul_ syscall li $2, 1 mul $3, $2, 0 bnez $3 fail mul $3, $2, 1 bne $3 1 fail mul $3, $2, 10 bne $3 10 fail mul $2 $0 $0 bnez $2 fail mfhi $3 bnez $3 fail mflo $3 bnez $3 fail li $4, 1 mul $2 $4 $4 bne $2 1 fail mfhi $3 bnez $3 fail mflo $3 bne $3 1 fail li $4, -1 mul $2 $4 $4 bne $2 1 fail mfhi $3 bnez $3 fail mflo $3 bne $3 1 fail li $4, -1 li $5, 1 mul $2 $4 $5 bne $2 -1 fail mfhi $3 bne $3 -1 fail mflo $3 bne $3 -1 fail li $4, 0x10000 mul $2 $4 $4 bne $2 0 fail mfhi $3 bne $3 1 fail mflo $3 bne $3 0 fail li $4, 0x80000000 mul $2 $4 $4 bne $2 0 fail mfhi $3 bne $3 0x40000000 fail mflo $3 bne $3 0 fail .datamultu_: .asciiz "Testing MULTU\n" .text li $v0 4 # syscall 4 (print_str) la $a0 multu_ syscall multu $0 $0 mfhi $3 bnez $3 fail mflo $3 bnez $3 fail li $4, 1 multu $4 $4 mfhi $3 bnez $3 fail mflo $3 bne $3 1 fail li $4, -1 multu $4 $4 mfhi $3 bne $3 0xfffffffe fail mflo $3 bne $3 1 fail li $4, -1 li $5, 0 multu $4 $5 mfhi $3 bne $3 0 fail mflo $3 bne $3 0 fail li $4, -1 li $5, 1 multu $4 $5 mfhi $3 bne $3 0 fail mflo $3 bne $3 -1 fail li $4, 0x10000 multu $4 $4 mfhi $3 bne $3 1 fail mflo $3 bne $3 0 fail li $4, 0x80000000 multu $4 $4 mfhi $3 bne $3 0x40000000 fail mflo $3 bne $3 0 fail li $3, 0xcecb8f27 li $4, 0xfd87b5f2 multu $3 $4 mfhi $3 bne $3 0xcccccccb fail mflo $3 bne $3 0x7134e5de fail .datamulo_: .asciiz "Testing MULO\n"mulo1_: .asciiz "Expect an exception:\n " .text li $v0 4 # syscall 4 (print_str) la $a0 mulo_ syscall mulo $2 $0 $0 bne $2 0 fail li $4, 1 mulo $2 $4 $4 bne $2 1 fail li $4, -1 mulo $2 $4 $4 bne $2 1 fail li $4, -1 li $5, 1 mulo $2 $4 $5 bne $2 -1 fail li $v0 4 # syscall 4 (print_str)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -