summaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@nildram.co.uk>2004-03-29 21:58:01 +0000
committerRichard Sandiford <rsandifo@nildram.co.uk>2004-03-29 21:58:01 +0000
commit074ca785039cbb8547e2b204df3d3107f3869810 (patch)
tree2e167b4a929789e2d7ad847c2f8b9977b4bd33ea /sim
parent3e1e4d8c562a6514bc3fac9c52a7af32a63fdf51 (diff)
downloadgdb-074ca785039cbb8547e2b204df3d3107f3869810.tar.gz
* sim/mips/hilo-hazard-[123].s: New files.
* sim/mips/basic.exp (run_hilo_test): New procedure. (models): Only list models that are included in the configuration. (submodels): New variable, set to submodels of the above. (mips64vr-*-elf, mips64vrel-*-elf): New configuration stanza. Run hilo-hazard-[123].s.
Diffstat (limited to 'sim')
-rw-r--r--sim/testsuite/ChangeLog9
-rw-r--r--sim/testsuite/sim/mips/basic.exp47
-rw-r--r--sim/testsuite/sim/mips/hilo-hazard-1.s19
-rw-r--r--sim/testsuite/sim/mips/hilo-hazard-2.s18
-rw-r--r--sim/testsuite/sim/mips/hilo-hazard-3.s18
5 files changed, 107 insertions, 4 deletions
diff --git a/sim/testsuite/ChangeLog b/sim/testsuite/ChangeLog
index a344a6d79a1..d4836e637df 100644
--- a/sim/testsuite/ChangeLog
+++ b/sim/testsuite/ChangeLog
@@ -1,3 +1,12 @@
+2004-04-29 Richard Sandiford <rsandifo@redhat.com>
+
+ * sim/mips/hilo-hazard-[123].s: New files.
+ * sim/mips/basic.exp (run_hilo_test): New procedure.
+ (models): Only list models that are included in the configuration.
+ (submodels): New variable, set to submodels of the above.
+ (mips64vr-*-elf, mips64vrel-*-elf): New configuration stanza.
+ Run hilo-hazard-[123].s.
+
2004-03-01 Richard Sandiford <rsandifo@redhat.com>
* sim/frv/allinsn.exp (all_machs): Add fr405 and fr450.
diff --git a/sim/testsuite/sim/mips/basic.exp b/sim/testsuite/sim/mips/basic.exp
index 63dc086f525..4014f3065b5 100644
--- a/sim/testsuite/sim/mips/basic.exp
+++ b/sim/testsuite/sim/mips/basic.exp
@@ -6,21 +6,60 @@
# than the compiler) can't necessarily find.
unset_currtarget_info ldscript
+# 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
+ }
+ }
+}
+
+
# Only test mips*-elf (e.g., no mips-linux), and only test if the target
# board really is a simulator (sim tests don't work on real HW).
if {[istarget mips*-elf] && [board_info target exists is_simulator]} {
if {[istarget mipsisa64*-elf]} {
- set models "mips1 mips2 mips3 mips4 mips32 mips64"
+ set models "mips32 mips64"
+ set submodels "mips1 mips2 mips3 mips4"
} elseif {[istarget mipsisa32*-elf]} {
- set models "mips1 mips2 mips32"
+ set models "mips32"
+ set submodels "mips1 mips2"
+ } elseif {[istarget mips64vr-*-elf] || [istarget mips64vrel-*-elf]} {
+ set models "vr4100 vr4111 vr4120 vr5000 vr5400 vr5500"
+ set submodels "mips1 mips2 mips3 mips4"
} elseif {[istarget mips64*-elf]} {
- set models "mips1 mips2 mips3"
+ 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_test sanity.s $models
+ run_sim_test sanity.s $submodels
+ 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
}
diff --git a/sim/testsuite/sim/mips/hilo-hazard-1.s b/sim/testsuite/sim/mips/hilo-hazard-1.s
new file mode 100644
index 00000000000..f20c9390feb
--- /dev/null
+++ b/sim/testsuite/sim/mips/hilo-hazard-1.s
@@ -0,0 +1,19 @@
+# Test for architectures with mf{hi,lo} -> mult/div/mt{hi,lo} hazards.
+#
+# mach: mips1 mips2 mips3 mips4 vr4100 vr4111 vr4120 vr5000 vr5400
+# as: -mabi=eabi
+# ld: -N -Ttext=0x80010000
+# output: HILO: * too close to MF at *\\n\\nprogram stopped*\\n
+# xerror:
+
+ .include "hilo-hazard.inc"
+ .include "testutils.inc"
+
+ setup
+
+ .set noreorder
+ .ent DIAG
+DIAG:
+ hilo
+ pass
+ .end DIAG
diff --git a/sim/testsuite/sim/mips/hilo-hazard-2.s b/sim/testsuite/sim/mips/hilo-hazard-2.s
new file mode 100644
index 00000000000..07b84d26780
--- /dev/null
+++ b/sim/testsuite/sim/mips/hilo-hazard-2.s
@@ -0,0 +1,18 @@
+# Test for architectures without mf{hi,lo} -> mult/div/mt{hi,lo} hazards.
+#
+# mach: vr5500 mips32 mips64
+# as: -mabi=eabi
+# ld: -N -Ttext=0x80010000
+# output: pass\\n
+
+ .include "hilo-hazard.inc"
+ .include "testutils.inc"
+
+ setup
+
+ .set noreorder
+ .ent DIAG
+DIAG:
+ hilo
+ pass
+ .end DIAG
diff --git a/sim/testsuite/sim/mips/hilo-hazard-3.s b/sim/testsuite/sim/mips/hilo-hazard-3.s
new file mode 100644
index 00000000000..1a0949db6e0
--- /dev/null
+++ b/sim/testsuite/sim/mips/hilo-hazard-3.s
@@ -0,0 +1,18 @@
+# Test for mf{hi,lo} -> mult/div/mt{hi,lo} with 2 nops inbetween.
+#
+# mach: all
+# as: -mabi=eabi
+# ld: -N -Ttext=0x80010000
+# output: pass\\n
+
+ .include "hilo-hazard.inc"
+ .include "testutils.inc"
+
+ setup
+
+ .set noreorder
+ .ent DIAG
+DIAG:
+ hilo
+ pass
+ .end DIAG