# Copyright 2009 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/>.
#
# Contributed by Markus Deuling <deuling@de.ibm.com>.
#
# Testsuite for Cell Broadband Engine combined debugger
# This testcase tests registers on PPU and SPU.

load_lib cell.exp

set ppu_file "break"
set ppu_src ${srcdir}/${subdir}/${ppu_file}.c
set ppu_bin ${objdir}/${subdir}/${ppu_file}
set spu_file "break-spu"
set spu_src ${srcdir}/${subdir}/${spu_file}.c
set spu_bin ${objdir}/${subdir}/${spu_file}

if {[skip_cell_tests]} {
    return 0
}

# Compile SPU binary.
if { [gdb_compile_cell_spu $spu_src $spu_bin executable {debug}]  != "" } {
  unsupported "Compiling spu binary failed."
  return -1
}
# Compile PPU binary.
if { [gdb_cell_embedspu $spu_bin $spu_bin-embed.o {debug}]  != "" } {
  unsupported "Embedding spu binary failed."
  return -1
}
if { [gdb_compile_cell_ppu [list $ppu_src $spu_bin-embed.o] $ppu_bin executable {debug}] != "" } {
  unsupported "Compiling ppu binary failed."
  return -1
}

if [get_compiler_info ${ppu_bin}] {
  return -1
}

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

# No programm running, no registers should be available.
gdb_test "info all-registers" \
	  "The program has no registers now." \
	  "info all-registers"

if ![runto_main] then {
  fail "Can't run to main"
  return 0
}

# Check registers in PPU thread.
gdb_test "info reg r0" "r0.*" "info register r0"
gdb_test "info reg r31" "r31.*" "info register r31"
gdb_test "info reg r32" "Invalid register.*r32.*" "(invalid) info register r32"
gdb_test "info reg pc" "pc.*" "info register pc"
gdb_test "info reg cr" "cr.*" "info register cr"
gdb_test "info reg lr" "lr.*" "info register lr"
gdb_test "info reg ctr" "ctr.*" "info register ctr"
gdb_test "info reg xer" "xer.*" "info register xer"

# Continue to SPU thread.
cont_spu_main

# In SPU thread, check SPU registers.
for {set check_reg 0} {$check_reg < 128} {incr check_reg} {
  gdb_test "info reg r$check_reg" \
	   "r$check_reg.*uint128.*=.*v2\_int64.*v4\_int32.*v8\_int16.*v16\_int8.*v2\_double.*v4\_float.*" \
	   "info register r$check_reg"
}
gdb_test "info reg r128" \
	 "Invalid register.*r128.*" \
	 "(invalid) info register r128"

gdb_test "info reg pc" "pc.*main.*" "info register pc"
gdb_test "info reg id" "id.*" "info register id"
gdb_test "info reg sp" "sp.*" "info register sp"
gdb_test "info reg fpscr" "fpscr.*" "info register fpscr"
gdb_test "info reg srr0" "srr0.*" "info register srr0"
gdb_test "info reg lslr" "lslr.*" "info register lslr"
gdb_test "info reg decr" "decr.*" "info register decr"
gdb_test "info reg decr_status" "decr_status.*" "info register decr-status"

gdb_test "info reg cr" "Invalid register.*cr.*" "info register cr"
gdb_test "info reg lr" "Invalid register.*lr.*" "info register lr"
gdb_test "info reg ctr" "Invalid register.*ctr.*" "info register ctr"
gdb_test "info reg xer" "Invalid register.*xer.*" "info register xer"

gdb_exit
return 0
