# Copyright (C) 2000 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 2 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, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# bug-gdb@prep.ai.mit.edu

# This file was written by Kazu Hirata. (kazu@hxi.com)

if $tracelevel then {
	strace $tracelevel
}

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

set prms_id 0
set bug_id 0

set testfile "h8300s"
set srcfile ${srcdir}/${subdir}/${testfile}.s
set binfile ${objdir}/${subdir}/${testfile}
if  { [gdb_compile "${srcfile}" "${binfile}" executable {debug additional_flags=-ms}] != "" } {
     gdb_suppress_entire_file "Testcase compile failed, so all tests in this file will automatically fail."
}

proc all_set_machine_h8300s { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "set machine h8300s\n"
    gdb_expect {
	-re "$gdb_prompt $" {}
    }
}

proc all_movb_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/9i movb_tests\n"
    gdb_expect {
	-re "
.*mov.b\tr0l,r0h.*
.*mov.b\t#0x12,r1l.*
.*mov.b\t@er0,r1h.*
.*mov.b\t@\\(0x1234:16,er0\\),r2l.*
.*mov.b\t@\\(0x12345678:32,er0\\),r2h.*
.*mov.b\t@er0\\+,r3l.*
.*mov.b\t@0x12:8,r3h.*
.*mov.b\t@0x1234:16,r4l.*
.*mov.b\t@0x12345678:32,r4h.*
.*$gdb_prompt $" { pass "movb_tests" }
	-re "$gdb_prompt $" { fail "movb_tests" }
	timeout { fail "(timeout) movb_tests" }
    }
}

proc all_movw_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/8i movw_tests\n"
    gdb_expect {
	-re "
.*mov.w\te0,r0.*
.*mov.w\t#0x1234,r1.*
.*mov.w\t@er0,r2.*
.*mov.w\t@\\(0x1234:16,er0\\),r3.*
.*mov.w\t@\\(0x12345678:32,er0\\),r4.*
.*mov.w\t@er0\\+,r5.*
.*mov.w\t@0x1234:16,r6.*
.*mov.w\t@0x12345678:32,r7.*
.*$gdb_prompt $" { pass "movw_tests" }
	-re "$gdb_prompt $" { fail "movw_tests" }
	timeout { fail "(timeout) movw_tests" }
    }
}

proc all_movl_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/8i movl_tests\n"
    gdb_expect {
	-re "
.*mov.l\ter0,er1.*
.*mov.l\t#0x12345678,er1.*
.*mov.l\t@er0,er2.*
.*mov.l\t@\\(0x1234:16,er0\\),er3.*
.*mov.l\t@\\(0x12345678:32,er0\\),er4.*
.*mov.l\t@er0\\+,er5.*
.*mov.l\t@0x1234:16,er6.*
.*mov.l\t@0x12345678:32,er7.*
.*$gdb_prompt $" { pass "movl_tests" }
	-re "$gdb_prompt $" { fail "movl_tests" }
	timeout { fail "(timeout) movl_tests" }
    }
}

proc all_ldm_stm_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/6i ldm_stm_tests\n"
    gdb_expect {
	-re "
.*ldm.l\t@sp\\+,er0-er1.*
.*ldm.l\t@sp\\+,er0-er2.*
.*ldm.l\t@sp\\+,er0-er3.*
.*stm.l\ter0\\-er1,@-sp.*
.*stm.l\ter0\\-er2,@-sp.*
.*stm.l\ter0\\-er3,@-sp.*
.*$gdb_prompt $" { pass "ldm_stm_tests" }
	-re "$gdb_prompt $" { fail "ldm_stm_tests" }
	timeout { fail "(timeout) ldm_stm_tests" }
    }
}

proc all_movfpe_movtpe_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/2i movfpe_movtpe_tests\n"
    gdb_expect {
	-re "
.*movfpe\t@0x1234:16,r2l.*
.*movtpe\tr2l,@0x1234:16.*
.*$gdb_prompt $" { pass "movfpe_movtpe_tests" }
	-re "$gdb_prompt $" { fail "movfpe_movtpe_tests" }
	timeout { fail "(timeout) movfpe_movtpe_tests" }
    }
}

