#
# 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" "*-*-*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 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 *-*-netbsd] } then {
      run_dump_test p3041
      run_dump_test p3041data
    }

    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
}
