1 # MIPS simulator instruction tests
5 # Do "run_sim_test TESTFILE MODELS" for each combination of the
6 # mf{lo,hi} -> mult/div/mt{lo,hi} hazard described in mips.igen.
7 # Insert NOPS nops after the mflo or mfhi.
8 proc run_hilo_test {testfile models nops} {
10 foreach insn "{mult\t\$4,\$4} {div\t\$0,\$4,\$4} {mt$reg\t\$4}" {
12 append contents "\t.macro hilo\n"
13 append contents "\tmf$reg\t\$4\n"
14 append contents "\t.rept\t$nops\n"
15 append contents "\tnop\n"
16 append contents "\t.endr\n"
17 append contents "\t$insn\n"
18 append contents "\t.endm"
20 verbose -log "HILO test:\n$contents"
21 set file [open hilo-hazard.inc w]
25 run_sim_test $testfile $models
30 # Runs micromips tests by adding -mmicromips to as options
31 proc run_micromips_test { name requested_machs } {
32 global ASFLAGS_FOR_TARGET
33 set ASFLAGS_FOR_TARGET "-mmicromips"
34 run_sim_test $name $requested_machs
35 unset ASFLAGS_FOR_TARGET
39 proc run_endian_tests { name requested_machs } {
40 global ASFLAGS_FOR_TARGET
41 global LDFLAGS_FOR_TARGET
42 run_sim_test $name $requested_machs
43 set ASFLAGS_FOR_TARGET "-EL"
44 set LDFLAGS_FOR_TARGET "-EL"
45 run_sim_test $name $requested_machs
46 unset ASFLAGS_FOR_TARGET
47 unset LDFLAGS_FOR_TARGET
50 # Runs all specified tests
51 proc run_sim_tests { name requested_machs { requested_micromips_machs "" } } {
52 run_sim_test $name $requested_machs
53 run_micromips_test $name $requested_micromips_machs
57 # Runs the combination of instructions removed in R6 through the testsuite
58 proc run_r6_removed_test {testfile models} {
60 set fd [open "$srcdir/$subdir/r6-removed.csv" r]
61 set file_data [read $fd]
63 set data [split $file_data "\n"]
65 set line_contents [split $line ","]
66 set mnemonic [lindex $line_contents 0]
67 set insn [lindex $line_contents 1]
69 if {[string compare $insn ""] == 1} {
72 append contents ".macro removed_instr\n"
73 append contents ".word $insn\n"
74 append contents "nop\n"
75 append contents ".endm"
77 verbose -log "r6-removed test: $mnemonic\n$contents"
78 set file [open r6-removed.inc w]
82 run_sim_test $testfile $models
89 # Used to locate the `run` program.
95 set micromipsmodels ""
96 set micromipsdspmodels ""
98 if {[istarget mipsisa64sb1*-*-elf]} {
100 set submodels "mips1 mips2 mips3 mips4 mips32 mips64"
101 append mdmxmodels " mips64"
102 } elseif {[istarget mipsisa64r6*-*-elf]} {
103 set models "mips32r6 mips64r6"
105 } elseif {[istarget mipsisa64*-*-elf]} {
106 set models "mips32 mips64 mips32r2 mips64r2"
107 set submodels "mips1 mips2 mips3 mips4"
108 append dspmodels " mips32r2 mips64r2"
109 append mdmxmodels " mips64 mips32r2 mips64r2"
110 } elseif {[istarget mips*-sde-elf*] || [istarget mips*-mti-elf*]} {
111 set models "mips32 mips64 mips32r2 mips64r2 mips32r6 mips64r6"
113 append dspmodels " mips32r2 mips64r2 mips32r6 mips64r6"
114 append mdmxmodels " mips64 mips32r2 mips64r2 mips32r6 mips64r6"
115 append micromipsmodels " mips32r2 mips64r2"
116 append micromipsdspmodels " mips32r2 mips64r2"
117 } elseif {[istarget mipsisa32r6*-*-elf]} {
118 set models "mips32r6"
120 } elseif {[istarget mipsisa32*-*-elf]} {
121 set models "mips32 mips32r2"
122 set submodels "mips1 mips2"
123 append dspmodels " mips32r2"
124 append mdmxmodels " mips32r2"
125 append micromipsmodels " mips32r2"
126 append micromipsdspmodels " mips32r2"
127 } elseif {[istarget mips64vr*-*-elf]} {
128 set models "vr4100 vr4111 vr4120 vr5000 vr5400 vr5500"
129 set submodels "mips1 mips2 mips3 mips4"
130 } elseif {[istarget mips64*-*-elf]} {
132 set submodels "mips1 mips2"
134 # fall back to just testing mips1 code.
138 append submodels " " $models
139 set cpu_option -march
141 run_sim_tests sanity.s $submodels $micromipsmodels
144 run_hilo_test hilo-hazard-1.s $models $nops
145 run_hilo_test hilo-hazard-2.s $models $nops
147 run_hilo_test hilo-hazard-3.s $models 2
148 run_hilo_test hilo-hazard-4.s $micromipsmodels 2
150 run_sim_test fpu64-ps.s $submodels
151 run_sim_test fpu64-ps-sb1.s $submodels
153 run_sim_test mdmx-ob.s $mdmxmodels
154 run_sim_test mdmx-ob-sb1.s $mdmxmodels
156 run_sim_tests mips32-dsp.s $dspmodels $micromipsdspmodels
157 run_sim_tests mips32-dsp2.s $dspmodels $micromipsdspmodels
159 run_sim_test r2-fpu.s $models
161 run_sim_test r6-fpu.s $models
162 run_sim_test r6.s $models
163 run_sim_test r6-forbidden.s $models
164 run_r6_removed_test r6-removed.s $models
165 run_sim_test r6-64.s $models
166 run_sim_test r6-branch.s $models
167 run_endian_tests r6-llsc-wp.s $models
168 run_endian_tests r6-llsc-dp.s $models