From a584aa633021e11b49f6bdc23d4130c4bef68b4c Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 29 Mar 2004 21:58:01 +0000 Subject: [PATCH] * 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. --- sim/testsuite/ChangeLog | 9 +++++++ sim/testsuite/sim/mips/basic.exp | 47 +++++++++++++++++++++++++++++++--- sim/testsuite/sim/mips/hilo-hazard-1.s | 19 ++++++++++++++ sim/testsuite/sim/mips/hilo-hazard-2.s | 18 +++++++++++++ sim/testsuite/sim/mips/hilo-hazard-3.s | 18 +++++++++++++ 5 files changed, 107 insertions(+), 4 deletions(-) create mode 100644 sim/testsuite/sim/mips/hilo-hazard-1.s create mode 100644 sim/testsuite/sim/mips/hilo-hazard-2.s create mode 100644 sim/testsuite/sim/mips/hilo-hazard-3.s diff --git a/sim/testsuite/ChangeLog b/sim/testsuite/ChangeLog index a344a6d..d4836e6 100644 --- a/sim/testsuite/ChangeLog +++ b/sim/testsuite/ChangeLog @@ -1,3 +1,12 @@ +2004-04-29 Richard Sandiford + + * 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 * 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 63dc086..4014f30 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 0000000..f20c939 --- /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 0000000..07b84d2 --- /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 0000000..1a0949d --- /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 -- 2.7.4