# Copyright 2007, 2008 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/>.
#

# Tests for ARM iWMMXt register setting and fetching.

if ![istarget "arm*-*-*"] then {
    verbose "Skipping iWMMXt register tests."
    return
}

set testfile "iwmmxt-regs"
set binfile ${objdir}/${subdir}/${testfile}
set src1 ${srcdir}/${subdir}/${testfile}.c

# Try to compile the test case.  If we can't, assume this is not an
# iWMMXt toolchain and bail out.
if { [gdb_compile ${src1} ${binfile} executable {quiet debug}] != "" } {
    verbose "Skipping iWMMXt register tests."
    return
}

gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load ${binfile}

#
# Run to `main' where we begin our tests.
#

if ![runto_main] then {
    gdb_suppress_tests
}

# Set all the registers to arbitrary values.
for {set i 0} {$i < 16} {incr i 1} {
    gdb_test "set \$wR$i.u64 = ((${i}LL << 32) | ${i})" "" "set reg wR$i"
}
gdb_test "set \$wCSSF = 300" "" "set reg wCSSF"
gdb_test "set \$wCASF = 200" "" "set reg wCASF"
for {set i 0} {$i < 4} {incr i 1} {
    gdb_test "set \$wCGR$i = 100 + $i" "" "set reg wCGR$i"
}

# See if the sets stuck.
gdb_test "next" ".*write_regs.*" "next over read_regs"

for {set i 0} {$i < 16} {incr i 1} {
    gdb_test "p \$wR$i.u64 == ((${i}LL << 32) | ${i})" "\\\$$decimal = 1" "test reg wR$i"
}
# Don't test wCSSF.
gdb_test "p \$wCASF" "\\\$$decimal = 200" "test reg wCASF"
for {set i 0} {$i < 4} {incr i 1} {
    gdb_test "p \$wCGR$i == 100 + $i" "\\\$$decimal = 1" "test reg wCGR$i"
}

# Also verify the copies read by the target.
for {set i 0} {$i < 16} {incr i 1} {
    gdb_test "p regs\[$i\] == ((${i}LL << 32) | ${i})" "\\\$$decimal = 1" "test stored wR$i"
}
# Don't test wcssf.
gdb_test "p control_regs\[1\]" "\\\$$decimal = 200" "test stored wCASF"
for {set i 0} {$i < 4} {incr i 1} {
    gdb_test "p control_regs\[$i + 2\] == 100 + $i" "\\\$$decimal = 1" "test stored wCGR$i"
}
