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

# This file was written by Jeff Law. (law@cs.utah.edu)

require {istarget "sh3*-*-*"}


set testfile "sh3"
set srcfile ${srcdir}/${subdir}/${testfile}.s
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcfile}" "${binfile}" executable ""] != "" } {
     untested "failed to compile"
     return -1
}

proc all_fp_move_and_load_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/9i fp_move_and_load_tests\n"
    gdb_expect {
	-re "
.*fmov.s\t@r0,fr0.*
.*fmov.s\tfr0,@r0.*
.*fmov.s\t@r0\\+,fr0.*
.*fmov.s\tfr0,@-r0.*
.*fmov.s\t@\\(r0,r0\\),fr0.*
.*fmov.s\tfr0,@\\(r0,r0\\).*
.*fmov\tfr0,fr1.*
.*fldi0\tfr0.*
.*fldi1\tfr0.*
.*$gdb_prompt $" { pass "fp_move_and_load_tests" }
	-re "$gdb_prompt $" { fail "fp_move_and_load_tests" }
	timeout { fail "(timeout) fp_move_and_load_tests" }
    }
}

proc all_fp_arithmetic_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/13i fp_arithmetic_tests\n"
    gdb_expect {
	-re "
.*fadd\tfr0,fr1.*
.*fsub\tfr0,fr1.*
.*fmul\tfr0,fr1.*
.*fdiv\tfr0,fr1.*
.*fmac\tfr0,fr0,fr1.*
.*fcmp/eq\tfr0,fr1.*
.*fcmp/gt\tfr0,fr1.*
.*ftst/nan\tfr0.*
.*fneg\tfr0.*
.*fabs\tfr0.*
.*fsqrt\tfr0.*
.*float\tfpul,fr0.*
.*ftrc\tfr0,fpul.*
.*$gdb_prompt $" { pass "fp_arithmetic_tests" }
	-re "$gdb_prompt $" { fail "fp_arithmetic_tests" }
	timeout { fail "(timeout) fp_arithmetic_tests" }
    }
}

proc all_fp_misc_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/10i fp_misc_tests\n"
    gdb_expect {
	-re "
.*fsts\tfpul,fr0.*
.*flds\tfr0,fpul.*
.*lds\tr3,fpul.*
.*lds\\.l\t@r3\\+,fpul.*
.*lds\tr3,fpscr.*
.*lds\\.l\t@r3\\+,fpscr.*
.*sts\tfpul,r3.*
.*sts\\.l\tfpul,@-r3.*
.*sts\tfpscr,r3.*
.*sts\\.l\tfpscr,@-r3.*
.*$gdb_prompt $" { pass "fp_misc_tests" }
	-re "$gdb_prompt $" { fail "fp_misc_tests" }
	timeout { fail "(timeout) fp_misc_tests" }
    }
}

clean_restart $binfile

all_fp_move_and_load_tests
all_fp_arithmetic_tests
all_fp_misc_tests

