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

if ![istarget "powerpc*"] then {
    verbose "Skipping powerpc long-double floating point tests."
    return
}

standard_testfile

proc do_test { name {opts {}} } {
    global srcdir subdir srcfile binfile
    set ccopts {debug quiet}
    foreach opt $opts {lappend ccopts "additional_flags=$opt"}
    set lines [gdb_compile "${srcdir}/${subdir}/${srcfile}" "$binfile.$name" executable $ccopts]
    # We get this warning even with the nowarnings option ...
    regsub -all "(^|\n)\[^\n\]*using \[^\n\]* extended precision long double" $lines "" lines
    if { $lines != "" } then {
        return
    }

    clean_restart ${binfile}.${name}

    if ![runto_main] then {
        return
    }

    # Run to the breakpoint at return.
    gdb_breakpoint [gdb_get_line_number "return"]
    gdb_continue_to_breakpoint "return"

    # Print the value of ld
    gdb_test "print ld" ".* = 1\\.375.*" "the value of ld is 1.375 ($name)"
    # Print the value of float128
    gdb_test "print float128" ".* = 2\\.375.*" "the value of float128 is 2.375 ($name)"
    # Print the value of ibm128
    gdb_test "print ibm128" ".* = 3\\.375.*" "the value of ibm128 is 3.375 ($name)"
}

# Verify that we correctly detect the floating-point format used for
# long double.  Re-run the test with -mabi=ieeelongdouble and mabi=ibmlongdouble

do_test default { -mfloat128 }
do_test ieee128 { -mfloat128 -mabi=ieeelongdouble }
do_test ibm128 { -mfloat128 -mabi=ibmlongdouble }

