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

# Tests for Powerpc Decimal Floating Point registers setting and fetching

if ![istarget "powerpc*"] then {
    verbose "Skipping powerpc decimal floating point register tests."
    return
}

standard_testfile

if [get_compiler_info] {
    warning "get_compiler failed"
    return -1
}

if ![test_compiler_info gcc*] {
    # We use GCC's extended asm syntax
    warning "unknown compiler"
    return -1
}

if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {quiet debug}] != "" } {
    unsupported "this machine doesn't support Decimal Floating Point."
    return -1
}

# Start with a fresh gdb.

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

gdb_breakpoint [gdb_get_line_number "Set DFP rounding mode."]

gdb_run_cmd

# When the prompt comes back we'll be at the Set DFP rounding mode breakpoint.
# Unless the program bails out after checking AT_HWCAP.
gdb_expect {
  -re "$inferior_exited_re with code 01.\[\r\n\]+$gdb_prompt $" {
    unsupported "this machine doesn't support Decimal Floating Point."
    return -1
  }

  -re ".*$gdb_prompt $" {}
}

# First, verify if FPSCR is all zeroes.
gdb_test "print \$fpscr" " = 0" "FPSCR is all zeroes"

# Step over "set rounding mode" instruction.
gdb_test "next" "" ""

# Verify that the following bits are set (See Power ISA for details):
#
# 29:31 - DFP Rounding Control
gdb_test "print/t \$fpscr" " = 10100000000000000000000000000000000" "FPSCR for round to nearest, ties toward zero rounding mode"
