#   Copyright (C) 2004-2025 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.

if {![istarget "m68*-*-*"] || [istarget "m68h*-*-*"] || [istarget "m681*-*-*"]} then {
  return
}

if {[which $OBJDUMP] == 0} then {
    perror "$OBJDUMP does not exist"
    return
}

send_user "Version [binutil_version $OBJDUMP]"

###########################
# Set up the test of movem.s
###########################

if {![binutils_assemble $srcdir/$subdir/movem.s tmpdir/movem.o]} then {
    fail "movem test"
} else {

    if [is_remote host] {
	set objfile [remote_download host tmpdir/movem.o]
    } else {
	set objfile tmpdir/movem.o
    }

    # Make sure that the movem is correctly decoded.

    set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS --disassemble $objfile"]

    set want "moveml %d0-%d3,%sp@-.*moveml %d0-%d3,%sp@\[\r\n\]"

    if [regexp $want $got] then {
	pass "movem test"
    } else {
	fail "movem test"
    }
}

###########################
# Set up the test of fnop.s
###########################

if {![binutils_assemble $srcdir/$subdir/fnop.s tmpdir/fnop.o]} then {
    fail "fnop test"
} else {

    if [is_remote host] {
	set objfile [remote_download host tmpdir/fnop.o]
    } else {
	set objfile tmpdir/fnop.o
    }

    # Make sure that fnop is decoded as fnop, not fbf.

    set got [binutils_run $OBJDUMP "$OBJDUMPFLAGS --disassemble $objfile"]

    set want "fnop *\[\r\n\]"

    if [regexp $want $got] then {
	pass "fnop test"
    } else {
	fail "fnop test"
    }
}
