# Copyright 1999, 2000, 2002, 2007 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, write to the Free Software
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
# MA 02110-1301, USA.  

# Please email any bugs, comments, and/or additions to this file to:
# hp@axis.com

# Written by Axis Communications AB.

# --- This function copied from arc.exp and rewritten to fit CRIS ---
#
# Test an insn from a template .s/.d.
# The best way to create the .d file is to run the tests without it, let
# dejagnu crash, run as.new on the just built .s file, run objdump -dr on
# the result of that, copy the result into the .d file, and edit in the
# necessary patterns (@OC@, etc.).  Sounds complicated but it's easy.  The
# catch is that we assume a working assembler is used to build it.  That's
# obviously not entirely kosher, but once the .d file is created one can
# verify it's contents over time.
#
# Template patterns:
# @OC@ - placeholder for the opcode
# @OR@ - placeholder for extra replacement to distinguish similar
#	 testcases.
# @IR+????@ - placeholder for (e.g.) register-operand insn code
# @IM+????@ - placeholder for (e.g.) memory-operand insn code.

proc test_template_insn_reg_mem { args } {
    # tmpl opcode ircode imcode avoid_regex dname ircode0
    # imcode0 [regex replace OR_replace]
    global srcdir subdir objdir

    set tmpl [lindex $args 0]
    set opcode [lindex $args 1]
    set ircode [lindex $args 2]
    set imcode [lindex $args 3]
    set avoid_regex [lindex $args 4]
    set dname [lindex $args 5]
    set ircode0 [lindex $args 6]
    set imcode0 [lindex $args 7]

    if { [llength $args] >= 10 } {
	set replace_regex [lindex $args 8]
	set replacement [lindex $args 9]
    } else {
	set replace_regex ""
    }

    # Any extra replacements (like modifying the test name to something
    # else than the @OC@ modification).  Replaces occurences of @OR@.
    if { [llength $args] >= 11 } then {
	set extra_OR_replace [lindex $args 10]
    } else {
	set extra_OR_replace ""
    }

    # Get the parts that we will wedge into the insn.
    if [regexp "(.)(.)(.)" $imcode junk imcode3 imcode2 imcode1] {
	set imcode3 [expr "0x$imcode3" ]
    } else {
	regexp "(.)(.)" $imcode junk imcode2 imcode1
        set imcode3 0
    }
    set imcode1 [expr "0x$imcode1" ]
    set imcode2 [expr "0x$imcode2" ]

    if [regexp "(.)(.)(.)" $ircode junk ircode3 ircode2 ircode1] {
	set ircode3 [expr "0x$ircode3" ]
    } else {
	regexp "(.)(.)" $ircode junk ircode2 ircode1
	set ircode3 0
    }
    set ircode1 [expr "0x$ircode1" ]
    set ircode2 [expr "0x$ircode2" ]

    # To avoid fiddling with the generated .d-file, we have a
    # parameter saying what ircode, imcode to subtract.
    if [regexp "(.)(.)(.)" $imcode0 junk imcode03 imcode02 imcode01] {
	set imcode03 [expr "0x$imcode03" ]
    } else {
	regexp "(.)(.)" $imcode0 junk imcode02 imcode01
	set imcode03 0
    }
    set imcode01 [expr "0x$imcode01" ]
    set imcode02 [expr "0x$imcode02" ]

    if [regexp "(.)(.)(.)" $ircode0 junk ircode03 ircode02 ircode01] {
	set ircode03 [expr "0x$ircode03" ]
    } else {
	regexp "(.)(.)" $ircode0 junk ircode02 ircode01
	set ircode03 0
    }

    set ircode01 [expr "0x$ircode01" ]
    set ircode02 [expr "0x$ircode02" ]

    # The output template may be in another file than what the
    # source template is.
    if [string match $dname ""] {
	set dname $tmpl
    }

    # Change @OC@ in the template file to $opcode

    set in_fd [open $srcdir/$subdir/$tmpl.s r]
    set out_fd [open $objdir/$opcode-test.s w]
    # FIXME: check return codes

    while { [gets $in_fd line] >= 0 } {
	if { [string match "" "$avoid_regex"] \
		|| ![regexp "$avoid_regex" $line] } {
	 
	    # verbose "Keeping $line for $opcode"

	    # If caller passed a replacement regex, use it.
	    if ![string match "" "$replace_regex"] {
		# verbose "Replacing $line with ..."
		regsub $replace_regex $line $replacement line
		# verbose "... $line"
	    }
	    regsub "@OC@" $line $opcode line

	    puts $out_fd $line
	} else {
	    # verbose "Skipping $line for $opcode"
	}
    }

    close $in_fd
    close $out_fd

    # Create output template.

    set in_fd [open $srcdir/$subdir/$dname.d r]
    set out_fd [open $objdir/$opcode-test.d w]
    # FIXME: check return codes

    while { [gets $in_fd line] >= 0 } {
	regsub "@OC@" $line $opcode line
	#send_user "$line\n"

	regsub "@OR@" $line $extra_OR_replace line

	if [string match "*@IM+????@*" $line] {
	    # Insert the memory opcode.  imcode2 occupies the high four bits
	    # of the first (presented as leftmost) byte of the
	    # IC parameter, and imcode1 the low four bits of the second
	    # (rightmost) byte.
	    regexp "^(.*)@IM\\+(.)(.)(.)(.)@(.*)$" \
		    $line junk leftpart n1 n2 n3 n4 rightpart
	    # verbose "IM $n1 $n2 $n3 $n4 ($imcode1 $imcode2 $imcode3 $imcode01 $imcode02 $imcode03)"

	    set n1 [expr 0x$n1 - $imcode01 ]
	    set n3 [expr 0x$n3 - $imcode03 ]
	    set n4 [expr 0x$n4 - $imcode02 ]

	    set n [expr ($imcode1 << 12) + ($n1 << 12) + (0x$n2 << 8) \
		    + ($n3 << 4) + ($imcode3 << 4) + $n4 + $imcode2 ]
	    set n [format "%04x" $n]
	    puts $out_fd "$leftpart$n$rightpart"
	} elseif [string match "*@IR+????@*" $line] {
	    # As IM, but use the register opcode.
	    regexp "^(.*)@IR\\+(.)(.)(.)(.)@(.*)$" \
		    $line junk leftpart n1 n2 n3 n4 rightpart
	    # verbose "IR $n1 $n2 $n3 $n4 ($ircode1 $ircode2 $ircode3 $ircode01 $ircode02 $ircode03)"

	    set n1 [expr 0x$n1 - $ircode01 ]
	    set n3 [expr 0x$n3 - $ircode03 ]
	    set n4 [expr 0x$n4 - $ircode02 ]

	    set n [expr ($ircode1 << 12) + ($n1 << 12) + (0x$n2 << 8) \
		    + ($n3 << 4) + ($ircode3 << 4) + $n4 + $ircode2 ]
	    set n [format "%04x" $n]
	    puts $out_fd "$leftpart$n$rightpart"
	} else {
	    puts $out_fd $line
	}
    }

    close $in_fd
    close $out_fd

    # Finally, run the test.

    run_dump_test $objdir/$opcode-test

    # "make clean" won't delete these, so for now we must.
    catch "exec rm -f $objdir/$opcode-test.s $objdir/$opcode-test.d"
}
# --- End of arc.exp borrow ---

