
# Copyright 1997, 1998 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 Jeff Law. (law@cygnus.com)

if $tracelevel then {
	strace $tracelevel
}

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

global exec_output
set prms_id 0
set bug_id 0

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

proc call_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/8i call_tests\n"
    gdb_expect {
	-re "
.*call	.*,.a2,a3,exreg0.,9.*
.*call	.*,.a2,a3,exreg1.,9.*
.*call	.*,.a2,a3,exother.,9.*
.*call	.*,.d2,d3,a2,a3,other,exreg0,exreg1,exother.,9.*
.*call	.*,.a2,a3,exreg0.,9.*
.*call	.*,.a2,a3,exreg1.,9.*
.*call	.*,.a2,a3,exother.,9.*
.*call	.*,.d2,d3,a2,a3,other,exreg0,exreg1,exother.,9.*
.*$gdb_prompt $" { pass "call tests" }
	-re "$gdb_prompt $" { fail "call tests" }
	timeout { fail "(timeout) call tests" }
    }
}

proc movm_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/16i movm_tests\n"
    gdb_expect {
	-re "
.*movm	\\(sp\\),.a2,a3,exreg0.*
.*movm	\\(sp\\),.a2,a3,exreg1.*
.*movm	\\(sp\\),.a2,a3,exother.*
.*movm	\\(sp\\),.d2,d3,a2,a3,other,exreg0,exreg1,exother.*
.*movm	.a2,a3,exreg0.,\\(sp\\).*
.*movm	.a2,a3,exreg1.,\\(sp\\).*
.*movm	.a2,a3,exother.,\\(sp\\).*
.*movm	.d2,d3,a2,a3,other,exreg0,exreg1,exother.,\\(sp\\).*
.*movm	\\(usp\\),.a2,a3,exreg0.*
.*movm	\\(usp\\),.a2,a3,exreg1.*
.*movm	\\(usp\\),.a2,a3,exother.*
.*movm	\\(usp\\),.d2,d3,a2,a3,other,exreg0,exreg1,exother.*
.*movm	.a2,a3,exreg0.,\\(usp\\).*
.*movm	.a2,a3,exreg1.,\\(usp\\).*
.*movm	.a2,a3,exother.,\\(usp\\).*
.*movm	.d2,d3,a2,a3,other,exreg0,exreg1,exother.,\\(usp\\).*
.*$gdb_prompt $" { pass "movm tests" }
	-re "$gdb_prompt $" { fail "movm tests" }
	timeout { fail "(timeout) movm tests" }
    }
}

proc misc_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/11i misc_tests\n"
    gdb_expect {
	-re "
.*syscall	4.*
.*mcst9	d0.*
.*mcst48	d1.*
.*getchx	d0.*
.*getclx	d1.*
.*clr	a1.*
.*sat16	a1,a0.*
.*mcste	r7,r6.*
.*swap	r5,r4.*
.*swaph	r3,r2.*
.*swhw	r1,r0.*
.*$gdb_prompt $" { pass "misc tests" }
	-re "$gdb_prompt $" { fail "misc tests" }
	timeout { fail "(timeout) misc tests" }
    }
}

