blob: db297121e933237bbfbe553ad1a9741e3ae33604 (
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
# 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 endian tests
proc run_endian_tests { name requested_machs } {
global ASFLAGS_FOR_TARGET
global LDFLAGS_FOR_TARGET
run_sim_test $name $requested_machs
set ASFLAGS_FOR_TARGET "-EL"
set LDFLAGS_FOR_TARGET "-EL"
run_sim_test $name $requested_machs
unset ASFLAGS_FOR_TARGET
unset LDFLAGS_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
}
# Runs the combination of instructions removed in R6 through the testsuite
proc run_r6_removed_test {testfile models} {
global subdir srcdir
set fd [open "$srcdir/$subdir/r6-removed.csv" r]
set file_data [read $fd]
close $fd
set data [split $file_data "\n"]
foreach line $data {
set line_contents [split $line ","]
set mnemonic [lindex $line_contents 0]
set insn [lindex $line_contents 1]
if {[string compare $insn ""] == 1} {
set contents ""
append contents ".macro removed_instr\n"
append contents ".word $insn\n"
append contents "nop\n"
append contents ".endm"
verbose -log "r6-removed test: $mnemonic\n$contents"
set file [open r6-removed.inc w]
puts $file $contents
close $file
run_sim_test $testfile $models
}
}
}
if {[istarget *]} {
# Used to locate the `run` program.
global arch
set arch "mips"
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 mipsisa64r6*-*-elf]} {
set models "mips32r6 mips64r6"
set submodels ""
} 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 mips32r6 mips64r6"
set submodels ""
append dspmodels " mips32r2 mips64r2 mips32r6 mips64r6"
append mdmxmodels " mips64 mips32r2 mips64r2 mips32r6 mips64r6"
append micromipsmodels " mips32r2 mips64r2"
append micromipsdspmodels " mips32r2 mips64r2"
} elseif {[istarget mipsisa32r6*-*-elf]} {
set models "mips32r6"
set submodels ""
} 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
run_sim_test r2-fpu.s $models
run_sim_test r6-fpu.s $models
run_sim_test r6.s $models
run_sim_test r6-forbidden.s $models
run_r6_removed_test r6-removed.s $models
run_sim_test r6-64.s $models
run_sim_test r6-branch.s $models
run_endian_tests r6-llsc-wp.s $models
run_endian_tests r6-llsc-dp.s $models
}
|