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