# 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)
if {[istarget mips*-*-elf]} {

    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
}