proc mov_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/45i mov_tests\n"
    gdb_expect {
	-re "
.*mov	r0,r1.*
.*mov	sp,r1.*
.*mov	r1,xr2.*
.*mov	\\(r1\\),r2.*
.*mov	r3,\\(r4\\).*
.*mov	\\(sp\\),r5.*
.*mov	r6,\\(sp\\).*
.*mov	16,r1.*
.*mov	16,xr1.*
.*mov	\\(16,r1\\),r2.*
.*mov	r2,\\(16,r1\\).*
.*mov	\\(16,sp\\),r2.*
.*mov	r2,\\(16,sp\\).*
.*mov	2096895,r2.*
.*mov	2096895,xr2.*
.*mov	\\(2096895,r1\\),r2.*
.*mov	r2,\\(2096895,r1\\).*
.*mov	\\(2096895,sp\\),r2.*
.*mov	r2,\\(2096895,sp\\).*
.*mov	\\(0x1ffeff\\),r2.*
.*mov	r2,\\(0x1ffeff\\).*
.*mov	2147417596,r2.*
.*mov	2147417596,xr2.*
.*mov	\\(2147417596,r1\\),r2.*
.*mov	r2,\\(2147417596,r1\\).*
.*mov	\\(2147417596,sp\\),r2.*
.*mov	r2,\\(2147417596,sp\\).*
.*mov	\\(0x7ffefdfc\\),r2.*
.*mov	r2,\\(0x7ffefdfc\\).*
.*movu	16,r1.*
.*movu	2096895,r2.*
.*movu	2147417596,r2.*
.*mov	usp,a0.*
.*mov	ssp,a1.*
.*mov	msp,a2.*
.*mov	pc,a3.*
.*mov	a0,usp.*
.*mov	a1,ssp.*
.*mov	a2,msp.*
.*mov	epsw,d0.*
.*mov	d1,epsw.*
.*mov	a0,r1.*
.*mov	d2,r3.*
.*mov	r5,a1.*
.*mov	r7,d3.*
.*$gdb_prompt $" { pass "mov tests" }
	-re "$gdb_prompt $" { fail "mov tests" }
	timeout { fail "(timeout) mov tests" }
    }
}

proc ext_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/5i ext_tests\n"
    gdb_expect {
	-re "
.*ext	r2.*
.*extb	r3,r4.*
.*extbu	r4,r5.*
.*exth	r6,r7.*
.*exthu	r7,a0.*
.*$gdb_prompt $" { pass "ext tests" }
	-re "$gdb_prompt $" { fail "ext tests" }
	timeout { fail "(timeout) ext tests" }
    }
}

proc add_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/11i add_tests\n"
    gdb_expect {
	-re "
.*add	a2,a3.*
.*add	16,r1.*
.*add	2096895,r2.*
.*add	2147417596,r2.*
.*add	r1,r2,r3.*
.*addc	d0,d1.*
.*addc	16,r1.*
.*addc	2096895,r2.*
.*addc	2147417596,r2.*
.*inc	d1.*
.*inc4	d0.*
.*$gdb_prompt $" { pass "add tests" }
	-re "$gdb_prompt $" { fail "add tests" }
	timeout { fail "(timeout) add tests" }
    }
}

proc sub_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/8i sub_tests\n"
    gdb_expect {
	-re "
.*sub	d2,d3.*
.*sub	16,r1.*
.*sub	2096895,r2.*
.*sub	2147417596,r2.*
.*subc	d3,d2.*
.*subc	16,r1.*
.*subc	2096895,r2.*
.*subc	2147417596,r2.*
.*$gdb_prompt $" { pass "sub tests" }
	-re "$gdb_prompt $" { fail "sub tests" }
	timeout { fail "(timeout) sub tests" }
    }
}

proc cmp_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/4i cmp_tests\n"
    gdb_expect {
	-re "
.*cmp	a3,a2.*
.*cmp	16,r1.*
.*cmp	2096895,r2.*
.*cmp	2147417596,r2.*
.*$gdb_prompt $" { pass "cmp tests" }
	-re "$gdb_prompt $" { fail "cmp tests" }
	timeout { fail "(timeout) cmp tests" }
    }
}

proc logical_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/15i logical_tests\n"
    gdb_expect {
	-re "
.*and	r0,r1.*
.*or	r2,r3.*
.*xor	r4,r5.*
.*not	r6.*
.*and	16,r1.*
.*or	16,r1.*
.*xor	16,r1.*
.*and	2096895,r2.*
.*or	2096895,r2.*
.*xor	2096895,r2.*
.*and	2147417596,r2.*
.*or	2147417596,r2.*
.*xor	2147417596,r2.*
.*and	131072,epsw.*
.*or	65535,epsw.*
.*$gdb_prompt $" { pass "logical tests" }
	-re "$gdb_prompt $" { fail "logical tests" }
	timeout { fail "(timeout) logical tests" }
    }
}

