# This testcase is part of GDB, the GNU debugger.

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

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@gnu.org

# Testcase for ppc decimal128 pseudo-registers.

if $tracelevel then {
        strace $tracelevel
}

if ![istarget "powerpc64-*"] then {
    verbose "Skipping powerpc Decimal128 pseudo-registers testcase."
    return
}

set testfile "powerpc-d128-regs"
set srcfile ${testfile}.c
set binfile ${objdir}/${subdir}/${testfile}

if  { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {quiet debug}] != "" } {
     untested powerpc-d128-regs.exp
     return -1
}

# Start with a fresh gdb.

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

if { ![runto main] } then {
   fail "run to main"
   return
}

if [gdb_test "show arch" ".*currently powerpc:common.*" "Checking for PPC arch"] {
    return -1;
}

gdb_test "next" ""

for {set i 0} {$i < 16} {incr i 1} {
gdb_test "set \$dl$i=d128" "" "Set dl$i register"

gdb_test "print \$dl$i" "\\\$$decimal = 1\.2345678910" "Print dl$i register as DFP"

gdb_test "info reg dl$i" \
	 "dl$i\[ \]*1\.2345678910\[\t\]*\\(raw 0x2205800000000000000000049c5de09c\\)" \
	 "Print dl$i register with the info reg command"

gdb_test "info reg f[expr 2*$i]" \
	 "f[expr 2*$i]\[ \]*8\.608957309287334e\-145\[\t\]*\\(raw 0x2205800000000000\\)" \
	 "Testing lower half of dl$i register"

gdb_test "info reg f[expr 2*$i+1]" \
	 "f[expr 2*$i+1]\[ \]*9\.7841140127686122e\-314\[\t\]*\\(raw 0x000000049c5de09c\\)" \
	 "Testing upper half of dl$i register"

}