proc all_add_sub_addx_subx_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/15i add_sub_addx_subx_tests\n"
    gdb_expect {
	-re "
.*add.b\t#0x12,r0l.*
.*add.b\tr1l,r1h.*
.*add.w\t#0x1234,r2.*
.*add.w\tr3,r4.*
.*add.l\t#0x12345678,er5.*
.*add.l\ter6,er7.*
.*sub.b\tr1l,r1h.*
.*sub.w\t#0x1234,r2.*
.*sub.w\tr3,r4.*
.*sub.l\t#0x12345678,er5.*
.*sub.l\ter6,er7.*
.*addx\t#0x12,r0l.*
.*addx\tr1l,r1h.*
.*subx\t#0x12,r0l.*
.*subx\tr1l,r1h.*
.*$gdb_prompt $" { pass "add_sub_addx_subx_tests" }
	-re "$gdb_prompt $" { fail "add_sub_addx_subx_tests" }
	timeout { fail "(timeout) add_sub_addx_subx_tests" }
    }
}

proc all_inc_dec_adds_subs_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/16i inc_dec_adds_subs_tests\n"
    gdb_expect {
	-re "
.*inc(.b|)\tr0l.*
.*inc.w\t#(0x|)1,r4.*
.*inc.w\t#(0x|)2,r3.*
.*inc.l\t#(0x|)1,er2.*
.*inc.l\t#(0x|)2,er1.*
.*dec.b\tr0l.*
.*dec.w\t#(0x|)1,r4.*
.*dec.w\t#(0x|)2,r3.*
.*dec.l\t#(0x|)1,er2.*
.*dec.l\t#(0x|)2,er1.*
.*adds\t#(0x|)1,er7.*
.*adds\t#(0x|)2,er6.*
.*adds\t#(0x|)4,er5.*
.*subs\t#(0x|)1,er7.*
.*subs\t#(0x|)2,er6.*
.*subs\t#(0x|)4,er5.*
.*$gdb_prompt $" { pass "inc_dec_adds_subs_tests" }
	-re "$gdb_prompt $" { fail "inc_dec_adds_subs_tests" }
	timeout { fail "(timeout) inc_dec_adds_subs_tests" }
    }
}

proc all_daa_das_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/2i daa_das_tests\n"
    gdb_expect {
	-re "
.*daa\tr0l.*
.*das\tr0h.*
.*$gdb_prompt $" { pass "daa_das_tests" }
	-re "$gdb_prompt $" { fail "daa_das_tests" }
	timeout { fail "(timeout) daa_das_tests" }
    }
}

proc all_mul_div_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/8i mul_div_tests\n"
    gdb_expect {
	-re "
.*mulxs.b\tr0l,r1.*
.*mulxs.w\tr2,er3.*
.*mulxu.b\tr0l,e1.*
.*mulxu.w\te2,er3.*
.*divxs.b\tr0l,r1.*
.*divxs.w\tr2,er3.*
.*divxu.b\tr0l,e1.*
.*divxu.w\te2,er3.*
.*$gdb_prompt $" { pass "mul_div_tests" }
	-re "$gdb_prompt $" { fail "mul_div_tests" }
	timeout { fail "(timeout) mul_div_tests" }
    }
}

proc all_cmp_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/8i cmp_tests\n"
    gdb_expect {
	-re "
.*cmp.b\t#0x12,r0l.*
.*cmp.b\tr1l,r1h.*
.*cmp.w\t#0x1234,r2.*
.*cmp.w\tr3,e3.*
.*cmp.l\t#0x12345678,er4.*
.*cmp.l\ter5,er6.*
.*$gdb_prompt $" { pass "cmp_tests" }
	-re "$gdb_prompt $" { fail "cmp_tests" }
	timeout { fail "(timeout) cmp_tests" }
    }
}

proc all_neg_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/3i neg_tests\n"
    gdb_expect {
	-re "
.*neg.b\tr0l.*
.*neg.w\tr2.*
.*neg.l\ter3.*
.*$gdb_prompt $" { pass "neg_tests" }
	-re "$gdb_prompt $" { fail "neg_tests" }
	timeout { fail "(timeout) neg_tests" }
    }
}

proc all_ext_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/4i ext_tests\n"
    gdb_expect {
	-re "
.*exts.w\tr0.*
.*exts.l\ter1.*
.*extu.w\tr2.*
.*extu.l\ter3.*
.*$gdb_prompt $" { pass "ext_tests" }
	-re "$gdb_prompt $" { fail "ext_tests" }
	timeout { fail "(timeout) ext_tests" }
    }
}

