#
# Some generic MIPS tests
#

# "LOSE" marks information about tests which fail at a particular point
# in time, but which are not XFAILed.  Either they used to pass
# and indicate either regressions or the need to tweak the tests to keep
# up the with code, or they are new tests and it is unknown whether or not
# they should pass as-is for the given object formats.

proc run_list_test { name opts } {
    global srcdir subdir
    set testname "MIPS $name"
    set file $srcdir/$subdir/$name
    gas_run ${name}.s $opts ">&dump.out"
    if { [regexp_diff "dump.out" "${file}.l"] } then {
	fail $testname
	verbose "output is [file_contents "dump.out"]" 2
	return
    }
    pass $testname
}

if { [istarget mips*-*-*] } then {
    set no_mips16 0
    set elf [expr [istarget *-*-elf*] || [istarget *-*-irix5*] || [istarget *-*-irix6* ] || [istarget *-*-linux*] || [istarget *-*-netbsd*] ]
    set ecoff [expr [istarget *-*-ecoff*] || [istarget *-*-ultrix*] || [istarget *-*-irix\[1-4\]*] ]
    set aout [expr [istarget *-*-bsd*] || [istarget *-*-openbsd*] ]
    set ilocks [istarget mipstx39*-*-*]
    set gpr_ilocks [expr [istarget mipstx39*-*-*]]
    set addr32 [expr [istarget mipstx39*-*-*]]

    if { [istarget "mips*-*-*linux*"] } then {
	set tmips "t"
    } else {
	set tmips ""
    }
    if [istarget mips*el-*-*] {
	set el el
    } {
	set el ""
    }

    run_dump_test "abs"
    run_dump_test "add"
    run_dump_test "and"
    run_dump_test "break20"
    run_dump_test "trap20"

    # LOSE: As of 2002-02-08, "beq" through "bltu" fail for target mips-ecoff.
    # See http://sources.redhat.com/ml/binutils/2001-10/msg00418.html for
    # more information.  Not sure if the fixes there are correct; should
    # branches to external labels be allowed for ECOFF?
    run_dump_test "beq"
    run_dump_test "bge"
    run_dump_test "bgeu"
    run_dump_test "blt"
    run_dump_test "bltu"

    if !$ilocks { run_dump_test "div" } else { run_dump_test "div-ilocks" }
    run_dump_test "dli"
    if $elf {
	run_dump_test "elf-jal"
    } else {
	run_dump_test "jal"
    }
    if $elf { run_dump_test "jal-svr4pic" }
    if $elf { run_dump_test "jal-xgot" }
    # LOSE: As of 2002-02-08, the jal-empic test fails for target mips-ecoff.
    # It appears that it broke between 2000-03-11 00:00UTC and
    # 2000-03-12 00:00 UTC.
    if $ecoff { run_dump_test "jal-empic" }
    if !$aout { run_dump_test "la" }
    if $elf { run_dump_test "la-svr4pic" }
    if $elf { run_dump_test "la-xgot" }
    # LOSE: As of 2002-02-08, the la-empic test fails for target mips-ecoff.
    # Not sure when it first cropped up, but may be related to addition of
    # "la" -> "addiu" pattern in MIPS opcode table long ago.
    if $ecoff { run_dump_test "la-empic" }
    if !$aout { run_dump_test "lb" }
    if $elf { run_dump_test "lb-svr4pic" }
    if $elf {
	# Both versions specify the cpu, so we can run both regardless of
	# the interlocking in the configured default cpu.
	run_dump_test "lb-xgot"
	run_dump_test "lb-xgot-ilocks"
    }
    if $ecoff { run_dump_test "lb-empic" }
    if !$aout { 
        if !$gpr_ilocks { 
            run_dump_test "ld" 
        } else { 
            if !$addr32 {
                run_dump_test "ld-ilocks"
            } else {
                run_dump_test "ld-ilocks-addr32"
            }
        }
    }
    if $elf { run_dump_test "ld-svr4pic" }
    if $elf { run_dump_test "ld-xgot" }
    if $ecoff { run_dump_test "ld-empic" }
    run_dump_test "li"
    if !$aout { run_dump_test "lifloat" }
    if $elf { run_dump_test "lif-svr4pic" }
    if $elf { run_dump_test "lif-xgot" }
    # LOSE: As of 2002-02-08, the lif-empic test fails for target mips-ecoff.
    # It appears that it broke between 2000-03-11 00:00UTC and
    # 2000-03-12 00:00 UTC.
    if $ecoff { run_dump_test "lif-empic" }
    run_dump_test "mips4"
    if !$ilocks { run_dump_test "mul" } else { run_dump_test "mul-ilocks" }
    run_dump_test "rol"
    if !$aout { run_dump_test "sb" }
    run_dump_test "trunc"
    if !$aout { run_dump_test "ulh" }
    if $elf { run_dump_test "ulh-svr4pic" }
    if $elf { run_dump_test "ulh-xgot" }
    if $ecoff { run_dump_test "ulh-empic" }
    if !$aout {
	run_dump_test "ulw"
	run_dump_test "uld"
	run_dump_test "ush"
	run_dump_test "usw"
	run_dump_test "usd"
    }
    # The mips16 test can only be run on ELF, because only ELF
    # supports the necessary mips16 reloc.
    if { $elf && !$no_mips16 } { run_dump_test "mips16" }
    run_dump_test "delay"
    run_dump_test "nodelay"
    run_dump_test "mips4010"
    run_dump_test "mips4650"
    run_dump_test "mips4100"
    run_dump_test "perfcount"
    # Linux uses ELF stabs, which doesn't support line number.
    setup_xfail "mips*-*-*linux*"
    run_dump_test "lineno"
    run_dump_test "sync"
    run_dump_test "mips32"
    run_dump_test "mips64"
    run_dump_test "sb1-ext-ps"

    # It will always fail until someone fixes it.
    setup_xfail "mips*-*-*"
    run_dump_test "relax"

    run_list_test "illegal" ""

    # LOSE: As of 2002-02-08, the next 4 tests fail for target mips-ecoff.
    # It's unknown whether they _should_ pass as-is, or whether different
    # variants are needed for ELF and ECOFF.
    run_dump_test "mips-gp32-fp32"
    run_dump_test "mips-gp32-fp64"
    run_dump_test "mips-gp64-fp32"
    run_dump_test "mips-gp64-fp64"

    if $elf {
	# Make sure that -mcpu=FOO and -mFOO are equivalent.  Assemble a file
	# containing 4650-specific instructions with -m4650 and -mcpu=4650,
	# and verify that they're the same.  Specifically, we're checking
	# that the EF_MIPS_MACH field is set, and that the 4650 'mul'
	# instruction does get used.  In previous versions of GAS, 
	# only -mcpu=4650 would set the EF_MIPS_MACH field; -m4650 wouldn't.
	run_dump_test "elf_e_flags1"
	run_dump_test "elf_e_flags2"
	run_dump_test "elf_e_flags3"
	run_dump_test "elf_e_flags4"
    
 	run_dump_test "mips-gp32-fp32-pic"
 	run_dump_test "mips-gp32-fp64-pic"
 	run_dump_test "mips-gp64-fp32-pic"
 	run_dump_test "mips-gp64-fp64-pic"

  	run_dump_test "mips-abi32"
  	run_dump_test "mips-abi32-pic"

	run_dump_test "elf${el}-rel"
	if [istarget mips64*-*-*] { 
	    run_dump_test "elf${el}-rel2"
	    run_dump_test "elf-rel4"
	} {
	    run_dump_test "e32${el}-rel2"
	    run_dump_test "e32-rel4"
	}
	run_dump_test "elf${el}-rel3"
	run_dump_test "elf-rel5"
	run_dump_test "${tmips}${el}empic"
	run_dump_test "empic2"
	run_dump_test "empic3_e"
	run_dump_test "empic3_g1"
	run_dump_test "empic3_g2"
	if { !$no_mips16 } { 
	    run_dump_test "${tmips}mips${el}16-e" 
	    run_dump_test "${tmips}mips${el}16-f" 
	}
    }
}