proc shift_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/15i shift_tests\n"
    gdb_expect {
	-re "
.*asr	r7,a0.*
.*lsr	a1,a2.*
.*asl	a3,d0.*
.*asl2	d1.*
.*ror	d2.*
.*rol	d3.*
.*asr	16,r1.*
.*lsr	16,r1.*
.*asl	16,r1.*
.*asr	2096895,r2.*
.*lsr	2096895,r2.*
.*asl	2096895,r2.*
.*asr	2147417596,r2.*
.*lsr	2147417596,r2.*
.*asl	2147417596,r2.*
.*$gdb_prompt $" { pass "shift tests" }
	-re "$gdb_prompt $" { fail "shift tests" }
	timeout { fail "(timeout) shift tests" }
    }
}

proc muldiv_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/16i muldiv_tests\n"
    gdb_expect {
	-re "
.*mul	r1,r2.*
.*mulu	r3,r4.*
.*mul	16,r1.*
.*mulu	16,r1.*
.*mul	2096895,r2.*
.*mulu	2096895,r2.*
.*mul	2147417596,r2.*
.*mulu	2147417596,r2.*
.*div	r5,r6.*
.*divu	r7,a0.*
.*dmulh	d1,d0.*
.*dmulhu	a3,a2.*
.*dmulh	2147417596,r2.*
.*dmulhu	2147417596,r2.*
.*mul	r1,r2,r3,r4.*
.*mulu	r1,r2,r3,r4.*
.*$gdb_prompt $" { pass "muldiv tests" }
	-re "$gdb_prompt $" { fail "muldiv tests" }
	timeout { fail "(timeout) muldiv tests" }
    }
}

proc movbu_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/20i movbu_tests\n"
    gdb_expect {
	-re "
.*movbu	\\(r5\\),r6.*
.*movbu	r7,\\(a0\\).*
.*movbu	\\(sp\\),r7.*
.*movbu	a0,\\(sp\\).*
.*movbu	\\(16,r1\\),r2.*
.*movbu	r2,\\(16,r1\\).*
.*movbu	\\(16,sp\\),r2.*
.*movbu	r2,\\(16,sp\\).*
.*movbu	\\(2096895,r1\\),r2.*
.*movbu	r2,\\(2096895,r1\\).*
.*movbu	\\(2096895,sp\\),r2.*
.*movbu	r2,\\(2096895,sp\\).*
.*movbu	\\(0x1ffeff\\),r2.*
.*movbu	r2,\\(0x1ffeff\\).*
.*movbu	\\(2147417596,r1\\),r2.*
.*movbu	r2,\\(2147417596,r1\\).*
.*movbu	\\(2147417596,sp\\),r2.*
.*movbu	r2,\\(2147417596,sp\\).*
.*movbu	\\(0x7ffefdfc\\),r2.*
.*movbu	r2,\\(0x7ffefdfc\\).*
.*$gdb_prompt $" { pass "movbu tests" }
	-re "$gdb_prompt $" { fail "movbu tests" }
	timeout { fail "(timeout) movbu tests" }
    }
}

proc movhu_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/20i movhu_tests\n"
    gdb_expect {
	-re "
.*movhu	\\(a1\\),a2.*
.*movhu	a3,\\(d0\\).*
.*movhu	\\(sp\\),a1.*
.*movhu	a2,\\(sp\\).*
.*movhu	\\(16,r1\\),r2.*
.*movhu	r2,\\(16,r1\\).*
.*movhu	\\(16,sp\\),r2.*
.*movhu	r2,\\(16,sp\\).*
.*movhu	\\(2096895,r1\\),r2.*
.*movhu	r2,\\(2096895,r1\\).*
.*movhu	\\(2096895,sp\\),r2.*
.*movhu	r2,\\(2096895,sp\\).*
.*movhu	\\(0x1ffeff\\),r2.*
.*movhu	r2,\\(0x1ffeff\\).*
.*movhu	\\(2147417596,r1\\),r2.*
.*movhu	r2,\\(2147417596,r1\\).*
.*movhu	\\(2147417596,sp\\),r2.*
.*movhu	r2,\\(2147417596,sp\\).*
.*movhu	\\(0x7ffefdfc\\),r2.*
.*movhu	r2,\\(0x7ffefdfc\\).*
.*$gdb_prompt $" { pass "movhu tests" }
	-re "$gdb_prompt $" { fail "movhu tests" }
	timeout { fail "(timeout) movhu tests" }
    }
}

