* sim/mips/hilo-hazard-[123].s: New files.
authorRichard Sandiford <rdsandiford@googlemail.com>
Mon, 29 Mar 2004 21:58:01 +0000 (21:58 +0000)
committerRichard Sandiford <rdsandiford@googlemail.com>
Mon, 29 Mar 2004 21:58:01 +0000 (21:58 +0000)
* 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.

sim/testsuite/ChangeLog
sim/testsuite/sim/mips/basic.exp
sim/testsuite/sim/mips/hilo-hazard-1.s [new file with mode: 0644]
sim/testsuite/sim/mips/hilo-hazard-2.s [new file with mode: 0644]
sim/testsuite/sim/mips/hilo-hazard-3.s [new file with mode: 0644]

index a344a6d79a11f1f6b1fea8d6e2528645c8edc66b..d4836e637dfd5b4fabaece4d38f889ea12cc54a9 100644 (file)
@@ -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.
index 63dc086f5255c2555973a9a12bb4fc6ca197e737..4014f3065b55f23d2d3ac4060fbc17c4bfc0ac7f 100644 (file)
@@ -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 (file)
index 0000000..f20c939
--- /dev/null
@@ -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 (file)
index 0000000..07b84d2
--- /dev/null
@@ -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 (file)
index 0000000..1a0949d
--- /dev/null
@@ -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