# Copyright (C) 2019-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.

# Test vector register access on Power.  The inferior executes
# instructions that fill the vector registers with values ranging from
# 0 to 31 in each of the 16 bytes of each corresponding register, and
# we then check if gdb sees these same values.

if {![istarget "powerpc*"] || [skip_altivec_tests]} {
    verbose "Skipping PowerPC vector register tests."
    return
}

standard_testfile

if { [gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile} executable {debug}] != "" } {
    untested "vector register tests for PowerPC"
    return
}

# Check if our test binary can actually run on this processor.
clean_restart ${binfile}

gdb_run_cmd

gdb_test_multiple "" "wait for exit" {
    -re ".*Illegal instruction.*${gdb_prompt} $" {
	unsupported "vector register tests for PowerPC"
	return
    }
    -re ".*$inferior_exited_re normally.*${gdb_prompt} $" {
    }
}

# Run the actual test.
clean_restart ${binfile}

gdb_breakpoint [gdb_get_line_number "marker"]

gdb_run_cmd

# Wait for the prompt.
gdb_test "" "Breakpoint.*at.*" "wait for prompt"

for {set i 0} {$i < 32} {incr i 1} {
    gdb_test "p/z \$vr$i.uint128" ".* = 0x(0?[format %x $i]){16}.*"
    gdb_test "p/z \$v$i.uint128" ".* = 0x(0?[format %x $i]){16}.*"
}
