⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 arc.exp

📁 Linux下嵌入式开发工具源代码
💻 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 + -