proc all_tas_mac_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/7i tas_mac_tests\n"
    gdb_expect {
	-re "
.*tas\t@er0.*
.*mac\t@er1\\+,@er2\\+.*
.*clrmac.*
.*ldmac\ter4,mach.*
.*ldmac\ter5,macl.*
.*stmac\tmach,er6.*
.*stmac\tmacl,er7.*
.*$gdb_prompt $" { pass "tas_mac_tests" }
	-re "$gdb_prompt $" { fail "tas_mac_tests" }
	timeout { fail "(timeout) tas_mac_tests" }
    }
}

proc all_logic_operations_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/21i logic_operations_tests\n"
    gdb_expect {
	-re "
.*and.b\t#0x12,r0l.*
.*and.b\tr1l,r2h.*
.*and.w\t#0x1234,r0.*
.*and.w\tr1,r2.*
.*and.l\t#0x12345678,er0.*
.*and.l\ter1,er2.*
.*or.b\t#0x12,r0l.*
.*or.b\tr1l,r2h.*
.*or.w\t#0x1234,r0.*
.*or.w\tr1,r2.*
.*or.l\t#0x12345678,er0.*
.*or.l\ter1,er2.*
.*xor(.b|)\t#0x12,r0l.*
.*xor(.b|)\tr1l,r2h.*
.*xor.w\t#0x1234,r0.*
.*xor.w\tr1,r2.*
.*xor.l\t#0x12345678,er0.*
.*xor.l\ter1,er2.*
.*not.b\tr0l.*
.*not.w\tr1.*
.*not.l\ter2.*
.*$gdb_prompt $" { pass "logic_operations_tests" }
	-re "$gdb_prompt $" { fail "logic_operations_tests" }
	timeout { fail "(timeout) logic_operations_tests" }
    }
}

proc all_sha_shl_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/12i sha_shl_tests\n"
    gdb_expect {
	-re "
.*shal(.b|)\tr0l.*
.*shal(.w|)\tr1.*
.*shal(.l|)\ter2.*
.*shar(.b|)\tr3l.*
.*shar(.w|)\tr4.*
.*shar(.l|)\ter5.*
.*shll(.b|)\tr0l.*
.*shll(.w|)\tr1.*
.*shll(.l|)\ter2.*
.*shlr(.b|)\tr3l.*
.*shlr(.w|)\tr4.*
.*shlr(.l|)\ter5.*
.*$gdb_prompt $" { pass "sha_shl_tests" }
	-re "$gdb_prompt $" { fail "sha_shl_tests" }
	timeout { fail "(timeout) sha_shl_tests" }
    }
}

proc all_rot_rotx_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/12i rot_rotx_tests\n"
    gdb_expect {
	-re "
.*rotl(.b|)\tr0l.*
.*rotl(.w|)\tr1.*
.*rotl(.l|)\ter2.*
.*rotr(.b|)\tr3l.*
.*rotr(.w|)\tr4.*
.*rotr(.l|)\ter5.*
.*rotxl(.b|)\tr0l.*
.*rotxl(.w|)\tr1.*
.*rotxl(.l|)\ter2.*
.*rotxr(.b|)\tr3l.*
.*rotxr(.w|)\tr4.*
.*rotxr(.l|)\ter5.*
.*$gdb_prompt $" { pass "rot_rotx_tests" }
	-re "$gdb_prompt $" { fail "rot_rotx_tests" }
	timeout { fail "(timeout) rot_rotx_tests" }
    }
}

proc all_bset_bclr_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/20i bset_bclr_tests\n"
    gdb_expect {
	-re "
.*bset\t#0x7,r0l.*
.*bset\t#0x6,@er1.*
.*bset\t#0x5,@0x12:8.*
.*bset\t#0x4,@0x1234:16.*
.*bset\t#0x3,@0x12345678:32.*
.*bset\tr7l,r0h.*
.*bset\tr6l,@er1.*
.*bset\tr5l,@0x12:8.*
.*bset\tr4l,@0x1234:16.*
.*bset\tr3l,@0x12345678:32.*
.*bclr\t#0x7,r0l.*
.*bclr\t#0x6,@er1.*
.*bclr\t#0x5,@0x12:8.*
.*bclr\t#0x4,@0x1234:16.*
.*bclr\t#0x3,@0x12345678:32.*
.*bclr\tr7h,r0h.*
.*bclr\tr6h,@er1.*
.*bclr\tr5h,@0x12:8.*
.*bclr\tr4h,@0x1234:16.*
.*bclr\tr3h,@0x12345678:32.*
.*$gdb_prompt $" { pass "bset_bclr_tests" }
	-re "$gdb_prompt $" { fail "bset_bclr_tests" }
	timeout { fail "(timeout) bset_bclr_tests" }
    }
}

