tccgen: Allow struct init from struct
[tinycc.git] / tests / arm-asm-testsuite.sh
blob61c5dadba4e680e735d3efaac7854f05f6507fd8
1 #!/bin/sh
3 set -e
5 # Note: "{r3}" is definitely different--but would complicate the assembler.
7 state="`mktemp -d`"
8 cat ../arm-tok.h | \
9 grep DEF_ASM | \
10 grep -v 'not useful' | \
11 grep -v '#define' | \
12 grep -v '/[*]' | \
13 grep -v 'DEF_ASM_CONDED_WITH_SUFFIX(x' | \
14 sed -e 's;^[ ]*DEF_ASM_CONDED_VFP_F32_F64[^(]*(\(.*\)).*$; DEF_ASM_CONDED(\1.f32)\
15 DEF_ASM_CONDED(\1.f64);g' | \
16 sed -e 's;^[ ]*DEF_ASM[^(]*(\(.*\)).*$;\1;g' -e 's;, ;.;g' | \
17 egrep -v '^((r|c|p|s|d)[0-9]+|fp|ip|sp|lr|pc|asl|apsr_nzcv|fpsid|fpscr|fpexc)$' | while read s
19 as_opts=""
20 if [ "${s#v}" != "${s}" ]
21 then
22 if grep -q "CONFIG_arm_vfp=yes" ../config.mak
23 then
24 as_opts="${as_opts} -mfpu=vfp"
25 else
26 echo "note: skipping VFP instruction: $s (because VFP is disabled)">&2
27 continue
30 ok=0
31 for args in "r3, r4, r5, r6" \
32 "r3, r4, r5" \
33 "r3, r4, r5, asl #7" \
34 "r3, r4, r5, lsl #7" \
35 "r3, r4, r5, asr #7" \
36 "r3, r4, r5, lsr #7" \
37 "r3, r4, r5, ror #7" \
38 "r3, r4, r5, rrx" \
39 "r3, r4, r5, asl r6" \
40 "r3, r4, r5, lsl r6" \
41 "r3, r4, r5, asr r6" \
42 "r3, r4, r5, lsr r6" \
43 "r3, r4, r5, ror r6" \
44 "r3, r4, #5, asl #7" \
45 "r3, r4, #5, lsl #7" \
46 "r3, r4, #5, asr #7" \
47 "r3, r4, #5, lsr #7" \
48 "r3, r4, #5, ror #7" \
49 "r3, r4, #5, rrx" \
50 "r3, #5, r4" \
51 "r3, #4, #8" \
52 "r3, r4, asl #5" \
53 "r3, r4, lsl #5" \
54 "r3, r4, asr #5" \
55 "r3, r4, lsr #5" \
56 "r3, r4, ror #5" \
57 "r3, r4, ror #8" \
58 "r3, r4, asl r5" \
59 "r3, r4, lsl r5" \
60 "r3, r4, asr r5" \
61 "r3, r4, lsr r5" \
62 "r3, r4, ror r5" \
63 "r3, r4, ror #8" \
64 "r3, r4, ror #16" \
65 "r3, r4, ror #24" \
66 "r3, r4, rrx" \
67 "r3, #4, asl #5" \
68 "r3, #4, lsl #5" \
69 "r3, #4, asr #5" \
70 "r3, #4, lsr #5" \
71 "r3, #4, ror #5" \
72 "r3, r4, rrx" \
73 "r3, r4" \
74 "r3" \
75 "{r3,r4,r5}" \
76 "{r3,r5,r4}" \
77 "r2!, {r3,r4,r5}" \
78 "r2!, {r3,r5,r4}" \
79 "r2, {r3,r4,r5}" \
80 "r2, {r3,r5,r4}" \
81 "r2, [r3, r4]" \
82 "r2, [r3, r4]!" \
83 "r2, [r3, -r4]" \
84 "r2, [r3, -r4]!" \
85 "r2, [r3], r4" \
86 "r2, [r3], -r4" \
87 "r2, [r3]" \
88 "r2, r3, [r4, lsl# 2]" \
89 "r2, [r3, r4, lsr# 1]" \
90 "r2, [r3, r4, lsr# 2]!" \
91 "r2, [r3, -r4, ror# 3]" \
92 "r2, [r3, -r4, lsl# 1]!" \
93 "r2, [r3], r4, lsl# 3" \
94 "r2, [r3], -r4, asr# 31" \
95 "r2, [r3], -r4, asl# 1" \
96 "r2, [r3], -r4, rrx" \
97 "r2, [r3]" \
98 "r2, r3, [r4]" \
99 "r2, [r3, #4]" \
100 "r2, [r3, #-4]" \
101 "r2, [r3, #0x45]" \
102 "r2, [r3, #-0x45]" \
103 "r2, r3, #4" \
104 "r2, r3, #-4" \
105 "p10, #7, c2, c0, c1, #4" \
106 "p10, #7, r2, c0, c1, #4" \
107 "p10, #0, c2, c0, c1, #4" \
108 "p10, #0, r2, c0, c1, #4" \
109 "r2, #4" \
110 "r2, #-4" \
111 "r2, #0xEFFF" \
112 "r3, #0x0000" \
113 "r4, #0x0201" \
114 "r4, #0xFFFFFF00" \
115 "r2, #-4" \
116 "p10, #7, c2, c0, c1, #4" \
117 "p10, #7, r2, c0, c1, #4" \
118 "#4" \
119 "#-4" \
120 "p5, c2, [r3]" \
121 "p5, c3, [r4]" \
122 "p5, c2, [r3, #4]" \
123 "p5, c2, [r3, #-4]" \
124 "p5, c2, [r3, #0x45]" \
125 "p5, c2, [r3, #-0x45]" \
126 "s2, [r3]" \
127 "s3, [r4]" \
128 "s2, [r3, #4]" \
129 "s2, [r3, #-4]" \
130 "s2, [r3, #0x45]" \
131 "s2, [r3, #-0x45]" \
132 "r1, {d3-d4}" \
133 "r1!, {d3-d4}" \
134 "r2, {d4-d15}" \
135 "r3!, {d4-d15}" \
136 "r3!, {d4}" \
137 "r2, {s4-s31}" \
138 "r3!, {s4}" \
139 "{d3-d4}" \
140 "{d4-d15}" \
141 "{d4}" \
142 "{s4-s31}" \
143 "{s4}" \
144 "s2, s3, s4" \
145 "s2, s3" \
146 "d2, d3, d4" \
147 "d2, d3" \
148 "s2, #0" \
149 "d2, #0" \
150 "s3, #0.0" \
151 "d3, #0.0" \
152 "s4, #-0.1796875" \
153 "d4, #0.1796875" \
154 "r2, r3, d1" \
155 "d1, r2, r3" \
156 "s1, r2" \
157 "r2, s1" \
158 "r2, fpexc" \
159 "r2, fpscr" \
160 "r2, fpsid" \
161 "apsr_nzcv, fpscr" \
162 "fpexc, r2" \
163 "fpscr, r2" \
164 "fpsid, r2" \
165 "s3, d4" \
166 "d4, s3" \
169 #echo ".syntax unified" > a.s
170 err="`mktemp --suffix=-stderr.log`"
171 as_object="${state}/as-$s $args.o"
172 tcc_object="${state}/tcc-$s $args.o"
173 expected="${state}/expected-$s $args"
174 got="${state}/got-$s $args"
175 if echo "$s $args" | "${CROSS_COMPILE}as" -mlittle-endian ${as_opts} -o "${as_object}" - 2>"${err}"
176 then
177 cat "${err}"
178 rm -f "${err}"
179 total_count=`expr $total_count + 1`
180 "${CROSS_COMPILE}objdump" -S "${as_object}" |grep "^[ ]*0:" >"${expected}"
182 #echo '__asm__("'"$s ${args}"'");' > "${csource}"
183 if echo '__asm__("'"$s ${args}"'");'| ${TCC} -o "${tcc_object}" -c -
184 then
185 "${CROSS_COMPILE}objdump" -S "${tcc_object}" |grep "^[ ]*0:" >"${got}"
186 if diff -u "${got}" "${expected}"
187 then
188 touch "${state}/ok-$s $args"
189 else
190 echo "warning: '$s $args' did not work in tcc (see above)">&2
192 else
193 rm -f "${tcc_object}"
194 echo "warning: '$s $args' did not work in tcc">&2
196 ok=1
197 else # GNU as can't do it either--so we don't care
198 rm -f "${as_object}"
200 rm -f "${err}"
201 done
202 if [ "${ok}" -eq "0" ]
203 then
204 echo "warning: $s could not be used.">&2
205 continue
207 done
209 successful_count="$(ls -1 "${state}/ok-"* |wc -l)"
210 total_count="$(ls -1 "${state}/as-"*.o |wc -l)"
211 echo "${successful_count} of ${total_count} tests succeeded.">&2
212 if [ "${successful_count}" -eq "${total_count}" ]
213 then
214 rm -rf "${state}"
215 exit 0
216 else
217 status=0
218 for s in "${state}/as-"*.o
220 test="$(basename "$s")"
221 test="${test%.o}"
222 test="${test#as-}"
223 t="${state}/ok-${test}"
224 if [ ! -f "$t" ]
225 then
226 case "${test}" in
227 "bl r3"|"b r3"|"mov r2, #0xEFFF"|"mov r4, #0x0201")
228 known_failure=" (known failure)"
230 "vmov.f32 r2, r3, d1"|"vmov.f32 d1, r2, r3") # GNU as bug
231 known_failure=" (known failure)"
234 known_failure=""
235 status=1
237 esac
238 echo "Failed test: ${test}${known_failure}">&2
240 done
241 rm -rf "${state}"
242 exit "${status}"