# 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"
    run_dump_test "test2xcoff32"
} 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 "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 "simpshft"
	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 "vsx2"
	run_dump_test "htm"
	run_dump_test "titan"
    }
}
