# ARC gas testsuite
# Test an insn from a template .s/.d.
-
-proc test_template_insn { tmpl opcode icode } {
+# 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 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
if [istarget arc*-*-*] then {
- test_template_insn math adc 9
- test_template_insn math add 8
- test_template_insn math and 12
- test_template_insn math bic 14
- test_template_insn math or 13
- test_template_insn math sbc 11
- test_template_insn math sub 10
- test_template_insn math xor 15
-
- test_template_insn alias mov 12
- test_template_insn alias rlc 9
- test_template_insn alias asl 8
+ 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 alias lsl 8
+# test_template_insn base alias lsl 8
- test_template_insn sshift asr 1
- test_template_insn sshift lsr 2
- test_template_insn sshift ror 3
- test_template_insn sshift rrc 4
+ 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 branch b 4
- test_template_insn branch bl 5
- test_template_insn branch lp 6
+ 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_special "ext" 3
-# test_special "sex" 3
+ 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 "ld"
# run_dump_test "lr"
# run_dump_test "nop"
# run_dump_test "st"
# run_dump_test "sr"
+ # Host extension instructions
+ test_template_insn host math mul64 20
+ test_template_insn host math mulu64 21
+
+ # Graphics extension instructions
+ test_template_insn graphics math mul64 20
+ test_template_insn graphics math mulu64 21
+ test_template_insn graphics math padc 25
+ test_template_insn graphics math padd 24
+ test_template_insn graphics math pand 28
+ test_template_insn graphics math psbc 27
+ test_template_insn graphics math psub 26
+ test_template_insn graphics alias pmov 28
+
+ # Audio extension instructions
+ test_template_insn audio math mac 24
+ test_template_insn audio math macu 25
+ test_template_insn audio math mac.s 26
+ test_template_insn audio math macu.s 27
+ test_template_insn audio math mul 28
+ test_template_insn audio math mulu 29
+ test_template_insn audio insn3 swap 9
+
}