| # Copyright 2012 |
| # 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. |
| |
| # |
| # Some generic m68HC11 tests |
| # |
| if { ![istarget "m68hc1*-*-*"] |
| && ![istarget "m6811-*-*"] |
| && ![istarget "m6812-*-*"] } then { |
| return |
| } |
| |
| # Simple test for --print-opcodes (list of supported opcodes) |
| # We don't check the list result but just the syntax and the |
| # number it |
| proc gas_m68hc11_opcode_list { flags expect_count } { |
| global comp_output |
| |
| set testname "Opcode list generation \[$flags\]" |
| gas_run "x.s" "--print-opcodes $flags" "" |
| |
| set lines [split $comp_output "\n"] |
| set cnt [llength $lines] |
| verbose -log "Found $cnt opcodes" |
| if { $cnt == $expect_count } then { |
| pass $testname |
| } else { |
| fail $testname |
| } |
| } |
| |
| gas_m68hc11_opcode_list "-m68hc11" 149 |
| gas_m68hc11_opcode_list "-m68hc12" 192 |
| gas_m68hc11_opcode_list "-m68hcs12" 192 |
| gas_m68hc11_opcode_list "-mm9s12x" 266 |
| gas_m68hc11_opcode_list "-mm9s12xg" 74 |
| |
| |
| # Test for a message produced when assembling a file |
| proc gas_m68hc11_message { kind options line expect } { |
| global srcdir |
| global subdir |
| |
| regsub -all "\n" "$line: $expect" " " title |
| |
| # Make a file containing the instructions to assemble. |
| set fd [open "$srcdir/$subdir/tst-m68hc1x.s" "w"] |
| puts -nonewline $fd "$line" |
| close $fd |
| |
| verbose -log "Test: $title" |
| gas_start "tst-m68hc1x.s" "$options" |
| set ok 0 |
| while 1 { |
| expect { |
| -re ".*: Assembler messages:\n" { } |
| -re ".*1: $kind: $expect" { incr ok; break } |
| timeout { perror "timeout\n"; break } |
| eof { verbose "EOF from gas"; break } |
| } |
| } |
| #sleep 1 # Uncomment this line when using gcov |
| gas_finish |
| if { $ok > 0 } then { |
| pass $title |
| } else { |
| fail $title |
| } |
| catch "exec rm -f $srcdir/$subdir/tst-m68hc1x.s" |
| } |
| |
| # Test for an error message produced by gas |
| proc gas_m68hc11_error { options line expect } { |
| gas_m68hc11_message "Error" $options $line $expect |
| } |
| |
| # Test for a warning message produced by gas |
| proc gas_m68hc11_warning { options line expect } { |
| gas_m68hc11_message "Warning" $options $line $expect |
| } |
| |
| # ------------------ |
| # 68HC11 error tests |
| gas_m68hc11_error "-m68hc11" "puld\n" "Opcode .puld. is not recognized" |
| gas_m68hc11_error "" "ldab\n" "Invalid operand for .ldab." |
| gas_m68hc11_error "-m68hc11" "ldab 256,x\n" "Operand out of 8-bit range:.*256" |
| gas_m68hc11_error "-m68hc11" "ldab 257,y\n" "Operand out of 8-bit range:.*257" |
| gas_m68hc11_error "-m68hc11" "ldab -1,y\n" "Operand out of 8-bit range:.*-1" |
| gas_m68hc11_error "-m68hc11" "ldab bar,y\nbar=300" "value of 300 too large for field of 1 byte" |
| gas_m68hc11_error "" "jmp \#23\n" "Immediate operand is not allowed" |
| gas_m68hc11_error "-m68hc11" "ldab \[d,pc\]\n" "Indirect indexed addressing is not valid for 68HC11" |
| gas_m68hc11_error "" "ldab ,t\n" "Spurious .,. or bad indirect register" |
| gas_m68hc11_error "" "ldab 1,t\n" "Garbage at end of instruction:.*,t" |
| gas_m68hc11_error "" "ldab 1,,x\n" "Garbage at end of instruction:.*,x" |
| gas_m68hc11_error "-m68hc11" "ldab 1,+x\n" "Pre-increment mode is not valid" |
| gas_m68hc11_error "-m68hc11" "ldab 1,-x\n" "Pre-increment mode is not valid" |
| gas_m68hc11_error "-m68hc11" "ldab 1,x+\n" "Post-increment mode is not valid" |
| gas_m68hc11_error "-m68hc11" "ldab 1,x-\n" "Post-decrement mode is not valid" |
| gas_m68hc11_error "" "ldd \#65536\n" "Operand out of 16-bit range" |
| gas_m68hc11_error "--short-branchs" "bne 200\n" \ |
| "Operand out of range for a relative branch" |
| gas_m68hc11_error "" "bar\n" "Opcode .bar. is not recognized." |
| gas_m68hc11_error "--print-insn-syntax" "bne\n" \ |
| "Instruction formats for .bne..*" |
| #Check that 9s12x opcodes are rejected |
| gas_m68hc11_error "-m68hc11" "subx\n" "Opcode .subx. is not recognized" |
| gas_m68hc11_error "-m68hc11" "roly\n" "Opcode .roly. is not recognized" |
| |
| # ------------------ |
| # 68HC12 error tests |
| gas_m68hc11_error "-m68hc12" "ldab x,y\n" "Invalid accumulator register" |
| gas_m68hc11_error "-m68hc12" "ldab \[d,y\n" \ |
| "Missing .\]. to close indexed-indirect mode" |
| gas_m68hc11_error "-m68hc12" "ldab 0,\n" "Garbage at end of instruction: .,." |
| gas_m68hc11_error "-m68hc12" "ldab \[d\]\n" \ |
| "Missing second register or offset for indexed-indirect mode" |
| gas_m68hc11_error "-m68hc12" "ldab \[d x\]\n" \ |
| "Missing second register for indexed-indirect mode" |
| gas_m68hc11_error "-m68hc12" "ldab \[d d\]\n" \ |
| "Missing second register for indexed-indirect mode" |
| gas_m68hc11_error "-m68hc12" "ldab \[pc d\]\n" \ |
| "Missing second register for indexed-indirect mode" |
| gas_m68hc11_error "-m68hc12" "ldab 65536,x\n" \ |
| "Offset out of 16-bit range:" |
| gas_m68hc11_error "-m68hc12 -S" "ibeq d,500\n" \ |
| "Operand out of range for a relative branch" |
| gas_m68hc11_error "-m68hc12" "ibeq pc,3\n" \ |
| "Invalid register for dbcc/tbcc instruction" |
| gas_m68hc11_error "-m68hc12 -S" "ibeq pc,500\n" \ |
| "Invalid register for dbcc/tbcc instruction" |
| gas_m68hc11_error "-m68hc12" "orab 9,+x\n" \ |
| "Increment/decrement value is out of range" |
| gas_m68hc11_error "-m68hc12" "orab -9,x-\n" \ |
| "Increment/decrement value is out of range" |
| gas_m68hc11_error "-m68hc12" "orab -3,-pc\n" \ |
| "Invalid register for post/pre increment" |
| gas_m68hc11_error "-m68hc12" "trap \#0\n" "Trap id .0. is out of range" |
| gas_m68hc11_error "-m68hc12" "trap \#300\n" "Trap id .300. is out of range" |
| gas_m68hc11_error "-m68hc12" "trap \#bar\n" "The trap id must be a constant" |
| gas_m68hc11_error "-m68hc12" "sex x,d\n" \ |
| "Invalid source register for this instruction, use .tfr." |
| gas_m68hc11_error "-m68hc12" "tfr pc,a\n" "Invalid source register" |
| gas_m68hc11_error "-m68hc12" "movb 200,x,3,y\n" \ |
| "Offset out of 5-bit range for movw/movb insn: 200" |
| gas_m68hc11_error "-m68hc12" "movb 2,x,300,y\n" \ |
| "Offset out of 5-bit range for movw/movb insn: 300" |
| gas_m68hc11_error "-m68hc12" "movb 2,x,bar,y\nbar=300\n" \ |
| "Offset out of 5-bit range for movw/movb insn: 300" |
| gas_m68hc11_error "-m68hc12" "movb bar,y,2,x\nbar=300\n" \ |
| "Offset out of 5-bit range for movw/movb insn: 300" |
| gas_m68hc11_error "-m68hc12" "movb 200,pc,3,y\n" \ |
| "Offset out of 5-bit range for movw/movb insn: 200" |
| gas_m68hc11_error "-m68hc12" "movb 2,x,300,pc\n" \ |
| "Offset out of 5-bit range for movw/movb insn: 300" |
| gas_m68hc11_error "-m68hc12" "movb 2,x,bar,pc\nbar=300\n" \ |
| "Offset out of 5-bit range for movw/movb insn: 300" |
| gas_m68hc11_error "-m68hc12" "movb bar,pc,2,x\nbar=300\n" \ |
| "Offset out of 5-bit range for movw/movb insn: 300" |
| #check the 9s12x opcodes not supported |
| gas_m68hc11_error "-m68hc12" "subx\n" "Opcode .subx. is not recognized" |
| gas_m68hc11_error "-m68hc12" "roly\n" "Opcode .roly. is not recognized" |
| gas_m68hc11_error "-m68hc12" "sex d,x\n" \ |
| "Invalid source register for this instruction, use .tfr." |
| gas_m68hc11_error "-m68hc12" "sex d,y\n" \ |
| "Invalid source register for this instruction, use .tfr." |
| |
| #m9s12x tests |
| gas_m68hc11_error "-mm9s12x" "par r3\n" "Opcode .par. is not recognized" |
| gas_m68hc11_error "-mm9s12x" "csem #1\n" "Opcode .csem. is not recognized" |
| |
| #m9s12xg tests |
| gas_m68hc11_error "-mm9s12xg" "roly\n" "Opcode .roly. is not recognized" |
| gas_m68hc11_error "-mm9s12xg" "ldab #1\n" "Opcode .ldab. is not recognized" |
| |
| # ------------------ |
| # Specific commands |
| gas_m68hc11_warning "-m68hc11" ".mode \"bar\"\n" "Invalid mode: .bar." |
| gas_m68hc11_error "-m68hc11" ".relax 23\n" "bad .relax format" |
| gas_m68hc11_error "-m68hc11" ".relax bar-23\n" "bad .relax format" |
| gas_m68hc11_error "-m68hc11" ".far bar bar\n" "junk at end of line" |
| |
| run_dump_test insns |
| run_dump_test lbranch |
| run_dump_test all_insns |
| run_dump_test insns-dwarf2 |
| run_dump_test lbranch-dwarf2 |
| run_dump_test abi-m68hc11-16-64 |
| run_dump_test abi-m68hc11-16-32 |
| run_dump_test abi-m68hc11-32-64 |
| |
| # Compliance with Motorola Assembly Language Input Standard |
| run_dump_test malis |
| |
| # Some 68HC12 tests |
| run_dump_test opers12 |
| run_dump_test opers12-dwarf2 |
| run_dump_test branchs12 |
| run_dump_test insns12 |
| run_dump_test indexed12 |
| run_dump_test bug-1825 |
| run_dump_test movb |
| |
| # Some m9s12x tests |
| run_dump_test insns9s12x |
| run_dump_test 9s12x-exg-sex-tfr |
| run_dump_test 9s12x-mov |
| |
| # Some m9s12xg tests |
| run_dump_test insns9s12xg |
| |
| # Confirm hex prefixes |
| run_dump_test hexprefix |
| |