proc test_template_insn_reg { args } {
# tmpl opcode ircode avoid_regex dname ircode0 [regex replace OR_replace]
    if { [llength $args] == 6 } {
	test_template_insn_reg_mem [lindex $args 0] [lindex $args 1] \
		[lindex $args 2] 00 [lindex $args 3] [lindex $args 4] \
		[lindex $args 5] 00
    } elseif { [llength $args] == 9 } {
	test_template_insn_reg_mem [lindex $args 0] [lindex $args 1] \
		[lindex $args 2] 00 [lindex $args 3] [lindex $args 4] \
		[lindex $args 5] 00 [lindex $args 6] [lindex $args 7] \
		[lindex $args 8]
    } else {
	test_template_insn_reg_mem [lindex $args 0] [lindex $args 1] \
		[lindex $args 2] 00 [lindex $args 3] [lindex $args 4] \
		[lindex $args 5] 00 [lindex $args 6] [lindex $args 7]
    }
}

# For insn with only memory operands.
proc test_template_insn_mem { args } {
# tmpl opcode imcode avoid_regex dname imcode0 [regex replace]
    if { [llength $args] == 6 } {
	test_template_insn_reg_mem [lindex $args 0] [lindex $args 1] 00 \
		[lindex $args 2] [lindex $args 3] [lindex $args 4] 00 \
		[lindex $args 5]
    } else {
	test_template_insn_reg_mem [lindex $args 0] [lindex $args 1] 00 \
		[lindex $args 2] [lindex $args 3] [lindex $args 4] 00 \
		[lindex $args 5] [lindex $args 6] [lindex $args 7]
    }
}

