# ARC gas testsuite

# 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
# @IC+?@ - place holder for the insn code
# @I3+??@ - place holder for the operation code of code 3 insns.

proc test_template_insn { cpu tmpl opcode icode } {
    global srcdir subdir objdir

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

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

    puts $out_fd "\t.cpu $cpu\n"
    while { [gets $in_fd line] >= 0 } {
	regsub "@OC@" $line $opcode line
	puts $out_fd $line
    }

    close $in_fd
    close $out_fd

    # Create output template.

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

    while { [gets $in_fd line] >= 0 } {
	regsub "@OC@" $line $opcode line
	#send_user "$line\n"
	if [string match "*@IC+?@*" $line] {
	    # Insert the opcode.  It occupies the top 5 bits.
	    regexp "^(.*)@IC\\+(.)@(.*)$" $line junk leftpart n rightpart
	    set n [expr ($icode << 3) + $n]
	    set n [format "%02x" $n]
	    puts $out_fd "$leftpart$n$rightpart"
	} elseif [string match "*@I3+??@*" $line] {
	    # Insert insn 3 code (register C field)
	    # b15=8/0, b8=1/0 (their respective hex values in the objdump)
	    regexp "^(.*)@I3\\+(.)(.)@(.*)$" $line junk leftpart b15 b8 rightpart
	    set n [expr ($icode << 1) + ($b15 << 4) + ($b8 << 0)]
	    set n [format "%02x" $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

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

# Run the tests.

if [istarget arc*-*-*] then {

    test_template_insn base math adc 9
    test_template_insn base math add 8
    test_template_insn base math and 12
    test_template_insn base math bic 14
    test_template_insn base math or 13
    test_template_insn base math sbc 11
    test_template_insn base math sub 10
    test_template_insn base math xor 15

    test_template_insn base alias mov 12
    test_template_insn base alias rlc 9
    test_template_insn base alias asl 8
# `lsl' gets dumped as `asl' so this must be tested elsewhere.
#   test_template_insn base alias lsl 8

    test_template_insn base sshift asr 1
    test_template_insn base sshift lsr 2
    test_template_insn base sshift ror 3
    test_template_insn base sshift rrc 4

    test_template_insn base branch b 4
    test_template_insn base branch bl 5
    test_template_insn base branch lp 6

    run_dump_test "j"

    test_template_insn base insn3 sexb 5
    test_template_insn base insn3 sexw 6
    test_template_insn base insn3 extb 7
    test_template_insn base insn3 extw 8

    run_dump_test "flag"
#    run_dump_test "nop"

    run_dump_test "ld"
    run_dump_test "st"

}