proc mac_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/28i mac_tests\n"
    gdb_expect {
	-re "
.*mac	r1,r2.*
.*macu	r3,r4.*
.*macb	r5,r6.*
.*macbu	r7,a0.*
.*mach	a1,a2.*
.*machu	a3,d0.*
.*dmach	d1,d2.*
.*dmachu	d3,d2.*
.*mac	16,r1.*
.*macu	16,r1.*
.*macb	16,r1.*
.*macbu	16,r1.*
.*mach	16,r1.*
.*machu	16,r1.*
.*mac	2096895,r2.*
.*macu	2096895,r2.*
.*macb	2096895,r2.*
.*macbu	2096895,r2.*
.*mach	2096895,r2.*
.*machu	2096895,r2.*
.*mac	2147417596,r2.*
.*macu	2147417596,r2.*
.*macb	2147417596,r2.*
.*macbu	2147417596,r2.*
.*mach	2147417596,r2.*
.*machu	2147417596,r2.*
.*dmach	2147417596,r2.*
.*dmachu	2147417596,r2.*
.*$gdb_prompt $" { pass "mac tests" }
	-re "$gdb_prompt $" { fail "mac tests" }
	timeout { fail "(timeout) mac tests" }
    }
}

proc bit_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/4i bit_tests\n"
    gdb_expect {
	-re "
.*bsch	r1,r2.*
.*btst	16,r1.*
.*btst	2096895,r2.*
.*btst	2147417596,r2.*
.*$gdb_prompt $" { pass "bit tests" }
	-re "$gdb_prompt $" { fail "bit tests" }
	timeout { fail "(timeout) bit tests" }
    }
}

proc dsp_add_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/28i dsp_add_tests\n"
    gdb_expect {
	-re "
.*add_add	r4,r1,r2,r3.*
.*add_add	r4,r1,2,r3.*
.*add_sub	r4,r1,r2,r3.*
.*add_sub	r4,r1,2,r3.*
.*add_cmp	r4,r1,r2,r3.*
.*add_cmp	r4,r1,2,r3.*
.*add_mov	r4,r1,r2,r3.*
.*add_mov	r4,r1,2,r3.*
.*add_asr	r4,r1,r2,r3.*
.*add_asr	r4,r1,2,r3.*
.*add_lsr	r4,r1,r2,r3.*
.*add_lsr	r4,r1,2,r3.*
.*add_asl	r4,r1,r2,r3.*
.*add_asl	r4,r1,2,r3.*
.*add_add	4,r1,r2,r3.*
.*add_add	4,r1,2,r3.*
.*add_sub	4,r1,r2,r3.*
.*add_sub	4,r1,2,r3.*
.*add_cmp	4,r1,r2,r3.*
.*add_cmp	4,r1,2,r3.*
.*add_mov	4,r1,r2,r3.*
.*add_mov	4,r1,2,r3.*
.*add_asr	4,r1,r2,r3.*
.*add_asr	4,r1,2,r3.*
.*add_lsr	4,r1,r2,r3.*
.*add_lsr	4,r1,2,r3.*
.*add_asl	4,r1,r2,r3.*
.*add_asl	4,r1,2,r3.*
.*$gdb_prompt $" { pass "dsp_add tests" }
	-re "$gdb_prompt $" { fail "dsp_add tests" }
	timeout { fail "(timeout) dsp_add tests" }
    }
}

proc dsp_cmp_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/24i dsp_cmp_tests\n"
    gdb_expect {
	-re "
.*cmp_add	r4,r1,r2,r3.*
.*cmp_add	r4,r1,2,r3.*
.*cmp_sub	r4,r1,r2,r3.*
.*cmp_sub	r4,r1,2,r3.*
.*cmp_mov	r4,r1,r2,r3.*
.*cmp_mov	r4,r1,2,r3.*
.*cmp_asr	r4,r1,r2,r3.*
.*cmp_asr	r4,r1,2,r3.*
.*cmp_lsr	r4,r1,r2,r3.*
.*cmp_lsr	r4,r1,2,r3.*
.*cmp_asl	r4,r1,r2,r3.*
.*cmp_asl	r4,r1,2,r3.*
.*cmp_add	4,r1,r2,r3.*
.*cmp_add	4,r1,2,r3.*
.*cmp_sub	4,r1,r2,r3.*
.*cmp_sub	4,r1,2,r3.*
.*cmp_mov	4,r1,r2,r3.*
.*cmp_mov	4,r1,2,r3.*
.*cmp_asr	4,r1,r2,r3.*
.*cmp_asr	4,r1,2,r3.*
.*cmp_lsr	4,r1,r2,r3.*
.*cmp_lsr	4,r1,2,r3.*
.*cmp_asl	4,r1,r2,r3.*
.*cmp_asl	4,r1,2,r3.*
.*$gdb_prompt $" { pass "dsp_cmp tests" }
	-re "$gdb_prompt $" { fail "dsp_cmp tests" }
	timeout { fail "(timeout) dsp_cmp tests" }
    }
}

