# MIPS simulator instruction tests

# As gross as it is, we unset the linker script specified by the target
# board.  The MIPS libgloss linker scripts include libgcc (and possibly
# other libraries), which the linker (used to link these tests rather
# 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]} {

    set dspmodels ""
    set mdmxmodels ""

    if {[istarget mipsisa64sb1*-*-elf]} {
	set models "sb1"
	set submodels "mips1 mips2 mips3 mips4 mips32 mips64"
	append mdmxmodels " mips64"
    } 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*]} {
	set models "mips32 mips64 mips32r2 mips64r2"
	set submodels ""
	append dspmodels " mips32r2 mips64r2"
	append mdmxmodels " mips64 mips32r2 mips64r2"
    } elseif {[istarget mipsisa32*-*-elf]} {
	set models "mips32 mips32r2"
	set submodels "mips1 mips2"
	append dspmodels " mips32r2"
	append mdmxmodels " 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_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

    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_test mips32-dsp.s $dspmodels
    run_sim_test mips32-dsp2.s $dspmodels
}
