1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* How to compile:
3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   gcc -O -g -Wall -mcpu=cortex-a8 -o testarmv6int testarmv6int.c
4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown*/
5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include <stdio.h>
7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown/* test macros to generate and output the result of a single instruction */
9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#define TESTINST2(instruction, RMval, RD, RM, carryin) \
10ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown{ \
11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int out; \
12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	unsigned int cpsr; \
13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown\
14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	__asm__ volatile( \
15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		"movs %3,%3;" \
16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		"msrne cpsr_f,#(1<<29);" \
17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		"msreq cpsr_f,#0;" \
18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown		"mov " #RM ",%2;" \
19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                /* set #RD to 0x55555555 so we can see which parts get overwritten */ \
20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                "mov " #RD ", #0x55" "\n\t" \
21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                "orr " #RD "," #RD "," #RD ", LSL #8" "\n\t" \
22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown                "orr " #RD "," #RD "," #RD ", LSL #16" "\n\t" \
23b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		instruction ";" \
24b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mov %0," #RD ";" \
25b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mrs %1,cpsr;" \
26b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		: "=&r" (out), "=&r" (cpsr) \
27b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		: "r" (RMval), "r" (carryin) \
28b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		: #RD, #RM, "cc", "memory" \
29b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	); \
30b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("%s :: rd 0x%08x rm 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
31b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		instruction, out, RMval, \
32b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		carryin ? 1 : 0, \
33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		cpsr & 0xffff0000, \
34b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<31) & cpsr) ? 'N' : ' ', \
35b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<30) & cpsr) ? 'Z' : ' ', \
36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<29) & cpsr) ? 'C' : ' ', \
37b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<28) & cpsr) ? 'V' : ' ' \
38b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		); \
39b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
40b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
41b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define TESTINST3(instruction, RMval, RNval, RD, RM, RN, carryin) \
42b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ \
43b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned int out; \
44b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned int cpsr; \
45b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov\
46b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	__asm__ volatile( \
47b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"movs %4,%4;" \
48b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"msrne cpsr_f,#(1<<29);" \
49b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"msreq cpsr_f,#0;" \
50b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mov " #RM ",%2;" \
51b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mov " #RN ",%3;" \
52b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		instruction ";" \
53b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mov %0," #RD ";" \
54b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mrs %1,cpsr;" \
55b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		: "=&r" (out), "=&r" (cpsr) \
56b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		: "r" (RMval), "r" (RNval), "r" (carryin) \
57b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		: #RD, #RM, #RN, "cc", "memory" \
58b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	); \
59b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("%s :: rd 0x%08x rm 0x%08x, rn 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
60b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		instruction, out, RMval, RNval, \
61b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		carryin ? 1 : 0, \
62b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		cpsr & 0xffff0000, \
63b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<31) & cpsr) ? 'N' : ' ', \
64b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<30) & cpsr) ? 'Z' : ' ', \
65b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<29) & cpsr) ? 'C' : ' ', \
66b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<28) & cpsr) ? 'V' : ' ' \
67b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		); \
68b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
69b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
70b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define TESTINST4(instruction, RMval, RNval, RSval, RD, RM, RN, RS, carryin) \
71b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ \
72b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned int out; \
73b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned int cpsr; \
74b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov\
75b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	__asm__ volatile( \
76b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"movs %5,%5;" \
77b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"msrne cpsr_f,#(1<<29);" \
78b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"msreq cpsr_f,#0;" \
79b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mov " #RM ",%2;" \
80b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mov " #RN ",%3;" \
81b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mov " #RS ",%4;" \
82b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		instruction ";" \
83b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mov %0," #RD ";" \
84b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mrs %1,cpsr;" \
85b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		: "=&r" (out), "=&r" (cpsr) \
86b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		: "r" (RMval), "r" (RNval), "r" (RSval), "r" (carryin) \
87b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		: #RD, #RM, #RN, #RS, "cc", "memory" \
88b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	); \
89b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("%s :: rd 0x%08x rm 0x%08x, rn 0x%08x rs 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
90b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		instruction, out, RMval, RNval, RSval, \
91b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		carryin ? 1 : 0, \
92b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		cpsr & 0xffff0000, \
93b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<31) & cpsr) ? 'N' : ' ', \
94b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<30) & cpsr) ? 'Z' : ' ', \
95b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<29) & cpsr) ? 'C' : ' ', \
96b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<28) & cpsr) ? 'V' : ' ' \
97b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		); \
98b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
99b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
100b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define TESTINST4_2OUT(instruction, RDval, RD2val, RMval, RSval, RD, RD2, RM, RS, carryin) \
101b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{ \
102b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned int out; \
103b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned int out2; \
104b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	unsigned int cpsr; \
105b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov\
106b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	__asm__ volatile( \
107b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"movs %7,%7;" \
108b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"msrne cpsr_f,#(1<<29);" \
109b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"msreq cpsr_f,#0;" \
110b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mov " #RD ",%3;" \
111b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mov " #RD2 ",%4;" \
112b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mov " #RM ",%5;" \
113b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mov " #RS ",%6;" \
114b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		instruction ";" \
115b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mov %0," #RD ";" \
116b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mov %1," #RD2 ";" \
117b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		"mrs %2,cpsr;" \
118b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		: "=&r" (out), "=&r" (out2), "=&r" (cpsr) \
119b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		: "r" (RDval), "r" (RD2val), "r" (RMval), "r" (RSval), "r" (carryin) \
120b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		: #RD, #RD2, #RM, #RS, "cc", "memory" \
121b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	); \
122b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("%s :: rd 0x%08x rd2 0x%08x, rm 0x%08x rs 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
123b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		instruction, out, out2, RMval, RSval, \
124b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		carryin ? 1 : 0, \
125b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		cpsr & 0xffff0000, \
126b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<31) & cpsr) ? 'N' : ' ', \
127b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<30) & cpsr) ? 'Z' : ' ', \
128b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<29) & cpsr) ? 'C' : ' ', \
129b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		((1<<28) & cpsr) ? 'V' : ' ' \
130b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov		); \
131b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov}
132b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
133b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov/* helpers */
134b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define TESTCARRY { int c = 0; for (c = 0; c < 2; c++) {
135b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#define TESTCARRYEND }}
136b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
137b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
138b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
139b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
140b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanovint main(int argc, char **argv)
141b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov{
142b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
143b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("MOV\n");
144b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("mov  r0, r1", 1, r0, r1, 0);
145b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("cpy  r0, r1", 1, r0, r1, 0);
146b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("mov  r0, #0", 0, r0, r1, 0);
147b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("mov  r0, #1", 0, r0, r1, 0);
148b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
149b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("movs r0, r1", 1, r0, r1, c);
150b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("movs r0, r1", 0, r0, r1, c);
151b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("movs r0, r1", 0x80000000, r0, r1, c);
152b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("movs r0, #0", 0, r0, r1, c);
153b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("movs r0, #1", 0, r0, r1, c);
154b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
155b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
156b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("MVN\n");
157b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("mvn  r0, r1", 1, r0, r1, 0);
158b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
159b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("mvns r0, r1", 1, r0, r1, c);
160b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("mvns r0, r1", 0, r0, r1, c);
161b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("mvns r0, r1", 0x80000000, r0, r1, c);
162b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
163b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
164b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("ADD\n");
165b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("adds r0, r1, r2", 0, 0, r0, r1, r2, 0);
166b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("adds r0, r1, r2", 0, 1, r0, r1, r2, 0);
167b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("adds r0, r1, r2", 1, 0, r0, r1, r2, 0);
168b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("adds r0, r1, r2", 1, 1, r0, r1, r2, 0);
169b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("adds r0, r1, r2", 0, -1, r0, r1, r2, 0);
170b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("adds r0, r1, r2", 1, -1, r0, r1, r2, 0);
171b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("adds r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, 0);
172b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("adds r0, r1, r2", 0x80000000, -1, r0, r1, r2, 0);
173b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("adds r0, r1, r2", 0x80000000, 0, r0, r1, r2, 0);
174b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
175b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("ADC\n");
176b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("adcs r0, r1, r2", 0, 0, r0, r1, r2, 0);
177b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("adcs r0, r1, r2", 0, 0, r0, r1, r2, 1);
178b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
179b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("LSL\n");
180b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
181b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 1, r0, r1, r2, 0);
182b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 2, r0, r1, r2, 0);
183b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 31, r0, r1, r2, 0);
184b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 32, r0, r1, r2, 0);
185b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 33, r0, r1, r2, 0);
186b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 63, r0, r1, r2, 0);
187b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 64, r0, r1, r2, 0);
188b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 255, r0, r1, r2, 0);
189b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsl  r0, r1, r2", 0xffffffff, 256, r0, r1, r2, 0);
190b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
191b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsl  r0, r1, r2", 0x1, 0, r0, r1, r2, 0);
192b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsl  r0, r1, r2", 0x1, 1, r0, r1, r2, 0);
193b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsl  r0, r1, r2", 0x1, 31, r0, r1, r2, 0);
194b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsl  r0, r1, r2", 0x2, 31, r0, r1, r2, 0);
195b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
196b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("LSLS\n");
197b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
198b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsls r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
199b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsls r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
200b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsls r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
201b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsls r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
202b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsls r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
203b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsls r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
204b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsls r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
205b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsls r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
206b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsls r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
207b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsls r0, r1, r2", 0xffffffff, 256, r0, r1, r2, c);
208b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsls r0, r1, r2", 0x1, 0, r0, r1, r2, c);
209b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsls r0, r1, r2", 0x1, 1, r0, r1, r2, c);
210b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsls r0, r1, r2", 0x1, 31, r0, r1, r2, c);
211b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsls r0, r1, r2", 0x2, 31, r0, r1, r2, c);
212b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
213b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
214b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("LSL immediate\n");
215b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
216b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsl  r0, r1, #0", 0xffffffff, r0, r1, c);
217b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsl  r0, r1, #1", 0xffffffff, r0, r1, c);
218b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsl  r0, r1, #31", 0xffffffff, r0, r1, c);
219b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsl  r0, r1, #0", 0x1, r0, r1, c);
220b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsl  r0, r1, #1", 0x1, r0, r1, c);
221b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsl  r0, r1, #31", 0x1, r0, r1, c);
222b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsl  r0, r1, #31", 0x2, r0, r1, c);
223b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
224b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
225b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("LSLS immediate\n");
226b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
227b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsls r0, r1, #0", 0xffffffff, r0, r1, c);
228b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsls r0, r1, #1", 0xffffffff, r0, r1, c);
229b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsls r0, r1, #31", 0xffffffff, r0, r1, c);
230b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsls r0, r1, #0", 0x1, r0, r1, c);
231b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsls r0, r1, #1", 0x1, r0, r1, c);
232b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsls r0, r1, #31", 0x1, r0, r1, c);
233b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsls r0, r1, #31", 0x2, r0, r1, c);
234b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
235b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
236b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("LSR\n");
237b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
238b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 1, r0, r1, r2, 0);
239b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 2, r0, r1, r2, 0);
240b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 31, r0, r1, r2, 0);
241b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 32, r0, r1, r2, 0);
242b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 33, r0, r1, r2, 0);
243b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 63, r0, r1, r2, 0);
244b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 64, r0, r1, r2, 0);
245b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 255, r0, r1, r2, 0);
246b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsr  r0, r1, r2", 0xffffffff, 256, r0, r1, r2, 0);
247b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
248b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("LSRS\n");
249b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
250b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
251b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
252b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
253b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
254b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
255b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
256b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
257b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
258b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("lsrs r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
259b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
260b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
261b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("LSR immediate\n");
262b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsr  r0, r1, #0", 0xffffffff, r0, r1, 0);
263b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsr  r0, r1, #1", 0xffffffff, r0, r1, 0);
264b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsr  r0, r1, #31", 0xffffffff, r0, r1, 0);
265b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsr  r0, r1, #32", 0xffffffff, r0, r1, 0);
266b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsr  r0, r1, #16", 0x00010000, r0, r1, 0);
267b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsr  r0, r1, #17", 0x00010000, r0, r1, 0);
268b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsr  r0, r1, #18", 0x00010000, r0, r1, 0);
269b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
270b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("LSRS immediate\n");
271b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
272b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsrs r0, r1, #0", 0xffffffff, r0, r1, c);
273b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsrs r0, r1, #1", 0xffffffff, r0, r1, c);
274b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsrs r0, r1, #31", 0xffffffff, r0, r1, c);
275b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsrs r0, r1, #32", 0xffffffff, r0, r1, c);
276b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsrs r0, r1, #16", 0x00010000, r0, r1, c);
277b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsrs r0, r1, #17", 0x00010000, r0, r1, c);
278b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("lsrs r0, r1, #18", 0x00010000, r0, r1, c);
279b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
280b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
281b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("ASR\n");
282b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
283b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
284b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
285b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
286b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
287b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
288b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
289b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
290b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
291b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
292b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0xffffffff, 256, r0, r1, r2, c);
293b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 0, r0, r1, r2, c);
294b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, c);
295b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 2, r0, r1, r2, c);
296b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 31, r0, r1, r2, c);
297b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 32, r0, r1, r2, c);
298b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 33, r0, r1, r2, c);
299b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 63, r0, r1, r2, c);
300b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 64, r0, r1, r2, c);
301b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 255, r0, r1, r2, c);
302b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asr  r0, r1, r2", 0x7fffffff, 256, r0, r1, r2, c);
303b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
304b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
305b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("ASRS\n");
306b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
307b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
308b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
309b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
310b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
311b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
312b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
313b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
314b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
315b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
316b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0xffffffff, 256, r0, r1, r2, c);
317b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 0, r0, r1, r2, c);
318b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, c);
319b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 2, r0, r1, r2, c);
320b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 31, r0, r1, r2, c);
321b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 32, r0, r1, r2, c);
322b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 33, r0, r1, r2, c);
323b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 63, r0, r1, r2, c);
324b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 64, r0, r1, r2, c);
325b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 255, r0, r1, r2, c);
326b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x7fffffff, 256, r0, r1, r2, c);
327b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
328b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
329b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
330b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x8, 0, r0, r1, r2, c);
331b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x8, 1, r0, r1, r2, c);
332b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x8, 2, r0, r1, r2, c);
333b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x8, 3, r0, r1, r2, c);
334b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x8, 4, r0, r1, r2, c);
335b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x8, 5, r0, r1, r2, c);
336b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
337b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
338b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x80000001, 1, r0, r1, r2, 0);
339b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("asrs r0, r1, r2", 0x80000001, 2, r0, r1, r2, 0);
340b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
341b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("ASR immediate\n");
342b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asr  r0, r1, #0", 0xffffffff, r0, r1, 0);
343b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asr  r0, r1, #1", 0xffffffff, r0, r1, 0);
344b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asr  r0, r1, #31", 0xffffffff, r0, r1, 0);
345b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asr  r0, r1, #32", 0xffffffff, r0, r1, 0);
346b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asr  r0, r1, #0", 0x7fffffff, r0, r1, 0);
347b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asr  r0, r1, #1", 0x7fffffff, r0, r1, 0);
348b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asr  r0, r1, #31", 0x7fffffff, r0, r1, 0);
349b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asr  r0, r1, #32", 0x7fffffff, r0, r1, 0);
350b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asr  r0, r1, #16", 0x00010000, r0, r1, 0);
351b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asr  r0, r1, #17", 0x00010000, r0, r1, 0);
352b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asr  r0, r1, #18", 0x00010000, r0, r1, 0);
353b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
354b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("ASRS immediate\n");
355b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
356b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asrs r0, r1, #0", 0xffffffff, r0, r1, c);
357b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asrs r0, r1, #1", 0xffffffff, r0, r1, c);
358b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asrs r0, r1, #31", 0xffffffff, r0, r1, c);
359b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asrs r0, r1, #32", 0xffffffff, r0, r1, c);
360b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asrs r0, r1, #0", 0x7fffffff, r0, r1, c);
361b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asrs r0, r1, #1", 0x7fffffff, r0, r1, c);
362b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asrs r0, r1, #31", 0x7fffffff, r0, r1, c);
363b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asrs r0, r1, #32", 0x7fffffff, r0, r1, c);
364b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asrs r0, r1, #16", 0x00010000, r0, r1, c);
365b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asrs r0, r1, #17", 0x00010000, r0, r1, c);
366b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("asrs r0, r1, #18", 0x00010000, r0, r1, c);
367b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
368b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
369b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("ROR\n");
370b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
371b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("ror  r0, r1, r2", 0x00088000, 0, r0, r1, r2, c);
372b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("ror  r0, r1, r2", 0x80088000, 1, r0, r1, r2, c);
373b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("ror  r0, r1, r2", 0x00088000, 1, r0, r1, r2, c);
374b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("ror  r0, r1, r2", 0x00088000, 2, r0, r1, r2, c);
375b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("ror  r0, r1, r2", 0x00088000, 31, r0, r1, r2, c);
376b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("ror  r0, r1, r2", 0x00088000, 32, r0, r1, r2, c);
377b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("ror  r0, r1, r2", 0x00088000, 33, r0, r1, r2, c);
378b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("ror  r0, r1, r2", 0x00088000, 63, r0, r1, r2, c);
379b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("ror  r0, r1, r2", 0x00088000, 64, r0, r1, r2, c);
380b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("ror  r0, r1, r2", 0x00088000, 255, r0, r1, r2, c);
381b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("ror  r0, r1, r2", 0x00088000, 256, r0, r1, r2, c);
382b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("ror  r0, r1, r2", 0x80088000, 256, r0, r1, r2, c);
383b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("ror  r0, r1, r2", 0x00088000, 257, r0, r1, r2, c);
384b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
385b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
386b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("RORS\n");
387b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
388b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("rors r0, r1, r2", 0x00088000, 0, r0, r1, r2, c);
389b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("rors r0, r1, r2", 0x80088000, 0, r0, r1, r2, c);
390b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("rors r0, r1, r2", 0x00088000, 1, r0, r1, r2, c);
391b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("rors r0, r1, r2", 0x00088000, 2, r0, r1, r2, c);
392b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("rors r0, r1, r2", 0x00088000, 31, r0, r1, r2, c);
393b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("rors r0, r1, r2", 0x00088000, 32, r0, r1, r2, c);
394b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("rors r0, r1, r2", 0x00088000, 33, r0, r1, r2, c);
395b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("rors r0, r1, r2", 0x00088000, 63, r0, r1, r2, c);
396b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("rors r0, r1, r2", 0x00088000, 64, r0, r1, r2, c);
397b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("rors r0, r1, r2", 0x00088000, 255, r0, r1, r2, c);
398b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("rors r0, r1, r2", 0x00088000, 256, r0, r1, r2, c);
399b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("rors r0, r1, r2", 0x80088000, 256, r0, r1, r2, c);
400b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("rors r0, r1, r2", 0x00088000, 257, r0, r1, r2, c);
401b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
402b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
403b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("ROR immediate\n");
404b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
405b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("ror  r0, r1, #0", 0x00088000, r0, r1, c);
406b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("ror  r0, r1, #1", 0x00088000, r0, r1, c);
407b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("ror  r0, r1, #31", 0x00088000, r0, r1, c);
408b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("ror  r0, r1, #16", 0x00010000, r0, r1, c);
409b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("ror  r0, r1, #17", 0x00010000, r0, r1, c);
410b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("ror  r0, r1, #18", 0x00010000, r0, r1, c);
411b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
412b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
413b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("RORS immediate\n");
414b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
415b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("rors r0, r1, #0", 0x00088000, r0, r1, c);
416b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("rors r0, r1, #1", 0x00088000, r0, r1, c);
417b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("rors r0, r1, #31", 0x00088000, r0, r1, c);
418b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("rors r0, r1, #16", 0x00010000, r0, r1, c);
419b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("rors r0, r1, #17", 0x00010000, r0, r1, c);
420b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("rors r0, r1, #18", 0x00010000, r0, r1, c);
421b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
422b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
423b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("shift with barrel shifter\n");
424b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
425b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
426b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
427b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
428b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
429b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
430b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
431b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
432b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
433b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
434b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
435b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
436b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
437b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 0, r0, r1, r2, r3, c);
438b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 1, r0, r1, r2, r3, c);
439b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 31, r0, r1, r2, r3, c);
440b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 32, r0, r1, r2, r3, c);
441b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 255, r0, r1, r2, r3, c);
442b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 256, r0, r1, r2, r3, c);
443b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
444b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
445b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
446b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
447b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 0, r0, r1, r2, r3, c);
448b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 1, r0, r1, r2, r3, c);
449b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 2, r0, r1, r2, r3, c);
450b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 3, r0, r1, r2, r3, c);
451b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 4, r0, r1, r2, r3, c);
452b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 5, r0, r1, r2, r3, c);
453b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
454b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
455b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
456b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 0, r0, r1, r2, r3, c);
457b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x80088000, 0, r0, r1, r2, r3, c);
458b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 1, r0, r1, r2, r3, c);
459b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 31, r0, r1, r2, r3, c);
460b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 32, r0, r1, r2, r3, c);
461b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 255, r0, r1, r2, r3, c);
462b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 256, r0, r1, r2, r3, c);
463b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x80088000, 256, r0, r1, r2, r3, c);
464b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 257, r0, r1, r2, r3, c);
465b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
466b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
467b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
468b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
469b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
470b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
471b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
472b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
473b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
474b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
475b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
476b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
477b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
478b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
479b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
480b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
481b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 0, r0, r1, r2, r3, c);
482b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x80088000, 0, r0, r1, r2, r3, c);
483b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 1, r0, r1, r2, r3, c);
484b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 31, r0, r1, r2, r3, c);
485b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 32, r0, r1, r2, r3, c);
486b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 255, r0, r1, r2, r3, c);
487b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 256, r0, r1, r2, r3, c);
488b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x80088000, 256, r0, r1, r2, r3, c);
489b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 257, r0, r1, r2, r3, c);
490b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
491b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
492b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
493b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adcs r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
494b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adcs r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
495b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adcs r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
496b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("adcs r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
497b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
498b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
499b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("MUL\n");
500b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("mul  r0, r1, r2", 0, 0, r0, r1, r2, 0);
501b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("mul  r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
502b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("mul  r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0);
503b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("mul  r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0);
504b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("mul  r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0);
505b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("mul  r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0);
506b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
507b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("MULS\n");
508b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("muls r0, r1, r2", 0, 0, r0, r1, r2, 0);
509b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("muls r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
510b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("muls r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0);
511b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("muls r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0);
512b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("muls r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0);
513b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("muls r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0);
514b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
515b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("MLA\n");
516b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mla  r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0);
517b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mla  r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0);
518b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mla  r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0);
519b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mla  r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0);
520b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mla  r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0);
521b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mla  r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0);
522b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
523b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("MLAS\n");
524b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mlas r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0);
525b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mlas r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0);
526b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mlas r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0);
527b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mlas r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0);
528b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mlas r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0);
529b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mlas r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0);
530b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
531b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("MLS\n");
532b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mls  r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0);
533b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mls  r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0);
534b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mls  r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0);
535b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mls  r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0);
536b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mls  r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0);
537b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4("mls  r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0);
538b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
539b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("UMULL\n");
540b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
541b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
542b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
543b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
544b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
545b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
546b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
547b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
548b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
549b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
550b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
551b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
552b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
553b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("SMULL\n");
554b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
555b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
556b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
557b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
558b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
559b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
560b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
561b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
562b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
563b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
564b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
565b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
566b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
567b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("UMLAL\n");
568b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
569b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
570b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
571b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
572b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
573b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
574b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
575b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
576b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
577b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
578b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
579b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlals r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
580b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
581b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
582b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
583b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
584b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
585b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
586b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
587b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("SMLAL\n");
588b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
589b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
590b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
591b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
592b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
593b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
594b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
595b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
596b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
597b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
598b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
599b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlals r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
600b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
601b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
602b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
603b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
604b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
605b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
606b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
607b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("CLZ\n");
608b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRY
609b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("clz  r0, r1", 0, r0, r1, c);
610b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("clz  r0, r1", 1, r0, r1, c);
611b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("clz  r0, r1", 0x10, r0, r1, c);
612b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("clz  r0, r1", 0xffffffff, r0, r1, c);
613b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTCARRYEND
614b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
615b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("extend instructions\n");
616b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxtb r0, r1", 0, r0, r1, 0);
617b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxtb r0, r1", 1, r0, r1, 0);
618b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxtb r0, r1", 0xff, r0, r1, 0);
619b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxtb r0, r1", 0xffffffff, r0, r1, 0);
620b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("sxtb r0, r1", 0, r0, r1, 0);
621b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("sxtb r0, r1", 1, r0, r1, 0);
622b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("sxtb r0, r1", 0xff, r0, r1, 0);
623b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("sxtb r0, r1", 0xffffffff, r0, r1, 0);
624b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
625b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxth r0, r1", 0, r0, r1, 0);
626b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxth r0, r1", 1, r0, r1, 0);
627b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxth r0, r1", 0xffff, r0, r1, 0);
628b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxth r0, r1", 0xffffffff, r0, r1, 0);
629b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("sxth r0, r1", 0, r0, r1, 0);
630b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("sxth r0, r1", 1, r0, r1, 0);
631b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("sxth r0, r1", 0x7fff, r0, r1, 0);
632b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("sxth r0, r1", 0xffff, r0, r1, 0);
633b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("sxth r0, r1", 0x10ffff, r0, r1, 0);
634b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("sxth r0, r1", 0x107fff, r0, r1, 0);
635b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("sxth r0, r1", 0xffffffff, r0, r1, 0);
636b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
637b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxtb r0, r1, ror #0", 0x000000ff, r0, r1, 0);
638b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxtb r0, r1, ror #8", 0x000000ff, r0, r1, 0);
639b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxtb r0, r1, ror #8", 0x0000ff00, r0, r1, 0);
640b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxtb r0, r1, ror #16", 0x00ff0000, r0, r1, 0);
641b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxtb r0, r1, ror #24", 0xff000000, r0, r1, 0);
642b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
643b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxtb16 r0, r1", 0xffffffff, r0, r1, 0);
644b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("uxtb16 r0, r1, ror #16", 0x0000ffff, r0, r1, 0);
645b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("sxtb16 r0, r1", 0xffffffff, r0, r1, 0);
646b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("sxtb16 r0, r1", 0x00ff00ff, r0, r1, 0);
647b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("sxtb16 r0, r1", 0x007f007f, r0, r1, 0);
648b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
649b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("------------ BFI ------------\n");
650b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
651b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        /* bfi  rDst, rSrc, #lsb-in-dst, #number-of-bits-to-copy */
652b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfi  r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0);
653b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfi  r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0);
654b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfi  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
655b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
656b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfi  r0, r1, #19, #11", 0xFFFFFFFF, r0, r1, 0);
657b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfi  r0, r1, #20, #11", 0xFFFFFFFF, r0, r1, 0);
658b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfi  r0, r1, #21, #11", 0xFFFFFFFF, r0, r1, 0);
659b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
660b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfi  r0, r1, #0, #32", 0xFFFFFFFF, r0, r1, 0);
661b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfi  r0, r1, #1, #31", 0xFFFFFFFF, r0, r1, 0);
662b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
663b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfi  r0, r1, #29, #3", 0xFFFFFFFF, r0, r1, 0);
664b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfi  r0, r1, #30, #2", 0xFFFFFFFF, r0, r1, 0);
665b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfi  r0, r1, #31, #1", 0xFFFFFFFF, r0, r1, 0);
666b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
667b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("------------ BFC ------------\n");
668b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
669b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        /* bfi  rDst, #lsb-in-dst, #number-of-bits-to-copy */
670b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfc  r0, #0, #11", 0xAAAAAAAA, r0, r1, 0);
671b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfc  r0, #1, #11", 0xAAAAAAAA, r0, r1, 0);
672b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfc  r0, #2, #11", 0xAAAAAAAA, r0, r1, 0);
673b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
674b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfc  r0, #19, #11", 0xFFFFFFFF, r0, r1, 0);
675b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfc  r0, #20, #11", 0xFFFFFFFF, r0, r1, 0);
676b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfc  r0, #21, #11", 0xFFFFFFFF, r0, r1, 0);
677b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
678b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfc  r0, #0, #32", 0xFFFFFFFF, r0, r1, 0);
679b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfc  r0, #1, #31", 0xFFFFFFFF, r0, r1, 0);
680b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
681b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfc  r0, #29, #3", 0xFFFFFFFF, r0, r1, 0);
682b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfc  r0, #30, #2", 0xFFFFFFFF, r0, r1, 0);
683b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST2("bfc  r0, #31, #1", 0xFFFFFFFF, r0, r1, 0);
684b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
685b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("------------ SBFX ------------\n");
686b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
687b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        /* sbfx rDst, rSrc, #lsb, #width */
688b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #0, #1", 0x00000000, r0, r1, 0);
689b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #0, #1", 0x00000001, r0, r1, 0);
690b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #1, #1", 0x00000000, r0, r1, 0);
691b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #1, #1", 0x00000001, r0, r1, 0);
692b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #1, #1", 0x00000002, r0, r1, 0);
693b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #1, #1", 0x00000003, r0, r1, 0);
694b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
695b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #0, #2", 0x00000000, r0, r1, 0);
696b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #0, #2", 0x00000001, r0, r1, 0);
697b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #1, #2", 0x00000000, r0, r1, 0);
698b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #1, #2", 0x00000001, r0, r1, 0);
699b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #1, #2", 0x00000002, r0, r1, 0);
700b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #1, #2", 0x00000003, r0, r1, 0);
701b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
702b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0);
703b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0);
704b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
705b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
706b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
707b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
708b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #31, #1", 0xAAAAAAAA, r0, r1, 0);
709b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("sbfx  r0, r1, #30, #2", 0xAAAAAAAA, r0, r1, 0);
710b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
711b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("------------ UBFX ------------\n");
712b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
713b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        /* ubfx rDst, rSrc, #lsb, #width */
714b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #0, #1", 0x00000000, r0, r1, 0);
715b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #0, #1", 0x00000001, r0, r1, 0);
716b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #1, #1", 0x00000000, r0, r1, 0);
717b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #1, #1", 0x00000001, r0, r1, 0);
718b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #1, #1", 0x00000002, r0, r1, 0);
719b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #1, #1", 0x00000003, r0, r1, 0);
720b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
721b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #0, #2", 0x00000000, r0, r1, 0);
722b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #0, #2", 0x00000001, r0, r1, 0);
723b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #1, #2", 0x00000000, r0, r1, 0);
724b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #1, #2", 0x00000001, r0, r1, 0);
725b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #1, #2", 0x00000002, r0, r1, 0);
726b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #1, #2", 0x00000003, r0, r1, 0);
727b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
728b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0);
729b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0);
730b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
731b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
732b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
733b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
734b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #31, #1", 0xAAAAAAAA, r0, r1, 0);
735b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST2("ubfx  r0, r1, #30, #2", 0xAAAAAAAA, r0, r1, 0);
736b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
737b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("------------ SMULL{B,T}{B,T} ------------\n");
738b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        /* SMULxx rD, rN, rM */
739b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
740b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("smulbb r0, r1, r2", 0x00030000, 0x00040000,  r0, r1, r2, 0);
741b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("smulbb r0, r1, r2", 0x00030001, 0x00040002,  r0, r1, r2, 0);
742b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("smulbb r0, r1, r2", 0x00038001, 0x00047fff,  r0, r1, r2, 0);
743b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("smulbb r0, r1, r2", 0x00037fff, 0x00047fff,  r0, r1, r2, 0);
744b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	TESTINST3("smulbb r0, r1, r2", 0x0003ffff, 0x0004ffff,  r0, r1, r2, 0);
745b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
746b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("------------ SXTAB ------------\n");
747b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182819,
748b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
749b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182819,
750b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
751b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182819,
752b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
753b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182819,
754b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
755b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
756b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182899,
757b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
758b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182899,
759b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
760b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182899,
761b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
762b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182899,
763b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
764b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
765b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("------------ UXTAB ------------\n");
766b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182819,
767b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
768b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182819,
769b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
770b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182819,
771b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
772b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182819,
773b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
774b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
775b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182899,
776b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
777b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182899,
778b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
779b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182899,
780b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
781b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182899,
782b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
783b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
784b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("------------ SXTAH ------------\n");
785b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtah r0, r1, r2, ROR #24", 0x31415927, 0x27182819,
786b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
787b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtah r0, r1, r2, ROR #16", 0x31415927, 0x27182819,
788b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
789b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27182819,
790b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
791b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27182819,
792b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
793b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
794b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtah r0, r1, r2, ROR #24", 0x31415927, 0x27189819,
795b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
796b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtah r0, r1, r2, ROR #16", 0x31415927, 0x27189819,
797b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
798b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27189819,
799b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
800b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("sxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27189819,
801b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
802b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
803b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("------------ UXTAH ------------\n");
804b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtah r0, r1, r2, ROR #24", 0x31415927, 0x27182819,
805b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
806b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtah r0, r1, r2, ROR #16", 0x31415927, 0x27182819,
807b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
808b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27182819,
809b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
810b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27182819,
811b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
812b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
813b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtah r0, r1, r2, ROR #24", 0x31415927, 0x27189819,
814b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
815b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtah r0, r1, r2, ROR #16", 0x31415927, 0x27189819,
816b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
817b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtah r0, r1, r2, ROR #8 ", 0x31415927, 0x27189819,
818b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
819b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        TESTINST3("uxtah r0, r1, r2, ROR #0 ", 0x31415927, 0x27189819,
820b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov                  r0, r1, r2, 0);
821b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
822b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("------------ PLD/PLDW (begin) ------------\n");
823b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        /* These don't have any effect on the architected state, so,
824b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov           uh, there's no result values to check.  Just _do_ some of
825b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov           them and check Valgrind's instruction decoder eats them up
826b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov           without complaining. */
827b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        { int alocal;
828b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          printf("pld  reg +/- imm12  cases\n");
829b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          __asm__ __volatile__( "pld [%0, #128]" : :/*in*/"r"(&alocal) );
830b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          __asm__ __volatile__( "pld [%0, #-128]" : :/*in*/"r"(&alocal) );
831b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          __asm__ __volatile__( "pld [r15, #-128]" : :/*in*/"r"(&alocal) );
832b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
833b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          // apparently pldw is v7 only
834b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          //__asm__ __volatile__( "pldw [%0, #128]" : :/*in*/"r"(&alocal) );
835b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          //__asm__ __volatile__( "pldw [%0, #-128]" : :/*in*/"r"(&alocal) );
836b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          //__asm__ __volatile__( "pldw [r15, #128]" : :/*in*/"r"(&alocal) );
837b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
838b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          printf("pld  reg +/- shifted reg  cases\n");
839b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          __asm__ __volatile__( "pld [%0, %1]" : : /*in*/"r"(&alocal), "r"(0) );
840b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          __asm__ __volatile__( "pld [%0, %1, LSL #1]" : : /*in*/"r"(&alocal), "r"(0) );
841b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          __asm__ __volatile__( "pld [%0, %1, LSR #1]" : : /*in*/"r"(&alocal), "r"(0) );
842b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          __asm__ __volatile__( "pld [%0, %1, ASR #1]" : : /*in*/"r"(&alocal), "r"(0) );
843b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          __asm__ __volatile__( "pld [%0, %1, ROR #1]" : : /*in*/"r"(&alocal), "r"(0) );
844b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov          __asm__ __volatile__( "pld [%0, %1, RRX]" : : /*in*/"r"(&alocal), "r"(0) );
845b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov        }
846b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov	printf("------------ PLD/PLDW (done) ------------\n");
847b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov
848ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	printf("------------ RBIT ------------\n");
849ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rbit r0, r1", 0x00000000, r0, r1, 0);
850ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rbit r0, r1", 0xFFFFFFFF, r0, r1, 0);
851ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rbit r0, r1", 0x80000000, r0, r1, 0);
852ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rbit r0, r1", 0x00000001, r0, r1, 0);
853ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rbit r0, r1", 0x31415927, r0, r1, 0);
854ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rbit r0, r1", 0x14141562, r0, r1, 0);
855ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rbit r0, r1", 0xabe8391f, r0, r1, 0);
856ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rbit r0, r1", 0x9028aa80, r0, r1, 0);
857ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rbit r0, r1", 0xead1fc6d, r0, r1, 0);
858ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rbit r0, r1", 0x35c98c55, r0, r1, 0);
859ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rbit r0, r1", 0x534af1eb, r0, r1, 0);
860ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rbit r0, r1", 0x45511b08, r0, r1, 0);
861ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rbit r0, r1", 0x90077f71, r0, r1, 0);
862ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rbit r0, r1", 0xde8ca84b, r0, r1, 0);
863ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rbit r0, r1", 0xe37a0dda, r0, r1, 0);
864ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rbit r0, r1", 0xe5b83d4b, r0, r1, 0);
865ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rbit r0, r1", 0xbb6d14ec, r0, r1, 0);
866ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rbit r0, r1", 0x68983cc9, r0, r1, 0);
867ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
868ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	printf("------------ REV ------------\n");
869ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rev r0, r1", 0x00000000, r0, r1, 0);
870ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rev r0, r1", 0xFFFFFFFF, r0, r1, 0);
871ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rev r0, r1", 0x80000000, r0, r1, 0);
872ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rev r0, r1", 0x00000001, r0, r1, 0);
873ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rev r0, r1", 0x31415927, r0, r1, 0);
874ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rev r0, r1", 0x14141562, r0, r1, 0);
875ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev r0, r1", 0xabe8391f, r0, r1, 0);
876ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev r0, r1", 0x9028aa80, r0, r1, 0);
877ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev r0, r1", 0xead1fc6d, r0, r1, 0);
878ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev r0, r1", 0x35c98c55, r0, r1, 0);
879ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev r0, r1", 0x534af1eb, r0, r1, 0);
880ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev r0, r1", 0x45511b08, r0, r1, 0);
881ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev r0, r1", 0x90077f71, r0, r1, 0);
882ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev r0, r1", 0xde8ca84b, r0, r1, 0);
883ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev r0, r1", 0xe37a0dda, r0, r1, 0);
884ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev r0, r1", 0xe5b83d4b, r0, r1, 0);
885ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev r0, r1", 0xbb6d14ec, r0, r1, 0);
886ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev r0, r1", 0x68983cc9, r0, r1, 0);
887ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
888ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	printf("------------ REV16 ------------\n");
889ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rev16 r0, r1", 0x00000000, r0, r1, 0);
890ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rev16 r0, r1", 0xFFFFFFFF, r0, r1, 0);
891ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rev16 r0, r1", 0x80000000, r0, r1, 0);
892ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rev16 r0, r1", 0x00000001, r0, r1, 0);
893ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rev16 r0, r1", 0x31415927, r0, r1, 0);
894ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	TESTINST2("rev16 r0, r1", 0x14141562, r0, r1, 0);
895ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev16 r0, r1", 0xabe8391f, r0, r1, 0);
896ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev16 r0, r1", 0x9028aa80, r0, r1, 0);
897ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev16 r0, r1", 0xead1fc6d, r0, r1, 0);
898ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev16 r0, r1", 0x35c98c55, r0, r1, 0);
899ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev16 r0, r1", 0x534af1eb, r0, r1, 0);
900ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev16 r0, r1", 0x45511b08, r0, r1, 0);
901ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev16 r0, r1", 0x90077f71, r0, r1, 0);
902ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev16 r0, r1", 0xde8ca84b, r0, r1, 0);
903ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev16 r0, r1", 0xe37a0dda, r0, r1, 0);
904ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev16 r0, r1", 0xe5b83d4b, r0, r1, 0);
905ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev16 r0, r1", 0xbb6d14ec, r0, r1, 0);
906ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown   TESTINST2("rev16 r0, r1", 0x68983cc9, r0, r1, 0);
907ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
908ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	printf("------------ NOP (begin) ------------\n");
909ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        printf("nop\n");
910ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        __asm__ __volatile__("nop" ::: "memory","cc");
911ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        printf("nopeq\n");
912ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        __asm__ __volatile__("nopeq" ::: "memory","cc");
913ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        printf("nopne\n");
914ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown        __asm__ __volatile__("nopne" ::: "memory","cc");
915ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	printf("------------ NOP (end) ------------\n");
916ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown
917663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng	printf("------------ SMMUL ------------\n");
918663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmul   r0, r1, r2", 0, 0, r0, r1, r2, 0);
919663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmul   r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
920663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmul   r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0);
921663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmul   r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0);
922663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmul   r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0);
923663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmul   r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0);
924663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmul   r0, r1, r2", 0xe444dc25, 0xd5eef620, r0, r1, r2, 0);
925663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmul   r0, r1, r2", 0x06ea9b2a, 0xa2108661, r0, r1, r2, 0);
926663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmul   r0, r1, r2", 0x448f3a5f, 0x17aecf57, r0, r1, r2, 0);
927663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmul   r0, r1, r2", 0x4b0c2337, 0xffa63d6c, r0, r1, r2, 0);
928663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmul   r0, r1, r2", 0xf91d5f56, 0x088bc0f9, r0, r1, r2, 0);
929663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
930663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmulr  r0, r1, r2", 0, 0, r0, r1, r2, 0);
931663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmulr  r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
932663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmulr  r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0);
933663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmulr  r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0);
934663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmulr  r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0);
935663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmulr  r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0);
936663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmulr  r0, r1, r2", 0xe444dc25, 0xd5eef620, r0, r1, r2, 0);
937663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmulr  r0, r1, r2", 0x06ea9b2a, 0xa2108661, r0, r1, r2, 0);
938663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmulr  r0, r1, r2", 0x448f3a5f, 0x17aecf57, r0, r1, r2, 0);
939663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmulr  r0, r1, r2", 0x4b0c2337, 0xffa63d6c, r0, r1, r2, 0);
940663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng        TESTINST3("smmulr  r0, r1, r2", 0xf91d5f56, 0x088bc0f9, r0, r1, r2, 0);
941663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng
942ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown	return 0;
943ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}
944