proc dsp_sub_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/28i dsp_sub_tests\n"
    gdb_expect {
	-re "
.*sub_add	r4,r1,r2,r3.*
.*sub_add	r4,r1,2,r3.*
.*sub_sub	r4,r1,r2,r3.*
.*sub_sub	r4,r1,2,r3.*
.*sub_cmp	r4,r1,r2,r3.*
.*sub_cmp	r4,r1,2,r3.*
.*sub_mov	r4,r1,r2,r3.*
.*sub_mov	r4,r1,2,r3.*
.*sub_asr	r4,r1,r2,r3.*
.*sub_asr	r4,r1,2,r3.*
.*sub_lsr	r4,r1,r2,r3.*
.*sub_lsr	r4,r1,2,r3.*
.*sub_asl	r4,r1,r2,r3.*
.*sub_asl	r4,r1,2,r3.*
.*sub_add	4,r1,r2,r3.*
.*sub_add	4,r1,2,r3.*
.*sub_sub	4,r1,r2,r3.*
.*sub_sub	4,r1,2,r3.*
.*sub_cmp	4,r1,r2,r3.*
.*sub_cmp	4,r1,2,r3.*
.*sub_mov	4,r1,r2,r3.*
.*sub_mov	4,r1,2,r3.*
.*sub_asr	4,r1,r2,r3.*
.*sub_asr	4,r1,2,r3.*
.*sub_lsr	4,r1,r2,r3.*
.*sub_lsr	4,r1,2,r3.*
.*sub_asl	4,r1,r2,r3.*
.*sub_asl	4,r1,2,r3.*
.*$gdb_prompt $" { pass "dsp_sub tests" }
	-re "$gdb_prompt $" { fail "dsp_sub tests" }
	timeout { fail "(timeout) dsp_sub tests" }
    }
}

proc dsp_mov_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/28i dsp_mov_tests\n"
    gdb_expect {
	-re "
.*mov_add	r4,r1,r2,r3.*
.*mov_add	r4,r1,2,r3.*
.*mov_sub	r4,r1,r2,r3.*
.*mov_sub	r4,r1,2,r3.*
.*mov_cmp	r4,r1,r2,r3.*
.*mov_cmp	r4,r1,2,r3.*
.*mov_mov	r4,r1,r2,r3.*
.*mov_mov	r4,r1,2,r3.*
.*mov_asr	r4,r1,r2,r3.*
.*mov_asr	r4,r1,2,r3.*
.*mov_lsr	r4,r1,r2,r3.*
.*mov_lsr	r4,r1,2,r3.*
.*mov_asl	r4,r1,r2,r3.*
.*mov_asl	r4,r1,2,r3.*
.*mov_add	4,r1,r2,r3.*
.*mov_add	4,r1,2,r3.*
.*mov_sub	4,r1,r2,r3.*
.*mov_sub	4,r1,2,r3.*
.*mov_cmp	4,r1,r2,r3.*
.*mov_cmp	4,r1,2,r3.*
.*mov_mov	4,r1,r2,r3.*
.*mov_mov	4,r1,2,r3.*
.*mov_asr	4,r1,r2,r3.*
.*mov_asr	4,r1,2,r3.*
.*mov_lsr	4,r1,r2,r3.*
.*mov_lsr	4,r1,2,r3.*
.*mov_asl	4,r1,r2,r3.*
.*mov_asl	4,r1,2,r3.*
.*$gdb_prompt $" { pass "dsp_mov tests" }
	-re "$gdb_prompt $" { fail "dsp_mov tests" }
	timeout { fail "(timeout) dsp_mov tests" }
    }
}

