📄 tt.fpu.bare.s
字号:
# SPIM S20 MIPS simulator.# A torture test for the FPU instructions in the bare SPIM simulator.# Copyright (C) 1990-2000 by 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/faculty/larus/Software/larus/SPIM/Tests/RCS/tt.fpu.bare.s,v 1.3 1994/01/18 03:23:44 larus Exp $# Adapted by Anne Rogers <amr@blueline.Princeton.EDU> from tt.le.s.# Run -bare -notrap.# Test floating point instructions. Warning: This code is not relocatable. # New data statements should be added after "Testing C.UN.S\n". .datasaved_ret_pc: .word 0 # Holds PC to return from mainsm: .asciiz "Failed " pt: .asciiz "Passed all tests\n" .text# Standard startup code. Invoke the routine main with no arguments. .globl __start__start: jal main addu $0 $0 $0 # Nop addiu $2 $0 10 syscall # syscall 10 (exit) addu $0 $0 $0 # Nop addu $0 $0 $0 # Nop addu $0 $0 $0 # Nop addu $0 $0 $0 # Nop .globl mainmain: lui $4 0x1000 sw $31 0($4) .dataabs.s_:.asciiz "Testing ABS.S\n"fp_s100:.float 100.0fp_sm100:.float -100.0 .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 abs.s_ lui $a0, 0x1000 ori $a0 $a0 0x1f syscall lui $2 0x1000 ori $2 $2 0x30 lwc1 $f0 0($2) addu $0 $0 $0 lw $4 0($2) addu $0 $0 $0 mfc1 $5 $f0 addu $0 $0 $0 bne $5 $4 fail addu $0 $0 $0 abs.s $f2 $f0 mfc1 $5 $f2 addu $0 $0 $0 #Nop bne $4 $5 fail lwc1 $f0 4($2) abs.s $f2 $f0 mfc1 $5 $f2 addu $0 $0 $0 #Nop bne $4 $5 fail addu $0 $0 $0 #Nop .dataabs.d_:.asciiz "Testing ABS.D\n"fp_d100:.double 100.0fp_dm100:.double -100.0 .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 abs.d_ lui $a0, 0x1000 ori $a0 $a0 0x38 syscall # la $2 fp_d100 lui $2, 0x1000 ori $2 $2 0x48 lw $4 0($2) lw $5 4($2) lwc1 $f0 0($2) lwc1 $f1 4($2) addu $0 $0 $0 #Nop abs.d $f2 $f0 mfc1 $6 $f2 mfc1 $7 $f3 addu $0 $0 $0 #Nop bne $4 $6 fail addu $0 $0 $0 #Nop bne $5 $7 fail lwc1 $f0 8($2) lwc1 $f1 12($2) addu $0 $0 $0 #Nop abs.d $f2 $f0 mfc1 $6 $f2 mfc1 $7 $f3 addu $0 $0 $0 #Nop bne $4 $6 fail addu $0 $0 $0 #Nop bne $5 $7 fail .dataadd.s_: .asciiz "Testing ADD.S\n"fp_s0: .float 0.0fp_s1: .float 1.0fp_sm1: .float -1.0 .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 add.s_ lui $a0 0x1000 ori $a0 $a0 0x58 syscall lui $2, 0x1000 ori $2 $2 0x68 lw $4 0($2) lwc1 $f0 0($2) addu $0 $0 $0 # Nop add.s $f2 $f0 $f0 mfc1 $6 $f2 addu $0 $0 $0 # Nop bne $4 $6 fail addu $0 $0 $0 # Nop lw $4 4($2) lwc1 $f0 0($2) lwc1 $f2 4($2) addu $0 $0 $0 # Nop add.s $f4 $f0 $f2 mfc1 $6 $f4 addu $0 $0 $0 # Nop bne $4 $6 fail lw $4 0($2) lwc1 $f0 4($2) lwc1 $f2 8($2) addu $0 $0 $0 # Nop add.s $f4 $f0 $f2 mfc1 $6 $f4 addu $0 $0 $0 # Nop bne $4 $6 fail .dataadd.d_: .asciiz "Testing ADD.D\n"fp_d0: .double 0.0fp_d1: .double 1.0fp_dm1: .double -1.0 .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 add.d_ lui $a0 0x1000 ori $a0 $a0 0x74 syscall lui $1 0x1000 ori $1 $1 0x88 lw $4 0($1) lw $5 4($1) lwc1 $f0 0($1) lwc1 $f1 4($1) addu $0 $0 $0 # Nop add.d $f2 $f0 $f0 mfc1 $6 $f2 mfc1 $7 $f3 addu $0 $0 $0 # Nop bne $4 $6 fail addu $0 $0 $0 # Nop bne $5 $7 fail lw $4 8($1) lw $5 12($1) lwc1 $f0 0($1) lwc1 $f1 4($1) lwc1 $f2 8($1) lwc1 $f3 12($1) addu $0 $0 $0 # Nop add.d $f4 $f0 $f2 mfc1 $6 $f4 mfc1 $7 $f5 addu $0 $0 $0 # Nop bne $4 $6 fail addu $0 $0 $0 # Nop bne $5 $7 fail lw $4 0($1) lw $5 4($1) lwc1 $f0 8($1) lwc1 $f1 12($1) lwc1 $f2 16($1) lwc1 $f3 20($1) addu $0 $0 $0 # Nop add.d $f4 $f0 $f2 mfc1 $6 $f4 mfc1 $7 $f5 addu $0 $0 $0 # Nop bne $4 $6 fail addu $0 $0 $0 # Nop bne $5 $7 fail addu $0 $0 $0 # Nop .datacvt.d.s_: .asciiz "Testing CVT.D.S\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 cvt.d.s_ lui $a0 0x1000 ori $a0 $a0 0xa0 syscall lui $1 0x1000 ori $1 $1 0x88 lw $4 0($1) #fp_d0 lw $5 4($1) #fp_d0+4 lui $2, 0x1000 ori $2 $2 0x68 lwc1 $f0 0($2) #fp_s0 addu $0 $0 $0 # Nop cvt.d.s $f2 $f0 mfc1 $6 $f2 mfc1 $7 $f3 addu $0 $0 $0 # Nop bne $4 $6 fail addu $0 $0 $0 # Nop bne $5 $7 fail addu $0 $0 $0 # Nop lw $4 8($1) # fp_d1 lw $5 12($1) # fp_d1+4 lwc1 $f0 4($2) # fp_s1 addu $0 $0 $0 # Nop cvt.d.s $f2 $f0 mfc1 $6 $f2 mfc1 $7 $f3 addu $0 $0 $0 # Nop bne $4 $6 fail addu $0 $0 $0 # Nop bne $5 $7 fail addu $0 $0 $0 # Nop lw $4 16($1) # fp_dm1 lw $5 20($1) # fp_dm1+4 lwc1 $f0 8($2) # fp_sm1 addu $0 $0 $0 # Nop cvt.d.s $f2 $f0 mfc1 $6 $f2 mfc1 $7 $f3 addu $0 $0 $0 # Nop bne $4 $6 fail addu $0 $0 $0 # Nop bne $5 $7 fail addu $0 $0 $0 # Nop .datacvt.d.w_: .asciiz "Testing CVT.D.W\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 cvt.d.w_ lui $a0 0x1000 ori $a0 $a0 0xb1 syscall lui $1 0x1000 ori $1 $1 0x88 lw $4 0($1) # fp_d0 lw $5 4($1) # fp_d0+4 mtc1 $0 $0 addu $0 $0 $0 # Nop cvt.d.w $f2 $f0 mfc1 $6 $f2 mfc1 $7 $f3 addu $0 $0 $0 # Nop bne $4 $6 fail addu $0 $0 $0 # Nop bne $5 $7 fail addu $0 $0 $0 # Nop lw $4 8($1) # fp_d1 lw $5 12 ($1) # fp_d1+4 addi $9 $0 1 mtc1 $9 $0 addu $0 $0 $0 # Nop cvt.d.w $f2 $f0 mfc1 $6 $f2 mfc1 $7 $f3 addu $0 $0 $0 # Nop bne $4 $6 fail addu $0 $0 $0 # Nop bne $5 $7 fail addu $0 $0 $0 # Nop lw $4 16($1) # fp_dm1 lw $5 20($1) # fp_dm1+4 addi $9 $0 -1 mtc1 $9 $0 addu $0 $0 $0 # Nop cvt.d.w $f2 $f0 mfc1 $6 $f2 mfc1 $7 $f3 bne $4 $6 fail addu $0 $0 $0 # Nop bne $5 $7 fail addu $0 $0 $0 # Nop .datacvt.s.d_: .asciiz "Testing CVT.S.D\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 cvt.s.d_ lui $a0 0x1000 ori $a0 $a0 0xc2 syscall lui $1 0x1000 ori $1 $1 0x68 lw $4 0($1) # fp_s0 lui $2 0x1000 ori $2 $2 0x88 lwc1 $f0 0($2) # fp_d0 lwc1 $f1 4($2) # fp_d0+4 addu $0 $0 $0 #Nop cvt.s.d $f2 $f0 mfc1 $6 $f2 addu $0 $0 $0 bne $4 $6 fail addu $0 $0 $0 lw $4 4($1) # fp_s1 lwc1 $f0 8($2) # fp_d1 lwc1 $f1 12($2) # fp_d1+4 addu $0 $0 $0 #Nop cvt.s.d $f2 $f0 addu $0 $0 $0 mfc1 $6 $f2 addu $0 $0 $0 bne $4 $6 fail addu $0 $0 $0 lw $4 8($1) # fp_sm1 lwc1 $f0 16($2) # fp_dm1 lwc1 $f1 20 ($2) # fp_dm1+4 addu $0 $0 $0 #Nop cvt.s.d $f2 $f0 mfc1 $6 $f2 addu $0 $0 $0 bne $4 $6 fail addu $0 $0 $0 .datacvt.s.w_: .asciiz "Testing CVT.S.W\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 cvt.s.w_ lui $a0 0x1000 ori $a0 $a0 0xd3 syscall lui $1 0x1000 ori $1 $1 0x68 lw $4 0($1) # fp_s0 mtc1 $0 $0 cvt.s.w $f2 $f0 mfc1 $6 $f2 addu $0 $0 $0 bne $4 $6 fail addu $0 $0 $0 lw $4 4($1) # fp_s1 addi $9 $0 1 mtc1 $9 $0 cvt.s.w $f2 $f0 mfc1 $6 $f2 addu $0 $0 $0 bne $4 $6 fail addu $0 $0 $0 lw $4 8($1) # fp_sm1 addi $9 $0 -1 mtc1 $9 $0 cvt.s.w $f2 $f0 mfc1 $6 $f2 addu $0 $0 $0 bne $4 $6 fail addu $0 $0 $0 .datacvt.w.d_: .asciiz "Testing CVT.W.D\n" .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 cvt.w.d_ lui $a0 0x1000 ori $a0 $a0 0xe4 syscall lui $1 0x1000 ori $1 $1 0x88 lwc1 $f0 0($1) # fp_d0 lwc1 $f1 4($1) # fp_d0+4 addu $0 $0 $0 # Nop cvt.w.d $f2 $f0 mfc1 $6 $f2 addu $0 $0 $0 # Nop bne $0 $6 fail addu $0 $0 $0 # Nop lwc1 $f0 8($1) # fp_d1 lwc1 $f1 12($1) # fp_d1+4 addu $0 $0 $0 # Nop cvt.w.d $f2 $f0 mfc1 $6 $f2 addi $4 $0 1 addu $0 $0 $0 # Nop bne $4 $6 fail addu $0 $0 $0 # Nop lwc1 $f0 16($1) # fp_dm1 lwc1 $f1 20($1) # fp_dm1+4 addu $0 $0 $0 #Nop cvt.w.d $f2 $f0 mfc1 $6 $f2 addi $4 $0 -1 bne $4 $6 fail addu $0 $0 $0 # Nop .datacvt.w.s_: .asciiz "Testing CVT.W.S\n" .text# addi $v0 $0 4 # syscall 4 (print_str)# la $a0 cvt.w.s_ lui $a0 0x1000 ori $a0 $a0 0xf5 syscall lui $1 0x1000 ori $1 $1 0x68 lwc1 $f0 0($1) # fp_s0 addu $0 $0 $0 #Nop cvt.w.s $f2 $f0 mfc1 $6 $f2 addu $0 $0 $0 # Nop bne $0 $6 fail addu $0 $0 $0 # Nop lwc1 $f0 4($1) # fp_s1 addu $0 $0 $0 #Nop cvt.w.s $f2 $f0 mfc1 $6 $f2 addi $4 $0 1 bne $4 $6 fail addu $0 $0 $0 # Nop lwc1 $f0 8($1) # fp_sm1 addu $0 $0 $0 #Nop cvt.w.s $f2 $f0 mfc1 $6 $f2 addi $4 $0 -1 bne $4 $6 fail addu $0 $0 $0 # Nop .datadiv.s_: .asciiz "Testing DIV.S\n"fp_s2: .float 2.0fp_s3: .float 3.0fp_s1p5:.float 1.5 .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 div.s_ lui $a0 0x1000 ori $a0 $a0 0x106 syscall lui $1 0x1000 ori $1 $1 0x68 lw $4 4($1) # fp_s1 lwc1 $f0 4($1) # fp_s1 addu $0 $0 $0 #Nop div.s $f2 $f0 $f0 mfc1 $6 $f2 addu $0 $0 $0 # Nop bne $4 $6 fail addu $0 $0 $0 # Nop lui $2 0x1000 ori $2 $2 0x118 lw $4 8($2) # fp_s1p5 lwc1 $f0 4($2) # fp_s3 lwc1 $f2 0($2) # fp_s2 addu $0 $0 $0 #Nop div.s $f4 $f0 $f2 mfc1 $6 $f4 addu $0 $0 $0 # Nop bne $4 $6 fail addu $0 $0 $0 # Nop .datadiv.d_: .asciiz "Testing DIV.D\n"# EOS = 132...align to 138fp_d2: .double 2.0fp_d3: .double 3.0fp_d1p5:.double 1.5 .text addi $v0 $0 4 # syscall 4 (print_str)# la $a0 div.d_ lui $a0 0x1000 ori $a0 $a0 0x124 syscall lui $1 0x1000 ori $1 $1 0x90 lw $4 0($1) # fp_d1 lw $5 4($1) # fp_d1+4 lwc1 $f0 0($1) # fp_d1 lwc1 $f1 4($1) # fp_d1+4 addu $0 $0 $0 #Nop div.d $f2 $f0 $f0 mfc1 $6 $f2 mfc1 $7 $f3 addu $0 $0 $0 # Nop bne $4 $6 fail addu $0 $0 $0 # Nop bne $5 $7 fail addu $0 $0 $0 # Nop lui $2 0x1000 ori $2 $2 0x138 # Nop lw $4 16($2) # fp_d1p5 lw $5 20($2) # fp_d1p5+4 lwc1 $f0 8($2) # fp_d3 lwc1 $f1 12($2) # fp_d3+4
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -