📄 arc.exp
字号:
# 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"}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -