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

# This file was written by Michael Snyder (msnyder@redhat.com)

if $tracelevel then {
	strace $tracelevel
}

if ![istarget "h8300*-*-*"] {
    verbose "Tests ignored for all but h8300s based targets."
    return
}


set testfile "t06_ari2"
set srcfile ${srcdir}/${subdir}/${testfile}.s
set objfile ${objdir}/${subdir}/${testfile}.o
set binfile ${objdir}/${subdir}/${testfile}.x

set asm-flags "";
set link-flags "-m h8300sxelf";


if {[target_assemble $srcfile $objfile "${asm-flags}"] != ""} then {
     untested t06_ari2.exp
     return -1
}

if {[target_link $objfile $binfile "${link-flags}"] != ""} then {
     untested t06_ari2.exp
     return -1
}

gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $binfile

gdb_test "x /i start" "addx(.b|)\t#0x12(:8|),r1h" \
	"addx.b #0x12:8,r1h"
gdb_test "x" "addx(.b|)\t#0x12(:8|),@er1" \
	"addx.b #0x12:8,@er1"
gdb_test "x" "addx(.b|)\t#0x12(:8|),@er1-" \
	"addx.b #0x12:8,@er1-"
gdb_test "x" "addx(.b|)\tr3h,r1h" \
	"addx.b r3h,r1h"
gdb_test "x" "addx(.b|)\tr3h,@er1" \
	"addx.b r3h,@er1"
gdb_test "x" "addx(.b|)\tr3h,@er1-" \
	"addx.b r3h,@er1-"
gdb_test "x" "addx(.b|)\t@er3,r1h" \
	"addx.b @er3,r1h"
gdb_test "x" "addx(.b|)\t@er3,@er1" \
	"addx.b @er3,@er1"
gdb_test "x" "addx(.b|)\t@er3-,r1h" \
	"addx.b @er3-,r1h"
gdb_test "x" "addx(.b|)\t@er3-,@er1-" \
	"addx.b @er3-,@er1-"
gdb_test "x" "addx.w\t#0x1234(:16|),r1" \
	"addx.w #0x1234:16,r1"
gdb_test "x" "addx.w\t#0x1234(:16|),@er1" \
	"addx.w #0x1234:16,@er1"
gdb_test "x" "addx.w\t#0x1234(:16|),@er1-" \
	"addx.w #0x1234:16,@er1-"
gdb_test "x" "addx.w\tr3,r1" \
	"addx.w r3,r1"
gdb_test "x" "addx.w\tr3,@er1" \
	"addx.w r3,@er1"
gdb_test "x" "addx.w\tr3,@er1-" \
	"addx.w r3,@er1-"
gdb_test "x" "addx.w\t@er3,r1" \
	"addx.w @er3,r1"
gdb_test "x" "addx.w\t@er3,@er1" \
	"addx.w @er3,@er1"
gdb_test "x" "addx.w\t@er3-,r1" \
	"addx.w @er3-,r1"
gdb_test "x" "addx.w\t@er3-,@er1-" \
	"addx.w @er3-,@er1-"
gdb_test "x" "addx.l\t#0x12345678(:32|),er1" \
	"addx.l #0x12345678:32,er1"
gdb_test "x" "addx.l\t#0x12345678(:32|),@er1" \
	"addx.l #0x12345678:32,@er1"
gdb_test "x" "addx.l\t#0x12345678(:32|),@er1-" \
	"addx.l #0x12345678:32,@er1-"
gdb_test "x" "addx.l\ter3,er1" \
	"addx.l er3,er1"
gdb_test "x" "addx.l\ter3,@er1" \
	"addx.l er3,@er1"
gdb_test "x" "addx.l\ter3,@er1-" \
	"addx.l er3,@er1-"
gdb_test "x" "addx.l\t@er3,er1" \
	"addx.l @er3,er1"
gdb_test "x" "addx.l\t@er3,@er1" \
	"addx.l @er3,@er1"
gdb_test "x" "addx.l\t@er3-,er1" \
	"addx.l @er3-,er1"
gdb_test "x" "addx.l\t@er3-,@er1-" \
	"addx.l @er3-,@er1-"
gdb_test "x" "subx(.b|)\t#0x12(:8|),r1h" \
	"subx.b #0x12:8,r1h"
gdb_test "x" "subx(.b|)\t#0x12(:8|),@er1" \
	"subx.b #0x12:8,@er1"
