#   Copyright (C) 2004-2017 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 {
    return
}

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 {
    return
}

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"
}
