1 |
205 |
julius |
#
|
2 |
|
|
# Some generic m68HC11 tests
|
3 |
|
|
#
|
4 |
|
|
if ![istarget "m68hc11-*-*"] then {
|
5 |
|
|
if ![istarget "m6811-*-*"] then {
|
6 |
|
|
if ![istarget "m68hc12-*-*"] then {
|
7 |
|
|
if ![istarget "m6812-*-*"] then {
|
8 |
|
|
return
|
9 |
|
|
}
|
10 |
|
|
}
|
11 |
|
|
}
|
12 |
|
|
}
|
13 |
|
|
|
14 |
|
|
# Simple test for --print-opcodes (list of supported opcodes)
|
15 |
|
|
# We don't check the list result but just the syntax and the
|
16 |
|
|
# number it
|
17 |
|
|
proc gas_m68hc11_opcode_list { flags expect_count } {
|
18 |
|
|
global comp_output
|
19 |
|
|
|
20 |
|
|
set testname "Opcode list generation \[$flags\]"
|
21 |
|
|
gas_run "x.s" "--print-opcodes $flags" ""
|
22 |
|
|
|
23 |
|
|
set lines [split $comp_output "\n"]
|
24 |
|
|
set cnt [llength $lines]
|
25 |
|
|
verbose -log "Found $cnt opcodes"
|
26 |
|
|
if { $cnt == $expect_count } then {
|
27 |
|
|
pass $testname
|
28 |
|
|
} else {
|
29 |
|
|
fail $testname
|
30 |
|
|
}
|
31 |
|
|
}
|
32 |
|
|
|
33 |
|
|
gas_m68hc11_opcode_list "-m68hc11" 149
|
34 |
|
|
gas_m68hc11_opcode_list "-m68hc12" 192
|
35 |
|
|
gas_m68hc11_opcode_list "-m68hcs12" 192
|
36 |
|
|
|
37 |
|
|
|
38 |
|
|
# Test for a message produced when assembling a file
|
39 |
|
|
proc gas_m68hc11_message { kind options line expect } {
|
40 |
|
|
global srcdir
|
41 |
|
|
global subdir
|
42 |
|
|
|
43 |
|
|
regsub -all "\n" "$line: $expect" " " title
|
44 |
|
|
|
45 |
|
|
# Make a file containing the instructions to assemble.
|
46 |
|
|
set fd [open "$srcdir/$subdir/tst-m68hc1x.s" "w"]
|
47 |
|
|
puts -nonewline $fd "$line"
|
48 |
|
|
close $fd
|
49 |
|
|
|
50 |
|
|
verbose -log "Test: $title"
|
51 |
|
|
gas_start "tst-m68hc1x.s" "$options"
|
52 |
|
|
set ok 0
|
53 |
|
|
while 1 {
|
54 |
|
|
expect {
|
55 |
|
|
-re ".*: Assembler messages:\n" { }
|
56 |
|
|
-re ".*1: $kind: $expect" { incr ok; break }
|
57 |
|
|
timeout { perror "timeout\n"; break }
|
58 |
|
|
eof { verbose "EOF from gas"; break }
|
59 |
|
|
}
|
60 |
|
|
}
|
61 |
|
|
#sleep 1 # Uncomment this line when using gcov
|
62 |
|
|
gas_finish
|
63 |
|
|
if { $ok > 0 } then {
|
64 |
|
|
pass $title
|
65 |
|
|
} else {
|
66 |
|
|
fail $title
|
67 |
|
|
}
|
68 |
|
|
catch "exec rm -f $srcdir/$subdir/tst-m68hc1x.s"
|
69 |
|
|
}
|
70 |
|
|
|
71 |
|
|
# Test for an error message produced by gas
|
72 |
|
|
proc gas_m68hc11_error { options line expect } {
|
73 |
|
|
gas_m68hc11_message "Error" $options $line $expect
|
74 |
|
|
}
|
75 |
|
|
|
76 |
|
|
# Test for a warning message produced by gas
|
77 |
|
|
proc gas_m68hc11_warning { options line expect } {
|
78 |
|
|
gas_m68hc11_message "Warning" $options $line $expect
|
79 |
|
|
}
|
80 |
|
|
|
81 |
|
|
# ------------------
|
82 |
|
|
# 68HC11 error tests
|
83 |
|
|
gas_m68hc11_error "" "puld\n" "Opcode .puld. is not recognized"
|
84 |
|
|
gas_m68hc11_error "" "ldab\n" "Invalid operand for .ldab."
|
85 |
|
|
gas_m68hc11_error "" "ldab 256,x\n" "Operand out of 8-bit range:.*256"
|
86 |
|
|
gas_m68hc11_error "" "ldab 257,y\n" "Operand out of 8-bit range:.*257"
|
87 |
|
|
gas_m68hc11_error "" "ldab -1,y\n" "Operand out of 8-bit range:.*-1"
|
88 |
|
|
gas_m68hc11_error "" "ldab bar,y\nbar=300" "value of 300 too large for field of 1 byte"
|
89 |
|
|
gas_m68hc11_error "" "jmp \#23\n" "Immediate operand is not allowed"
|
90 |
|
|
gas_m68hc11_error "" "ldab \[d,pc\]\n" "Indirect indexed addressing is not valid for 68HC11"
|
91 |
|
|
gas_m68hc11_error "" "ldab ,t\n" "Spurious .,. or bad indirect register"
|
92 |
|
|
gas_m68hc11_error "" "ldab 1,t\n" "Garbage at end of instruction:.*,t"
|
93 |
|
|
gas_m68hc11_error "" "ldab 1,,x\n" "Garbage at end of instruction:.*,x"
|
94 |
|
|
gas_m68hc11_error "" "ldab 1,+x\n" "Pre-increment mode is not valid"
|
95 |
|
|
gas_m68hc11_error "" "ldab 1,-x\n" "Pre-increment mode is not valid"
|
96 |
|
|
gas_m68hc11_error "" "ldab 1,x+\n" "Post-increment mode is not valid"
|
97 |
|
|
gas_m68hc11_error "" "ldab 1,x-\n" "Post-decrement mode is not valid"
|
98 |
|
|
gas_m68hc11_error "" "ldd \#65536\n" "Operand out of 16-bit range"
|
99 |
|
|
gas_m68hc11_error "--short-branchs" "bne 200\n" \
|
100 |
|
|
"Operand out of range for a relative branch"
|
101 |
|
|
gas_m68hc11_error "" "bar\n" "Opcode .bar. is not recognized."
|
102 |
|
|
gas_m68hc11_error "--print-insn-syntax" "bne\n" \
|
103 |
|
|
"Instruction formats for .bne..*"
|
104 |
|
|
|
105 |
|
|
# ------------------
|
106 |
|
|
# 68HC12 error tests
|
107 |
|
|
gas_m68hc11_error "-m68hc12" "ldab x,y\n" "Invalid accumulator register"
|
108 |
|
|
gas_m68hc11_error "-m68hc12" "ldab \[d,y\n" \
|
109 |
|
|
"Missing .\]. to close indexed-indirect mode"
|
110 |
|
|
gas_m68hc11_error "-m68hc12" "ldab 0,\n" "Garbage at end of instruction: .,."
|
111 |
|
|
gas_m68hc11_error "-m68hc12" "ldab \[d\]\n" \
|
112 |
|
|
"Missing second register or offset for indexed-indirect mode"
|
113 |
|
|
gas_m68hc11_error "-m68hc12" "ldab \[d x\]\n" \
|
114 |
|
|
"Missing second register for indexed-indirect mode"
|
115 |
|
|
gas_m68hc11_error "-m68hc12" "ldab \[d d\]\n" \
|
116 |
|
|
"Missing second register for indexed-indirect mode"
|
117 |
|
|
gas_m68hc11_error "-m68hc12" "ldab \[pc d\]\n" \
|
118 |
|
|
"Missing second register for indexed-indirect mode"
|
119 |
|
|
gas_m68hc11_error "-m68hc12" "ldab 65536,x\n" \
|
120 |
|
|
"Offset out of 16-bit range:"
|
121 |
|
|
gas_m68hc11_error "-m68hc12 -S" "ibeq d,500\n" \
|
122 |
|
|
"Operand out of range for a relative branch"
|
123 |
|
|
gas_m68hc11_error "-m68hc12" "ibeq pc,3\n" \
|
124 |
|
|
"Invalid register for dbcc/tbcc instruction"
|
125 |
|
|
gas_m68hc11_error "-m68hc12 -S" "ibeq pc,500\n" \
|
126 |
|
|
"Invalid register for dbcc/tbcc instruction"
|
127 |
|
|
gas_m68hc11_error "-m68hc12" "orab 9,+x\n" \
|
128 |
|
|
"Increment/decrement value is out of range"
|
129 |
|
|
gas_m68hc11_error "-m68hc12" "orab -9,x-\n" \
|
130 |
|
|
"Increment/decrement value is out of range"
|
131 |
|
|
gas_m68hc11_error "-m68hc12" "orab -3,-pc\n" \
|
132 |
|
|
"Invalid register for post/pre increment"
|
133 |
|
|
gas_m68hc11_error "-m68hc12" "trap \#0\n" "Trap id .0. is out of range"
|
134 |
|
|
gas_m68hc11_error "-m68hc12" "trap \#300\n" "Trap id .300. is out of range"
|
135 |
|
|
gas_m68hc11_error "-m68hc12" "trap \#bar\n" "The trap id must be a constant"
|
136 |
|
|
gas_m68hc11_error "-m68hc12" "sex x,d\n" \
|
137 |
|
|
"Invalid source register for this instruction, use .tfr."
|
138 |
|
|
gas_m68hc11_error "-m68hc12" "tfr pc,a\n" "Invalid source register"
|
139 |
|
|
gas_m68hc11_error "-m68hc12" "movb 200,x,3,y\n" \
|
140 |
|
|
"Offset out of 5-bit range for movw/movb insn: 200"
|
141 |
|
|
gas_m68hc11_error "-m68hc12" "movb 2,x,300,y\n" \
|
142 |
|
|
"Offset out of 5-bit range for movw/movb insn: 300"
|
143 |
|
|
gas_m68hc11_error "-m68hc12" "movb 2,x,bar,y\nbar=300\n" \
|
144 |
|
|
"Offset out of 5-bit range for movw/movb insn: 300"
|
145 |
|
|
gas_m68hc11_error "-m68hc12" "movb bar,y,2,x\nbar=300\n" \
|
146 |
|
|
"Offset out of 5-bit range for movw/movb insn: 300"
|
147 |
|
|
gas_m68hc11_error "-m68hc12" "movb 200,pc,3,y\n" \
|
148 |
|
|
"Offset out of 5-bit range for movw/movb insn: 200"
|
149 |
|
|
gas_m68hc11_error "-m68hc12" "movb 2,x,300,pc\n" \
|
150 |
|
|
"Offset out of 5-bit range for movw/movb insn: 300"
|
151 |
|
|
gas_m68hc11_error "-m68hc12" "movb 2,x,bar,pc\nbar=300\n" \
|
152 |
|
|
"Offset out of 5-bit range for movw/movb insn: 300"
|
153 |
|
|
gas_m68hc11_error "-m68hc12" "movb bar,pc,2,x\nbar=300\n" \
|
154 |
|
|
"Offset out of 5-bit range for movw/movb insn: 300"
|
155 |
|
|
|
156 |
|
|
# ------------------
|
157 |
|
|
# Specific commands
|
158 |
|
|
gas_m68hc11_warning "" ".mode \"bar\"\n" "Invalid mode: .bar."
|
159 |
|
|
gas_m68hc11_error "" ".relax 23\n" "bad .relax format"
|
160 |
|
|
gas_m68hc11_error "" ".relax bar-23\n" "bad .relax format"
|
161 |
|
|
gas_m68hc11_error "" ".far bar bar\n" "junk at end of line"
|
162 |
|
|
|
163 |
|
|
|
164 |
|
|
run_dump_test insns
|
165 |
|
|
run_dump_test lbranch
|
166 |
|
|
run_dump_test all_insns
|
167 |
|
|
run_dump_test insns-dwarf2
|
168 |
|
|
run_dump_test lbranch-dwarf2
|
169 |
|
|
run_dump_test abi-m68hc11-16-64
|
170 |
|
|
run_dump_test abi-m68hc11-16-32
|
171 |
|
|
run_dump_test abi-m68hc11-32-64
|
172 |
|
|
|
173 |
|
|
# Compliance with Motorola Assembly Language Input Standard
|
174 |
|
|
run_dump_test malis
|
175 |
|
|
|
176 |
|
|
# Some 68HC12 tests
|
177 |
|
|
run_dump_test opers12
|
178 |
|
|
run_dump_test opers12-dwarf2
|
179 |
|
|
run_dump_test branchs12
|
180 |
|
|
run_dump_test insns12
|
181 |
|
|
run_dump_test indexed12
|
182 |
|
|
run_dump_test bug-1825
|
183 |
|
|
run_dump_test movb
|