aboutsummaryrefslogtreecommitdiff
path: root/sim/testsuite/mips/basic.exp
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
}