gdb_test "x" "subx(.b|)\t#0x12(:8|),@er1-" \
	"subx.b #0x12:8,@er1-"
gdb_test "x" "subx(.b|)\tr3h,r1h" \
	"subx.b r3h,r1h"
gdb_test "x" "subx(.b|)\tr3h,@er1" \
	"subx.b r3h,@er1"
gdb_test "x" "subx(.b|)\tr3h,@er1-" \
	"subx.b r3h,@er1-"
gdb_test "x" "subx(.b|)\t@er3,r1h" \
	"subx.b @er3,r1h"
gdb_test "x" "subx(.b|)\t@er3,@er1" \
	"subx.b @er3,@er1"
gdb_test "x" "subx(.b|)\t@er3-,r1h" \
	"subx.b @er3-,r1h"
gdb_test "x" "subx(.b|)\t@er3-,@er1-" \
	"subx.b @er3-,@er1-"
gdb_test "x" "subx.w\t#0x1234(:16|),r1" \
	"subx.w #0x1234:16,r1"
gdb_test "x" "subx.w\t#0x1234(:16|),@er1" \
	"subx.w #0x1234:16,@er1"
gdb_test "x" "subx.w\t#0x1234(:16|),@er1-" \
	"subx.w #0x1234:16,@er1-"
gdb_test "x" "subx.w\tr3,r1" \
	"subx.w r3,r1"
gdb_test "x" "subx.w\tr3,@er1" \
	"subx.w r3,@er1"
gdb_test "x" "subx.w\tr3,@er1-" \
	"subx.w r3,@er1-"
gdb_test "x" "subx.w\t@er3,r1" \
	"subx.w @er3,r1"
gdb_test "x" "subx.w\t@er3,@er1" \
	"subx.w @er3,@er1"
gdb_test "x" "subx.w\t@er3-,r1" \
	"subx.w @er3-,r1"
gdb_test "x" "subx.w\t@er3-,@er1-" \
	"subx.w @er3-,@er1-"
gdb_test "x" "subx.l\t#0x12345678(:32|),er1" \
	"subx.l #0x12345678:32,er1"
gdb_test "x" "subx.l\t#0x12345678(:32|),@er1" \
	"subx.l #0x12345678:32,@er1"
gdb_test "x" "subx.l\t#0x12345678(:32|),@er1-" \
	"subx.l #0x12345678:32,@er1-"
gdb_test "x" "subx.l\ter3,er1" \
	"subx.l er3,er1"
gdb_test "x" "subx.l\ter3,@er1" \
	"subx.l er3,@er1"
gdb_test "x" "subx.l\ter3,@er1-" \
	"subx.l er3,@er1-"
gdb_test "x" "subx.l\t@er3,er1" \
	"subx.l @er3,er1"
gdb_test "x" "subx.l\t@er3,@er1" \
	"subx.l @er3,@er1"
gdb_test "x" "subx.l\t@er3-,er1" \
	"subx.l @er3-,er1"
gdb_test "x" "subx.l\t@er3-,@er1-" \
	"subx.l @er3-,@er1-"
gdb_test "x" "inc(.b|)\tr1h" \
	"inc.b r1h"
gdb_test "x" "inc(.w|)\t#1,r1" \
	"inc.w #1,r1"
gdb_test "x" "inc(.w|)\t#2,r1" \
	"inc.w #2,r1"
gdb_test "x" "inc(.l|)\t#1,er1" \
	"inc.l #1,er1"
gdb_test "x" "inc(.l|)\t#2,er1" \
	"inc.l #2,er1"
gdb_test "x" "dec(.b|)\tr1h" \
	"dec.b r1h"
gdb_test "x" "dec(.w|)\t#1,r1" \
	"dec.w #1,r1"
gdb_test "x" "dec(.w|)\t#2,r1" \
	"dec.w #2,r1"
gdb_test "x" "dec(.l|)\t#1,er1" \
	"dec.l #1,er1"
gdb_test "x" "dec(.l|)\t#2,er1" \
	"dec.l #2,er1"
gdb_test "x" "adds(.l|)\t#1,er1" \
	"adds.l #1,er1"
gdb_test "x" "adds(.l|)\t#2,er1" \
	"adds.l #2,er1"
gdb_test "x" "adds(.l|)\t#4,er1" \
	"adds.l #4,er1"