proc all_bnot_btst_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/20i bnot_btst_tests\n"
    gdb_expect {
	-re "
.*bnot\t#0x7,r0l.*
.*bnot\t#0x6,@er1.*
.*bnot\t#0x5,@0x12:8.*
.*bnot\t#0x4,@0x1234:16.*
.*bnot\t#0x3,@0x12345678:32.*
.*bnot\tr7l,r0h.*
.*bnot\tr6l,@er1.*
.*bnot\tr5l,@0x12:8.*
.*bnot\tr4l,@0x1234:16.*
.*bnot\tr3l,@0x12345678:32.*
.*btst\t#0x7,r0l.*
.*btst\t#0x6,@er1.*
.*btst\t#0x5,@0x12:8.*
.*btst\t#0x4,@0x1234:16.*
.*btst\t#0x3,@0x12345678:32.*
.*btst\tr7h,r0h.*
.*btst\tr6h,@er1.*
.*btst\tr5h,@0x12:8.*
.*btst\tr4h,@0x1234:16.*
.*btst\tr3h,@0x12345678:32.*
.*$gdb_prompt $" { pass "bnot_btst_tests" }
	-re "$gdb_prompt $" { fail "bnot_btst_tests" }
	timeout { fail "(timeout) bnot_btst_tests" }
    }
}

proc all_band_bor_bxor_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/15i band_bor_bxor_tests\n"
    gdb_expect {
	-re "
.*band\t#0x7,r0l.*
.*band\t#0x6,@er1.*
.*band\t#0x5,@0x12:8.*
.*band\t#0x4,@0x1234:16.*
.*band\t#0x3,@0x12345678:32.*
.*bor\t#0x7,r0l.*
.*bor\t#0x6,@er1.*
.*bor\t#0x5,@0x12:8.*
.*bor\t#0x4,@0x1234:16.*
.*bor\t#0x3,@0x12345678:32.*
.*bxor\t#0x7,r0l.*
.*bxor\t#0x6,@er1.*
.*bxor\t#0x5,@0x12:8.*
.*bxor\t#0x4,@0x1234:16.*
.*bxor\t#0x3,@0x12345678:32.*
.*$gdb_prompt $" { pass "band_bor_bxor_tests" }
	-re "$gdb_prompt $" { fail "band_bor_bxor_tests" }
	timeout { fail "(timeout) band_bor_bxor_tests" }
    }
}

proc all_bld_bst_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/20i bld_bst_tests\n"
    gdb_expect {
	-re "
.*bld\t#0x7,r0l.*
.*bld\t#0x6,@er1.*
.*bld\t#0x5,@0x12:8.*
.*bld\t#0x4,@0x1234:16.*
.*bld\t#0x3,@0x12345678:32.*
.*bild\t#0x7,r0l.*
.*bild\t#0x6,@er1.*
.*bild\t#0x5,@0x12:8.*
.*bild\t#0x4,@0x1234:16.*
.*bild\t#0x3,@0x12345678:32.*
.*bst\t#0x7,r0l.*
.*bst\t#0x6,@er1.*
.*bst\t#0x5,@0x12:8.*
.*bst\t#0x4,@0x1234:16.*
.*bst\t#0x3,@0x12345678:32.*
.*bist\t#0x7,r0l.*
.*bist\t#0x6,@er1.*
.*bist\t#0x5,@0x12:8.*
.*bist\t#0x4,@0x1234:16.*
.*bist\t#0x3,@0x12345678:32.*
.*$gdb_prompt $" { pass "bld_bst_tests" }
	-re "$gdb_prompt $" { fail "bld_bst_tests" }
	timeout { fail "(timeout) bld_bst_tests" }
    }
}

