# Copyright 2015-2021 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, see <http://www.gnu.org/licenses/>.

# This file is part of the gdb testsuite.

if {![istarget "aarch64*-*-*"] && ![istarget "arm*-*-*"]} {
    verbose "Skipping ${gdb_test_file_name}."
    return
}

if { [gdb_skip_float_test] } {
    verbose "Skipping ${gdb_test_file_name}."
    return
}

standard_testfile
if { [prepare_for_testing "failed to prepare" ${testfile} ${srcfile} {debug quiet}] } {
    unsupported "ARM NEON is not supported"
    return -1
}

if ![runto_main] {
    untested "could not run to main"
    return -1
}

# Test passing vectors in function argument in the inferior call.

for {set i 1} {$i <= 18} {incr i} {

    set contents ""
    set test "print a${i}"
    gdb_test_multiple "p a${i}" $test {
	-re " = (.*)\r\n$gdb_prompt $" {
	    set contents $expect_out(1,string)
	}
    }
    regsub -all "\{" $contents "\\\\\{" contents
    gdb_test "p vec_func${i} \(a${i}\)" "= $contents"
}

# Test passing homogeneous vector aggregate in function argument
# in the inferior call.

for {set i 1} {$i <= 3} {incr i} {
    set contents ""
    set test "print hva${i}"
    gdb_test_multiple "p hva${i}" $test {
	-re " = (.*)\r\n$gdb_prompt $" {
	    set contents $expect_out(1,string)
	}
    }
    regsub -all "\{" $contents "\\\\\{" contents
    gdb_test "p hva_func${i} \(hva${i}\)" "= $contents"
}
