# Tests of register displays for GDB.
#   Copyright 1994, 1995, 2007, 2008, 2009, 2010, 2011
#   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 Stan Shebs. (shebs@cygnus.com)

# This does not (yet) have an associated executable, since the IDT board
# will display registers even without a program being loaded.
# A more comprehensive register test would actually test reading
# and writing of registers in a real program, although some care
# would be required in the writing of the tests.

if $tracelevel then {
	strace $tracelevel
	}

# These tests exercise IDT-specific MIPS registers for several
# different processor models.

# This should detect the actual processor in use and change
# the expected results appropriately.  FIXME

proc idt_register_tests { } {
	# Test the generic IDT chip.
	gdb_test "info registers" ".*"
	gdb_test "info register zero" "zero(r0): 0x0;"
	# FIXME access each generic register individually
	# Test the 3041.
	gdb_test "set processor r3041" ".*"
	gdb_test "info registers" ".*"
	gdb_test "info register bus"  "bus.*0x.*"
	gdb_test "info register ccfg" "ccfg.*0x.*"
	gdb_test "info register port" "port.*0x.*"
	gdb_test "info register cmp"  "cmp.*0x.*"
	gdb_test "info register elo"  "elo: invalid register"
	gdb_test "info register ehi"  "ehi: invalid register"
	gdb_test "info register cfg"  "cfg: invalid register"
	gdb_test "info register ctxt" "ctxt: invalid register"
	# Test the 3051.
	gdb_test "set processor r3051" ".*"
	gdb_test "info registers" ".*"
	gdb_test "info register bus"  "bus: invalid register"
	gdb_test "info register ccfg" "ccfg: invalid register"
	gdb_test "info register port" "port: invalid register"
	gdb_test "info register cmp"  "cmp: invalid register"
	gdb_test "info register elo"  "elo.*0x.*"
	gdb_test "info register ehi"  "ehi.*0x.*"
	gdb_test "info register cfg"  "cfg: invalid register"
	gdb_test "info register ctxt" "ctxt: invalid register"
	# Test the 3071.
	gdb_test "set processor r3071" ".*"
	gdb_test "info registers" ".*"
	gdb_test "info register bus"  "bus: invalid register"
	gdb_test "info register ccfg" "ccfg: invalid register"
	gdb_test "info register port" "port: invalid register"
	gdb_test "info register cmp"  "cmp: invalid register"
	gdb_test "info register elo"  "elo.*0x.*"
	gdb_test "info register ehi"  "ehi.*0x.*"
	gdb_test "info register cfg"  "cfg.*0x.*"
	gdb_test "info register ctxt" "ctxt.*0x.*"
}

if [istarget "mips*-idt-*"] then {
    gdb_exit
    gdb_start
    gdb_reinitialize_dir $srcdir/$subdir
    idt_register_tests
} else {
    verbose "regs.exp tests ignored for this target"
}
