# Copyright (C) 2004-2021 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC 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, or (at your option)
# any later version.
#
# GCC 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 GCC; see the file COPYING3.  If not see
# <http://www.gnu.org/licenses/>.

# The name of each test starts with the architecture it requires.  Tests that
# work on all variants start with "all".

if {![istarget frv-*-*]} {
    return 0
}

load_lib gcc-dg.exp

# Find out which architecture is used by default.
set mainarch "fr500"
foreach flag [target_info multilib_flags] {
    regexp "^-mcpu=(.*)" $flag dummy mainarch
    if {$flag == "-mno-pack"} {
	# -mno-pack disables media intrinsics.
	return 0
    }
}

# Set $archs to "all" plus the list of architectures we can test.
set archs [list "all" $mainarch]
switch $mainarch {
    fr405 { lappend archs fr400 }
    fr450 { lappend archs fr405 fr400 }
}

# Set $files to the list of files we can test.
set files ""
foreach arch $archs {
    lappend files [lsort [glob -nocomplain $srcdir/$subdir/${arch}*.c]]
}

dg-init
gcc-dg-runtest [eval concat $files] "" ""
dg-finish
