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