# Copyright 2012
# Free Software Foundation, Inc.

# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
# 
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.  

#
# 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 movem-offset
    run_dump_test movem-offset "{name {cf}} {as {-mcpu=5485}}"
    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
    }

    if { ! [istarget fido-*-*] } then {
      # The testcase uses an invalid instruction for this architecture.
      run_dump_test pr11676
    }

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