# 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 PowerPC tests
#

# These tests are currently ELF specific, only because nobody has
# converted them to look for XCOFF relocations.

if { [istarget powerpc64*-*-*] || [istarget *-*-elf64*]} then {
# FIXME: Pass -x to objdump as well as -Dr for astest64 and astest2_64.
    run_dump_test "astest64"
    run_dump_test "astest2_64"
    run_dump_test "test1elf64"
    run_dump_test "power4"
    run_list_test "range64" "-a64"
} elseif { [istarget powerpc*-*aix*] } then {
    run_dump_test "test1xcoff32"
} elseif { [istarget powerpc*-*-*bsd*] \
     || [istarget powerpc*-*-elf*] \
     || [istarget powerpc*-*-eabi*] \
     || [istarget powerpc*-*-sysv4*] \
     || [istarget powerpc*-*-linux*] \
     || [istarget powerpc*-*-solaris*] \
     || [istarget powerpc*-*-rtems*] } then {
    run_dump_test "astest"
    run_dump_test "astest2"
    run_dump_test "test1elf32"
}

if { [istarget powerpc*-*-*] } then {
    run_dump_test "simpshft"
    run_dump_test "regnames"
    if { [is_elf_format] } then {
	run_dump_test "machine"
	run_dump_test "common"
	run_dump_test "476"
	run_dump_test "a2"
	if { ![istarget powerpc*le-*-*] } then {
	    run_dump_test "vle"
	    run_dump_test "vle-reloc"
	    run_dump_test "vle-simple-1"
	    run_dump_test "vle-simple-2"
	    run_dump_test "vle-simple-3"
	    run_dump_test "vle-simple-4"
	    run_dump_test "vle-simple-5"
	    run_dump_test "vle-simple-6"
	}
    }

    if { [istarget powerpc-*-*aix*] } then {
	run_dump_test "altivec_xcoff"
	run_dump_test "altivec_xcoff64"
    } else {
	run_dump_test "altivec"
	run_dump_test "altivec2"
	run_dump_test "altivec_and_spe"
	run_dump_test "booke"
	run_dump_test "e500"
	run_list_test "range" "-a32"
	run_dump_test "ppc750ps"
	run_dump_test "e500mc"
	run_dump_test "e6500"
	run_dump_test "e500mc64_nop"
	run_dump_test "e5500_nop"
	run_dump_test "e6500_nop"
	run_dump_test "cell"
	run_dump_test "power4_32"
	run_dump_test "power6"
	run_dump_test "power7"
	run_dump_test "power8"
	run_dump_test "vsx"
	run_dump_test "htm"
	run_dump_test "titan"
    }
}
