1# MIPS simulator instruction tests 2 3# Do "run_sim_test TESTFILE MODELS" for each combination of the 4# mf{lo,hi} -> mult/div/mt{lo,hi} hazard described in mips.igen. 5# Insert NOPS nops after the mflo or mfhi. 6proc run_hilo_test {testfile models nops} { 7 foreach reg {lo hi} { 8 foreach insn "{mult\t\$4,\$4} {div\t\$0,\$4,\$4} {mt$reg\t\$4}" { 9 set contents "" 10 append contents "\t.macro hilo\n" 11 append contents "\tmf$reg\t\$4\n" 12 append contents "\t.rept\t$nops\n" 13 append contents "\tnop\n" 14 append contents "\t.endr\n" 15 append contents "\t$insn\n" 16 append contents "\t.endm" 17 18 verbose -log "HILO test:\n$contents" 19 set file [open hilo-hazard.inc w] 20 puts $file $contents 21 close $file 22 23 run_sim_test $testfile $models 24 } 25 } 26} 27 28# Runs micromips tests by adding -mmicromips to as options 29proc run_micromips_test { name requested_machs } { 30 global global_as_options; 31 set gas_old $global_as_options; 32 append global_as_options " -mmicromips " 33 run_sim_test $name $requested_machs 34 set global_as_options $gas_old 35} 36 37# Runs all specified tests 38proc run_sim_tests { name requested_machs { requested_micromips_machs "" } } { 39 run_sim_test $name $requested_machs 40 run_micromips_test $name $requested_micromips_machs 41} 42 43# Only test mips*-*-elf (e.g., no mips*-*-linux) 44if {[istarget mips*-*-elf]} { 45 46 set dspmodels "" 47 set mdmxmodels "" 48 set micromipsmodels "" 49 set micromipsdspmodels "" 50 51 if {[istarget mipsisa64sb1*-*-elf]} { 52 set models "sb1" 53 set submodels "mips1 mips2 mips3 mips4 mips32 mips64" 54 append mdmxmodels " mips64" 55 } elseif {[istarget mipsisa64*-*-elf]} { 56 set models "mips32 mips64 mips32r2 mips64r2" 57 set submodels "mips1 mips2 mips3 mips4" 58 append dspmodels " mips32r2 mips64r2" 59 append mdmxmodels " mips64 mips32r2 mips64r2" 60 } elseif {[istarget mips*-sde-elf*] || [istarget mips*-mti-elf*]} { 61 set models "mips32 mips64 mips32r2 mips64r2" 62 set submodels "" 63 append dspmodels " mips32r2 mips64r2" 64 append mdmxmodels " mips64 mips32r2 mips64r2" 65 append micromipsmodels " mips32r2" 66 append micromipsdspmodels " mips32r2 mips64r2" 67 } elseif {[istarget mipsisa32*-*-elf]} { 68 set models "mips32 mips32r2" 69 set submodels "mips1 mips2" 70 append dspmodels " mips32r2" 71 append mdmxmodels " mips32r2" 72 append micromipsmodels " mips32r2" 73 append micromipsdspmodels " mips32r2" 74 } elseif {[istarget mips64vr*-*-elf]} { 75 set models "vr4100 vr4111 vr4120 vr5000 vr5400 vr5500" 76 set submodels "mips1 mips2 mips3 mips4" 77 } elseif {[istarget mips64*-*-elf]} { 78 set models "mips3" 79 set submodels "mips1 mips2" 80 } else { 81 # fall back to just testing mips1 code. 82 set models "mips1" 83 set submodels "" 84 } 85 append submodels " " $models 86 set cpu_option -march 87 88 run_sim_tests sanity.s $submodels $micromipsmodels 89 90 foreach nops {0 1} { 91 run_hilo_test hilo-hazard-1.s $models $nops 92 run_hilo_test hilo-hazard-2.s $models $nops 93 } 94 run_hilo_test hilo-hazard-3.s $models 2 95 run_hilo_test hilo-hazard-4.s $micromipsmodels 2 96 97 run_sim_test fpu64-ps.s $submodels 98 run_sim_test fpu64-ps-sb1.s $submodels 99 100 run_sim_test mdmx-ob.s $mdmxmodels 101 run_sim_test mdmx-ob-sb1.s $mdmxmodels 102 103 run_sim_tests mips32-dsp.s $dspmodels $micromipsdspmodels 104 run_sim_tests mips32-dsp2.s $dspmodels $micromipsdspmodels 105 106} 107