]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add a test program for ARM v5 integer instructions, and also for some
authorJulian Seward <jseward@acm.org>
Sun, 3 Jan 2010 23:46:03 +0000 (23:46 +0000)
committerJulian Seward <jseward@acm.org>
Sun, 3 Jan 2010 23:46:03 +0000 (23:46 +0000)
v6 instructions.  (Johan Björk)

git-svn-id: svn://svn.valgrind.org/valgrind/trunk@11003

none/tests/arm/Makefile.am
none/tests/arm/v6int.c [new file with mode: 0644]
none/tests/arm/v6int.stderr.exp [new file with mode: 0644]
none/tests/arm/v6int.stdout.exp [new file with mode: 0644]
none/tests/arm/v6int.vgtest [new file with mode: 0644]

index 1b9459a39d414439557131106bffea990283792f..6c713e56f1f7046de1bcde6ef619068245bdf4fd 100644 (file)
@@ -1,23 +1,19 @@
 
 include $(top_srcdir)/Makefile.tool-tests.am
 
-#dist_noinst_SCRIPTS = filter_cpuid filter_stderr gen_insn_test.pl
-dist_noinst_SCRIPTS =
+dist_noinst_SCRIPTS = filter_stderr
 
+EXTRA_DIST = \
+       v6int.stdout.exp v6int.stderr.exp v6int.vgtest
 
-### jrs: re-check this against known-good equivalents, eg x86 version
-
-EXTRA_DIST = $(noinst_SCRIPTS)
-#      \
-#      instructions.stderr.exp instructions.stdout.exp
-
-# if any tests appear here, remember to include @FLAG_M32@ in the
-# compilation flags
-#
-
-#check_PROGRAMS = instructions
-check_PROGRAMS =
+check_PROGRAMS = \
+       v6int
 
 AM_CFLAGS    += @FLAG_M32@
 AM_CXXFLAGS  += @FLAG_M32@
 AM_CCASFLAGS += @FLAG_M32@
