# Copyright 2003, 2007, 2008, 2009, 2010 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

# This file is part of the gdb testsuite.

if $tracelevel {
    strace $tracelevel
}

#
# Test floating-point related functionality.
#


if { [prepare_for_testing float.exp float run.c] } {
    return -1
}

# Set it up at a breakpoint so we have its registers.

if ![runto_main] then {
    perror "couldn't run to breakpoint"
    continue
}

# Test "info float".

if { [istarget "alpha*-*-*"] } then {
    gdb_test "info float" "f0.*" "info float"
} elseif { [istarget "arm*-*-*"] || \
	[istarget "xscale*-*-*"] || \
	[istarget "strongarm*-*-*"] } then {
    gdb_test_multiple "info float" "info float" {
	-re "Software FPU type.*mask:.*flags:.*$gdb_prompt $" {
	    pass "info float (FPA)"
	}
	-re "fpscr.*s0.*s1.*s31.*$gdb_prompt $" {
	    # Only check for single precision; d0 might be a vector register
	    # if we have NEON.
	    pass "info float (VFP)"
	}
        -re "No floating.point info available for this processor.*" {
            pass "info float (without FPU)"
	}
    }
} elseif { [istarget "i?86-*-*"] || [istarget "x86_64-*-*"] } then {
    gdb_test "info float" "R7:.*Status Word:.*Opcode:.*" "info float"
} elseif [istarget "ia64-*-*"] then {
    gdb_test "info float" "f0.*f1.*f127.*" "info float"
} elseif [istarget "m68k-*-*"] then {
    gdb_test_multiple "info float" "info_float" {
        -re "fp0.*fp1.*fp7.*$gdb_prompt $" {
            pass "info float (with FPU)"
	}
        -re "No floating.point info available for this processor.*" {
            pass "info float (without FPU)"
	}
    }
} elseif [istarget "mips*-*-*"] then {
    gdb_test "info float" "f0:.*flt:.*dbl:.*" "info float"
} elseif [istarget "powerpc*-*-*"] then {
    gdb_test_multiple "info float" "info_float" {
        -re "f0.*f1.*f31.*fpscr.*$gdb_prompt $" {
            pass "info float (with FPU)"
	}
        -re "No floating.point info available for this processor.*" {
            pass "info float (without FPU)"
	}
    }
} elseif [istarget "s390*-*-*"] then {
    gdb_test "info float" "fpc.*f0.*f1.*f15.*" "info float"
} elseif [istarget "sh*-*"] then {
    # SH may or may not have an FPU
    gdb_test_multiple "info float" "info float" {
	-re "fpul.*fr0.*fr1.*fr15.*$gdb_prompt $" {
	      pass "info float (with FPU)"
	  }
	-re "No floating.point info available for this processor.*" {
	      pass "info float (without FPU)"
	}
    }
} elseif [istarget "hppa*-*"] then {
    gdb_test "info float" "fr4.*fr4R.*fr31R.*" "info float"
} elseif [istarget "sparc*-*-*"] then {
    gdb_test "info float" "f0.*f1.*f31.*d0.*d30.*" "info float"
} else {
    gdb_test "info float" "No floating.point info available for this processor." "info float (unknown target)"
}