proc dsp_logical_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/42i dsp_logical_tests\n"
    gdb_expect {
	-re "
.*and_add	r4,r1,r2,r3.*
.*and_add	r4,r1,2,r3.*
.*and_sub	r4,r1,r2,r3.*
.*and_sub	r4,r1,2,r3.*
.*and_cmp	r4,r1,r2,r3.*
.*and_cmp	r4,r1,2,r3.*
.*and_mov	r4,r1,r2,r3.*
.*and_mov	r4,r1,2,r3.*
.*and_asr	r4,r1,r2,r3.*
.*and_asr	r4,r1,2,r3.*
.*and_lsr	r4,r1,r2,r3.*
.*and_lsr	r4,r1,2,r3.*
.*and_asl	r4,r1,r2,r3.*
.*and_asl	r4,r1,2,r3.*
.*xor_add	r4,r1,r2,r3.*
.*xor_add	r4,r1,2,r3.*
.*xor_sub	r4,r1,r2,r3.*
.*xor_sub	r4,r1,2,r3.*
.*xor_cmp	r4,r1,r2,r3.*
.*xor_cmp	r4,r1,2,r3.*
.*xor_mov	r4,r1,r2,r3.*
.*xor_mov	r4,r1,2,r3.*
.*xor_asr	r4,r1,r2,r3.*
.*xor_asr	r4,r1,2,r3.*
.*xor_lsr	r4,r1,r2,r3.*
.*xor_lsr	r4,r1,2,r3.*
.*xor_asl	r4,r1,r2,r3.*
.*xor_asl	r4,r1,2,r3.*
.*or_add	r4,r1,r2,r3.*
.*or_add	r4,r1,2,r3.*
.*or_sub	r4,r1,r2,r3.*
.*or_sub	r4,r1,2,r3.*
.*or_cmp	r4,r1,r2,r3.*
.*or_cmp	r4,r1,2,r3.*
.*or_mov	r4,r1,r2,r3.*
.*or_mov	r4,r1,2,r3.*
.*or_asr	r4,r1,r2,r3.*
.*or_asr	r4,r1,2,r3.*
.*or_lsr	r4,r1,r2,r3.*
.*or_lsr	r4,r1,2,r3.*
.*or_asl	r4,r1,r2,r3.*
.*or_asl	r4,r1,2,r3.*
.*$gdb_prompt $" { pass "dsp_logical tests" }
	-re "$gdb_prompt $" { fail "dsp_logical tests" }
	timeout { fail "(timeout) dsp_logical tests" }
    }
}

proc dsp_misc_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/42i dsp_misc_tests\n"
    gdb_expect {
	-re "
.*dmach_add	r4,r1,r2,r3.*
.*dmach_add	r4,r1,2,r3.*
.*dmach_sub	r4,r1,r2,r3.*
.*dmach_sub	r4,r1,2,r3.*
.*dmach_cmp	r4,r1,r2,r3.*
.*dmach_cmp	r4,r1,2,r3.*
.*dmach_mov	r4,r1,r2,r3.*
.*dmach_mov	r4,r1,2,r3.*
.*dmach_asr	r4,r1,r2,r3.*
.*dmach_asr	r4,r1,2,r3.*
.*dmach_lsr	r4,r1,r2,r3.*
.*dmach_lsr	r4,r1,2,r3.*
.*dmach_asl	r4,r1,r2,r3.*
.*dmach_asl	r4,r1,2,r3.*
.*swhw_add	r4,r1,r2,r3.*
.*swhw_add	r4,r1,2,r3.*
.*swhw_sub	r4,r1,r2,r3.*
.*swhw_sub	r4,r1,2,r3.*
.*swhw_cmp	r4,r1,r2,r3.*
.*swhw_cmp	r4,r1,2,r3.*
.*swhw_mov	r4,r1,r2,r3.*
.*swhw_mov	r4,r1,2,r3.*
.*swhw_asr	r4,r1,r2,r3.*
.*swhw_asr	r4,r1,2,r3.*
.*swhw_lsr	r4,r1,r2,r3.*
.*swhw_lsr	r4,r1,2,r3.*
.*swhw_asl	r4,r1,r2,r3.*
.*swhw_asl	r4,r1,2,r3.*
.*sat16_add	r4,r1,r2,r3.*
.*sat16_add	r4,r1,2,r3.*
.*sat16_sub	r4,r1,r2,r3.*
.*sat16_sub	r4,r1,2,r3.*
.*sat16_cmp	r4,r1,r2,r3.*
.*sat16_cmp	r4,r1,2,r3.*
.*sat16_mov	r4,r1,r2,r3.*
.*sat16_mov	r4,r1,2,r3.*
.*sat16_asr	r4,r1,r2,r3.*
.*sat16_asr	r4,r1,2,r3.*
.*sat16_lsr	r4,r1,r2,r3.*
.*sat16_lsr	r4,r1,2,r3.*
.*sat16_asl	r4,r1,r2,r3.*
.*sat16_asl	r4,r1,2,r3.*
.*$gdb_prompt $" { pass "dsp_misc tests" }
	-re "$gdb_prompt $" { fail "dsp_misc tests" }
	timeout { fail "(timeout) dsp_misc tests" }
    }
}

