1# MIPS simulator instruction tests 2 3sim_init 4 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. 8proc run_hilo_test {testfile models nops} { 9 foreach reg {lo hi} { 10 foreach insn "{mult\t\$4,\$4} {div\t\$0,\$4,\$4} {mt$reg\t\$4}" { 11 set contents "" 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" 19 20 verbose -log "HILO test:\n$contents" 21 set file [open hilo-hazard.inc w] 22 puts $file $contents 23 close $file 24 25 run_sim_test $testfile $models 26 } 27 } 28} 29 30# Runs micromips tests by adding -mmicromips to as options 31proc 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 36} 37 38# Runs endian tests 39proc 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 48} 49 50# Runs all specified tests 51proc run_sim_tests { name requested_machs { requested_micromips_machs "" } } { 52 run_sim_test $name $requested_machs 53 run_micromips_test $name $requested_micromips_machs 54} 55 56 57# Runs the combination of instructions removed in R6 through the testsuite 58proc run_r6_removed_test {testfile models} { 59 global subdir srcdir 60 set fd [open "$srcdir/$subdir/r6-removed.csv" r] 61 set file_data [read $fd] 62 close $fd 63 set data [split $file_data "\n"] 64 foreach line $data { 65 set line_contents [split $line ","] 66 set mnemonic [lindex $line_contents 0] 67 set insn [lindex $line_contents 1] 68 69 if {[string compare $insn ""] == 1} { 70 71 set contents "" 72 append contents ".macro removed_instr\n" 73 append contents ".word $insn\n" 74 append contents "nop\n" 75 append contents ".endm" 76 77 verbose -log "r6-removed test: $mnemonic\n$contents" 78 set file [open r6-removed.inc w] 79 puts $file $contents 80 close $file 81 82 run_sim_test $testfile $models 83 } 84 } 85} 86 87 88if {[istarget *]} { 89 # Used to locate the `run` program. 90 global arch 91 set arch "mips" 92 93 set dspmodels "" 94 set mdmxmodels "" 95 set micromipsmodels "" 96 set micromipsdspmodels "" 97 98 if {[istarget mipsisa64sb1*-*-elf]} { 99 set models "sb1" 100 set submodels "mips1 mips2 mips3 mips4 mips32 mips64" 101 append mdmxmodels " mips64" 102 } elseif {[istarget mipsisa64r6*-*-elf]} { 103 set models "mips32r6 mips64r6" 104 set submodels "" 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" 112 set submodels "" 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" 119 set submodels "" 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]} { 131 set models "mips3" 132 set submodels "mips1 mips2" 133 } else { 134 # fall back to just testing mips1 code. 135 set models "mips1" 136 set submodels "" 137 } 138 append submodels " " $models 139 set cpu_option -march 140 141 run_sim_tests sanity.s $submodels $micromipsmodels 142 143 foreach nops {0 1} { 144 run_hilo_test hilo-hazard-1.s $models $nops 145 run_hilo_test hilo-hazard-2.s $models $nops 146 } 147 run_hilo_test hilo-hazard-3.s $models 2 148 run_hilo_test hilo-hazard-4.s $micromipsmodels 2 149 150 run_sim_test fpu64-ps.s $submodels 151 run_sim_test fpu64-ps-sb1.s $submodels 152 153 run_sim_test mdmx-ob.s $mdmxmodels 154 run_sim_test mdmx-ob-sb1.s $mdmxmodels 155 156 run_sim_tests mips32-dsp.s $dspmodels $micromipsdspmodels 157 run_sim_tests mips32-dsp2.s $dspmodels $micromipsdspmodels 158 159 run_sim_test r2-fpu.s $models 160 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 169} 170