1 
2 /* How to compile:
3    gcc -O -g -Wall -mcpu=cortex-a8 -o testarmv6int testarmv6int.c
4 */
5 
6 #include <stdio.h>
7 
8 /* test macros to generate and output the result of a single instruction */
9 #define TESTINST2(instruction, RMval, RD, RM, carryin) \
10 { \
11 	unsigned int out; \
12 	unsigned int cpsr; \
13 \
14 	__asm__ volatile( \
15 		"movs %3,%3;" \
16 		"msrne cpsr_fs,#(1<<29);" \
17 		"msreq cpsr_fs,#0;" \
18 		"mov " #RM ",%2;" \
19                 /* set #RD to 0x55555555 so we can see which parts get overwritten */ \
20                 "mov " #RD ", #0x55" "\n\t" \
21                 "orr " #RD "," #RD "," #RD ", LSL #8" "\n\t" \
22                 "orr " #RD "," #RD "," #RD ", LSL #16" "\n\t" \
23 		instruction ";" \
24 		"mov %0," #RD ";" \
25 		"mrs %1,cpsr;" \
26 		: "=&r" (out), "=&r" (cpsr) \
27 		: "r" (RMval), "r" (carryin) \
28 		: #RD, #RM, "cc", "memory" \
29 	); \
30 	printf("%s :: rd 0x%08x rm 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
31 		instruction, out, RMval, \
32 		carryin ? 1 : 0, \
33 		cpsr & 0xff0f0000, \
34 		((1<<31) & cpsr) ? 'N' : ' ', \
35 		((1<<30) & cpsr) ? 'Z' : ' ', \
36 		((1<<29) & cpsr) ? 'C' : ' ', \
37 		((1<<28) & cpsr) ? 'V' : ' ' \
38 		); \
39 }
40 
41 #define TESTINST3(instruction, RMval, RNval, RD, RM, RN, carryin) \
42 { \
43 	unsigned int out; \
44 	unsigned int cpsr; \
45 \
46 	__asm__ volatile( \
47 		"movs %4,%4;" \
48 		"msrne cpsr_fs,#(1<<29);" \
49 		"msreq cpsr_fs,#0;" \
50 		"mov " #RM ",%2;" \
51 		"mov " #RN ",%3;" \
52 		instruction ";" \
53 		"mov %0," #RD ";" \
54 		"mrs %1,cpsr;" \
55 		: "=&r" (out), "=&r" (cpsr) \
56 		: "r" (RMval), "r" (RNval), "r" (carryin) \
57 		: #RD, #RM, #RN, "cc", "memory" \
58 	); \
59 	printf("%s :: rd 0x%08x rm 0x%08x, rn 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
60 		instruction, out, RMval, RNval, \
61 		carryin ? 1 : 0, \
62 		cpsr & 0xff0f0000, \
63 		((1<<31) & cpsr) ? 'N' : ' ', \
64 		((1<<30) & cpsr) ? 'Z' : ' ', \
65 		((1<<29) & cpsr) ? 'C' : ' ', \
66 		((1<<28) & cpsr) ? 'V' : ' ' \
67 		); \
68 }
69 
70 #define TESTINST4(instruction, RMval, RNval, RSval, RD, RM, RN, RS, carryin) \
71 { \
72 	unsigned int out; \
73 	unsigned int cpsr; \
74 \
75 	__asm__ volatile( \
76 		"movs %5,%5;" \
77 		"msrne cpsr_fs,#(1<<29);" \
78 		"msreq cpsr_fs,#0;" \
79 		"mov " #RM ",%2;" \
80 		"mov " #RN ",%3;" \
81 		"mov " #RS ",%4;" \
82 		instruction ";" \
83 		"mov %0," #RD ";" \
84 		"mrs %1,cpsr;" \
85 		: "=&r" (out), "=&r" (cpsr) \
86 		: "r" (RMval), "r" (RNval), "r" (RSval), "r" (carryin) \
87 		: #RD, #RM, #RN, #RS, "cc", "memory" \
88 	); \
89 	printf("%s :: rd 0x%08x rm 0x%08x, rn 0x%08x rs 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
90 		instruction, out, RMval, RNval, RSval, \
91 		carryin ? 1 : 0, \
92 		cpsr & 0xff0f0000, \
93 		((1<<31) & cpsr) ? 'N' : ' ', \
94 		((1<<30) & cpsr) ? 'Z' : ' ', \
95 		((1<<29) & cpsr) ? 'C' : ' ', \
96 		((1<<28) & cpsr) ? 'V' : ' ' \
97 		); \
98 }
99 
100 #define TESTINST4_2OUT(instruction, RDval, RD2val, RMval, RSval, RD, RD2, RM, RS, carryin) \
101 { \
102 	unsigned int out; \
103 	unsigned int out2; \
104 	unsigned int cpsr; \
105 \
106 	__asm__ volatile( \
107 		"movs %7,%7;" \
108 		"msrne cpsr_fs,#(1<<29);" \
109 		"msreq cpsr_fs,#0;" \
110 		"mov " #RD ",%3;" \
111 		"mov " #RD2 ",%4;" \
112 		"mov " #RM ",%5;" \
113 		"mov " #RS ",%6;" \
114 		instruction ";" \
115 		"mov %0," #RD ";" \
116 		"mov %1," #RD2 ";" \
117 		"mrs %2,cpsr;" \
118 		: "=&r" (out), "=&r" (out2), "=&r" (cpsr) \
119 		: "r" (RDval), "r" (RD2val), "r" (RMval), "r" (RSval), "r" (carryin) \
120 		: #RD, #RD2, #RM, #RS, "cc", "memory" \
121 	); \
122 	printf("%s :: rd 0x%08x rd2 0x%08x, rm 0x%08x rs 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
123 		instruction, out, out2, RMval, RSval, \
124 		carryin ? 1 : 0, \
125 		cpsr & 0xff0f0000, \
126 		((1<<31) & cpsr) ? 'N' : ' ', \
127 		((1<<30) & cpsr) ? 'Z' : ' ', \
128 		((1<<29) & cpsr) ? 'C' : ' ', \
129 		((1<<28) & cpsr) ? 'V' : ' ' \
130 		); \
131 }
132 
133 /* helpers */
134 #define TESTCARRY { int c = 0; for (c = 0; c < 2; c++) {
135 #define TESTCARRYEND }}
136 
137 
138 
139 
main(int argc,char ** argv)140 int main(int argc, char **argv)
141 {
142 
143 	printf("MOV\n");
144 	TESTINST2("mov  r0, r1", 1, r0, r1, 0);
145 	TESTINST2("cpy  r0, r1", 1, r0, r1, 0);
146 	TESTINST2("mov  r0, #0", 0, r0, r1, 0);
147 	TESTINST2("mov  r0, #1", 0, r0, r1, 0);
148 	TESTCARRY
149 	TESTINST2("movs r0, r1", 1, r0, r1, c);
150 	TESTINST2("movs r0, r1", 0, r0, r1, c);
151 	TESTINST2("movs r0, r1", 0x80000000, r0, r1, c);
152 	TESTINST2("movs r0, #0", 0, r0, r1, c);
153 	TESTINST2("movs r0, #1", 0, r0, r1, c);
154 	TESTCARRYEND
155 
156 	printf("MVN\n");
157 	TESTINST2("mvn  r0, r1", 1, r0, r1, 0);
158 	TESTCARRY
159 	TESTINST2("mvns r0, r1", 1, r0, r1, c);
160 	TESTINST2("mvns r0, r1", 0, r0, r1, c);
161 	TESTINST2("mvns r0, r1", 0x80000000, r0, r1, c);
162 	TESTCARRYEND
163 
164 	printf("ADD\n");
165 	TESTINST3("adds r0, r1, r2", 0, 0, r0, r1, r2, 0);
166 	TESTINST3("adds r0, r1, r2", 0, 1, r0, r1, r2, 0);
167 	TESTINST3("adds r0, r1, r2", 1, 0, r0, r1, r2, 0);
168 	TESTINST3("adds r0, r1, r2", 1, 1, r0, r1, r2, 0);
169 	TESTINST3("adds r0, r1, r2", 0, -1, r0, r1, r2, 0);
170 	TESTINST3("adds r0, r1, r2", 1, -1, r0, r1, r2, 0);
171 	TESTINST3("adds r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, 0);
172 	TESTINST3("adds r0, r1, r2", 0x80000000, -1, r0, r1, r2, 0);
173 	TESTINST3("adds r0, r1, r2", 0x80000000, 0, r0, r1, r2, 0);
174 
175 	printf("ADC\n");
176 	TESTINST3("adcs r0, r1, r2", 0, 0, r0, r1, r2, 0);
177 	TESTINST3("adcs r0, r1, r2", 0, 0, r0, r1, r2, 1);
178 
179 	printf("LSL\n");
180 	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
181 	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 1, r0, r1, r2, 0);
182 	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 2, r0, r1, r2, 0);
183 	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 31, r0, r1, r2, 0);
184 	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 32, r0, r1, r2, 0);
185 	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 33, r0, r1, r2, 0);
186 	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 63, r0, r1, r2, 0);
187 	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 64, r0, r1, r2, 0);
188 	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 255, r0, r1, r2, 0);
189 	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 256, r0, r1, r2, 0);
190 
191 	TESTINST3("lsl  r0, r1, r2", 0x1, 0, r0, r1, r2, 0);
192 	TESTINST3("lsl  r0, r1, r2", 0x1, 1, r0, r1, r2, 0);
193 	TESTINST3("lsl  r0, r1, r2", 0x1, 31, r0, r1, r2, 0);
194 	TESTINST3("lsl  r0, r1, r2", 0x2, 31, r0, r1, r2, 0);
195 
196 	printf("LSLS\n");
197 	TESTCARRY
198 	TESTINST3("lsls r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
199 	TESTINST3("lsls r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
200 	TESTINST3("lsls r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
201 	TESTINST3("lsls r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
202 	TESTINST3("lsls r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
203 	TESTINST3("lsls r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
204 	TESTINST3("lsls r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
205 	TESTINST3("lsls r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
206 	TESTINST3("lsls r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
207 	TESTINST3("lsls r0, r1, r2", 0xffffffff, 256, r0, r1, r2, c);
208 	TESTINST3("lsls r0, r1, r2", 0x1, 0, r0, r1, r2, c);
209 	TESTINST3("lsls r0, r1, r2", 0x1, 1, r0, r1, r2, c);
210 	TESTINST3("lsls r0, r1, r2", 0x1, 31, r0, r1, r2, c);
211 	TESTINST3("lsls r0, r1, r2", 0x2, 31, r0, r1, r2, c);
212 	TESTCARRYEND
213 
214 	printf("LSL immediate\n");
215 	TESTCARRY
216 	TESTINST2("lsl  r0, r1, #0", 0xffffffff, r0, r1, c);
217 	TESTINST2("lsl  r0, r1, #1", 0xffffffff, r0, r1, c);
218 	TESTINST2("lsl  r0, r1, #31", 0xffffffff, r0, r1, c);
219 	TESTINST2("lsl  r0, r1, #0", 0x1, r0, r1, c);
220 	TESTINST2("lsl  r0, r1, #1", 0x1, r0, r1, c);
221 	TESTINST2("lsl  r0, r1, #31", 0x1, r0, r1, c);
222 	TESTINST2("lsl  r0, r1, #31", 0x2, r0, r1, c);
223 	TESTCARRYEND
224 
225 	printf("LSLS immediate\n");
226 	TESTCARRY
227 	TESTINST2("lsls r0, r1, #0", 0xffffffff, r0, r1, c);
228 	TESTINST2("lsls r0, r1, #1", 0xffffffff, r0, r1, c);
229 	TESTINST2("lsls r0, r1, #31", 0xffffffff, r0, r1, c);
230 	TESTINST2("lsls r0, r1, #0", 0x1, r0, r1, c);
231 	TESTINST2("lsls r0, r1, #1", 0x1, r0, r1, c);
232 	TESTINST2("lsls r0, r1, #31", 0x1, r0, r1, c);
233 	TESTINST2("lsls r0, r1, #31", 0x2, r0, r1, c);
234 	TESTCARRYEND
235 
236 	printf("LSR\n");
237 	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
238 	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 1, r0, r1, r2, 0);
239 	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 2, r0, r1, r2, 0);
240 	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 31, r0, r1, r2, 0);
241 	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 32, r0, r1, r2, 0);
242 	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 33, r0, r1, r2, 0);
243 	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 63, r0, r1, r2, 0);
244 	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 64, r0, r1, r2, 0);
245 	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 255, r0, r1, r2, 0);
246 	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 256, r0, r1, r2, 0);
247 
248 	printf("LSRS\n");
249 	TESTCARRY
250 	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
251 	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
252 	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
253 	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
254 	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
255 	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
256 	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
257 	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
258 	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
259 	TESTCARRYEND
260 
261 	printf("LSR immediate\n");
262 	TESTINST2("lsr  r0, r1, #0", 0xffffffff, r0, r1, 0);
263 	TESTINST2("lsr  r0, r1, #1", 0xffffffff, r0, r1, 0);
264 	TESTINST2("lsr  r0, r1, #31", 0xffffffff, r0, r1, 0);
265 	TESTINST2("lsr  r0, r1, #32", 0xffffffff, r0, r1, 0);
266 	TESTINST2("lsr  r0, r1, #16", 0x00010000, r0, r1, 0);
267 	TESTINST2("lsr  r0, r1, #17", 0x00010000, r0, r1, 0);
268 	TESTINST2("lsr  r0, r1, #18", 0x00010000, r0, r1, 0);
269 
270 	printf("LSRS immediate\n");
271 	TESTCARRY
272 	TESTINST2("lsrs r0, r1, #0", 0xffffffff, r0, r1, c);
273 	TESTINST2("lsrs r0, r1, #1", 0xffffffff, r0, r1, c);
274 	TESTINST2("lsrs r0, r1, #31", 0xffffffff, r0, r1, c);
275 	TESTINST2("lsrs r0, r1, #32", 0xffffffff, r0, r1, c);
276 	TESTINST2("lsrs r0, r1, #16", 0x00010000, r0, r1, c);
277 	TESTINST2("lsrs r0, r1, #17", 0x00010000, r0, r1, c);
278 	TESTINST2("lsrs r0, r1, #18", 0x00010000, r0, r1, c);
279 	TESTCARRYEND
280 
281 	printf("ASR\n");
282 	TESTCARRY
283 	TESTINST3("asr  r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
284 	TESTINST3("asr  r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
285 	TESTINST3("asr  r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
286 	TESTINST3("asr  r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
287 	TESTINST3("asr  r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
288 	TESTINST3("asr  r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
289 	TESTINST3("asr  r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
290 	TESTINST3("asr  r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
291 	TESTINST3("asr  r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
292 	TESTINST3("asr  r0, r1, r2", 0xffffffff, 256, r0, r1, r2, c);
293 	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 0, r0, r1, r2, c);
294 	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, c);
295 	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 2, r0, r1, r2, c);
296 	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 31, r0, r1, r2, c);
297 	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 32, r0, r1, r2, c);
298 	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 33, r0, r1, r2, c);
299 	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 63, r0, r1, r2, c);
300 	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 64, r0, r1, r2, c);
301 	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 255, r0, r1, r2, c);
302 	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 256, r0, r1, r2, c);
303 	TESTCARRYEND
304 
305 	printf("ASRS\n");
306 	TESTCARRY
307 	TESTINST3("asrs r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
308 	TESTINST3("asrs r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
309 	TESTINST3("asrs r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
310 	TESTINST3("asrs r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
311 	TESTINST3("asrs r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
312 	TESTINST3("asrs r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
313 	TESTINST3("asrs r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
314 	TESTINST3("asrs r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
315 	TESTINST3("asrs r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
316 	TESTINST3("asrs r0, r1, r2", 0xffffffff, 256, r0, r1, r2, c);
317 	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 0, r0, r1, r2, c);
318 	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, c);
319 	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 2, r0, r1, r2, c);
320 	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 31, r0, r1, r2, c);
321 	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 32, r0, r1, r2, c);
322 	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 33, r0, r1, r2, c);
323 	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 63, r0, r1, r2, c);
324 	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 64, r0, r1, r2, c);
325 	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 255, r0, r1, r2, c);
326 	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 256, r0, r1, r2, c);
327 	TESTCARRYEND
328 
329 	TESTCARRY
330 	TESTINST3("asrs r0, r1, r2", 0x8, 0, r0, r1, r2, c);
331 	TESTINST3("asrs r0, r1, r2", 0x8, 1, r0, r1, r2, c);
332 	TESTINST3("asrs r0, r1, r2", 0x8, 2, r0, r1, r2, c);
333 	TESTINST3("asrs r0, r1, r2", 0x8, 3, r0, r1, r2, c);
334 	TESTINST3("asrs r0, r1, r2", 0x8, 4, r0, r1, r2, c);
335 	TESTINST3("asrs r0, r1, r2", 0x8, 5, r0, r1, r2, c);
336 	TESTCARRYEND
337 
338 	TESTINST3("asrs r0, r1, r2", 0x80000001, 1, r0, r1, r2, 0);
339 	TESTINST3("asrs r0, r1, r2", 0x80000001, 2, r0, r1, r2, 0);
340 
341 	printf("ASR immediate\n");
342 	TESTINST2("asr  r0, r1, #0", 0xffffffff, r0, r1, 0);
343 	TESTINST2("asr  r0, r1, #1", 0xffffffff, r0, r1, 0);
344 	TESTINST2("asr  r0, r1, #31", 0xffffffff, r0, r1, 0);
345 	TESTINST2("asr  r0, r1, #32", 0xffffffff, r0, r1, 0);
346 	TESTINST2("asr  r0, r1, #0", 0x7fffffff, r0, r1, 0);
347 	TESTINST2("asr  r0, r1, #1", 0x7fffffff, r0, r1, 0);
348 	TESTINST2("asr  r0, r1, #31", 0x7fffffff, r0, r1, 0);
349 	TESTINST2("asr  r0, r1, #32", 0x7fffffff, r0, r1, 0);
350 	TESTINST2("asr  r0, r1, #16", 0x00010000, r0, r1, 0);
351 	TESTINST2("asr  r0, r1, #17", 0x00010000, r0, r1, 0);
352 	TESTINST2("asr  r0, r1, #18", 0x00010000, r0, r1, 0);
353 
354 	printf("ASRS immediate\n");
355 	TESTCARRY
356 	TESTINST2("asrs r0, r1, #0", 0xffffffff, r0, r1, c);
357 	TESTINST2("asrs r0, r1, #1", 0xffffffff, r0, r1, c);
358 	TESTINST2("asrs r0, r1, #31", 0xffffffff, r0, r1, c);
359 	TESTINST2("asrs r0, r1, #32", 0xffffffff, r0, r1, c);
360 	TESTINST2("asrs r0, r1, #0", 0x7fffffff, r0, r1, c);
361 	TESTINST2("asrs r0, r1, #1", 0x7fffffff, r0, r1, c);
362 	TESTINST2("asrs r0, r1, #31", 0x7fffffff, r0, r1, c);
363 	TESTINST2("asrs r0, r1, #32", 0x7fffffff, r0, r1, c);
364 	TESTINST2("asrs r0, r1, #16", 0x00010000, r0, r1, c);
365 	TESTINST2("asrs r0, r1, #17", 0x00010000, r0, r1, c);
366 	TESTINST2("asrs r0, r1, #18", 0x00010000, r0, r1, c);
367 	TESTCARRYEND
368 
369 	printf("ROR\n");
370 	TESTCARRY
371 	TESTINST3("ror  r0, r1, r2", 0x00088000, 0, r0, r1, r2, c);
372 	TESTINST3("ror  r0, r1, r2", 0x80088000, 1, r0, r1, r2, c);
373 	TESTINST3("ror  r0, r1, r2", 0x00088000, 1, r0, r1, r2, c);
374 	TESTINST3("ror  r0, r1, r2", 0x00088000, 2, r0, r1, r2, c);
375 	TESTINST3("ror  r0, r1, r2", 0x00088000, 31, r0, r1, r2, c);
376 	TESTINST3("ror  r0, r1, r2", 0x00088000, 32, r0, r1, r2, c);
377 	TESTINST3("ror  r0, r1, r2", 0x00088000, 33, r0, r1, r2, c);
378 	TESTINST3("ror  r0, r1, r2", 0x00088000, 63, r0, r1, r2, c);
379 	TESTINST3("ror  r0, r1, r2", 0x00088000, 64, r0, r1, r2, c);
380 	TESTINST3("ror  r0, r1, r2", 0x00088000, 255, r0, r1, r2, c);
381 	TESTINST3("ror  r0, r1, r2", 0x00088000, 256, r0, r1, r2, c);
382 	TESTINST3("ror  r0, r1, r2", 0x80088000, 256, r0, r1, r2, c);
383 	TESTINST3("ror  r0, r1, r2", 0x00088000, 257, r0, r1, r2, c);
384 	TESTCARRYEND
385 
386 	printf("RORS\n");
387 	TESTCARRY
388 	TESTINST3("rors r0, r1, r2", 0x00088000, 0, r0, r1, r2, c);
389 	TESTINST3("rors r0, r1, r2", 0x80088000, 0, r0, r1, r2, c);
390 	TESTINST3("rors r0, r1, r2", 0x00088000, 1, r0, r1, r2, c);
391 	TESTINST3("rors r0, r1, r2", 0x00088000, 2, r0, r1, r2, c);
392 	TESTINST3("rors r0, r1, r2", 0x00088000, 31, r0, r1, r2, c);
393 	TESTINST3("rors r0, r1, r2", 0x00088000, 32, r0, r1, r2, c);
394 	TESTINST3("rors r0, r1, r2", 0x00088000, 33, r0, r1, r2, c);
395 	TESTINST3("rors r0, r1, r2", 0x00088000, 63, r0, r1, r2, c);
396 	TESTINST3("rors r0, r1, r2", 0x00088000, 64, r0, r1, r2, c);
397 	TESTINST3("rors r0, r1, r2", 0x00088000, 255, r0, r1, r2, c);
398 	TESTINST3("rors r0, r1, r2", 0x00088000, 256, r0, r1, r2, c);
399 	TESTINST3("rors r0, r1, r2", 0x80088000, 256, r0, r1, r2, c);
400 	TESTINST3("rors r0, r1, r2", 0x00088000, 257, r0, r1, r2, c);
401 	TESTCARRYEND
402 
403 	printf("ROR immediate\n");
404 	TESTCARRY
405 	TESTINST2("ror  r0, r1, #0", 0x00088000, r0, r1, c);
406 	TESTINST2("ror  r0, r1, #1", 0x00088000, r0, r1, c);
407 	TESTINST2("ror  r0, r1, #31", 0x00088000, r0, r1, c);
408 	TESTINST2("ror  r0, r1, #16", 0x00010000, r0, r1, c);
409 	TESTINST2("ror  r0, r1, #17", 0x00010000, r0, r1, c);
410 	TESTINST2("ror  r0, r1, #18", 0x00010000, r0, r1, c);
411 	TESTCARRYEND
412 
413 	printf("RORS immediate\n");
414 	TESTCARRY
415 	TESTINST2("rors r0, r1, #0", 0x00088000, r0, r1, c);
416 	TESTINST2("rors r0, r1, #1", 0x00088000, r0, r1, c);
417 	TESTINST2("rors r0, r1, #31", 0x00088000, r0, r1, c);
418 	TESTINST2("rors r0, r1, #16", 0x00010000, r0, r1, c);
419 	TESTINST2("rors r0, r1, #17", 0x00010000, r0, r1, c);
420 	TESTINST2("rors r0, r1, #18", 0x00010000, r0, r1, c);
421 	TESTCARRYEND
422 
423 	printf("shift with barrel shifter\n");
424 	TESTCARRY
425 	TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
426 	TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
427 	TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
428 	TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
429 	TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
430 	TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
431 	TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
432 	TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
433 	TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
434 	TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
435 	TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
436 	TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
437 	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 0, r0, r1, r2, r3, c);
438 	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 1, r0, r1, r2, r3, c);
439 	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 31, r0, r1, r2, r3, c);
440 	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 32, r0, r1, r2, r3, c);
441 	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 255, r0, r1, r2, r3, c);
442 	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 256, r0, r1, r2, r3, c);
443 	TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
444 	TESTCARRYEND
445 
446 	TESTCARRY
447 	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 0, r0, r1, r2, r3, c);
448 	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 1, r0, r1, r2, r3, c);
449 	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 2, r0, r1, r2, r3, c);
450 	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 3, r0, r1, r2, r3, c);
451 	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 4, r0, r1, r2, r3, c);
452 	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 5, r0, r1, r2, r3, c);
453 	TESTCARRYEND
454 
455 	TESTCARRY
456 	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 0, r0, r1, r2, r3, c);
457 	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x80088000, 0, r0, r1, r2, r3, c);
458 	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 1, r0, r1, r2, r3, c);
459 	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 31, r0, r1, r2, r3, c);
460 	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 32, r0, r1, r2, r3, c);
461 	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 255, r0, r1, r2, r3, c);
462 	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 256, r0, r1, r2, r3, c);
463 	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x80088000, 256, r0, r1, r2, r3, c);
464 	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 257, r0, r1, r2, r3, c);
465 	TESTCARRYEND
466 
467 	TESTCARRY
468 	TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
469 	TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
470 	TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
471 	TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
472 	TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
473 	TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
474 	TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
475 	TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
476 	TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
477 	TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
478 	TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
479 	TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
480 
481 	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 0, r0, r1, r2, r3, c);
482 	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x80088000, 0, r0, r1, r2, r3, c);
483 	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 1, r0, r1, r2, r3, c);
484 	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 31, r0, r1, r2, r3, c);
485 	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 32, r0, r1, r2, r3, c);
486 	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 255, r0, r1, r2, r3, c);
487 	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 256, r0, r1, r2, r3, c);
488 	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x80088000, 256, r0, r1, r2, r3, c);
489 	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 257, r0, r1, r2, r3, c);
490 	TESTCARRYEND
491 
492 	TESTCARRY
493 	TESTINST4("adcs r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
494 	TESTINST4("adcs r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
495 	TESTINST4("adcs r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
496 	TESTINST4("adcs r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
497 	TESTCARRYEND
498 
499 	printf("MUL\n");
500 	TESTINST3("mul  r0, r1, r2", 0, 0, r0, r1, r2, 0);
501 	TESTINST3("mul  r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
502 	TESTINST3("mul  r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0);
503 	TESTINST3("mul  r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0);
504 	TESTINST3("mul  r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0);
505 	TESTINST3("mul  r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0);
506 
507 	printf("MULS\n");
508 	TESTINST3("muls r0, r1, r2", 0, 0, r0, r1, r2, 0);
509 	TESTINST3("muls r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
510 	TESTINST3("muls r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0);
511 	TESTINST3("muls r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0);
512 	TESTINST3("muls r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0);
513 	TESTINST3("muls r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0);
514 
515 	printf("MLA\n");
516 	TESTINST4("mla  r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0);
517 	TESTINST4("mla  r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0);
518 	TESTINST4("mla  r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0);
519 	TESTINST4("mla  r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0);
520 	TESTINST4("mla  r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0);
521 	TESTINST4("mla  r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0);
522 
523 	printf("MLAS\n");
524 	TESTINST4("mlas r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0);
525 	TESTINST4("mlas r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0);
526 	TESTINST4("mlas r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0);
527 	TESTINST4("mlas r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0);
528 	TESTINST4("mlas r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0);
529 	TESTINST4("mlas r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0);
530 
531 	printf("MLS\n");
532 	TESTINST4("mls  r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0);
533 	TESTINST4("mls  r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0);
534 	TESTINST4("mls  r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0);
535 	TESTINST4("mls  r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0);
536 	TESTINST4("mls  r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0);
537 	TESTINST4("mls  r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0);
538 
539 	printf("UMULL\n");
540 	TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
541 	TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
542 	TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
543 	TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
544 	TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
545 	TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
546 	TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
547 	TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
548 	TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
549 	TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
550 	TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
551 	TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
552 
553 	printf("SMULL\n");
554 	TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
555 	TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
556 	TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
557 	TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
558 	TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
559 	TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
560 	TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
561 	TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
562 	TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
563 	TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
564 	TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
565 	TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
566 
567 	printf("UMLAL\n");
568 	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
569 	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
570 	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
571 	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
572 	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
573 	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
574 	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
575 	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
576 	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
577 	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
578 	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
579 	TESTINST4_2OUT("umlals r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
580 	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
581 	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
582 	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
583 	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
584 	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
585 	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
586 
587 	printf("SMLAL\n");
588 	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
589 	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
590 	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
591 	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
592 	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
593 	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
594 	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
595 	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
596 	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
597 	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
598 	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
599 	TESTINST4_2OUT("smlals r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
600 	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
601 	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
602 	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
603 	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
604 	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
605 	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
606 
607 	printf("SMLALD\n");
608 	TESTINST4_2OUT("smlald  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
609 	TESTINST4_2OUT("smlald  r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
610 	TESTINST4_2OUT("smlald  r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
611 	TESTINST4_2OUT("smlald  r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
612 	TESTINST4_2OUT("smlald  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
613 	TESTINST4_2OUT("smlald  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
614 	TESTINST4_2OUT("smlald  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
615 	TESTINST4_2OUT("smlald  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
616 	TESTINST4_2OUT("smlald  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
617         TESTINST4_2OUT("smlald  r0, r1, r2, r3", 0xfff4ffff, 0xff8fff3f, 0xfffff6ff, 0xfff9ffff, r0, r1, r2, r3, 0);
618 	TESTINST4_2OUT("smlaldx r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
619 	TESTINST4_2OUT("smlaldx r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
620 	TESTINST4_2OUT("smlaldx r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
621 	TESTINST4_2OUT("smlaldx r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
622 	TESTINST4_2OUT("smlaldx r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
623 	TESTINST4_2OUT("smlaldx r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
624 	TESTINST4_2OUT("smlaldx r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
625 	TESTINST4_2OUT("smlaldx r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
626 	TESTINST4_2OUT("smlaldx r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
627        TESTINST4_2OUT("smlaldx r0, r1, r2, r3", 0xfff4ffff, 0xff8fff3f, 0xfffff6ff, 0xfff9ffff, r0, r1, r2, r3, 0);
628 
629 	printf("SMLSLD\n");
630 	TESTINST4_2OUT("smlsld  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
631 	TESTINST4_2OUT("smlsld  r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
632 	TESTINST4_2OUT("smlsld  r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
633 	TESTINST4_2OUT("smlsld  r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
634 	TESTINST4_2OUT("smlsld  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
635 	TESTINST4_2OUT("smlsld  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
636 	TESTINST4_2OUT("smlsld  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
637 	TESTINST4_2OUT("smlsld  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
638 	TESTINST4_2OUT("smlsld  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
639        TESTINST4_2OUT("smlsld  r0, r1, r2, r3", 0xfff4ffff, 0xff8fff3f, 0xfffff6ff, 0xfff9ffff, r0, r1, r2, r3, 0);
640 	TESTINST4_2OUT("smlsldx r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
641 	TESTINST4_2OUT("smlsldx r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
642 	TESTINST4_2OUT("smlsldx r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
643 	TESTINST4_2OUT("smlsldx r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
644 	TESTINST4_2OUT("smlsldx r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
645 	TESTINST4_2OUT("smlsldx r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
646 	TESTINST4_2OUT("smlsldx r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
647 	TESTINST4_2OUT("smlsldx r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
648 	TESTINST4_2OUT("smlsldx r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
649        TESTINST4_2OUT("smlsldx r0, r1, r2, r3", 0xfff4ffff, 0xff8fff3f, 0xfffff6ff, 0xfff9ffff, r0, r1, r2, r3, 0);
650 
651 	printf("CLZ\n");
652 	TESTCARRY
653 	TESTINST2("clz  r0, r1", 0, r0, r1, c);
654 	TESTINST2("clz  r0, r1", 1, r0, r1, c);
655 	TESTINST2("clz  r0, r1", 0x10, r0, r1, c);
656 	TESTINST2("clz  r0, r1", 0xffffffff, r0, r1, c);
657 	TESTCARRYEND
658 
659 	printf("extend instructions\n");
660 	TESTINST2("uxtb r0, r1", 0, r0, r1, 0);
661 	TESTINST2("uxtb r0, r1", 1, r0, r1, 0);
662 	TESTINST2("uxtb r0, r1", 0xff, r0, r1, 0);
663 	TESTINST2("uxtb r0, r1", 0xffffffff, r0, r1, 0);
664 	TESTINST2("sxtb r0, r1", 0, r0, r1, 0);
665 	TESTINST2("sxtb r0, r1", 1, r0, r1, 0);
666 	TESTINST2("sxtb r0, r1", 0xff, r0, r1, 0);
667 	TESTINST2("sxtb r0, r1", 0xffffffff, r0, r1, 0);
668 
669 	TESTINST2("uxth r0, r1", 0, r0, r1, 0);
670 	TESTINST2("uxth r0, r1", 1, r0, r1, 0);
671 	TESTINST2("uxth r0, r1", 0xffff, r0, r1, 0);
672 	TESTINST2("uxth r0, r1", 0xffffffff, r0, r1, 0);
673 	TESTINST2("sxth r0, r1", 0, r0, r1, 0);
674 	TESTINST2("sxth r0, r1", 1, r0, r1, 0);
675 	TESTINST2("sxth r0, r1", 0x7fff, r0, r1, 0);
676 	TESTINST2("sxth r0, r1", 0xffff, r0, r1, 0);
677 	TESTINST2("sxth r0, r1", 0x10ffff, r0, r1, 0);
678 	TESTINST2("sxth r0, r1", 0x107fff, r0, r1, 0);
679 	TESTINST2("sxth r0, r1", 0xffffffff, r0, r1, 0);
680 
681 	TESTINST2("uxtb r0, r1, ror #0", 0x000000ff, r0, r1, 0);
682 	TESTINST2("uxtb r0, r1, ror #8", 0x000000ff, r0, r1, 0);
683 	TESTINST2("uxtb r0, r1, ror #8", 0x0000ff00, r0, r1, 0);
684 	TESTINST2("uxtb r0, r1, ror #16", 0x00ff0000, r0, r1, 0);
685 	TESTINST2("uxtb r0, r1, ror #24", 0xff000000, r0, r1, 0);
686 
687 	TESTINST2("uxtb16 r0, r1", 0xffffffff, r0, r1, 0);
688 	TESTINST2("uxtb16 r0, r1, ror #16", 0x0000ffff, r0, r1, 0);
689 	TESTINST2("sxtb16 r0, r1", 0xffffffff, r0, r1, 0);
690 	TESTINST2("sxtb16 r0, r1", 0x00ff00ff, r0, r1, 0);
691 	TESTINST2("sxtb16 r0, r1", 0x007f007f, r0, r1, 0);
692 
693 	printf("------------ BFI ------------\n");
694 
695         /* bfi  rDst, rSrc, #lsb-in-dst, #number-of-bits-to-copy */
696 	TESTINST2("bfi  r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0);
697 	TESTINST2("bfi  r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0);
698 	TESTINST2("bfi  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
699 
700 	TESTINST2("bfi  r0, r1, #19, #11", 0xFFFFFFFF, r0, r1, 0);
701 	TESTINST2("bfi  r0, r1, #20, #11", 0xFFFFFFFF, r0, r1, 0);
702 	TESTINST2("bfi  r0, r1, #21, #11", 0xFFFFFFFF, r0, r1, 0);
703 
704 	TESTINST2("bfi  r0, r1, #0, #32", 0xFFFFFFFF, r0, r1, 0);
705 	TESTINST2("bfi  r0, r1, #1, #31", 0xFFFFFFFF, r0, r1, 0);
706 
707 	TESTINST2("bfi  r0, r1, #29, #3", 0xFFFFFFFF, r0, r1, 0);
708 	TESTINST2("bfi  r0, r1, #30, #2", 0xFFFFFFFF, r0, r1, 0);
709 	TESTINST2("bfi  r0, r1, #31, #1", 0xFFFFFFFF, r0, r1, 0);
710 
711 	printf("------------ BFC ------------\n");
712 
713         /* bfi  rDst, #lsb-in-dst, #number-of-bits-to-copy */
714 	TESTINST2("bfc  r0, #0, #11", 0xAAAAAAAA, r0, r1, 0);
715 	TESTINST2("bfc  r0, #1, #11", 0xAAAAAAAA, r0, r1, 0);
716 	TESTINST2("bfc  r0, #2, #11", 0xAAAAAAAA, r0, r1, 0);
717 
718 	TESTINST2("bfc  r0, #19, #11", 0xFFFFFFFF, r0, r1, 0);
719 	TESTINST2("bfc  r0, #20, #11", 0xFFFFFFFF, r0, r1, 0);
720 	TESTINST2("bfc  r0, #21, #11", 0xFFFFFFFF, r0, r1, 0);
721 
722 	TESTINST2("bfc  r0, #0, #32", 0xFFFFFFFF, r0, r1, 0);
723 	TESTINST2("bfc  r0, #1, #31", 0xFFFFFFFF, r0, r1, 0);
724 
725 	TESTINST2("bfc  r0, #29, #3", 0xFFFFFFFF, r0, r1, 0);
726 	TESTINST2("bfc  r0, #30, #2", 0xFFFFFFFF, r0, r1, 0);
727 	TESTINST2("bfc  r0, #31, #1", 0xFFFFFFFF, r0, r1, 0);
728 
729 	printf("------------ SBFX ------------\n");
730 
731         /* sbfx rDst, rSrc, #lsb, #width */
732         TESTINST2("sbfx  r0, r1, #0, #1", 0x00000000, r0, r1, 0);
733         TESTINST2("sbfx  r0, r1, #0, #1", 0x00000001, r0, r1, 0);
734         TESTINST2("sbfx  r0, r1, #1, #1", 0x00000000, r0, r1, 0);
735         TESTINST2("sbfx  r0, r1, #1, #1", 0x00000001, r0, r1, 0);
736         TESTINST2("sbfx  r0, r1, #1, #1", 0x00000002, r0, r1, 0);
737         TESTINST2("sbfx  r0, r1, #1, #1", 0x00000003, r0, r1, 0);
738 
739         TESTINST2("sbfx  r0, r1, #0, #2", 0x00000000, r0, r1, 0);
740         TESTINST2("sbfx  r0, r1, #0, #2", 0x00000001, r0, r1, 0);
741         TESTINST2("sbfx  r0, r1, #1, #2", 0x00000000, r0, r1, 0);
742         TESTINST2("sbfx  r0, r1, #1, #2", 0x00000001, r0, r1, 0);
743         TESTINST2("sbfx  r0, r1, #1, #2", 0x00000002, r0, r1, 0);
744         TESTINST2("sbfx  r0, r1, #1, #2", 0x00000003, r0, r1, 0);
745 
746         TESTINST2("sbfx  r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0);
747         TESTINST2("sbfx  r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0);
748         TESTINST2("sbfx  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
749 
750         TESTINST2("sbfx  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
751 
752         TESTINST2("sbfx  r0, r1, #31, #1", 0xAAAAAAAA, r0, r1, 0);
753         TESTINST2("sbfx  r0, r1, #30, #2", 0xAAAAAAAA, r0, r1, 0);
754 
755 	printf("------------ UBFX ------------\n");
756 
757         /* ubfx rDst, rSrc, #lsb, #width */
758         TESTINST2("ubfx  r0, r1, #0, #1", 0x00000000, r0, r1, 0);
759         TESTINST2("ubfx  r0, r1, #0, #1", 0x00000001, r0, r1, 0);
760         TESTINST2("ubfx  r0, r1, #1, #1", 0x00000000, r0, r1, 0);
761         TESTINST2("ubfx  r0, r1, #1, #1", 0x00000001, r0, r1, 0);
762         TESTINST2("ubfx  r0, r1, #1, #1", 0x00000002, r0, r1, 0);
763         TESTINST2("ubfx  r0, r1, #1, #1", 0x00000003, r0, r1, 0);
764 
765         TESTINST2("ubfx  r0, r1, #0, #2", 0x00000000, r0, r1, 0);
766         TESTINST2("ubfx  r0, r1, #0, #2", 0x00000001, r0, r1, 0);
767         TESTINST2("ubfx  r0, r1, #1, #2", 0x00000000, r0, r1, 0);
768         TESTINST2("ubfx  r0, r1, #1, #2", 0x00000001, r0, r1, 0);
769         TESTINST2("ubfx  r0, r1, #1, #2", 0x00000002, r0, r1, 0);
770         TESTINST2("ubfx  r0, r1, #1, #2", 0x00000003, r0, r1, 0);
771 
772         TESTINST2("ubfx  r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0);
773         TESTINST2("ubfx  r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0);
774         TESTINST2("ubfx  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
775 
776         TESTINST2("ubfx  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
777 
778         TESTINST2("ubfx  r0, r1, #31, #1", 0xAAAAAAAA, r0, r1, 0);
779         TESTINST2("ubfx  r0, r1, #30, #2", 0xAAAAAAAA, r0, r1, 0);
780 
781 	printf("------------ SMULL{B,T}{B,T} ------------\n");
782         /* SMULxx rD, rN, rM */
783 
784 	TESTINST3("smulbb r0, r1, r2", 0x00030000, 0x00040000,  r0, r1, r2, 0);
785 	TESTINST3("smulbb r0, r1, r2", 0x00030001, 0x00040002,  r0, r1, r2, 0);
786 	TESTINST3("smulbb r0, r1, r2", 0x00038001, 0x00047fff,  r0, r1, r2, 0);
787 	TESTINST3("smulbb r0, r1, r2", 0x00037fff, 0x00047fff,  r0, r1, r2, 0);
788 	TESTINST3("smulbb r0, r1, r2", 0x0003ffff, 0x0004ffff,  r0, r1, r2, 0);
789 
790 	printf("------------ SXTAB ------------\n");
791         TESTINST3("sxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182819,
792                   r0, r1, r2, 0);
793         TESTINST3("sxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182819,
794                   r0, r1, r2, 0);
795         TESTINST3("sxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182819,
796                   r0, r1, r2, 0);
797         TESTINST3("sxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182819,
798                   r0, r1, r2, 0);
799 
800         TESTINST3("sxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182899,
801                   r0, r1, r2, 0);
802         TESTINST3("sxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182899,
803                   r0, r1, r2, 0);
804         TESTINST3("sxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182899,
805                   r0, r1, r2, 0);
806         TESTINST3("sxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182899,
807                   r0, r1, r2, 0);
808 
809 	printf("------------ UXTAB ------------\n");
810         TESTINST3("uxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182819,
811                   r0, r1, r2, 0);
812         TESTINST3("uxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182819,
813                   r0, r1, r2, 0);
814         TESTINST3("uxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182819,
815                   r0, r1, r2, 0);
816         TESTINST3("uxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182819,
817                   r0, r1, r2, 0);
818 
819         TESTINST3("uxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182899,
820                   r0, r1, r2, 0);
821         TESTINST3("uxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182899,
822                   r0, r1, r2, 0);
823         TESTINST3("uxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182899,
824                   r0, r1, r2, 0);
825         TESTINST3("uxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182899,
826                   r0, r1, r2, 0);
827 
828 	printf("------------ SXTAH ------------\n");
829         TESTINST3("sxtah r0, r1, r2, ROR #24", 0x31415927, 0x27182819,
830                   r0, r1, r2, 0);
831         TESTINST3("sxtah r0, r1, r2, ROR #16", 0x31415927, 0x27182819,
832                   r0, r1, r2, 0);
833         TESTINST3("sxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27182819,
834                   r0, r1, r2, 0);
835         TESTINST3("sxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27182819,
836                   r0, r1, r2, 0);
837 
838         TESTINST3("sxtah r0, r1, r2, ROR #24", 0x31415927, 0x27189819,
839                   r0, r1, r2, 0);
840         TESTINST3("sxtah r0, r1, r2, ROR #16", 0x31415927, 0x27189819,
841                   r0, r1, r2, 0);
842         TESTINST3("sxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27189819,
843                   r0, r1, r2, 0);
844         TESTINST3("sxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27189819,
845                   r0, r1, r2, 0);
846 
847 	printf("------------ UXTAH ------------\n");
848         TESTINST3("uxtah r0, r1, r2, ROR #24", 0x31415927, 0x27182819,
849                   r0, r1, r2, 0);
850         TESTINST3("uxtah r0, r1, r2, ROR #16", 0x31415927, 0x27182819,
851                   r0, r1, r2, 0);
852         TESTINST3("uxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27182819,
853                   r0, r1, r2, 0);
854         TESTINST3("uxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27182819,
855                   r0, r1, r2, 0);
856 
857         TESTINST3("uxtah r0, r1, r2, ROR #24", 0x31415927, 0x27189819,
858                   r0, r1, r2, 0);
859         TESTINST3("uxtah r0, r1, r2, ROR #16", 0x31415927, 0x27189819,
860                   r0, r1, r2, 0);
861         TESTINST3("uxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27189819,
862                   r0, r1, r2, 0);
863         TESTINST3("uxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27189819,
864                   r0, r1, r2, 0);
865 
866 	printf("------------ PLD/PLDW (begin) ------------\n");
867         /* These don't have any effect on the architected state, so,
868            uh, there's no result values to check.  Just _do_ some of
869            them and check Valgrind's instruction decoder eats them up
870            without complaining. */
871         { int alocal;
872           printf("pld  reg +/- imm12  cases\n");
873           __asm__ __volatile__( "pld [%0, #128]" : :/*in*/"r"(&alocal) );
874           __asm__ __volatile__( "pld [%0, #-128]" : :/*in*/"r"(&alocal) );
875           __asm__ __volatile__( "pld [r15, #-128]" : :/*in*/"r"(&alocal) );
876 
877           // apparently pldw is v7 only
878           //__asm__ __volatile__( "pldw [%0, #128]" : :/*in*/"r"(&alocal) );
879           //__asm__ __volatile__( "pldw [%0, #-128]" : :/*in*/"r"(&alocal) );
880           //__asm__ __volatile__( "pldw [r15, #128]" : :/*in*/"r"(&alocal) );
881 
882           printf("pld  reg +/- shifted reg  cases\n");
883           __asm__ __volatile__( "pld [%0, %1]" : : /*in*/"r"(&alocal), "r"(0) );
884           __asm__ __volatile__( "pld [%0, %1, LSL #1]" : : /*in*/"r"(&alocal), "r"(0) );
885           __asm__ __volatile__( "pld [%0, %1, LSR #1]" : : /*in*/"r"(&alocal), "r"(0) );
886           __asm__ __volatile__( "pld [%0, %1, ASR #1]" : : /*in*/"r"(&alocal), "r"(0) );
887           __asm__ __volatile__( "pld [%0, %1, ROR #1]" : : /*in*/"r"(&alocal), "r"(0) );
888           __asm__ __volatile__( "pld [%0, %1, RRX]" : : /*in*/"r"(&alocal), "r"(0) );
889         }
890 	printf("------------ PLD/PLDW (done) ------------\n");
891 
892 	printf("------------ RBIT ------------\n");
893 	TESTINST2("rbit r0, r1", 0x00000000, r0, r1, 0);
894 	TESTINST2("rbit r0, r1", 0xFFFFFFFF, r0, r1, 0);
895 	TESTINST2("rbit r0, r1", 0x80000000, r0, r1, 0);
896 	TESTINST2("rbit r0, r1", 0x00000001, r0, r1, 0);
897 	TESTINST2("rbit r0, r1", 0x31415927, r0, r1, 0);
898 	TESTINST2("rbit r0, r1", 0x14141562, r0, r1, 0);
899    TESTINST2("rbit r0, r1", 0xabe8391f, r0, r1, 0);
900    TESTINST2("rbit r0, r1", 0x9028aa80, r0, r1, 0);
901    TESTINST2("rbit r0, r1", 0xead1fc6d, r0, r1, 0);
902    TESTINST2("rbit r0, r1", 0x35c98c55, r0, r1, 0);
903    TESTINST2("rbit r0, r1", 0x534af1eb, r0, r1, 0);
904    TESTINST2("rbit r0, r1", 0x45511b08, r0, r1, 0);
905    TESTINST2("rbit r0, r1", 0x90077f71, r0, r1, 0);
906    TESTINST2("rbit r0, r1", 0xde8ca84b, r0, r1, 0);
907    TESTINST2("rbit r0, r1", 0xe37a0dda, r0, r1, 0);
908    TESTINST2("rbit r0, r1", 0xe5b83d4b, r0, r1, 0);
909    TESTINST2("rbit r0, r1", 0xbb6d14ec, r0, r1, 0);
910    TESTINST2("rbit r0, r1", 0x68983cc9, r0, r1, 0);
911 
912 	printf("------------ REV ------------\n");
913 	TESTINST2("rev r0, r1", 0x00000000, r0, r1, 0);
914 	TESTINST2("rev r0, r1", 0xFFFFFFFF, r0, r1, 0);
915 	TESTINST2("rev r0, r1", 0x80000000, r0, r1, 0);
916 	TESTINST2("rev r0, r1", 0x00000001, r0, r1, 0);
917 	TESTINST2("rev r0, r1", 0x31415927, r0, r1, 0);
918 	TESTINST2("rev r0, r1", 0x14141562, r0, r1, 0);
919    TESTINST2("rev r0, r1", 0xabe8391f, r0, r1, 0);
920    TESTINST2("rev r0, r1", 0x9028aa80, r0, r1, 0);
921    TESTINST2("rev r0, r1", 0xead1fc6d, r0, r1, 0);
922    TESTINST2("rev r0, r1", 0x35c98c55, r0, r1, 0);
923    TESTINST2("rev r0, r1", 0x534af1eb, r0, r1, 0);
924    TESTINST2("rev r0, r1", 0x45511b08, r0, r1, 0);
925    TESTINST2("rev r0, r1", 0x90077f71, r0, r1, 0);
926    TESTINST2("rev r0, r1", 0xde8ca84b, r0, r1, 0);
927    TESTINST2("rev r0, r1", 0xe37a0dda, r0, r1, 0);
928    TESTINST2("rev r0, r1", 0xe5b83d4b, r0, r1, 0);
929    TESTINST2("rev r0, r1", 0xbb6d14ec, r0, r1, 0);
930    TESTINST2("rev r0, r1", 0x68983cc9, r0, r1, 0);
931 
932 	printf("------------ REV16 ------------\n");
933 	TESTINST2("rev16 r0, r1", 0x00000000, r0, r1, 0);
934 	TESTINST2("rev16 r0, r1", 0xFFFFFFFF, r0, r1, 0);
935 	TESTINST2("rev16 r0, r1", 0x80000000, r0, r1, 0);
936 	TESTINST2("rev16 r0, r1", 0x00000001, r0, r1, 0);
937 	TESTINST2("rev16 r0, r1", 0x31415927, r0, r1, 0);
938 	TESTINST2("rev16 r0, r1", 0x14141562, r0, r1, 0);
939    TESTINST2("rev16 r0, r1", 0xabe8391f, r0, r1, 0);
940    TESTINST2("rev16 r0, r1", 0x9028aa80, r0, r1, 0);
941    TESTINST2("rev16 r0, r1", 0xead1fc6d, r0, r1, 0);
942    TESTINST2("rev16 r0, r1", 0x35c98c55, r0, r1, 0);
943    TESTINST2("rev16 r0, r1", 0x534af1eb, r0, r1, 0);
944    TESTINST2("rev16 r0, r1", 0x45511b08, r0, r1, 0);
945    TESTINST2("rev16 r0, r1", 0x90077f71, r0, r1, 0);
946    TESTINST2("rev16 r0, r1", 0xde8ca84b, r0, r1, 0);
947    TESTINST2("rev16 r0, r1", 0xe37a0dda, r0, r1, 0);
948    TESTINST2("rev16 r0, r1", 0xe5b83d4b, r0, r1, 0);
949    TESTINST2("rev16 r0, r1", 0xbb6d14ec, r0, r1, 0);
950    TESTINST2("rev16 r0, r1", 0x68983cc9, r0, r1, 0);
951 
952         printf("------------ REVSH ------------\n");
953         TESTINST2("revsh r0, r1", 0x00000000, r0, r1, 0);
954         TESTINST2("revsh r0, r1", 0xFFFFFFFF, r0, r1, 0);
955         TESTINST2("revsh r0, r1", 0x80000000, r0, r1, 0);
956         TESTINST2("revsh r0, r1", 0x00000001, r0, r1, 0);
957         TESTINST2("revsh r0, r1", 0x31415927, r0, r1, 0);
958         TESTINST2("revsh r0, r1", 0x14141562, r0, r1, 0);
959    TESTINST2("revsh r0, r1", 0xabe8391f, r0, r1, 0);
960    TESTINST2("revsh r0, r1", 0x9028aa80, r0, r1, 0);
961    TESTINST2("revsh r0, r1", 0xead1fc6d, r0, r1, 0);
962    TESTINST2("revsh r0, r1", 0x35c98c55, r0, r1, 0);
963    TESTINST2("revsh r0, r1", 0x534af1eb, r0, r1, 0);
964    TESTINST2("revsh r0, r1", 0x45511b08, r0, r1, 0);
965    TESTINST2("revsh r0, r1", 0x90077f71, r0, r1, 0);
966    TESTINST2("revsh r0, r1", 0xde8ca84b, r0, r1, 0);
967    TESTINST2("revsh r0, r1", 0xe37a0dda, r0, r1, 0);
968    TESTINST2("revsh r0, r1", 0xe5b83d4b, r0, r1, 0);
969    TESTINST2("revsh r0, r1", 0xbb6d14ec, r0, r1, 0);
970    TESTINST2("revsh r0, r1", 0x68983cc9, r0, r1, 0);
971 
972 	printf("------------ NOP (begin) ------------\n");
973         printf("nop\n");
974         __asm__ __volatile__("nop" ::: "memory","cc");
975         printf("nopeq\n");
976         __asm__ __volatile__("nopeq" ::: "memory","cc");
977         printf("nopne\n");
978         __asm__ __volatile__("nopne" ::: "memory","cc");
979 	printf("------------ NOP (end) ------------\n");
980 
981 	printf("------------ SMMUL ------------\n");
982         TESTINST3("smmul   r0, r1, r2", 0, 0, r0, r1, r2, 0);
983         TESTINST3("smmul   r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
984         TESTINST3("smmul   r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0);
985         TESTINST3("smmul   r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0);
986         TESTINST3("smmul   r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0);
987         TESTINST3("smmul   r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0);
988         TESTINST3("smmul   r0, r1, r2", 0xe444dc25, 0xd5eef620, r0, r1, r2, 0);
989         TESTINST3("smmul   r0, r1, r2", 0x06ea9b2a, 0xa2108661, r0, r1, r2, 0);
990         TESTINST3("smmul   r0, r1, r2", 0x448f3a5f, 0x17aecf57, r0, r1, r2, 0);
991         TESTINST3("smmul   r0, r1, r2", 0x4b0c2337, 0xffa63d6c, r0, r1, r2, 0);
992         TESTINST3("smmul   r0, r1, r2", 0xf91d5f56, 0x088bc0f9, r0, r1, r2, 0);
993 
994         TESTINST3("smmulr  r0, r1, r2", 0, 0, r0, r1, r2, 0);
995         TESTINST3("smmulr  r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
996         TESTINST3("smmulr  r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0);
997         TESTINST3("smmulr  r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0);
998         TESTINST3("smmulr  r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0);
999         TESTINST3("smmulr  r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0);
1000         TESTINST3("smmulr  r0, r1, r2", 0xe444dc25, 0xd5eef620, r0, r1, r2, 0);
1001         TESTINST3("smmulr  r0, r1, r2", 0x06ea9b2a, 0xa2108661, r0, r1, r2, 0);
1002         TESTINST3("smmulr  r0, r1, r2", 0x448f3a5f, 0x17aecf57, r0, r1, r2, 0);
1003         TESTINST3("smmulr  r0, r1, r2", 0x4b0c2337, 0xffa63d6c, r0, r1, r2, 0);
1004         TESTINST3("smmulr  r0, r1, r2", 0xf91d5f56, 0x088bc0f9, r0, r1, r2, 0);
1005 
1006 	printf("------------ UMAAL ------------\n");
1007 	TESTINST4_2OUT("umaal  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
1008 	TESTINST4_2OUT("umaal  r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
1009 	TESTINST4_2OUT("umaal  r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
1010 	TESTINST4_2OUT("umaal  r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
1011 	TESTINST4_2OUT("umaal  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
1012 	TESTINST4_2OUT("umaal  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
1013 	TESTINST4_2OUT("umaal  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
1014 	TESTINST4_2OUT("umaal  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
1015 	TESTINST4_2OUT("umaal  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
1016 
1017 	TESTINST4_2OUT("umaal  r0, r1, r2, r3", 0x27182846, 0x31415927, 0x14141356, 0x1773250A,
1018                        r0, r1, r2, r3, 0);
1019 	TESTINST4_2OUT("umaal  r0, r1, r2, r3", 0x01415927, 0x74141356, 0x5773250A, 0xA7182846,
1020                        r0, r1, r2, r3, 1);
1021 
1022         printf("----------------- SMMLA{R} ----------------- \n");
1023         TESTINST4("smmla  r0, r1, r2, r3",
1024                   0x80008000, 0x80008000, 0x00000000, r0, r1, r2, r3, 0);
1025         TESTINST4("smmla  r0, r1, r2, r3",
1026                   0x7fff7fff, 0x00000000, 0x00000000, r0, r1, r2, r3, 0);
1027         TESTINST4("smmla  r0, r1, r2, r3",
1028                   0x7fff7fff, 0x00010001, 0x00000001, r0, r1, r2, r3, 0);
1029         TESTINST4("smmla  r0, r1, r2, r3",
1030                   0x80008000, 0xffffffff, 0x0000001f, r0, r1, r2, r3, 0);
1031         TESTINST4("smmla  r0, r1, r2, r3",
1032                   0x00640064, 0x00030003, 0x00000020, r0, r1, r2, r3, 0);
1033         TESTINST4("smmla  r0, r1, r2, r3",
1034                   0xffffffff, 0xfffc0001, 0x000000ff, r0, r1, r2, r3, 0);
1035         TESTINST4("smmla  r0, r1, r2, r3",
1036                   0xfff70fff, 0x00030003, 0x00000100, r0, r1, r2, r3, 0);
1037         TESTINST4("smmla  r0, r1, r2, r3",
1038                   0xb8035b5b, 0xce0ce1ed, 0x5f986e68, r0, r1, r2, r3, 0);
1039         TESTINST4("smmla  r0, r1, r2, r3",
1040                   0x35232047, 0x146275d8, 0xaae3433f, r0, r1, r2, r3, 0);
1041         TESTINST4("smmla  r0, r1, r2, r3",
1042                   0xe7aa57b4, 0x1584bd74, 0x2c07a5b4, r0, r1, r2, r3, 0);
1043         TESTINST4("smmla  r0, r1, r2, r3",
1044                   0x32fa0095, 0x36f26261, 0x89d2ef86, r0, r1, r2, r3, 0);
1045         TESTINST4("smmla  r0, r1, r2, r3",
1046                   0x8ed8287c, 0x02c90120, 0xd4b64d54, r0, r1, r2, r3, 0);
1047         TESTINST4("smmla  r0, r1, r2, r3",
1048                   0xc53aaba9, 0x29300837, 0x0b02c58a, r0, r1, r2, r3, 0);
1049         TESTINST4("smmla  r0, r1, r2, r3",
1050                   0x216158cb, 0x57a50a01, 0xb0d20777, r0, r1, r2, r3, 0);
1051         TESTINST4("smmla  r0, r1, r2, r3",
1052                   0x3e2e1bd7, 0x3cd6cd94, 0x7e376198, r0, r1, r2, r3, 0);
1053         TESTINST4("smmla  r0, r1, r2, r3",
1054                   0xd5fe2dc4, 0xdd914bf7, 0xd5dc5407, r0, r1, r2, r3, 0);
1055         TESTINST4("smmla  r0, r1, r2, r3",
1056                   0xf87b961e, 0x1d66879f, 0xf2b64835, r0, r1, r2, r3, 0);
1057         TESTINST4("smmla  r0, r1, r2, r3",
1058                   0xd65db979, 0xc61b323b, 0xae930a1a, r0, r1, r2, r3, 0);
1059         TESTINST4("smmla  r0, r1, r2, r3",
1060                   0x5ef1f1a8, 0xbf73f0a5, 0x2fb714c9, r0, r1, r2, r3, 0);
1061         TESTINST4("smmla  r0, r1, r2, r3",
1062                   0x1ffe53d9, 0x815bb75b, 0xa3268abe, r0, r1, r2, r3, 0);
1063         TESTINST4("smmla  r0, r1, r2, r3",
1064                   0xed2cbf78, 0xc6ffabb6, 0xef9e9fd9, r0, r1, r2, r3, 0);
1065         TESTINST4("smmla  r0, r1, r2, r3",
1066                   0xeaa652c7, 0x137741f4, 0x3dba1164, r0, r1, r2, r3, 0);
1067         TESTINST4("smmla  r0, r1, r2, r3",
1068                   0x3ada0280, 0x71fbde8b, 0xdba5bd25, r0, r1, r2, r3, 0);
1069         TESTINST4("smmla  r0, r1, r2, r3",
1070                   0xda4ba05b, 0x90f9833d, 0x884c0ad8, r0, r1, r2, r3, 0);
1071         TESTINST4("smmla  r0, r1, r2, r3",
1072                   0xc00b821a, 0x7fa1d5a6, 0x9a4ff1b8, r0, r1, r2, r3, 0);
1073         TESTINST4("smmla  r0, r1, r2, r3",
1074                   0xe1bb8606, 0x58293969, 0x81616d13, r0, r1, r2, r3, 0);
1075         TESTINST4("smmla  r0, r1, r2, r3",
1076                   0x51f31d95, 0xa3cfd624, 0x6077fb1f, r0, r1, r2, r3, 0);
1077         TESTINST4("smmla  r0, r1, r2, r3",
1078                   0x0849a0c2, 0x0872f25a, 0x40b094e2, r0, r1, r2, r3, 0);
1079         TESTINST4("smmla  r0, r1, r2, r3",
1080                   0x17913309, 0xf1e03d7e, 0x91edc21d, r0, r1, r2, r3, 0);
1081         TESTINST4("smmla  r0, r1, r2, r3",
1082                   0x5388b5cd, 0x86582032, 0x6034078d, r0, r1, r2, r3, 0);
1083         TESTINST4("smmla  r0, r1, r2, r3",
1084                   0x181c436b, 0x5de41558, 0xccfa1c7e, r0, r1, r2, r3, 0);
1085         TESTINST4("smmla  r0, r1, r2, r3",
1086                   0x23ba1b46, 0x4437983c, 0x48d06549, r0, r1, r2, r3, 0);
1087         TESTINST4("smmla  r0, r1, r2, r3",
1088                   0xa9085781, 0xc6b4ac58, 0xb2aead21, r0, r1, r2, r3, 0);
1089         TESTINST4("smmla  r0, r1, r2, r3",
1090                   0xc2bdf597, 0xdde1e6a4, 0x852e3a72, r0, r1, r2, r3, 0);
1091         TESTINST4("smmla  r0, r1, r2, r3",
1092                   0x157b0dea, 0xf0d5ff94, 0xe7b87e39, r0, r1, r2, r3, 0);
1093         TESTINST4("smmla  r0, r1, r2, r3",
1094                   0x3edad6b6, 0x82aceb7a, 0x0557c6fc, r0, r1, r2, r3, 0);
1095         TESTINST4("smmla  r0, r1, r2, r3",
1096                   0x6cc9bfa8, 0x7f808c15, 0x81874a02, r0, r1, r2, r3, 0);
1097         TESTINST4("smmla  r0, r1, r2, r3",
1098                   0x6b1422c7, 0x33921b00, 0x3ccad3f7, r0, r1, r2, r3, 0);
1099         TESTINST4("smmla  r0, r1, r2, r3",
1100                   0xd7ce1909, 0x3e435701, 0x85fbf196, r0, r1, r2, r3, 0);
1101         TESTINST4("smmla  r0, r1, r2, r3",
1102                   0xb4e16b6e, 0x6e13680a, 0x89436f88, r0, r1, r2, r3, 0);
1103         TESTINST4("smmla  r0, r1, r2, r3",
1104                   0x44858efc, 0x9002bc30, 0x390d2c2f, r0, r1, r2, r3, 0);
1105         TESTINST4("smmla  r0, r1, r2, r3",
1106                   0xbea121ab, 0x953ff6ec, 0x80657c40, r0, r1, r2, r3, 0);
1107         TESTINST4("smmla  r0, r1, r2, r3",
1108                   0x6ffed89f, 0x3e8c49b7, 0x11bd07d1, r0, r1, r2, r3, 0);
1109         TESTINST4("smmla  r0, r1, r2, r3",
1110                   0x7795635d, 0x5e6e32dd, 0xe4999bf2, r0, r1, r2, r3, 0);
1111         TESTINST4("smmla  r0, r1, r2, r3",
1112                   0xec0c2f30, 0x5736ed46, 0x231348c0, r0, r1, r2, r3, 0);
1113         TESTINST4("smmla  r0, r1, r2, r3",
1114                   0x4f9ddd1b, 0x95bca5d8, 0x5765b203, r0, r1, r2, r3, 0);
1115         TESTINST4("smmla  r0, r1, r2, r3",
1116                   0xc1553709, 0x0112b30a, 0x69ec0212, r0, r1, r2, r3, 0);
1117         TESTINST4("smmla  r0, r1, r2, r3",
1118                   0x74bd0223, 0x03fa9bb5, 0x899d9192, r0, r1, r2, r3, 0);
1119         TESTINST4("smmla  r0, r1, r2, r3",
1120                   0xf52e9fbf, 0xb4c510a7, 0x7fcbe5a9, r0, r1, r2, r3, 0);
1121         TESTINST4("smmla  r0, r1, r2, r3",
1122                   0x64a365ef, 0x2dd01366, 0xf7b0b13e, r0, r1, r2, r3, 0);
1123         TESTINST4("smmla  r0, r1, r2, r3",
1124                   0x5e4b1cbf, 0x44de5ca9, 0x464a21cc, r0, r1, r2, r3, 0);
1125         TESTINST4("smmla  r0, r1, r2, r3",
1126                   0x299da970, 0xe8108f1b, 0xf5818cfb, r0, r1, r2, r3, 0);
1127         TESTINST4("smmla  r0, r1, r2, r3",
1128                   0xcd90d604, 0xaa5e9444, 0x8217b7df, r0, r1, r2, r3, 0);
1129         TESTINST4("smmla  r0, r1, r2, r3",
1130                   0xe60743c3, 0x7acb4de3, 0x73c29060, r0, r1, r2, r3, 0);
1131         TESTINST4("smmla  r0, r1, r2, r3",
1132                   0x868e7c7d, 0x5f77532e, 0x1d133d3d, r0, r1, r2, r3, 0);
1133         TESTINST4("smmla  r0, r1, r2, r3",
1134                   0x4e5e0760, 0x8f6d3264, 0x21ba2fb3, r0, r1, r2, r3, 0);
1135         TESTINST4("smmla  r0, r1, r2, r3",
1136                   0xde99ac2f, 0x0be36f70, 0xeda5110c, r0, r1, r2, r3, 0);
1137         TESTINST4("smmla  r0, r1, r2, r3",
1138                   0xc57243b7, 0xcf1e4487, 0xf20fb90f, r0, r1, r2, r3, 0);
1139 
1140         TESTINST4("smmlar  r0, r1, r2, r3",
1141                   0x80008000, 0x80008000, 0x00000000, r0, r1, r2, r3, 0);
1142         TESTINST4("smmlar  r0, r1, r2, r3",
1143                   0x7fff7fff, 0x00000000, 0x00000000, r0, r1, r2, r3, 0);
1144         TESTINST4("smmlar  r0, r1, r2, r3",
1145                   0x7fff7fff, 0x00010001, 0x00000001, r0, r1, r2, r3, 0);
1146         TESTINST4("smmlar  r0, r1, r2, r3",
1147                   0x80008000, 0xffffffff, 0x0000001f, r0, r1, r2, r3, 0);
1148         TESTINST4("smmlar  r0, r1, r2, r3",
1149                   0x00640064, 0x00030003, 0x00000020, r0, r1, r2, r3, 0);
1150         TESTINST4("smmlar  r0, r1, r2, r3",
1151                   0xffffffff, 0xfffc0001, 0x000000ff, r0, r1, r2, r3, 0);
1152         TESTINST4("smmlar  r0, r1, r2, r3",
1153                   0xfff70fff, 0x00030003, 0x00000100, r0, r1, r2, r3, 0);
1154         TESTINST4("smmlar  r0, r1, r2, r3",
1155                   0xb8035b5b, 0xce0ce1ed, 0x5f986e68, r0, r1, r2, r3, 0);
1156         TESTINST4("smmlar  r0, r1, r2, r3",
1157                   0x35232047, 0x146275d8, 0xaae3433f, r0, r1, r2, r3, 0);
1158         TESTINST4("smmlar  r0, r1, r2, r3",
1159                   0xe7aa57b4, 0x1584bd74, 0x2c07a5b4, r0, r1, r2, r3, 0);
1160         TESTINST4("smmlar  r0, r1, r2, r3",
1161                   0x32fa0095, 0x36f26261, 0x89d2ef86, r0, r1, r2, r3, 0);
1162         TESTINST4("smmlar  r0, r1, r2, r3",
1163                   0x8ed8287c, 0x02c90120, 0xd4b64d54, r0, r1, r2, r3, 0);
1164         TESTINST4("smmlar  r0, r1, r2, r3",
1165                   0xc53aaba9, 0x29300837, 0x0b02c58a, r0, r1, r2, r3, 0);
1166         TESTINST4("smmlar  r0, r1, r2, r3",
1167                   0x216158cb, 0x57a50a01, 0xb0d20777, r0, r1, r2, r3, 0);
1168         TESTINST4("smmlar  r0, r1, r2, r3",
1169                   0x3e2e1bd7, 0x3cd6cd94, 0x7e376198, r0, r1, r2, r3, 0);
1170         TESTINST4("smmlar  r0, r1, r2, r3",
1171                   0xd5fe2dc4, 0xdd914bf7, 0xd5dc5407, r0, r1, r2, r3, 0);
1172         TESTINST4("smmlar  r0, r1, r2, r3",
1173                   0xf87b961e, 0x1d66879f, 0xf2b64835, r0, r1, r2, r3, 0);
1174         TESTINST4("smmlar  r0, r1, r2, r3",
1175                   0xd65db979, 0xc61b323b, 0xae930a1a, r0, r1, r2, r3, 0);
1176         TESTINST4("smmlar  r0, r1, r2, r3",
1177                   0x5ef1f1a8, 0xbf73f0a5, 0x2fb714c9, r0, r1, r2, r3, 0);
1178         TESTINST4("smmlar  r0, r1, r2, r3",
1179                   0x1ffe53d9, 0x815bb75b, 0xa3268abe, r0, r1, r2, r3, 0);
1180         TESTINST4("smmlar  r0, r1, r2, r3",
1181                   0xed2cbf78, 0xc6ffabb6, 0xef9e9fd9, r0, r1, r2, r3, 0);
1182         TESTINST4("smmlar  r0, r1, r2, r3",
1183                   0xeaa652c7, 0x137741f4, 0x3dba1164, r0, r1, r2, r3, 0);
1184         TESTINST4("smmlar  r0, r1, r2, r3",
1185                   0x3ada0280, 0x71fbde8b, 0xdba5bd25, r0, r1, r2, r3, 0);
1186         TESTINST4("smmlar  r0, r1, r2, r3",
1187                   0xda4ba05b, 0x90f9833d, 0x884c0ad8, r0, r1, r2, r3, 0);
1188         TESTINST4("smmlar  r0, r1, r2, r3",
1189                   0xc00b821a, 0x7fa1d5a6, 0x9a4ff1b8, r0, r1, r2, r3, 0);
1190         TESTINST4("smmlar  r0, r1, r2, r3",
1191                   0xe1bb8606, 0x58293969, 0x81616d13, r0, r1, r2, r3, 0);
1192         TESTINST4("smmlar  r0, r1, r2, r3",
1193                   0x51f31d95, 0xa3cfd624, 0x6077fb1f, r0, r1, r2, r3, 0);
1194         TESTINST4("smmlar  r0, r1, r2, r3",
1195                   0x0849a0c2, 0x0872f25a, 0x40b094e2, r0, r1, r2, r3, 0);
1196         TESTINST4("smmlar  r0, r1, r2, r3",
1197                   0x17913309, 0xf1e03d7e, 0x91edc21d, r0, r1, r2, r3, 0);
1198         TESTINST4("smmlar  r0, r1, r2, r3",
1199                   0x5388b5cd, 0x86582032, 0x6034078d, r0, r1, r2, r3, 0);
1200         TESTINST4("smmlar  r0, r1, r2, r3",
1201                   0x181c436b, 0x5de41558, 0xccfa1c7e, r0, r1, r2, r3, 0);
1202         TESTINST4("smmlar  r0, r1, r2, r3",
1203                   0x23ba1b46, 0x4437983c, 0x48d06549, r0, r1, r2, r3, 0);
1204         TESTINST4("smmlar  r0, r1, r2, r3",
1205                   0xa9085781, 0xc6b4ac58, 0xb2aead21, r0, r1, r2, r3, 0);
1206         TESTINST4("smmlar  r0, r1, r2, r3",
1207                   0xc2bdf597, 0xdde1e6a4, 0x852e3a72, r0, r1, r2, r3, 0);
1208         TESTINST4("smmlar  r0, r1, r2, r3",
1209                   0x157b0dea, 0xf0d5ff94, 0xe7b87e39, r0, r1, r2, r3, 0);
1210         TESTINST4("smmlar  r0, r1, r2, r3",
1211                   0x3edad6b6, 0x82aceb7a, 0x0557c6fc, r0, r1, r2, r3, 0);
1212         TESTINST4("smmlar  r0, r1, r2, r3",
1213                   0x6cc9bfa8, 0x7f808c15, 0x81874a02, r0, r1, r2, r3, 0);
1214         TESTINST4("smmlar  r0, r1, r2, r3",
1215                   0x6b1422c7, 0x33921b00, 0x3ccad3f7, r0, r1, r2, r3, 0);
1216         TESTINST4("smmlar  r0, r1, r2, r3",
1217                   0xd7ce1909, 0x3e435701, 0x85fbf196, r0, r1, r2, r3, 0);
1218         TESTINST4("smmlar  r0, r1, r2, r3",
1219                   0xb4e16b6e, 0x6e13680a, 0x89436f88, r0, r1, r2, r3, 0);
1220         TESTINST4("smmlar  r0, r1, r2, r3",
1221                   0x44858efc, 0x9002bc30, 0x390d2c2f, r0, r1, r2, r3, 0);
1222         TESTINST4("smmlar  r0, r1, r2, r3",
1223                   0xbea121ab, 0x953ff6ec, 0x80657c40, r0, r1, r2, r3, 0);
1224         TESTINST4("smmlar  r0, r1, r2, r3",
1225                   0x6ffed89f, 0x3e8c49b7, 0x11bd07d1, r0, r1, r2, r3, 0);
1226         TESTINST4("smmlar  r0, r1, r2, r3",
1227                   0x7795635d, 0x5e6e32dd, 0xe4999bf2, r0, r1, r2, r3, 0);
1228         TESTINST4("smmlar  r0, r1, r2, r3",
1229                   0xec0c2f30, 0x5736ed46, 0x231348c0, r0, r1, r2, r3, 0);
1230         TESTINST4("smmlar  r0, r1, r2, r3",
1231                   0x4f9ddd1b, 0x95bca5d8, 0x5765b203, r0, r1, r2, r3, 0);
1232         TESTINST4("smmlar  r0, r1, r2, r3",
1233                   0xc1553709, 0x0112b30a, 0x69ec0212, r0, r1, r2, r3, 0);
1234         TESTINST4("smmlar  r0, r1, r2, r3",
1235                   0x74bd0223, 0x03fa9bb5, 0x899d9192, r0, r1, r2, r3, 0);
1236         TESTINST4("smmlar  r0, r1, r2, r3",
1237                   0xf52e9fbf, 0xb4c510a7, 0x7fcbe5a9, r0, r1, r2, r3, 0);
1238         TESTINST4("smmlar  r0, r1, r2, r3",
1239                   0x64a365ef, 0x2dd01366, 0xf7b0b13e, r0, r1, r2, r3, 0);
1240         TESTINST4("smmlar  r0, r1, r2, r3",
1241                   0x5e4b1cbf, 0x44de5ca9, 0x464a21cc, r0, r1, r2, r3, 0);
1242         TESTINST4("smmlar  r0, r1, r2, r3",
1243                   0x299da970, 0xe8108f1b, 0xf5818cfb, r0, r1, r2, r3, 0);
1244         TESTINST4("smmlar  r0, r1, r2, r3",
1245                   0xcd90d604, 0xaa5e9444, 0x8217b7df, r0, r1, r2, r3, 0);
1246         TESTINST4("smmlar  r0, r1, r2, r3",
1247                   0xe60743c3, 0x7acb4de3, 0x73c29060, r0, r1, r2, r3, 0);
1248         TESTINST4("smmlar  r0, r1, r2, r3",
1249                   0x868e7c7d, 0x5f77532e, 0x1d133d3d, r0, r1, r2, r3, 0);
1250         TESTINST4("smmlar  r0, r1, r2, r3",
1251                   0x4e5e0760, 0x8f6d3264, 0x21ba2fb3, r0, r1, r2, r3, 0);
1252         TESTINST4("smmlar  r0, r1, r2, r3",
1253                   0xde99ac2f, 0x0be36f70, 0xeda5110c, r0, r1, r2, r3, 0);
1254         TESTINST4("smmlar  r0, r1, r2, r3",
1255                   0xc57243b7, 0xcf1e4487, 0xf20fb90f, r0, r1, r2, r3, 0);
1256 
1257         printf("----------------- SMMLS{R} ----------------- \n");
1258         TESTINST4("smmls  r0, r1, r2, r3",
1259                   0x80008000, 0x80008000, 0x00000000, r0, r1, r2, r3, 0);
1260         TESTINST4("smmls  r0, r1, r2, r3",
1261                   0x7fff7fff, 0x00000000, 0x00000000, r0, r1, r2, r3, 0);
1262         TESTINST4("smmls  r0, r1, r2, r3",
1263                   0x7fff7fff, 0x00010001, 0x00000001, r0, r1, r2, r3, 0);
1264         TESTINST4("smmls  r0, r1, r2, r3",
1265                   0x80008000, 0xffffffff, 0x0000001f, r0, r1, r2, r3, 0);
1266         TESTINST4("smmls  r0, r1, r2, r3",
1267                   0x00640064, 0x00030003, 0x00000020, r0, r1, r2, r3, 0);
1268         TESTINST4("smmls  r0, r1, r2, r3",
1269                   0xffffffff, 0xfffc0001, 0x000000ff, r0, r1, r2, r3, 0);
1270         TESTINST4("smmls  r0, r1, r2, r3",
1271                   0xfff70fff, 0x00030003, 0x00000100, r0, r1, r2, r3, 0);
1272         TESTINST4("smmls  r0, r1, r2, r3",
1273                   0xb8035b5b, 0xce0ce1ed, 0x5f986e68, r0, r1, r2, r3, 0);
1274         TESTINST4("smmls  r0, r1, r2, r3",
1275                   0x35232047, 0x146275d8, 0xaae3433f, r0, r1, r2, r3, 0);
1276         TESTINST4("smmls  r0, r1, r2, r3",
1277                   0xe7aa57b4, 0x1584bd74, 0x2c07a5b4, r0, r1, r2, r3, 0);
1278         TESTINST4("smmls  r0, r1, r2, r3",
1279                   0x32fa0095, 0x36f26261, 0x89d2ef86, r0, r1, r2, r3, 0);
1280         TESTINST4("smmls  r0, r1, r2, r3",
1281                   0x8ed8287c, 0x02c90120, 0xd4b64d54, r0, r1, r2, r3, 0);
1282         TESTINST4("smmls  r0, r1, r2, r3",
1283                   0xc53aaba9, 0x29300837, 0x0b02c58a, r0, r1, r2, r3, 0);
1284         TESTINST4("smmls  r0, r1, r2, r3",
1285                   0x216158cb, 0x57a50a01, 0xb0d20777, r0, r1, r2, r3, 0);
1286         TESTINST4("smmls  r0, r1, r2, r3",
1287                   0x3e2e1bd7, 0x3cd6cd94, 0x7e376198, r0, r1, r2, r3, 0);
1288         TESTINST4("smmls  r0, r1, r2, r3",
1289                   0xd5fe2dc4, 0xdd914bf7, 0xd5dc5407, r0, r1, r2, r3, 0);
1290         TESTINST4("smmls  r0, r1, r2, r3",
1291                   0xf87b961e, 0x1d66879f, 0xf2b64835, r0, r1, r2, r3, 0);
1292         TESTINST4("smmls  r0, r1, r2, r3",
1293                   0xd65db979, 0xc61b323b, 0xae930a1a, r0, r1, r2, r3, 0);
1294         TESTINST4("smmls  r0, r1, r2, r3",
1295                   0x5ef1f1a8, 0xbf73f0a5, 0x2fb714c9, r0, r1, r2, r3, 0);
1296         TESTINST4("smmls  r0, r1, r2, r3",
1297                   0x1ffe53d9, 0x815bb75b, 0xa3268abe, r0, r1, r2, r3, 0);
1298         TESTINST4("smmls  r0, r1, r2, r3",
1299                   0xed2cbf78, 0xc6ffabb6, 0xef9e9fd9, r0, r1, r2, r3, 0);
1300         TESTINST4("smmls  r0, r1, r2, r3",
1301                   0xeaa652c7, 0x137741f4, 0x3dba1164, r0, r1, r2, r3, 0);
1302         TESTINST4("smmls  r0, r1, r2, r3",
1303                   0x3ada0280, 0x71fbde8b, 0xdba5bd25, r0, r1, r2, r3, 0);
1304         TESTINST4("smmls  r0, r1, r2, r3",
1305                   0xda4ba05b, 0x90f9833d, 0x884c0ad8, r0, r1, r2, r3, 0);
1306         TESTINST4("smmls  r0, r1, r2, r3",
1307                   0xc00b821a, 0x7fa1d5a6, 0x9a4ff1b8, r0, r1, r2, r3, 0);
1308         TESTINST4("smmls  r0, r1, r2, r3",
1309                   0xe1bb8606, 0x58293969, 0x81616d13, r0, r1, r2, r3, 0);
1310         TESTINST4("smmls  r0, r1, r2, r3",
1311                   0x51f31d95, 0xa3cfd624, 0x6077fb1f, r0, r1, r2, r3, 0);
1312         TESTINST4("smmls  r0, r1, r2, r3",
1313                   0x0849a0c2, 0x0872f25a, 0x40b094e2, r0, r1, r2, r3, 0);
1314         TESTINST4("smmls  r0, r1, r2, r3",
1315                   0x17913309, 0xf1e03d7e, 0x91edc21d, r0, r1, r2, r3, 0);
1316         TESTINST4("smmls  r0, r1, r2, r3",
1317                   0x5388b5cd, 0x86582032, 0x6034078d, r0, r1, r2, r3, 0);
1318         TESTINST4("smmls  r0, r1, r2, r3",
1319                   0x181c436b, 0x5de41558, 0xccfa1c7e, r0, r1, r2, r3, 0);
1320         TESTINST4("smmls  r0, r1, r2, r3",
1321                   0x23ba1b46, 0x4437983c, 0x48d06549, r0, r1, r2, r3, 0);
1322         TESTINST4("smmls  r0, r1, r2, r3",
1323                   0xa9085781, 0xc6b4ac58, 0xb2aead21, r0, r1, r2, r3, 0);
1324         TESTINST4("smmls  r0, r1, r2, r3",
1325                   0xc2bdf597, 0xdde1e6a4, 0x852e3a72, r0, r1, r2, r3, 0);
1326         TESTINST4("smmls  r0, r1, r2, r3",
1327                   0x157b0dea, 0xf0d5ff94, 0xe7b87e39, r0, r1, r2, r3, 0);
1328         TESTINST4("smmls  r0, r1, r2, r3",
1329                   0x3edad6b6, 0x82aceb7a, 0x0557c6fc, r0, r1, r2, r3, 0);
1330         TESTINST4("smmls  r0, r1, r2, r3",
1331                   0x6cc9bfa8, 0x7f808c15, 0x81874a02, r0, r1, r2, r3, 0);
1332         TESTINST4("smmls  r0, r1, r2, r3",
1333                   0x6b1422c7, 0x33921b00, 0x3ccad3f7, r0, r1, r2, r3, 0);
1334         TESTINST4("smmls  r0, r1, r2, r3",
1335                   0xd7ce1909, 0x3e435701, 0x85fbf196, r0, r1, r2, r3, 0);
1336         TESTINST4("smmls  r0, r1, r2, r3",
1337                   0xb4e16b6e, 0x6e13680a, 0x89436f88, r0, r1, r2, r3, 0);
1338         TESTINST4("smmls  r0, r1, r2, r3",
1339                   0x44858efc, 0x9002bc30, 0x390d2c2f, r0, r1, r2, r3, 0);
1340         TESTINST4("smmls  r0, r1, r2, r3",
1341                   0xbea121ab, 0x953ff6ec, 0x80657c40, r0, r1, r2, r3, 0);
1342         TESTINST4("smmls  r0, r1, r2, r3",
1343                   0x6ffed89f, 0x3e8c49b7, 0x11bd07d1, r0, r1, r2, r3, 0);
1344         TESTINST4("smmls  r0, r1, r2, r3",
1345                   0x7795635d, 0x5e6e32dd, 0xe4999bf2, r0, r1, r2, r3, 0);
1346         TESTINST4("smmls  r0, r1, r2, r3",
1347                   0xec0c2f30, 0x5736ed46, 0x231348c0, r0, r1, r2, r3, 0);
1348         TESTINST4("smmls  r0, r1, r2, r3",
1349                   0x4f9ddd1b, 0x95bca5d8, 0x5765b203, r0, r1, r2, r3, 0);
1350         TESTINST4("smmls  r0, r1, r2, r3",
1351                   0xc1553709, 0x0112b30a, 0x69ec0212, r0, r1, r2, r3, 0);
1352         TESTINST4("smmls  r0, r1, r2, r3",
1353                   0x74bd0223, 0x03fa9bb5, 0x899d9192, r0, r1, r2, r3, 0);
1354         TESTINST4("smmls  r0, r1, r2, r3",
1355                   0xf52e9fbf, 0xb4c510a7, 0x7fcbe5a9, r0, r1, r2, r3, 0);
1356         TESTINST4("smmls  r0, r1, r2, r3",
1357                   0x64a365ef, 0x2dd01366, 0xf7b0b13e, r0, r1, r2, r3, 0);
1358         TESTINST4("smmls  r0, r1, r2, r3",
1359                   0x5e4b1cbf, 0x44de5ca9, 0x464a21cc, r0, r1, r2, r3, 0);
1360         TESTINST4("smmls  r0, r1, r2, r3",
1361                   0x299da970, 0xe8108f1b, 0xf5818cfb, r0, r1, r2, r3, 0);
1362         TESTINST4("smmls  r0, r1, r2, r3",
1363                   0xcd90d604, 0xaa5e9444, 0x8217b7df, r0, r1, r2, r3, 0);
1364         TESTINST4("smmls  r0, r1, r2, r3",
1365                   0xe60743c3, 0x7acb4de3, 0x73c29060, r0, r1, r2, r3, 0);
1366         TESTINST4("smmls  r0, r1, r2, r3",
1367                   0x868e7c7d, 0x5f77532e, 0x1d133d3d, r0, r1, r2, r3, 0);
1368         TESTINST4("smmls  r0, r1, r2, r3",
1369                   0x4e5e0760, 0x8f6d3264, 0x21ba2fb3, r0, r1, r2, r3, 0);
1370         TESTINST4("smmls  r0, r1, r2, r3",
1371                   0xde99ac2f, 0x0be36f70, 0xeda5110c, r0, r1, r2, r3, 0);
1372         TESTINST4("smmls  r0, r1, r2, r3",
1373                   0xc57243b7, 0xcf1e4487, 0xf20fb90f, r0, r1, r2, r3, 0);
1374 
1375         TESTINST4("smmlsr  r0, r1, r2, r3",
1376                   0x80008000, 0x80008000, 0x00000000, r0, r1, r2, r3, 0);
1377         TESTINST4("smmlsr  r0, r1, r2, r3",
1378                   0x7fff7fff, 0x00000000, 0x00000000, r0, r1, r2, r3, 0);
1379         TESTINST4("smmlsr  r0, r1, r2, r3",
1380                   0x7fff7fff, 0x00010001, 0x00000001, r0, r1, r2, r3, 0);
1381         TESTINST4("smmlsr  r0, r1, r2, r3",
1382                   0x80008000, 0xffffffff, 0x0000001f, r0, r1, r2, r3, 0);
1383         TESTINST4("smmlsr  r0, r1, r2, r3",
1384                   0x00640064, 0x00030003, 0x00000020, r0, r1, r2, r3, 0);
1385         TESTINST4("smmlsr  r0, r1, r2, r3",
1386                   0xffffffff, 0xfffc0001, 0x000000ff, r0, r1, r2, r3, 0);
1387         TESTINST4("smmlsr  r0, r1, r2, r3",
1388                   0xfff70fff, 0x00030003, 0x00000100, r0, r1, r2, r3, 0);
1389         TESTINST4("smmlsr  r0, r1, r2, r3",
1390                   0xb8035b5b, 0xce0ce1ed, 0x5f986e68, r0, r1, r2, r3, 0);
1391         TESTINST4("smmlsr  r0, r1, r2, r3",
1392                   0x35232047, 0x146275d8, 0xaae3433f, r0, r1, r2, r3, 0);
1393         TESTINST4("smmlsr  r0, r1, r2, r3",
1394                   0xe7aa57b4, 0x1584bd74, 0x2c07a5b4, r0, r1, r2, r3, 0);
1395         TESTINST4("smmlsr  r0, r1, r2, r3",
1396                   0x32fa0095, 0x36f26261, 0x89d2ef86, r0, r1, r2, r3, 0);
1397         TESTINST4("smmlsr  r0, r1, r2, r3",
1398                   0x8ed8287c, 0x02c90120, 0xd4b64d54, r0, r1, r2, r3, 0);
1399         TESTINST4("smmlsr  r0, r1, r2, r3",
1400                   0xc53aaba9, 0x29300837, 0x0b02c58a, r0, r1, r2, r3, 0);
1401         TESTINST4("smmlsr  r0, r1, r2, r3",
1402                   0x216158cb, 0x57a50a01, 0xb0d20777, r0, r1, r2, r3, 0);
1403         TESTINST4("smmlsr  r0, r1, r2, r3",
1404                   0x3e2e1bd7, 0x3cd6cd94, 0x7e376198, r0, r1, r2, r3, 0);
1405         TESTINST4("smmlsr  r0, r1, r2, r3",
1406                   0xd5fe2dc4, 0xdd914bf7, 0xd5dc5407, r0, r1, r2, r3, 0);
1407         TESTINST4("smmlsr  r0, r1, r2, r3",
1408                   0xf87b961e, 0x1d66879f, 0xf2b64835, r0, r1, r2, r3, 0);
1409         TESTINST4("smmlsr  r0, r1, r2, r3",
1410                   0xd65db979, 0xc61b323b, 0xae930a1a, r0, r1, r2, r3, 0);
1411         TESTINST4("smmlsr  r0, r1, r2, r3",
1412                   0x5ef1f1a8, 0xbf73f0a5, 0x2fb714c9, r0, r1, r2, r3, 0);
1413         TESTINST4("smmlsr  r0, r1, r2, r3",
1414                   0x1ffe53d9, 0x815bb75b, 0xa3268abe, r0, r1, r2, r3, 0);
1415         TESTINST4("smmlsr  r0, r1, r2, r3",
1416                   0xed2cbf78, 0xc6ffabb6, 0xef9e9fd9, r0, r1, r2, r3, 0);
1417         TESTINST4("smmlsr  r0, r1, r2, r3",
1418                   0xeaa652c7, 0x137741f4, 0x3dba1164, r0, r1, r2, r3, 0);
1419         TESTINST4("smmlsr  r0, r1, r2, r3",
1420                   0x3ada0280, 0x71fbde8b, 0xdba5bd25, r0, r1, r2, r3, 0);
1421         TESTINST4("smmlsr  r0, r1, r2, r3",
1422                   0xda4ba05b, 0x90f9833d, 0x884c0ad8, r0, r1, r2, r3, 0);
1423         TESTINST4("smmlsr  r0, r1, r2, r3",
1424                   0xc00b821a, 0x7fa1d5a6, 0x9a4ff1b8, r0, r1, r2, r3, 0);
1425         TESTINST4("smmlsr  r0, r1, r2, r3",
1426                   0xe1bb8606, 0x58293969, 0x81616d13, r0, r1, r2, r3, 0);
1427         TESTINST4("smmlsr  r0, r1, r2, r3",
1428                   0x51f31d95, 0xa3cfd624, 0x6077fb1f, r0, r1, r2, r3, 0);
1429         TESTINST4("smmlsr  r0, r1, r2, r3",
1430                   0x0849a0c2, 0x0872f25a, 0x40b094e2, r0, r1, r2, r3, 0);
1431         TESTINST4("smmlsr  r0, r1, r2, r3",
1432                   0x17913309, 0xf1e03d7e, 0x91edc21d, r0, r1, r2, r3, 0);
1433         TESTINST4("smmlsr  r0, r1, r2, r3",
1434                   0x5388b5cd, 0x86582032, 0x6034078d, r0, r1, r2, r3, 0);
1435         TESTINST4("smmlsr  r0, r1, r2, r3",
1436                   0x181c436b, 0x5de41558, 0xccfa1c7e, r0, r1, r2, r3, 0);
1437         TESTINST4("smmlsr  r0, r1, r2, r3",
1438                   0x23ba1b46, 0x4437983c, 0x48d06549, r0, r1, r2, r3, 0);
1439         TESTINST4("smmlsr  r0, r1, r2, r3",
1440                   0xa9085781, 0xc6b4ac58, 0xb2aead21, r0, r1, r2, r3, 0);
1441         TESTINST4("smmlsr  r0, r1, r2, r3",
1442                   0xc2bdf597, 0xdde1e6a4, 0x852e3a72, r0, r1, r2, r3, 0);
1443         TESTINST4("smmlsr  r0, r1, r2, r3",
1444                   0x157b0dea, 0xf0d5ff94, 0xe7b87e39, r0, r1, r2, r3, 0);
1445         TESTINST4("smmlsr  r0, r1, r2, r3",
1446                   0x3edad6b6, 0x82aceb7a, 0x0557c6fc, r0, r1, r2, r3, 0);
1447         TESTINST4("smmlsr  r0, r1, r2, r3",
1448                   0x6cc9bfa8, 0x7f808c15, 0x81874a02, r0, r1, r2, r3, 0);
1449         TESTINST4("smmlsr  r0, r1, r2, r3",
1450                   0x6b1422c7, 0x33921b00, 0x3ccad3f7, r0, r1, r2, r3, 0);
1451         TESTINST4("smmlsr  r0, r1, r2, r3",
1452                   0xd7ce1909, 0x3e435701, 0x85fbf196, r0, r1, r2, r3, 0);
1453         TESTINST4("smmlsr  r0, r1, r2, r3",
1454                   0xb4e16b6e, 0x6e13680a, 0x89436f88, r0, r1, r2, r3, 0);
1455         TESTINST4("smmlsr  r0, r1, r2, r3",
1456                   0x44858efc, 0x9002bc30, 0x390d2c2f, r0, r1, r2, r3, 0);
1457         TESTINST4("smmlsr  r0, r1, r2, r3",
1458                   0xbea121ab, 0x953ff6ec, 0x80657c40, r0, r1, r2, r3, 0);
1459         TESTINST4("smmlsr  r0, r1, r2, r3",
1460                   0x6ffed89f, 0x3e8c49b7, 0x11bd07d1, r0, r1, r2, r3, 0);
1461         TESTINST4("smmlsr  r0, r1, r2, r3",
1462                   0x7795635d, 0x5e6e32dd, 0xe4999bf2, r0, r1, r2, r3, 0);
1463         TESTINST4("smmlsr  r0, r1, r2, r3",
1464                   0xec0c2f30, 0x5736ed46, 0x231348c0, r0, r1, r2, r3, 0);
1465         TESTINST4("smmlsr  r0, r1, r2, r3",
1466                   0x4f9ddd1b, 0x95bca5d8, 0x5765b203, r0, r1, r2, r3, 0);
1467         TESTINST4("smmlsr  r0, r1, r2, r3",
1468                   0xc1553709, 0x0112b30a, 0x69ec0212, r0, r1, r2, r3, 0);
1469         TESTINST4("smmlsr  r0, r1, r2, r3",
1470                   0x74bd0223, 0x03fa9bb5, 0x899d9192, r0, r1, r2, r3, 0);
1471         TESTINST4("smmlsr  r0, r1, r2, r3",
1472                   0xf52e9fbf, 0xb4c510a7, 0x7fcbe5a9, r0, r1, r2, r3, 0);
1473         TESTINST4("smmlsr  r0, r1, r2, r3",
1474                   0x64a365ef, 0x2dd01366, 0xf7b0b13e, r0, r1, r2, r3, 0);
1475         TESTINST4("smmlsr  r0, r1, r2, r3",
1476                   0x5e4b1cbf, 0x44de5ca9, 0x464a21cc, r0, r1, r2, r3, 0);
1477         TESTINST4("smmlsr  r0, r1, r2, r3",
1478                   0x299da970, 0xe8108f1b, 0xf5818cfb, r0, r1, r2, r3, 0);
1479         TESTINST4("smmlsr  r0, r1, r2, r3",
1480                   0xcd90d604, 0xaa5e9444, 0x8217b7df, r0, r1, r2, r3, 0);
1481         TESTINST4("smmlsr  r0, r1, r2, r3",
1482                   0xe60743c3, 0x7acb4de3, 0x73c29060, r0, r1, r2, r3, 0);
1483         TESTINST4("smmlsr  r0, r1, r2, r3",
1484                   0x868e7c7d, 0x5f77532e, 0x1d133d3d, r0, r1, r2, r3, 0);
1485         TESTINST4("smmlsr  r0, r1, r2, r3",
1486                   0x4e5e0760, 0x8f6d3264, 0x21ba2fb3, r0, r1, r2, r3, 0);
1487         TESTINST4("smmlsr  r0, r1, r2, r3",
1488                   0xde99ac2f, 0x0be36f70, 0xeda5110c, r0, r1, r2, r3, 0);
1489         TESTINST4("smmlsr  r0, r1, r2, r3",
1490                   0xc57243b7, 0xcf1e4487, 0xf20fb90f, r0, r1, r2, r3, 0);
1491 
1492 	return 0;
1493 }
1494