# Copyright (C) 2001, 2005, 2007 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 "mmix-*"] } {
    return
}

proc run_mmix_tests { } {
    global srcdir subdir runtests
    foreach test_name [lsort [find ${srcdir}/${subdir} *.d]] {
	# Keep basename.
	regsub -all ".*/\(\[^\.\]*\)\.d$" $test_name "\\1" test_name

	run_dump_test $test_name
    }

    # FIXME: more tests needed.
    # BFD_RELOC_MMIX_REG_OR_BYTE with symbol-difference with
    # relaxable thing in between.
    #
    # Other normal reloc with symbol-difference with
    # relaxable thing in between.
}

run_mmix_tests
