#
# Some generic m68k tests
#
if [istarget "m68hc11-*-*"] then {
   return
}
if [istarget "m68hc12-*-*"] then {
   return
}
if [istarget "m6811-*-*"] then {
   return
}
if [istarget "m6812-*-*"] then {
   return
}
if { [istarget m68*-*-*] || [istarget fido*-*-*] } then {
    gas_test "t2.s" "" "" "cross-section branch"
    if [istarget m68*-motorola-sysv] then {
	run_dump_test t2
    }

    gas_test "pic1.s" "" "" "PIC generation"

    gas_test "disperr.s" "-m68020" "" "Incorrect Displacement too long error"

    gas_test_error "p2410.s" "" "out-of-range 'bras'"

    # Reloc types etc. need changing for aout and coff to pass.
    setup_xfail "*-*"
    clear_xfail "*-*-*elf*" "*-*-sysv4*" "*-*-rtems*" "*-*-*linux*" "*-*-*gnu*" "*-*-psos*"
    run_dump_test pcrel

    # Since fido is basically CPU32, it does not support those
    # instructions beyond CPU32.  Disable those tests that test them.
    if ![istarget fido-*-*] then {
	run_dump_test operands
	run_dump_test cas
	run_dump_test bitfield
    } else {
	# Test fido-specific instructions.
	run_dump_test fido
    }

    run_dump_test link

    # fido does not have a floating point unit.
    if ![istarget fido-*-*] then {
	run_dump_test fmoveml
    }

    run_dump_test mcf-mov3q
    run_dump_test mcf-movsr
    run_dump_test mode5
    run_dump_test mode5 "{name {cf}} {as {-mcpu=5200}}"
    run_dump_test mcf-mac
    run_dump_test mcf-emac
    run_dump_test mcf-coproc
    run_dump_test mcf-fpu
    run_dump_test mcf-trap
    run_dump_test mcf-wdebug
    if { [istarget *-*-elf] || [istarget *-*-linux*] } then {
      run_dump_test arch-cpu-1
    }
    run_dump_test cpu32

    run_dump_test br-isaa
    run_dump_test br-isab
    run_dump_test br-isac

    run_dump_test ctrl-1
    run_dump_test ctrl-2

    gas_test_error "p11673.s" "-march=isab" "movel immediate with offset unsupported on isab"

    if { [istarget *-*-*aout] || [istarget *-*-netbsd] || [istarget *-*-openbsd*] } then {
      run_dump_test p3041
      run_dump_test p3041data
      run_dump_test p3041pcrel
    }

    set testname "68000 operands"
    gas_run "operands.s" "-m68000" "2>err.out"
    if ![string match "child process exited abnormally" $comp_output] then {
	send_log "$comp_output\n"
	verbose "$comp_output" 3
	fail $testname
    } else {
	if [regexp_diff "err.out" "$srcdir/$subdir/op68000.d"] then {
	    fail $testname
	} else {
	    pass $testname
	}
    }

    if { [istarget m68k-*-linux*] } then {
      run_dump_test tls-gd-3
    }

    run_dump_test pr11676
}
if [info exists errorInfo] then {
    unset errorInfo
}