# For insn without substitutions in the output pattern.
proc test_template_insn_single { tmpl opcode avoid_regex dname } {
    test_template_insn_reg_mem $tmpl $opcode 00 00 "$avoid_regex" $dname 00 00
}

# For iteration over special registers.  Spec reg name in "regname",
# number in "regno".  Type (size) in "regtype".	 Size-patterns to avoid
# in input_avoid.
proc to_sreg { regname regno regtype input_avoid } {
    test_template_insn_reg_mem binop move \
	    [format "%0x63" $regno] [format "%0xa3" $regno] \
	    ",r\[0-9\]+,r\[0-9\]|@OC@\[^\\.\]|$input_avoid" \
	    "x-to-$regtype-sreg" 063 0a3 \
	    "@OC@\[^ \]+ (.*),r\[0-9\]+" [format "@OC@ \\1,%s" $regname] \
	    $regname
}

# As to_sreg, but using unop, since we don't need to test constants.
proc sreg_to { regname regno regtype input_avoid } {
    test_template_insn_reg_mem unop move \
	    [format "%0x67" $regno] [format "%0xa7" $regno] \
	    "@OC@\\." "sreg-to-x" 067 0a7 \
	    "@OC@ (.*)" [format "@OC@ %s,\\1" $regname] $regname
}

# Replace registers in pushpop
proc push_pop { regname regno regtype input_avoid } {
    test_template_insn_reg_mem pushpop pushpop-sreg \
	    00 [format "%0x00" $regno] \
	    "$input_avoid" "pushpop-$regtype-sreg" 00 000 \
	    "(\\.\[bwd\])? ((\[^, \]*,)?)r\[0-9\]+((,.*)?)" " \\2$regname\\4" $regname
}

#
# Iterate over spec reg names and spec reg numbers.
#
proc do_spec_regs { inner_function spec_reg_list } {
    for { set i 0 } { $i < [llength $spec_reg_list] } { incr i } {
	set regname [lindex [lindex $spec_reg_list $i] 0]
	set regno [lindex [lindex $spec_reg_list $i] 1]

	set regtype [lindex [lindex $spec_reg_list $i] 2]
	set input_avoid	 [lindex [lindex $spec_reg_list $i] 3]

	# verbose "$regname $regno $regtype $input_avoid"
	$inner_function $regname $regno $regtype $input_avoid
    }
}