proc autoincrement_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/16i autoincrement_tests\n"
    gdb_expect {
	-re "
.*mov	\\(r1\\+\\),r2.*
.*mov	r3,\\(r4\\+\\).*
.*movhu	\\(r6\\+\\),r7.*
.*movhu	a0,\\(a1\\+\\).*
.*mov	\\(r1\\+,64\\),r2.*
.*mov	r1,\\(r2\\+,64\\).*
.*movhu	\\(r1\\+,64\\),r2.*
.*movhu	r1,\\(r2\\+,64\\).*
.*mov	\\(r1\\+,131055\\),r2.*
.*mov	r1,\\(r2\\+,131055\\).*
.*movhu	\\(r1\\+,131055\\),r2.*
.*movhu	r1,\\(r2\\+,131055\\).*
.*mov	\\(r1\\+,2147417596\\),r2.*
.*mov	r1,\\(r2\\+,2147417596\\).*
.*movhu	\\(r1\\+,2147417596\\),r2.*
.*movhu	r1,\\(r2\\+,2147417596\\).*
.*$gdb_prompt $" { pass "autoincrement tests" }
	-re "$gdb_prompt $" { fail "autoincrement tests" }
	timeout { fail "(timeout) autoincrement tests" }
    }
}

proc dsp_autoincrement_tests { } {
    global gdb_prompt
    global hex
    global decimal

    send_gdb "x/11i dsp_autoincrement_tests\n"
    gdb_expect {
	-re "
.*mov_llt	\\(r1\\+,4\\),r2.*
.*mov_lgt	\\(r1\\+,4\\),r2.*
.*mov_lge	\\(r1\\+,4\\),r2.*
.*mov_lle	\\(r1\\+,4\\),r2.*
.*mov_lcs	\\(r1\\+,4\\),r2.*
.*mov_lhi	\\(r1\\+,4\\),r2.*
.*mov_lcc	\\(r1\\+,4\\),r2.*
.*mov_lls	\\(r1\\+,4\\),r2.*
.*mov_leq	\\(r1\\+,4\\),r2.*
.*mov_lne	\\(r1\\+,4\\),r2.*
.*mov_lra	\\(r1\\+,4\\),r2.*
.*$gdb_prompt $" { pass "autoincrement tests" }
	-re "$gdb_prompt $" { fail "autoincrement tests" }
	timeout { fail "(timeout) autoincrement tests" }
    }
}

# Start with a fresh gdb.

gdb_exit
gdb_start
gdb_reinitialize_dir $srcdir/$subdir
gdb_load $binfile

call_tests
movm_tests
misc_tests
mov_tests
ext_tests
add_tests
sub_tests
cmp_tests
logical_tests
shift_tests
muldiv_tests
movbu_tests
movhu_tests
mac_tests
bit_tests
dsp_add_tests
dsp_cmp_tests
dsp_sub_tests
dsp_mov_tests
dsp_logical_tests
autoincrement_tests
dsp_autoincrement_tests
