# 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] {
    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"
}