if [istarget cris-*-*] then {
    # Note that registers are missing, since the assembler will
    # rightfully emit errors for registers that are not in current
    # silicon.  Those are currently p2 and p3.
    # Note the special for dcr1, since it has different size for
    # different silicon, which matters for assembling and displaying
    # "immediate constants".
    set spec_reg_list [list \
	    [list p0 0 "byte" "(@OC@|move)\\.\[wd\]" ] \
	    [list p1 1 "byte" "(@OC@|move)\\.\[wd\]" ] \
	    [list vr 1 "byte" "(@OC@|move)\\.\[wd\]" ] \
	    [list p4 4 "word" "(@OC@|move)\\.\[bd\]" ] \
	    [list p5 5 "word" "(@OC@|move)\\.\[bd\]" ] \
	    [list ccr 5 "word" "(@OC@|move)\\.\[bd\]" ] \
	    [list p6 6 "word" "(@OC@|move)\\.\[bd\]" ] \
	    [list dcr0 6 "word" "(@OC@|move)\\.\[bd\]" ] \
	    [list p7 7 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list dcr1 7 "dcr1" "(@OC@|move)\\.\[bd\]" ] \
	    [list p8 8 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list p9 9 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list ibr 9 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list p10 10 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list irp 10 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list p11 11 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list srp 11 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list p12 12 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list bar 12 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list dtp0 12 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list p13 13 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list dccr 13 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list dtp1 13 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list p14 14 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list brp 14 "dword" "(@OC@|move)\\.\[bw\]" ] \
	    [list p15 15 "dword" "(@OC@|move)\\.\[bw\]" ]]

    # Test basic instructions.  Note that this will actually
    # test both the assembler and the disassembler functionality.
    #untested ".weak reduction"
    #untested "Old regressions"
    #untested "LX"
    #untested "case recognition (disassembler)"
    #untested "disassembling special regs"
    #untested "disassembling unimplemented special regs"

    # *PLEASE* make new "simple" run_dump_test-tests match "rd-*.d", so
    # they will be picked up automatically through this construct.  This
    # so you don't need to change cris.exp.  (As perhaps should have been
    # originally done for cases below, but which is not worth fixing now.)
    set rd_test_list [lsort [glob -nocomplain $srcdir/$subdir/rd-*.d]]
    for { set i 0 } { $i < [llength $rd_test_list] } { incr i } {
	# We need to strip the ".d", but can leave the dirname.
	verbose [file rootname [lindex $rd_test_list $i]]
	run_dump_test [file rootname [lindex $rd_test_list $i]]
    }

    # Broken word handling got erroneously triggers for this and
    # got out-of-bounds errors.
    # FIXME:  Check closer that this gets the expected results and fix
    # the general use of difference-expressions in binop.s and elsewhere.
    gas_test "binop-segref.s" "" "" "False broken words"

    # Really orthogonal instructions.
    test_template_insn_reg_mem binop add 60 a0 "@OC@\[^\\.\]" "" 60 a0
    test_template_insn_reg_mem binop sub 68 a8 "@OC@\[^\\.\]" "" 60 a0
    test_template_insn_reg_mem binop bound 5c 9c "@OC@\[^\\.\]" "" 60 a0
    test_template_insn_reg_mem binop and 70 b0 "@OC@\[^\\.\]" "" 60 a0
    test_template_insn_reg_mem binop or 74 b4 "@OC@\[^\\.\]" "" 60 a0

    # Unary (two-operand) insns, otherwise as above.
    test_template_insn_reg_mem binop cmp 6c ac \
	    ",r\[0-9\]+,r\[0-9\]|@OC@\[^\\.\]" "binop-cmpmove" 64 a4
    # This is of course only the move-to-register one.
    test_template_insn_reg_mem binop move 64 a4 \
	    ",r\[0-9\]+,r\[0-9\]|@OC@\[^\\.\]" "binop-cmpmove" 64 a4

    # No dword size - operations with sign- or zero-extend on
    # the mem or reg operand.
    test_template_insn_reg_mem binop addu 40 80 \
	    "@\\.d|@OC@\[^\\.\]" "binop-extx" 40 80
    test_template_insn_reg_mem binop adds 42 82 \
	    "@\\.d|@OC@\[^\\.\]" "binop-extx" 40 80
    test_template_insn_reg_mem binop subu 48 88 \
	    "@\\.d|@OC@\[^\\.\]" "binop-extx" 40 80
    test_template_insn_reg_mem binop subs 4a 8a \
	    "@\\.d|@OC@\[^\\.\]" "binop-extx" 40 80

    # The two constraints above combined, and no reg-to-reg -
    # cmps, cmpu, movs, movu.  We have to test reg-to-reg
    # separately for movs and movu.
    test_template_insn_mem binop movs 86 \
	    "r\[0-9\]+,r\[0-9\]+|@\\.d|@OC@\[^\\.\]" "binop-cmpmovx" 84
    test_template_insn_mem binop movu 84 \
	    "r\[0-9\]+,r\[0-9\]+|@\\.d|@OC@\[^\\.\]" "binop-cmpmovx" 84
    test_template_insn_mem binop cmps 8e \
	    "r\[0-9\]+,r\[0-9\]+|@\\.d|@OC@\[^\\.\]" "binop-cmpmovx" 84
    test_template_insn_mem binop cmpu 8c \
	    "r\[0-9\]+,r\[0-9\]+|@\\.d|@OC@\[^\\.\]" "binop-cmpmovx" 84

    # Reg-to-memory.  FIXME: Perhaps we should use unop.s for
    # everything, and insert registers (including special
    # registers) for all reg-to-mem and mem-to-reg insn tests.
    test_template_insn_mem binop move.b bc "@OC@\\." "reg-to-mem" bc
    test_template_insn_mem binop move.w bd "@OC@\\." "reg-to-mem" bc
    test_template_insn_mem binop move.d be "@OC@\\." "reg-to-mem" bc
    test_template_insn_mem binop movem bf "@OC@\\." "reg-to-mem" bc

    # Use the replace-regex functionality to reverse the
    # operands for movem.
    test_template_insn_mem binop movem 00 "@OC@\\." "movem-to-reg" 00 \
	    "@OC@ r(\[0-9\]+),\\\[(.*)\\\]" "@OC@ \[\\2\],r\\1"

    # The unary operations are too irregular to make a pattern
    # of the output.
    test_template_insn_single unop test "@OC@\[^\\.\]" "test"
    test_template_insn_single unop clear "@OC@\[^\\.\]" "clear"

    # Quick-operand tests.
    # 
    # Unsigned 5-bits: btstq, asrq, lslq, lsrq.
    test_template_insn_reg quick btstq 38 "s6|u6" "quick-u5" 38
    test_template_insn_reg quick asrq 3a "s6|u6" "quick-u5" 38
    test_template_insn_reg quick lslq 3c "s6|u6" "quick-u5" 38
    test_template_insn_reg quick lsrq 3e "s6|u6" "quick-u5" 38

    # Signed 6-bits: moveq, cmpq, andq, orq.
    test_template_insn_reg quick moveq 24 "u6" "quick-s6" 24
    test_template_insn_reg quick cmpq 2c "u6" "quick-s6" 24
    test_template_insn_reg quick andq 30 "u6" "quick-s6" 24
    test_template_insn_reg quick orq 34 "u6" "quick-s6" 24

    # Unsigned 6-bits:  addq, subq.
    test_template_insn_reg quick addq 20 "s6" "quick-u6" 20
    test_template_insn_reg quick subq 28 "s6" "quick-u6" 20

    # Register-to-register instructions, for each size.
    test_template_insn_reg regreg movu.b 44 "" "" 44
    test_template_insn_reg regreg movu.w 45 "" "" 44
    test_template_insn_reg regreg movs.b 46 "" "" 44
    test_template_insn_reg regreg movs.w 47 "" "" 44
    test_template_insn_reg regreg lsl.b 4c "" "" 44
    test_template_insn_reg regreg lsl.w 4d "" "" 44
    test_template_insn_reg regreg lsl.d 4e "" "" 44
    test_template_insn_reg regreg neg.b 58 "" "" 44
    test_template_insn_reg regreg neg.w 59 "" "" 44
    test_template_insn_reg regreg neg.d 5a "" "" 44
    test_template_insn_reg regreg asr.b 78 "" "" 44
    test_template_insn_reg regreg asr.w 79 "" "" 44
    test_template_insn_reg regreg asr.d 7a "" "" 44
    test_template_insn_reg regreg lsr.b 7c "" "" 44
    test_template_insn_reg regreg lsr.w 7d "" "" 44
    test_template_insn_reg regreg lsr.d 7e "" "" 44
    test_template_insn_reg regreg btst 4f "" "" 44
    test_template_insn_reg regreg abs 6b "" "" 44
    test_template_insn_reg regreg dstep 6f "" "" 44
    test_template_insn_reg regreg xor 7b "" "" 44
    test_template_insn_reg regreg mstep 7f "" "" 44

    # The various incarnations of the swap(n) insn.
    set nwbr_list [list [list "not" 877] \
	    [list "swapw" 477] \
	    [list "swapnw" c77] \
	    [list "swapb" 277] \
	    [list "swapnb" a77] \
	    [list "swapwb" 677] \
	    [list "swapnwb" e77] \
	    [list "swapr" 177] \
	    [list "swapnr" 977] \
	    [list "swapwr" 577] \
	    [list "swapnwr" d77] \
	    [list "swapbr" 377] \
	    [list "swapnbr" b77] \
	    [list "swapwbr" 777] \
	    [list "swapnwbr" f77]]

    for { set i 0 } { $i < [llength $nwbr_list] } { incr i } {
	set name [lindex [lindex $nwbr_list $i] 0]
	set number [lindex [lindex $nwbr_list $i] 1]

	test_template_insn_reg regreg $name $number "" "oneop-type" 877 \
		",r\[0-9]+" "" $name
    }

    # And one extra for the one that is canonicalized as "not".
    test_template_insn_reg regreg swapn 877 "" "oneop-type" 877 \
	    ",r\[0-9]+" "" not

    # And take the opportunity to make sure that the assembler
    # recognizes StUDlYCaPs.
    test_template_insn_reg regreg SWAPN 877 "" "oneop-type" 877 \
	    ",r\[0-9]+" "" not
    test_template_insn_reg regreg Swapn 877 "" "oneop-type" 877 \
	    ",r\[0-9]+" "" not
    test_template_insn_reg regreg sWApN 877 "" "oneop-type" 877 \
	    ",r\[0-9]+" "" not

    # Fixed-size unary memory instructions.
    test_template_insn_mem unop jsr b93 "@OC@\\." "jump-type" b93
    test_template_insn_mem unop jump 093 "@OC@\\." "jump-type" b93
    test_template_insn_mem unop jir a93 "@OC@\\." "jump-type" b93

    # Non-templated tests.
    run_dump_test "ccr"
    run_dump_test "scc"
    run_dump_test "pushpop"
    run_dump_test "prefix"
    run_dump_test "unimplemented"
    run_dump_test "return"
    run_dump_test "branch"
    run_dump_test "separator"
    run_dump_test "diffexp-ovwr"
    run_dump_test "continue"
    run_dump_test "nosep"
    run_dump_test "labfloat"
    run_dump_test "bork"

    # This seems like a generic expression evaluation problem.
    setup_xfail "cris-*-*"
    run_dump_test "shexpr-1"

    # The "@" will be erroneously interpreted as a line-separator in a
    # macro here-label marker: "\@".
    setup_xfail "cris-*-*"
    run_dump_test "macroat"

    # "\x20a" will be recognized as "\n" rather than " a"
    setup_xfail "cris-*-*"
    run_dump_test "string-1"
    # Same as above, but removed the failing case to make sure the rest
    # still works.
    run_dump_test "string-2"

    # Usable (non-redundant) and refreshed bits from the old, manual,
    # test suite.
    run_dump_test "brokw-1"
    run_dump_test "brokw-2"
    run_dump_test "brokw-3"
    run_dump_test "fragtest"

    # Addi is too irregular to bother applying templates to.
    run_dump_test "addi"

    # Test {mem (including constants), reg}-to/from-spec-reg.
    do_spec_regs to_sreg $spec_reg_list
    do_spec_regs sreg_to $spec_reg_list
    do_spec_regs push_pop $spec_reg_list

    # Additional insns for CRIS v3:
    run_dump_test "break"
    test_template_insn_reg regreg lz 73 "" "" 44

    # Additional insns for CRIS v8 (also the swapxxx insns other than "not" above).
    test_template_insn_mem unop jirc 293 "@OC@\\." "jump-type" b93
    test_template_insn_mem unop jsrc 393 "@OC@\\." "jump-type" b93
    test_template_insn_mem unop jbrc 693 "@OC@\\." "jump-type" b93

    # Additional insns for CRIS v10:
    test_template_insn_reg regreg mulu.b 90 "" "" 44
    test_template_insn_reg regreg mulu.w 91 "" "" 44
    test_template_insn_reg regreg mulu.d 92 "" "" 44
    test_template_insn_reg regreg muls.b d0 "" "" 44
    test_template_insn_reg regreg muls.w d1 "" "" 44
    test_template_insn_reg regreg muls.d d2 "" "" 44
    test_template_insn_mem unop sbfs 3b7 "@OC@\\.| r\[0-9\]+$" "unop-mem" 3b7
    test_template_insn_mem unop rbf 3b3 "@OC@\\.| r\[0-9\]+$" "unop-mem" 3b7
    test_template_insn_mem unop jmpu 893 "@OC@\\.| r\[0-9\]+$" "unop-mem" 3b7

    # Some dg-tests, which seems the easiest way to test error
    # cases.  Keeping it here at the end avoids getting a
    # "Tcl_RegisterChannel: duplicate channel names" error, and
    # I don't see a cause to put this in a separate file.  Hey,
    # isn't dg-finish supposed to make things (like this case)
    # fine?
    load_lib gas-dg.exp
    dg-init
    dg-runtest [lsort [glob -nocomplain $srcdir/$subdir/*-err-*.s $srcdir/$subdir/*-warn-*.s]] "" ""
    dg-finish
}