+
+# need to specify cpu here because inline assembly in v6int.c
+# contains various v6 and v7 insns, which the assembler by
+# default rejects.
+v6int_CFLAGS   = $(AM_CFLAGS) -g -O -mcpu=cortex-a8
diff --git a/none/tests/arm/v6int.c b/none/tests/arm/v6int.c
new file mode 100644 (file)
index 0000000..5059f5d
--- /dev/null
@@ -0,0 +1,785 @@
+
+/* How to compile:
+   gcc -O -g -Wall -mcpu=cortex-a8 -o testarmv6int testarmv6int.c
+*/
+
+#include <stdio.h>
+
+/* test macros to generate and output the result of a single instruction */
+#define TESTINST2(instruction, RMval, RD, RM, carryin) \
+{ \
+       unsigned int out; \
+       unsigned int cpsr; \
+\
+       __asm__ volatile( \
+               "movs %3,%3;" \
+               "msrne cpsr_f,#(1<<29);" \
+               "msreq cpsr_f,#0;" \
+               "mov " #RM ",%2;" \
+                /* set #RD to 0x55555555 so we can see which parts get overwritten */ \
+                "mov " #RD ", #0x55" "\n\t" \
+                "orr " #RD "," #RD "," #RD ", LSL #8" "\n\t" \
+                "orr " #RD "," #RD "," #RD ", LSL #16" "\n\t" \
+               instruction ";" \
+               "mov %0," #RD ";" \
+               "mrs %1,cpsr;" \
+               : "=&r" (out), "=&r" (cpsr) \
+               : "r" (RMval), "r" (carryin) \
+               : #RD, #RM, "cc", "memory" \
+       ); \
+       printf("%s :: rd 0x%08x rm 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
+               instruction, out, RMval, \
+               carryin ? 1 : 0, \
+               cpsr & 0xffff0000, \
+               ((1<<31) & cpsr) ? 'N' : ' ', \
+               ((1<<30) & cpsr) ? 'Z' : ' ', \
+               ((1<<29) & cpsr) ? 'C' : ' ', \
+               ((1<<28) & cpsr) ? 'V' : ' ' \
+               ); \
+}
+
+#define TESTINST3(instruction, RMval, RNval, RD, RM, RN, carryin) \
+{ \
+       unsigned int out; \
+       unsigned int cpsr; \
+\
+       __asm__ volatile( \
+               "movs %4,%4;" \
+               "msrne cpsr_f,#(1<<29);" \
+               "msreq cpsr_f,#0;" \
+               "mov " #RM ",%2;" \
+               "mov " #RN ",%3;" \
+               instruction ";" \
+               "mov %0," #RD ";" \
+               "mrs %1,cpsr;" \
+               : "=&r" (out), "=&r" (cpsr) \
+               : "r" (RMval), "r" (RNval), "r" (carryin) \
+               : #RD, #RM, #RN, "cc", "memory" \
+       ); \
+       printf("%s :: rd 0x%08x rm 0x%08x, rn 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
+               instruction, out, RMval, RNval, \
+               carryin ? 1 : 0, \
+               cpsr & 0xffff0000, \
+               ((1<<31) & cpsr) ? 'N' : ' ', \
+               ((1<<30) & cpsr) ? 'Z' : ' ', \
+               ((1<<29) & cpsr) ? 'C' : ' ', \
+               ((1<<28) & cpsr) ? 'V' : ' ' \
+               ); \
+}
+
+#define TESTINST4(instruction, RMval, RNval, RSval, RD, RM, RN, RS, carryin) \
+{ \
+       unsigned int out; \
+       unsigned int cpsr; \
+\
+       __asm__ volatile( \
+               "movs %5,%5;" \
+               "msrne cpsr_f,#(1<<29);" \
+               "msreq cpsr_f,#0;" \
+               "mov " #RM ",%2;" \
+               "mov " #RN ",%3;" \
+               "mov " #RS ",%4;" \
+               instruction ";" \
+               "mov %0," #RD ";" \
+               "mrs %1,cpsr;" \
+               : "=&r" (out), "=&r" (cpsr) \
+               : "r" (RMval), "r" (RNval), "r" (RSval), "r" (carryin) \
+               : #RD, #RM, #RN, #RS, "cc", "memory" \
+       ); \
+       printf("%s :: rd 0x%08x rm 0x%08x, rn 0x%08x rs 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
+               instruction, out, RMval, RNval, RSval, \
+               carryin ? 1 : 0, \
+               cpsr & 0xffff0000, \
+               ((1<<31) & cpsr) ? 'N' : ' ', \
+               ((1<<30) & cpsr) ? 'Z' : ' ', \
+               ((1<<29) & cpsr) ? 'C' : ' ', \
+               ((1<<28) & cpsr) ? 'V' : ' ' \
+               ); \
+}
+
+#define TESTINST4_2OUT(instruction, RDval, RD2val, RMval, RSval, RD, RD2, RM, RS, carryin) \
+{ \
+       unsigned int out; \
+       unsigned int out2; \
+       unsigned int cpsr; \
+\
+       __asm__ volatile( \
+               "movs %7,%7;" \
+               "msrne cpsr_f,#(1<<29);" \
+               "msreq cpsr_f,#0;" \
+               "mov " #RD ",%3;" \
+               "mov " #RD2 ",%4;" \
+               "mov " #RM ",%5;" \
+               "mov " #RS ",%6;" \
+               instruction ";" \
+               "mov %0," #RD ";" \
+               "mov %1," #RD2 ";" \
+               "mrs %2,cpsr;" \
+               : "=&r" (out), "=&r" (out2), "=&r" (cpsr) \
+               : "r" (RDval), "r" (RD2val), "r" (RMval), "r" (RSval), "r" (carryin) \
+               : #RD, #RD2, #RM, #RS, "cc", "memory" \
+       ); \
+       printf("%s :: rd 0x%08x rd2 0x%08x, rm 0x%08x rs 0x%08x, carryin %d, cpsr 0x%08x %c%c%c%c\n", \
+               instruction, out, out2, RMval, RSval, \
+               carryin ? 1 : 0, \
+               cpsr & 0xffff0000, \
+               ((1<<31) & cpsr) ? 'N' : ' ', \
+               ((1<<30) & cpsr) ? 'Z' : ' ', \
+               ((1<<29) & cpsr) ? 'C' : ' ', \
+               ((1<<28) & cpsr) ? 'V' : ' ' \
+               ); \
+}
+
+/* helpers */
+#define TESTCARRY { int c = 0; for (c = 0; c < 2; c++) {
+#define TESTCARRYEND }}
+
+
+
+
+int main(int argc, char **argv)
+{
+
+       printf("MOV\n");
+       TESTINST2("mov  r0, r1", 1, r0, r1, 0);
+       TESTINST2("cpy  r0, r1", 1, r0, r1, 0);
+       TESTINST2("mov  r0, #0", 0, r0, r1, 0);
+       TESTINST2("mov  r0, #1", 0, r0, r1, 0);
+       TESTCARRY
+       TESTINST2("movs r0, r1", 1, r0, r1, c);
+       TESTINST2("movs r0, r1", 0, r0, r1, c);
+       TESTINST2("movs r0, r1", 0x80000000, r0, r1, c);
+       TESTINST2("movs r0, #0", 0, r0, r1, c);
+       TESTINST2("movs r0, #1", 0, r0, r1, c);
+       TESTCARRYEND
+
+       printf("MVN\n");
+       TESTINST2("mvn  r0, r1", 1, r0, r1, 0);
+       TESTCARRY
+       TESTINST2("mvns r0, r1", 1, r0, r1, c);
+       TESTINST2("mvns r0, r1", 0, r0, r1, c);
+       TESTINST2("mvns r0, r1", 0x80000000, r0, r1, c);
+       TESTCARRYEND
+
+       printf("ADD\n");
+       TESTINST3("adds r0, r1, r2", 0, 0, r0, r1, r2, 0);
+       TESTINST3("adds r0, r1, r2", 0, 1, r0, r1, r2, 0);
+       TESTINST3("adds r0, r1, r2", 1, 0, r0, r1, r2, 0);
+       TESTINST3("adds r0, r1, r2", 1, 1, r0, r1, r2, 0);
+       TESTINST3("adds r0, r1, r2", 0, -1, r0, r1, r2, 0);
+       TESTINST3("adds r0, r1, r2", 1, -1, r0, r1, r2, 0);
+       TESTINST3("adds r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, 0);
+       TESTINST3("adds r0, r1, r2", 0x80000000, -1, r0, r1, r2, 0);
+       TESTINST3("adds r0, r1, r2", 0x80000000, 0, r0, r1, r2, 0);
+
+       printf("ADC\n");
+       TESTINST3("adcs r0, r1, r2", 0, 0, r0, r1, r2, 0);
+       TESTINST3("adcs r0, r1, r2", 0, 0, r0, r1, r2, 1);
+
+       printf("LSL\n");
+       TESTINST3("lsl  r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
+       TESTINST3("lsl  r0, r1, r2", 0xffffffff, 1, r0, r1, r2, 0);
+       TESTINST3("lsl  r0, r1, r2", 0xffffffff, 2, r0, r1, r2, 0);
+       TESTINST3("lsl  r0, r1, r2", 0xffffffff, 31, r0, r1, r2, 0);
+       TESTINST3("lsl  r0, r1, r2", 0xffffffff, 32, r0, r1, r2, 0);
+       TESTINST3("lsl  r0, r1, r2", 0xffffffff, 33, r0, r1, r2, 0);
+       TESTINST3("lsl  r0, r1, r2", 0xffffffff, 63, r0, r1, r2, 0);
+       TESTINST3("lsl  r0, r1, r2", 0xffffffff, 64, r0, r1, r2, 0);
+       TESTINST3("lsl  r0, r1, r2", 0xffffffff, 255, r0, r1, r2, 0);
+       TESTINST3("lsl  r0, r1, r2", 0xffffffff, 256, r0, r1, r2, 0);
+
+       TESTINST3("lsl  r0, r1, r2", 0x1, 0, r0, r1, r2, 0);
+       TESTINST3("lsl  r0, r1, r2", 0x1, 1, r0, r1, r2, 0);
+       TESTINST3("lsl  r0, r1, r2", 0x1, 31, r0, r1, r2, 0);
+       TESTINST3("lsl  r0, r1, r2", 0x2, 31, r0, r1, r2, 0);
+
+       printf("LSLS\n");
+       TESTCARRY
+       TESTINST3("lsls r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
+       TESTINST3("lsls r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
+       TESTINST3("lsls r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
+       TESTINST3("lsls r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
+       TESTINST3("lsls r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
+       TESTINST3("lsls r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
+       TESTINST3("lsls r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
+       TESTINST3("lsls r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
+       TESTINST3("lsls r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
+       TESTINST3("lsls r0, r1, r2", 0xffffffff, 256, r0, r1, r2, c);
+       TESTINST3("lsls r0, r1, r2", 0x1, 0, r0, r1, r2, c);
+       TESTINST3("lsls r0, r1, r2", 0x1, 1, r0, r1, r2, c);
+       TESTINST3("lsls r0, r1, r2", 0x1, 31, r0, r1, r2, c);
+       TESTINST3("lsls r0, r1, r2", 0x2, 31, r0, r1, r2, c);
+       TESTCARRYEND
+
+       printf("LSL immediate\n");
+       TESTCARRY
+       TESTINST2("lsl  r0, r1, #0", 0xffffffff, r0, r1, c);
+       TESTINST2("lsl  r0, r1, #1", 0xffffffff, r0, r1, c);
+       TESTINST2("lsl  r0, r1, #31", 0xffffffff, r0, r1, c);
+       TESTINST2("lsl  r0, r1, #0", 0x1, r0, r1, c);
+       TESTINST2("lsl  r0, r1, #1", 0x1, r0, r1, c);
+       TESTINST2("lsl  r0, r1, #31", 0x1, r0, r1, c);
+       TESTINST2("lsl  r0, r1, #31", 0x2, r0, r1, c);
+       TESTCARRYEND
+
+       printf("LSLS immediate\n");
+       TESTCARRY
+       TESTINST2("lsls r0, r1, #0", 0xffffffff, r0, r1, c);
+       TESTINST2("lsls r0, r1, #1", 0xffffffff, r0, r1, c);
+       TESTINST2("lsls r0, r1, #31", 0xffffffff, r0, r1, c);
+       TESTINST2("lsls r0, r1, #0", 0x1, r0, r1, c);
+       TESTINST2("lsls r0, r1, #1", 0x1, r0, r1, c);
+       TESTINST2("lsls r0, r1, #31", 0x1, r0, r1, c);
+       TESTINST2("lsls r0, r1, #31", 0x2, r0, r1, c);
+       TESTCARRYEND
+
+       printf("LSR\n");
+       TESTINST3("lsr  r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
+       TESTINST3("lsr  r0, r1, r2", 0xffffffff, 1, r0, r1, r2, 0);
+       TESTINST3("lsr  r0, r1, r2", 0xffffffff, 2, r0, r1, r2, 0);
+       TESTINST3("lsr  r0, r1, r2", 0xffffffff, 31, r0, r1, r2, 0);
+       TESTINST3("lsr  r0, r1, r2", 0xffffffff, 32, r0, r1, r2, 0);
+       TESTINST3("lsr  r0, r1, r2", 0xffffffff, 33, r0, r1, r2, 0);
+       TESTINST3("lsr  r0, r1, r2", 0xffffffff, 63, r0, r1, r2, 0);
+       TESTINST3("lsr  r0, r1, r2", 0xffffffff, 64, r0, r1, r2, 0);
+       TESTINST3("lsr  r0, r1, r2", 0xffffffff, 255, r0, r1, r2, 0);
+       TESTINST3("lsr  r0, r1, r2", 0xffffffff, 256, r0, r1, r2, 0);
+
+       printf("LSRS\n");
+       TESTCARRY
+       TESTINST3("lsrs r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
+       TESTINST3("lsrs r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
+       TESTINST3("lsrs r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
+       TESTINST3("lsrs r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
+       TESTINST3("lsrs r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
+       TESTINST3("lsrs r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
+       TESTINST3("lsrs r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
+       TESTINST3("lsrs r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
+       TESTINST3("lsrs r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
+       TESTCARRYEND
+
+       printf("LSR immediate\n");
+       TESTINST2("lsr  r0, r1, #0", 0xffffffff, r0, r1, 0);
+       TESTINST2("lsr  r0, r1, #1", 0xffffffff, r0, r1, 0);
+       TESTINST2("lsr  r0, r1, #31", 0xffffffff, r0, r1, 0);
+       TESTINST2("lsr  r0, r1, #32", 0xffffffff, r0, r1, 0);
+       TESTINST2("lsr  r0, r1, #16", 0x00010000, r0, r1, 0);
+       TESTINST2("lsr  r0, r1, #17", 0x00010000, r0, r1, 0);
+       TESTINST2("lsr  r0, r1, #18", 0x00010000, r0, r1, 0);
+
+       printf("LSRS immediate\n");
+       TESTCARRY
+       TESTINST2("lsrs r0, r1, #0", 0xffffffff, r0, r1, c);
+       TESTINST2("lsrs r0, r1, #1", 0xffffffff, r0, r1, c);
+       TESTINST2("lsrs r0, r1, #31", 0xffffffff, r0, r1, c);
+       TESTINST2("lsrs r0, r1, #32", 0xffffffff, r0, r1, c);
+       TESTINST2("lsrs r0, r1, #16", 0x00010000, r0, r1, c);
+       TESTINST2("lsrs r0, r1, #17", 0x00010000, r0, r1, c);
+       TESTINST2("lsrs r0, r1, #18", 0x00010000, r0, r1, c);
+       TESTCARRYEND
+
+       printf("ASR\n");
+       TESTCARRY
+       TESTINST3("asr  r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0xffffffff, 256, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0x7fffffff, 0, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0x7fffffff, 2, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0x7fffffff, 31, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0x7fffffff, 32, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0x7fffffff, 33, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0x7fffffff, 63, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0x7fffffff, 64, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0x7fffffff, 255, r0, r1, r2, c);
+       TESTINST3("asr  r0, r1, r2", 0x7fffffff, 256, r0, r1, r2, c);
+       TESTCARRYEND
+
+       printf("ASRS\n");
+       TESTCARRY
+       TESTINST3("asrs r0, r1, r2", 0xffffffff, 0, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0xffffffff, 1, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0xffffffff, 2, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0xffffffff, 31, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0xffffffff, 32, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0xffffffff, 33, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0xffffffff, 63, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0xffffffff, 64, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0xffffffff, 255, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0xffffffff, 256, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x7fffffff, 0, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x7fffffff, 1, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x7fffffff, 2, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x7fffffff, 31, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x7fffffff, 32, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x7fffffff, 33, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x7fffffff, 63, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x7fffffff, 64, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x7fffffff, 255, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x7fffffff, 256, r0, r1, r2, c);
+       TESTCARRYEND
+
+       TESTCARRY
+       TESTINST3("asrs r0, r1, r2", 0x8, 0, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x8, 1, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x8, 2, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x8, 3, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x8, 4, r0, r1, r2, c);
+       TESTINST3("asrs r0, r1, r2", 0x8, 5, r0, r1, r2, c);
+       TESTCARRYEND
+
+       TESTINST3("asrs r0, r1, r2", 0x80000001, 1, r0, r1, r2, 0);
+       TESTINST3("asrs r0, r1, r2", 0x80000001, 2, r0, r1, r2, 0);
+
+       printf("ASR immediate\n");
+       TESTINST2("asr  r0, r1, #0", 0xffffffff, r0, r1, 0);
+       TESTINST2("asr  r0, r1, #1", 0xffffffff, r0, r1, 0);
+       TESTINST2("asr  r0, r1, #31", 0xffffffff, r0, r1, 0);
+       TESTINST2("asr  r0, r1, #32", 0xffffffff, r0, r1, 0);
+       TESTINST2("asr  r0, r1, #0", 0x7fffffff, r0, r1, 0);
+       TESTINST2("asr  r0, r1, #1", 0x7fffffff, r0, r1, 0);
+       TESTINST2("asr  r0, r1, #31", 0x7fffffff, r0, r1, 0);
+       TESTINST2("asr  r0, r1, #32", 0x7fffffff, r0, r1, 0);
+       TESTINST2("asr  r0, r1, #16", 0x00010000, r0, r1, 0);
+       TESTINST2("asr  r0, r1, #17", 0x00010000, r0, r1, 0);
+       TESTINST2("asr  r0, r1, #18", 0x00010000, r0, r1, 0);
+
+       printf("ASRS immediate\n");
+       TESTCARRY
+       TESTINST2("asrs r0, r1, #0", 0xffffffff, r0, r1, c);
+       TESTINST2("asrs r0, r1, #1", 0xffffffff, r0, r1, c);
+       TESTINST2("asrs r0, r1, #31", 0xffffffff, r0, r1, c);
+       TESTINST2("asrs r0, r1, #32", 0xffffffff, r0, r1, c);
+       TESTINST2("asrs r0, r1, #0", 0x7fffffff, r0, r1, c);
+       TESTINST2("asrs r0, r1, #1", 0x7fffffff, r0, r1, c);
+       TESTINST2("asrs r0, r1, #31", 0x7fffffff, r0, r1, c);
+       TESTINST2("asrs r0, r1, #32", 0x7fffffff, r0, r1, c);
+       TESTINST2("asrs r0, r1, #16", 0x00010000, r0, r1, c);
+       TESTINST2("asrs r0, r1, #17", 0x00010000, r0, r1, c);
+       TESTINST2("asrs r0, r1, #18", 0x00010000, r0, r1, c);
+       TESTCARRYEND
+
+       printf("ROR\n");
+       TESTCARRY
+       TESTINST3("ror  r0, r1, r2", 0x00088000, 0, r0, r1, r2, c);
+       TESTINST3("ror  r0, r1, r2", 0x80088000, 1, r0, r1, r2, c);
+       TESTINST3("ror  r0, r1, r2", 0x00088000, 1, r0, r1, r2, c);
+       TESTINST3("ror  r0, r1, r2", 0x00088000, 2, r0, r1, r2, c);
+       TESTINST3("ror  r0, r1, r2", 0x00088000, 31, r0, r1, r2, c);
+       TESTINST3("ror  r0, r1, r2", 0x00088000, 32, r0, r1, r2, c);
+       TESTINST3("ror  r0, r1, r2", 0x00088000, 33, r0, r1, r2, c);
+       TESTINST3("ror  r0, r1, r2", 0x00088000, 63, r0, r1, r2, c);
+       TESTINST3("ror  r0, r1, r2", 0x00088000, 64, r0, r1, r2, c);
+       TESTINST3("ror  r0, r1, r2", 0x00088000, 255, r0, r1, r2, c);
+       TESTINST3("ror  r0, r1, r2", 0x00088000, 256, r0, r1, r2, c);
+       TESTINST3("ror  r0, r1, r2", 0x80088000, 256, r0, r1, r2, c);
+       TESTINST3("ror  r0, r1, r2", 0x00088000, 257, r0, r1, r2, c);
+       TESTCARRYEND
+
+       printf("RORS\n");
+       TESTCARRY
+       TESTINST3("rors r0, r1, r2", 0x00088000, 0, r0, r1, r2, c);
+       TESTINST3("rors r0, r1, r2", 0x80088000, 0, r0, r1, r2, c);
+       TESTINST3("rors r0, r1, r2", 0x00088000, 1, r0, r1, r2, c);
+       TESTINST3("rors r0, r1, r2", 0x00088000, 2, r0, r1, r2, c);
+       TESTINST3("rors r0, r1, r2", 0x00088000, 31, r0, r1, r2, c);
+       TESTINST3("rors r0, r1, r2", 0x00088000, 32, r0, r1, r2, c);
+       TESTINST3("rors r0, r1, r2", 0x00088000, 33, r0, r1, r2, c);
+       TESTINST3("rors r0, r1, r2", 0x00088000, 63, r0, r1, r2, c);
+       TESTINST3("rors r0, r1, r2", 0x00088000, 64, r0, r1, r2, c);
+       TESTINST3("rors r0, r1, r2", 0x00088000, 255, r0, r1, r2, c);
+       TESTINST3("rors r0, r1, r2", 0x00088000, 256, r0, r1, r2, c);
+       TESTINST3("rors r0, r1, r2", 0x80088000, 256, r0, r1, r2, c);
+       TESTINST3("rors r0, r1, r2", 0x00088000, 257, r0, r1, r2, c);
+       TESTCARRYEND
+
+       printf("ROR immediate\n");
+       TESTCARRY
+       TESTINST2("ror  r0, r1, #0", 0x00088000, r0, r1, c);
+       TESTINST2("ror  r0, r1, #1", 0x00088000, r0, r1, c);
+       TESTINST2("ror  r0, r1, #31", 0x00088000, r0, r1, c);
+       TESTINST2("ror  r0, r1, #16", 0x00010000, r0, r1, c);
+       TESTINST2("ror  r0, r1, #17", 0x00010000, r0, r1, c);
+       TESTINST2("ror  r0, r1, #18", 0x00010000, r0, r1, c);
+       TESTCARRYEND
+
+       printf("RORS immediate\n");
+       TESTCARRY
+       TESTINST2("rors r0, r1, #0", 0x00088000, r0, r1, c);
+       TESTINST2("rors r0, r1, #1", 0x00088000, r0, r1, c);
+       TESTINST2("rors r0, r1, #31", 0x00088000, r0, r1, c);
+       TESTINST2("rors r0, r1, #16", 0x00010000, r0, r1, c);
+       TESTINST2("rors r0, r1, #17", 0x00010000, r0, r1, c);
+       TESTINST2("rors r0, r1, #18", 0x00010000, r0, r1, c);
+       TESTCARRYEND
+
+       printf("shift with barrel shifter\n");
+       TESTCARRY
+       TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, lsl r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 0, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 1, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 31, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 32, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 255, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, asr r3", 0, 0x7fffffff, 256, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
+       TESTCARRYEND
+
+       TESTCARRY
+       TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 0, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 1, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 2, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 3, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 4, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, asr r3", 0, 0x8, 5, r0, r1, r2, r3, c);
+       TESTCARRYEND
+
+       TESTCARRY
+       TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 0, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, ror r3", 0, 0x80088000, 0, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 1, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 31, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 32, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 255, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 256, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, ror r3", 0, 0x80088000, 256, r0, r1, r2, r3, c);
+       TESTINST4("add  r0, r1, r2, ror r3", 0, 0x00088000, 257, r0, r1, r2, r3, c);
+       TESTCARRYEND
+
+       TESTCARRY
+       TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, lsl r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 31, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 32, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 255, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, lsr r3", 0, 0xffffffff, 256, r0, r1, r2, r3, c);
+
+       TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 0, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, ror r3", 0, 0x80088000, 0, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 1, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 31, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 32, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 255, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 256, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, ror r3", 0, 0x80088000, 256, r0, r1, r2, r3, c);
+       TESTINST4("adds r0, r1, r2, ror r3", 0, 0x00088000, 257, r0, r1, r2, r3, c);
+       TESTCARRYEND
+
+       TESTCARRY
+       TESTINST4("adcs r0, r1, r2, lsl r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
+       TESTINST4("adcs r0, r1, r2, lsr r3", 0, 0xffffffff, 0, r0, r1, r2, r3, c);
+       TESTINST4("adcs r0, r1, r2, lsl r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
+       TESTINST4("adcs r0, r1, r2, lsr r3", 0, 0xffffffff, 1, r0, r1, r2, r3, c);
+       TESTCARRYEND
+
+       printf("MUL\n");
+       TESTINST3("mul  r0, r1, r2", 0, 0, r0, r1, r2, 0);
+       TESTINST3("mul  r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
+       TESTINST3("mul  r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0);
+       TESTINST3("mul  r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0);
+       TESTINST3("mul  r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0);
+       TESTINST3("mul  r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0);
+
+       printf("MULS\n");
+       TESTINST3("muls r0, r1, r2", 0, 0, r0, r1, r2, 0);
+       TESTINST3("muls r0, r1, r2", 0xffffffff, 0, r0, r1, r2, 0);
+       TESTINST3("muls r0, r1, r2", 0, 0xffffffff, r0, r1, r2, 0);
+       TESTINST3("muls r0, r1, r2", 0xffffffff, 0xffffffff, r0, r1, r2, 0);
+       TESTINST3("muls r0, r1, r2", 0x7fffffff, 0x7fffffff, r0, r1, r2, 0);
+       TESTINST3("muls r0, r1, r2", 0x0000ffff, 0x0000ffff, r0, r1, r2, 0);
+
+       printf("MLA\n");
+       TESTINST4("mla  r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mla  r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mla  r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mla  r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mla  r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mla  r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0);
+
+       printf("MLAS\n");
+       TESTINST4("mlas r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mlas r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mlas r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mlas r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mlas r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mlas r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0);
+
+       printf("MLS\n");
+       TESTINST4("mls  r0, r1, r2, r3", 0, 0, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mls  r0, r1, r2, r3", 0xffffffff, 0, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mls  r0, r1, r2, r3", 0, 0xffffffff, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mls  r0, r1, r2, r3", 0xffffffff, 0xffffffff, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mls  r0, r1, r2, r3", 0x7fffffff, 0x7fffffff, 1, r0, r1, r2, r3, 0);
+       TESTINST4("mls  r0, r1, r2, r3", 0x0000ffff, 0x0000ffff, 1, r0, r1, r2, r3, 0);
+
+       printf("UMULL\n");
+       TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umull  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umulls r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
+
+       printf("SMULL\n");
+       TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smull  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smulls r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
+
+       printf("UMLAL\n");
+       TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlal  r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlal  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlals r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("umlals r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
+
+       printf("SMLAL\n");
+       TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlal  r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlal  r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 1, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlals r0, r1, r2, r3", 1, 1, 0, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0xffffffff, 1, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 1, 0, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 1, 1, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0xffff, 0xffff, r0, r1, r2, r3, 0);
+       TESTINST4_2OUT("smlals r0, r1, r2, r3", 0, 0, 0xffffffff, 0xffffffff, r0, r1, r2, r3, 0);
+
+       printf("CLZ\n");
+       TESTCARRY
+       TESTINST2("clz  r0, r1", 0, r0, r1, c);
+       TESTINST2("clz  r0, r1", 1, r0, r1, c);
+       TESTINST2("clz  r0, r1", 0x10, r0, r1, c);
+       TESTINST2("clz  r0, r1", 0xffffffff, r0, r1, c);
+       TESTCARRYEND
+
+       printf("extend instructions\n");
+       TESTINST2("uxtb r0, r1", 0, r0, r1, 0);
+       TESTINST2("uxtb r0, r1", 1, r0, r1, 0);
+       TESTINST2("uxtb r0, r1", 0xff, r0, r1, 0);
+       TESTINST2("uxtb r0, r1", 0xffffffff, r0, r1, 0);
+       TESTINST2("sxtb r0, r1", 0, r0, r1, 0);
+       TESTINST2("sxtb r0, r1", 1, r0, r1, 0);
+       TESTINST2("sxtb r0, r1", 0xff, r0, r1, 0);
+       TESTINST2("sxtb r0, r1", 0xffffffff, r0, r1, 0);
+
+       TESTINST2("uxth r0, r1", 0, r0, r1, 0);
+       TESTINST2("uxth r0, r1", 1, r0, r1, 0);
+       TESTINST2("uxth r0, r1", 0xffff, r0, r1, 0);
+       TESTINST2("uxth r0, r1", 0xffffffff, r0, r1, 0);
+       TESTINST2("sxth r0, r1", 0, r0, r1, 0);
+       TESTINST2("sxth r0, r1", 1, r0, r1, 0);
+       TESTINST2("sxth r0, r1", 0x7fff, r0, r1, 0);
+       TESTINST2("sxth r0, r1", 0xffff, r0, r1, 0);
+       TESTINST2("sxth r0, r1", 0x10ffff, r0, r1, 0);
+       TESTINST2("sxth r0, r1", 0x107fff, r0, r1, 0);
+       TESTINST2("sxth r0, r1", 0xffffffff, r0, r1, 0);
+
+       TESTINST2("uxtb r0, r1, ror #0", 0x000000ff, r0, r1, 0);
+       TESTINST2("uxtb r0, r1, ror #8", 0x000000ff, r0, r1, 0);
+       TESTINST2("uxtb r0, r1, ror #8", 0x0000ff00, r0, r1, 0);
+       TESTINST2("uxtb r0, r1, ror #16", 0x00ff0000, r0, r1, 0);
+       TESTINST2("uxtb r0, r1, ror #24", 0xff000000, r0, r1, 0);
+
+       TESTINST2("uxtb16 r0, r1", 0xffffffff, r0, r1, 0);
+       TESTINST2("uxtb16 r0, r1, ror #16", 0x0000ffff, r0, r1, 0);
+       TESTINST2("sxtb16 r0, r1", 0xffffffff, r0, r1, 0);
+       TESTINST2("sxtb16 r0, r1", 0x00ff00ff, r0, r1, 0);
+       TESTINST2("sxtb16 r0, r1", 0x007f007f, r0, r1, 0);
+
+       printf("------------ BFI ------------\n");
+
+        /* bfi  rDst, rSrc, #lsb-in-dst, #number-of-bits-to-copy */
+       TESTINST2("bfi  r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0);
+       TESTINST2("bfi  r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0);
+       TESTINST2("bfi  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
+
+       TESTINST2("bfi  r0, r1, #19, #11", 0xFFFFFFFF, r0, r1, 0);
+       TESTINST2("bfi  r0, r1, #20, #11", 0xFFFFFFFF, r0, r1, 0);
+       TESTINST2("bfi  r0, r1, #21, #11", 0xFFFFFFFF, r0, r1, 0);
+
+       TESTINST2("bfi  r0, r1, #0, #32", 0xFFFFFFFF, r0, r1, 0);
+       TESTINST2("bfi  r0, r1, #1, #31", 0xFFFFFFFF, r0, r1, 0);
+
+       TESTINST2("bfi  r0, r1, #29, #3", 0xFFFFFFFF, r0, r1, 0);
+       TESTINST2("bfi  r0, r1, #30, #2", 0xFFFFFFFF, r0, r1, 0);
+       TESTINST2("bfi  r0, r1, #31, #1", 0xFFFFFFFF, r0, r1, 0);
+
+       printf("------------ BFC ------------\n");
+
+        /* bfi  rDst, #lsb-in-dst, #number-of-bits-to-copy */
+       TESTINST2("bfc  r0, #0, #11", 0xAAAAAAAA, r0, r1, 0);
+       TESTINST2("bfc  r0, #1, #11", 0xAAAAAAAA, r0, r1, 0);
+       TESTINST2("bfc  r0, #2, #11", 0xAAAAAAAA, r0, r1, 0);
+
+       TESTINST2("bfc  r0, #19, #11", 0xFFFFFFFF, r0, r1, 0);
+       TESTINST2("bfc  r0, #20, #11", 0xFFFFFFFF, r0, r1, 0);
+       TESTINST2("bfc  r0, #21, #11", 0xFFFFFFFF, r0, r1, 0);
+
+       TESTINST2("bfc  r0, #0, #32", 0xFFFFFFFF, r0, r1, 0);
+       TESTINST2("bfc  r0, #1, #31", 0xFFFFFFFF, r0, r1, 0);
+
+       TESTINST2("bfc  r0, #29, #3", 0xFFFFFFFF, r0, r1, 0);
+       TESTINST2("bfc  r0, #30, #2", 0xFFFFFFFF, r0, r1, 0);
+       TESTINST2("bfc  r0, #31, #1", 0xFFFFFFFF, r0, r1, 0);
+
+       printf("------------ SBFX ------------\n");
+
+        /* sbfx rDst, rSrc, #lsb, #width */
+        TESTINST2("sbfx  r0, r1, #0, #1", 0x00000000, r0, r1, 0);
+        TESTINST2("sbfx  r0, r1, #0, #1", 0x00000001, r0, r1, 0);
+        TESTINST2("sbfx  r0, r1, #1, #1", 0x00000000, r0, r1, 0);
+        TESTINST2("sbfx  r0, r1, #1, #1", 0x00000001, r0, r1, 0);
+        TESTINST2("sbfx  r0, r1, #1, #1", 0x00000002, r0, r1, 0);
+        TESTINST2("sbfx  r0, r1, #1, #1", 0x00000003, r0, r1, 0);
+
+        TESTINST2("sbfx  r0, r1, #0, #2", 0x00000000, r0, r1, 0);
+        TESTINST2("sbfx  r0, r1, #0, #2", 0x00000001, r0, r1, 0);
+        TESTINST2("sbfx  r0, r1, #1, #2", 0x00000000, r0, r1, 0);
+        TESTINST2("sbfx  r0, r1, #1, #2", 0x00000001, r0, r1, 0);
+        TESTINST2("sbfx  r0, r1, #1, #2", 0x00000002, r0, r1, 0);
+        TESTINST2("sbfx  r0, r1, #1, #2", 0x00000003, r0, r1, 0);
+
+        TESTINST2("sbfx  r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0);
+        TESTINST2("sbfx  r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0);
+        TESTINST2("sbfx  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
+
+        TESTINST2("sbfx  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
+
+        TESTINST2("sbfx  r0, r1, #31, #1", 0xAAAAAAAA, r0, r1, 0);
+        TESTINST2("sbfx  r0, r1, #30, #2", 0xAAAAAAAA, r0, r1, 0);
+
+       printf("------------ UBFX ------------\n");
+
+        /* ubfx rDst, rSrc, #lsb, #width */
+        TESTINST2("ubfx  r0, r1, #0, #1", 0x00000000, r0, r1, 0);
+        TESTINST2("ubfx  r0, r1, #0, #1", 0x00000001, r0, r1, 0);
+        TESTINST2("ubfx  r0, r1, #1, #1", 0x00000000, r0, r1, 0);
+        TESTINST2("ubfx  r0, r1, #1, #1", 0x00000001, r0, r1, 0);
+        TESTINST2("ubfx  r0, r1, #1, #1", 0x00000002, r0, r1, 0);
+        TESTINST2("ubfx  r0, r1, #1, #1", 0x00000003, r0, r1, 0);
+
+        TESTINST2("ubfx  r0, r1, #0, #2", 0x00000000, r0, r1, 0);
+        TESTINST2("ubfx  r0, r1, #0, #2", 0x00000001, r0, r1, 0);
+        TESTINST2("ubfx  r0, r1, #1, #2", 0x00000000, r0, r1, 0);
+        TESTINST2("ubfx  r0, r1, #1, #2", 0x00000001, r0, r1, 0);
+        TESTINST2("ubfx  r0, r1, #1, #2", 0x00000002, r0, r1, 0);
+        TESTINST2("ubfx  r0, r1, #1, #2", 0x00000003, r0, r1, 0);
+
+        TESTINST2("ubfx  r0, r1, #0, #11", 0xAAAAAAAA, r0, r1, 0);
+        TESTINST2("ubfx  r0, r1, #1, #11", 0xAAAAAAAA, r0, r1, 0);
+        TESTINST2("ubfx  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
+
+        TESTINST2("ubfx  r0, r1, #2, #11", 0xAAAAAAAA, r0, r1, 0);
+
+        TESTINST2("ubfx  r0, r1, #31, #1", 0xAAAAAAAA, r0, r1, 0);
+        TESTINST2("ubfx  r0, r1, #30, #2", 0xAAAAAAAA, r0, r1, 0);
+
+       printf("------------ SMULL{B,T}{B,T} ------------\n");
+        /* SMULxx rD, rN, rM */
+
+       TESTINST3("smulbb r0, r1, r2", 0x00030000, 0x00040000,  r0, r1, r2, 0);
+       TESTINST3("smulbb r0, r1, r2", 0x00030001, 0x00040002,  r0, r1, r2, 0);
+       TESTINST3("smulbb r0, r1, r2", 0x00038001, 0x00047fff,  r0, r1, r2, 0);
+       TESTINST3("smulbb r0, r1, r2", 0x00037fff, 0x00047fff,  r0, r1, r2, 0);
+       TESTINST3("smulbb r0, r1, r2", 0x0003ffff, 0x0004ffff,  r0, r1, r2, 0);
+
+       printf("------------ SXTAB ------------\n");
+        TESTINST3("sxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182819, 
+                  r0, r1, r2, 0);
+        TESTINST3("sxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182819, 
+                  r0, r1, r2, 0);
+        TESTINST3("sxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182819, 
+                  r0, r1, r2, 0);
+        TESTINST3("sxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182819, 
+                  r0, r1, r2, 0);
+
+        TESTINST3("sxtab r0, r1, r2, ROR #24", 0x31415927, 0x27182899, 
+                  r0, r1, r2, 0);
+        TESTINST3("sxtab r0, r1, r2, ROR #16", 0x31415927, 0x27182899, 
+                  r0, r1, r2, 0);
+        TESTINST3("sxtab r0, r1, r2, ROR #8", 0x31415927, 0x27182899, 
+                  r0, r1, r2, 0);
+        TESTINST3("sxtab r0, r1, r2, ROR #0", 0x31415927, 0x27182899, 
+                  r0, r1, r2, 0);
+
+       printf("------------ UXTAH ------------\n");
+        TESTINST3("uxtah r0, r1, r2, ROR #24", 0x31415927, 0x27182819, 
+                  r0, r1, r2, 0);
+        TESTINST3("uxtah r0, r1, r2, ROR #16", 0x31415927, 0x27182819, 
+                  r0, r1, r2, 0);
+        TESTINST3("uxtah r0, r1, r2, ROR #8", 0x31415927, 0x27182819, 
+                  r0, r1, r2, 0);
+        TESTINST3("uxtah r0, r1, r2, ROR #0", 0x31415927, 0x27182819, 
+                  r0, r1, r2, 0);
+
+        TESTINST3("uxtah r0, r1, r2, ROR #24", 0x31415927, 0x27182899, 
+                  r0, r1, r2, 0);
+        TESTINST3("uxtah r0, r1, r2, ROR #16", 0x31415927, 0x27182899, 
+                  r0, r1, r2, 0);
+        TESTINST3("uxtah r0, r1, r2, ROR #8", 0x31415927, 0x27182899, 
+                  r0, r1, r2, 0);
+        TESTINST3("uxtah r0, r1, r2, ROR #0", 0x31415927, 0x27182899, 
+                  r0, r1, r2, 0);
+
+       return 0;
+}
diff --git a/none/tests/arm/v6int.stderr.exp b/none/tests/arm/v6int.stderr.exp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/none/tests/arm/v6int.stdout.exp b/none/tests/arm/v6int.stdout.exp
new file mode 100644 (file)
index 0000000..bf0e9cc
--- /dev/null
@@ -0,0 +1,717 @@
+MOV
+mov  r0, r1 :: rd 0x00000001 rm 0x00000001, carryin 0, cpsr 0x00000000     
+cpy  r0, r1 :: rd 0x00000001 rm 0x00000001, carryin 0, cpsr 0x00000000     
+mov  r0, #0 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x00000000     
+mov  r0, #1 :: rd 0x00000001 rm 0x00000000, carryin 0, cpsr 0x00000000     
+movs r0, r1 :: rd 0x00000001 rm 0x00000001, carryin 0, cpsr 0x00000000     
+movs r0, r1 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x40000000  Z  
+movs r0, r1 :: rd 0x80000000 rm 0x80000000, carryin 0, cpsr 0x80000000 N   
+movs r0, #0 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x40000000  Z  
+movs r0, #1 :: rd 0x00000001 rm 0x00000000, carryin 0, cpsr 0x00000000     
+movs r0, r1 :: rd 0x00000001 rm 0x00000001, carryin 1, cpsr 0x20000000   C 
+movs r0, r1 :: rd 0x00000000 rm 0x00000000, carryin 1, cpsr 0x60000000  ZC 
+movs r0, r1 :: rd 0x80000000 rm 0x80000000, carryin 1, cpsr 0xa0000000 N C 
+movs r0, #0 :: rd 0x00000000 rm 0x00000000, carryin 1, cpsr 0x60000000  ZC 
+movs r0, #1 :: rd 0x00000001 rm 0x00000000, carryin 1, cpsr 0x20000000   C 
+MVN
+mvn  r0, r1 :: rd 0xfffffffe rm 0x00000001, carryin 0, cpsr 0x00000000     
+mvns r0, r1 :: rd 0xfffffffe rm 0x00000001, carryin 0, cpsr 0x80000000 N   
+mvns r0, r1 :: rd 0xffffffff rm 0x00000000, carryin 0, cpsr 0x80000000 N   
+mvns r0, r1 :: rd 0x7fffffff rm 0x80000000, carryin 0, cpsr 0x00000000     
+mvns r0, r1 :: rd 0xfffffffe rm 0x00000001, carryin 1, cpsr 0xa0000000 N C 
+mvns r0, r1 :: rd 0xffffffff rm 0x00000000, carryin 1, cpsr 0xa0000000 N C 
+mvns r0, r1 :: rd 0x7fffffff rm 0x80000000, carryin 1, cpsr 0x20000000   C 
+ADD
+adds r0, r1, r2 :: rd 0x00000000 rm 0x00000000, rn 0x00000000, carryin 0, cpsr 0x40000000  Z  
+adds r0, r1, r2 :: rd 0x00000001 rm 0x00000000, rn 0x00000001, carryin 0, cpsr 0x00000000     
+adds r0, r1, r2 :: rd 0x00000001 rm 0x00000001, rn 0x00000000, carryin 0, cpsr 0x00000000     
+adds r0, r1, r2 :: rd 0x00000002 rm 0x00000001, rn 0x00000001, carryin 0, cpsr 0x00000000     
+adds r0, r1, r2 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff, carryin 0, cpsr 0x80000000 N   
+adds r0, r1, r2 :: rd 0x00000000 rm 0x00000001, rn 0xffffffff, carryin 0, cpsr 0x60000000  ZC 
+adds r0, r1, r2 :: rd 0x80000000 rm 0x7fffffff, rn 0x00000001, carryin 0, cpsr 0x90000000 N  V
+adds r0, r1, r2 :: rd 0x7fffffff rm 0x80000000, rn 0xffffffff, carryin 0, cpsr 0x30000000   CV
+adds r0, r1, r2 :: rd 0x80000000 rm 0x80000000, rn 0x00000000, carryin 0, cpsr 0x80000000 N   
+ADC
+adcs r0, r1, r2 :: rd 0x00000000 rm 0x00000000, rn 0x00000000, carryin 0, cpsr 0x40000000  Z  
+adcs r0, r1, r2 :: rd 0x00000001 rm 0x00000000, rn 0x00000000, carryin 1, cpsr 0x00000000     
+LSL
+lsl  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000000, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, r2 :: rd 0xfffffffe rm 0xffffffff, rn 0x00000001, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, r2 :: rd 0xfffffffc rm 0xffffffff, rn 0x00000002, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, r2 :: rd 0x80000000 rm 0xffffffff, rn 0x0000001f, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000020, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000021, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x0000003f, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000040, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x000000ff, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000100, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, r2 :: rd 0x00000001 rm 0x00000001, rn 0x00000000, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, r2 :: rd 0x00000002 rm 0x00000001, rn 0x00000001, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, r2 :: rd 0x80000000 rm 0x00000001, rn 0x0000001f, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, r2 :: rd 0x00000000 rm 0x00000002, rn 0x0000001f, carryin 0, cpsr 0x00000000     
+LSLS
+lsls r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000000, carryin 0, cpsr 0x80000000 N   
+lsls r0, r1, r2 :: rd 0xfffffffe rm 0xffffffff, rn 0x00000001, carryin 0, cpsr 0xa0000000 N C 
+lsls r0, r1, r2 :: rd 0xfffffffc rm 0xffffffff, rn 0x00000002, carryin 0, cpsr 0xa0000000 N C 
+lsls r0, r1, r2 :: rd 0x80000000 rm 0xffffffff, rn 0x0000001f, carryin 0, cpsr 0xa0000000 N C 
+lsls r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000020, carryin 0, cpsr 0x60000000  ZC 
+lsls r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000021, carryin 0, cpsr 0x40000000  Z  
+lsls r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x0000003f, carryin 0, cpsr 0x40000000  Z  
+lsls r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000040, carryin 0, cpsr 0x40000000  Z  
+lsls r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x000000ff, carryin 0, cpsr 0x40000000  Z  
+lsls r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000100, carryin 0, cpsr 0x80000000 N   
+lsls r0, r1, r2 :: rd 0x00000001 rm 0x00000001, rn 0x00000000, carryin 0, cpsr 0x00000000     
+lsls r0, r1, r2 :: rd 0x00000002 rm 0x00000001, rn 0x00000001, carryin 0, cpsr 0x00000000     
+lsls r0, r1, r2 :: rd 0x80000000 rm 0x00000001, rn 0x0000001f, carryin 0, cpsr 0x80000000 N   
+lsls r0, r1, r2 :: rd 0x00000000 rm 0x00000002, rn 0x0000001f, carryin 0, cpsr 0x60000000  ZC 
+lsls r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000000, carryin 1, cpsr 0xa0000000 N C 
+lsls r0, r1, r2 :: rd 0xfffffffe rm 0xffffffff, rn 0x00000001, carryin 1, cpsr 0xa0000000 N C 
+lsls r0, r1, r2 :: rd 0xfffffffc rm 0xffffffff, rn 0x00000002, carryin 1, cpsr 0xa0000000 N C 
+lsls r0, r1, r2 :: rd 0x80000000 rm 0xffffffff, rn 0x0000001f, carryin 1, cpsr 0xa0000000 N C 
+lsls r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000020, carryin 1, cpsr 0x60000000  ZC 
+lsls r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000021, carryin 1, cpsr 0x40000000  Z  
+lsls r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x0000003f, carryin 1, cpsr 0x40000000  Z  
+lsls r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000040, carryin 1, cpsr 0x40000000  Z  
+lsls r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x000000ff, carryin 1, cpsr 0x40000000  Z  
+lsls r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000100, carryin 1, cpsr 0xa0000000 N C 
+lsls r0, r1, r2 :: rd 0x00000001 rm 0x00000001, rn 0x00000000, carryin 1, cpsr 0x20000000   C 
+lsls r0, r1, r2 :: rd 0x00000002 rm 0x00000001, rn 0x00000001, carryin 1, cpsr 0x00000000     
+lsls r0, r1, r2 :: rd 0x80000000 rm 0x00000001, rn 0x0000001f, carryin 1, cpsr 0x80000000 N   
+lsls r0, r1, r2 :: rd 0x00000000 rm 0x00000002, rn 0x0000001f, carryin 1, cpsr 0x60000000  ZC 
+LSL immediate
+lsl  r0, r1, #0 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, #1 :: rd 0xfffffffe rm 0xffffffff, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, #31 :: rd 0x80000000 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, #0 :: rd 0x00000001 rm 0x00000001, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, #1 :: rd 0x00000002 rm 0x00000001, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, #31 :: rd 0x80000000 rm 0x00000001, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, #31 :: rd 0x00000000 rm 0x00000002, carryin 0, cpsr 0x00000000     
+lsl  r0, r1, #0 :: rd 0xffffffff rm 0xffffffff, carryin 1, cpsr 0x20000000   C 
+lsl  r0, r1, #1 :: rd 0xfffffffe rm 0xffffffff, carryin 1, cpsr 0x20000000   C 
+lsl  r0, r1, #31 :: rd 0x80000000 rm 0xffffffff, carryin 1, cpsr 0x20000000   C 
+lsl  r0, r1, #0 :: rd 0x00000001 rm 0x00000001, carryin 1, cpsr 0x20000000   C 
+lsl  r0, r1, #1 :: rd 0x00000002 rm 0x00000001, carryin 1, cpsr 0x20000000   C 
+lsl  r0, r1, #31 :: rd 0x80000000 rm 0x00000001, carryin 1, cpsr 0x20000000   C 
+lsl  r0, r1, #31 :: rd 0x00000000 rm 0x00000002, carryin 1, cpsr 0x20000000   C 
+LSLS immediate
+lsls r0, r1, #0 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0x80000000 N   
+lsls r0, r1, #1 :: rd 0xfffffffe rm 0xffffffff, carryin 0, cpsr 0xa0000000 N C 
+lsls r0, r1, #31 :: rd 0x80000000 rm 0xffffffff, carryin 0, cpsr 0xa0000000 N C 
+lsls r0, r1, #0 :: rd 0x00000001 rm 0x00000001, carryin 0, cpsr 0x00000000     
+lsls r0, r1, #1 :: rd 0x00000002 rm 0x00000001, carryin 0, cpsr 0x00000000     
+lsls r0, r1, #31 :: rd 0x80000000 rm 0x00000001, carryin 0, cpsr 0x80000000 N   
+lsls r0, r1, #31 :: rd 0x00000000 rm 0x00000002, carryin 0, cpsr 0x60000000  ZC 
+lsls r0, r1, #0 :: rd 0xffffffff rm 0xffffffff, carryin 1, cpsr 0xa0000000 N C 
+lsls r0, r1, #1 :: rd 0xfffffffe rm 0xffffffff, carryin 1, cpsr 0xa0000000 N C 
+lsls r0, r1, #31 :: rd 0x80000000 rm 0xffffffff, carryin 1, cpsr 0xa0000000 N C 
+lsls r0, r1, #0 :: rd 0x00000001 rm 0x00000001, carryin 1, cpsr 0x20000000   C 
+lsls r0, r1, #1 :: rd 0x00000002 rm 0x00000001, carryin 1, cpsr 0x00000000     
+lsls r0, r1, #31 :: rd 0x80000000 rm 0x00000001, carryin 1, cpsr 0x80000000 N   
+lsls r0, r1, #31 :: rd 0x00000000 rm 0x00000002, carryin 1, cpsr 0x60000000  ZC 
+LSR
+lsr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000000, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, r2 :: rd 0x7fffffff rm 0xffffffff, rn 0x00000001, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, r2 :: rd 0x3fffffff rm 0xffffffff, rn 0x00000002, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, r2 :: rd 0x00000001 rm 0xffffffff, rn 0x0000001f, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000020, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000021, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x0000003f, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000040, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x000000ff, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000100, carryin 0, cpsr 0x00000000     
+LSRS
+lsrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000000, carryin 0, cpsr 0x80000000 N   
+lsrs r0, r1, r2 :: rd 0x7fffffff rm 0xffffffff, rn 0x00000001, carryin 0, cpsr 0x20000000   C 
+lsrs r0, r1, r2 :: rd 0x3fffffff rm 0xffffffff, rn 0x00000002, carryin 0, cpsr 0x20000000   C 
+lsrs r0, r1, r2 :: rd 0x00000001 rm 0xffffffff, rn 0x0000001f, carryin 0, cpsr 0x20000000   C 
+lsrs r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000020, carryin 0, cpsr 0x60000000  ZC 
+lsrs r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000021, carryin 0, cpsr 0x40000000  Z  
+lsrs r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x0000003f, carryin 0, cpsr 0x40000000  Z  
+lsrs r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000040, carryin 0, cpsr 0x40000000  Z  
+lsrs r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x000000ff, carryin 0, cpsr 0x40000000  Z  
+lsrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000000, carryin 1, cpsr 0xa0000000 N C 
+lsrs r0, r1, r2 :: rd 0x7fffffff rm 0xffffffff, rn 0x00000001, carryin 1, cpsr 0x20000000   C 
+lsrs r0, r1, r2 :: rd 0x3fffffff rm 0xffffffff, rn 0x00000002, carryin 1, cpsr 0x20000000   C 
+lsrs r0, r1, r2 :: rd 0x00000001 rm 0xffffffff, rn 0x0000001f, carryin 1, cpsr 0x20000000   C 
+lsrs r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000020, carryin 1, cpsr 0x60000000  ZC 
+lsrs r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000021, carryin 1, cpsr 0x40000000  Z  
+lsrs r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x0000003f, carryin 1, cpsr 0x40000000  Z  
+lsrs r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000040, carryin 1, cpsr 0x40000000  Z  
+lsrs r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x000000ff, carryin 1, cpsr 0x40000000  Z  
+LSR immediate
+lsr  r0, r1, #0 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, #1 :: rd 0x7fffffff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, #31 :: rd 0x00000001 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, #32 :: rd 0x00000000 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, #16 :: rd 0x00000001 rm 0x00010000, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, #17 :: rd 0x00000000 rm 0x00010000, carryin 0, cpsr 0x00000000     
+lsr  r0, r1, #18 :: rd 0x00000000 rm 0x00010000, carryin 0, cpsr 0x00000000     
+LSRS immediate
+lsrs r0, r1, #0 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0x80000000 N   
+lsrs r0, r1, #1 :: rd 0x7fffffff rm 0xffffffff, carryin 0, cpsr 0x20000000   C 
+lsrs r0, r1, #31 :: rd 0x00000001 rm 0xffffffff, carryin 0, cpsr 0x20000000   C 
+lsrs r0, r1, #32 :: rd 0x00000000 rm 0xffffffff, carryin 0, cpsr 0x60000000  ZC 
+lsrs r0, r1, #16 :: rd 0x00000001 rm 0x00010000, carryin 0, cpsr 0x00000000     
+lsrs r0, r1, #17 :: rd 0x00000000 rm 0x00010000, carryin 0, cpsr 0x60000000  ZC 
+lsrs r0, r1, #18 :: rd 0x00000000 rm 0x00010000, carryin 0, cpsr 0x40000000  Z  
+lsrs r0, r1, #0 :: rd 0xffffffff rm 0xffffffff, carryin 1, cpsr 0xa0000000 N C 
+lsrs r0, r1, #1 :: rd 0x7fffffff rm 0xffffffff, carryin 1, cpsr 0x20000000   C 
+lsrs r0, r1, #31 :: rd 0x00000001 rm 0xffffffff, carryin 1, cpsr 0x20000000   C 
+lsrs r0, r1, #32 :: rd 0x00000000 rm 0xffffffff, carryin 1, cpsr 0x60000000  ZC 
+lsrs r0, r1, #16 :: rd 0x00000001 rm 0x00010000, carryin 1, cpsr 0x00000000     
+lsrs r0, r1, #17 :: rd 0x00000000 rm 0x00010000, carryin 1, cpsr 0x60000000  ZC 
+lsrs r0, r1, #18 :: rd 0x00000000 rm 0x00010000, carryin 1, cpsr 0x40000000  Z  
+ASR
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000000, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000001, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000002, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x0000001f, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000020, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000021, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x0000003f, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000040, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x000000ff, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000100, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0x7fffffff rm 0x7fffffff, rn 0x00000000, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0x3fffffff rm 0x7fffffff, rn 0x00000001, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0x1fffffff rm 0x7fffffff, rn 0x00000002, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x0000001f, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x00000020, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x00000021, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x0000003f, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x00000040, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x000000ff, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0x7fffffff rm 0x7fffffff, rn 0x00000100, carryin 0, cpsr 0x00000000     
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000000, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000001, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000002, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x0000001f, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000020, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000021, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x0000003f, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000040, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x000000ff, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000100, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0x7fffffff rm 0x7fffffff, rn 0x00000000, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0x3fffffff rm 0x7fffffff, rn 0x00000001, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0x1fffffff rm 0x7fffffff, rn 0x00000002, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x0000001f, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x00000020, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x00000021, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x0000003f, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x00000040, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x000000ff, carryin 1, cpsr 0x20000000   C 
+asr  r0, r1, r2 :: rd 0x7fffffff rm 0x7fffffff, rn 0x00000100, carryin 1, cpsr 0x20000000   C 
+ASRS
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000000, carryin 0, cpsr 0x80000000 N   
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000001, carryin 0, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000002, carryin 0, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x0000001f, carryin 0, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000020, carryin 0, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000021, carryin 0, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x0000003f, carryin 0, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000040, carryin 0, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x000000ff, carryin 0, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000100, carryin 0, cpsr 0x80000000 N   
+asrs r0, r1, r2 :: rd 0x7fffffff rm 0x7fffffff, rn 0x00000000, carryin 0, cpsr 0x00000000     
+asrs r0, r1, r2 :: rd 0x3fffffff rm 0x7fffffff, rn 0x00000001, carryin 0, cpsr 0x20000000   C 
+asrs r0, r1, r2 :: rd 0x1fffffff rm 0x7fffffff, rn 0x00000002, carryin 0, cpsr 0x20000000   C 
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x0000001f, carryin 0, cpsr 0x60000000  ZC 
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x00000020, carryin 0, cpsr 0x40000000  Z  
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x00000021, carryin 0, cpsr 0x40000000  Z  
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x0000003f, carryin 0, cpsr 0x40000000  Z  
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x00000040, carryin 0, cpsr 0x40000000  Z  
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x000000ff, carryin 0, cpsr 0x40000000  Z  
+asrs r0, r1, r2 :: rd 0x7fffffff rm 0x7fffffff, rn 0x00000100, carryin 0, cpsr 0x00000000     
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000000, carryin 1, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000001, carryin 1, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000002, carryin 1, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x0000001f, carryin 1, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000020, carryin 1, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000021, carryin 1, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x0000003f, carryin 1, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000040, carryin 1, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x000000ff, carryin 1, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xffffffff rm 0xffffffff, rn 0x00000100, carryin 1, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0x7fffffff rm 0x7fffffff, rn 0x00000000, carryin 1, cpsr 0x20000000   C 
+asrs r0, r1, r2 :: rd 0x3fffffff rm 0x7fffffff, rn 0x00000001, carryin 1, cpsr 0x20000000   C 
+asrs r0, r1, r2 :: rd 0x1fffffff rm 0x7fffffff, rn 0x00000002, carryin 1, cpsr 0x20000000   C 
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x0000001f, carryin 1, cpsr 0x60000000  ZC 
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x00000020, carryin 1, cpsr 0x40000000  Z  
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x00000021, carryin 1, cpsr 0x40000000  Z  
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x0000003f, carryin 1, cpsr 0x40000000  Z  
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x00000040, carryin 1, cpsr 0x40000000  Z  
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x7fffffff, rn 0x000000ff, carryin 1, cpsr 0x40000000  Z  
+asrs r0, r1, r2 :: rd 0x7fffffff rm 0x7fffffff, rn 0x00000100, carryin 1, cpsr 0x20000000   C 
+asrs r0, r1, r2 :: rd 0x00000008 rm 0x00000008, rn 0x00000000, carryin 0, cpsr 0x00000000     
+asrs r0, r1, r2 :: rd 0x00000004 rm 0x00000008, rn 0x00000001, carryin 0, cpsr 0x00000000     
+asrs r0, r1, r2 :: rd 0x00000002 rm 0x00000008, rn 0x00000002, carryin 0, cpsr 0x00000000     
+asrs r0, r1, r2 :: rd 0x00000001 rm 0x00000008, rn 0x00000003, carryin 0, cpsr 0x00000000     
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x00000008, rn 0x00000004, carryin 0, cpsr 0x60000000  ZC 
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x00000008, rn 0x00000005, carryin 0, cpsr 0x40000000  Z  
+asrs r0, r1, r2 :: rd 0x00000008 rm 0x00000008, rn 0x00000000, carryin 1, cpsr 0x20000000   C 
+asrs r0, r1, r2 :: rd 0x00000004 rm 0x00000008, rn 0x00000001, carryin 1, cpsr 0x00000000     
+asrs r0, r1, r2 :: rd 0x00000002 rm 0x00000008, rn 0x00000002, carryin 1, cpsr 0x00000000     
+asrs r0, r1, r2 :: rd 0x00000001 rm 0x00000008, rn 0x00000003, carryin 1, cpsr 0x00000000     
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x00000008, rn 0x00000004, carryin 1, cpsr 0x60000000  ZC 
+asrs r0, r1, r2 :: rd 0x00000000 rm 0x00000008, rn 0x00000005, carryin 1, cpsr 0x40000000  Z  
+asrs r0, r1, r2 :: rd 0xc0000000 rm 0x80000001, rn 0x00000001, carryin 0, cpsr 0xa0000000 N C 
+asrs r0, r1, r2 :: rd 0xe0000000 rm 0x80000001, rn 0x00000002, carryin 0, cpsr 0x80000000 N   
+ASR immediate
+asr  r0, r1, #0 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+asr  r0, r1, #1 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+asr  r0, r1, #31 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+asr  r0, r1, #32 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+asr  r0, r1, #0 :: rd 0x7fffffff rm 0x7fffffff, carryin 0, cpsr 0x00000000     
+asr  r0, r1, #1 :: rd 0x3fffffff rm 0x7fffffff, carryin 0, cpsr 0x00000000     
+asr  r0, r1, #31 :: rd 0x00000000 rm 0x7fffffff, carryin 0, cpsr 0x00000000     
+asr  r0, r1, #32 :: rd 0x00000000 rm 0x7fffffff, carryin 0, cpsr 0x00000000     
+asr  r0, r1, #16 :: rd 0x00000001 rm 0x00010000, carryin 0, cpsr 0x00000000     
+asr  r0, r1, #17 :: rd 0x00000000 rm 0x00010000, carryin 0, cpsr 0x00000000     
+asr  r0, r1, #18 :: rd 0x00000000 rm 0x00010000, carryin 0, cpsr 0x00000000     
+ASRS immediate
+asrs r0, r1, #0 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0x80000000 N   
+asrs r0, r1, #1 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0xa0000000 N C 
+asrs r0, r1, #31 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0xa0000000 N C 
+asrs r0, r1, #32 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0xa0000000 N C 
+asrs r0, r1, #0 :: rd 0x7fffffff rm 0x7fffffff, carryin 0, cpsr 0x00000000     
+asrs r0, r1, #1 :: rd 0x3fffffff rm 0x7fffffff, carryin 0, cpsr 0x20000000   C 
+asrs r0, r1, #31 :: rd 0x00000000 rm 0x7fffffff, carryin 0, cpsr 0x60000000  ZC 
+asrs r0, r1, #32 :: rd 0x00000000 rm 0x7fffffff, carryin 0, cpsr 0x40000000  Z  
+asrs r0, r1, #16 :: rd 0x00000001 rm 0x00010000, carryin 0, cpsr 0x00000000     
+asrs r0, r1, #17 :: rd 0x00000000 rm 0x00010000, carryin 0, cpsr 0x60000000  ZC 
+asrs r0, r1, #18 :: rd 0x00000000 rm 0x00010000, carryin 0, cpsr 0x40000000  Z  
+asrs r0, r1, #0 :: rd 0xffffffff rm 0xffffffff, carryin 1, cpsr 0xa0000000 N C 
+asrs r0, r1, #1 :: rd 0xffffffff rm 0xffffffff, carryin 1, cpsr 0xa0000000 N C 
+asrs r0, r1, #31 :: rd 0xffffffff rm 0xffffffff, carryin 1, cpsr 0xa0000000 N C 
+asrs r0, r1, #32 :: rd 0xffffffff rm 0xffffffff, carryin 1, cpsr 0xa0000000 N C 
+asrs r0, r1, #0 :: rd 0x7fffffff rm 0x7fffffff, carryin 1, cpsr 0x20000000   C 
+asrs r0, r1, #1 :: rd 0x3fffffff rm 0x7fffffff, carryin 1, cpsr 0x20000000   C 
+asrs r0, r1, #31 :: rd 0x00000000 rm 0x7fffffff, carryin 1, cpsr 0x60000000  ZC 
+asrs r0, r1, #32 :: rd 0x00000000 rm 0x7fffffff, carryin 1, cpsr 0x40000000  Z  
+asrs r0, r1, #16 :: rd 0x00000001 rm 0x00010000, carryin 1, cpsr 0x00000000     
+asrs r0, r1, #17 :: rd 0x00000000 rm 0x00010000, carryin 1, cpsr 0x60000000  ZC 
+asrs r0, r1, #18 :: rd 0x00000000 rm 0x00010000, carryin 1, cpsr 0x40000000  Z  
+ROR
+ror  r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000000, carryin 0, cpsr 0x00000000     
+ror  r0, r1, r2 :: rd 0x40044000 rm 0x80088000, rn 0x00000001, carryin 0, cpsr 0x00000000     
+ror  r0, r1, r2 :: rd 0x00044000 rm 0x00088000, rn 0x00000001, carryin 0, cpsr 0x00000000     
+ror  r0, r1, r2 :: rd 0x00022000 rm 0x00088000, rn 0x00000002, carryin 0, cpsr 0x00000000     
+ror  r0, r1, r2 :: rd 0x00110000 rm 0x00088000, rn 0x0000001f, carryin 0, cpsr 0x00000000     
+ror  r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000020, carryin 0, cpsr 0x00000000     
+ror  r0, r1, r2 :: rd 0x00044000 rm 0x00088000, rn 0x00000021, carryin 0, cpsr 0x00000000     
+ror  r0, r1, r2 :: rd 0x00110000 rm 0x00088000, rn 0x0000003f, carryin 0, cpsr 0x00000000     
+ror  r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000040, carryin 0, cpsr 0x00000000     
+ror  r0, r1, r2 :: rd 0x00110000 rm 0x00088000, rn 0x000000ff, carryin 0, cpsr 0x00000000     
+ror  r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000100, carryin 0, cpsr 0x00000000     
+ror  r0, r1, r2 :: rd 0x80088000 rm 0x80088000, rn 0x00000100, carryin 0, cpsr 0x00000000     
+ror  r0, r1, r2 :: rd 0x00044000 rm 0x00088000, rn 0x00000101, carryin 0, cpsr 0x00000000     
+ror  r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000000, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, r2 :: rd 0x40044000 rm 0x80088000, rn 0x00000001, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, r2 :: rd 0x00044000 rm 0x00088000, rn 0x00000001, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, r2 :: rd 0x00022000 rm 0x00088000, rn 0x00000002, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, r2 :: rd 0x00110000 rm 0x00088000, rn 0x0000001f, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000020, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, r2 :: rd 0x00044000 rm 0x00088000, rn 0x00000021, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, r2 :: rd 0x00110000 rm 0x00088000, rn 0x0000003f, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000040, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, r2 :: rd 0x00110000 rm 0x00088000, rn 0x000000ff, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000100, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, r2 :: rd 0x80088000 rm 0x80088000, rn 0x00000100, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, r2 :: rd 0x00044000 rm 0x00088000, rn 0x00000101, carryin 1, cpsr 0x20000000   C 
+RORS
+rors r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000000, carryin 0, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x80088000 rm 0x80088000, rn 0x00000000, carryin 0, cpsr 0x80000000 N   
+rors r0, r1, r2 :: rd 0x00044000 rm 0x00088000, rn 0x00000001, carryin 0, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00022000 rm 0x00088000, rn 0x00000002, carryin 0, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00110000 rm 0x00088000, rn 0x0000001f, carryin 0, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000020, carryin 0, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00044000 rm 0x00088000, rn 0x00000021, carryin 0, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00110000 rm 0x00088000, rn 0x0000003f, carryin 0, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000040, carryin 0, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00110000 rm 0x00088000, rn 0x000000ff, carryin 0, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000100, carryin 0, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x80088000 rm 0x80088000, rn 0x00000100, carryin 0, cpsr 0x80000000 N   
+rors r0, r1, r2 :: rd 0x00044000 rm 0x00088000, rn 0x00000101, carryin 0, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000000, carryin 1, cpsr 0x20000000   C 
+rors r0, r1, r2 :: rd 0x80088000 rm 0x80088000, rn 0x00000000, carryin 1, cpsr 0xa0000000 N C 
+rors r0, r1, r2 :: rd 0x00044000 rm 0x00088000, rn 0x00000001, carryin 1, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00022000 rm 0x00088000, rn 0x00000002, carryin 1, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00110000 rm 0x00088000, rn 0x0000001f, carryin 1, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000020, carryin 1, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00044000 rm 0x00088000, rn 0x00000021, carryin 1, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00110000 rm 0x00088000, rn 0x0000003f, carryin 1, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000040, carryin 1, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00110000 rm 0x00088000, rn 0x000000ff, carryin 1, cpsr 0x00000000     
+rors r0, r1, r2 :: rd 0x00088000 rm 0x00088000, rn 0x00000100, carryin 1, cpsr 0x20000000   C 
+rors r0, r1, r2 :: rd 0x80088000 rm 0x80088000, rn 0x00000100, carryin 1, cpsr 0xa0000000 N C 
+rors r0, r1, r2 :: rd 0x00044000 rm 0x00088000, rn 0x00000101, carryin 1, cpsr 0x00000000     
+ROR immediate
+ror  r0, r1, #0 :: rd 0x00088000 rm 0x00088000, carryin 0, cpsr 0x00000000     
+ror  r0, r1, #1 :: rd 0x00044000 rm 0x00088000, carryin 0, cpsr 0x00000000     
+ror  r0, r1, #31 :: rd 0x00110000 rm 0x00088000, carryin 0, cpsr 0x00000000     
+ror  r0, r1, #16 :: rd 0x00000001 rm 0x00010000, carryin 0, cpsr 0x00000000     
+ror  r0, r1, #17 :: rd 0x80000000 rm 0x00010000, carryin 0, cpsr 0x00000000     
+ror  r0, r1, #18 :: rd 0x40000000 rm 0x00010000, carryin 0, cpsr 0x00000000     
+ror  r0, r1, #0 :: rd 0x00088000 rm 0x00088000, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, #1 :: rd 0x00044000 rm 0x00088000, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, #31 :: rd 0x00110000 rm 0x00088000, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, #16 :: rd 0x00000001 rm 0x00010000, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, #17 :: rd 0x80000000 rm 0x00010000, carryin 1, cpsr 0x20000000   C 
+ror  r0, r1, #18 :: rd 0x40000000 rm 0x00010000, carryin 1, cpsr 0x20000000   C 
+RORS immediate
+rors r0, r1, #0 :: rd 0x00088000 rm 0x00088000, carryin 0, cpsr 0x00000000     
+rors r0, r1, #1 :: rd 0x00044000 rm 0x00088000, carryin 0, cpsr 0x00000000     
+rors r0, r1, #31 :: rd 0x00110000 rm 0x00088000, carryin 0, cpsr 0x00000000     
+rors r0, r1, #16 :: rd 0x00000001 rm 0x00010000, carryin 0, cpsr 0x00000000     
+rors r0, r1, #17 :: rd 0x80000000 rm 0x00010000, carryin 0, cpsr 0xa0000000 N C 
+rors r0, r1, #18 :: rd 0x40000000 rm 0x00010000, carryin 0, cpsr 0x00000000     
+rors r0, r1, #0 :: rd 0x00088000 rm 0x00088000, carryin 1, cpsr 0x20000000   C 
+rors r0, r1, #1 :: rd 0x00044000 rm 0x00088000, carryin 1, cpsr 0x00000000     
+rors r0, r1, #31 :: rd 0x00110000 rm 0x00088000, carryin 1, cpsr 0x00000000     
+rors r0, r1, #16 :: rd 0x00000001 rm 0x00010000, carryin 1, cpsr 0x00000000     
+rors r0, r1, #17 :: rd 0x80000000 rm 0x00010000, carryin 1, cpsr 0xa0000000 N C 
+rors r0, r1, #18 :: rd 0x40000000 rm 0x00010000, carryin 1, cpsr 0x00000000     
+shift with barrel shifter
+add  r0, r1, r2, lsl r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000000, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, lsl r3 :: rd 0xfffffffe rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, lsl r3 :: rd 0x80000000 rm 0x00000000, rn 0xffffffff rs 0x0000001f, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, lsl r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x00000020, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, lsl r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x000000ff, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, lsl r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000100, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, lsr r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000000, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, lsr r3 :: rd 0x7fffffff rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, lsr r3 :: rd 0x00000001 rm 0x00000000, rn 0xffffffff rs 0x0000001f, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, lsr r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x00000020, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, lsr r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x000000ff, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, lsr r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000100, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, asr r3 :: rd 0x7fffffff rm 0x00000000, rn 0x7fffffff rs 0x00000000, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, asr r3 :: rd 0x3fffffff rm 0x00000000, rn 0x7fffffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, asr r3 :: rd 0x00000000 rm 0x00000000, rn 0x7fffffff rs 0x0000001f, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, asr r3 :: rd 0x00000000 rm 0x00000000, rn 0x7fffffff rs 0x00000020, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, asr r3 :: rd 0x00000000 rm 0x00000000, rn 0x7fffffff rs 0x000000ff, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, asr r3 :: rd 0x7fffffff rm 0x00000000, rn 0x7fffffff rs 0x00000100, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, lsr r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000100, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, lsl r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000000, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, lsl r3 :: rd 0xfffffffe rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, lsl r3 :: rd 0x80000000 rm 0x00000000, rn 0xffffffff rs 0x0000001f, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, lsl r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x00000020, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, lsl r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x000000ff, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, lsl r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000100, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, lsr r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000000, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, lsr r3 :: rd 0x7fffffff rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, lsr r3 :: rd 0x00000001 rm 0x00000000, rn 0xffffffff rs 0x0000001f, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, lsr r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x00000020, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, lsr r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x000000ff, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, lsr r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000100, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, asr r3 :: rd 0x7fffffff rm 0x00000000, rn 0x7fffffff rs 0x00000000, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, asr r3 :: rd 0x3fffffff rm 0x00000000, rn 0x7fffffff rs 0x00000001, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, asr r3 :: rd 0x00000000 rm 0x00000000, rn 0x7fffffff rs 0x0000001f, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, asr r3 :: rd 0x00000000 rm 0x00000000, rn 0x7fffffff rs 0x00000020, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, asr r3 :: rd 0x00000000 rm 0x00000000, rn 0x7fffffff rs 0x000000ff, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, asr r3 :: rd 0x7fffffff rm 0x00000000, rn 0x7fffffff rs 0x00000100, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, lsr r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000100, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, asr r3 :: rd 0x00000008 rm 0x00000000, rn 0x00000008 rs 0x00000000, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, asr r3 :: rd 0x00000004 rm 0x00000000, rn 0x00000008 rs 0x00000001, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, asr r3 :: rd 0x00000002 rm 0x00000000, rn 0x00000008 rs 0x00000002, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, asr r3 :: rd 0x00000001 rm 0x00000000, rn 0x00000008 rs 0x00000003, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, asr r3 :: rd 0x00000000 rm 0x00000000, rn 0x00000008 rs 0x00000004, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, asr r3 :: rd 0x00000000 rm 0x00000000, rn 0x00000008 rs 0x00000005, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, asr r3 :: rd 0x00000008 rm 0x00000000, rn 0x00000008 rs 0x00000000, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, asr r3 :: rd 0x00000004 rm 0x00000000, rn 0x00000008 rs 0x00000001, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, asr r3 :: rd 0x00000002 rm 0x00000000, rn 0x00000008 rs 0x00000002, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, asr r3 :: rd 0x00000001 rm 0x00000000, rn 0x00000008 rs 0x00000003, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, asr r3 :: rd 0x00000000 rm 0x00000000, rn 0x00000008 rs 0x00000004, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, asr r3 :: rd 0x00000000 rm 0x00000000, rn 0x00000008 rs 0x00000005, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, ror r3 :: rd 0x00088000 rm 0x00000000, rn 0x00088000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, ror r3 :: rd 0x80088000 rm 0x00000000, rn 0x80088000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, ror r3 :: rd 0x00044000 rm 0x00000000, rn 0x00088000 rs 0x00000001, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, ror r3 :: rd 0x00110000 rm 0x00000000, rn 0x00088000 rs 0x0000001f, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, ror r3 :: rd 0x00088000 rm 0x00000000, rn 0x00088000 rs 0x00000020, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, ror r3 :: rd 0x00110000 rm 0x00000000, rn 0x00088000 rs 0x000000ff, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, ror r3 :: rd 0x00088000 rm 0x00000000, rn 0x00088000 rs 0x00000100, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, ror r3 :: rd 0x80088000 rm 0x00000000, rn 0x80088000 rs 0x00000100, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, ror r3 :: rd 0x00044000 rm 0x00000000, rn 0x00088000 rs 0x00000101, carryin 0, cpsr 0x00000000     
+add  r0, r1, r2, ror r3 :: rd 0x00088000 rm 0x00000000, rn 0x00088000 rs 0x00000000, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, ror r3 :: rd 0x80088000 rm 0x00000000, rn 0x80088000 rs 0x00000000, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, ror r3 :: rd 0x00044000 rm 0x00000000, rn 0x00088000 rs 0x00000001, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, ror r3 :: rd 0x00110000 rm 0x00000000, rn 0x00088000 rs 0x0000001f, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, ror r3 :: rd 0x00088000 rm 0x00000000, rn 0x00088000 rs 0x00000020, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, ror r3 :: rd 0x00110000 rm 0x00000000, rn 0x00088000 rs 0x000000ff, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, ror r3 :: rd 0x00088000 rm 0x00000000, rn 0x00088000 rs 0x00000100, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, ror r3 :: rd 0x80088000 rm 0x00000000, rn 0x80088000 rs 0x00000100, carryin 1, cpsr 0x20000000   C 
+add  r0, r1, r2, ror r3 :: rd 0x00044000 rm 0x00000000, rn 0x00088000 rs 0x00000101, carryin 1, cpsr 0x20000000   C 
+adds r0, r1, r2, lsl r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000000, carryin 0, cpsr 0x80000000 N   
+adds r0, r1, r2, lsl r3 :: rd 0xfffffffe rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 0, cpsr 0x80000000 N   
+adds r0, r1, r2, lsl r3 :: rd 0x80000000 rm 0x00000000, rn 0xffffffff rs 0x0000001f, carryin 0, cpsr 0x80000000 N   
+adds r0, r1, r2, lsl r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x00000020, carryin 0, cpsr 0x40000000  Z  
+adds r0, r1, r2, lsl r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x000000ff, carryin 0, cpsr 0x40000000  Z  
+adds r0, r1, r2, lsl r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000100, carryin 0, cpsr 0x80000000 N   
+adds r0, r1, r2, lsr r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000000, carryin 0, cpsr 0x80000000 N   
+adds r0, r1, r2, lsr r3 :: rd 0x7fffffff rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+adds r0, r1, r2, lsr r3 :: rd 0x00000001 rm 0x00000000, rn 0xffffffff rs 0x0000001f, carryin 0, cpsr 0x00000000     
+adds r0, r1, r2, lsr r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x00000020, carryin 0, cpsr 0x40000000  Z  
+adds r0, r1, r2, lsr r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x000000ff, carryin 0, cpsr 0x40000000  Z  
+adds r0, r1, r2, lsr r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000100, carryin 0, cpsr 0x80000000 N   
+adds r0, r1, r2, ror r3 :: rd 0x00088000 rm 0x00000000, rn 0x00088000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+adds r0, r1, r2, ror r3 :: rd 0x80088000 rm 0x00000000, rn 0x80088000 rs 0x00000000, carryin 0, cpsr 0x80000000 N   
+adds r0, r1, r2, ror r3 :: rd 0x00044000 rm 0x00000000, rn 0x00088000 rs 0x00000001, carryin 0, cpsr 0x00000000     
+adds r0, r1, r2, ror r3 :: rd 0x00110000 rm 0x00000000, rn 0x00088000 rs 0x0000001f, carryin 0, cpsr 0x00000000     
+adds r0, r1, r2, ror r3 :: rd 0x00088000 rm 0x00000000, rn 0x00088000 rs 0x00000020, carryin 0, cpsr 0x00000000     
+adds r0, r1, r2, ror r3 :: rd 0x00110000 rm 0x00000000, rn 0x00088000 rs 0x000000ff, carryin 0, cpsr 0x00000000     
+adds r0, r1, r2, ror r3 :: rd 0x00088000 rm 0x00000000, rn 0x00088000 rs 0x00000100, carryin 0, cpsr 0x00000000     
+adds r0, r1, r2, ror r3 :: rd 0x80088000 rm 0x00000000, rn 0x80088000 rs 0x00000100, carryin 0, cpsr 0x80000000 N   
+adds r0, r1, r2, ror r3 :: rd 0x00044000 rm 0x00000000, rn 0x00088000 rs 0x00000101, carryin 0, cpsr 0x00000000     
+adds r0, r1, r2, lsl r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000000, carryin 1, cpsr 0x80000000 N   
+adds r0, r1, r2, lsl r3 :: rd 0xfffffffe rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 1, cpsr 0x80000000 N   
+adds r0, r1, r2, lsl r3 :: rd 0x80000000 rm 0x00000000, rn 0xffffffff rs 0x0000001f, carryin 1, cpsr 0x80000000 N   
+adds r0, r1, r2, lsl r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x00000020, carryin 1, cpsr 0x40000000  Z  
+adds r0, r1, r2, lsl r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x000000ff, carryin 1, cpsr 0x40000000  Z  
+adds r0, r1, r2, lsl r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000100, carryin 1, cpsr 0x80000000 N   
+adds r0, r1, r2, lsr r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000000, carryin 1, cpsr 0x80000000 N   
+adds r0, r1, r2, lsr r3 :: rd 0x7fffffff rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 1, cpsr 0x00000000     
+adds r0, r1, r2, lsr r3 :: rd 0x00000001 rm 0x00000000, rn 0xffffffff rs 0x0000001f, carryin 1, cpsr 0x00000000     
+adds r0, r1, r2, lsr r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x00000020, carryin 1, cpsr 0x40000000  Z  
+adds r0, r1, r2, lsr r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x000000ff, carryin 1, cpsr 0x40000000  Z  
+adds r0, r1, r2, lsr r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000100, carryin 1, cpsr 0x80000000 N   
+adds r0, r1, r2, ror r3 :: rd 0x00088000 rm 0x00000000, rn 0x00088000 rs 0x00000000, carryin 1, cpsr 0x00000000     
+adds r0, r1, r2, ror r3 :: rd 0x80088000 rm 0x00000000, rn 0x80088000 rs 0x00000000, carryin 1, cpsr 0x80000000 N   
+adds r0, r1, r2, ror r3 :: rd 0x00044000 rm 0x00000000, rn 0x00088000 rs 0x00000001, carryin 1, cpsr 0x00000000     
+adds r0, r1, r2, ror r3 :: rd 0x00110000 rm 0x00000000, rn 0x00088000 rs 0x0000001f, carryin 1, cpsr 0x00000000     
+adds r0, r1, r2, ror r3 :: rd 0x00088000 rm 0x00000000, rn 0x00088000 rs 0x00000020, carryin 1, cpsr 0x00000000     
+adds r0, r1, r2, ror r3 :: rd 0x00110000 rm 0x00000000, rn 0x00088000 rs 0x000000ff, carryin 1, cpsr 0x00000000     
+adds r0, r1, r2, ror r3 :: rd 0x00088000 rm 0x00000000, rn 0x00088000 rs 0x00000100, carryin 1, cpsr 0x00000000     
+adds r0, r1, r2, ror r3 :: rd 0x80088000 rm 0x00000000, rn 0x80088000 rs 0x00000100, carryin 1, cpsr 0x80000000 N   
+adds r0, r1, r2, ror r3 :: rd 0x00044000 rm 0x00000000, rn 0x00088000 rs 0x00000101, carryin 1, cpsr 0x00000000     
+adcs r0, r1, r2, lsl r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000000, carryin 0, cpsr 0x80000000 N   
+adcs r0, r1, r2, lsr r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000000, carryin 0, cpsr 0x80000000 N   
+adcs r0, r1, r2, lsl r3 :: rd 0xfffffffe rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 0, cpsr 0x80000000 N   
+adcs r0, r1, r2, lsr r3 :: rd 0x7fffffff rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+adcs r0, r1, r2, lsl r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x00000000, carryin 1, cpsr 0x60000000  ZC 
+adcs r0, r1, r2, lsr r3 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff rs 0x00000000, carryin 1, cpsr 0x60000000  ZC 
+adcs r0, r1, r2, lsl r3 :: rd 0xffffffff rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 1, cpsr 0x80000000 N   
+adcs r0, r1, r2, lsr r3 :: rd 0x80000000 rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 1, cpsr 0x90000000 N  V
+MUL
+mul  r0, r1, r2 :: rd 0x00000000 rm 0x00000000, rn 0x00000000, carryin 0, cpsr 0x00000000     
+mul  r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000000, carryin 0, cpsr 0x00000000     
+mul  r0, r1, r2 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff, carryin 0, cpsr 0x00000000     
+mul  r0, r1, r2 :: rd 0x00000001 rm 0xffffffff, rn 0xffffffff, carryin 0, cpsr 0x00000000     
+mul  r0, r1, r2 :: rd 0x00000001 rm 0x7fffffff, rn 0x7fffffff, carryin 0, cpsr 0x00000000     
+mul  r0, r1, r2 :: rd 0xfffe0001 rm 0x0000ffff, rn 0x0000ffff, carryin 0, cpsr 0x00000000     
+MULS
+muls r0, r1, r2 :: rd 0x00000000 rm 0x00000000, rn 0x00000000, carryin 0, cpsr 0x40000000  Z  
+muls r0, r1, r2 :: rd 0x00000000 rm 0xffffffff, rn 0x00000000, carryin 0, cpsr 0x40000000  Z  
+muls r0, r1, r2 :: rd 0x00000000 rm 0x00000000, rn 0xffffffff, carryin 0, cpsr 0x40000000  Z  
+muls r0, r1, r2 :: rd 0x00000001 rm 0xffffffff, rn 0xffffffff, carryin 0, cpsr 0x00000000     
+muls r0, r1, r2 :: rd 0x00000001 rm 0x7fffffff, rn 0x7fffffff, carryin 0, cpsr 0x00000000     
+muls r0, r1, r2 :: rd 0xfffe0001 rm 0x0000ffff, rn 0x0000ffff, carryin 0, cpsr 0x80000000 N   
+MLA
+mla  r0, r1, r2, r3 :: rd 0x00000001 rm 0x00000000, rn 0x00000000 rs 0x00000001, carryin 0, cpsr 0x00000000     
+mla  r0, r1, r2, r3 :: rd 0x00000001 rm 0xffffffff, rn 0x00000000 rs 0x00000001, carryin 0, cpsr 0x00000000     
+mla  r0, r1, r2, r3 :: rd 0x00000001 rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+mla  r0, r1, r2, r3 :: rd 0x00000002 rm 0xffffffff, rn 0xffffffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+mla  r0, r1, r2, r3 :: rd 0x00000002 rm 0x7fffffff, rn 0x7fffffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+mla  r0, r1, r2, r3 :: rd 0xfffe0002 rm 0x0000ffff, rn 0x0000ffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+MLAS
+mlas r0, r1, r2, r3 :: rd 0x00000001 rm 0x00000000, rn 0x00000000 rs 0x00000001, carryin 0, cpsr 0x00000000     
+mlas r0, r1, r2, r3 :: rd 0x00000001 rm 0xffffffff, rn 0x00000000 rs 0x00000001, carryin 0, cpsr 0x00000000     
+mlas r0, r1, r2, r3 :: rd 0x00000001 rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+mlas r0, r1, r2, r3 :: rd 0x00000002 rm 0xffffffff, rn 0xffffffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+mlas r0, r1, r2, r3 :: rd 0x00000002 rm 0x7fffffff, rn 0x7fffffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+mlas r0, r1, r2, r3 :: rd 0xfffe0002 rm 0x0000ffff, rn 0x0000ffff rs 0x00000001, carryin 0, cpsr 0x80000000 N   
+MLS
+mls  r0, r1, r2, r3 :: rd 0x00000001 rm 0x00000000, rn 0x00000000 rs 0x00000001, carryin 0, cpsr 0x00000000     
+mls  r0, r1, r2, r3 :: rd 0x00000001 rm 0xffffffff, rn 0x00000000 rs 0x00000001, carryin 0, cpsr 0x00000000     
+mls  r0, r1, r2, r3 :: rd 0x00000001 rm 0x00000000, rn 0xffffffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+mls  r0, r1, r2, r3 :: rd 0x00000000 rm 0xffffffff, rn 0xffffffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+mls  r0, r1, r2, r3 :: rd 0x00000000 rm 0x7fffffff, rn 0x7fffffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+mls  r0, r1, r2, r3 :: rd 0x00020000 rm 0x0000ffff, rn 0x0000ffff rs 0x00000001, carryin 0, cpsr 0x00000000     
+UMULL
+umull  r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+umull  r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000001, carryin 0, cpsr 0x00000000     
+umull  r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000001 rs 0x00000000, carryin 0, cpsr 0x00000000     
+umull  r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000000, rm 0x00000001 rs 0x00000001, carryin 0, cpsr 0x00000000     
+umull  r0, r1, r2, r3 :: rd 0xfffe0001 rd2 0x00000000, rm 0x0000ffff rs 0x0000ffff, carryin 0, cpsr 0x00000000     
+umull  r0, r1, r2, r3 :: rd 0x00000001 rd2 0xfffffffe, rm 0xffffffff rs 0xffffffff, carryin 0, cpsr 0x00000000     
+umulls r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x40000000  Z  
+umulls r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000001, carryin 0, cpsr 0x40000000  Z  
+umulls r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000001 rs 0x00000000, carryin 0, cpsr 0x40000000  Z  
+umulls r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000000, rm 0x00000001 rs 0x00000001, carryin 0, cpsr 0x00000000     
+umulls r0, r1, r2, r3 :: rd 0xfffe0001 rd2 0x00000000, rm 0x0000ffff rs 0x0000ffff, carryin 0, cpsr 0x00000000     
+umulls r0, r1, r2, r3 :: rd 0x00000001 rd2 0xfffffffe, rm 0xffffffff rs 0xffffffff, carryin 0, cpsr 0x80000000 N   
+SMULL
+smull  r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+smull  r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000001, carryin 0, cpsr 0x00000000     
+smull  r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000001 rs 0x00000000, carryin 0, cpsr 0x00000000     
+smull  r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000000, rm 0x00000001 rs 0x00000001, carryin 0, cpsr 0x00000000     
+smull  r0, r1, r2, r3 :: rd 0xfffe0001 rd2 0x00000000, rm 0x0000ffff rs 0x0000ffff, carryin 0, cpsr 0x00000000     
+smull  r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000000, rm 0xffffffff rs 0xffffffff, carryin 0, cpsr 0x00000000     
+smulls r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x40000000  Z  
+smulls r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000001, carryin 0, cpsr 0x40000000  Z  
+smulls r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000001 rs 0x00000000, carryin 0, cpsr 0x40000000  Z  
+smulls r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000000, rm 0x00000001 rs 0x00000001, carryin 0, cpsr 0x00000000     
+smulls r0, r1, r2, r3 :: rd 0xfffe0001 rd2 0x00000000, rm 0x0000ffff rs 0x0000ffff, carryin 0, cpsr 0x00000000     
+smulls r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000000, rm 0xffffffff rs 0xffffffff, carryin 0, cpsr 0x00000000     
+UMLAL
+umlal  r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+umlal  r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000001, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+umlal  r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000001, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+umlal  r0, r1, r2, r3 :: rd 0x00000001 rd2 0xffffffff, rm 0x00000001 rs 0x00000001, carryin 0, cpsr 0x00000000     
+umlal  r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000001, carryin 0, cpsr 0x00000000     
+umlal  r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000001 rs 0x00000000, carryin 0, cpsr 0x00000000     
+umlal  r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000000, rm 0x00000001 rs 0x00000001, carryin 0, cpsr 0x00000000     
+umlal  r0, r1, r2, r3 :: rd 0xfffe0001 rd2 0x00000000, rm 0x0000ffff rs 0x0000ffff, carryin 0, cpsr 0x00000000     
+umlal  r0, r1, r2, r3 :: rd 0x00000001 rd2 0xfffffffe, rm 0xffffffff rs 0xffffffff, carryin 0, cpsr 0x00000000     
+umlals r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x40000000  Z  
+umlals r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000001, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+umlals r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000001, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+umlals r0, r1, r2, r3 :: rd 0x00000001 rd2 0xffffffff, rm 0x00000001 rs 0x00000001, carryin 0, cpsr 0x80000000 N   
+umlals r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000001, carryin 0, cpsr 0x40000000  Z  
+umlals r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000001 rs 0x00000000, carryin 0, cpsr 0x40000000  Z  
+umlals r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000000, rm 0x00000001 rs 0x00000001, carryin 0, cpsr 0x00000000     
+umlals r0, r1, r2, r3 :: rd 0xfffe0001 rd2 0x00000000, rm 0x0000ffff rs 0x0000ffff, carryin 0, cpsr 0x00000000     
+umlals r0, r1, r2, r3 :: rd 0x00000001 rd2 0xfffffffe, rm 0xffffffff rs 0xffffffff, carryin 0, cpsr 0x80000000 N   
+SMLAL
+smlal  r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+smlal  r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000001, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+smlal  r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000001, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+smlal  r0, r1, r2, r3 :: rd 0x00000001 rd2 0xffffffff, rm 0x00000001 rs 0x00000001, carryin 0, cpsr 0x00000000     
+smlal  r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000001, carryin 0, cpsr 0x00000000     
+smlal  r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000001 rs 0x00000000, carryin 0, cpsr 0x00000000     
+smlal  r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000000, rm 0x00000001 rs 0x00000001, carryin 0, cpsr 0x00000000     
+smlal  r0, r1, r2, r3 :: rd 0xfffe0001 rd2 0x00000000, rm 0x0000ffff rs 0x0000ffff, carryin 0, cpsr 0x00000000     
+smlal  r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000000, rm 0xffffffff rs 0xffffffff, carryin 0, cpsr 0x00000000     
+smlals r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x40000000  Z  
+smlals r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000001, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+smlals r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000001, rm 0x00000000 rs 0x00000000, carryin 0, cpsr 0x00000000     
+smlals r0, r1, r2, r3 :: rd 0x00000001 rd2 0xffffffff, rm 0x00000001 rs 0x00000001, carryin 0, cpsr 0x80000000 N   
+smlals r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000000 rs 0x00000001, carryin 0, cpsr 0x40000000  Z  
+smlals r0, r1, r2, r3 :: rd 0x00000000 rd2 0x00000000, rm 0x00000001 rs 0x00000000, carryin 0, cpsr 0x40000000  Z  
+smlals r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000000, rm 0x00000001 rs 0x00000001, carryin 0, cpsr 0x00000000     
+smlals r0, r1, r2, r3 :: rd 0xfffe0001 rd2 0x00000000, rm 0x0000ffff rs 0x0000ffff, carryin 0, cpsr 0x00000000     
+smlals r0, r1, r2, r3 :: rd 0x00000001 rd2 0x00000000, rm 0xffffffff rs 0xffffffff, carryin 0, cpsr 0x00000000     
+CLZ
+clz  r0, r1 :: rd 0x00000020 rm 0x00000000, carryin 0, cpsr 0x00000000     
+clz  r0, r1 :: rd 0x0000001f rm 0x00000001, carryin 0, cpsr 0x00000000     
+clz  r0, r1 :: rd 0x0000001b rm 0x00000010, carryin 0, cpsr 0x00000000     
+clz  r0, r1 :: rd 0x00000000 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+clz  r0, r1 :: rd 0x00000020 rm 0x00000000, carryin 1, cpsr 0x20000000   C 
+clz  r0, r1 :: rd 0x0000001f rm 0x00000001, carryin 1, cpsr 0x20000000   C 
+clz  r0, r1 :: rd 0x0000001b rm 0x00000010, carryin 1, cpsr 0x20000000   C 
+clz  r0, r1 :: rd 0x00000000 rm 0xffffffff, carryin 1, cpsr 0x20000000   C 
+extend instructions
+uxtb r0, r1 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x00000000     
+uxtb r0, r1 :: rd 0x00000001 rm 0x00000001, carryin 0, cpsr 0x00000000     
+uxtb r0, r1 :: rd 0x000000ff rm 0x000000ff, carryin 0, cpsr 0x00000000     
+uxtb r0, r1 :: rd 0x000000ff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+sxtb r0, r1 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x00000000     
+sxtb r0, r1 :: rd 0x00000001 rm 0x00000001, carryin 0, cpsr 0x00000000     
+sxtb r0, r1 :: rd 0xffffffff rm 0x000000ff, carryin 0, cpsr 0x00000000     
+sxtb r0, r1 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+uxth r0, r1 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x00000000     
+uxth r0, r1 :: rd 0x00000001 rm 0x00000001, carryin 0, cpsr 0x00000000     
+uxth r0, r1 :: rd 0x0000ffff rm 0x0000ffff, carryin 0, cpsr 0x00000000     
+uxth r0, r1 :: rd 0x0000ffff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+sxth r0, r1 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x00000000     
+sxth r0, r1 :: rd 0x00000001 rm 0x00000001, carryin 0, cpsr 0x00000000     
+sxth r0, r1 :: rd 0x00007fff rm 0x00007fff, carryin 0, cpsr 0x00000000     
+sxth r0, r1 :: rd 0xffffffff rm 0x0000ffff, carryin 0, cpsr 0x00000000     
+sxth r0, r1 :: rd 0xffffffff rm 0x0010ffff, carryin 0, cpsr 0x00000000     
+sxth r0, r1 :: rd 0x00007fff rm 0x00107fff, carryin 0, cpsr 0x00000000     
+sxth r0, r1 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+uxtb r0, r1, ror #0 :: rd 0x000000ff rm 0x000000ff, carryin 0, cpsr 0x00000000     
+uxtb r0, r1, ror #8 :: rd 0x00000000 rm 0x000000ff, carryin 0, cpsr 0x00000000     
+uxtb r0, r1, ror #8 :: rd 0x000000ff rm 0x0000ff00, carryin 0, cpsr 0x00000000     
+uxtb r0, r1, ror #16 :: rd 0x000000ff rm 0x00ff0000, carryin 0, cpsr 0x00000000     
+uxtb r0, r1, ror #24 :: rd 0x000000ff rm 0xff000000, carryin 0, cpsr 0x00000000     
+uxtb16 r0, r1 :: rd 0x00ff00ff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+uxtb16 r0, r1, ror #16 :: rd 0x00ff0000 rm 0x0000ffff, carryin 0, cpsr 0x00000000     
+sxtb16 r0, r1 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+sxtb16 r0, r1 :: rd 0xffffffff rm 0x00ff00ff, carryin 0, cpsr 0x00000000     
+sxtb16 r0, r1 :: rd 0x007f007f rm 0x007f007f, carryin 0, cpsr 0x00000000     
+------------ BFI ------------
+bfi  r0, r1, #0, #11 :: rd 0x555552aa rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+bfi  r0, r1, #1, #11 :: rd 0x55555555 rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+bfi  r0, r1, #2, #11 :: rd 0x55554aa9 rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+bfi  r0, r1, #19, #11 :: rd 0x7ffd5555 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+bfi  r0, r1, #20, #11 :: rd 0x7ff55555 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+bfi  r0, r1, #21, #11 :: rd 0xfff55555 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+bfi  r0, r1, #0, #32 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+bfi  r0, r1, #1, #31 :: rd 0xffffffff rm 0xffffffff, carryin 0, cpsr 0x00000000     
+bfi  r0, r1, #29, #3 :: rd 0xf5555555 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+bfi  r0, r1, #30, #2 :: rd 0xd5555555 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+bfi  r0, r1, #31, #1 :: rd 0xd5555555 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+------------ BFC ------------
+bfc  r0, #0, #11 :: rd 0x55555000 rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+bfc  r0, #1, #11 :: rd 0x55555001 rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+bfc  r0, #2, #11 :: rd 0x55554001 rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+bfc  r0, #19, #11 :: rd 0x40055555 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+bfc  r0, #20, #11 :: rd 0x00055555 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+bfc  r0, #21, #11 :: rd 0x00155555 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+bfc  r0, #0, #32 :: rd 0x00000000 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+bfc  r0, #1, #31 :: rd 0x00000001 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+bfc  r0, #29, #3 :: rd 0x15555555 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+bfc  r0, #30, #2 :: rd 0x15555555 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+bfc  r0, #31, #1 :: rd 0x55555555 rm 0xffffffff, carryin 0, cpsr 0x00000000     
+------------ SBFX ------------
+sbfx  r0, r1, #0, #1 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #0, #1 :: rd 0xffffffff rm 0x00000001, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #1, #1 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #1, #1 :: rd 0x00000000 rm 0x00000001, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #1, #1 :: rd 0xffffffff rm 0x00000002, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #1, #1 :: rd 0xffffffff rm 0x00000003, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #0, #2 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #0, #2 :: rd 0x00000001 rm 0x00000001, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #1, #2 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #1, #2 :: rd 0x00000000 rm 0x00000001, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #1, #2 :: rd 0x00000001 rm 0x00000002, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #1, #2 :: rd 0x00000001 rm 0x00000003, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #0, #11 :: rd 0x000002aa rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #1, #11 :: rd 0xfffffd55 rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #2, #11 :: rd 0x000002aa rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #2, #11 :: rd 0x000002aa rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #31, #1 :: rd 0xffffffff rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+sbfx  r0, r1, #30, #2 :: rd 0xfffffffe rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+------------ UBFX ------------
+ubfx  r0, r1, #0, #1 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #0, #1 :: rd 0x00000001 rm 0x00000001, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #1, #1 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #1, #1 :: rd 0x00000000 rm 0x00000001, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #1, #1 :: rd 0x00000001 rm 0x00000002, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #1, #1 :: rd 0x00000001 rm 0x00000003, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #0, #2 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #0, #2 :: rd 0x00000001 rm 0x00000001, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #1, #2 :: rd 0x00000000 rm 0x00000000, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #1, #2 :: rd 0x00000000 rm 0x00000001, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #1, #2 :: rd 0x00000001 rm 0x00000002, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #1, #2 :: rd 0x00000001 rm 0x00000003, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #0, #11 :: rd 0x000002aa rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #1, #11 :: rd 0x00000555 rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #2, #11 :: rd 0x000002aa rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #2, #11 :: rd 0x000002aa rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #31, #1 :: rd 0x00000001 rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+ubfx  r0, r1, #30, #2 :: rd 0x00000002 rm 0xaaaaaaaa, carryin 0, cpsr 0x00000000     
+------------ SMULL{B,T}{B,T} ------------
+smulbb r0, r1, r2 :: rd 0x00000000 rm 0x00030000, rn 0x00040000, carryin 0, cpsr 0x00000000     
+smulbb r0, r1, r2 :: rd 0x00000002 rm 0x00030001, rn 0x00040002, carryin 0, cpsr 0x00000000     
+smulbb r0, r1, r2 :: rd 0xc000ffff rm 0x00038001, rn 0x00047fff, carryin 0, cpsr 0x00000000     
+smulbb r0, r1, r2 :: rd 0x3fff0001 rm 0x00037fff, rn 0x00047fff, carryin 0, cpsr 0x00000000     
+smulbb r0, r1, r2 :: rd 0x00000001 rm 0x0003ffff, rn 0x0004ffff, carryin 0, cpsr 0x00000000     
+------------ SXTAB ------------
+sxtab r0, r1, r2, ROR #24 :: rd 0x3141594e rm 0x31415927, rn 0x27182819, carryin 0, cpsr 0x00000000     
+sxtab r0, r1, r2, ROR #16 :: rd 0x3141593f rm 0x31415927, rn 0x27182819, carryin 0, cpsr 0x00000000     
+sxtab r0, r1, r2, ROR #8 :: rd 0x3141594f rm 0x31415927, rn 0x27182819, carryin 0, cpsr 0x00000000     
+sxtab r0, r1, r2, ROR #0 :: rd 0x31415940 rm 0x31415927, rn 0x27182819, carryin 0, cpsr 0x00000000     
+sxtab r0, r1, r2, ROR #24 :: rd 0x3141594e rm 0x31415927, rn 0x27182899, carryin 0, cpsr 0x00000000     
+sxtab r0, r1, r2, ROR #16 :: rd 0x3141593f rm 0x31415927, rn 0x27182899, carryin 0, cpsr 0x00000000     
+sxtab r0, r1, r2, ROR #8 :: rd 0x3141594f rm 0x31415927, rn 0x27182899, carryin 0, cpsr 0x00000000     
+sxtab r0, r1, r2, ROR #0 :: rd 0x314158c0 rm 0x31415927, rn 0x27182899, carryin 0, cpsr 0x00000000     
+------------ UXTAH ------------
+uxtah r0, r1, r2, ROR #24 :: rd 0x3141724e rm 0x31415927, rn 0x27182819, carryin 0, cpsr 0x00000000     
+uxtah r0, r1, r2, ROR #16 :: rd 0x3141803f rm 0x31415927, rn 0x27182819, carryin 0, cpsr 0x00000000     
+uxtah r0, r1, r2, ROR #8 :: rd 0x3141714f rm 0x31415927, rn 0x27182819, carryin 0, cpsr 0x00000000     
+uxtah r0, r1, r2, ROR #0 :: rd 0x31418140 rm 0x31415927, rn 0x27182819, carryin 0, cpsr 0x00000000     
+uxtah r0, r1, r2, ROR #24 :: rd 0x3141f24e rm 0x31415927, rn 0x27182899, carryin 0, cpsr 0x00000000     
+uxtah r0, r1, r2, ROR #16 :: rd 0x3141803f rm 0x31415927, rn 0x27182899, carryin 0, cpsr 0x00000000     
+uxtah r0, r1, r2, ROR #8 :: rd 0x3141714f rm 0x31415927, rn 0x27182899, carryin 0, cpsr 0x00000000     
+uxtah r0, r1, r2, ROR #0 :: rd 0x314181c0 rm 0x31415927, rn 0x27182899, carryin 0, cpsr 0x00000000     
diff --git a/none/tests/arm/v6int.vgtest b/none/tests/arm/v6int.vgtest
new file mode 100644 (file)
index 0000000..5695724
--- /dev/null
@@ -0,0 +1,2 @@
+prog: v6int
+vgopts: -q