summaryrefslogtreecommitdiff
path: root/sim/testsuite/mips/basic.exp
blob: 81cce85a5b2ecdc51538f7d11f074aec72cc0369 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# MIPS simulator instruction tests

sim_init

# Do "run_sim_test TESTFILE MODELS" for each combination of the
# mf{lo,hi} -> mult/div/mt{lo,hi} hazard described in mips.igen.
# Insert NOPS nops after the mflo or mfhi.
proc run_hilo_test {testfile models nops} {
    foreach reg {lo hi} {
	foreach insn "{mult\t\$4,\$4} {div\t\$0,\$4,\$4} {mt$reg\t\$4}" {
	    set contents ""
	    append contents "\t.macro hilo\n"
	    append contents "\tmf$reg\t\$4\n"
	    append contents "\t.rept\t$nops\n"
	    append contents "\tnop\n"
	    append contents "\t.endr\n"
	    append contents "\t$insn\n"
	    append contents "\t.endm"

	    verbose -log "HILO test:\n$contents"
	    set file [open hilo-hazard.inc w]
	    puts $file $contents
	    close $file

	    run_sim_test $testfile $models
	}
    }
}

# Runs micromips tests by adding -mmicromips to as options
proc run_micromips_test { name requested_machs } {
    global ASFLAGS_FOR_TARGET
    set ASFLAGS_FOR_TARGET "-mmicromips"
    run_sim_test $name $requested_machs
    unset ASFLAGS_FOR_TARGET
}

# Runs all specified tests
proc run_sim_tests { name requested_machs { requested_micromips_machs "" } } {
    run_sim_test $name $requested_machs
    run_micromips_test $name $requested_micromips_machs
}

if {[istarget *]} {
    set dspmodels ""
    set mdmxmodels ""
    set micromipsmodels ""
    set micromipsdspmodels ""

    if {[istarget mipsisa64sb1*-*-elf]} {
	set models "sb1"
	set submodels "mips1 mips2 mips3 mips4 mips32 mips64"
	append mdmxmodels " mips64"
    } elseif {[istarget mipsisa64*-*-elf]} {
	set models "mips32 mips64 mips32r2 mips64r2"
	set submodels "mips1 mips2 mips3 mips4"
	append dspmodels " mips32r2 mips64r2"
	append mdmxmodels " mips64 mips32r2 mips64r2"
    } elseif {[istarget mips*-sde-elf*] || [istarget mips*-mti-elf*]} {
	set models "mips32 mips64 mips32r2 mips64r2"
	set submodels ""
	append dspmodels " mips32r2 mips64r2"
	append mdmxmodels " mips64 mips32r2 mips64r2"
	append micromipsmodels " mips32r2"
	append micromipsdspmodels " mips32r2 mips64r2"
    } elseif {[istarget mipsisa32*-*-elf]} {
	set models "mips32 mips32r2"
	set submodels "mips1 mips2"
	append dspmodels " mips32r2"
	append mdmxmodels " mips32r2"
	append micromipsmodels " mips32r2"
	append micromipsdspmodels " mips32r2"
    } elseif {[istarget mips64vr*-*-elf]} {
	set models "vr4100 vr4111 vr4120 vr5000 vr5400 vr5500"
	set submodels "mips1 mips2 mips3 mips4"
    } elseif {[istarget mips64*-*-elf]} {
	set models "mips3"
	set submodels "mips1 mips2"
    } else {
	# fall back to just testing mips1 code.
	set models "mips1"
	set submodels ""
    }
    append submodels " " $models
    set cpu_option -march

    run_sim_tests sanity.s $submodels $micromipsmodels

    foreach nops {0 1} {
	run_hilo_test hilo-hazard-1.s $models $nops
	run_hilo_test hilo-hazard-2.s $models $nops
    }
    run_hilo_test hilo-hazard-3.s $models 2
    run_hilo_test hilo-hazard-4.s $micromipsmodels 2

    run_sim_test fpu64-ps.s $submodels
    run_sim_test fpu64-ps-sb1.s $submodels

    run_sim_test mdmx-ob.s $mdmxmodels
    run_sim_test mdmx-ob-sb1.s $mdmxmodels

    run_sim_tests mips32-dsp.s $dspmodels $micromipsdspmodels
    run_sim_tests mips32-dsp2.s $dspmodels $micromipsdspmodels

}