proc all_branch_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/25i branch_tests\n"
    gdb_expect {
	-re "
.*bra\t(branch_tests|.-2 ).*
.*brn\t(branch_tests|.-4 ).*
.*bhi\t(branch_tests|.-6 ).*
.*bls\t(branch_tests|.-8 ).*
.*bcc\t(branch_tests|.-10 ).*
.*bcs\t(branch_tests|.-12 ).*
.*bne\t(branch_tests|.-14 ).*
.*beq\t(branch_tests|.-16 ).*
.*bvc\t(branch_tests|.-18 ).*
.*bvs\t(branch_tests|.-20 ).*
.*bpl\t(branch_tests|.-22 ).*
.*bmi\t(branch_tests|.-24 ).*
.*bge\t(branch_tests|.-26 ).*
.*blt\t(branch_tests|.-28 ).*
.*bgt\t(branch_tests|.-30 ).*
.*ble\t(branch_tests|.-32 ).*
.*jmp\t@er0.*
.*jmp\t@(branch_tests|0x).*
.*jmp\t@@0 \\((0x|)0\\).*
.*bsr\t(branch_tests|.-42 ).*
.*bsr\t(branch_tests|.-46 ).*
.*jsr\t@er0.*
.*jsr\t@(branch_tests|0x).*
.*jsr\t@@0 \\((0x|)0\\).*
.*rts.*
.*$gdb_prompt $" { pass "branch_tests" }
	-re "$gdb_prompt $" { fail "branch_tests" }
	timeout { fail "(timeout) branch_tests" }
    }
}

proc all_system_control_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/40i system_control_tests\n"
    gdb_expect {
	-re "
.*trapa\t#0x2.*
.*rte.*
.*sleep.*
.*ldc\t#0x12,ccr*.
.*ldc\tr3l,ccr.*
.*ldc\t@er0,ccr.*
.*ldc\t@\\(0x1234:16,er0\\),ccr.*
.*ldc\t@\\(0x12345678:32,er0\\),ccr.*
.*ldc\t@er1\\+,ccr.*
.*ldc\t@0x1234:16,ccr.*
.*ldc\t@0x12345678:32,ccr.*
.*stc\tccr,r3l.*
.*stc\tccr,@er0.*
.*stc\tccr,@\\(0x1234:16,er0\\).*
.*stc\tccr,@\\(0x12345678:32,er0\\).*
.*stc\tccr,@\\-er1.*
.*stc\tccr,@0x1234:16.*
.*stc\tccr,@0x12345678:32.*
.*andc\t#0x12,ccr.*
.*orc\t#0x34,ccr.*
.*xorc\t#0x56,ccr.*
.*ldc\t#0x12,exr*.
.*ldc\tr3l,exr.*
.*ldc\t@er0,exr.*
.*ldc\t@\\(0x1234:16,er0\\),exr.*
.*ldc\t@\\(0x12345678:32,er0\\),exr.*
.*ldc\t@er1\\+,exr.*
.*ldc\t@0x1234:16,exr.*
.*ldc\t@0x12345678:32,exr.*
.*stc\texr,r3l.*
.*stc\texr,@er0.*
.*stc\texr,@\\(0x1234:16,er0\\).*
.*stc\texr,@\\(0x12345678:32,er0\\).*
.*stc\texr,@\\-er1.*
.*stc\texr,@0x1234:16.*
.*stc\texr,@0x12345678:32.*
.*andc\t#0x12,exr.*
.*orc\t#0x34,exr.*
.*xorc\t#0x56,exr.*
.*nop.*
.*$gdb_prompt $" { pass "system_control_tests" }
	-re "$gdb_prompt $" { fail "system_control_tests" }
	timeout { fail "(timeout) system_control_tests" }
    }
}

proc all_block_data_transfer_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/2i block_data_transfer_tests\n"
    gdb_expect {
	-re "
.*eepmov.b.*
.*eepmov.w.*
.*$gdb_prompt $" { pass "block_data_transfer_tests" }
	-re "$gdb_prompt $" { fail "block_data_transfer_tests" }
	timeout { fail "(timeout) block_data_transfer_tests" }
    }
}

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
all_set_machine_h8300s
gdb_load $binfile

# Data transfer
all_movb_tests
all_movw_tests
all_movl_tests
all_ldm_stm_tests
all_movfpe_movtpe_tests

# Arithmetic operations
all_add_sub_addx_subx_tests
all_inc_dec_adds_subs_tests
all_daa_das_tests
all_mul_div_tests
all_cmp_tests
all_neg_tests
all_ext_tests
all_tas_mac_tests

# Logic operations
all_logic_operations_tests

# Shift
all_sha_shl_tests
all_rot_rotx_tests

# Bit manipulation
all_bset_bclr_tests
all_bnot_btst_tests
all_band_bor_bxor_tests
all_bld_bst_tests

# Branch
all_branch_tests

# System control
all_system_control_tests

# Block data transfer
all_block_data_transfer_tests
