#
# Some generic MIPS tests
#
if [istarget mips*-*-*] then {
    set no_mips16 0
    set svr4pic [expr [istarget *-*-elf*] || [istarget *-*-irix5*] || [istarget *-*-irix6* ] ]
    set empic [expr [istarget *-*-ecoff*] || [istarget *-*-ultrix*] || [istarget *-*-irix\[1-4\]*] ]
    set aout [expr [istarget *-*-bsd*] || [istarget *-*-netbsd*] || [istarget *-*-openbsd*]]
    set ilocks [istarget mipstx39*-*-*]
    set gpr_ilocks [expr [istarget mipstx39*-*-*]]
    set addr32 [expr [istarget mipstx39*-*-*]]





    run_dump_test "abs"
    run_dump_test "add"
    run_dump_test "and"
    run_dump_test "break20"
    run_dump_test "trap20"
    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"
    run_dump_test "jal"
    if $svr4pic { run_dump_test "jal-svr4pic" }
    if $svr4pic { run_dump_test "jal-xgot" }
    if $empic { run_dump_test "jal-empic" }
    if !$aout { run_dump_test "la" }
    if $svr4pic { run_dump_test "la-svr4pic" }
    if $svr4pic { run_dump_test "la-xgot" }
    if $empic { run_dump_test "la-empic" }
    if !$aout { run_dump_test "lb" }
    if $svr4pic { run_dump_test "lb-svr4pic" }
    if $svr4pic {
	# 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 $empic { 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 $svr4pic { run_dump_test "ld-svr4pic" }
    if $svr4pic { run_dump_test "ld-xgot" }
    if $empic { run_dump_test "ld-empic" }
    run_dump_test "li"
    if !$aout { run_dump_test "lifloat" }
    if $svr4pic { run_dump_test "lif-svr4pic" }
    if $svr4pic { run_dump_test "lif-xgot" }
    if $empic { 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 $svr4pic { run_dump_test "ulh-svr4pic" }
    if $svr4pic { run_dump_test "ulh-xgot" }
    if $empic { 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 { $svr4pic && !$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 "lineno"
    run_dump_test "sync"

    # 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"
    
    if $svr4pic {
	run_dump_test "elf-rel"
	if [istarget mips64*-*-*] { 
	    run_dump_test "elf-rel2" 
	} {
	    run_dump_test "e32-rel2" 
	} 
    }
}