gdb_test "x" "subs(.l|)\t#1,er1" \
	"subs.l #1,er1"
gdb_test "x" "subs(.l|)\t#2,er1" \
	"subs.l #2,er1"
gdb_test "x" "subs(.l|)\t#4,er1" \
	"subs.l #4,er1"
gdb_test "x" "daa(.b|)\tr1h" \
	"daa.b r1h"
gdb_test "x" "das(.b|)\tr1h" \
	"das.b r1h"
gdb_test "x" "mulxu.b\t#0xf(:4|),r1" \
	"mulxu.b #0xf:4,r1"
gdb_test "x" "mulxu.b\tr3h,r1" \
	"mulxu.b r3h,r1"
gdb_test "x" "mulxu.w\t#0xf(:4|),er1" \
	"mulxu.w #0xf:4,er1"
gdb_test "x" "mulxu.w\tr3,er1" \
	"mulxu.w r3,er1"
gdb_test "x" "divxu.b\t#0xf(:4|),r1" \
	"divxu.b #0xf:4,r1"
gdb_test "x" "divxu.b\tr3h,r1" \
	"divxu.b r3h,r1"
gdb_test "x" "divxu.w\t#0xf(:4|),er1" \
	"divxu.w #0xf:4,er1"
gdb_test "x" "divxu.w\tr3,er1" \
	"divxu.w r3,er1"
gdb_test "x" "mulxs.b\t#0xf(:4|),r1" \
	"mulxs.b #0xf:4,r1"
gdb_test "x" "mulxs.b\tr3h,r1" \
	"mulxs.b r3h,r1"
gdb_test "x" "mulxs.w\t#0xf(:4|),er1" \
	"mulxs.w #0xf:4,er1"
gdb_test "x" "mulxs.w\tr3,er1" \
	"mulxs.w r3,er1"
gdb_test "x" "divxs.b\t#0xf(:4|),r1" \
	"divxs.b #0xf:4,r1"
gdb_test "x" "divxs.b\tr3h,r1" \
	"divxs.b r3h,r1"
gdb_test "x" "divxs.w\t#0xf(:4|),er1" \
	"divxs.w #0xf:4,er1"
gdb_test "x" "divxs.w\tr3,er1" \
	"divxs.w r3,er1"
gdb_test "x" "mulu.w\t#0xf(:4|),r1" \
	"mulu.w #0xf:4,r1"
gdb_test "x" "mulu.w\tr3,r1" \
	"mulu.w r3,r1"
gdb_test "x" "mulu.l\t#0xf(:4|),er1" \
	"mulu.l #0xf:4,er1"
gdb_test "x" "mulu.l\ter3,er1" \
	"mulu.l er3,er1"
gdb_test "x" "mulu/u.l\t#0xf(:4|),er1" \
	"mulu/u.l #0xf:4,er1"
gdb_test "x" "mulu/u.l\ter3,er1" \
	"mulu/u.l er3,er1"
gdb_test "x" "muls.w\t#0xf(:4|),r1" \
	"muls.w #0xf:4,r1"
gdb_test "x" "muls.w\tr3,r1" \
	"muls.w r3,r1"
gdb_test "x" "muls.l\t#0xf(:4|),er1" \
	"muls.l #0xf:4,er1"
gdb_test "x" "muls.l\ter3,er1" \
	"muls.l er3,er1"
gdb_test "x" "muls/u.l\t#0xf(:4|),er1" \
	"muls/u.l #0xf:4,er1"
gdb_test "x" "muls/u.l\ter3,er1" \
	"muls/u.l er3,er1"
gdb_test "x" "divu.w\t#0xf(:4|),r1" \
	"divu.w #0xf:4,r1"
gdb_test "x" "divu.w\tr3,r1" \
	"divu.w r3,r1"
gdb_test "x" "divu.l\t#0xf(:4|),er1" \
	"divu.l #0xf:4,er1"
gdb_test "x" "divu.l\ter3,er1" \
	"divu.l er3,er1"
gdb_test "x" "divs.w\t#0xf(:4|),r1" \
	"divs.w #0xf:4,r1"
gdb_test "x" "divs.w\tr3,r1" \
	"divs.w r3,r1"
gdb_test "x" "divs.l\t#0xf(:4|),er1" \
	"divs.l #0xf:4,er1"
gdb_test "x" "divs.l\ter3,er1" \
	"divs.l er3,er1"
