summaryrefslogtreecommitdiffstats
path: root/test/MC/ARM
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2011-10-20 21:10:27 +0000
committerdim <dim@FreeBSD.org>2011-10-20 21:10:27 +0000
commit7b3392326c40c3c20697816acae597ba7b3144eb (patch)
tree2cbcf22585e99f8a87d12d5ff94f392c0d266819 /test/MC/ARM
parent1176aa52646fe641a4243a246aa7f960c708a274 (diff)
downloadFreeBSD-src-7b3392326c40c3c20697816acae597ba7b3144eb.zip
FreeBSD-src-7b3392326c40c3c20697816acae597ba7b3144eb.tar.gz
Vendor import of llvm release_30 branch r142614:
http://llvm.org/svn/llvm-project/llvm/branches/release_30@142614
Diffstat (limited to 'test/MC/ARM')
-rw-r--r--test/MC/ARM/arm-memory-instructions.s479
-rw-r--r--test/MC/ARM/arm_addrmode3.s8
-rw-r--r--test/MC/ARM/arm_fixups.s22
-rw-r--r--test/MC/ARM/arm_instructions.s135
-rw-r--r--test/MC/ARM/basic-arm-instructions.s2452
-rw-r--r--test/MC/ARM/basic-thumb-instructions.s623
-rw-r--r--test/MC/ARM/basic-thumb2-instructions.s3213
-rw-r--r--test/MC/ARM/diagnostics.s227
-rw-r--r--test/MC/ARM/elf-movt.s8
-rw-r--r--test/MC/ARM/elf-reloc-01.ll8
-rw-r--r--test/MC/ARM/elf-reloc-02.ll8
-rw-r--r--test/MC/ARM/elf-reloc-03.ll8
-rw-r--r--test/MC/ARM/elf-thumbfunc-reloc.ll10
-rw-r--r--test/MC/ARM/elf-thumbfunc.s6
-rw-r--r--test/MC/ARM/mode-switch.s14
-rw-r--r--test/MC/ARM/neon-bitwise-encoding.s58
-rw-r--r--test/MC/ARM/neon-cmp-encoding.s124
-rw-r--r--test/MC/ARM/neon-dup-encoding.s32
-rw-r--r--test/MC/ARM/neon-mov-encoding.s138
-rw-r--r--test/MC/ARM/neon-mul-accum-encoding.s3
-rw-r--r--test/MC/ARM/neon-mul-encoding.s134
-rw-r--r--test/MC/ARM/neon-vld-encoding.s197
-rw-r--r--test/MC/ARM/neont2-absdiff-encoding.s87
-rw-r--r--test/MC/ARM/neont2-bitcount-encoding.s34
-rw-r--r--test/MC/ARM/neont2-bitwise-encoding.s58
-rw-r--r--test/MC/ARM/neont2-dup-encoding.s66
-rw-r--r--test/MC/ARM/neont2-mul-accum-encoding.s81
-rw-r--r--test/MC/ARM/neont2-pairwise-encoding.s181
-rw-r--r--test/MC/ARM/nop-armv4-padding.s10
-rw-r--r--test/MC/ARM/nop-armv6t2-padding.s10
-rw-r--r--test/MC/ARM/nop-thumb-padding.s12
-rw-r--r--test/MC/ARM/nop-thumb2-padding.s12
-rw-r--r--test/MC/ARM/reg-list.s8
-rw-r--r--test/MC/ARM/simple-encoding.ll236
-rw-r--r--test/MC/ARM/simple-fp-encoding.s43
-rw-r--r--test/MC/ARM/thumb-diagnostics.s139
-rw-r--r--test/MC/ARM/thumb-nop.s9
-rw-r--r--test/MC/ARM/thumb.s48
-rw-r--r--test/MC/ARM/thumb2-diagnostics.s44
-rw-r--r--test/MC/ARM/thumb2-mclass.s74
-rw-r--r--test/MC/ARM/thumb2.s355
-rw-r--r--test/MC/ARM/thumb2_instructions.s12
-rw-r--r--test/MC/ARM/xscale-attributes.ll2
43 files changed, 7802 insertions, 1626 deletions
diff --git a/test/MC/ARM/arm-memory-instructions.s b/test/MC/ARM/arm-memory-instructions.s
new file mode 100644
index 0000000..783ac28
--- /dev/null
+++ b/test/MC/ARM/arm-memory-instructions.s
@@ -0,0 +1,479 @@
+@ RUN: llvm-mc -triple=armv7-apple-darwin -show-encoding < %s | FileCheck %s
+ .syntax unified
+ .globl _func
+
+@ Check that the assembler can handle the documented syntax from the ARM ARM
+@ for loads and stores.
+
+_func:
+@ CHECK: _func
+
+@------------------------------------------------------------------------------
+@ LDR (immediate)
+@------------------------------------------------------------------------------
+ ldr r5, [r7]
+ ldr r6, [r3, #63]
+ ldr r2, [r4, #4095]!
+ ldr r1, [r2], #30
+ ldr r3, [r1], #-30
+
+@ CHECK: ldr r5, [r7] @ encoding: [0x00,0x50,0x97,0xe5]
+@ CHECK: ldr r6, [r3, #63] @ encoding: [0x3f,0x60,0x93,0xe5]
+@ CHECK: ldr r2, [r4, #4095]! @ encoding: [0xff,0x2f,0xb4,0xe5]
+@ CHECK: ldr r1, [r2], #30 @ encoding: [0x1e,0x10,0x92,0xe4]
+@ CHECK: ldr r3, [r1], #-30 @ encoding: [0x1e,0x30,0x11,0xe4]
+
+@------------------------------------------------------------------------------
+@ FIXME: LDR (literal)
+@------------------------------------------------------------------------------
+@ label operands currently assert the show-encoding asm comment helper due
+@ to the use of non-contiguous bit ranges for fixups in ARM. Once that's
+@ cleaned up, we can write useful assembly testcases for these sorts of
+@ instructions.
+
+@------------------------------------------------------------------------------
+@ LDR (register)
+@------------------------------------------------------------------------------
+ ldr r3, [r8, r1]
+ ldr r2, [r5, -r3]
+ ldr r1, [r5, r9]!
+ ldr r6, [r7, -r8]!
+ ldr r1, [r0, r2, lsr #3]!
+ ldr r5, [r9], r2
+ ldr r4, [r3], -r6
+ ldr r3, [r8, -r2, lsl #15]
+ ldr r1, [r5], r3, asr #15
+
+@ CHECK: ldr r3, [r8, r1] @ encoding: [0x01,0x30,0x98,0xe7]
+@ CHECK: ldr r2, [r5, -r3] @ encoding: [0x03,0x20,0x15,0xe7]
+@ CHECK: ldr r1, [r5, r9]! @ encoding: [0x09,0x10,0xb5,0xe7]
+@ CHECK: ldr r6, [r7, -r8]! @ encoding: [0x08,0x60,0x37,0xe7]
+@ CHECK: ldr r1, [r0, r2, lsr #3]! @ encoding: [0xa2,0x11,0xb0,0xe7]
+@ CHECK: ldr r5, [r9], r2 @ encoding: [0x02,0x50,0x99,0xe6]
+@ CHECK: ldr r4, [r3], -r6 @ encoding: [0x06,0x40,0x13,0xe6]
+@ CHECK: ldr r3, [r8, -r2, lsl #15] @ encoding: [0x82,0x37,0x18,0xe7]
+@ CHECK: ldr r1, [r5], r3, asr #15 @ encoding: [0xc3,0x17,0x95,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ LDRB (immediate)
+@------------------------------------------------------------------------------
+ ldrb r3, [r8]
+ ldrb r1, [sp, #63]
+ ldrb r9, [r3, #4095]!
+ ldrb r8, [r1], #22
+ ldrb r2, [r7], #-19
+
+@ CHECK: ldrb r3, [r8] @ encoding: [0x00,0x30,0xd8,0xe5]
+@ CHECK: ldrb r1, [sp, #63] @ encoding: [0x3f,0x10,0xdd,0xe5]
+@ CHECK: ldrb r9, [r3, #4095]! @ encoding: [0xff,0x9f,0xf3,0xe5]
+@ CHECK: ldrb r8, [r1], #22 @ encoding: [0x16,0x80,0xd1,0xe4]
+@ CHECK: ldrb r2, [r7], #-19 @ encoding: [0x13,0x20,0x57,0xe4]
+
+
+@------------------------------------------------------------------------------
+@ LDRB (register)
+@------------------------------------------------------------------------------
+ ldrb r9, [r8, r5]
+ ldrb r1, [r5, -r1]
+ ldrb r3, [r5, r2]!
+ ldrb r6, [r9, -r3]!
+ ldrb r2, [r1], r4
+ ldrb r8, [r4], -r5
+ ldrb r7, [r12, -r1, lsl #15]
+ ldrb r5, [r2], r9, asr #15
+
+@ CHECK: ldrb r9, [r8, r5] @ encoding: [0x05,0x90,0xd8,0xe7]
+@ CHECK: ldrb r1, [r5, -r1] @ encoding: [0x01,0x10,0x55,0xe7]
+@ CHECK: ldrb r3, [r5, r2]! @ encoding: [0x02,0x30,0xf5,0xe7]
+@ CHECK: ldrb r6, [r9, -r3]! @ encoding: [0x03,0x60,0x79,0xe7]
+@ CHECK: ldrb r2, [r1], r4 @ encoding: [0x04,0x20,0xd1,0xe6]
+@ CHECK: ldrb r8, [r4], -r5 @ encoding: [0x05,0x80,0x54,0xe6]
+@ CHECK: ldrb r7, [r12, -r1, lsl #15] @ encoding: [0x81,0x77,0x5c,0xe7]
+@ CHECK: ldrb r5, [r2], r9, asr #15 @ encoding: [0xc9,0x57,0xd2,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ LDRBT
+@------------------------------------------------------------------------------
+@ FIXME: Optional offset operand.
+ ldrbt r3, [r1], #4
+ ldrbt r2, [r8], #-8
+ ldrbt r8, [r7], r6
+ ldrbt r1, [r2], -r6, lsl #12
+
+
+@ CHECK: ldrbt r3, [r1], #4 @ encoding: [0x04,0x30,0xf1,0xe4]
+@ CHECK: ldrbt r2, [r8], #-8 @ encoding: [0x08,0x20,0x78,0xe4]
+@ CHECK: ldrbt r8, [r7], r6 @ encoding: [0x06,0x80,0xf7,0xe6]
+@ CHECK: ldrbt r1, [r2], -r6, lsl #12 @ encoding: [0x06,0x16,0x72,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ LDRD (immediate)
+@------------------------------------------------------------------------------
+ ldrd r3, r4, [r5]
+ ldrd r7, r8, [r2, #15]
+ ldrd r1, r2, [r9, #32]!
+ ldrd r6, r7, [r1], #8
+ ldrd r1, r2, [r8], #0
+ ldrd r1, r2, [r8], #+0
+ ldrd r1, r2, [r8], #-0
+
+@ CHECK: ldrd r3, r4, [r5] @ encoding: [0xd0,0x30,0xc5,0xe1]
+@ CHECK: ldrd r7, r8, [r2, #15] @ encoding: [0xdf,0x70,0xc2,0xe1]
+@ CHECK: ldrd r1, r2, [r9, #32]! @ encoding: [0xd0,0x12,0xe9,0xe1]
+@ CHECK: ldrd r6, r7, [r1], #8 @ encoding: [0xd8,0x60,0xc1,0xe0]
+@ CHECK: ldrd r1, r2, [r8], #0 @ encoding: [0xd0,0x10,0xc8,0xe0]
+@ CHECK: ldrd r1, r2, [r8], #0 @ encoding: [0xd0,0x10,0xc8,0xe0]
+@ CHECK: ldrd r1, r2, [r8], #-0 @ encoding: [0xd0,0x10,0x48,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ FIXME: LDRD (label)
+@------------------------------------------------------------------------------
+
+@------------------------------------------------------------------------------
+@ LDRD (register)
+@------------------------------------------------------------------------------
+ ldrd r3, r4, [r1, r3]
+ ldrd r4, r5, [r7, r2]!
+ ldrd r1, r2, [r8], r12
+ ldrd r1, r2, [r8], -r12
+
+@ CHECK: ldrd r3, r4, [r1, r3] @ encoding: [0xd3,0x30,0x81,0xe1]
+@ CHECK: ldrd r4, r5, [r7, r2]! @ encoding: [0xd2,0x40,0xa7,0xe1]
+@ CHECK: ldrd r1, r2, [r8], r12 @ encoding: [0xdc,0x10,0x88,0xe0]
+@ CHECK: ldrd r1, r2, [r8], -r12 @ encoding: [0xdc,0x10,0x08,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ LDRH (immediate)
+@------------------------------------------------------------------------------
+ ldrh r3, [r4]
+ ldrh r2, [r7, #4]
+ ldrh r1, [r8, #64]!
+ ldrh r12, [sp], #4
+
+@ CHECK: ldrh r3, [r4] @ encoding: [0xb0,0x30,0xd4,0xe1]
+@ CHECK: ldrh r2, [r7, #4] @ encoding: [0xb4,0x20,0xd7,0xe1]
+@ CHECK: ldrh r1, [r8, #64]! @ encoding: [0xb0,0x14,0xf8,0xe1]
+@ CHECK: ldrh r12, [sp], #4 @ encoding: [0xb4,0xc0,0xdd,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ FIXME: LDRH (label)
+@------------------------------------------------------------------------------
+
+
+@------------------------------------------------------------------------------
+@ LDRH (register)
+@------------------------------------------------------------------------------
+ ldrh r6, [r5, r4]
+ ldrh r3, [r8, r11]!
+ ldrh r1, [r2, -r1]!
+ ldrh r9, [r7], r2
+ ldrh r4, [r3], -r2
+
+@ CHECK: ldrh r6, [r5, r4] @ encoding: [0xb4,0x60,0x95,0xe1]
+@ CHECK: ldrh r3, [r8, r11]! @ encoding: [0xbb,0x30,0xb8,0xe1]
+@ CHECK: ldrh r1, [r2, -r1]! @ encoding: [0xb1,0x10,0x32,0xe1]
+@ CHECK: ldrh r9, [r7], r2 @ encoding: [0xb2,0x90,0x97,0xe0]
+@ CHECK: ldrh r4, [r3], -r2 @ encoding: [0xb2,0x40,0x13,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ LDRHT
+@------------------------------------------------------------------------------
+ ldrht r9, [r7], #128
+ ldrht r4, [r3], #-75
+ ldrht r9, [r7], r2
+ ldrht r4, [r3], -r2
+
+@ CHECK: ldrht r9, [r7], #128 @ encoding: [0xb0,0x98,0xf7,0xe0]
+@ CHECK: ldrht r4, [r3], #-75 @ encoding: [0xbb,0x44,0x73,0xe0]
+@ CHECK: ldrht r9, [r7], r2 @ encoding: [0xb2,0x90,0xb7,0xe0]
+@ CHECK: ldrht r4, [r3], -r2 @ encoding: [0xb2,0x40,0x33,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ LDRSB (immediate)
+@------------------------------------------------------------------------------
+ ldrsb r3, [r4]
+ ldrsb r2, [r7, #17]
+ ldrsb r1, [r8, #255]!
+ ldrsb r12, [sp], #9
+
+@ CHECK: ldrsb r3, [r4] @ encoding: [0xd0,0x30,0xd4,0xe1]
+@ CHECK: ldrsb r2, [r7, #17] @ encoding: [0xd1,0x21,0xd7,0xe1]
+@ CHECK: ldrsb r1, [r8, #255]! @ encoding: [0xdf,0x1f,0xf8,0xe1]
+@ CHECK: ldrsb r12, [sp], #9 @ encoding: [0xd9,0xc0,0xdd,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ FIXME: LDRSB (label)
+@------------------------------------------------------------------------------
+
+
+@------------------------------------------------------------------------------
+@ LDRSB (register)
+@------------------------------------------------------------------------------
+ ldrsb r6, [r5, r4]
+ ldrsb r3, [r8, r11]!
+ ldrsb r1, [r2, -r1]!
+ ldrsb r9, [r7], r2
+ ldrsb r4, [r3], -r2
+
+
+@ CHECK: ldrsb r6, [r5, r4] @ encoding: [0xd4,0x60,0x95,0xe1]
+@ CHECK: ldrsb r3, [r8, r11]! @ encoding: [0xdb,0x30,0xb8,0xe1]
+@ CHECK: ldrsb r1, [r2, -r1]! @ encoding: [0xd1,0x10,0x32,0xe1]
+@ CHECK: ldrsb r9, [r7], r2 @ encoding: [0xd2,0x90,0x97,0xe0]
+@ CHECK: ldrsb r4, [r3], -r2 @ encoding: [0xd2,0x40,0x13,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ LDRSBT
+@------------------------------------------------------------------------------
+ ldrsbt r5, [r6], #1
+ ldrsbt r3, [r8], #-12
+ ldrsbt r8, [r9], r5
+ ldrsbt r2, [r1], -r4
+
+@ CHECK: ldrsbt r5, [r6], #1 @ encoding: [0xd1,0x50,0xf6,0xe0]
+@ CHECK: ldrsbt r3, [r8], #-12 @ encoding: [0xdc,0x30,0x78,0xe0]
+@ CHECK: ldrsbt r8, [r9], r5 @ encoding: [0xd5,0x80,0xb9,0xe0]
+@ CHECK: ldrsbt r2, [r1], -r4 @ encoding: [0xd4,0x20,0x31,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ LDRSH (immediate)
+@------------------------------------------------------------------------------
+ ldrsh r5, [r9]
+ ldrsh r4, [r5, #7]
+ ldrsh r3, [r6, #55]!
+ ldrsh r2, [r7], #-9
+
+@ CHECK: ldrsh r5, [r9] @ encoding: [0xf0,0x50,0xd9,0xe1]
+@ CHECK: ldrsh r4, [r5, #7] @ encoding: [0xf7,0x40,0xd5,0xe1]
+@ CHECK: ldrsh r3, [r6, #55]! @ encoding: [0xf7,0x33,0xf6,0xe1]
+@ CHECK: ldrsh r2, [r7], #-9 @ encoding: [0xf9,0x20,0x57,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ FIXME: LDRSH (label)
+@------------------------------------------------------------------------------
+
+
+@------------------------------------------------------------------------------
+@ LDRSH (register)
+@------------------------------------------------------------------------------
+ ldrsh r3, [r1, r5]
+ ldrsh r4, [r6, r1]!
+ ldrsh r5, [r3, -r6]!
+ ldrsh r6, [r9], r8
+ ldrsh r7, [r8], -r3
+
+@ CHECK: ldrsh r3, [r1, r5] @ encoding: [0xf5,0x30,0x91,0xe1]
+@ CHECK: ldrsh r4, [r6, r1]! @ encoding: [0xf1,0x40,0xb6,0xe1]
+@ CHECK: ldrsh r5, [r3, -r6]! @ encoding: [0xf6,0x50,0x33,0xe1]
+@ CHECK: ldrsh r6, [r9], r8 @ encoding: [0xf8,0x60,0x99,0xe0]
+@ CHECK: ldrsh r7, [r8], -r3 @ encoding: [0xf3,0x70,0x18,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ LDRSHT
+@------------------------------------------------------------------------------
+ ldrsht r5, [r6], #1
+ ldrsht r3, [r8], #-12
+ ldrsht r8, [r9], r5
+ ldrsht r2, [r1], -r4
+
+@ CHECK: ldrsht r5, [r6], #1 @ encoding: [0xf1,0x50,0xf6,0xe0]
+@ CHECK: ldrsht r3, [r8], #-12 @ encoding: [0xfc,0x30,0x78,0xe0]
+@ CHECK: ldrsht r8, [r9], r5 @ encoding: [0xf5,0x80,0xb9,0xe0]
+@ CHECK: ldrsht r2, [r1], -r4 @ encoding: [0xf4,0x20,0x31,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ STR (immediate)
+@------------------------------------------------------------------------------
+ str r8, [r12]
+ str r7, [r1, #12]
+ str r3, [r5, #40]!
+ str r9, [sp], #4095
+ str r1, [r7], #-128
+
+@ CHECK: str r8, [r12] @ encoding: [0x00,0x80,0x8c,0xe5]
+@ CHECK: str r7, [r1, #12] @ encoding: [0x0c,0x70,0x81,0xe5]
+@ CHECK: str r3, [r5, #40]! @ encoding: [0x28,0x30,0xa5,0xe5]
+@ CHECK: str r9, [sp], #4095 @ encoding: [0xff,0x9f,0x8d,0xe4]
+@ CHECK: str r1, [r7], #-128 @ encoding: [0x80,0x10,0x07,0xe4]
+
+
+@------------------------------------------------------------------------------
+@ FIXME: STR (literal)
+@------------------------------------------------------------------------------
+
+@------------------------------------------------------------------------------
+@ STR (register)
+@------------------------------------------------------------------------------
+ str r9, [r6, r3]
+ str r8, [r0, -r2]
+ str r7, [r1, r6]!
+ str r6, [sp, -r1]!
+ str r5, [r3], r9
+ str r4, [r2], -r5
+ str r3, [r4, -r2, lsl #2]
+ str r2, [r7], r3, asr #24
+
+@ CHECK: str r9, [r6, r3] @ encoding: [0x03,0x90,0x86,0xe7]
+@ CHECK: str r8, [r0, -r2] @ encoding: [0x02,0x80,0x00,0xe7]
+@ CHECK: str r7, [r1, r6]! @ encoding: [0x06,0x70,0xa1,0xe7]
+@ CHECK: str r6, [sp, -r1]! @ encoding: [0x01,0x60,0x2d,0xe7]
+@ CHECK: str r5, [r3], r9 @ encoding: [0x09,0x50,0x83,0xe6]
+@ CHECK: str r4, [r2], -r5 @ encoding: [0x05,0x40,0x02,0xe6]
+@ CHECK: str r3, [r4, -r2, lsl #2] @ encoding: [0x02,0x31,0x04,0xe7]
+@ CHECK: str r2, [r7], r3, asr #24 @ encoding: [0x43,0x2c,0x87,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ STRB (immediate)
+@------------------------------------------------------------------------------
+ strb r9, [r2]
+ strb r7, [r1, #3]
+ strb r6, [r4, #405]!
+ strb r5, [r7], #72
+ strb r1, [sp], #-1
+
+@ CHECK: strb r9, [r2] @ encoding: [0x00,0x90,0xc2,0xe5]
+@ CHECK: strb r7, [r1, #3] @ encoding: [0x03,0x70,0xc1,0xe5]
+@ CHECK: strb r6, [r4, #405]! @ encoding: [0x95,0x61,0xe4,0xe5]
+@ CHECK: strb r5, [r7], #72 @ encoding: [0x48,0x50,0xc7,0xe4]
+@ CHECK: strb r1, [sp], #-1 @ encoding: [0x01,0x10,0x4d,0xe4]
+
+@------------------------------------------------------------------------------
+@ FIXME: STRB (literal)
+@------------------------------------------------------------------------------
+
+@------------------------------------------------------------------------------
+@ STRB (register)
+@------------------------------------------------------------------------------
+ strb r1, [r2, r9]
+ strb r2, [r3, -r8]
+ strb r3, [r4, r7]!
+ strb r4, [r5, -r6]!
+ strb r5, [r6], r5
+ strb r6, [r2], -r4
+ strb r7, [r12, -r3, lsl #5]
+ strb sp, [r7], r2, asr #12
+
+@ CHECK: strb r1, [r2, r9] @ encoding: [0x09,0x10,0xc2,0xe7]
+@ CHECK: strb r2, [r3, -r8] @ encoding: [0x08,0x20,0x43,0xe7]
+@ CHECK: strb r3, [r4, r7]! @ encoding: [0x07,0x30,0xe4,0xe7]
+@ CHECK: strb r4, [r5, -r6]! @ encoding: [0x06,0x40,0x65,0xe7]
+@ CHECK: strb r5, [r6], r5 @ encoding: [0x05,0x50,0xc6,0xe6]
+@ CHECK: strb r6, [r2], -r4 @ encoding: [0x04,0x60,0x42,0xe6]
+@ CHECK: strb r7, [r12, -r3, lsl #5] @ encoding: [0x83,0x72,0x4c,0xe7]
+@ CHECK: strb sp, [r7], r2, asr #12 @ encoding: [0x42,0xd6,0xc7,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ STRBT
+@------------------------------------------------------------------------------
+@ FIXME: Optional offset operand.
+ strbt r6, [r2], #12
+ strbt r5, [r6], #-13
+ strbt r4, [r9], r5
+ strbt r3, [r8], -r2, lsl #3
+
+@ CHECK: strbt r6, [r2], #12 @ encoding: [0x0c,0x60,0xe2,0xe4]
+@ CHECK: strbt r5, [r6], #-13 @ encoding: [0x0d,0x50,0x66,0xe4]
+@ CHECK: strbt r4, [r9], r5 @ encoding: [0x05,0x40,0xe9,0xe6]
+@ CHECK: strbt r3, [r8], -r2, lsl #3 @ encoding: [0x82,0x31,0x68,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ STRD (immediate)
+@------------------------------------------------------------------------------
+ strd r1, r2, [r4]
+ strd r2, r3, [r6, #1]
+ strd r3, r4, [r7, #22]!
+ strd r4, r5, [r8], #7
+ strd r5, r6, [sp], #0
+ strd r6, r7, [lr], #+0
+ strd r7, r8, [r9], #-0
+
+@ CHECK: strd r1, r2, [r4] @ encoding: [0xf0,0x10,0xc4,0xe1]
+@ CHECK: strd r2, r3, [r6, #1] @ encoding: [0xf1,0x20,0xc6,0xe1]
+@ CHECK: strd r3, r4, [r7, #22]! @ encoding: [0xf6,0x31,0xe7,0xe1]
+@ CHECK: strd r4, r5, [r8], #7 @ encoding: [0xf7,0x40,0xc8,0xe0]
+@ CHECK: strd r5, r6, [sp], #0 @ encoding: [0xf0,0x50,0xcd,0xe0]
+@ CHECK: strd r6, r7, [lr], #0 @ encoding: [0xf0,0x60,0xce,0xe0]
+@ CHECK: strd r7, r8, [r9], #-0 @ encoding: [0xf0,0x70,0x49,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ FIXME: STRD (label)
+@------------------------------------------------------------------------------
+
+@------------------------------------------------------------------------------
+@ STRD (register)
+@------------------------------------------------------------------------------
+ strd r8, r9, [r4, r1]
+ strd r7, r8, [r3, r9]!
+ strd r6, r7, [r5], r8
+ strd r5, r6, [r12], -r10
+
+@ CHECK: strd r8, r9, [r4, r1] @ encoding: [0xf1,0x80,0x84,0xe1]
+@ CHECK: strd r7, r8, [r3, r9]! @ encoding: [0xf9,0x70,0xa3,0xe1]
+@ CHECK: strd r6, r7, [r5], r8 @ encoding: [0xf8,0x60,0x85,0xe0]
+@ CHECK: strd r5, r6, [r12], -r10 @ encoding: [0xfa,0x50,0x0c,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ STRH (immediate)
+@------------------------------------------------------------------------------
+ strh r3, [r4]
+ strh r2, [r7, #4]
+ strh r1, [r8, #64]!
+ strh r12, [sp], #4
+
+@ CHECK: strh r3, [r4] @ encoding: [0xb0,0x30,0xc4,0xe1]
+@ CHECK: strh r2, [r7, #4] @ encoding: [0xb4,0x20,0xc7,0xe1]
+@ CHECK: strh r1, [r8, #64]! @ encoding: [0xb0,0x14,0xe8,0xe1]
+@ CHECK: strh r12, [sp], #4 @ encoding: [0xb4,0xc0,0xcd,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ FIXME: STRH (label)
+@------------------------------------------------------------------------------
+
+
+@------------------------------------------------------------------------------
+@ STRH (register)
+@------------------------------------------------------------------------------
+ strh r6, [r5, r4]
+ strh r3, [r8, r11]!
+ strh r1, [r2, -r1]!
+ strh r9, [r7], r2
+ strh r4, [r3], -r2
+
+@ CHECK: strh r6, [r5, r4] @ encoding: [0xb4,0x60,0x85,0xe1]
+@ CHECK: strh r3, [r8, r11]! @ encoding: [0xbb,0x30,0xa8,0xe1]
+@ CHECK: strh r1, [r2, -r1]! @ encoding: [0xb1,0x10,0x22,0xe1]
+@ CHECK: strh r9, [r7], r2 @ encoding: [0xb2,0x90,0x87,0xe0]
+@ CHECK: strh r4, [r3], -r2 @ encoding: [0xb2,0x40,0x03,0xe0]
+
+@------------------------------------------------------------------------------
+@ STRHT
+@------------------------------------------------------------------------------
+ strht r2, [r5], #76
+ strht r8, [r1], #-25
+ strht r5, [r3], r4
+ strht r6, [r8], -r0
+
+@ CHECK: strht r2, [r5], #76 @ encoding: [0xbc,0x24,0xe5,0xe0]
+@ CHECK: strht r8, [r1], #-25 @ encoding: [0xb9,0x81,0x61,0xe0]
+@ CHECK: strht r5, [r3], r4 @ encoding: [0xb4,0x50,0xa3,0xe0]
+@ CHECK: strht r6, [r8], -r0 @ encoding: [0xb0,0x60,0x28,0xe0]
diff --git a/test/MC/ARM/arm_addrmode3.s b/test/MC/ARM/arm_addrmode3.s
index 0b9639e..e1dc020 100644
--- a/test/MC/ARM/arm_addrmode3.s
+++ b/test/MC/ARM/arm_addrmode3.s
@@ -1,12 +1,12 @@
@ RUN: llvm-mc -mcpu=cortex-a8 -triple arm-unknown-unknown -show-encoding %s | FileCheck %s
-@ CHECK: ldrsbt r1, [r0], +r2 @ encoding: [0xd2,0x10,0xb0,0xe0]
+@ CHECK: ldrsbt r1, [r0], r2 @ encoding: [0xd2,0x10,0xb0,0xe0]
@ CHECK: ldrsbt r1, [r0], #4 @ encoding: [0xd4,0x10,0xf0,0xe0]
-@ CHECK: ldrsht r1, [r0], +r2 @ encoding: [0xf2,0x10,0xb0,0xe0]
+@ CHECK: ldrsht r1, [r0], r2 @ encoding: [0xf2,0x10,0xb0,0xe0]
@ CHECK: ldrsht r1, [r0], #4 @ encoding: [0xf4,0x10,0xf0,0xe0]
-@ CHECK: ldrht r1, [r0], +r2 @ encoding: [0xb2,0x10,0xb0,0xe0]
+@ CHECK: ldrht r1, [r0], r2 @ encoding: [0xb2,0x10,0xb0,0xe0]
@ CHECK: ldrht r1, [r0], #4 @ encoding: [0xb4,0x10,0xf0,0xe0]
-@ CHECK: strht r1, [r0], +r2 @ encoding: [0xb2,0x10,0xa0,0xe0]
+@ CHECK: strht r1, [r0], r2 @ encoding: [0xb2,0x10,0xa0,0xe0]
@ CHECK: strht r1, [r0], #4 @ encoding: [0xb4,0x10,0xe0,0xe0]
ldrsbt r1, [r0], r2
ldrsbt r1, [r0], #4
diff --git a/test/MC/ARM/arm_fixups.s b/test/MC/ARM/arm_fixups.s
index 0dceb83..aba0cd8 100644
--- a/test/MC/ARM/arm_fixups.s
+++ b/test/MC/ARM/arm_fixups.s
@@ -1,7 +1,17 @@
-// RUN: llvm-mc -triple arm-unknown-unknown %s --show-encoding > %t
-// RUN: FileCheck < %t %s
+@ RUN: llvm-mc -triple armv7-unknown-unknown %s --show-encoding > %t
+@ RUN: FileCheck < %t %s
-// CHECK: bl _printf @ encoding: [A,A,A,0xeb]
-// CHECK: @ fixup A - offset: 0, value: _printf, kind: fixup_arm_uncondbranch
-bl _printf
- \ No newline at end of file
+ bl _printf
+@ CHECK: bl _printf @ encoding: [A,A,A,0xeb]
+@ CHECK: @ fixup A - offset: 0, value: _printf, kind: fixup_arm_uncondbranch
+
+ mov r9, :lower16:(_foo)
+ movw r9, :lower16:(_foo)
+ movt r9, :upper16:(_foo)
+
+@ CHECK: movw r9, :lower16:_foo @ encoding: [A,0x90'A',0b0000AAAA,0xe3]
+@ CHECK: @ fixup A - offset: 0, value: _foo, kind: fixup_arm_movw_lo16
+@ CHECK: movw r9, :lower16:_foo @ encoding: [A,0x90'A',0b0000AAAA,0xe3]
+@ CHECK: @ fixup A - offset: 0, value: _foo, kind: fixup_arm_movw_lo16
+@ CHECK: movt r9, :upper16:_foo @ encoding: [A,0x90'A',0b0100AAAA,0xe3]
+@ CHECK: @ fixup A - offset: 0, value: _foo, kind: fixup_arm_movt_hi16
diff --git a/test/MC/ARM/arm_instructions.s b/test/MC/ARM/arm_instructions.s
index 650fcd2..186954c 100644
--- a/test/MC/ARM/arm_instructions.s
+++ b/test/MC/ARM/arm_instructions.s
@@ -1,13 +1,5 @@
@ RUN: llvm-mc -mcpu=cortex-a8 -triple arm-unknown-unknown -show-encoding %s | FileCheck %s
-@ CHECK: nop
-@ CHECK: encoding: [0x00,0xf0,0x20,0xe3]
- nop
-
-@ CHECK: nopeq
-@ CHECK: encoding: [0x00,0xf0,0x20,0x03]
- nopeq
-
@ CHECK: trap
@ CHECK: encoding: [0xfe,0xde,0xff,0xe7]
trap
@@ -47,15 +39,6 @@
@ CHECK: adc r1, r2, r3 @ encoding: [0x03,0x10,0xa2,0xe0]
adc r1,r2,r3
-@ CHECK: sbc r1, r2, r3 @ encoding: [0x03,0x10,0xc2,0xe0]
- sbc r1,r2,r3
-
-@ CHECK: orr r1, r2, r3 @ encoding: [0x03,0x10,0x82,0xe1]
- orr r1,r2,r3
-
-@ CHECK: orrs r1, r2, r3 @ encoding: [0x03,0x10,0x92,0xe1]
- orrs r1,r2,r3
-
@ CHECK: bic r1, r2, r3 @ encoding: [0x03,0x10,0xc2,0xe1]
bic r1,r2,r3
@@ -71,135 +54,23 @@
@ CHECK: mvns r1, r2 @ encoding: [0x02,0x10,0xf0,0xe1]
mvns r1,r2
-@ CHECK: rsb r1, r2, r3 @ encoding: [0x03,0x10,0x62,0xe0]
- rsb r1,r2,r3
-
-@ CHECK: rsc r1, r2, r3 @ encoding: [0x03,0x10,0xe2,0xe0]
- rsc r1,r2,r3
-
@ CHECK: bfi r0, r0, #5, #7 @ encoding: [0x90,0x02,0xcb,0xe7]
bfi r0, r0, #5, #7
@ CHECK: bkpt #10 @ encoding: [0x7a,0x00,0x20,0xe1]
bkpt #10
-@ CHECK: mrs r8, cpsr @ encoding: [0x00,0x80,0x0f,0xe1]
- mrs r8, cpsr
-
-@ CHECK: mrc p14, #0, r1, c1, c2, #4 @ encoding: [0x92,0x1e,0x11,0xee]
- mrc p14, #0, r1, c1, c2, #4
-@ CHECK: mrrc p7, #1, r5, r4, c1 @ encoding: [0x11,0x57,0x54,0xec]
- mrrc p7, #1, r5, r4, c1
-
-@ CHECK: mrc2 p14, #0, r1, c1, c2, #4 @ encoding: [0x92,0x1e,0x11,0xfe]
- mrc2 p14, #0, r1, c1, c2, #4
-@ CHECK: mrrc2 p7, #1, r5, r4, c1 @ encoding: [0x11,0x57,0x54,0xfc]
- mrrc2 p7, #1, r5, r4, c1
-
@ CHECK: cdp p7, #1, c1, c1, c1, #4 @ encoding: [0x81,0x17,0x11,0xee]
cdp p7, #1, c1, c1, c1, #4
@ CHECK: cdp2 p7, #1, c1, c1, c1, #4 @ encoding: [0x81,0x17,0x11,0xfe]
cdp2 p7, #1, c1, c1, c1, #4
-@ CHECK: qadd r1, r2, r3 @ encoding: [0x52,0x10,0x03,0xe1]
- qadd r1, r2, r3
-
-@ CHECK: qsub r1, r2, r3 @ encoding: [0x52,0x10,0x23,0xe1]
- qsub r1, r2, r3
-
-@ CHECK: qdadd r1, r2, r3 @ encoding: [0x52,0x10,0x43,0xe1]
- qdadd r1, r2, r3
-
-@ CHECK: qdsub r1, r2, r3 @ encoding: [0x52,0x10,0x63,0xe1]
- qdsub r1, r2, r3
-
-@ CHECK: wfe @ encoding: [0x02,0xf0,0x20,0xe3]
- wfe
-
-@ CHECK: wfi @ encoding: [0x03,0xf0,0x20,0xe3]
- wfi
-
-@ CHECK: yield @ encoding: [0x01,0xf0,0x20,0xe3]
- yield
-
-@ CHECK: nop @ encoding: [0x00,0xf0,0x20,0xe3]
- nop
-
-@ CHECK: cpsie aif @ encoding: [0xc0,0x01,0x08,0xf1]
- cpsie aif
-
-@ CHECK: cps #15 @ encoding: [0x0f,0x00,0x02,0xf1]
- cps #15
-
-@ CHECK: cpsie if, #10 @ encoding: [0xca,0x00,0x0a,0xf1]
- cpsie if, #10
-
-@ CHECK: msr cpsr_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
- msr apsr, r0
-
-@ CHECK: msr cpsr_s, r0 @ encoding: [0x00,0xf0,0x24,0xe1]
- msr apsr_g, r0
-
-@ CHECK: msr cpsr_f, r0 @ encoding: [0x00,0xf0,0x28,0xe1]
- msr apsr_nzcvq, r0
-
-@ CHECK: msr cpsr_fs, r0 @ encoding: [0x00,0xf0,0x2c,0xe1]
- msr apsr_nzcvqg, r0
-
-@ CHECK: msr cpsr_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
- msr cpsr_fc, r0
-
-@ CHECK: msr cpsr_c, r0 @ encoding: [0x00,0xf0,0x21,0xe1]
- msr cpsr_c, r0
-
-@ CHECK: msr cpsr_x, r0 @ encoding: [0x00,0xf0,0x22,0xe1]
- msr cpsr_x, r0
-
-@ CHECK: msr cpsr_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
- msr cpsr_fc, r0
-
-@ CHECK: msr cpsr_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
- msr cpsr_all, r0
-
-@ CHECK: msr cpsr_fsx, r0 @ encoding: [0x00,0xf0,0x2e,0xe1]
- msr cpsr_fsx, r0
-
-@ CHECK: msr spsr_fc, r0 @ encoding: [0x00,0xf0,0x69,0xe1]
- msr spsr_fc, r0
-
-@ CHECK: msr spsr_fsxc, r0 @ encoding: [0x00,0xf0,0x6f,0xe1]
- msr spsr_fsxc, r0
-
-@ CHECK: msr cpsr_fsxc, r0 @ encoding: [0x00,0xf0,0x2f,0xe1]
- msr cpsr_fsxc, r0
-
@ CHECK: add r1, r2, r3, lsl r4 @ encoding: [0x13,0x14,0x82,0xe0]
add r1, r2, r3, lsl r4
-@ CHECK: strexb r0, r1, [r2] @ encoding: [0x91,0x0f,0xc2,0xe1]
- strexb r0, r1, [r2]
-
-@ CHECK: strexh r0, r1, [r2] @ encoding: [0x91,0x0f,0xe2,0xe1]
- strexh r0, r1, [r2]
-
-@ CHECK: strex r0, r1, [r2] @ encoding: [0x91,0x0f,0x82,0xe1]
- strex r0, r1, [r2]
-
-@ CHECK: strexd r0, r2, r3, [r1] @ encoding: [0x92,0x0f,0xa1,0xe1]
- strexd r0, r2, r3, [r1]
-
-@ CHECK: ldrexb r0, [r0] @ encoding: [0x9f,0x0f,0xd0,0xe1]
- ldrexb r0, [r0]
-
-@ CHECK: ldrexh r0, [r0] @ encoding: [0x9f,0x0f,0xf0,0xe1]
- ldrexh r0, [r0]
-
-@ CHECK: ldrex r0, [r0] @ encoding: [0x9f,0x0f,0x90,0xe1]
- ldrex r0, [r0]
-
-@ CHECK: ldrexd r0, r1, [r0] @ encoding: [0x9f,0x0f,0xb0,0xe1]
- ldrexd r0, r1, [r0]
-
@ CHECK: ssat16 r0, #7, r0 @ encoding: [0x30,0x0f,0xa6,0xe6]
ssat16 r0, #7, r0
+@ CHECK: cpsie none, #0 @ encoding: [0x00,0x00,0x0a,0xf1]
+ cpsie none, #0
+
diff --git a/test/MC/ARM/basic-arm-instructions.s b/test/MC/ARM/basic-arm-instructions.s
index 0b728bc..55d9f02 100644
--- a/test/MC/ARM/basic-arm-instructions.s
+++ b/test/MC/ARM/basic-arm-instructions.s
@@ -14,18 +14,18 @@ _func:
@------------------------------------------------------------------------------
@ ADC (immediate)
@------------------------------------------------------------------------------
- adc r1, r2, #0xf
- adc r1, r2, #0xf0
- adc r1, r2, #0xf00
- adc r1, r2, #0xf000
- adc r1, r2, #0xf0000
- adc r1, r2, #0xf00000
- adc r1, r2, #0xf000000
- adc r1, r2, #0xf0000000
- adc r1, r2, #0xf000000f
- adcs r1, r2, #0xf00
- adcseq r1, r2, #0xf00
- adceq r1, r2, #0xf00
+ adc r1, r2, #0xf
+ adc r1, r2, #0xf0
+ adc r1, r2, #0xf00
+ adc r1, r2, #0xf000
+ adc r1, r2, #0xf0000
+ adc r1, r2, #0xf00000
+ adc r1, r2, #0xf000000
+ adc r1, r2, #0xf0000000
+ adc r1, r2, #0xf000000f
+ adcs r1, r2, #0xf00
+ adcseq r1, r2, #0xf00
+ adceq r1, r2, #0xf00
@ CHECK: adc r1, r2, #15 @ encoding: [0x0f,0x10,0xa2,0xe2]
@ CHECK: adc r1, r2, #240 @ encoding: [0xf0,0x10,0xa2,0xe2]
@@ -45,44 +45,44 @@ _func:
@ ADC (register)
@ ADC (shifted register)
@------------------------------------------------------------------------------
- adc r4, r5, r6
- @ Constant shifts
- adc r4, r5, r6, lsl #1
- adc r4, r5, r6, lsl #31
- adc r4, r5, r6, lsr #1
- adc r4, r5, r6, lsr #31
- adc r4, r5, r6, lsr #32
- adc r4, r5, r6, asr #1
- adc r4, r5, r6, asr #31
- adc r4, r5, r6, asr #32
- adc r4, r5, r6, ror #1
- adc r4, r5, r6, ror #31
-
- @ Register shifts
- adc r6, r7, r8, lsl r9
- adc r6, r7, r8, lsr r9
- adc r6, r7, r8, asr r9
- adc r6, r7, r8, ror r9
- adc r4, r5, r6, rrx
-
- @ Destination register is optional
- adc r5, r6
- adc r4, r5, lsl #1
- adc r4, r5, lsl #31
- adc r4, r5, lsr #1
- adc r4, r5, lsr #31
- adc r4, r5, lsr #32
- adc r4, r5, asr #1
- adc r4, r5, asr #31
- adc r4, r5, asr #32
- adc r4, r5, ror #1
- adc r4, r5, ror #31
- adc r4, r5, rrx
- adc r6, r7, lsl r9
- adc r6, r7, lsr r9
- adc r6, r7, asr r9
- adc r6, r7, ror r9
- adc r4, r5, rrx
+ adc r4, r5, r6
+ @ Constant shifts
+ adc r4, r5, r6, lsl #1
+ adc r4, r5, r6, lsl #31
+ adc r4, r5, r6, lsr #1
+ adc r4, r5, r6, lsr #31
+ adc r4, r5, r6, lsr #32
+ adc r4, r5, r6, asr #1
+ adc r4, r5, r6, asr #31
+ adc r4, r5, r6, asr #32
+ adc r4, r5, r6, ror #1
+ adc r4, r5, r6, ror #31
+
+ @ Register shifts
+ adc r6, r7, r8, lsl r9
+ adc r6, r7, r8, lsr r9
+ adc r6, r7, r8, asr r9
+ adc r6, r7, r8, ror r9
+ adc r4, r5, r6, rrx
+
+ @ Destination register is optional
+ adc r5, r6
+ adc r4, r5, lsl #1
+ adc r4, r5, lsl #31
+ adc r4, r5, lsr #1
+ adc r4, r5, lsr #31
+ adc r4, r5, lsr #32
+ adc r4, r5, asr #1
+ adc r4, r5, asr #31
+ adc r4, r5, asr #32
+ adc r4, r5, ror #1
+ adc r4, r5, ror #31
+ adc r4, r5, rrx
+ adc r6, r7, lsl r9
+ adc r6, r7, lsr r9
+ adc r6, r7, asr r9
+ adc r6, r7, ror r9
+ adc r4, r5, rrx
@ CHECK: adc r4, r5, r6 @ encoding: [0x06,0x40,0xa5,0xe0]
@@ -123,38 +123,54 @@ _func:
@------------------------------------------------------------------------------
-@ FIXME: ADR
+@ ADR
@------------------------------------------------------------------------------
+Lback:
+ adr r2, Lback
+ adr r3, Lforward
+Lforward:
+ adr r2, #3
+ adr r2, #-3
+
+@ CHECK: Lback:
+@ CHECK: adr r2, Lback @ encoding: [0bAAAAAAA0,0x20'A',0x0f'A',0b1110001A]
+@ CHECK: @ fixup A - offset: 0, value: Lback, kind: fixup_arm_adr_pcrel_12
+@ CHECK: adr r3, Lforward @ encoding: [0bAAAAAAA0,0x30'A',0x0f'A',0b1110001A]
+@ CHECK: @ fixup A - offset: 0, value: Lforward, kind: fixup_arm_adr_pcrel_12
+@ CHECK: Lforward:
+@ CHECK: adr r2, #3 @ encoding: [0x03,0x20,0x8f,0xe2]
+@ CHECK: adr r2, #-3 @ encoding: [0x03,0x20,0x4f,0xe2]
+
@------------------------------------------------------------------------------
@ ADD
@------------------------------------------------------------------------------
- add r4, r5, #0xf000
- add r4, r5, r6
- add r4, r5, r6, lsl #5
- add r4, r5, r6, lsr #5
- add r4, r5, r6, lsr #5
- add r4, r5, r6, asr #5
- add r4, r5, r6, ror #5
- add r6, r7, r8, lsl r9
- add r6, r7, r8, lsr r9
- add r6, r7, r8, asr r9
- add r6, r7, r8, ror r9
- add r4, r5, r6, rrx
-
- @ destination register is optional
- add r5, #0xf000
- add r4, r5
- add r4, r5, lsl #5
- add r4, r5, lsr #5
- add r4, r5, lsr #5
- add r4, r5, asr #5
- add r4, r5, ror #5
- add r6, r7, lsl r9
- add r6, r7, lsr r9
- add r6, r7, asr r9
- add r6, r7, ror r9
- add r4, r5, rrx
+ add r4, r5, #0xf000
+ add r4, r5, r6
+ add r4, r5, r6, lsl #5
+ add r4, r5, r6, lsr #5
+ add r4, r5, r6, lsr #5
+ add r4, r5, r6, asr #5
+ add r4, r5, r6, ror #5
+ add r6, r7, r8, lsl r9
+ add r6, r7, r8, lsr r9
+ add r6, r7, r8, asr r9
+ add r6, r7, r8, ror r9
+ add r4, r5, r6, rrx
+
+ @ destination register is optional
+ add r5, #0xf000
+ add r4, r5
+ add r4, r5, lsl #5
+ add r4, r5, lsr #5
+ add r4, r5, lsr #5
+ add r4, r5, asr #5
+ add r4, r5, ror #5
+ add r6, r7, lsl r9
+ add r6, r7, lsr r9
+ add r6, r7, asr r9
+ add r6, r7, ror r9
+ add r4, r5, rrx
@ CHECK: add r4, r5, #61440 @ encoding: [0x0f,0x4a,0x85,0xe2]
@ CHECK: add r4, r5, r6 @ encoding: [0x06,0x40,0x85,0xe0]
@@ -187,32 +203,32 @@ _func:
@------------------------------------------------------------------------------
@ AND
@------------------------------------------------------------------------------
- and r10, r1, #0xf
- and r10, r1, r6
- and r10, r1, r6, lsl #10
- and r10, r1, r6, lsr #10
- and r10, r1, r6, lsr #10
- and r10, r1, r6, asr #10
- and r10, r1, r6, ror #10
- and r6, r7, r8, lsl r2
- and r6, r7, r8, lsr r2
- and r6, r7, r8, asr r2
- and r6, r7, r8, ror r2
- and r10, r1, r6, rrx
-
- @ destination register is optional
- and r1, #0xf
- and r10, r1
- and r10, r1, lsl #10
- and r10, r1, lsr #10
- and r10, r1, lsr #10
- and r10, r1, asr #10
- and r10, r1, ror #10
- and r6, r7, lsl r2
- and r6, r7, lsr r2
- and r6, r7, asr r2
- and r6, r7, ror r2
- and r10, r1, rrx
+ and r10, r1, #0xf
+ and r10, r1, r6
+ and r10, r1, r6, lsl #10
+ and r10, r1, r6, lsr #10
+ and r10, r1, r6, lsr #10
+ and r10, r1, r6, asr #10
+ and r10, r1, r6, ror #10
+ and r6, r7, r8, lsl r2
+ and r6, r7, r8, lsr r2
+ and r6, r7, r8, asr r2
+ and r6, r7, r8, ror r2
+ and r10, r1, r6, rrx
+
+ @ destination register is optional
+ and r1, #0xf
+ and r10, r1
+ and r10, r1, lsl #10
+ and r10, r1, lsr #10
+ and r10, r1, lsr #10
+ and r10, r1, asr #10
+ and r10, r1, ror #10
+ and r6, r7, lsl r2
+ and r6, r7, lsr r2
+ and r6, r7, asr r2
+ and r6, r7, ror r2
+ and r10, r1, rrx
@ CHECK: and r10, r1, #15 @ encoding: [0x0f,0xa0,0x01,0xe2]
@ CHECK: and r10, r1, r6 @ encoding: [0x06,0xa0,0x01,0xe0]
@@ -244,44 +260,66 @@ _func:
@ FIXME: ASR
@------------------------------------------------------------------------------
@------------------------------------------------------------------------------
-@ FIXME: B
+@ B
@------------------------------------------------------------------------------
+ b _bar
+ beq _baz
+
+@ CHECK: b _bar @ encoding: [A,A,A,0xea]
+ @ fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbranch
+@ CHECK: beq _baz @ encoding: [A,A,A,0x0a]
+ @ fixup A - offset: 0, value: _baz, kind: fixup_arm_condbranch
+
+
@------------------------------------------------------------------------------
-@ FIXME: BFC
+@ BFC
@------------------------------------------------------------------------------
+ bfc r5, #3, #17
+ bfccc r5, #3, #17
+
+@ CHECK: bfc r5, #3, #17 @ encoding: [0x9f,0x51,0xd3,0xe7]
+@ CHECK: bfclo r5, #3, #17 @ encoding: [0x9f,0x51,0xd3,0x37]
+
+
@------------------------------------------------------------------------------
-@ FIXME: BFI
+@ BFI
@------------------------------------------------------------------------------
+ bfi r5, r2, #3, #17
+ bfine r5, r2, #3, #17
+
+@ CHECK: bfi r5, r2, #3, #17 @ encoding: [0x92,0x51,0xd3,0xe7]
+@ CHECK: bfine r5, r2, #3, #17 @ encoding: [0x92,0x51,0xd3,0x17]
+
@------------------------------------------------------------------------------
@ BIC
@------------------------------------------------------------------------------
- bic r10, r1, #0xf
- bic r10, r1, r6
- bic r10, r1, r6, lsl #10
- bic r10, r1, r6, lsr #10
- bic r10, r1, r6, lsr #10
- bic r10, r1, r6, asr #10
- bic r10, r1, r6, ror #10
- bic r6, r7, r8, lsl r2
- bic r6, r7, r8, lsr r2
- bic r6, r7, r8, asr r2
- bic r6, r7, r8, ror r2
- bic r10, r1, r6, rrx
-
- @ destination register is optional
- bic r1, #0xf
- bic r10, r1
- bic r10, r1, lsl #10
- bic r10, r1, lsr #10
- bic r10, r1, lsr #10
- bic r10, r1, asr #10
- bic r10, r1, ror #10
- bic r6, r7, lsl r2
- bic r6, r7, lsr r2
- bic r6, r7, asr r2
- bic r6, r7, ror r2
- bic r10, r1, rrx
+ bic r10, r1, #0xf
+ bic r10, r1, r6
+ bic r10, r1, r6, lsl #10
+ bic r10, r1, r6, lsr #10
+ bic r10, r1, r6, lsr #10
+ bic r10, r1, r6, asr #10
+ bic r10, r1, r6, ror #10
+ bic r6, r7, r8, lsl r2
+ bic r6, r7, r8, lsr r2
+ bic r6, r7, r8, asr r2
+ bic r6, r7, r8, ror r2
+ bic r10, r1, r6, rrx
+
+ @ destination register is optional
+ bic r1, #0xf
+ bic r10, r1
+ bic r10, r1, lsl #10
+ bic r10, r1, lsr #10
+ bic r10, r1, lsr #10
+ bic r10, r1, asr #10
+ bic r10, r1, ror #10
+ bic r6, r7, lsl r2
+ bic r6, r7, lsr r2
+ bic r6, r7, asr r2
+ bic r6, r7, ror r2
+ bic r10, r1, rrx
@ CHECK: bic r10, r1, #15 @ encoding: [0x0f,0xa0,0xc1,0xe3]
@ CHECK: bic r10, r1, r6 @ encoding: [0x06,0xa0,0xc1,0xe1]
@@ -313,8 +351,8 @@ _func:
@------------------------------------------------------------------------------
@ BKPT
@------------------------------------------------------------------------------
- bkpt #10
- bkpt #65535
+ bkpt #10
+ bkpt #65535
@ CHECK: bkpt #10 @ encoding: [0x7a,0x00,0x20,0xe1]
@ CHECK: bkpt #65535 @ encoding: [0x7f,0xff,0x2f,0xe1]
@@ -323,17 +361,24 @@ _func:
@ BL/BLX (immediate)
@------------------------------------------------------------------------------
- bl _bar
- @ FIXME: blx _bar
+ bl _bar
+ blx _bar
+ blls #28634268
+ blx #32424576
+ blx #16212288
@ CHECK: bl _bar @ encoding: [A,A,A,0xeb]
@ CHECK: @ fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbranch
-
+@ CHECK: blx _bar @ encoding: [A,A,A,0xfa]
+ @ fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbranch
+@ CHECK: blls #28634268 @ encoding: [0x27,0x3b,0x6d,0x9b]
+@ CHECK: blx #32424576 @ encoding: [0xa0,0xb0,0x7b,0xfa]
+@ CHECK: blx #16212288 @ encoding: [0x50,0xd8,0x3d,0xfa]
@------------------------------------------------------------------------------
@ BLX (register)
@------------------------------------------------------------------------------
- blx r2
- blxne r2
+ blx r2
+ blxne r2
@ CHECK: blx r2 @ encoding: [0x32,0xff,0x2f,0xe1]
@ CHECK: blxne r2 @ encoding: [0x32,0xff,0x2f,0x11]
@@ -341,9 +386,8 @@ _func:
@------------------------------------------------------------------------------
@ BX
@------------------------------------------------------------------------------
-
- bx r2
- bxne r2
+ bx r2
+ bxne r2
@ CHECK: bx r2 @ encoding: [0x12,0xff,0x2f,0xe1]
@ CHECK: bxne r2 @ encoding: [0x12,0xff,0x2f,0x11]
@@ -351,23 +395,18 @@ _func:
@------------------------------------------------------------------------------
@ BXJ
@------------------------------------------------------------------------------
-
- bxj r2
- bxjne r2
+ bxj r2
+ bxjne r2
@ CHECK: bxj r2 @ encoding: [0x22,0xff,0x2f,0xe1]
@ CHECK: bxjne r2 @ encoding: [0x22,0xff,0x2f,0x11]
-@------------------------------------------------------------------------------
-@ FIXME: CBNZ/CBZ
-@------------------------------------------------------------------------------
-
@------------------------------------------------------------------------------
@ CDP/CDP2
@------------------------------------------------------------------------------
- cdp p7, #1, c1, c1, c1, #4
- cdp2 p7, #1, c1, c1, c1, #4
+ cdp p7, #1, c1, c1, c1, #4
+ cdp2 p7, #1, c1, c1, c1, #4
@ CHECK: cdp p7, #1, c1, c1, c1, #4 @ encoding: [0x81,0x17,0x11,0xee]
@ CHECK: cdp2 p7, #1, c1, c1, c1, #4 @ encoding: [0x81,0x17,0x11,0xfe]
@@ -376,7 +415,7 @@ _func:
@------------------------------------------------------------------------------
@ CLREX
@------------------------------------------------------------------------------
- clrex
+ clrex
@ CHECK: clrex @ encoding: [0x1f,0xf0,0x7f,0xf5]
@@ -384,8 +423,8 @@ _func:
@------------------------------------------------------------------------------
@ CLZ
@------------------------------------------------------------------------------
- clz r1, r2
- clzeq r1, r2
+ clz r1, r2
+ clzeq r1, r2
@ CHECK: clz r1, r2 @ encoding: [0x12,0x1f,0x6f,0xe1]
@ CHECK: clzeq r1, r2 @ encoding: [0x12,0x1f,0x6f,0x01]
@@ -393,18 +432,18 @@ _func:
@------------------------------------------------------------------------------
@ CMN
@------------------------------------------------------------------------------
- cmn r1, #0xf
- cmn r1, r6
- cmn r1, r6, lsl #10
- cmn r1, r6, lsr #10
- cmn sp, r6, lsr #10
- cmn r1, r6, asr #10
- cmn r1, r6, ror #10
- cmn r7, r8, lsl r2
- cmn sp, r8, lsr r2
- cmn r7, r8, asr r2
- cmn r7, r8, ror r2
- cmn r1, r6, rrx
+ cmn r1, #0xf
+ cmn r1, r6
+ cmn r1, r6, lsl #10
+ cmn r1, r6, lsr #10
+ cmn sp, r6, lsr #10
+ cmn r1, r6, asr #10
+ cmn r1, r6, ror #10
+ cmn r7, r8, lsl r2
+ cmn sp, r8, lsr r2
+ cmn r7, r8, asr r2
+ cmn r7, r8, ror r2
+ cmn r1, r6, rrx
@ CHECK: cmn r1, #15 @ encoding: [0x0f,0x00,0x71,0xe3]
@ CHECK: cmn r1, r6 @ encoding: [0x06,0x00,0x71,0xe1]
@@ -422,18 +461,18 @@ _func:
@------------------------------------------------------------------------------
@ CMP
@------------------------------------------------------------------------------
- cmp r1, #0xf
- cmp r1, r6
- cmp r1, r6, lsl #10
- cmp r1, r6, lsr #10
- cmp sp, r6, lsr #10
- cmp r1, r6, asr #10
- cmp r1, r6, ror #10
- cmp r7, r8, lsl r2
- cmp sp, r8, lsr r2
- cmp r7, r8, asr r2
- cmp r7, r8, ror r2
- cmp r1, r6, rrx
+ cmp r1, #0xf
+ cmp r1, r6
+ cmp r1, r6, lsl #10
+ cmp r1, r6, lsr #10
+ cmp sp, r6, lsr #10
+ cmp r1, r6, asr #10
+ cmp r1, r6, ror #10
+ cmp r7, r8, lsl r2
+ cmp sp, r8, lsr r2
+ cmp r7, r8, asr r2
+ cmp r7, r8, ror r2
+ cmp r1, r6, rrx
@ CHECK: cmp r1, #15 @ encoding: [0x0f,0x00,0x51,0xe3]
@ CHECK: cmp r1, r6 @ encoding: [0x06,0x00,0x51,0xe1]
@@ -448,12 +487,25 @@ _func:
@ CHECK: cmp r7, r8, ror r2 @ encoding: [0x78,0x02,0x57,0xe1]
@ CHECK: cmp r1, r6, rrx @ encoding: [0x66,0x00,0x51,0xe1]
+
+@------------------------------------------------------------------------------
+@ CPS
+@------------------------------------------------------------------------------
+ cpsie aif
+ cps #15
+ cpsid if, #10
+
+@ CHECK: cpsie aif @ encoding: [0xc0,0x01,0x08,0xf1]
+@ CHECK: cps #15 @ encoding: [0x0f,0x00,0x02,0xf1]
+@ CHECK: cpsid if, #10 @ encoding: [0xca,0x00,0x0e,0xf1]
+
+
@------------------------------------------------------------------------------
@ DBG
@------------------------------------------------------------------------------
- dbg #0
- dbg #5
- dbg #15
+ dbg #0
+ dbg #5
+ dbg #15
@ CHECK: dbg #0 @ encoding: [0xf0,0xf0,0x20,0xe3]
@ CHECK: dbg #5 @ encoding: [0xf5,0xf0,0x20,0xe3]
@@ -463,19 +515,19 @@ _func:
@------------------------------------------------------------------------------
@ DMB
@------------------------------------------------------------------------------
- dmb sy
- dmb st
- dmb sh
- dmb ish
- dmb shst
- dmb ishst
- dmb un
- dmb nsh
- dmb unst
- dmb nshst
- dmb osh
- dmb oshst
- dmb
+ dmb sy
+ dmb st
+ dmb sh
+ dmb ish
+ dmb shst
+ dmb ishst
+ dmb un
+ dmb nsh
+ dmb unst
+ dmb nshst
+ dmb osh
+ dmb oshst
+ dmb
@ CHECK: dmb sy @ encoding: [0x5f,0xf0,0x7f,0xf5]
@ CHECK: dmb st @ encoding: [0x5e,0xf0,0x7f,0xf5]
@@ -494,19 +546,19 @@ _func:
@------------------------------------------------------------------------------
@ DSB
@------------------------------------------------------------------------------
- dsb sy
- dsb st
- dsb sh
- dsb ish
- dsb shst
- dsb ishst
- dsb un
- dsb nsh
- dsb unst
- dsb nshst
- dsb osh
- dsb oshst
- dsb
+ dsb sy
+ dsb st
+ dsb sh
+ dsb ish
+ dsb shst
+ dsb ishst
+ dsb un
+ dsb nsh
+ dsb unst
+ dsb nshst
+ dsb osh
+ dsb oshst
+ dsb
@ CHECK: dsb sy @ encoding: [0x4f,0xf0,0x7f,0xf5]
@ CHECK: dsb st @ encoding: [0x4e,0xf0,0x7f,0xf5]
@@ -525,32 +577,32 @@ _func:
@------------------------------------------------------------------------------
@ EOR
@------------------------------------------------------------------------------
- eor r4, r5, #0xf000
- eor r4, r5, r6
- eor r4, r5, r6, lsl #5
- eor r4, r5, r6, lsr #5
- eor r4, r5, r6, lsr #5
- eor r4, r5, r6, asr #5
- eor r4, r5, r6, ror #5
- eor r6, r7, r8, lsl r9
- eor r6, r7, r8, lsr r9
- eor r6, r7, r8, asr r9
- eor r6, r7, r8, ror r9
- eor r4, r5, r6, rrx
-
- @ destination register is optional
- eor r5, #0xf000
- eor r4, r5
- eor r4, r5, lsl #5
- eor r4, r5, lsr #5
- eor r4, r5, lsr #5
- eor r4, r5, asr #5
- eor r4, r5, ror #5
- eor r6, r7, lsl r9
- eor r6, r7, lsr r9
- eor r6, r7, asr r9
- eor r6, r7, ror r9
- eor r4, r5, rrx
+ eor r4, r5, #0xf000
+ eor r4, r5, r6
+ eor r4, r5, r6, lsl #5
+ eor r4, r5, r6, lsr #5
+ eor r4, r5, r6, lsr #5
+ eor r4, r5, r6, asr #5
+ eor r4, r5, r6, ror #5
+ eor r6, r7, r8, lsl r9
+ eor r6, r7, r8, lsr r9
+ eor r6, r7, r8, asr r9
+ eor r6, r7, r8, ror r9
+ eor r4, r5, r6, rrx
+
+ @ destination register is optional
+ eor r5, #0xf000
+ eor r4, r5
+ eor r4, r5, lsl #5
+ eor r4, r5, lsr #5
+ eor r4, r5, lsr #5
+ eor r4, r5, asr #5
+ eor r4, r5, ror #5
+ eor r6, r7, lsl r9
+ eor r6, r7, lsr r9
+ eor r6, r7, asr r9
+ eor r6, r7, ror r9
+ eor r4, r5, rrx
@ CHECK: eor r4, r5, #61440 @ encoding: [0x0f,0x4a,0x25,0xe2]
@ CHECK: eor r4, r5, r6 @ encoding: [0x06,0x40,0x25,0xe0]
@@ -590,6 +642,91 @@ _func:
@ CHECK: isb sy @ encoding: [0x6f,0xf0,0x7f,0xf5]
+@------------------------------------------------------------------------------
+@ LDC{L}/LDC2{L}
+@------------------------------------------------------------------------------
+ ldc2 p0, c8, [r1, #4]
+ ldc2 p1, c7, [r2]
+ ldc2 p2, c6, [r3, #-224]
+ ldc2 p3, c5, [r4, #-120]!
+ ldc2 p4, c4, [r5], #16
+ ldc2 p5, c3, [r6], #-72
+ ldc2l p6, c2, [r7, #4]
+ ldc2l p7, c1, [r8]
+ ldc2l p8, c0, [r9, #-224]
+ ldc2l p9, c1, [r10, #-120]!
+ ldc2l p10, c2, [r11], #16
+ ldc2l p11, c3, [r12], #-72
+
+ ldc p12, c4, [r0, #4]
+ ldc p13, c5, [r1]
+ ldc p14, c6, [r2, #-224]
+ ldc p15, c7, [r3, #-120]!
+ ldc p5, c8, [r4], #16
+ ldc p4, c9, [r5], #-72
+ ldcl p3, c10, [r6, #4]
+ ldcl p2, c11, [r7]
+ ldcl p1, c12, [r8, #-224]
+ ldcl p0, c13, [r9, #-120]!
+ ldcl p6, c14, [r10], #16
+ ldcl p7, c15, [r11], #-72
+
+ ldclo p12, c4, [r0, #4]
+ ldchi p13, c5, [r1]
+ ldccs p14, c6, [r2, #-224]
+ ldccc p15, c7, [r3, #-120]!
+ ldceq p5, c8, [r4], #16
+ ldcgt p4, c9, [r5], #-72
+ ldcllt p3, c10, [r6, #4]
+ ldclge p2, c11, [r7]
+ ldclle p1, c12, [r8, #-224]
+ ldclne p0, c13, [r9, #-120]!
+ ldcleq p6, c14, [r10], #16
+ ldclhi p7, c15, [r11], #-72
+
+ ldc2 p2, c8, [r1], { 25 }
+
+@ CHECK: ldc2 p0, c8, [r1, #4] @ encoding: [0x01,0x80,0x91,0xfd]
+@ CHECK: ldc2 p1, c7, [r2] @ encoding: [0x00,0x71,0x92,0xfd]
+@ CHECK: ldc2 p2, c6, [r3, #-224] @ encoding: [0x38,0x62,0x13,0xfd]
+@ CHECK: ldc2 p3, c5, [r4, #-120]! @ encoding: [0x1e,0x53,0x34,0xfd]
+@ CHECK: ldc2 p4, c4, [r5], #16 @ encoding: [0x04,0x44,0xb5,0xfc]
+@ CHECK: ldc2 p5, c3, [r6], #-72 @ encoding: [0x12,0x35,0x36,0xfc]
+@ CHECK: ldc2l p6, c2, [r7, #4] @ encoding: [0x01,0x26,0xd7,0xfd]
+@ CHECK: ldc2l p7, c1, [r8] @ encoding: [0x00,0x17,0xd8,0xfd]
+@ CHECK: ldc2l p8, c0, [r9, #-224] @ encoding: [0x38,0x08,0x59,0xfd]
+@ CHECK: ldc2l p9, c1, [r10, #-120]! @ encoding: [0x1e,0x19,0x7a,0xfd]
+@ CHECK: ldc2l p10, c2, [r11], #16 @ encoding: [0x04,0x2a,0xfb,0xfc]
+@ CHECK: ldc2l p11, c3, [r12], #-72 @ encoding: [0x12,0x3b,0x7c,0xfc]
+
+@ CHECK: ldc p12, c4, [r0, #4] @ encoding: [0x01,0x4c,0x90,0xed]
+@ CHECK: ldc p13, c5, [r1] @ encoding: [0x00,0x5d,0x91,0xed]
+@ CHECK: ldc p14, c6, [r2, #-224] @ encoding: [0x38,0x6e,0x12,0xed]
+@ CHECK: ldc p15, c7, [r3, #-120]! @ encoding: [0x1e,0x7f,0x33,0xed]
+@ CHECK: ldc p5, c8, [r4], #16 @ encoding: [0x04,0x85,0xb4,0xec]
+@ CHECK: ldc p4, c9, [r5], #-72 @ encoding: [0x12,0x94,0x35,0xec]
+@ CHECK: ldcl p3, c10, [r6, #4] @ encoding: [0x01,0xa3,0xd6,0xed]
+@ CHECK: ldcl p2, c11, [r7] @ encoding: [0x00,0xb2,0xd7,0xed]
+@ CHECK: ldcl p1, c12, [r8, #-224] @ encoding: [0x38,0xc1,0x58,0xed]
+@ CHECK: ldcl p0, c13, [r9, #-120]! @ encoding: [0x1e,0xd0,0x79,0xed]
+@ CHECK: ldcl p6, c14, [r10], #16 @ encoding: [0x04,0xe6,0xfa,0xec]
+@ CHECK: ldcl p7, c15, [r11], #-72 @ encoding: [0x12,0xf7,0x7b,0xec]
+
+@ CHECK: ldclo p12, c4, [r0, #4] @ encoding: [0x01,0x4c,0x90,0x3d]
+@ CHECK: ldchi p13, c5, [r1] @ encoding: [0x00,0x5d,0x91,0x8d]
+@ CHECK: ldchs p14, c6, [r2, #-224] @ encoding: [0x38,0x6e,0x12,0x2d]
+@ CHECK: ldclo p15, c7, [r3, #-120]! @ encoding: [0x1e,0x7f,0x33,0x3d]
+@ CHECK: ldceq p5, c8, [r4], #16 @ encoding: [0x04,0x85,0xb4,0x0c]
+@ CHECK: ldcgt p4, c9, [r5], #-72 @ encoding: [0x12,0x94,0x35,0xcc]
+@ CHECK: ldcllt p3, c10, [r6, #4] @ encoding: [0x01,0xa3,0xd6,0xbd]
+@ CHECK: ldclge p2, c11, [r7] @ encoding: [0x00,0xb2,0xd7,0xad]
+@ CHECK: ldclle p1, c12, [r8, #-224] @ encoding: [0x38,0xc1,0x58,0xdd]
+@ CHECK: ldclne p0, c13, [r9, #-120]! @ encoding: [0x1e,0xd0,0x79,0x1d]
+@ CHECK: ldcleq p6, c14, [r10], #16 @ encoding: [0x04,0xe6,0xfa,0x0c]
+@ CHECK: ldclhi p7, c15, [r11], #-72 @ encoding: [0x12,0xf7,0x7b,0x8c]
+
+@ CHECK: ldc2 p2, c8, [r1], {25} @ encoding: [0x19,0x82,0x91,0xfc]
+
@------------------------------------------------------------------------------
@ LDM*
@@ -619,9 +756,29 @@ _func:
@ CHECK: ldmda r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x32,0xe8]
@ CHECK: ldmdb r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x32,0xe9]
+
+@------------------------------------------------------------------------------
+@ LDREX/LDREXB/LDREXH/LDREXD
+@------------------------------------------------------------------------------
+ ldrexb r3, [r4]
+ ldrexh r2, [r5]
+ ldrex r1, [r7]
+ ldrexd r6, r7, [r8]
+
+@ CHECK: ldrexb r3, [r4] @ encoding: [0x9f,0x3f,0xd4,0xe1]
+@ CHECK: ldrexh r2, [r5] @ encoding: [0x9f,0x2f,0xf5,0xe1]
+@ CHECK: ldrex r1, [r7] @ encoding: [0x9f,0x1f,0x97,0xe1]
+@ CHECK: ldrexd r6, r7, [r8] @ encoding: [0x9f,0x6f,0xb8,0xe1]
+
@------------------------------------------------------------------------------
-@ FIXME: LDR*
+@ LDRHT
@------------------------------------------------------------------------------
+ ldrhthi r8, [r11], #-0
+ ldrhthi r8, [r11], #0
+
+@ CHECK: ldrhthi r8, [r11], #-0 @ encoding: [0xb0,0x80,0x7b,0x80]
+@ CHECK: ldrhthi r8, [r11], #0 @ encoding: [0xb0,0x80,0xfb,0x80]
+
@------------------------------------------------------------------------------
@ FIXME: LSL
@------------------------------------------------------------------------------
@@ -635,8 +792,8 @@ _func:
mcr p7, #1, r5, c1, c1, #4
mcr2 p7, #1, r5, c1, c1, #4
-@ CHECK: mcr p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xee]
-@ CHECK: mcr2 p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xfe]
+@ CHECK: mcr p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xee]
+@ CHECK: mcr2 p7, #1, r5, c1, c1, #4 @ encoding: [0x91,0x57,0x21,0xfe]
@------------------------------------------------------------------------------
@ MCRR/MCRR2
@@ -644,8 +801,8 @@ _func:
mcrr p7, #15, r5, r4, c1
mcrr2 p7, #15, r5, r4, c1
-@ CHECK: mcrr p7, #15, r5, r4, c1 @ encoding: [0xf1,0x57,0x44,0xec]
-@ CHECK: mcrr2 p7, #15, r5, r4, c1 @ encoding: [0xf1,0x57,0x44,0xfc]
+@ CHECK: mcrr p7, #15, r5, r4, c1 @ encoding: [0xf1,0x57,0x44,0xec]
+@ CHECK: mcrr2 p7, #15, r5, r4, c1 @ encoding: [0xf1,0x57,0x44,0xfc]
@------------------------------------------------------------------------------
@@ -656,10 +813,10 @@ _func:
mlane r1,r2,r3,r4
mlasne r1,r2,r3,r4
-@ CHECK: mla r1, r2, r3, r4 @ encoding: [0x92,0x43,0x21,0xe0]
-@ CHECK: mlas r1, r2, r3, r4 @ encoding: [0x92,0x43,0x31,0xe0]
-@ CHECK: mlane r1, r2, r3, r4 @ encoding: [0x92,0x43,0x21,0x10]
-@ CHECK: mlasne r1, r2, r3, r4 @ encoding: [0x92,0x43,0x31,0x10]
+@ CHECK: mla r1, r2, r3, r4 @ encoding: [0x92,0x43,0x21,0xe0]
+@ CHECK: mlas r1, r2, r3, r4 @ encoding: [0x92,0x43,0x31,0xe0]
+@ CHECK: mlane r1, r2, r3, r4 @ encoding: [0x92,0x43,0x21,0x10]
+@ CHECK: mlasne r1, r2, r3, r4 @ encoding: [0x92,0x43,0x31,0x10]
@------------------------------------------------------------------------------
@ MLS
@@ -671,28 +828,1799 @@ _func:
@ CHECK: mlsne r2, r5, r6, r3 @ encoding: [0x95,0x36,0x62,0x10]
@------------------------------------------------------------------------------
+@ MOV (immediate)
+@------------------------------------------------------------------------------
+ mov r3, #7
+ mov r4, #0xff0
+ mov r5, #0xff0000
+ mov r6, #0xffff
+ movw r9, #0xffff
+ movs r3, #7
+ moveq r4, #0xff0
+ movseq r5, #0xff0000
+
+@ CHECK: mov r3, #7 @ encoding: [0x07,0x30,0xa0,0xe3]
+@ CHECK: mov r4, #4080 @ encoding: [0xff,0x4e,0xa0,0xe3]
+@ CHECK: mov r5, #16711680 @ encoding: [0xff,0x58,0xa0,0xe3]
+@ CHECK: movw r6, #65535 @ encoding: [0xff,0x6f,0x0f,0xe3]
+@ CHECK: movw r9, #65535 @ encoding: [0xff,0x9f,0x0f,0xe3]
+@ CHECK: movs r3, #7 @ encoding: [0x07,0x30,0xb0,0xe3]
+@ CHECK: moveq r4, #4080 @ encoding: [0xff,0x4e,0xa0,0x03]
+@ CHECK: movseq r5, #16711680 @ encoding: [0xff,0x58,0xb0,0x03]
+
+@------------------------------------------------------------------------------
+@ MOV (register)
+@------------------------------------------------------------------------------
+ mov r2, r3
+ movs r2, r3
+ moveq r2, r3
+ movseq r2, r3
+
+@ CHECK: mov r2, r3 @ encoding: [0x03,0x20,0xa0,0xe1]
+@ CHECK: movs r2, r3 @ encoding: [0x03,0x20,0xb0,0xe1]
+@ CHECK: moveq r2, r3 @ encoding: [0x03,0x20,0xa0,0x01]
+@ CHECK: movseq r2, r3 @ encoding: [0x03,0x20,0xb0,0x01]
+
+@------------------------------------------------------------------------------
+@ MOVT
+@------------------------------------------------------------------------------
+ movt r3, #7
+ movt r6, #0xffff
+ movteq r4, #0xff0
+
+@ CHECK: movt r3, #7 @ encoding: [0x07,0x30,0x40,0xe3]
+@ CHECK: movt r6, #65535 @ encoding: [0xff,0x6f,0x4f,0xe3]
+@ CHECK: movteq r4, #4080 @ encoding: [0xf0,0x4f,0x40,0x03]
+
+
+@------------------------------------------------------------------------------
+@ MRC/MRC2
+@------------------------------------------------------------------------------
+ mrc p14, #0, r1, c1, c2, #4
+ mrc2 p14, #0, r1, c1, c2, #4
+
+@ CHECK: mrc p14, #0, r1, c1, c2, #4 @ encoding: [0x92,0x1e,0x11,0xee]
+@ CHECK: mrc2 p14, #0, r1, c1, c2, #4 @ encoding: [0x92,0x1e,0x11,0xfe]
+
+@------------------------------------------------------------------------------
+@ MRRC/MRRC2
+@------------------------------------------------------------------------------
+ mrrc p7, #1, r5, r4, c1
+ mrrc2 p7, #1, r5, r4, c1
+
+@ CHECK: mrrc p7, #1, r5, r4, c1 @ encoding: [0x11,0x57,0x54,0xec]
+@ CHECK: mrrc2 p7, #1, r5, r4, c1 @ encoding: [0x11,0x57,0x54,0xfc]
+
+
+@------------------------------------------------------------------------------
+@ MRS
+@------------------------------------------------------------------------------
+ mrs r8, apsr
+ mrs r8, cpsr
+ mrs r8, spsr
+@ CHECK: mrs r8, apsr @ encoding: [0x00,0x80,0x0f,0xe1]
+@ CHECK: mrs r8, apsr @ encoding: [0x00,0x80,0x0f,0xe1]
+@ CHECK: mrs r8, spsr @ encoding: [0x00,0x80,0x4f,0xe1]
+
+
+
+@------------------------------------------------------------------------------
+@ MSR
+@------------------------------------------------------------------------------
+
+ msr apsr, #5
+ msr apsr_g, #5
+ msr apsr_nzcvq, #5
+ msr APSR_nzcvq, #5
+ msr apsr_nzcvqg, #5
+ msr cpsr_fc, #5
+ msr cpsr_c, #5
+ msr cpsr_x, #5
+ msr cpsr_fc, #5
+ msr cpsr_all, #5
+ msr cpsr_fsx, #5
+ msr spsr_fc, #5
+ msr SPSR_fsxc, #5
+ msr cpsr_fsxc, #5
+
+@ CHECK: msr APSR_nzcvq, #5 @ encoding: [0x05,0xf0,0x28,0xe3]
+@ CHECK: msr APSR_g, #5 @ encoding: [0x05,0xf0,0x24,0xe3]
+@ CHECK: msr APSR_nzcvq, #5 @ encoding: [0x05,0xf0,0x28,0xe3]
+@ CHECK: msr APSR_nzcvq, #5 @ encoding: [0x05,0xf0,0x28,0xe3]
+@ CHECK: msr APSR_nzcvqg, #5 @ encoding: [0x05,0xf0,0x2c,0xe3]
+@ CHECK: msr CPSR_fc, #5 @ encoding: [0x05,0xf0,0x29,0xe3]
+@ CHECK: msr CPSR_c, #5 @ encoding: [0x05,0xf0,0x21,0xe3]
+@ CHECK: msr CPSR_x, #5 @ encoding: [0x05,0xf0,0x22,0xe3]
+@ CHECK: msr CPSR_fc, #5 @ encoding: [0x05,0xf0,0x29,0xe3]
+@ CHECK: msr CPSR_fc, #5 @ encoding: [0x05,0xf0,0x29,0xe3]
+@ CHECK: msr CPSR_fsx, #5 @ encoding: [0x05,0xf0,0x2e,0xe3]
+@ CHECK: msr SPSR_fc, #5 @ encoding: [0x05,0xf0,0x69,0xe3]
+@ CHECK: msr SPSR_fsxc, #5 @ encoding: [0x05,0xf0,0x6f,0xe3]
+@ CHECK: msr CPSR_fsxc, #5 @ encoding: [0x05,0xf0,0x2f,0xe3]
+
+ msr apsr, r0
+ msr apsr_g, r0
+ msr apsr_nzcvq, r0
+ msr APSR_nzcvq, r0
+ msr apsr_nzcvqg, r0
+ msr cpsr_fc, r0
+ msr cpsr_c, r0
+ msr cpsr_x, r0
+ msr cpsr_fc, r0
+ msr cpsr_all, r0
+ msr cpsr_fsx, r0
+ msr spsr_fc, r0
+ msr SPSR_fsxc, r0
+ msr cpsr_fsxc, r0
+
+@ CHECK: msr APSR_nzcvq, r0 @ encoding: [0x00,0xf0,0x28,0xe1]
+@ CHECK: msr APSR_g, r0 @ encoding: [0x00,0xf0,0x24,0xe1]
+@ CHECK: msr APSR_nzcvq, r0 @ encoding: [0x00,0xf0,0x28,0xe1]
+@ CHECK: msr APSR_nzcvq, r0 @ encoding: [0x00,0xf0,0x28,0xe1]
+@ CHECK: msr APSR_nzcvqg, r0 @ encoding: [0x00,0xf0,0x2c,0xe1]
+@ CHECK: msr CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
+@ CHECK: msr CPSR_c, r0 @ encoding: [0x00,0xf0,0x21,0xe1]
+@ CHECK: msr CPSR_x, r0 @ encoding: [0x00,0xf0,0x22,0xe1]
+@ CHECK: msr CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
+@ CHECK: msr CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,0xe1]
+@ CHECK: msr CPSR_fsx, r0 @ encoding: [0x00,0xf0,0x2e,0xe1]
+@ CHECK: msr SPSR_fc, r0 @ encoding: [0x00,0xf0,0x69,0xe1]
+@ CHECK: msr SPSR_fsxc, r0 @ encoding: [0x00,0xf0,0x6f,0xe1]
+@ CHECK: msr CPSR_fsxc, r0 @ encoding: [0x00,0xf0,0x2f,0xe1]
+
+@------------------------------------------------------------------------------
+@ MUL
+@------------------------------------------------------------------------------
+ mul r5, r6, r7
+ muls r5, r6, r7
+ mulgt r5, r6, r7
+ mulsle r5, r6, r7
+
+@ CHECK: mul r5, r6, r7 @ encoding: [0x96,0x07,0x05,0xe0]
+@ CHECK: muls r5, r6, r7 @ encoding: [0x96,0x07,0x15,0xe0]
+@ CHECK: mulgt r5, r6, r7 @ encoding: [0x96,0x07,0x05,0xc0]
+@ CHECK: mulsle r5, r6, r7 @ encoding: [0x96,0x07,0x15,0xd0]
+
+
+@------------------------------------------------------------------------------
+@ MVN (immediate)
+@------------------------------------------------------------------------------
+ mvn r3, #7
+ mvn r4, #0xff0
+ mvn r5, #0xff0000
+ mvns r3, #7
+ mvneq r4, #0xff0
+ mvnseq r5, #0xff0000
+
+@ CHECK: mvn r3, #7 @ encoding: [0x07,0x30,0xe0,0xe3]
+@ CHECK: mvn r4, #4080 @ encoding: [0xff,0x4e,0xe0,0xe3]
+@ CHECK: mvn r5, #16711680 @ encoding: [0xff,0x58,0xe0,0xe3]
+@ CHECK: mvns r3, #7 @ encoding: [0x07,0x30,0xf0,0xe3]
+@ CHECK: mvneq r4, #4080 @ encoding: [0xff,0x4e,0xe0,0x03]
+@ CHECK: mvnseq r5, #16711680 @ encoding: [0xff,0x58,0xf0,0x03]
+
+
+@------------------------------------------------------------------------------
+@ MVN (register)
+@------------------------------------------------------------------------------
+ mvn r2, r3
+ mvns r2, r3
+ mvn r5, r6, lsl #19
+ mvn r5, r6, lsr #9
+ mvn r5, r6, asr #4
+ mvn r5, r6, ror #6
+ mvn r5, r6, rrx
+ mvneq r2, r3
+ mvnseq r2, r3, lsl #10
+
+@ CHECK: mvn r2, r3 @ encoding: [0x03,0x20,0xe0,0xe1]
+@ CHECK: mvns r2, r3 @ encoding: [0x03,0x20,0xf0,0xe1]
+@ CHECK: mvn r5, r6, lsl #19 @ encoding: [0x86,0x59,0xe0,0xe1]
+@ CHECK: mvn r5, r6, lsr #9 @ encoding: [0xa6,0x54,0xe0,0xe1]
+@ CHECK: mvn r5, r6, asr #4 @ encoding: [0x46,0x52,0xe0,0xe1]
+@ CHECK: mvn r5, r6, ror #6 @ encoding: [0x66,0x53,0xe0,0xe1]
+@ CHECK: mvn r5, r6, rrx @ encoding: [0x66,0x50,0xe0,0xe1]
+@ CHECK: mvneq r2, r3 @ encoding: [0x03,0x20,0xe0,0x01]
+@ CHECK: mvnseq r2, r3, lsl #10 @ encoding: [0x03,0x25,0xf0,0x01]
+
+
+@------------------------------------------------------------------------------
+@ MVN (shifted register)
+@------------------------------------------------------------------------------
+ mvn r5, r6, lsl r7
+ mvns r5, r6, lsr r7
+ mvngt r5, r6, asr r7
+ mvnslt r5, r6, ror r7
+
+@ CHECK: mvn r5, r6, lsl r7 @ encoding: [0x16,0x57,0xe0,0xe1]
+@ CHECK: mvns r5, r6, lsr r7 @ encoding: [0x36,0x57,0xf0,0xe1]
+@ CHECK: mvngt r5, r6, asr r7 @ encoding: [0x56,0x57,0xe0,0xc1]
+@ CHECK: mvnslt r5, r6, ror r7 @ encoding: [0x76,0x57,0xf0,0xb1]
+
+@------------------------------------------------------------------------------
+@ NOP
+@------------------------------------------------------------------------------
+ nop
+ nopgt
+
+@ CHECK: nop @ encoding: [0x00,0xf0,0x20,0xe3]
+@ CHECK: nopgt @ encoding: [0x00,0xf0,0x20,0xc3]
+
+
+@------------------------------------------------------------------------------
+@ ORR
+@------------------------------------------------------------------------------
+ orr r4, r5, #0xf000
+ orr r4, r5, r6
+ orr r4, r5, r6, lsl #5
+ orr r4, r5, r6, lsr #5
+ orr r4, r5, r6, lsr #5
+ orr r4, r5, r6, asr #5
+ orr r4, r5, r6, ror #5
+ orr r6, r7, r8, lsl r9
+ orr r6, r7, r8, lsr r9
+ orr r6, r7, r8, asr r9
+ orr r6, r7, r8, ror r9
+ orr r4, r5, r6, rrx
+
+ @ destination register is optional
+ orr r5, #0xf000
+ orr r4, r5
+ orr r4, r5, lsl #5
+ orr r4, r5, lsr #5
+ orr r4, r5, lsr #5
+ orr r4, r5, asr #5
+ orr r4, r5, ror #5
+ orr r6, r7, lsl r9
+ orr r6, r7, lsr r9
+ orr r6, r7, asr r9
+ orr r6, r7, ror r9
+ orr r4, r5, rrx
+
+@ CHECK: orr r4, r5, #61440 @ encoding: [0x0f,0x4a,0x85,0xe3]
+@ CHECK: orr r4, r5, r6 @ encoding: [0x06,0x40,0x85,0xe1]
+@ CHECK: orr r4, r5, r6, lsl #5 @ encoding: [0x86,0x42,0x85,0xe1]
+@ CHECK: orr r4, r5, r6, lsr #5 @ encoding: [0xa6,0x42,0x85,0xe1]
+@ CHECK: orr r4, r5, r6, lsr #5 @ encoding: [0xa6,0x42,0x85,0xe1]
+@ CHECK: orr r4, r5, r6, asr #5 @ encoding: [0xc6,0x42,0x85,0xe1]
+@ CHECK: orr r4, r5, r6, ror #5 @ encoding: [0xe6,0x42,0x85,0xe1]
+@ CHECK: orr r6, r7, r8, lsl r9 @ encoding: [0x18,0x69,0x87,0xe1]
+@ CHECK: orr r6, r7, r8, lsr r9 @ encoding: [0x38,0x69,0x87,0xe1]
+@ CHECK: orr r6, r7, r8, asr r9 @ encoding: [0x58,0x69,0x87,0xe1]
+@ CHECK: orr r6, r7, r8, ror r9 @ encoding: [0x78,0x69,0x87,0xe1]
+@ CHECK: orr r4, r5, r6, rrx @ encoding: [0x66,0x40,0x85,0xe1]
+
+@ CHECK: orr r5, r5, #61440 @ encoding: [0x0f,0x5a,0x85,0xe3]
+@ CHECK: orr r4, r4, r5 @ encoding: [0x05,0x40,0x84,0xe1]
+@ CHECK: orr r4, r4, r5, lsl #5 @ encoding: [0x85,0x42,0x84,0xe1]
+@ CHECK: orr r4, r4, r5, lsr #5 @ encoding: [0xa5,0x42,0x84,0xe1]
+@ CHECK: orr r4, r4, r5, lsr #5 @ encoding: [0xa5,0x42,0x84,0xe1]
+@ CHECK: orr r4, r4, r5, asr #5 @ encoding: [0xc5,0x42,0x84,0xe1]
+@ CHECK: orr r4, r4, r5, ror #5 @ encoding: [0xe5,0x42,0x84,0xe1]
+@ CHECK: orr r6, r6, r7, lsl r9 @ encoding: [0x17,0x69,0x86,0xe1]
+@ CHECK: orr r6, r6, r7, lsr r9 @ encoding: [0x37,0x69,0x86,0xe1]
+@ CHECK: orr r6, r6, r7, asr r9 @ encoding: [0x57,0x69,0x86,0xe1]
+@ CHECK: orr r6, r6, r7, ror r9 @ encoding: [0x77,0x69,0x86,0xe1]
+@ CHECK: orr r4, r4, r5, rrx @ encoding: [0x65,0x40,0x84,0xe1]
+
+ orrseq r4, r5, #0xf000
+ orrne r4, r5, r6
+ orrseq r4, r5, r6, lsl #5
+ orrlo r6, r7, r8, ror r9
+ orrshi r4, r5, r6, rrx
+ orrcs r5, #0xf000
+ orrseq r4, r5
+ orrne r6, r7, asr r9
+ orrslt r6, r7, ror r9
+ orrsgt r4, r5, rrx
+
+@ CHECK: orrseq r4, r5, #61440 @ encoding: [0x0f,0x4a,0x95,0x03]
+@ CHECK: orrne r4, r5, r6 @ encoding: [0x06,0x40,0x85,0x11]
+@ CHECK: orrseq r4, r5, r6, lsl #5 @ encoding: [0x86,0x42,0x95,0x01]
+@ CHECK: orrlo r6, r7, r8, ror r9 @ encoding: [0x78,0x69,0x87,0x31]
+@ CHECK: orrshi r4, r5, r6, rrx @ encoding: [0x66,0x40,0x95,0x81]
+@ CHECK: orrhs r5, r5, #61440 @ encoding: [0x0f,0x5a,0x85,0x23]
+@ CHECK: orrseq r4, r4, r5 @ encoding: [0x05,0x40,0x94,0x01]
+@ CHECK: orrne r6, r6, r7, asr r9 @ encoding: [0x57,0x69,0x86,0x11]
+@ CHECK: orrslt r6, r6, r7, ror r9 @ encoding: [0x77,0x69,0x96,0xb1]
+@ CHECK: orrsgt r4, r4, r5, rrx @ encoding: [0x65,0x40,0x94,0xc1]
+
+@------------------------------------------------------------------------------
+@ PKH
+@------------------------------------------------------------------------------
+ pkhbt r2, r2, r3
+ pkhbt r2, r2, r3, lsl #31
+ pkhbt r2, r2, r3, lsl #0
+ pkhbt r2, r2, r3, lsl #15
+
+ pkhtb r2, r2, r3
+ pkhtb r2, r2, r3, asr #31
+ pkhtb r2, r2, r3, asr #15
+
+@ CHECK: pkhbt r2, r2, r3 @ encoding: [0x13,0x20,0x82,0xe6]
+@ CHECK: pkhbt r2, r2, r3, lsl #31 @ encoding: [0x93,0x2f,0x82,0xe6]
+@ CHECK: pkhbt r2, r2, r3 @ encoding: [0x13,0x20,0x82,0xe6]
+@ CHECK: pkhbt r2, r2, r3, lsl #15 @ encoding: [0x93,0x27,0x82,0xe6]
+
+@ CHECK: pkhbt r2, r2, r3 @ encoding: [0x13,0x20,0x82,0xe6]
+@ CHECK: pkhtb r2, r2, r3, asr #31 @ encoding: [0xd3,0x2f,0x82,0xe6]
+@ CHECK: pkhtb r2, r2, r3, asr #15 @ encoding: [0xd3,0x27,0x82,0xe6]
+
+@------------------------------------------------------------------------------
+@ FIXME: PLD
+@------------------------------------------------------------------------------
+@------------------------------------------------------------------------------
+@ FIXME: PLI
+@------------------------------------------------------------------------------
+
+
+@------------------------------------------------------------------------------
+@ POP
+@------------------------------------------------------------------------------
+ pop {r7}
+ pop {r7, r8, r9, r10}
+
+@ CHECK: pop {r7} @ encoding: [0x04,0x70,0x9d,0xe4]
+@ CHECK: pop {r7, r8, r9, r10} @ encoding: [0x80,0x07,0xbd,0xe8]
+
+
+@------------------------------------------------------------------------------
+@ PUSH
+@------------------------------------------------------------------------------
+ push {r7}
+ push {r7, r8, r9, r10}
+
+@ CHECK: push {r7} @ encoding: [0x04,0x70,0x2d,0xe5]
+@ CHECK: push {r7, r8, r9, r10} @ encoding: [0x80,0x07,0x2d,0xe9]
+
+
+@------------------------------------------------------------------------------
+@ QADD/QADD16/QADD8
+@------------------------------------------------------------------------------
+ qadd r1, r2, r3
+ qaddne r1, r2, r3
+ qadd16 r1, r2, r3
+ qadd16gt r1, r2, r3
+ qadd8 r1, r2, r3
+ qadd8le r1, r2, r3
+
+@ CHECK: qadd r1, r2, r3 @ encoding: [0x52,0x10,0x03,0xe1]
+@ CHECK: qaddne r1, r2, r3 @ encoding: [0x52,0x10,0x03,0x11]
+@ CHECK: qadd16 r1, r2, r3 @ encoding: [0x13,0x1f,0x22,0xe6]
+@ CHECK: qadd16gt r1, r2, r3 @ encoding: [0x13,0x1f,0x22,0xc6]
+@ CHECK: qadd8 r1, r2, r3 @ encoding: [0x93,0x1f,0x22,0xe6]
+@ CHECK: qadd8le r1, r2, r3 @ encoding: [0x93,0x1f,0x22,0xd6]
+
+
+@------------------------------------------------------------------------------
+@ QDADD/QDSUB
+@------------------------------------------------------------------------------
+ qdadd r6, r7, r8
+ qdaddhi r6, r7, r8
+ qdsub r6, r7, r8
+ qdsubhi r6, r7, r8
+
+@ CHECK: qdadd r6, r7, r8 @ encoding: [0x57,0x60,0x48,0xe1]
+@ CHECK: qdaddhi r6, r7, r8 @ encoding: [0x57,0x60,0x48,0x81]
+@ CHECK: qdsub r6, r7, r8 @ encoding: [0x57,0x60,0x68,0xe1]
+@ CHECK: qdsubhi r6, r7, r8 @ encoding: [0x57,0x60,0x68,0x81]
+
+
+@------------------------------------------------------------------------------
+@ QSAX
+@------------------------------------------------------------------------------
+ qsax r9, r12, r0
+ qsaxeq r9, r12, r0
+
+@ CHECK: qsax r9, r12, r0 @ encoding: [0x50,0x9f,0x2c,0xe6]
+@ CHECK: qsaxeq r9, r12, r0 @ encoding: [0x50,0x9f,0x2c,0x06]
+
+
+@------------------------------------------------------------------------------
+@ QSUB/QSUB16/QSUB8
+@------------------------------------------------------------------------------
+ qsub r1, r2, r3
+ qsubne r1, r2, r3
+ qsub16 r1, r2, r3
+ qsub16gt r1, r2, r3
+ qsub8 r1, r2, r3
+ qsub8le r1, r2, r3
+
+@ CHECK: qsub r1, r2, r3 @ encoding: [0x52,0x10,0x23,0xe1]
+@ CHECK: qsubne r1, r2, r3 @ encoding: [0x52,0x10,0x23,0x11]
+@ CHECK: qsub16 r1, r2, r3 @ encoding: [0x73,0x1f,0x22,0xe6]
+@ CHECK: qsub16gt r1, r2, r3 @ encoding: [0x73,0x1f,0x22,0xc6]
+@ CHECK: qsub8 r1, r2, r3 @ encoding: [0xf3,0x1f,0x22,0xe6]
+@ CHECK: qsub8le r1, r2, r3 @ encoding: [0xf3,0x1f,0x22,0xd6]
+
+
+@------------------------------------------------------------------------------
+@ RBIT
+@------------------------------------------------------------------------------
+ rbit r1, r2
+ rbitne r1, r2
+
+@ CHECK: rbit r1, r2 @ encoding: [0x32,0x1f,0xff,0xe6]
+@ CHECK: rbitne r1, r2 @ encoding: [0x32,0x1f,0xff,0x16]
+
+
+@------------------------------------------------------------------------------
+@ REV/REV16/REVSH
+@------------------------------------------------------------------------------
+ rev r1, r9
+ revne r1, r5
+ rev16 r8, r3
+ rev16ne r12, r4
+ revsh r4, r9
+ revshne r9, r1
+
+@ CHECK: rev r1, r9 @ encoding: [0x39,0x1f,0xbf,0xe6]
+@ CHECK: revne r1, r5 @ encoding: [0x35,0x1f,0xbf,0x16]
+@ CHECK: rev16 r8, r3 @ encoding: [0xb3,0x8f,0xbf,0xe6]
+@ CHECK: rev16ne r12, r4 @ encoding: [0xb4,0xcf,0xbf,0x16]
+@ CHECK: revsh r4, r9 @ encoding: [0xb9,0x4f,0xff,0xe6]
+@ CHECK: revshne r9, r1 @ encoding: [0xb1,0x9f,0xff,0x16]
+
+
+@------------------------------------------------------------------------------
+@ RFE
+@------------------------------------------------------------------------------
+ rfeda r2
+ rfedb r3
+ rfeia r5
+ rfeib r6
+
+ rfeda r4!
+ rfedb r7!
+ rfeia r9!
+ rfeib r8!
+
+ rfefa r2
+ rfeea r3
+ rfefd r5
+ rfeed r6
+
+ rfefa r4!
+ rfeea r7!
+ rfefd r9!
+ rfeed r8!
+
+ rfe r1
+ rfe r1!
+
+@ CHECK: rfeda r2 @ encoding: [0x00,0x0a,0x12,0xf8]
+@ CHECK: rfedb r3 @ encoding: [0x00,0x0a,0x13,0xf9]
+@ CHECK: rfeia r5 @ encoding: [0x00,0x0a,0x95,0xf8]
+@ CHECK: rfeib r6 @ encoding: [0x00,0x0a,0x96,0xf9]
+
+@ CHECK: rfeda r4! @ encoding: [0x00,0x0a,0x34,0xf8]
+@ CHECK: rfedb r7! @ encoding: [0x00,0x0a,0x37,0xf9]
+@ CHECK: rfeia r9! @ encoding: [0x00,0x0a,0xb9,0xf8]
+@ CHECK: rfeib r8! @ encoding: [0x00,0x0a,0xb8,0xf9]
+
+@ CHECK: rfeda r2 @ encoding: [0x00,0x0a,0x12,0xf8]
+@ CHECK: rfedb r3 @ encoding: [0x00,0x0a,0x13,0xf9]
+@ CHECK: rfeia r5 @ encoding: [0x00,0x0a,0x95,0xf8]
+@ CHECK: rfeib r6 @ encoding: [0x00,0x0a,0x96,0xf9]
+
+@ CHECK: rfeda r4! @ encoding: [0x00,0x0a,0x34,0xf8]
+@ CHECK: rfedb r7! @ encoding: [0x00,0x0a,0x37,0xf9]
+@ CHECK: rfeia r9! @ encoding: [0x00,0x0a,0xb9,0xf8]
+@ CHECK: rfeib r8! @ encoding: [0x00,0x0a,0xb8,0xf9]
+
+@ CHECK: rfeia r1 @ encoding: [0x00,0x0a,0x91,0xf8]
+@ CHECK: rfeia r1! @ encoding: [0x00,0x0a,0xb1,0xf8]
+
+
+@------------------------------------------------------------------------------
+@ RSB
+@------------------------------------------------------------------------------
+ rsb r4, r5, #0xf000
+ rsb r4, r5, r6
+ rsb r4, r5, r6, lsl #5
+ rsblo r4, r5, r6, lsr #5
+ rsb r4, r5, r6, lsr #5
+ rsb r4, r5, r6, asr #5
+ rsb r4, r5, r6, ror #5
+ rsb r6, r7, r8, lsl r9
+ rsb r6, r7, r8, lsr r9
+ rsb r6, r7, r8, asr r9
+ rsble r6, r7, r8, ror r9
+ rsb r4, r5, r6, rrx
+
+ @ destination register is optional
+ rsb r5, #0xf000
+ rsb r4, r5
+ rsb r4, r5, lsl #5
+ rsb r4, r5, lsr #5
+ rsbne r4, r5, lsr #5
+ rsb r4, r5, asr #5
+ rsb r4, r5, ror #5
+ rsbgt r6, r7, lsl r9
+ rsb r6, r7, lsr r9
+ rsb r6, r7, asr r9
+ rsb r6, r7, ror r9
+ rsb r4, r5, rrx
+
+@ CHECK: rsb r4, r5, #61440 @ encoding: [0x0f,0x4a,0x65,0xe2]
+@ CHECK: rsb r4, r5, r6 @ encoding: [0x06,0x40,0x65,0xe0]
+@ CHECK: rsb r4, r5, r6, lsl #5 @ encoding: [0x86,0x42,0x65,0xe0]
+@ CHECK: rsblo r4, r5, r6, lsr #5 @ encoding: [0xa6,0x42,0x65,0x30]
+@ CHECK: rsb r4, r5, r6, lsr #5 @ encoding: [0xa6,0x42,0x65,0xe0]
+@ CHECK: rsb r4, r5, r6, asr #5 @ encoding: [0xc6,0x42,0x65,0xe0]
+@ CHECK: rsb r4, r5, r6, ror #5 @ encoding: [0xe6,0x42,0x65,0xe0]
+@ CHECK: rsb r6, r7, r8, lsl r9 @ encoding: [0x18,0x69,0x67,0xe0]
+@ CHECK: rsb r6, r7, r8, lsr r9 @ encoding: [0x38,0x69,0x67,0xe0]
+@ CHECK: rsb r6, r7, r8, asr r9 @ encoding: [0x58,0x69,0x67,0xe0]
+@ CHECK: rsble r6, r7, r8, ror r9 @ encoding: [0x78,0x69,0x67,0xd0]
+@ CHECK: rsb r4, r5, r6, rrx @ encoding: [0x66,0x40,0x65,0xe0]
+
+@ CHECK: rsb r5, r5, #61440 @ encoding: [0x0f,0x5a,0x65,0xe2]
+@ CHECK: rsb r4, r4, r5 @ encoding: [0x05,0x40,0x64,0xe0]
+@ CHECK: rsb r4, r4, r5, lsl #5 @ encoding: [0x85,0x42,0x64,0xe0]
+@ CHECK: rsb r4, r4, r5, lsr #5 @ encoding: [0xa5,0x42,0x64,0xe0]
+@ CHECK: rsbne r4, r4, r5, lsr #5 @ encoding: [0xa5,0x42,0x64,0x10]
+@ CHECK: rsb r4, r4, r5, asr #5 @ encoding: [0xc5,0x42,0x64,0xe0]
+@ CHECK: rsb r4, r4, r5, ror #5 @ encoding: [0xe5,0x42,0x64,0xe0]
+@ CHECK: rsbgt r6, r6, r7, lsl r9 @ encoding: [0x17,0x69,0x66,0xc0]
+@ CHECK: rsb r6, r6, r7, lsr r9 @ encoding: [0x37,0x69,0x66,0xe0]
+@ CHECK: rsb r6, r6, r7, asr r9 @ encoding: [0x57,0x69,0x66,0xe0]
+@ CHECK: rsb r6, r6, r7, ror r9 @ encoding: [0x77,0x69,0x66,0xe0]
+@ CHECK: rsb r4, r4, r5, rrx @ encoding: [0x65,0x40,0x64,0xe0]
+
+@------------------------------------------------------------------------------
+@ RSC
+@------------------------------------------------------------------------------
+ rsc r4, r5, #0xf000
+ rsc r4, r5, r6
+ rsc r4, r5, r6, lsl #5
+ rsclo r4, r5, r6, lsr #5
+ rsc r4, r5, r6, lsr #5
+ rsc r4, r5, r6, asr #5
+ rsc r4, r5, r6, ror #5
+ rsc r6, r7, r8, lsl r9
+ rsc r6, r7, r8, lsr r9
+ rsc r6, r7, r8, asr r9
+ rscle r6, r7, r8, ror r9
+ rscs r1, r8, #4064
+
+ @ destination register is optional
+ rsc r5, #0xf000
+ rsc r4, r5
+ rsc r4, r5, lsl #5
+ rsc r4, r5, lsr #5
+ rscne r4, r5, lsr #5
+ rsc r4, r5, asr #5
+ rsc r4, r5, ror #5
+ rscgt r6, r7, lsl r9
+ rsc r6, r7, lsr r9
+ rsc r6, r7, asr r9
+ rsc r6, r7, ror r9
+
+@ CHECK: rsc r4, r5, #61440 @ encoding: [0x0f,0x4a,0xe5,0xe2]
+@ CHECK: rsc r4, r5, r6 @ encoding: [0x06,0x40,0xe5,0xe0]
+@ CHECK: rsc r4, r5, r6, lsl #5 @ encoding: [0x86,0x42,0xe5,0xe0]
+@ CHECK: rsclo r4, r5, r6, lsr #5 @ encoding: [0xa6,0x42,0xe5,0x30]
+@ CHECK: rsc r4, r5, r6, lsr #5 @ encoding: [0xa6,0x42,0xe5,0xe0]
+@ CHECK: rsc r4, r5, r6, asr #5 @ encoding: [0xc6,0x42,0xe5,0xe0]
+@ CHECK: rsc r4, r5, r6, ror #5 @ encoding: [0xe6,0x42,0xe5,0xe0]
+@ CHECK: rsc r6, r7, r8, lsl r9 @ encoding: [0x18,0x69,0xe7,0xe0]
+@ CHECK: rsc r6, r7, r8, lsr r9 @ encoding: [0x38,0x69,0xe7,0xe0]
+@ CHECK: rsc r6, r7, r8, asr r9 @ encoding: [0x58,0x69,0xe7,0xe0]
+@ CHECK: rscle r6, r7, r8, ror r9 @ encoding: [0x78,0x69,0xe7,0xd0]
+@ CHECK: rscs r1, r8, #4064 @ encoding: [0xfe,0x1e,0xf8,0xe2]
+
+@ CHECK: rsc r5, r5, #61440 @ encoding: [0x0f,0x5a,0xe5,0xe2]
+@ CHECK: rsc r4, r4, r5 @ encoding: [0x05,0x40,0xe4,0xe0]
+@ CHECK: rsc r4, r4, r5, lsl #5 @ encoding: [0x85,0x42,0xe4,0xe0]
+@ CHECK: rsc r4, r4, r5, lsr #5 @ encoding: [0xa5,0x42,0xe4,0xe0]
+@ CHECK: rscne r4, r4, r5, lsr #5 @ encoding: [0xa5,0x42,0xe4,0x10]
+@ CHECK: rsc r4, r4, r5, asr #5 @ encoding: [0xc5,0x42,0xe4,0xe0]
+@ CHECK: rsc r4, r4, r5, ror #5 @ encoding: [0xe5,0x42,0xe4,0xe0]
+@ CHECK: rscgt r6, r6, r7, lsl r9 @ encoding: [0x17,0x69,0xe6,0xc0]
+@ CHECK: rsc r6, r6, r7, lsr r9 @ encoding: [0x37,0x69,0xe6,0xe0]
+@ CHECK: rsc r6, r6, r7, asr r9 @ encoding: [0x57,0x69,0xe6,0xe0]
+@ CHECK: rsc r6, r6, r7, ror r9 @ encoding: [0x77,0x69,0xe6,0xe0]
+
+@------------------------------------------------------------------------------
+@ SADD16/SADD8
+@------------------------------------------------------------------------------
+ sadd16 r1, r2, r3
+ sadd16gt r1, r2, r3
+ sadd8 r1, r2, r3
+ sadd8le r1, r2, r3
+
+@ CHECK: sadd16 r1, r2, r3 @ encoding: [0x13,0x1f,0x12,0xe6]
+@ CHECK: sadd16gt r1, r2, r3 @ encoding: [0x13,0x1f,0x12,0xc6]
+@ CHECK: sadd8 r1, r2, r3 @ encoding: [0x93,0x1f,0x12,0xe6]
+@ CHECK: sadd8le r1, r2, r3 @ encoding: [0x93,0x1f,0x12,0xd6]
+
+
+@------------------------------------------------------------------------------
+@ SASX
+@------------------------------------------------------------------------------
+ sasx r9, r12, r0
+ sasxeq r9, r12, r0
+
+@ CHECK: sasx r9, r12, r0 @ encoding: [0x30,0x9f,0x1c,0xe6]
+@ CHECK: sasxeq r9, r12, r0 @ encoding: [0x30,0x9f,0x1c,0x06]
+
+
+@------------------------------------------------------------------------------
+@ SBC
+@------------------------------------------------------------------------------
+ sbc r4, r5, #0xf000
+ sbc r4, r5, r6
+ sbc r4, r5, r6, lsl #5
+ sbc r4, r5, r6, lsr #5
+ sbc r4, r5, r6, lsr #5
+ sbc r4, r5, r6, asr #5
+ sbc r4, r5, r6, ror #5
+ sbc r6, r7, r8, lsl r9
+ sbc r6, r7, r8, lsr r9
+ sbc r6, r7, r8, asr r9
+ sbc r6, r7, r8, ror r9
+
+ @ destination register is optional
+ sbc r5, #0xf000
+ sbc r4, r5
+ sbc r4, r5, lsl #5
+ sbc r4, r5, lsr #5
+ sbc r4, r5, lsr #5
+ sbc r4, r5, asr #5
+ sbc r4, r5, ror #5
+ sbc r6, r7, lsl r9
+ sbc r6, r7, lsr r9
+ sbc r6, r7, asr r9
+ sbc r6, r7, ror r9
+
+@ CHECK: sbc r4, r5, #61440 @ encoding: [0x0f,0x4a,0xc5,0xe2]
+@ CHECK: sbc r4, r5, r6 @ encoding: [0x06,0x40,0xc5,0xe0]
+@ CHECK: sbc r4, r5, r6, lsl #5 @ encoding: [0x86,0x42,0xc5,0xe0]
+@ CHECK: sbc r4, r5, r6, lsr #5 @ encoding: [0xa6,0x42,0xc5,0xe0]
+@ CHECK: sbc r4, r5, r6, lsr #5 @ encoding: [0xa6,0x42,0xc5,0xe0]
+@ CHECK: sbc r4, r5, r6, asr #5 @ encoding: [0xc6,0x42,0xc5,0xe0]
+@ CHECK: sbc r4, r5, r6, ror #5 @ encoding: [0xe6,0x42,0xc5,0xe0]
+@ CHECK: sbc r6, r7, r8, lsl r9 @ encoding: [0x18,0x69,0xc7,0xe0]
+@ CHECK: sbc r6, r7, r8, lsr r9 @ encoding: [0x38,0x69,0xc7,0xe0]
+@ CHECK: sbc r6, r7, r8, asr r9 @ encoding: [0x58,0x69,0xc7,0xe0]
+@ CHECK: sbc r6, r7, r8, ror r9 @ encoding: [0x78,0x69,0xc7,0xe0]
+
+@ CHECK: sbc r5, r5, #61440 @ encoding: [0x0f,0x5a,0xc5,0xe2]
+@ CHECK: sbc r4, r4, r5 @ encoding: [0x05,0x40,0xc4,0xe0]
+@ CHECK: sbc r4, r4, r5, lsl #5 @ encoding: [0x85,0x42,0xc4,0xe0]
+@ CHECK: sbc r4, r4, r5, lsr #5 @ encoding: [0xa5,0x42,0xc4,0xe0]
+@ CHECK: sbc r4, r4, r5, lsr #5 @ encoding: [0xa5,0x42,0xc4,0xe0]
+@ CHECK: sbc r4, r4, r5, asr #5 @ encoding: [0xc5,0x42,0xc4,0xe0]
+@ CHECK: sbc r4, r4, r5, ror #5 @ encoding: [0xe5,0x42,0xc4,0xe0]
+@ CHECK: sbc r6, r6, r7, lsl r9 @ encoding: [0x17,0x69,0xc6,0xe0]
+@ CHECK: sbc r6, r6, r7, lsr r9 @ encoding: [0x37,0x69,0xc6,0xe0]
+@ CHECK: sbc r6, r6, r7, asr r9 @ encoding: [0x57,0x69,0xc6,0xe0]
+@ CHECK: sbc r6, r6, r7, ror r9 @ encoding: [0x77,0x69,0xc6,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ SBFX
+@------------------------------------------------------------------------------
+ sbfx r4, r5, #16, #1
+ sbfxgt r4, r5, #16, #16
+
+@ CHECK: sbfx r4, r5, #16, #1 @ encoding: [0x55,0x48,0xa0,0xe7]
+@ CHECK: sbfxgt r4, r5, #16, #16 @ encoding: [0x55,0x48,0xaf,0xc7]
+
+
+@------------------------------------------------------------------------------
+@ SEL
+@------------------------------------------------------------------------------
+ sel r9, r2, r1
+ selne r9, r2, r1
+
+@ CHECK: sel r9, r2, r1 @ encoding: [0xb1,0x9f,0x82,0xe6]
+@ CHECK: selne r9, r2, r1 @ encoding: [0xb1,0x9f,0x82,0x16]
+
+
+@------------------------------------------------------------------------------
+@ SETEND
+@------------------------------------------------------------------------------
+ setend be
+ setend le
+
+@ CHECK: setend be @ encoding: [0x00,0x02,0x01,0xf1]
+@ CHECK: setend le @ encoding: [0x00,0x00,0x01,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ SEV
+@------------------------------------------------------------------------------
+ sev
+ seveq
+
+@ CHECK: sev @ encoding: [0x04,0xf0,0x20,0xe3]
+@ CHECK: seveq @ encoding: [0x04,0xf0,0x20,0x03]
+
+
+@------------------------------------------------------------------------------
+@ SHADD16/SHADD8
+@------------------------------------------------------------------------------
+ shadd16 r4, r8, r2
+ shadd16gt r4, r8, r2
+ shadd8 r4, r8, r2
+ shadd8gt r4, r8, r2
+
+@ CHECK: shadd16 r4, r8, r2 @ encoding: [0x12,0x4f,0x38,0xe6]
+@ CHECK: shadd16gt r4, r8, r2 @ encoding: [0x12,0x4f,0x38,0xc6]
+@ CHECK: shadd8 r4, r8, r2 @ encoding: [0x92,0x4f,0x38,0xe6]
+@ CHECK: shadd8gt r4, r8, r2 @ encoding: [0x92,0x4f,0x38,0xc6]
+
+
+@------------------------------------------------------------------------------
+@ SHASX
+@------------------------------------------------------------------------------
+ shasx r4, r8, r2
+ shasxgt r4, r8, r2
+
+@ CHECK: shasx r4, r8, r2 @ encoding: [0x32,0x4f,0x38,0xe6]
+@ CHECK: shasxgt r4, r8, r2 @ encoding: [0x32,0x4f,0x38,0xc6]
+
+
+@------------------------------------------------------------------------------
+@ SHSUB16/SHSUB8
+@------------------------------------------------------------------------------
+ shsub16 r4, r8, r2
+ shsub16gt r4, r8, r2
+ shsub8 r4, r8, r2
+ shsub8gt r4, r8, r2
+
+@ CHECK: shsub16 r4, r8, r2 @ encoding: [0x72,0x4f,0x38,0xe6]
+@ CHECK: shsub16gt r4, r8, r2 @ encoding: [0x72,0x4f,0x38,0xc6]
+@ CHECK: shsub8 r4, r8, r2 @ encoding: [0xf2,0x4f,0x38,0xe6]
+@ CHECK: shsub8gt r4, r8, r2 @ encoding: [0xf2,0x4f,0x38,0xc6]
+
+@------------------------------------------------------------------------------
+@ SMC
+@------------------------------------------------------------------------------
+ smc #0xf
+ smceq #0
+
+@ CHECK: smc #15 @ encoding: [0x7f,0x00,0x60,0xe1]
+@ CHECK: smceq #0 @ encoding: [0x70,0x00,0x60,0x01]
+
+@------------------------------------------------------------------------------
+@ SMLABB/SMLABT/SMLATB/SMLATT
+@------------------------------------------------------------------------------
+ smlabb r3, r1, r9, r0
+ smlabt r5, r6, r4, r1
+ smlatb r4, r2, r3, r2
+ smlatt r8, r3, r8, r4
+ smlabbge r3, r1, r9, r0
+ smlabtle r5, r6, r4, r1
+ smlatbne r4, r2, r3, r2
+ smlatteq r8, r3, r8, r4
+
+@ CHECK: smlabb r3, r1, r9, r0 @ encoding: [0x81,0x09,0x03,0xe1]
+@ CHECK: smlabt r5, r6, r4, r1 @ encoding: [0xc6,0x14,0x05,0xe1]
+@ CHECK: smlatb r4, r2, r3, r2 @ encoding: [0xa2,0x23,0x04,0xe1]
+@ CHECK: smlatt r8, r3, r8, r4 @ encoding: [0xe3,0x48,0x08,0xe1]
+@ CHECK: smlabbge r3, r1, r9, r0 @ encoding: [0x81,0x09,0x03,0xa1]
+@ CHECK: smlabtle r5, r6, r4, r1 @ encoding: [0xc6,0x14,0x05,0xd1]
+@ CHECK: smlatbne r4, r2, r3, r2 @ encoding: [0xa2,0x23,0x04,0x11]
+@ CHECK: smlatteq r8, r3, r8, r4 @ encoding: [0xe3,0x48,0x08,0x01]
+
+@------------------------------------------------------------------------------
+@ SMLAD/SMLADX
+@------------------------------------------------------------------------------
+ smlad r2, r3, r5, r8
+ smladx r2, r3, r5, r8
+ smladeq r2, r3, r5, r8
+ smladxhi r2, r3, r5, r8
+
+@ CHECK: smlad r2, r3, r5, r8 @ encoding: [0x13,0x85,0x02,0xe7]
+@ CHECK: smladx r2, r3, r5, r8 @ encoding: [0x33,0x85,0x02,0xe7]
+@ CHECK: smladeq r2, r3, r5, r8 @ encoding: [0x13,0x85,0x02,0x07]
+@ CHECK: smladxhi r2, r3, r5, r8 @ encoding: [0x33,0x85,0x02,0x87]
+
+
+@------------------------------------------------------------------------------
+@ SMLAL
+@------------------------------------------------------------------------------
+ smlal r2, r3, r5, r8
+ smlals r2, r3, r5, r8
+ smlaleq r2, r3, r5, r8
+ smlalshi r2, r3, r5, r8
+
+@ CHECK: smlal r2, r3, r5, r8 @ encoding: [0x95,0x28,0xe3,0xe0]
+@ CHECK: smlals r2, r3, r5, r8 @ encoding: [0x95,0x28,0xf3,0xe0]
+@ CHECK: smlaleq r2, r3, r5, r8 @ encoding: [0x95,0x28,0xe3,0x00]
+@ CHECK: smlalshi r2, r3, r5, r8 @ encoding: [0x95,0x28,0xf3,0x80]
+
+
+@------------------------------------------------------------------------------
+@ SMLALBB/SMLALBT/SMLALTB/SMLALTT
+@------------------------------------------------------------------------------
+ smlalbb r3, r1, r9, r0
+ smlalbt r5, r6, r4, r1
+ smlaltb r4, r2, r3, r2
+ smlaltt r8, r3, r8, r4
+ smlalbbge r3, r1, r9, r0
+ smlalbtle r5, r6, r4, r1
+ smlaltbne r4, r2, r3, r2
+ smlaltteq r8, r3, r8, r4
+
+@ CHECK: smlalbb r3, r1, r9, r0 @ encoding: [0x89,0x30,0x41,0xe1]
+@ CHECK: smlalbt r5, r6, r4, r1 @ encoding: [0xc4,0x51,0x46,0xe1]
+@ CHECK: smlaltb r4, r2, r3, r2 @ encoding: [0xa3,0x42,0x42,0xe1]
+@ CHECK: smlaltt r8, r3, r8, r4 @ encoding: [0xe8,0x84,0x43,0xe1]
+@ CHECK: smlalbbge r3, r1, r9, r0 @ encoding: [0x89,0x30,0x41,0xa1]
+@ CHECK: smlalbtle r5, r6, r4, r1 @ encoding: [0xc4,0x51,0x46,0xd1]
+@ CHECK: smlaltbne r4, r2, r3, r2 @ encoding: [0xa3,0x42,0x42,0x11]
+@ CHECK: smlaltteq r8, r3, r8, r4 @ encoding: [0xe8,0x84,0x43,0x01]
+
+
+@------------------------------------------------------------------------------
+@ SMLALD/SMLALDX
+@------------------------------------------------------------------------------
+ smlald r2, r3, r5, r8
+ smlaldx r2, r3, r5, r8
+ smlaldeq r2, r3, r5, r8
+ smlaldxhi r2, r3, r5, r8
+
+@ CHECK: smlald r2, r3, r5, r8 @ encoding: [0x15,0x28,0x43,0xe7]
+@ CHECK: smlaldx r2, r3, r5, r8 @ encoding: [0x35,0x28,0x43,0xe7]
+@ CHECK: smlaldeq r2, r3, r5, r8 @ encoding: [0x15,0x28,0x43,0x07]
+@ CHECK: smlaldxhi r2, r3, r5, r8 @ encoding: [0x35,0x28,0x43,0x87]
+
+
+@------------------------------------------------------------------------------
+@ SMLAWB/SMLAWT
+@------------------------------------------------------------------------------
+ smlawb r2, r3, r10, r8
+ smlawt r8, r3, r5, r9
+ smlawbeq r2, r7, r5, r8
+ smlawthi r1, r3, r0, r8
+
+@ CHECK: smlawb r2, r3, r10, r8 @ encoding: [0x83,0x8a,0x22,0xe1]
+@ CHECK: smlawt r8, r3, r5, r9 @ encoding: [0xc3,0x95,0x28,0xe1]
+@ CHECK: smlawbeq r2, r7, r5, r8 @ encoding: [0x87,0x85,0x22,0x01]
+@ CHECK: smlawthi r1, r3, r0, r8 @ encoding: [0xc3,0x80,0x21,0x81]
+
+
+@------------------------------------------------------------------------------
+@ SMLSD/SMLSDX
+@------------------------------------------------------------------------------
+ smlsd r2, r3, r5, r8
+ smlsdx r2, r3, r5, r8
+ smlsdeq r2, r3, r5, r8
+ smlsdxhi r2, r3, r5, r8
+
+@ CHECK: smlsd r2, r3, r5, r8 @ encoding: [0x53,0x85,0x02,0xe7]
+@ CHECK: smlsdx r2, r3, r5, r8 @ encoding: [0x73,0x85,0x02,0xe7]
+@ CHECK: smlsdeq r2, r3, r5, r8 @ encoding: [0x53,0x85,0x02,0x07]
+@ CHECK: smlsdxhi r2, r3, r5, r8 @ encoding: [0x73,0x85,0x02,0x87]
+
+
+@------------------------------------------------------------------------------
+@ SMLSLD/SMLSLDX
+@------------------------------------------------------------------------------
+ smlsld r2, r9, r5, r1
+ smlsldx r4, r11, r2, r8
+ smlsldeq r8, r2, r5, r6
+ smlsldxhi r1, r0, r3, r8
+
+@ CHECK: smlsld r2, r9, r5, r1 @ encoding: [0x55,0x21,0x49,0xe7]
+@ CHECK: smlsldx r4, r11, r2, r8 @ encoding: [0x72,0x48,0x4b,0xe7]
+@ CHECK: smlsldeq r8, r2, r5, r6 @ encoding: [0x55,0x86,0x42,0x07]
+@ CHECK: smlsldxhi r1, r0, r3, r8 @ encoding: [0x73,0x18,0x40,0x87]
+
+
+@------------------------------------------------------------------------------
+@ SMMLA/SMMLAR
+@------------------------------------------------------------------------------
+ smmla r1, r2, r3, r4
+ smmlar r4, r3, r2, r1
+ smmlalo r1, r2, r3, r4
+ smmlarcs r4, r3, r2, r1
+
+@ CHECK: smmla r1, r2, r3, r4 @ encoding: [0x12,0x43,0x51,0xe7]
+@ CHECK: smmlar r4, r3, r2, r1 @ encoding: [0x33,0x12,0x54,0xe7]
+@ CHECK: smmlalo r1, r2, r3, r4 @ encoding: [0x12,0x43,0x51,0x37]
+@ CHECK: smmlarhs r4, r3, r2, r1 @ encoding: [0x33,0x12,0x54,0x27]
+
+
+@------------------------------------------------------------------------------
+@ SMMLS/SMMLSR
+@------------------------------------------------------------------------------
+ smmls r1, r2, r3, r4
+ smmlsr r4, r3, r2, r1
+ smmlslo r1, r2, r3, r4
+ smmlsrcs r4, r3, r2, r1
+
+@ CHECK: smmls r1, r2, r3, r4 @ encoding: [0xd2,0x43,0x51,0xe7]
+@ CHECK: smmlsr r4, r3, r2, r1 @ encoding: [0xf3,0x12,0x54,0xe7]
+@ CHECK: smmlslo r1, r2, r3, r4 @ encoding: [0xd2,0x43,0x51,0x37]
+@ CHECK: smmlsrhs r4, r3, r2, r1 @ encoding: [0xf3,0x12,0x54,0x27]
+
+
+@------------------------------------------------------------------------------
+@ SMMUL/SMMULR
+@------------------------------------------------------------------------------
+ smmul r2, r3, r4
+ smmulr r3, r2, r1
+ smmulcc r2, r3, r4
+ smmulrhs r3, r2, r1
+
+@ CHECK: smmul r2, r3, r4 @ encoding: [0x13,0xf4,0x52,0xe7]
+@ CHECK: smmulr r3, r2, r1 @ encoding: [0x32,0xf1,0x53,0xe7]
+@ CHECK: smmullo r2, r3, r4 @ encoding: [0x13,0xf4,0x52,0x37]
+@ CHECK: smmulrhs r3, r2, r1 @ encoding: [0x32,0xf1,0x53,0x27]
+
+
+@------------------------------------------------------------------------------
+@ SMUAD/SMUADX
+@------------------------------------------------------------------------------
+ smuad r2, r3, r4
+ smuadx r3, r2, r1
+ smuadlt r2, r3, r4
+ smuadxge r3, r2, r1
+
+@ CHECK: smuad r2, r3, r4 @ encoding: [0x13,0xf4,0x02,0xe7]
+@ CHECK: smuadx r3, r2, r1 @ encoding: [0x32,0xf1,0x03,0xe7]
+@ CHECK: smuadlt r2, r3, r4 @ encoding: [0x13,0xf4,0x02,0xb7]
+@ CHECK: smuadxge r3, r2, r1 @ encoding: [0x32,0xf1,0x03,0xa7]
+
+
+@------------------------------------------------------------------------------
+@ SMULBB/SMULBT/SMULTB/SMULTT
+@------------------------------------------------------------------------------
+ smulbb r3, r9, r0
+ smulbt r5, r4, r1
+ smultb r4, r2, r2
+ smultt r8, r3, r4
+ smulbbge r1, r9, r0
+ smulbtle r5, r6, r4
+ smultbne r2, r3, r2
+ smultteq r8, r3, r4
+
+@ CHECK: smulbb r3, r9, r0 @ encoding: [0x89,0x00,0x63,0xe1]
+@ CHECK: smulbt r5, r4, r1 @ encoding: [0xc4,0x01,0x65,0xe1]
+@ CHECK: smultb r4, r2, r2 @ encoding: [0xa2,0x02,0x64,0xe1]
+@ CHECK: smultt r8, r3, r4 @ encoding: [0xe3,0x04,0x68,0xe1]
+@ CHECK: smulbbge r1, r9, r0 @ encoding: [0x89,0x00,0x61,0xa1]
+@ CHECK: smulbtle r5, r6, r4 @ encoding: [0xc6,0x04,0x65,0xd1]
+@ CHECK: smultbne r2, r3, r2 @ encoding: [0xa3,0x02,0x62,0x11]
+@ CHECK: smultteq r8, r3, r4 @ encoding: [0xe3,0x04,0x68,0x01]
+
+
+@------------------------------------------------------------------------------
+@ SMULL
+@------------------------------------------------------------------------------
+ smull r3, r9, r0, r1
+ smulls r3, r9, r0, r2
+ smulleq r8, r3, r4, r5
+ smullseq r8, r3, r4, r3
+
+@ CHECK: smull r3, r9, r0, r1 @ encoding: [0x90,0x31,0xc9,0xe0]
+@ CHECK: smulls r3, r9, r0, r2 @ encoding: [0x90,0x32,0xd9,0xe0]
+@ CHECK: smulleq r8, r3, r4, r5 @ encoding: [0x94,0x85,0xc3,0x00]
+@ CHECK: smullseq r8, r3, r4, r3 @ encoding: [0x94,0x83,0xd3,0x00]
+
+
+@------------------------------------------------------------------------------
+@ SMULWB/SMULWT
+@------------------------------------------------------------------------------
+ smulwb r3, r9, r0
+ smulwt r3, r9, r2
+
+@ CHECK: smulwb r3, r9, r0 @ encoding: [0xa9,0x00,0x23,0xe1]
+@ CHECK: smulwt r3, r9, r2 @ encoding: [0xe9,0x02,0x23,0xe1]
+
+
+@------------------------------------------------------------------------------
+@ SMUSD/SMUSDX
+@------------------------------------------------------------------------------
+ smusd r3, r0, r1
+ smusdx r3, r9, r2
+ smusdeq r8, r3, r2
+ smusdxne r7, r4, r3
+
+@ CHECK: smusd r3, r0, r1 @ encoding: [0x50,0xf1,0x03,0xe7]
+@ CHECK: smusdx r3, r9, r2 @ encoding: [0x79,0xf2,0x03,0xe7]
+@ CHECK: smusdeq r8, r3, r2 @ encoding: [0x53,0xf2,0x08,0x07]
+@ CHECK: smusdxne r7, r4, r3 @ encoding: [0x74,0xf3,0x07,0x17]
+
+
+@------------------------------------------------------------------------------
+@ SRS
+@------------------------------------------------------------------------------
+ srsda sp, #5
+ srsdb sp, #1
+ srsia sp, #0
+ srsib sp, #15
+
+ srsda sp!, #31
+ srsdb sp!, #19
+ srsia sp!, #2
+ srsib sp!, #14
+
+ srsfa sp, #11
+ srsea sp, #10
+ srsfd sp, #9
+ srsed sp, #5
+
+ srsfa sp!, #5
+ srsea sp!, #5
+ srsfd sp!, #5
+ srsed sp!, #5
+
+ srs sp, #5
+ srs sp!, #5
+
+@ CHECK: srsda sp, #5 @ encoding: [0x05,0x05,0x4d,0xf8]
+@ CHECK: srsdb sp, #1 @ encoding: [0x01,0x05,0x4d,0xf9]
+@ CHECK: srsia sp, #0 @ encoding: [0x00,0x05,0xcd,0xf8]
+@ CHECK: srsib sp, #15 @ encoding: [0x0f,0x05,0xcd,0xf9]
+
+@ CHECK: srsda sp!, #31 @ encoding: [0x1f,0x05,0x6d,0xf8]
+@ CHECK: srsdb sp!, #19 @ encoding: [0x13,0x05,0x6d,0xf9]
+@ CHECK: srsia sp!, #2 @ encoding: [0x02,0x05,0xed,0xf8]
+@ CHECK: srsib sp!, #14 @ encoding: [0x0e,0x05,0xed,0xf9]
+
+@ CHECK: srsda sp, #11 @ encoding: [0x0b,0x05,0x4d,0xf8]
+@ CHECK: srsdb sp, #10 @ encoding: [0x0a,0x05,0x4d,0xf9]
+@ CHECK: srsia sp, #9 @ encoding: [0x09,0x05,0xcd,0xf8]
+@ CHECK: srsib sp, #5 @ encoding: [0x05,0x05,0xcd,0xf9]
+
+@ CHECK: srsda sp!, #5 @ encoding: [0x05,0x05,0x6d,0xf8]
+@ CHECK: srsdb sp!, #5 @ encoding: [0x05,0x05,0x6d,0xf9]
+@ CHECK: srsia sp!, #5 @ encoding: [0x05,0x05,0xed,0xf8]
+@ CHECK: srsib sp!, #5 @ encoding: [0x05,0x05,0xed,0xf9]
+
+@ CHECK: srsia sp, #5 @ encoding: [0x05,0x05,0xcd,0xf8]
+@ CHECK: srsia sp!, #5 @ encoding: [0x05,0x05,0xed,0xf8]
+
+
+@------------------------------------------------------------------------------
+@ SSAT
+@------------------------------------------------------------------------------
+ ssat r8, #1, r10
+ ssat r8, #1, r10, lsl #0
+ ssat r8, #1, r10, lsl #31
+ ssat r8, #1, r10, asr #32
+ ssat r8, #1, r10, asr #1
+
+@ CHECK: ssat r8, #1, r10 @ encoding: [0x1a,0x80,0xa0,0xe6]
+@ CHECK: ssat r8, #1, r10 @ encoding: [0x1a,0x80,0xa0,0xe6]
+@ CHECK: ssat r8, #1, r10, lsl #31 @ encoding: [0x9a,0x8f,0xa0,0xe6]
+@ CHECK: ssat r8, #1, r10, asr #32 @ encoding: [0x5a,0x80,0xa0,0xe6]
+@ CHECK: ssat r8, #1, r10, asr #1 @ encoding: [0xda,0x80,0xa0,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ SSAT16
+@------------------------------------------------------------------------------
+ ssat16 r2, #1, r7
+ ssat16 r3, #16, r5
+
+@ CHECK: ssat16 r2, #1, r7 @ encoding: [0x37,0x2f,0xa0,0xe6]
+@ CHECK: ssat16 r3, #16, r5 @ encoding: [0x35,0x3f,0xaf,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ SSAX
+@------------------------------------------------------------------------------
+ ssax r2, r3, r4
+ ssaxlt r2, r3, r4
+
+@ CHECK: ssax r2, r3, r4 @ encoding: [0x54,0x2f,0x13,0xe6]
+@ CHECK: ssaxlt r2, r3, r4 @ encoding: [0x54,0x2f,0x13,0xb6]
+
+@------------------------------------------------------------------------------
+@ SSUB16/SSUB8
+@------------------------------------------------------------------------------
+ ssub16 r1, r0, r6
+ ssub16ne r5, r3, r2
+ ssub8 r9, r2, r4
+ ssub8eq r5, r1, r2
+
+@ CHECK: ssub16 r1, r0, r6 @ encoding: [0x76,0x1f,0x10,0xe6]
+@ CHECK: ssub16ne r5, r3, r2 @ encoding: [0x72,0x5f,0x13,0x16]
+@ CHECK: ssub8 r9, r2, r4 @ encoding: [0xf4,0x9f,0x12,0xe6]
+@ CHECK: ssub8eq r5, r1, r2 @ encoding: [0xf2,0x5f,0x11,0x06]
+
+@------------------------------------------------------------------------------
+@ STC{L}/STC2{L}
+@------------------------------------------------------------------------------
+ stc2 p0, c8, [r1, #4]
+ stc2 p1, c7, [r2]
+ stc2 p2, c6, [r3, #-224]
+ stc2 p3, c5, [r4, #-120]!
+ stc2 p4, c4, [r5], #16
+ stc2 p5, c3, [r6], #-72
+ stc2l p6, c2, [r7, #4]
+ stc2l p7, c1, [r8]
+ stc2l p8, c0, [r9, #-224]
+ stc2l p9, c1, [r10, #-120]!
+ stc2l p10, c2, [r11], #16
+ stc2l p11, c3, [r12], #-72
+
+ stc p12, c4, [r0, #4]
+ stc p13, c5, [r1]
+ stc p14, c6, [r2, #-224]
+ stc p15, c7, [r3, #-120]!
+ stc p5, c8, [r4], #16
+ stc p4, c9, [r5], #-72
+ stcl p3, c10, [r6, #4]
+ stcl p2, c11, [r7]
+ stcl p1, c12, [r8, #-224]
+ stcl p0, c13, [r9, #-120]!
+ stcl p6, c14, [r10], #16
+ stcl p7, c15, [r11], #-72
+
+ stclo p12, c4, [r0, #4]
+ stchi p13, c5, [r1]
+ stccs p14, c6, [r2, #-224]
+ stccc p15, c7, [r3, #-120]!
+ stceq p5, c8, [r4], #16
+ stcgt p4, c9, [r5], #-72
+ stcllt p3, c10, [r6, #4]
+ stclge p2, c11, [r7]
+ stclle p1, c12, [r8, #-224]
+ stclne p0, c13, [r9, #-120]!
+ stcleq p6, c14, [r10], #16
+ stclhi p7, c15, [r11], #-72
+
+ stc2 p2, c8, [r1], { 25 }
+
+@ CHECK: stc2 p0, c8, [r1, #4] @ encoding: [0x01,0x80,0x81,0xfd]
+@ CHECK: stc2 p1, c7, [r2] @ encoding: [0x00,0x71,0x82,0xfd]
+@ CHECK: stc2 p2, c6, [r3, #-224] @ encoding: [0x38,0x62,0x03,0xfd]
+@ CHECK: stc2 p3, c5, [r4, #-120]! @ encoding: [0x1e,0x53,0x24,0xfd]
+@ CHECK: stc2 p4, c4, [r5], #16 @ encoding: [0x04,0x44,0xa5,0xfc]
+@ CHECK: stc2 p5, c3, [r6], #-72 @ encoding: [0x12,0x35,0x26,0xfc]
+@ CHECK: stc2l p6, c2, [r7, #4] @ encoding: [0x01,0x26,0xc7,0xfd]
+@ CHECK: stc2l p7, c1, [r8] @ encoding: [0x00,0x17,0xc8,0xfd]
+@ CHECK: stc2l p8, c0, [r9, #-224] @ encoding: [0x38,0x08,0x49,0xfd]
+@ CHECK: stc2l p9, c1, [r10, #-120]! @ encoding: [0x1e,0x19,0x6a,0xfd]
+@ CHECK: stc2l p10, c2, [r11], #16 @ encoding: [0x04,0x2a,0xeb,0xfc]
+@ CHECK: stc2l p11, c3, [r12], #-72 @ encoding: [0x12,0x3b,0x6c,0xfc]
+
+@ CHECK: stc p12, c4, [r0, #4] @ encoding: [0x01,0x4c,0x80,0xed]
+@ CHECK: stc p13, c5, [r1] @ encoding: [0x00,0x5d,0x81,0xed]
+@ CHECK: stc p14, c6, [r2, #-224] @ encoding: [0x38,0x6e,0x02,0xed]
+@ CHECK: stc p15, c7, [r3, #-120]! @ encoding: [0x1e,0x7f,0x23,0xed]
+@ CHECK: stc p5, c8, [r4], #16 @ encoding: [0x04,0x85,0xa4,0xec]
+@ CHECK: stc p4, c9, [r5], #-72 @ encoding: [0x12,0x94,0x25,0xec]
+@ CHECK: stcl p3, c10, [r6, #4] @ encoding: [0x01,0xa3,0xc6,0xed]
+@ CHECK: stcl p2, c11, [r7] @ encoding: [0x00,0xb2,0xc7,0xed]
+@ CHECK: stcl p1, c12, [r8, #-224] @ encoding: [0x38,0xc1,0x48,0xed]
+@ CHECK: stcl p0, c13, [r9, #-120]! @ encoding: [0x1e,0xd0,0x69,0xed]
+@ CHECK: stcl p6, c14, [r10], #16 @ encoding: [0x04,0xe6,0xea,0xec]
+@ CHECK: stcl p7, c15, [r11], #-72 @ encoding: [0x12,0xf7,0x6b,0xec]
+
+@ CHECK: stclo p12, c4, [r0, #4] @ encoding: [0x01,0x4c,0x80,0x3d]
+@ CHECK: stchi p13, c5, [r1] @ encoding: [0x00,0x5d,0x81,0x8d]
+@ CHECK: stchs p14, c6, [r2, #-224] @ encoding: [0x38,0x6e,0x02,0x2d]
+@ CHECK: stclo p15, c7, [r3, #-120]! @ encoding: [0x1e,0x7f,0x23,0x3d]
+@ CHECK: stceq p5, c8, [r4], #16 @ encoding: [0x04,0x85,0xa4,0x0c]
+@ CHECK: stcgt p4, c9, [r5], #-72 @ encoding: [0x12,0x94,0x25,0xcc]
+@ CHECK: stcllt p3, c10, [r6, #4] @ encoding: [0x01,0xa3,0xc6,0xbd]
+@ CHECK: stclge p2, c11, [r7] @ encoding: [0x00,0xb2,0xc7,0xad]
+@ CHECK: stclle p1, c12, [r8, #-224] @ encoding: [0x38,0xc1,0x48,0xdd]
+@ CHECK: stclne p0, c13, [r9, #-120]! @ encoding: [0x1e,0xd0,0x69,0x1d]
+@ CHECK: stcleq p6, c14, [r10], #16 @ encoding: [0x04,0xe6,0xea,0x0c]
+@ CHECK: stclhi p7, c15, [r11], #-72 @ encoding: [0x12,0xf7,0x6b,0x8c]
+
+@ CHECK: stc2 p2, c8, [r1], {25} @ encoding: [0x19,0x82,0x81,0xfc]
+
+
+@------------------------------------------------------------------------------
@ STM*
@------------------------------------------------------------------------------
stm r2, {r1,r3-r6,sp}
- stmia r2, {r1,r3-r6,sp}
- stmib r2, {r1,r3-r6,sp}
- stmda r2, {r1,r3-r6,sp}
- stmdb r2, {r1,r3-r6,sp}
- stmfd r2, {r1,r3-r6,sp}
+ stmia r3, {r1,r3-r6,lr}
+ stmib r4, {r1,r3-r6,sp}
+ stmda r5, {r1,r3-r6,sp}
+ stmdb r6, {r1,r3-r6,r8}
+ stmfd sp, {r1,r3-r6,sp}
@ with update
- stmia r2!, {r1,r3-r6,sp}
- stmib r2!, {r1,r3-r6,sp}
- stmda r2!, {r1,r3-r6,sp}
- stmdb r2!, {r1,r3-r6,sp}
-@ CHECK: stm r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x82,0xe8]
-@ CHECK: stm r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x82,0xe8]
-@ CHECK: stmib r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x82,0xe9]
-@ CHECK: stmda r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x02,0xe8]
-@ CHECK: stmdb r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x02,0xe9]
-@ CHECK: stmdb r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x02,0xe9]
-
-@ CHECK: stm r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xa2,0xe8]
-@ CHECK: stmib r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xa2,0xe9]
-@ CHECK: stmda r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x22,0xe8]
-@ CHECK: stmdb r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x22,0xe9]
+ stm r8!, {r1,r3-r6,sp}
+ stmib r9!, {r1,r3-r6,sp}
+ stmda sp!, {r1,r3-r6}
+ stmdb r0!, {r1,r5,r7,sp}
+
+@ CHECK: stm r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x82,0xe8]
+@ CHECK: stm r3, {lr, r1, r3, r4, r5, r6} @ encoding: [0x7a,0x40,0x83,0xe8]
+@ CHECK: stmib r4, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x84,0xe9]
+@ CHECK: stmda r5, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x05,0xe8]
+@ CHECK: stmdb r6, {r1, r3, r4, r5, r6, r8} @ encoding: [0x7a,0x01,0x06,0xe9]
+@ CHECK: stmdb sp, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x0d,0xe9]
+
+@ CHECK: stm r8!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xa8,0xe8]
+@ CHECK: stmib r9!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xa9,0xe9]
+@ CHECK: stmda sp!, {r1, r3, r4, r5, r6} @ encoding: [0x7a,0x00,0x2d,0xe8]
+@ CHECK: stmdb r0!, {r1, r5, r7, sp} @ encoding: [0xa2,0x20,0x20,0xe9]
+
+
+@------------------------------------------------------------------------------
+@ STREX/STREXB/STREXH/STREXD
+@------------------------------------------------------------------------------
+ strexb r1, r3, [r4]
+ strexh r4, r2, [r5]
+ strex r2, r1, [r7]
+ strexd r6, r2, r3, [r8]
+
+@ CHECK: strexb r1, r3, [r4] @ encoding: [0x93,0x1f,0xc4,0xe1]
+@ CHECK: strexh r4, r2, [r5] @ encoding: [0x92,0x4f,0xe5,0xe1]
+@ CHECK: strex r2, r1, [r7] @ encoding: [0x91,0x2f,0x87,0xe1]
+@ CHECK: strexd r6, r2, r3, [r8] @ encoding: [0x92,0x6f,0xa8,0xe1]
+
+@------------------------------------------------------------------------------
+@ STR
+@------------------------------------------------------------------------------
+ strpl r3, [r10, #-0]!
+ strpl r3, [r10, #0]!
+
+@ CHECK: strpl r3, [r10, #-0]! @ encoding: [0x00,0x30,0x2a,0x55]
+@ CHECK: strpl r3, [r10]! @ encoding: [0x00,0x30,0xaa,0x55]
+
+@------------------------------------------------------------------------------
+@ SUB
+@------------------------------------------------------------------------------
+ sub r4, r5, #0xf000
+ sub r4, r5, r6
+ sub r4, r5, r6, lsl #5
+ sub r4, r5, r6, lsr #5
+ sub r4, r5, r6, lsr #5
+ sub r4, r5, r6, asr #5
+ sub r4, r5, r6, ror #5
+ sub r6, r7, r8, lsl r9
+ sub r6, r7, r8, lsr r9
+ sub r6, r7, r8, asr r9
+ sub r6, r7, r8, ror r9
+
+ @ destination register is optional
+ sub r5, #0xf000
+ sub r4, r5
+ sub r4, r5, lsl #5
+ sub r4, r5, lsr #5
+ sub r4, r5, lsr #5
+ sub r4, r5, asr #5
+ sub r4, r5, ror #5
+ sub r6, r7, lsl r9
+ sub r6, r7, lsr r9
+ sub r6, r7, asr r9
+ sub r6, r7, ror r9
+
+@ CHECK: sub r4, r5, #61440 @ encoding: [0x0f,0x4a,0x45,0xe2]
+@ CHECK: sub r4, r5, r6 @ encoding: [0x06,0x40,0x45,0xe0]
+@ CHECK: sub r4, r5, r6, lsl #5 @ encoding: [0x86,0x42,0x45,0xe0]
+@ CHECK: sub r4, r5, r6, lsr #5 @ encoding: [0xa6,0x42,0x45,0xe0]
+@ CHECK: sub r4, r5, r6, lsr #5 @ encoding: [0xa6,0x42,0x45,0xe0]
+@ CHECK: sub r4, r5, r6, asr #5 @ encoding: [0xc6,0x42,0x45,0xe0]
+@ CHECK: sub r4, r5, r6, ror #5 @ encoding: [0xe6,0x42,0x45,0xe0]
+@ CHECK: sub r6, r7, r8, lsl r9 @ encoding: [0x18,0x69,0x47,0xe0]
+@ CHECK: sub r6, r7, r8, lsr r9 @ encoding: [0x38,0x69,0x47,0xe0]
+@ CHECK: sub r6, r7, r8, asr r9 @ encoding: [0x58,0x69,0x47,0xe0]
+@ CHECK: sub r6, r7, r8, ror r9 @ encoding: [0x78,0x69,0x47,0xe0]
+
+
+@ CHECK: sub r5, r5, #61440 @ encoding: [0x0f,0x5a,0x45,0xe2]
+@ CHECK: sub r4, r4, r5 @ encoding: [0x05,0x40,0x44,0xe0]
+@ CHECK: sub r4, r4, r5, lsl #5 @ encoding: [0x85,0x42,0x44,0xe0]
+@ CHECK: sub r4, r4, r5, lsr #5 @ encoding: [0xa5,0x42,0x44,0xe0]
+@ CHECK: sub r4, r4, r5, lsr #5 @ encoding: [0xa5,0x42,0x44,0xe0]
+@ CHECK: sub r4, r4, r5, asr #5 @ encoding: [0xc5,0x42,0x44,0xe0]
+@ CHECK: sub r4, r4, r5, ror #5 @ encoding: [0xe5,0x42,0x44,0xe0]
+@ CHECK: sub r6, r6, r7, lsl r9 @ encoding: [0x17,0x69,0x46,0xe0]
+@ CHECK: sub r6, r6, r7, lsr r9 @ encoding: [0x37,0x69,0x46,0xe0]
+@ CHECK: sub r6, r6, r7, asr r9 @ encoding: [0x57,0x69,0x46,0xe0]
+@ CHECK: sub r6, r6, r7, ror r9 @ encoding: [0x77,0x69,0x46,0xe0]
+
+
+@------------------------------------------------------------------------------
+@ SVC
+@------------------------------------------------------------------------------
+ svc #16
+ svc #0
+ svc #0xffffff
+
+@ CHECK: svc #16 @ encoding: [0x10,0x00,0x00,0xef]
+@ CHECK: svc #0 @ encoding: [0x00,0x00,0x00,0xef]
+@ CHECK: svc #16777215 @ encoding: [0xff,0xff,0xff,0xef]
+
+
+@------------------------------------------------------------------------------
+@ SWP/SWPB
+@------------------------------------------------------------------------------
+ swp r1, r2, [r3]
+ swp r4, r4, [r6]
+ swpb r5, r1, [r9]
+
+@ CHECK: swp r1, r2, [r3] @ encoding: [0x92,0x10,0x03,0xe1]
+@ CHECK: swp r4, r4, [r6] @ encoding: [0x94,0x40,0x06,0xe1]
+@ CHECK: swpb r5, r1, [r9] @ encoding: [0x91,0x50,0x49,0xe1]
+
+
+@------------------------------------------------------------------------------
+@ SXTAB
+@------------------------------------------------------------------------------
+ sxtab r2, r3, r4
+ sxtab r4, r5, r6, ror #0
+ sxtablt r6, r2, r9, ror #8
+ sxtab r5, r1, r4, ror #16
+ sxtab r7, r8, r3, ror #24
+
+@ CHECK: sxtab r2, r3, r4 @ encoding: [0x74,0x20,0xa3,0xe6]
+@ CHECK: sxtab r4, r5, r6 @ encoding: [0x76,0x40,0xa5,0xe6]
+@ CHECK: sxtablt r6, r2, r9, ror #8 @ encoding: [0x79,0x64,0xa2,0xb6]
+@ CHECK: sxtab r5, r1, r4, ror #16 @ encoding: [0x74,0x58,0xa1,0xe6]
+@ CHECK: sxtab r7, r8, r3, ror #24 @ encoding: [0x73,0x7c,0xa8,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ SXTAB16
+@------------------------------------------------------------------------------
+ sxtab16ge r0, r1, r4
+ sxtab16 r6, r2, r7, ror #0
+ sxtab16 r3, r5, r8, ror #8
+ sxtab16 r3, r2, r1, ror #16
+ sxtab16eq r1, r2, r3, ror #24
+
+@ CHECK: sxtab16ge r0, r1, r4 @ encoding: [0x74,0x00,0x81,0xa6]
+@ CHECK: sxtab16 r6, r2, r7 @ encoding: [0x77,0x60,0x82,0xe6]
+@ CHECK: sxtab16 r3, r5, r8, ror #8 @ encoding: [0x78,0x34,0x85,0xe6]
+@ CHECK: sxtab16 r3, r2, r1, ror #16 @ encoding: [0x71,0x38,0x82,0xe6]
+@ CHECK: sxtab16eq r1, r2, r3, ror #24 @ encoding: [0x73,0x1c,0x82,0x06]
+
+@------------------------------------------------------------------------------
+@ SXTAH
+@------------------------------------------------------------------------------
+ sxtah r1, r3, r9
+ sxtahhi r6, r1, r6, ror #0
+ sxtah r3, r8, r3, ror #8
+ sxtahlo r2, r2, r4, ror #16
+ sxtah r9, r3, r3, ror #24
+
+@ CHECK: sxtah r1, r3, r9 @ encoding: [0x79,0x10,0xb3,0xe6]
+@ CHECK: sxtahhi r6, r1, r6 @ encoding: [0x76,0x60,0xb1,0x86]
+@ CHECK: sxtah r3, r8, r3, ror #8 @ encoding: [0x73,0x34,0xb8,0xe6]
+@ CHECK: sxtahlo r2, r2, r4, ror #16 @ encoding: [0x74,0x28,0xb2,0x36]
+@ CHECK: sxtah r9, r3, r3, ror #24 @ encoding: [0x73,0x9c,0xb3,0xe6]
+
+@------------------------------------------------------------------------------
+@ SXTB
+@------------------------------------------------------------------------------
+ sxtbge r2, r4
+ sxtb r5, r6, ror #0
+ sxtb r6, r9, ror #8
+ sxtbcc r5, r1, ror #16
+ sxtb r8, r3, ror #24
+
+@ CHECK: sxtbge r2, r4 @ encoding: [0x74,0x20,0xaf,0xa6]
+@ CHECK: sxtb r5, r6 @ encoding: [0x76,0x50,0xaf,0xe6]
+@ CHECK: sxtb r6, r9, ror #8 @ encoding: [0x79,0x64,0xaf,0xe6]
+@ CHECK: sxtblo r5, r1, ror #16 @ encoding: [0x71,0x58,0xaf,0x36]
+@ CHECK: sxtb r8, r3, ror #24 @ encoding: [0x73,0x8c,0xaf,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ SXTB16
+@------------------------------------------------------------------------------
+ sxtb16 r1, r4
+ sxtb16 r6, r7, ror #0
+ sxtb16cs r3, r5, ror #8
+ sxtb16 r3, r1, ror #16
+ sxtb16ge r2, r3, ror #24
+
+@ CHECK: sxtb16 r1, r4 @ encoding: [0x74,0x10,0x8f,0xe6]
+@ CHECK: sxtb16 r6, r7 @ encoding: [0x77,0x60,0x8f,0xe6]
+@ CHECK: sxtb16hs r3, r5, ror #8 @ encoding: [0x75,0x34,0x8f,0x26]
+@ CHECK: sxtb16 r3, r1, ror #16 @ encoding: [0x71,0x38,0x8f,0xe6]
+@ CHECK: sxtb16ge r2, r3, ror #24 @ encoding: [0x73,0x2c,0x8f,0xa6]
+
+
+@------------------------------------------------------------------------------
+@ SXTH
+@------------------------------------------------------------------------------
+ sxthne r3, r9
+ sxth r1, r6, ror #0
+ sxth r3, r8, ror #8
+ sxthle r2, r2, ror #16
+ sxth r9, r3, ror #24
+
+@ CHECK: sxthne r3, r9 @ encoding: [0x79,0x30,0xbf,0x16]
+@ CHECK: sxth r1, r6 @ encoding: [0x76,0x10,0xbf,0xe6]
+@ CHECK: sxth r3, r8, ror #8 @ encoding: [0x78,0x34,0xbf,0xe6]
+@ CHECK: sxthle r2, r2, ror #16 @ encoding: [0x72,0x28,0xbf,0xd6]
+@ CHECK: sxth r9, r3, ror #24 @ encoding: [0x73,0x9c,0xbf,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ TEQ
+@------------------------------------------------------------------------------
+ teq r5, #0xf000
+ teq r4, r5
+ teq r4, r5, lsl #5
+ teq r4, r5, lsr #5
+ teq r4, r5, lsr #5
+ teq r4, r5, asr #5
+ teq r4, r5, ror #5
+ teq r6, r7, lsl r9
+ teq r6, r7, lsr r9
+ teq r6, r7, asr r9
+ teq r6, r7, ror r9
+
+@ CHECK: teq r5, #61440 @ encoding: [0x0f,0x0a,0x35,0xe3]
+@ CHECK: teq r4, r5 @ encoding: [0x05,0x00,0x34,0xe1]
+@ CHECK: teq r4, r5, lsl #5 @ encoding: [0x85,0x02,0x34,0xe1]
+@ CHECK: teq r4, r5, lsr #5 @ encoding: [0xa5,0x02,0x34,0xe1]
+@ CHECK: teq r4, r5, lsr #5 @ encoding: [0xa5,0x02,0x34,0xe1]
+@ CHECK: teq r4, r5, asr #5 @ encoding: [0xc5,0x02,0x34,0xe1]
+@ CHECK: teq r4, r5, ror #5 @ encoding: [0xe5,0x02,0x34,0xe1]
+@ CHECK: teq r6, r7, lsl r9 @ encoding: [0x17,0x09,0x36,0xe1]
+@ CHECK: teq r6, r7, lsr r9 @ encoding: [0x37,0x09,0x36,0xe1]
+@ CHECK: teq r6, r7, asr r9 @ encoding: [0x57,0x09,0x36,0xe1]
+@ CHECK: teq r6, r7, ror r9 @ encoding: [0x77,0x09,0x36,0xe1]
+
+
+@------------------------------------------------------------------------------
+@ TST
+@------------------------------------------------------------------------------
+ tst r5, #0xf000
+ tst r4, r5
+ tst r4, r5, lsl #5
+ tst r4, r5, lsr #5
+ tst r4, r5, lsr #5
+ tst r4, r5, asr #5
+ tst r4, r5, ror #5
+ tst r6, r7, lsl r9
+ tst r6, r7, lsr r9
+ tst r6, r7, asr r9
+ tst r6, r7, ror r9
+
+@ CHECK: tst r5, #61440 @ encoding: [0x0f,0x0a,0x15,0xe3]
+@ CHECK: tst r4, r5 @ encoding: [0x05,0x00,0x14,0xe1]
+@ CHECK: tst r4, r5, lsl #5 @ encoding: [0x85,0x02,0x14,0xe1]
+@ CHECK: tst r4, r5, lsr #5 @ encoding: [0xa5,0x02,0x14,0xe1]
+@ CHECK: tst r4, r5, lsr #5 @ encoding: [0xa5,0x02,0x14,0xe1]
+@ CHECK: tst r4, r5, asr #5 @ encoding: [0xc5,0x02,0x14,0xe1]
+@ CHECK: tst r4, r5, ror #5 @ encoding: [0xe5,0x02,0x14,0xe1]
+@ CHECK: tst r6, r7, lsl r9 @ encoding: [0x17,0x09,0x16,0xe1]
+@ CHECK: tst r6, r7, lsr r9 @ encoding: [0x37,0x09,0x16,0xe1]
+@ CHECK: tst r6, r7, asr r9 @ encoding: [0x57,0x09,0x16,0xe1]
+@ CHECK: tst r6, r7, ror r9 @ encoding: [0x77,0x09,0x16,0xe1]
+
+
+@------------------------------------------------------------------------------
+@ UADD16/UADD8
+@------------------------------------------------------------------------------
+ uadd16 r1, r2, r3
+ uadd16gt r1, r2, r3
+ uadd8 r1, r2, r3
+ uadd8le r1, r2, r3
+
+@ CHECK: uadd16 r1, r2, r3 @ encoding: [0x13,0x1f,0x52,0xe6]
+@ CHECK: uadd16gt r1, r2, r3 @ encoding: [0x13,0x1f,0x52,0xc6]
+@ CHECK: uadd8 r1, r2, r3 @ encoding: [0x93,0x1f,0x52,0xe6]
+@ CHECK: uadd8le r1, r2, r3 @ encoding: [0x93,0x1f,0x52,0xd6]
+
+
+@------------------------------------------------------------------------------
+@ UASX
+@------------------------------------------------------------------------------
+ uasx r9, r12, r0
+ uasxeq r9, r12, r0
+
+@ CHECK: uasx r9, r12, r0 @ encoding: [0x30,0x9f,0x5c,0xe6]
+@ CHECK: uasxeq r9, r12, r0 @ encoding: [0x30,0x9f,0x5c,0x06]
+
+
+@------------------------------------------------------------------------------
+@ UBFX
+@------------------------------------------------------------------------------
+ ubfx r4, r5, #16, #1
+ ubfxgt r4, r5, #16, #16
+
+@ CHECK: ubfx r4, r5, #16, #1 @ encoding: [0x55,0x48,0xe0,0xe7]
+@ CHECK: ubfxgt r4, r5, #16, #16 @ encoding: [0x55,0x48,0xef,0xc7]
+
+
+@------------------------------------------------------------------------------
+@ UHADD16/UHADD8
+@------------------------------------------------------------------------------
+ uhadd16 r4, r8, r2
+ uhadd16gt r4, r8, r2
+ uhadd8 r4, r8, r2
+ uhadd8gt r4, r8, r2
+
+@ CHECK: uhadd16 r4, r8, r2 @ encoding: [0x12,0x4f,0x78,0xe6]
+@ CHECK: uhadd16gt r4, r8, r2 @ encoding: [0x12,0x4f,0x78,0xc6]
+@ CHECK: uhadd8 r4, r8, r2 @ encoding: [0x92,0x4f,0x78,0xe6]
+@ CHECK: uhadd8gt r4, r8, r2 @ encoding: [0x92,0x4f,0x78,0xc6]
+
+
+@------------------------------------------------------------------------------
+@ UHASX
+@------------------------------------------------------------------------------
+ uhasx r4, r8, r2
+ uhasxgt r4, r8, r2
+
+@ CHECK: uhasx r4, r8, r2 @ encoding: [0x32,0x4f,0x78,0xe6]
+@ CHECK: uhasxgt r4, r8, r2 @ encoding: [0x32,0x4f,0x78,0xc6]
+
+
+@------------------------------------------------------------------------------
+@ UHSUB16/UHSUB8
+@------------------------------------------------------------------------------
+ uhsub16 r4, r8, r2
+ uhsub16gt r4, r8, r2
+ uhsub8 r4, r8, r2
+ uhsub8gt r4, r8, r2
+
+@ CHECK: uhsub16 r4, r8, r2 @ encoding: [0x72,0x4f,0x78,0xe6]
+@ CHECK: uhsub16gt r4, r8, r2 @ encoding: [0x72,0x4f,0x78,0xc6]
+@ CHECK: uhsub8 r4, r8, r2 @ encoding: [0xf2,0x4f,0x78,0xe6]
+@ CHECK: uhsub8gt r4, r8, r2 @ encoding: [0xf2,0x4f,0x78,0xc6]
+
+
+@------------------------------------------------------------------------------
+@ UMAAL
+@------------------------------------------------------------------------------
+ umaal r3, r4, r5, r6
+ umaallt r3, r4, r5, r6
+
+@ CHECK: umaal r3, r4, r5, r6 @ encoding: [0x95,0x36,0x44,0xe0]
+@ CHECK: umaallt r3, r4, r5, r6 @ encoding: [0x95,0x36,0x44,0xb0]
+
+
+@------------------------------------------------------------------------------
+@ UMLAL
+@------------------------------------------------------------------------------
+ umlal r2, r4, r6, r8
+ umlalgt r6, r1, r2, r6
+ umlals r2, r9, r2, r3
+ umlalseq r3, r5, r1, r2
+
+@ CHECK: umlal r2, r4, r6, r8 @ encoding: [0x96,0x28,0xa4,0xe0]
+@ CHECK: umlalgt r6, r1, r2, r6 @ encoding: [0x92,0x66,0xa1,0xc0]
+@ CHECK: umlals r2, r9, r2, r3 @ encoding: [0x92,0x23,0xb9,0xe0]
+@ CHECK: umlalseq r3, r5, r1, r2 @ encoding: [0x91,0x32,0xb5,0x00]
+
+
+@------------------------------------------------------------------------------
+@ UMULL
+@------------------------------------------------------------------------------
+ umull r2, r4, r6, r8
+ umullgt r6, r1, r2, r6
+ umulls r2, r9, r2, r3
+ umullseq r3, r5, r1, r2
+
+@ CHECK: umull r2, r4, r6, r8 @ encoding: [0x96,0x28,0x84,0xe0]
+@ CHECK: umullgt r6, r1, r2, r6 @ encoding: [0x92,0x66,0x81,0xc0]
+@ CHECK: umulls r2, r9, r2, r3 @ encoding: [0x92,0x23,0x99,0xe0]
+@ CHECK: umullseq r3, r5, r1, r2 @ encoding: [0x91,0x32,0x95,0x00]
+
+
+@------------------------------------------------------------------------------
+@ UQADD16/UQADD8
+@------------------------------------------------------------------------------
+ uqadd16 r1, r2, r3
+ uqadd16gt r4, r7, r9
+ uqadd8 r3, r4, r8
+ uqadd8le r8, r1, r2
+
+
+@ CHECK: uqadd16 r1, r2, r3 @ encoding: [0x13,0x1f,0x62,0xe6]
+@ CHECK: uqadd16gt r4, r7, r9 @ encoding: [0x19,0x4f,0x67,0xc6]
+@ CHECK: uqadd8 r3, r4, r8 @ encoding: [0x98,0x3f,0x64,0xe6]
+@ CHECK: uqadd8le r8, r1, r2 @ encoding: [0x92,0x8f,0x61,0xd6]
+
+
+@------------------------------------------------------------------------------
+@ UQASX
+@------------------------------------------------------------------------------
+ uqasx r2, r4, r1
+ uqasxhi r5, r2, r9
+
+@ CHECK: uqasx r2, r4, r1 @ encoding: [0x31,0x2f,0x64,0xe6]
+@ CHECK: uqasxhi r5, r2, r9 @ encoding: [0x39,0x5f,0x62,0x86]
+
+
+@------------------------------------------------------------------------------
+@ UQSAX
+@------------------------------------------------------------------------------
+ uqsax r1, r3, r7
+ uqsaxal r3, r6, r2
+
+@ CHECK: uqsax r1, r3, r7 @ encoding: [0x57,0x1f,0x63,0xe6]
+@ CHECK: uqsax r3, r6, r2 @ encoding: [0x52,0x3f,0x66,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ UQSUB16/UQSUB8
+@------------------------------------------------------------------------------
+ uqsub16 r1, r5, r3
+ uqsub16gt r3, r2, r5
+ uqsub8 r2, r1, r4
+ uqsub8le r4, r6, r9
+
+@ CHECK: uqsub16 r1, r5, r3 @ encoding: [0x73,0x1f,0x65,0xe6]
+@ CHECK: uqsub16gt r3, r2, r5 @ encoding: [0x75,0x3f,0x62,0xc6]
+@ CHECK: uqsub8 r2, r1, r4 @ encoding: [0xf4,0x2f,0x61,0xe6]
+@ CHECK: uqsub8le r4, r6, r9 @ encoding: [0xf9,0x4f,0x66,0xd6]
+
+
+@------------------------------------------------------------------------------
+@ USADA8/USAD8
+@------------------------------------------------------------------------------
+ usad8 r2, r1, r4
+ usad8le r4, r6, r9
+ usada8 r1, r5, r3, r7
+ usada8gt r3, r2, r5, r1
+
+@ CHECK: usad8 r2, r1, r4 @ encoding: [0x11,0xf4,0x82,0xe7]
+@ CHECK: usad8le r4, r6, r9 @ encoding: [0x16,0xf9,0x84,0xd7]
+@ CHECK: usada8 r1, r5, r3, r7 @ encoding: [0x15,0x73,0x81,0xe7]
+@ CHECK: usada8gt r3, r2, r5, r1 @ encoding: [0x12,0x15,0x83,0xc7]
+
+
+@------------------------------------------------------------------------------
+@ USAT
+@------------------------------------------------------------------------------
+ usat r8, #1, r10
+ usat r8, #4, r10, lsl #0
+ usat r8, #5, r10, lsl #31
+ usat r8, #31, r10, asr #32
+ usat r8, #16, r10, asr #1
+
+@ CHECK: usat r8, #1, r10 @ encoding: [0x1a,0x80,0xe1,0xe6]
+@ CHECK: usat r8, #4, r10 @ encoding: [0x1a,0x80,0xe4,0xe6]
+@ CHECK: usat r8, #5, r10, lsl #31 @ encoding: [0x9a,0x8f,0xe5,0xe6]
+@ CHECK: usat r8, #31, r10, asr #32 @ encoding: [0x5a,0x80,0xff,0xe6]
+@ CHECK: usat r8, #16, r10, asr #1 @ encoding: [0xda,0x80,0xf0,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ USAT16
+@------------------------------------------------------------------------------
+ usat16 r2, #2, r7
+ usat16 r3, #15, r5
+
+@ CHECK: usat16 r2, #2, r7 @ encoding: [0x37,0x2f,0xe2,0xe6]
+@ CHECK: usat16 r3, #15, r5 @ encoding: [0x35,0x3f,0xef,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ USAX
+@------------------------------------------------------------------------------
+ usax r2, r3, r4
+ usaxne r2, r3, r4
+
+@ CHECK: usax r2, r3, r4 @ encoding: [0x54,0x2f,0x53,0xe6]
+@ CHECK: usaxne r2, r3, r4 @ encoding: [0x54,0x2f,0x53,0x16]
+
+@------------------------------------------------------------------------------
+@ USUB16/USUB8
+@------------------------------------------------------------------------------
+ usub16 r4, r2, r7
+ usub16hi r1, r1, r3
+ usub8 r1, r8, r5
+ usub8le r9, r2, r3
+
+@ CHECK: usub16 r4, r2, r7 @ encoding: [0x77,0x4f,0x52,0xe6]
+@ CHECK: usub16hi r1, r1, r3 @ encoding: [0x73,0x1f,0x51,0x86]
+@ CHECK: usub8 r1, r8, r5 @ encoding: [0xf5,0x1f,0x58,0xe6]
+@ CHECK: usub8le r9, r2, r3 @ encoding: [0xf3,0x9f,0x52,0xd6]
+
+
+@------------------------------------------------------------------------------
+@ UXTAB
+@------------------------------------------------------------------------------
+ uxtab r2, r3, r4
+ uxtab r4, r5, r6, ror #0
+ uxtablt r6, r2, r9, ror #8
+ uxtab r5, r1, r4, ror #16
+ uxtab r7, r8, r3, ror #24
+
+@ CHECK: uxtab r2, r3, r4 @ encoding: [0x74,0x20,0xe3,0xe6]
+@ CHECK: uxtab r4, r5, r6 @ encoding: [0x76,0x40,0xe5,0xe6]
+@ CHECK: uxtablt r6, r2, r9, ror #8 @ encoding: [0x79,0x64,0xe2,0xb6]
+@ CHECK: uxtab r5, r1, r4, ror #16 @ encoding: [0x74,0x58,0xe1,0xe6]
+@ CHECK: uxtab r7, r8, r3, ror #24 @ encoding: [0x73,0x7c,0xe8,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ UXTAB16
+@------------------------------------------------------------------------------
+ uxtab16ge r0, r1, r4
+ uxtab16 r6, r2, r7, ror #0
+ uxtab16 r3, r5, r8, ror #8
+ uxtab16 r3, r2, r1, ror #16
+ uxtab16eq r1, r2, r3, ror #24
+
+@ CHECK: uxtab16ge r0, r1, r4 @ encoding: [0x74,0x00,0xc1,0xa6]
+@ CHECK: uxtab16 r6, r2, r7 @ encoding: [0x77,0x60,0xc2,0xe6]
+@ CHECK: uxtab16 r3, r5, r8, ror #8 @ encoding: [0x78,0x34,0xc5,0xe6]
+@ CHECK: uxtab16 r3, r2, r1, ror #16 @ encoding: [0x71,0x38,0xc2,0xe6]
+@ CHECK: uxtab16eq r1, r2, r3, ror #24 @ encoding: [0x73,0x1c,0xc2,0x06]
+
+
+@------------------------------------------------------------------------------
+@ UXTAH
+@------------------------------------------------------------------------------
+ uxtah r1, r3, r9
+ uxtahhi r6, r1, r6, ror #0
+ uxtah r3, r8, r3, ror #8
+ uxtahlo r2, r2, r4, ror #16
+ uxtah r9, r3, r3, ror #24
+
+@ CHECK: uxtah r1, r3, r9 @ encoding: [0x79,0x10,0xf3,0xe6]
+@ CHECK: uxtahhi r6, r1, r6 @ encoding: [0x76,0x60,0xf1,0x86]
+@ CHECK: uxtah r3, r8, r3, ror #8 @ encoding: [0x73,0x34,0xf8,0xe6]
+@ CHECK: uxtahlo r2, r2, r4, ror #16 @ encoding: [0x74,0x28,0xf2,0x36]
+@ CHECK: uxtah r9, r3, r3, ror #24 @ encoding: [0x73,0x9c,0xf3,0xe6]
+
+@------------------------------------------------------------------------------
+@ UXTB
+@------------------------------------------------------------------------------
+ uxtbge r2, r4
+ uxtb r5, r6, ror #0
+ uxtb r6, r9, ror #8
+ uxtbcc r5, r1, ror #16
+ uxtb r8, r3, ror #24
+
+@ CHECK: uxtbge r2, r4 @ encoding: [0x74,0x20,0xef,0xa6]
+@ CHECK: uxtb r5, r6 @ encoding: [0x76,0x50,0xef,0xe6]
+@ CHECK: uxtb r6, r9, ror #8 @ encoding: [0x79,0x64,0xef,0xe6]
+@ CHECK: uxtblo r5, r1, ror #16 @ encoding: [0x71,0x58,0xef,0x36]
+@ CHECK: uxtb r8, r3, ror #24 @ encoding: [0x73,0x8c,0xef,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ UXTB16
+@------------------------------------------------------------------------------
+ uxtb16 r1, r4
+ uxtb16 r6, r7, ror #0
+ uxtb16cs r3, r5, ror #8
+ uxtb16 r3, r1, ror #16
+ uxtb16ge r2, r3, ror #24
+
+@ CHECK: uxtb16 r1, r4 @ encoding: [0x74,0x10,0xcf,0xe6]
+@ CHECK: uxtb16 r6, r7 @ encoding: [0x77,0x60,0xcf,0xe6]
+@ CHECK: uxtb16hs r3, r5, ror #8 @ encoding: [0x75,0x34,0xcf,0x26]
+@ CHECK: uxtb16 r3, r1, ror #16 @ encoding: [0x71,0x38,0xcf,0xe6]
+@ CHECK: uxtb16ge r2, r3, ror #24 @ encoding: [0x73,0x2c,0xcf,0xa6]
+
+
+@------------------------------------------------------------------------------
+@ UXTH
+@------------------------------------------------------------------------------
+ uxthne r3, r9
+ uxth r1, r6, ror #0
+ uxth r3, r8, ror #8
+ uxthle r2, r2, ror #16
+ uxth r9, r3, ror #24
+
+@ CHECK: uxthne r3, r9 @ encoding: [0x79,0x30,0xff,0x16]
+@ CHECK: uxth r1, r6 @ encoding: [0x76,0x10,0xff,0xe6]
+@ CHECK: uxth r3, r8, ror #8 @ encoding: [0x78,0x34,0xff,0xe6]
+@ CHECK: uxthle r2, r2, ror #16 @ encoding: [0x72,0x28,0xff,0xd6]
+@ CHECK: uxth r9, r3, ror #24 @ encoding: [0x73,0x9c,0xff,0xe6]
+
+
+@------------------------------------------------------------------------------
+@ WFE/WFI/YIELD
+@------------------------------------------------------------------------------
+ wfe
+ wfehi
+ wfi
+ wfilt
+ yield
+ yieldne
+
+@ CHECK: wfe @ encoding: [0x02,0xf0,0x20,0xe3]
+@ CHECK: wfehi @ encoding: [0x02,0xf0,0x20,0x83]
+@ CHECK: wfi @ encoding: [0x03,0xf0,0x20,0xe3]
+@ CHECK: wfilt @ encoding: [0x03,0xf0,0x20,0xb3]
+@ CHECK: yield @ encoding: [0x01,0xf0,0x20,0xe3]
+@ CHECK: yieldne @ encoding: [0x01,0xf0,0x20,0x13]
diff --git a/test/MC/ARM/basic-thumb-instructions.s b/test/MC/ARM/basic-thumb-instructions.s
new file mode 100644
index 0000000..0fa52b0
--- /dev/null
+++ b/test/MC/ARM/basic-thumb-instructions.s
@@ -0,0 +1,623 @@
+@---
+@ Run these test in both Thumb1 and Thumb2 modes, as all of the encodings
+@ should be valid, and parse the same, in both.
+@---
+@ RUN: llvm-mc -triple=thumbv6-apple-darwin -show-encoding < %s | FileCheck %s
+@ RUN: llvm-mc -triple=thumbv7-apple-darwin -show-encoding < %s | FileCheck %s
+ .syntax unified
+ .globl _func
+
+@ Check that the assembler can handle the documented syntax from the ARM ARM.
+@ For complex constructs like shifter operands, check more thoroughly for them
+@ once then spot check that following instructions accept the form generally.
+@ This gives us good coverage while keeping the overall size of the test
+@ more reasonable.
+
+
+@ FIXME: Some 3-operand instructions have a 2-operand assembly syntax.
+
+_func:
+@ CHECK: _func
+
+@------------------------------------------------------------------------------
+@ ADC (register)
+@------------------------------------------------------------------------------
+ adcs r4, r6
+
+@ CHECK: adcs r4, r6 @ encoding: [0x74,0x41]
+
+
+@------------------------------------------------------------------------------
+@ ADD (immediate)
+@------------------------------------------------------------------------------
+ adds r1, r2, #3
+@ When Rd is not explicitly specified, encoding T2 is preferred even though
+@ the literal is in the range [0,7] which would allow encoding T1.
+ adds r2, #3
+ adds r2, #8
+
+@ CHECK: adds r1, r2, #3 @ encoding: [0xd1,0x1c]
+@ CHECK: adds r2, #3 @ encoding: [0x03,0x32]
+@ CHECK: adds r2, #8 @ encoding: [0x08,0x32]
+
+
+@------------------------------------------------------------------------------
+@ ADD (register)
+@------------------------------------------------------------------------------
+ adds r1, r2, r3
+ add r2, r8
+
+@ CHECK: adds r1, r2, r3 @ encoding: [0xd1,0x18]
+@ CHECK: add r2, r8 @ encoding: [0x42,0x44]
+
+
+@------------------------------------------------------------------------------
+@ ADD (SP plus immediate)
+@------------------------------------------------------------------------------
+ add sp, #4
+ add sp, #508
+ add sp, sp, #4
+ add r2, sp, #8
+ add r2, sp, #1020
+
+@ CHECK: add sp, #4 @ encoding: [0x01,0xb0]
+@ CHECK: add sp, #508 @ encoding: [0x7f,0xb0]
+@ CHECK: add sp, #4 @ encoding: [0x01,0xb0]
+@ CHECK: add r2, sp, #8 @ encoding: [0x02,0xaa]
+@ CHECK: add r2, sp, #1020 @ encoding: [0xff,0xaa]
+
+
+@------------------------------------------------------------------------------
+@ ADD (SP plus register)
+@------------------------------------------------------------------------------
+ add sp, r3
+ add r2, sp, r2
+
+@ CHECK: add sp, r3 @ encoding: [0x9d,0x44]
+@ CHECK: add r2, sp, r2 @ encoding: [0x6a,0x44]
+
+
+@------------------------------------------------------------------------------
+@ ADR
+@------------------------------------------------------------------------------
+ adr r2, _baz
+ adr r2, #3
+
+@ CHECK: adr r2, _baz @ encoding: [A,0xa2]
+ @ fixup A - offset: 0, value: _baz, kind: fixup_thumb_adr_pcrel_10
+@ CHECK: adr r2, #3 @ encoding: [0x03,0xa2]
+
+@------------------------------------------------------------------------------
+@ ASR (immediate)
+@------------------------------------------------------------------------------
+ asrs r2, r3, #32
+ asrs r2, r3, #5
+ asrs r2, r3, #1
+
+@ CHECK: asrs r2, r3, #32 @ encoding: [0x1a,0x10]
+@ CHECK: asrs r2, r3, #5 @ encoding: [0x5a,0x11]
+@ CHECK: asrs r2, r3, #1 @ encoding: [0x5a,0x10]
+
+
+@------------------------------------------------------------------------------
+@ ASR (register)
+@------------------------------------------------------------------------------
+ asrs r5, r2
+
+@ CHECK: asrs r5, r2 @ encoding: [0x15,0x41]
+
+
+@------------------------------------------------------------------------------
+@ B
+@------------------------------------------------------------------------------
+ b _baz
+ beq _bar
+ b #1838
+ b #-420
+ beq #336
+ beq #160
+
+@ CHECK: b _baz @ encoding: [A,0xe0'A']
+ @ fixup A - offset: 0, value: _baz, kind: fixup_arm_thumb_br
+@ CHECK: beq _bar @ encoding: [A,0xd0]
+ @ fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_bcc
+@ CHECK: b #1838 @ encoding: [0x97,0xe3]
+@ CHECK: b #-420 @ encoding: [0x2e,0xe7]
+@ CHECK: beq #336 @ encoding: [0xa8,0xd0]
+@ CHECK: beq #160 @ encoding: [0x50,0xd0]
+
+@------------------------------------------------------------------------------
+@ BL/BLX
+@------------------------------------------------------------------------------
+ blx #884800
+ blx #1769600
+
+@ CHECK: blx #884800 @ encoding: [0xd8,0xf0,0x20,0xe8]
+@ CHECK: blx #1769600 @ encoding: [0xb0,0xf1,0x40,0xe8]
+
+@------------------------------------------------------------------------------
+@ BICS
+@------------------------------------------------------------------------------
+ bics r1, r6
+
+@ CHECK: bics r1, r6 @ encoding: [0xb1,0x43]
+
+
+@------------------------------------------------------------------------------
+@ BKPT
+@------------------------------------------------------------------------------
+ bkpt #0
+ bkpt #255
+
+@ CHECK: bkpt #0 @ encoding: [0x00,0xbe]
+@ CHECK: bkpt #255 @ encoding: [0xff,0xbe]
+
+
+@------------------------------------------------------------------------------
+@ BL/BLX (immediate)
+@------------------------------------------------------------------------------
+ bl _bar
+ blx _baz
+
+@ CHECK: bl _bar @ encoding: [A,0xf0'A',A,0xf8'A']
+ @ fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_bl
+@ CHECK: blx _baz @ encoding: [A,0xf0'A',A,0xe8'A']
+ @ fixup A - offset: 0, value: _baz, kind: fixup_arm_thumb_blx
+
+
+@------------------------------------------------------------------------------
+@ BLX (register)
+@------------------------------------------------------------------------------
+ blx r4
+
+@ CHECK: blx r4 @ encoding: [0xa0,0x47]
+
+
+@------------------------------------------------------------------------------
+@ BX
+@------------------------------------------------------------------------------
+ bx r2
+
+@ CHECK: bx r2 @ encoding: [0x10,0x47]
+
+
+@------------------------------------------------------------------------------
+@ CMN
+@------------------------------------------------------------------------------
+
+ cmn r5, r1
+
+@ CHECK: cmn r5, r1 @ encoding: [0xcd,0x42]
+
+
+@------------------------------------------------------------------------------
+@ CMP
+@------------------------------------------------------------------------------
+ cmp r6, #32
+ cmp r3, r4
+ cmp r8, r1
+
+@ CHECK: cmp r6, #32 @ encoding: [0x20,0x2e]
+@ CHECK: cmp r3, r4 @ encoding: [0xa3,0x42]
+@ CHECK: cmp r8, r1 @ encoding: [0x88,0x45]
+
+@------------------------------------------------------------------------------
+@ EOR
+@------------------------------------------------------------------------------
+ eors r4, r5
+
+@ CHECK: eors r4, r5 @ encoding: [0x6c,0x40]
+
+
+@------------------------------------------------------------------------------
+@ LDM
+@------------------------------------------------------------------------------
+ ldm r3, {r0, r1, r2, r3, r4, r5, r6, r7}
+ ldm r2!, {r1, r3, r4, r5, r7}
+ ldm r1, {r1}
+
+@ CHECK: ldm r3, {r0, r1, r2, r3, r4, r5, r6, r7} @ encoding: [0xff,0xcb]
+@ CHECK: ldm r2!, {r1, r3, r4, r5, r7} @ encoding: [0xba,0xca]
+@ CHECK: ldm r1, {r1} @ encoding: [0x02,0xc9]
+
+
+@------------------------------------------------------------------------------
+@ LDR (immediate)
+@------------------------------------------------------------------------------
+ ldr r1, [r5]
+ ldr r2, [r6, #32]
+ ldr r3, [r7, #124]
+ ldr r1, [sp]
+ ldr r2, [sp, #24]
+ ldr r3, [sp, #1020]
+
+
+@ CHECK: ldr r1, [r5] @ encoding: [0x29,0x68]
+@ CHECK: ldr r2, [r6, #32] @ encoding: [0x32,0x6a]
+@ CHECK: ldr r3, [r7, #124] @ encoding: [0xfb,0x6f]
+@ CHECK: ldr r1, [sp] @ encoding: [0x00,0x99]
+@ CHECK: ldr r2, [sp, #24] @ encoding: [0x06,0x9a]
+@ CHECK: ldr r3, [sp, #1020] @ encoding: [0xff,0x9b]
+
+
+@------------------------------------------------------------------------------
+@ LDR (literal)
+@------------------------------------------------------------------------------
+ ldr r1, _foo
+ ldr r3, #604
+ ldr r3, #368
+
+@ CHECK: ldr r1, _foo @ encoding: [A,0x49]
+ @ fixup A - offset: 0, value: _foo, kind: fixup_arm_thumb_cp
+@ CHECK: ldr r3, #604 @ encoding: [0x97,0x4b]
+@ CHECK: ldr r3, #368 @ encoding: [0x5c,0x4b]
+
+@------------------------------------------------------------------------------
+@ LDR (register)
+@------------------------------------------------------------------------------
+ ldr r1, [r2, r3]
+
+@ CHECK: ldr r1, [r2, r3] @ encoding: [0xd1,0x58]
+
+
+@------------------------------------------------------------------------------
+@ LDRB (immediate)
+@------------------------------------------------------------------------------
+ ldrb r4, [r3]
+ ldrb r5, [r6, #0]
+ ldrb r6, [r7, #31]
+
+@ CHECK: ldrb r4, [r3] @ encoding: [0x1c,0x78]
+@ CHECK: ldrb r5, [r6] @ encoding: [0x35,0x78]
+@ CHECK: ldrb r6, [r7, #31] @ encoding: [0xfe,0x7f]
+
+
+@------------------------------------------------------------------------------
+@ LDRB (register)
+@------------------------------------------------------------------------------
+ ldrb r6, [r4, r5]
+
+@ CHECK: ldrb r6, [r4, r5] @ encoding: [0x66,0x5d]
+
+
+@------------------------------------------------------------------------------
+@ LDRH (immediate)
+@------------------------------------------------------------------------------
+ ldrh r3, [r3]
+ ldrh r4, [r6, #2]
+ ldrh r5, [r7, #62]
+
+@ CHECK: ldrh r3, [r3] @ encoding: [0x1b,0x88]
+@ CHECK: ldrh r4, [r6, #2] @ encoding: [0x74,0x88]
+@ CHECK: ldrh r5, [r7, #62] @ encoding: [0xfd,0x8f]
+
+
+@------------------------------------------------------------------------------
+@ LDRH (register)
+@------------------------------------------------------------------------------
+ ldrh r6, [r2, r6]
+
+@ CHECK: ldrh r6, [r2, r6] @ encoding: [0x96,0x5b]
+
+
+@------------------------------------------------------------------------------
+@ LDRSB/LDRSH
+@------------------------------------------------------------------------------
+ ldrsb r6, [r2, r6]
+ ldrsh r3, [r7, r1]
+
+@ CHECK: ldrsb r6, [r2, r6] @ encoding: [0x96,0x57]
+@ CHECK: ldrsh r3, [r7, r1] @ encoding: [0x7b,0x5e]
+
+
+@------------------------------------------------------------------------------
+@ LSL (immediate)
+@------------------------------------------------------------------------------
+ lsls r4, r5, #0
+ lsls r4, r5, #4
+
+@ CHECK: lsls r4, r5, #0 @ encoding: [0x2c,0x00]
+@ CHECK: lsls r4, r5, #4 @ encoding: [0x2c,0x01]
+
+
+@------------------------------------------------------------------------------
+@ LSL (register)
+@------------------------------------------------------------------------------
+ lsls r2, r6
+
+@ CHECK: lsls r2, r6 @ encoding: [0xb2,0x40]
+
+
+@------------------------------------------------------------------------------
+@ LSR (immediate)
+@------------------------------------------------------------------------------
+ lsrs r1, r3, #1
+ lsrs r1, r3, #32
+
+@ CHECK: lsrs r1, r3, #1 @ encoding: [0x59,0x08]
+@ CHECK: lsrs r1, r3, #32 @ encoding: [0x19,0x08]
+
+
+@------------------------------------------------------------------------------
+@ LSR (register)
+@------------------------------------------------------------------------------
+ lsrs r2, r6
+
+@ CHECK: lsrs r2, r6 @ encoding: [0xf2,0x40]
+
+
+@------------------------------------------------------------------------------
+@ MOV (immediate)
+@------------------------------------------------------------------------------
+ movs r2, #0
+ movs r2, #255
+ movs r2, #23
+
+@ CHECK: movs r2, #0 @ encoding: [0x00,0x22]
+@ CHECK: movs r2, #255 @ encoding: [0xff,0x22]
+@ CHECK: movs r2, #23 @ encoding: [0x17,0x22]
+
+
+@------------------------------------------------------------------------------
+@ MOV (register)
+@------------------------------------------------------------------------------
+ mov r3, r4
+ movs r1, r3
+
+@ CHECK: mov r3, r4 @ encoding: [0x23,0x46]
+@ CHECK: movs r1, r3 @ encoding: [0x19,0x00]
+
+
+@------------------------------------------------------------------------------
+@ MUL
+@------------------------------------------------------------------------------
+ muls r1, r2, r1
+ muls r3, r4
+
+@ CHECK: muls r1, r2, r1 @ encoding: [0x51,0x43]
+@ CHECK: muls r3, r4, r3 @ encoding: [0x63,0x43]
+
+
+@------------------------------------------------------------------------------
+@ MVN
+@------------------------------------------------------------------------------
+ mvns r6, r3
+
+@ CHECK: mvns r6, r3 @ encoding: [0xde,0x43]
+
+
+@------------------------------------------------------------------------------
+@ NEG
+@------------------------------------------------------------------------------
+ negs r3, r4
+
+@ CHECK: rsbs r3, r4, #0 @ encoding: [0x63,0x42]
+
+@------------------------------------------------------------------------------
+@ ORR
+@------------------------------------------------------------------------------
+ orrs r3, r4
+
+@ CHECK-ERRORS: orrs r3, r4 @ encoding: [0x23,0x43]
+
+
+@------------------------------------------------------------------------------
+@ POP
+@------------------------------------------------------------------------------
+ pop {r2, r3, r6}
+
+@ CHECK: pop {r2, r3, r6} @ encoding: [0x4c,0xbc]
+
+
+@------------------------------------------------------------------------------
+@ PUSH
+@------------------------------------------------------------------------------
+ push {r1, r2, r7}
+
+@ CHECK: push {r1, r2, r7} @ encoding: [0x86,0xb4]
+
+
+@------------------------------------------------------------------------------
+@ REV/REV16/REVSH
+@------------------------------------------------------------------------------
+ rev r6, r3
+ rev16 r7, r2
+ revsh r5, r1
+
+@ CHECK: rev r6, r3 @ encoding: [0x1e,0xba]
+@ CHECK: rev16 r7, r2 @ encoding: [0x57,0xba]
+@ CHECK: revsh r5, r1 @ encoding: [0xcd,0xba]
+
+
+@------------------------------------------------------------------------------
+@ ROR
+@------------------------------------------------------------------------------
+ rors r2, r7
+
+@ CHECK: rors r2, r7 @ encoding: [0xfa,0x41]
+
+
+@------------------------------------------------------------------------------
+@ RSB
+@------------------------------------------------------------------------------
+ rsbs r1, r3, #0
+
+@ CHECK: rsbs r1, r3, #0 @ encoding: [0x59,0x42]
+
+
+@------------------------------------------------------------------------------
+@ SBC
+@------------------------------------------------------------------------------
+ sbcs r4, r3
+
+@ CHECK: sbcs r4, r3 @ encoding: [0x9c,0x41]
+
+
+@------------------------------------------------------------------------------
+@ SETEND
+@------------------------------------------------------------------------------
+ setend be
+ setend le
+
+@ CHECK: setend be @ encoding: [0x58,0xb6]
+@ CHECK: setend le @ encoding: [0x50,0xb6]
+
+
+@------------------------------------------------------------------------------
+@ STM
+@------------------------------------------------------------------------------
+ stm r1!, {r2, r6}
+ stm r1!, {r1, r2, r3, r7}
+
+@ CHECK: stm r1!, {r2, r6} @ encoding: [0x44,0xc1]
+@ CHECK: stm r1!, {r1, r2, r3, r7} @ encoding: [0x8e,0xc1]
+
+
+@------------------------------------------------------------------------------
+@ STR (immediate)
+@------------------------------------------------------------------------------
+ str r2, [r7]
+ str r2, [r7, #0]
+ str r5, [r1, #4]
+ str r3, [r7, #124]
+ str r2, [sp]
+ str r3, [sp, #0]
+ str r4, [sp, #20]
+ str r5, [sp, #1020]
+
+@ CHECK: str r2, [r7] @ encoding: [0x3a,0x60]
+@ CHECK: str r2, [r7] @ encoding: [0x3a,0x60]
+@ CHECK: str r5, [r1, #4] @ encoding: [0x4d,0x60]
+@ CHECK: str r3, [r7, #124] @ encoding: [0xfb,0x67]
+@ CHECK: str r2, [sp] @ encoding: [0x00,0x92]
+@ CHECK: str r3, [sp] @ encoding: [0x00,0x93]
+@ CHECK: str r4, [sp, #20] @ encoding: [0x05,0x94]
+@ CHECK: str r5, [sp, #1020] @ encoding: [0xff,0x95]
+
+
+@------------------------------------------------------------------------------
+@ STR (register)
+@------------------------------------------------------------------------------
+ str r2, [r7, r3]
+
+@ CHECK: str r2, [r7, r3] @ encoding: [0xfa,0x50]
+
+
+@------------------------------------------------------------------------------
+@ STRB (immediate)
+@------------------------------------------------------------------------------
+ strb r4, [r3]
+ strb r5, [r6, #0]
+ strb r6, [r7, #31]
+
+@ CHECK: strb r4, [r3] @ encoding: [0x1c,0x70]
+@ CHECK: strb r5, [r6] @ encoding: [0x35,0x70]
+@ CHECK: strb r6, [r7, #31] @ encoding: [0xfe,0x77]
+
+
+@------------------------------------------------------------------------------
+@ STRB (register)
+@------------------------------------------------------------------------------
+ strb r6, [r4, r5]
+
+@ CHECK: strb r6, [r4, r5] @ encoding: [0x66,0x55]
+
+
+@------------------------------------------------------------------------------
+@ STRH (immediate)
+@------------------------------------------------------------------------------
+ strh r3, [r3]
+ strh r4, [r6, #2]
+ strh r5, [r7, #62]
+
+@ CHECK: strh r3, [r3] @ encoding: [0x1b,0x80]
+@ CHECK: strh r4, [r6, #2] @ encoding: [0x74,0x80]
+@ CHECK: strh r5, [r7, #62] @ encoding: [0xfd,0x87]
+
+
+@------------------------------------------------------------------------------
+@ STRH (register)
+@------------------------------------------------------------------------------
+ strh r6, [r2, r6]
+
+@ CHECK: strh r6, [r2, r6] @ encoding: [0x96,0x53]
+
+
+@------------------------------------------------------------------------------
+@ SUB (immediate)
+@------------------------------------------------------------------------------
+ subs r1, r2, #3
+ subs r2, #3
+ subs r2, #8
+
+@ CHECK: subs r1, r2, #3 @ encoding: [0xd1,0x1e]
+@ CHECK: subs r2, #3 @ encoding: [0x03,0x3a]
+@ CHECK: subs r2, #8 @ encoding: [0x08,0x3a]
+
+
+@------------------------------------------------------------------------------
+@ SUB (SP minus immediate)
+@------------------------------------------------------------------------------
+ sub sp, #12
+ sub sp, sp, #508
+
+@ CHECK: sub sp, #12 @ encoding: [0x83,0xb0]
+@ CHECK: sub sp, #508 @ encoding: [0xff,0xb0]
+
+
+@------------------------------------------------------------------------------
+@ SUB (register)
+@------------------------------------------------------------------------------
+ subs r1, r2, r3
+
+@ CHECK: subs r1, r2, r3 @ encoding: [0xd1,0x1a]
+
+
+@------------------------------------------------------------------------------
+@ SVC
+@------------------------------------------------------------------------------
+ svc #0
+ svc #255
+
+@ CHECK: svc #0 @ encoding: [0x00,0xdf]
+@ CHECK: svc #255 @ encoding: [0xff,0xdf]
+
+
+@------------------------------------------------------------------------------
+@ SXTB/SXTH
+@------------------------------------------------------------------------------
+ sxtb r3, r5
+ sxth r3, r5
+
+@ CHECK: sxtb r3, r5 @ encoding: [0x6b,0xb2]
+@ CHECK: sxth r3, r5 @ encoding: [0x2b,0xb2]
+
+
+@------------------------------------------------------------------------------
+@ TST
+@------------------------------------------------------------------------------
+ tst r6, r1
+
+@ CHECK: tst r6, r1 @ encoding: [0x0e,0x42]
+
+
+@------------------------------------------------------------------------------
+@ UXTB/UXTH
+@------------------------------------------------------------------------------
+ uxtb r7, r2
+ uxth r1, r4
+
+@ CHECK: uxtb r7, r2 @ encoding: [0xd7,0xb2]
+@ CHECK: uxth r1, r4 @ encoding: [0xa1,0xb2]
+
+
+@------------------------------------------------------------------------------
+@ WFE/WFI/YIELD
+@------------------------------------------------------------------------------
+ wfe
+ wfi
+ yield
+
+@ CHECK: wfe @ encoding: [0x20,0xbf]
+@ CHECK: wfi @ encoding: [0x30,0xbf]
+@ CHECK: yield @ encoding: [0x10,0xbf]
diff --git a/test/MC/ARM/basic-thumb2-instructions.s b/test/MC/ARM/basic-thumb2-instructions.s
new file mode 100644
index 0000000..68815da
--- /dev/null
+++ b/test/MC/ARM/basic-thumb2-instructions.s
@@ -0,0 +1,3213 @@
+@ RUN: llvm-mc -triple=thumbv7-apple-darwin -show-encoding < %s | FileCheck %s
+ .syntax unified
+ .globl _func
+
+@ Check that the assembler can handle the documented syntax from the ARM ARM.
+@ For complex constructs like shifter operands, check more thoroughly for them
+@ once then spot check that following instructions accept the form generally.
+@ This gives us good coverage while keeping the overall size of the test
+@ more reasonable.
+
+
+@ FIXME: Some 3-operand instructions have a 2-operand assembly syntax.
+
+_func:
+@ CHECK: _func
+
+@------------------------------------------------------------------------------
+@ ADC (immediate)
+@------------------------------------------------------------------------------
+ adc r0, r1, #4
+ adcs r0, r1, #0
+ adc r1, r2, #255
+ adc r3, r7, #0x00550055
+ adc r8, r12, #0xaa00aa00
+ adc r9, r7, #0xa5a5a5a5
+ adc r5, r3, #0x87000000
+ adc r4, r2, #0x7f800000
+ adc r4, r2, #0x00000680
+
+@ CHECK: adc r0, r1, #4 @ encoding: [0x41,0xf1,0x04,0x00]
+@ CHECK: adcs r0, r1, #0 @ encoding: [0x51,0xf1,0x00,0x00]
+@ CHECK: adc r1, r2, #255 @ encoding: [0x42,0xf1,0xff,0x01]
+@ CHECK: adc r3, r7, #5570645 @ encoding: [0x47,0xf1,0x55,0x13]
+@ CHECK: adc r8, r12, #2852170240 @ encoding: [0x4c,0xf1,0xaa,0x28]
+@ CHECK: adc r9, r7, #2779096485 @ encoding: [0x47,0xf1,0xa5,0x39]
+@ CHECK: adc r5, r3, #2264924160 @ encoding: [0x43,0xf1,0x07,0x45]
+@ CHECK: adc r4, r2, #2139095040 @ encoding: [0x42,0xf1,0xff,0x44]
+@ CHECK: adc r4, r2, #1664 @ encoding: [0x42,0xf5,0xd0,0x64]
+
+@------------------------------------------------------------------------------
+@ ADC (register)
+@------------------------------------------------------------------------------
+ adc r4, r5, r6
+ adcs r4, r5, r6
+ adc.w r9, r1, r3
+ adcs.w r9, r1, r3
+ adc r0, r1, r3, ror #4
+ adcs r0, r1, r3, lsl #7
+ adc.w r0, r1, r3, lsr #31
+ adcs.w r0, r1, r3, asr #32
+
+@ CHECK: adc.w r4, r5, r6 @ encoding: [0x45,0xeb,0x06,0x04]
+@ CHECK: adcs.w r4, r5, r6 @ encoding: [0x55,0xeb,0x06,0x04]
+@ CHECK: adc.w r9, r1, r3 @ encoding: [0x41,0xeb,0x03,0x09]
+@ CHECK: adcs.w r9, r1, r3 @ encoding: [0x51,0xeb,0x03,0x09]
+@ CHECK: adc.w r0, r1, r3, ror #4 @ encoding: [0x41,0xeb,0x33,0x10]
+@ CHECK: adcs.w r0, r1, r3, lsl #7 @ encoding: [0x51,0xeb,0xc3,0x10]
+@ CHECK: adc.w r0, r1, r3, lsr #31 @ encoding: [0x41,0xeb,0xd3,0x70]
+@ CHECK: adcs.w r0, r1, r3, asr #32 @ encoding: [0x51,0xeb,0x23,0x00]
+
+
+@------------------------------------------------------------------------------
+@ ADD (immediate)
+@------------------------------------------------------------------------------
+ itet eq
+ addeq r1, r2, #4
+ addwne r5, r3, #1023
+ addeq r4, r5, #293
+ add r2, sp, #1024
+ add r2, r8, #0xff00
+ add r2, r3, #257
+ addw r2, r3, #257
+ add r12, r6, #0x100
+ addw r12, r6, #0x100
+ adds r1, r2, #0x1f0
+
+@ CHECK: itet eq @ encoding: [0x0a,0xbf]
+@ CHECK: addeq r1, r2, #4 @ encoding: [0x11,0x1d]
+@ CHECK: addwne r5, r3, #1023 @ encoding: [0x03,0xf2,0xff,0x35]
+@ CHECK: addweq r4, r5, #293 @ encoding: [0x05,0xf2,0x25,0x14]
+@ CHECK: add.w r2, sp, #1024 @ encoding: [0x0d,0xf5,0x80,0x62]
+@ CHECK: add.w r2, r8, #65280 @ encoding: [0x08,0xf5,0x7f,0x42]
+@ CHECK: addw r2, r3, #257 @ encoding: [0x03,0xf2,0x01,0x12]
+@ CHECK: addw r2, r3, #257 @ encoding: [0x03,0xf2,0x01,0x12]
+@ CHECK: add.w r12, r6, #256 @ encoding: [0x06,0xf5,0x80,0x7c]
+@ CHECK: addw r12, r6, #256 @ encoding: [0x06,0xf2,0x00,0x1c]
+@ CHECK: adds.w r1, r2, #496 @ encoding: [0x12,0xf5,0xf8,0x71]
+
+
+@------------------------------------------------------------------------------
+@ ADD (register)
+@------------------------------------------------------------------------------
+ add r1, r2, r8
+ add r5, r9, r2, asr #32
+ adds r7, r3, r1, lsl #31
+ adds.w r0, r3, r6, lsr #25
+ add.w r4, r8, r1, ror #12
+
+@ CHECK: add.w r1, r2, r8 @ encoding: [0x02,0xeb,0x08,0x01]
+@ CHECK: add.w r5, r9, r2, asr #32 @ encoding: [0x09,0xeb,0x22,0x05]
+@ CHECK: adds.w r7, r3, r1, lsl #31 @ encoding: [0x13,0xeb,0xc1,0x77]
+@ CHECK: adds.w r0, r3, r6, lsr #25 @ encoding: [0x13,0xeb,0x56,0x60]
+@ CHECK: add.w r4, r8, r1, ror #12 @ encoding: [0x08,0xeb,0x31,0x34]
+
+
+@------------------------------------------------------------------------------
+@ FIXME: ADR
+@------------------------------------------------------------------------------
+
+ subw r11, pc, #3270
+ adr.w r11, #-826
+
+@ CHECK: subw r11, pc, #3270 @ encoding: [0xaf,0xf6,0xc6,0x4b]
+@ CHECK: adr.w r11, #-826 @ encoding: [0xaf,0xf2,0x3a,0x3b]
+
+@------------------------------------------------------------------------------
+@ AND (immediate)
+@------------------------------------------------------------------------------
+ and r2, r5, #0xff000
+ ands r3, r12, #0xf
+ and r1, #0xff
+ and r1, r1, #0xff
+
+@ CHECK: and r2, r5, #1044480 @ encoding: [0x05,0xf4,0x7f,0x22]
+@ CHECK: ands r3, r12, #15 @ encoding: [0x1c,0xf0,0x0f,0x03]
+@ CHECK: and r1, r1, #255 @ encoding: [0x01,0xf0,0xff,0x01]
+@ CHECK: and r1, r1, #255 @ encoding: [0x01,0xf0,0xff,0x01]
+
+
+@------------------------------------------------------------------------------
+@ AND (register)
+@------------------------------------------------------------------------------
+ and r4, r9, r8
+ and r1, r4, r8, asr #3
+ ands r2, r1, r7, lsl #1
+ ands.w r4, r5, r2, lsr #20
+ and.w r9, r12, r1, ror #17
+
+@ CHECK: and.w r4, r9, r8 @ encoding: [0x09,0xea,0x08,0x04]
+@ CHECK: and.w r1, r4, r8, asr #3 @ encoding: [0x04,0xea,0xe8,0x01]
+@ CHECK: ands.w r2, r1, r7, lsl #1 @ encoding: [0x11,0xea,0x47,0x02]
+@ CHECK: ands.w r4, r5, r2, lsr #20 @ encoding: [0x15,0xea,0x12,0x54]
+@ CHECK: and.w r9, r12, r1, ror #17 @ encoding: [0x0c,0xea,0x71,0x49]
+
+@------------------------------------------------------------------------------
+@ ASR (immediate)
+@------------------------------------------------------------------------------
+ asr r2, r3, #12
+ asrs r8, r3, #32
+ asrs.w r2, r3, #1
+ asr r2, r3, #4
+ asrs r2, r12, #15
+
+ asr r3, #19
+ asrs r8, #2
+ asrs.w r7, #5
+ asr.w r12, #21
+
+@ CHECK: asr.w r2, r3, #12 @ encoding: [0x4f,0xea,0x23,0x32]
+@ CHECK: asrs.w r8, r3, #32 @ encoding: [0x5f,0xea,0x23,0x08]
+@ CHECK: asrs.w r2, r3, #1 @ encoding: [0x5f,0xea,0x63,0x02]
+@ CHECK: asr.w r2, r3, #4 @ encoding: [0x4f,0xea,0x23,0x12]
+@ CHECK: asrs.w r2, r12, #15 @ encoding: [0x5f,0xea,0xec,0x32]
+
+@ CHECK: asr.w r3, r3, #19 @ encoding: [0x4f,0xea,0xe3,0x43]
+@ CHECK: asrs.w r8, r8, #2 @ encoding: [0x5f,0xea,0xa8,0x08]
+@ CHECK: asrs.w r7, r7, #5 @ encoding: [0x5f,0xea,0x67,0x17]
+@ CHECK: asr.w r12, r12, #21 @ encoding: [0x4f,0xea,0x6c,0x5c]
+
+
+@------------------------------------------------------------------------------
+@ ASR (register)
+@------------------------------------------------------------------------------
+ asr r3, r4, r2
+ asr.w r1, r2
+ asrs r3, r4, r8
+
+@ CHECK: asr.w r3, r4, r2 @ encoding: [0x44,0xfa,0x02,0xf3]
+@ CHECK: asr.w r1, r1, r2 @ encoding: [0x41,0xfa,0x02,0xf1]
+@ CHECK: asrs.w r3, r4, r8 @ encoding: [0x54,0xfa,0x08,0xf3]
+
+
+@------------------------------------------------------------------------------
+@ B
+@------------------------------------------------------------------------------
+ b.w _bar
+ beq.w _bar
+ it eq
+ beq.w _bar
+ bmi.w #-183396
+
+@ CHECK: b.w _bar @ encoding: [A,0xf0'A',A,0x90'A']
+ @ fixup A - offset: 0, value: _bar, kind: fixup_t2_uncondbranch
+@ CHECK: beq.w _bar @ encoding: [A,0xf0'A',A,0x80'A']
+ @ fixup A - offset: 0, value: _bar, kind: fixup_t2_condbranch
+@ CHECK: it eq @ encoding: [0x08,0xbf]
+@ CHECK: beq.w _bar @ encoding: [A,0xf0'A',A,0x90'A']
+ @ fixup A - offset: 0, value: _bar, kind: fixup_t2_uncondbranch
+@ CHECK: bmi.w #-183396 @ encoding: [0x13,0xf5,0xce,0xa9]
+
+
+@------------------------------------------------------------------------------
+@ BFC
+@------------------------------------------------------------------------------
+ bfc r5, #3, #17
+ it lo
+ bfccc r5, #3, #17
+
+@ CHECK: bfc r5, #3, #17 @ encoding: [0x6f,0xf3,0xd3,0x05]
+@ CHECK: it lo @ encoding: [0x38,0xbf]
+@ CHECK: bfclo r5, #3, #17 @ encoding: [0x6f,0xf3,0xd3,0x05]
+
+
+@------------------------------------------------------------------------------
+@ BFI
+@------------------------------------------------------------------------------
+ bfi r5, r2, #3, #17
+ it ne
+ bfine r5, r2, #3, #17
+
+@ CHECK: bfi r5, r2, #3, #17 @ encoding: [0x62,0xf3,0xd3,0x05]
+@ CHECK: it ne @ encoding: [0x18,0xbf]
+@ CHECK: bfine r5, r2, #3, #17 @ encoding: [0x62,0xf3,0xd3,0x05]
+
+
+@------------------------------------------------------------------------------
+@ BIC
+@------------------------------------------------------------------------------
+ bic r10, r1, #0xf
+ bic r12, r3, r6
+ bic r11, r2, r6, lsl #12
+ bic r8, r4, r1, lsr #11
+ bic r7, r5, r7, lsr #15
+ bic r6, r7, r9, asr #32
+ bic r5, r6, r8, ror #1
+
+ @ destination register is optional
+ bic r1, #0xf
+ bic r1, r1
+ bic r4, r2, lsl #31
+ bic r6, r3, lsr #12
+ bic r7, r4, lsr #7
+ bic r8, r5, asr #15
+ bic r12, r6, ror #29
+
+@ CHECK: bic r10, r1, #15 @ encoding: [0x21,0xf0,0x0f,0x0a]
+@ CHECK: bic.w r12, r3, r6 @ encoding: [0x23,0xea,0x06,0x0c]
+@ CHECK: bic.w r11, r2, r6, lsl #12 @ encoding: [0x22,0xea,0x06,0x3b]
+@ CHECK: bic.w r8, r4, r1, lsr #11 @ encoding: [0x24,0xea,0xd1,0x28]
+@ CHECK: bic.w r7, r5, r7, lsr #15 @ encoding: [0x25,0xea,0xd7,0x37]
+@ CHECK: bic.w r6, r7, r9, asr #32 @ encoding: [0x27,0xea,0x29,0x06]
+@ CHECK: bic.w r5, r6, r8, ror #1 @ encoding: [0x26,0xea,0x78,0x05]
+
+@ CHECK: bic r1, r1, #15 @ encoding: [0x21,0xf0,0x0f,0x01]
+@ CHECK: bic.w r1, r1, r1 @ encoding: [0x21,0xea,0x01,0x01]
+@ CHECK: bic.w r4, r4, r2, lsl #31 @ encoding: [0x24,0xea,0xc2,0x74]
+@ CHECK: bic.w r6, r6, r3, lsr #12 @ encoding: [0x26,0xea,0x13,0x36]
+@ CHECK: bic.w r7, r7, r4, lsr #7 @ encoding: [0x27,0xea,0xd4,0x17]
+@ CHECK: bic.w r8, r8, r5, asr #15 @ encoding: [0x28,0xea,0xe5,0x38]
+@ CHECK: bic.w r12, r12, r6, ror #29 @ encoding: [0x2c,0xea,0x76,0x7c]
+
+@------------------------------------------------------------------------------
+@ BKPT
+@------------------------------------------------------------------------------
+ it pl
+ bkpt #234
+
+@ CHECK: it pl @ encoding: [0x58,0xbf]
+@ CHECK: bkpt #234 @ encoding: [0xea,0xbe]
+
+@------------------------------------------------------------------------------
+@ BXJ
+@------------------------------------------------------------------------------
+ bxj r5
+ it ne
+ bxjne r7
+
+@ CHECK: bxj r5 @ encoding: [0xc5,0xf3,0x00,0x8f]
+@ CHECK: it ne @ encoding: [0x18,0xbf]
+@ CHECK: bxjne r7 @ encoding: [0xc7,0xf3,0x00,0x8f]
+
+
+@------------------------------------------------------------------------------
+@ CBZ/CBNZ
+@------------------------------------------------------------------------------
+ cbnz r7, #6
+ cbnz r7, #12
+ cbz r6, _bar
+ cbnz r6, _bar
+
+@ CHECK: cbnz r7, #6 @ encoding: [0x1f,0xb9]
+@ CHECK: cbnz r7, #12 @ encoding: [0x37,0xb9]
+@ CHECK: cbz r6, _bar @ encoding: [0x06'A',0xb1'A']
+ @ fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_cb
+@ CHECK: cbnz r6, _bar @ encoding: [0x06'A',0xb9'A']
+ @ fixup A - offset: 0, value: _bar, kind: fixup_arm_thumb_cb
+
+
+@------------------------------------------------------------------------------
+@ CDP/CDP2
+@------------------------------------------------------------------------------
+ cdp p7, #1, c1, c1, c1, #4
+ cdp2 p7, #1, c1, c1, c1, #4
+
+@ CHECK: cdp p7, #1, c1, c1, c1, #4 @ encoding: [0x11,0xee,0x81,0x17]
+@ CHECK: cdp2 p7, #1, c1, c1, c1, #4 @ encoding: [0x11,0xfe,0x81,0x17]
+
+
+@------------------------------------------------------------------------------
+@ CLREX
+@------------------------------------------------------------------------------
+ clrex
+ it ne
+ clrexne
+
+@ CHECK: clrex @ encoding: [0xbf,0xf3,0x2f,0x8f]
+@ CHECK: it ne @ encoding: [0x18,0xbf]
+@ CHECK: clrexne @ encoding: [0xbf,0xf3,0x2f,0x8f]
+
+
+@------------------------------------------------------------------------------
+@ CLZ
+@------------------------------------------------------------------------------
+ clz r1, r2
+ it eq
+ clzeq r1, r2
+
+@ CHECK: clz r1, r2 @ encoding: [0xb2,0xfa,0x82,0xf1]
+@ CHECK: it eq @ encoding: [0x08,0xbf]
+@ CHECK: clzeq r1, r2 @ encoding: [0xb2,0xfa,0x82,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ CMN
+@------------------------------------------------------------------------------
+ cmn r1, #0xf
+ cmn r8, r6
+ cmn r1, r6, lsl #10
+ cmn r1, r6, lsr #10
+ cmn sp, r6, lsr #10
+ cmn r1, r6, asr #10
+ cmn r1, r6, ror #10
+
+@ CHECK: cmn.w r1, #15 @ encoding: [0x11,0xf1,0x0f,0x0f]
+@ CHECK: cmn.w r8, r6 @ encoding: [0x18,0xeb,0x06,0x0f]
+@ CHECK: cmn.w r1, r6, lsl #10 @ encoding: [0x11,0xeb,0x86,0x2f]
+@ CHECK: cmn.w r1, r6, lsr #10 @ encoding: [0x11,0xeb,0x96,0x2f]
+@ CHECK: cmn.w sp, r6, lsr #10 @ encoding: [0x1d,0xeb,0x96,0x2f]
+@ CHECK: cmn.w r1, r6, asr #10 @ encoding: [0x11,0xeb,0xa6,0x2f]
+@ CHECK: cmn.w r1, r6, ror #10 @ encoding: [0x11,0xeb,0xb6,0x2f]
+
+
+@------------------------------------------------------------------------------
+@ CMP
+@------------------------------------------------------------------------------
+ cmp r5, #0xff00
+ cmp.w r4, r12
+ cmp r9, r6, lsl #12
+ cmp r3, r7, lsr #31
+ cmp sp, r6, lsr #1
+ cmp r2, r5, asr #24
+ cmp r1, r4, ror #15
+
+@ CHECK: cmp.w r5, #65280 @ encoding: [0xb5,0xf5,0x7f,0x4f]
+@ CHECK: cmp.w r4, r12 @ encoding: [0xb4,0xeb,0x0c,0x0f]
+@ CHECK: cmp.w r9, r6, lsl #12 @ encoding: [0xb9,0xeb,0x06,0x3f]
+@ CHECK: cmp.w r3, r7, lsr #31 @ encoding: [0xb3,0xeb,0xd7,0x7f]
+@ CHECK: cmp.w sp, r6, lsr #1 @ encoding: [0xbd,0xeb,0x56,0x0f]
+@ CHECK: cmp.w r2, r5, asr #24 @ encoding: [0xb2,0xeb,0x25,0x6f]
+@ CHECK: cmp.w r1, r4, ror #15 @ encoding: [0xb1,0xeb,0xf4,0x3f]
+
+
+@------------------------------------------------------------------------------
+@ DBG
+@------------------------------------------------------------------------------
+ dbg #5
+ dbg #0
+ dbg #15
+
+@ CHECK: dbg #5 @ encoding: [0xaf,0xf3,0xf5,0x80]
+@ CHECK: dbg #0 @ encoding: [0xaf,0xf3,0xf0,0x80]
+@ CHECK: dbg #15 @ encoding: [0xaf,0xf3,0xff,0x80]
+
+
+@------------------------------------------------------------------------------
+@ DMB
+@------------------------------------------------------------------------------
+ dmb sy
+ dmb st
+ dmb sh
+ dmb ish
+ dmb shst
+ dmb ishst
+ dmb un
+ dmb nsh
+ dmb unst
+ dmb nshst
+ dmb osh
+ dmb oshst
+ dmb
+
+@ CHECK: dmb sy @ encoding: [0xbf,0xf3,0x5f,0x8f]
+@ CHECK: dmb st @ encoding: [0xbf,0xf3,0x5e,0x8f]
+@ CHECK: dmb ish @ encoding: [0xbf,0xf3,0x5b,0x8f]
+@ CHECK: dmb ish @ encoding: [0xbf,0xf3,0x5b,0x8f]
+@ CHECK: dmb ishst @ encoding: [0xbf,0xf3,0x5a,0x8f]
+@ CHECK: dmb ishst @ encoding: [0xbf,0xf3,0x5a,0x8f]
+@ CHECK: dmb nsh @ encoding: [0xbf,0xf3,0x57,0x8f]
+@ CHECK: dmb nsh @ encoding: [0xbf,0xf3,0x57,0x8f]
+@ CHECK: dmb nshst @ encoding: [0xbf,0xf3,0x56,0x8f]
+@ CHECK: dmb nshst @ encoding: [0xbf,0xf3,0x56,0x8f]
+@ CHECK: dmb osh @ encoding: [0xbf,0xf3,0x53,0x8f]
+@ CHECK: dmb oshst @ encoding: [0xbf,0xf3,0x52,0x8f]
+@ CHECK: dmb sy @ encoding: [0xbf,0xf3,0x5f,0x8f]
+
+
+@------------------------------------------------------------------------------
+@ DSB
+@------------------------------------------------------------------------------
+ dsb sy
+ dsb st
+ dsb sh
+ dsb ish
+ dsb shst
+ dsb ishst
+ dsb un
+ dsb nsh
+ dsb unst
+ dsb nshst
+ dsb osh
+ dsb oshst
+ dsb
+
+@ CHECK: dsb sy @ encoding: [0xbf,0xf3,0x4f,0x8f]
+@ CHECK: dsb st @ encoding: [0xbf,0xf3,0x4e,0x8f]
+@ CHECK: dsb ish @ encoding: [0xbf,0xf3,0x4b,0x8f]
+@ CHECK: dsb ish @ encoding: [0xbf,0xf3,0x4b,0x8f]
+@ CHECK: dsb ishst @ encoding: [0xbf,0xf3,0x4a,0x8f]
+@ CHECK: dsb ishst @ encoding: [0xbf,0xf3,0x4a,0x8f]
+@ CHECK: dsb nsh @ encoding: [0xbf,0xf3,0x47,0x8f]
+@ CHECK: dsb nsh @ encoding: [0xbf,0xf3,0x47,0x8f]
+@ CHECK: dsb nshst @ encoding: [0xbf,0xf3,0x46,0x8f]
+@ CHECK: dsb nshst @ encoding: [0xbf,0xf3,0x46,0x8f]
+@ CHECK: dsb osh @ encoding: [0xbf,0xf3,0x43,0x8f]
+@ CHECK: dsb oshst @ encoding: [0xbf,0xf3,0x42,0x8f]
+@ CHECK: dsb sy @ encoding: [0xbf,0xf3,0x4f,0x8f]
+
+
+@------------------------------------------------------------------------------
+@ EOR
+@------------------------------------------------------------------------------
+ eor r4, r5, #0xf000
+ eor r4, r5, r6
+ eor r4, r5, r6, lsl #5
+ eor r4, r5, r6, lsr #5
+ eor r4, r5, r6, lsr #5
+ eor r4, r5, r6, asr #5
+ eor r4, r5, r6, ror #5
+
+@ CHECK: eor r4, r5, #61440 @ encoding: [0x85,0xf4,0x70,0x44]
+@ CHECK: eor.w r4, r5, r6 @ encoding: [0x85,0xea,0x06,0x04]
+@ CHECK: eor.w r4, r5, r6, lsl #5 @ encoding: [0x85,0xea,0x46,0x14]
+@ CHECK: eor.w r4, r5, r6, lsr #5 @ encoding: [0x85,0xea,0x56,0x14]
+@ CHECK: eor.w r4, r5, r6, lsr #5 @ encoding: [0x85,0xea,0x56,0x14]
+@ CHECK: eor.w r4, r5, r6, asr #5 @ encoding: [0x85,0xea,0x66,0x14]
+@ CHECK: eor.w r4, r5, r6, ror #5 @ encoding: [0x85,0xea,0x76,0x14]
+
+
+@------------------------------------------------------------------------------
+@ ISB
+@------------------------------------------------------------------------------
+ isb sy
+ isb
+
+@ CHECK: isb sy @ encoding: [0xbf,0xf3,0x6f,0x8f]
+@ CHECK: isb sy @ encoding: [0xbf,0xf3,0x6f,0x8f]
+
+
+@------------------------------------------------------------------------------
+@ IT
+@------------------------------------------------------------------------------
+@ Test encodings of a few full IT blocks, not just the IT instruction
+
+ iteet eq
+ addeq r0, r1, r2
+ nopne
+ subne r5, r6, r7
+ addeq r1, r2, #4
+
+@ CHECK: iteet eq @ encoding: [0x0d,0xbf]
+@ CHECK: addeq r0, r1, r2 @ encoding: [0x88,0x18]
+@ CHECK: nopne @ encoding: [0x00,0xbf]
+@ CHECK: subne r5, r6, r7 @ encoding: [0xf5,0x1b]
+@ CHECK: addeq r1, r2, #4 @ encoding: [0x11,0x1d]
+
+
+@------------------------------------------------------------------------------
+@ LDC{L}/LDC2{L}
+@------------------------------------------------------------------------------
+ ldc2 p0, c8, [r1, #4]
+ ldc2 p1, c7, [r2]
+ ldc2 p2, c6, [r3, #-224]
+ ldc2 p3, c5, [r4, #-120]!
+ ldc2 p4, c4, [r5], #16
+ ldc2 p5, c3, [r6], #-72
+ ldc2l p6, c2, [r7, #4]
+ ldc2l p7, c1, [r8]
+ ldc2l p8, c0, [r9, #-224]
+ ldc2l p9, c1, [r10, #-120]!
+ ldc2l p10, c2, [r11], #16
+ ldc2l p11, c3, [r12], #-72
+
+ ldc p12, c4, [r0, #4]
+ ldc p13, c5, [r1]
+ ldc p14, c6, [r2, #-224]
+ ldc p15, c7, [r3, #-120]!
+ ldc p5, c8, [r4], #16
+ ldc p4, c9, [r5], #-72
+ ldcl p3, c10, [r6, #4]
+ ldcl p2, c11, [r7]
+ ldcl p1, c12, [r8, #-224]
+ ldcl p0, c13, [r9, #-120]!
+ ldcl p6, c14, [r10], #16
+ ldcl p7, c15, [r11], #-72
+
+ ldc2 p2, c8, [r1], { 25 }
+
+@ CHECK: ldc2 p0, c8, [r1, #4] @ encoding: [0x91,0xfd,0x01,0x80]
+@ CHECK: ldc2 p1, c7, [r2] @ encoding: [0x92,0xfd,0x00,0x71]
+@ CHECK: ldc2 p2, c6, [r3, #-224] @ encoding: [0x13,0xfd,0x38,0x62]
+@ CHECK: ldc2 p3, c5, [r4, #-120]! @ encoding: [0x34,0xfd,0x1e,0x53]
+@ CHECK: ldc2 p4, c4, [r5], #16 @ encoding: [0xb5,0xfc,0x04,0x44]
+@ CHECK: ldc2 p5, c3, [r6], #-72 @ encoding: [0x36,0xfc,0x12,0x35]
+@ CHECK: ldc2l p6, c2, [r7, #4] @ encoding: [0xd7,0xfd,0x01,0x26]
+@ CHECK: ldc2l p7, c1, [r8] @ encoding: [0xd8,0xfd,0x00,0x17]
+@ CHECK: ldc2l p8, c0, [r9, #-224] @ encoding: [0x59,0xfd,0x38,0x08]
+@ CHECK: ldc2l p9, c1, [r10, #-120]! @ encoding: [0x7a,0xfd,0x1e,0x19]
+@ CHECK: ldc2l p10, c2, [r11], #16 @ encoding: [0xfb,0xfc,0x04,0x2a]
+@ CHECK: ldc2l p11, c3, [r12], #-72 @ encoding: [0x7c,0xfc,0x12,0x3b]
+
+@ CHECK: ldc p12, c4, [r0, #4] @ encoding: [0x90,0xed,0x01,0x4c]
+@ CHECK: ldc p13, c5, [r1] @ encoding: [0x91,0xed,0x00,0x5d]
+@ CHECK: ldc p14, c6, [r2, #-224] @ encoding: [0x12,0xed,0x38,0x6e]
+@ CHECK: ldc p15, c7, [r3, #-120]! @ encoding: [0x33,0xed,0x1e,0x7f]
+@ CHECK: ldc p5, c8, [r4], #16 @ encoding: [0xb4,0xec,0x04,0x85]
+@ CHECK: ldc p4, c9, [r5], #-72 @ encoding: [0x35,0xec,0x12,0x94]
+@ CHECK: ldcl p3, c10, [r6, #4] @ encoding: [0xd6,0xed,0x01,0xa3]
+@ CHECK: ldcl p2, c11, [r7] @ encoding: [0xd7,0xed,0x00,0xb2]
+@ CHECK: ldcl p1, c12, [r8, #-224] @ encoding: [0x58,0xed,0x38,0xc1]
+@ CHECK: ldcl p0, c13, [r9, #-120]! @ encoding: [0x79,0xed,0x1e,0xd0]
+@ CHECK: ldcl p6, c14, [r10], #16 @ encoding: [0xfa,0xec,0x04,0xe6]
+@ CHECK: ldcl p7, c15, [r11], #-72 @ encoding: [0x7b,0xec,0x12,0xf7]
+
+@ CHECK: ldc2 p2, c8, [r1], {25} @ encoding: [0x91,0xfc,0x19,0x82]
+
+
+@------------------------------------------------------------------------------
+@ LDMIA
+@------------------------------------------------------------------------------
+ ldmia.w r4, {r4, r5, r8, r9}
+ ldmia.w r4, {r5, r6}
+ ldmia.w r5!, {r3, r8}
+ ldm.w r4, {r4, r5, r8, r9}
+ ldm.w r4, {r5, r6}
+ ldm.w r5!, {r3, r8}
+ ldm.w r5!, {r1, r2}
+ ldm.w r2, {r1, r2}
+
+ ldmia r4, {r4, r5, r8, r9}
+ ldmia r4, {r5, r6}
+ ldmia r5!, {r3, r8}
+ ldm r4, {r4, r5, r8, r9}
+ ldm r4, {r5, r6}
+ ldm r5!, {r3, r8}
+ ldmfd r5!, {r3, r8}
+
+@ CHECK: ldm.w r4, {r4, r5, r8, r9} @ encoding: [0x94,0xe8,0x30,0x03]
+@ CHECK: ldm.w r4, {r5, r6} @ encoding: [0x94,0xe8,0x60,0x00]
+@ CHECK: ldm.w r5!, {r3, r8} @ encoding: [0xb5,0xe8,0x08,0x01]
+@ CHECK: ldm.w r4, {r4, r5, r8, r9} @ encoding: [0x94,0xe8,0x30,0x03]
+@ CHECK: ldm.w r4, {r5, r6} @ encoding: [0x94,0xe8,0x60,0x00]
+@ CHECK: ldm.w r5!, {r3, r8} @ encoding: [0xb5,0xe8,0x08,0x01]
+@ CHECK: ldm.w r5!, {r1, r2} @ encoding: [0xb5,0xe8,0x06,0x00]
+@ CHECK: ldm.w r2, {r1, r2} @ encoding: [0x92,0xe8,0x06,0x00]
+
+@ CHECK: ldm.w r4, {r4, r5, r8, r9} @ encoding: [0x94,0xe8,0x30,0x03]
+@ CHECK: ldm.w r4, {r5, r6} @ encoding: [0x94,0xe8,0x60,0x00]
+@ CHECK: ldm.w r5!, {r3, r8} @ encoding: [0xb5,0xe8,0x08,0x01]
+@ CHECK: ldm.w r4, {r4, r5, r8, r9} @ encoding: [0x94,0xe8,0x30,0x03]
+@ CHECK: ldm.w r4, {r5, r6} @ encoding: [0x94,0xe8,0x60,0x00]
+@ CHECK: ldm.w r5!, {r3, r8} @ encoding: [0xb5,0xe8,0x08,0x01]
+@ CHECK: ldm.w r5!, {r3, r8} @ encoding: [0xb5,0xe8,0x08,0x01]
+
+
+@------------------------------------------------------------------------------
+@ LDMDB
+@------------------------------------------------------------------------------
+ ldmdb r4, {r4, r5, r8, r9}
+ ldmdb r4, {r5, r6}
+ ldmdb r5!, {r3, r8}
+ ldmea r5!, {r3, r8}
+
+@ CHECK: ldmdb r4, {r4, r5, r8, r9} @ encoding: [0x14,0xe9,0x30,0x03]
+@ CHECK: ldmdb r4, {r5, r6} @ encoding: [0x14,0xe9,0x60,0x00]
+@ CHECK: ldmdb r5!, {r3, r8} @ encoding: [0x35,0xe9,0x08,0x01]
+@ CHECK: ldmdb r5!, {r3, r8} @ encoding: [0x35,0xe9,0x08,0x01]
+
+
+@------------------------------------------------------------------------------
+@ LDR(immediate)
+@------------------------------------------------------------------------------
+ ldr r5, [r5, #-4]
+ ldr r5, [r6, #32]
+ ldr r5, [r6, #33]
+ ldr r5, [r6, #257]
+ ldr.w pc, [r7, #257]
+ ldr r2, [r4, #255]!
+ ldr r8, [sp, #4]!
+ ldr lr, [sp, #-4]!
+ ldr r2, [r4], #255
+ ldr r8, [sp], #4
+ ldr lr, [sp], #-4
+
+@ CHECK: ldr r5, [r5, #-4] @ encoding: [0x55,0xf8,0x04,0x5c]
+@ CHECK: ldr r5, [r6, #32] @ encoding: [0x35,0x6a]
+@ CHECK: ldr.w r5, [r6, #33] @ encoding: [0xd6,0xf8,0x21,0x50]
+@ CHECK: ldr.w r5, [r6, #257] @ encoding: [0xd6,0xf8,0x01,0x51]
+@ CHECK: ldr.w pc, [r7, #257] @ encoding: [0xd7,0xf8,0x01,0xf1]
+@ CHECK: ldr r2, [r4, #255]! @ encoding: [0x54,0xf8,0xff,0x2f]
+@ CHECK: ldr r8, [sp, #4]! @ encoding: [0x5d,0xf8,0x04,0x8f]
+@ CHECK: ldr lr, [sp, #-4]! @ encoding: [0x5d,0xf8,0x04,0xed]
+@ CHECK: ldr r2, [r4], #255 @ encoding: [0x54,0xf8,0xff,0x2b]
+@ CHECK: ldr r8, [sp], #4 @ encoding: [0x5d,0xf8,0x04,0x8b]
+@ CHECK: ldr lr, [sp], #-4 @ encoding: [0x5d,0xf8,0x04,0xe9]
+
+
+@------------------------------------------------------------------------------
+@ LDR(literal)
+@------------------------------------------------------------------------------
+ ldr.w r5, _foo
+
+@ CHECK: ldr.w r5, _foo @ encoding: [0x5f'A',0xf8'A',A,0x50'A']
+ @ fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
+
+
+@------------------------------------------------------------------------------
+@ LDR(register)
+@------------------------------------------------------------------------------
+ ldr r1, [r8, r1]
+ ldr.w r4, [r5, r2]
+ ldr r6, [r0, r2, lsl #3]
+ ldr r8, [r8, r2, lsl #2]
+ ldr r7, [sp, r2, lsl #1]
+ ldr r7, [sp, r2, lsl #0]
+
+@ CHECK: ldr.w r1, [r8, r1] @ encoding: [0x58,0xf8,0x01,0x10]
+@ CHECK: ldr.w r4, [r5, r2] @ encoding: [0x55,0xf8,0x02,0x40]
+@ CHECK: ldr.w r6, [r0, r2, lsl #3] @ encoding: [0x50,0xf8,0x32,0x60]
+@ CHECK: ldr.w r8, [r8, r2, lsl #2] @ encoding: [0x58,0xf8,0x22,0x80]
+@ CHECK: ldr.w r7, [sp, r2, lsl #1] @ encoding: [0x5d,0xf8,0x12,0x70]
+@ CHECK: ldr.w r7, [sp, r2] @ encoding: [0x5d,0xf8,0x02,0x70]
+
+
+@------------------------------------------------------------------------------
+@ LDRB(immediate)
+@------------------------------------------------------------------------------
+ ldrb r5, [r5, #-4]
+ ldrb r5, [r6, #32]
+ ldrb r5, [r6, #33]
+ ldrb r5, [r6, #257]
+ ldrb.w lr, [r7, #257]
+ ldrb r5, [r8, #255]!
+ ldrb r2, [r5, #4]!
+ ldrb r1, [r4, #-4]!
+ ldrb lr, [r3], #255
+ ldrb r9, [r2], #4
+ ldrb r3, [sp], #-4
+
+@ CHECK: ldrb r5, [r5, #-4] @ encoding: [0x15,0xf8,0x04,0x5c]
+@ CHECK: ldrb.w r5, [r6, #32] @ encoding: [0x96,0xf8,0x20,0x50]
+@ CHECK: ldrb.w r5, [r6, #33] @ encoding: [0x96,0xf8,0x21,0x50]
+@ CHECK: ldrb.w r5, [r6, #257] @ encoding: [0x96,0xf8,0x01,0x51]
+@ CHECK: ldrb.w lr, [r7, #257] @ encoding: [0x97,0xf8,0x01,0xe1]
+@ CHECK: ldrb r5, [r8, #255]! @ encoding: [0x18,0xf8,0xff,0x5f]
+@ CHECK: ldrb r2, [r5, #4]! @ encoding: [0x15,0xf8,0x04,0x2f]
+@ CHECK: ldrb r1, [r4, #-4]! @ encoding: [0x14,0xf8,0x04,0x1d]
+@ CHECK: ldrb lr, [r3], #255 @ encoding: [0x13,0xf8,0xff,0xeb]
+@ CHECK: ldrb r9, [r2], #4 @ encoding: [0x12,0xf8,0x04,0x9b]
+@ CHECK: ldrb r3, [sp], #-4 @ encoding: [0x1d,0xf8,0x04,0x39]
+
+
+@------------------------------------------------------------------------------
+@ LDRB(register)
+@------------------------------------------------------------------------------
+ ldrb r1, [r8, r1]
+ ldrb.w r4, [r5, r2]
+ ldrb r6, [r0, r2, lsl #3]
+ ldrb r8, [r8, r2, lsl #2]
+ ldrb r7, [sp, r2, lsl #1]
+ ldrb r7, [sp, r2, lsl #0]
+
+@ CHECK: ldrb.w r1, [r8, r1] @ encoding: [0x18,0xf8,0x01,0x10]
+@ CHECK: ldrb.w r4, [r5, r2] @ encoding: [0x15,0xf8,0x02,0x40]
+@ CHECK: ldrb.w r6, [r0, r2, lsl #3] @ encoding: [0x10,0xf8,0x32,0x60]
+@ CHECK: ldrb.w r8, [r8, r2, lsl #2] @ encoding: [0x18,0xf8,0x22,0x80]
+@ CHECK: ldrb.w r7, [sp, r2, lsl #1] @ encoding: [0x1d,0xf8,0x12,0x70]
+@ CHECK: ldrb.w r7, [sp, r2] @ encoding: [0x1d,0xf8,0x02,0x70]
+
+
+@------------------------------------------------------------------------------
+@ LDRBT
+@------------------------------------------------------------------------------
+ ldrbt r1, [r2]
+ ldrbt r1, [r8, #0]
+ ldrbt r1, [r8, #3]
+ ldrbt r1, [r8, #255]
+
+@ CHECK: ldrbt r1, [r2] @ encoding: [0x12,0xf8,0x00,0x1e]
+@ CHECK: ldrbt r1, [r8] @ encoding: [0x18,0xf8,0x00,0x1e]
+@ CHECK: ldrbt r1, [r8, #3] @ encoding: [0x18,0xf8,0x03,0x1e]
+@ CHECK: ldrbt r1, [r8, #255] @ encoding: [0x18,0xf8,0xff,0x1e]
+
+
+@------------------------------------------------------------------------------
+@ LDRD
+@------------------------------------------------------------------------------
+ ldrd r3, r5, [r6, #24]
+ ldrd r3, r5, [r6, #24]!
+ ldrd r3, r5, [r6], #4
+ ldrd r3, r5, [r6], #-8
+ ldrd r3, r5, [r6]
+ ldrd r8, r1, [r3, #0]
+
+@ CHECK: ldrd r3, r5, [r6, #24] @ encoding: [0xd6,0xe9,0x06,0x35]
+@ CHECK: ldrd r3, r5, [r6, #24]! @ encoding: [0xf6,0xe9,0x06,0x35]
+@ CHECK: ldrd r3, r5, [r6], #4 @ encoding: [0xf6,0xe8,0x01,0x35]
+@ CHECK: ldrd r3, r5, [r6], #-8 @ encoding: [0x76,0xe8,0x02,0x35]
+@ CHECK: ldrd r3, r5, [r6] @ encoding: [0xd6,0xe9,0x00,0x35]
+@ CHECK: ldrd r8, r1, [r3] @ encoding: [0xd3,0xe9,0x00,0x81]
+
+
+@------------------------------------------------------------------------------
+@ FIXME: LDRD(literal)
+@------------------------------------------------------------------------------
+
+
+@------------------------------------------------------------------------------
+@ LDREX/LDREXB/LDREXH/LDREXD
+@------------------------------------------------------------------------------
+ ldrex r1, [r4]
+ ldrex r8, [r4, #0]
+ ldrex r2, [sp, #128]
+ ldrexb r5, [r7]
+ ldrexh r9, [r12]
+ ldrexd r9, r3, [r4]
+
+@ CHECK: ldrex r1, [r4] @ encoding: [0x54,0xe8,0x00,0x1f]
+@ CHECK: ldrex r8, [r4] @ encoding: [0x54,0xe8,0x00,0x8f]
+@ CHECK: ldrex r2, [sp, #128] @ encoding: [0x5d,0xe8,0x20,0x2f]
+@ CHECK: ldrexb r5, [r7] @ encoding: [0xd7,0xe8,0x4f,0x5f]
+@ CHECK: ldrexh r9, [r12] @ encoding: [0xdc,0xe8,0x5f,0x9f]
+@ CHECK: ldrexd r9, r3, [r4] @ encoding: [0xd4,0xe8,0x7f,0x93]
+
+
+@------------------------------------------------------------------------------
+@ LDRH(immediate)
+@------------------------------------------------------------------------------
+ ldrh r5, [r5, #-4]
+ ldrh r5, [r6, #32]
+ ldrh r5, [r6, #33]
+ ldrh r5, [r6, #257]
+ ldrh.w lr, [r7, #257]
+ ldrh r5, [r8, #255]!
+ ldrh r2, [r5, #4]!
+ ldrh r1, [r4, #-4]!
+ ldrh lr, [r3], #255
+ ldrh r9, [r2], #4
+ ldrh r3, [sp], #-4
+
+@ CHECK: ldrh r5, [r5, #-4] @ encoding: [0x35,0xf8,0x04,0x5c]
+@ CHECK: ldrh r5, [r6, #32] @ encoding: [0x35,0x8c]
+@ CHECK: ldrh.w r5, [r6, #33] @ encoding: [0xb6,0xf8,0x21,0x50]
+@ CHECK: ldrh.w r5, [r6, #257] @ encoding: [0xb6,0xf8,0x01,0x51]
+@ CHECK: ldrh.w lr, [r7, #257] @ encoding: [0xb7,0xf8,0x01,0xe1]
+@ CHECK: ldrh r5, [r8, #255]! @ encoding: [0x38,0xf8,0xff,0x5f]
+@ CHECK: ldrh r2, [r5, #4]! @ encoding: [0x35,0xf8,0x04,0x2f]
+@ CHECK: ldrh r1, [r4, #-4]! @ encoding: [0x34,0xf8,0x04,0x1d]
+@ CHECK: ldrh lr, [r3], #255 @ encoding: [0x33,0xf8,0xff,0xeb]
+@ CHECK: ldrh r9, [r2], #4 @ encoding: [0x32,0xf8,0x04,0x9b]
+@ CHECK: ldrh r3, [sp], #-4 @ encoding: [0x3d,0xf8,0x04,0x39]
+
+
+@------------------------------------------------------------------------------
+@ LDRH(register)
+@------------------------------------------------------------------------------
+ ldrh r1, [r8, r1]
+ ldrh.w r4, [r5, r2]
+ ldrh r6, [r0, r2, lsl #3]
+ ldrh r8, [r8, r2, lsl #2]
+ ldrh r7, [sp, r2, lsl #1]
+ ldrh r7, [sp, r2, lsl #0]
+
+@ CHECK: ldrh.w r1, [r8, r1] @ encoding: [0x38,0xf8,0x01,0x10]
+@ CHECK: ldrh.w r4, [r5, r2] @ encoding: [0x35,0xf8,0x02,0x40]
+@ CHECK: ldrh.w r6, [r0, r2, lsl #3] @ encoding: [0x30,0xf8,0x32,0x60]
+@ CHECK: ldrh.w r8, [r8, r2, lsl #2] @ encoding: [0x38,0xf8,0x22,0x80]
+@ CHECK: ldrh.w r7, [sp, r2, lsl #1] @ encoding: [0x3d,0xf8,0x12,0x70]
+@ CHECK: ldrh.w r7, [sp, r2] @ encoding: [0x3d,0xf8,0x02,0x70]
+
+
+@------------------------------------------------------------------------------
+@ LDRH(literal)
+@------------------------------------------------------------------------------
+ ldrh r5, _bar
+
+@ CHECK: ldrh.w r5, _bar @ encoding: [0xbf'A',0xf8'A',A,0x50'A']
+@ CHECK: @ fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
+
+
+@------------------------------------------------------------------------------
+@ LDRHT
+@------------------------------------------------------------------------------
+ ldrht r1, [r2]
+ ldrht r1, [r8, #0]
+ ldrht r1, [r8, #3]
+ ldrht r1, [r8, #255]
+
+@ CHECK: ldrht r1, [r2] @ encoding: [0x32,0xf8,0x00,0x1e]
+@ CHECK: ldrht r1, [r8] @ encoding: [0x38,0xf8,0x00,0x1e]
+@ CHECK: ldrht r1, [r8, #3] @ encoding: [0x38,0xf8,0x03,0x1e]
+@ CHECK: ldrht r1, [r8, #255] @ encoding: [0x38,0xf8,0xff,0x1e]
+
+
+@------------------------------------------------------------------------------
+@ LDRSB(immediate)
+@------------------------------------------------------------------------------
+ ldrsb r5, [r5, #-4]
+ ldrsb r5, [r6, #32]
+ ldrsb r5, [r6, #33]
+ ldrsb r5, [r6, #257]
+ ldrsb.w lr, [r7, #257]
+
+@ CHECK: ldrsb r5, [r5, #-4] @ encoding: [0x15,0xf9,0x04,0x5c]
+@ CHECK: ldrsb.w r5, [r6, #32] @ encoding: [0x96,0xf9,0x20,0x50]
+@ CHECK: ldrsb.w r5, [r6, #33] @ encoding: [0x96,0xf9,0x21,0x50]
+@ CHECK: ldrsb.w r5, [r6, #257] @ encoding: [0x96,0xf9,0x01,0x51]
+@ CHECK: ldrsb.w lr, [r7, #257] @ encoding: [0x97,0xf9,0x01,0xe1]
+
+
+@------------------------------------------------------------------------------
+@ LDRSB(register)
+@------------------------------------------------------------------------------
+ ldrsb r1, [r8, r1]
+ ldrsb.w r4, [r5, r2]
+ ldrsb r6, [r0, r2, lsl #3]
+ ldrsb r8, [r8, r2, lsl #2]
+ ldrsb r7, [sp, r2, lsl #1]
+ ldrsb r7, [sp, r2, lsl #0]
+ ldrsb r5, [r8, #255]!
+ ldrsb r2, [r5, #4]!
+ ldrsb r1, [r4, #-4]!
+ ldrsb lr, [r3], #255
+ ldrsb r9, [r2], #4
+ ldrsb r3, [sp], #-4
+
+@ CHECK: ldrsb.w r1, [r8, r1] @ encoding: [0x18,0xf9,0x01,0x10]
+@ CHECK: ldrsb.w r4, [r5, r2] @ encoding: [0x15,0xf9,0x02,0x40]
+@ CHECK: ldrsb.w r6, [r0, r2, lsl #3] @ encoding: [0x10,0xf9,0x32,0x60]
+@ CHECK: ldrsb.w r8, [r8, r2, lsl #2] @ encoding: [0x18,0xf9,0x22,0x80]
+@ CHECK: ldrsb.w r7, [sp, r2, lsl #1] @ encoding: [0x1d,0xf9,0x12,0x70]
+@ CHECK: ldrsb.w r7, [sp, r2] @ encoding: [0x1d,0xf9,0x02,0x70]
+@ CHECK: ldrsb r5, [r8, #255]! @ encoding: [0x18,0xf9,0xff,0x5f]
+@ CHECK: ldrsb r2, [r5, #4]! @ encoding: [0x15,0xf9,0x04,0x2f]
+@ CHECK: ldrsb r1, [r4, #-4]! @ encoding: [0x14,0xf9,0x04,0x1d]
+@ CHECK: ldrsb lr, [r3], #255 @ encoding: [0x13,0xf9,0xff,0xeb]
+@ CHECK: ldrsb r9, [r2], #4 @ encoding: [0x12,0xf9,0x04,0x9b]
+@ CHECK: ldrsb r3, [sp], #-4 @ encoding: [0x1d,0xf9,0x04,0x39]
+
+
+@------------------------------------------------------------------------------
+@ LDRSB(literal)
+@------------------------------------------------------------------------------
+ ldrsb r5, _bar
+
+@ CHECK: ldrsb.w r5, _bar @ encoding: [0x9f'A',0xf9'A',A,0x50'A']
+@ CHECK: @ fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
+
+
+@------------------------------------------------------------------------------
+@ LDRSBT
+@------------------------------------------------------------------------------
+ ldrsbt r1, [r2]
+ ldrsbt r1, [r8, #0]
+ ldrsbt r1, [r8, #3]
+ ldrsbt r1, [r8, #255]
+
+@ CHECK: ldrsbt r1, [r2] @ encoding: [0x12,0xf9,0x00,0x1e]
+@ CHECK: ldrsbt r1, [r8] @ encoding: [0x18,0xf9,0x00,0x1e]
+@ CHECK: ldrsbt r1, [r8, #3] @ encoding: [0x18,0xf9,0x03,0x1e]
+@ CHECK: ldrsbt r1, [r8, #255] @ encoding: [0x18,0xf9,0xff,0x1e]
+
+
+@------------------------------------------------------------------------------
+@ LDRSH(immediate)
+@------------------------------------------------------------------------------
+ ldrsh r5, [r5, #-4]
+ ldrsh r5, [r6, #32]
+ ldrsh r5, [r6, #33]
+ ldrsh r5, [r6, #257]
+ ldrsh.w lr, [r7, #257]
+
+@ CHECK: ldrsh r5, [r5, #-4] @ encoding: [0x35,0xf9,0x04,0x5c]
+@ CHECK: ldrsh.w r5, [r6, #32] @ encoding: [0xb6,0xf9,0x20,0x50]
+@ CHECK: ldrsh.w r5, [r6, #33] @ encoding: [0xb6,0xf9,0x21,0x50]
+@ CHECK: ldrsh.w r5, [r6, #257] @ encoding: [0xb6,0xf9,0x01,0x51]
+@ CHECK: ldrsh.w lr, [r7, #257] @ encoding: [0xb7,0xf9,0x01,0xe1]
+
+
+@------------------------------------------------------------------------------
+@ LDRSH(register)
+@------------------------------------------------------------------------------
+ ldrsh r1, [r8, r1]
+ ldrsh.w r4, [r5, r2]
+ ldrsh r6, [r0, r2, lsl #3]
+ ldrsh r8, [r8, r2, lsl #2]
+ ldrsh r7, [sp, r2, lsl #1]
+ ldrsh r7, [sp, r2, lsl #0]
+ ldrsh r5, [r8, #255]!
+ ldrsh r2, [r5, #4]!
+ ldrsh r1, [r4, #-4]!
+ ldrsh lr, [r3], #255
+ ldrsh r9, [r2], #4
+ ldrsh r3, [sp], #-4
+
+@ CHECK: ldrsh.w r1, [r8, r1] @ encoding: [0x38,0xf9,0x01,0x10]
+@ CHECK: ldrsh.w r4, [r5, r2] @ encoding: [0x35,0xf9,0x02,0x40]
+@ CHECK: ldrsh.w r6, [r0, r2, lsl #3] @ encoding: [0x30,0xf9,0x32,0x60]
+@ CHECK: ldrsh.w r8, [r8, r2, lsl #2] @ encoding: [0x38,0xf9,0x22,0x80]
+@ CHECK: ldrsh.w r7, [sp, r2, lsl #1] @ encoding: [0x3d,0xf9,0x12,0x70]
+@ CHECK: ldrsh.w r7, [sp, r2] @ encoding: [0x3d,0xf9,0x02,0x70]
+@ CHECK: ldrsh r5, [r8, #255]! @ encoding: [0x38,0xf9,0xff,0x5f]
+@ CHECK: ldrsh r2, [r5, #4]! @ encoding: [0x35,0xf9,0x04,0x2f]
+@ CHECK: ldrsh r1, [r4, #-4]! @ encoding: [0x34,0xf9,0x04,0x1d]
+@ CHECK: ldrsh lr, [r3], #255 @ encoding: [0x33,0xf9,0xff,0xeb]
+@ CHECK: ldrsh r9, [r2], #4 @ encoding: [0x32,0xf9,0x04,0x9b]
+@ CHECK: ldrsh r3, [sp], #-4 @ encoding: [0x3d,0xf9,0x04,0x39]
+
+
+@------------------------------------------------------------------------------
+@ LDRSH(literal)
+@------------------------------------------------------------------------------
+ ldrsh r5, _bar
+
+@ CHECK: ldrsh.w r5, _bar @ encoding: [0xbf'A',0xf9'A',A,0x50'A']
+@ CHECK: @ fixup A - offset: 0, value: _bar, kind: fixup_t2_ldst_pcrel_12
+
+@ TEMPORARILY DISABLED:
+@ ldrsh.w r4, [pc, #1435]
+@ : ldrsh.w r4, [pc, #1435] @ encoding: [0x3f,0xf9,0x9b,0x45]
+
+@------------------------------------------------------------------------------
+@ LDRSHT
+@------------------------------------------------------------------------------
+ ldrsht r1, [r2]
+ ldrsht r1, [r8, #0]
+ ldrsht r1, [r8, #3]
+ ldrsht r1, [r8, #255]
+
+@ CHECK: ldrsht r1, [r2] @ encoding: [0x32,0xf9,0x00,0x1e]
+@ CHECK: ldrsht r1, [r8] @ encoding: [0x38,0xf9,0x00,0x1e]
+@ CHECK: ldrsht r1, [r8, #3] @ encoding: [0x38,0xf9,0x03,0x1e]
+@ CHECK: ldrsht r1, [r8, #255] @ encoding: [0x38,0xf9,0xff,0x1e]
+
+
+@------------------------------------------------------------------------------
+@ LDRT
+@------------------------------------------------------------------------------
+ ldrt r1, [r2]
+ ldrt r2, [r6, #0]
+ ldrt r3, [r7, #3]
+ ldrt r4, [r9, #255]
+
+@ CHECK: ldrt r1, [r2] @ encoding: [0x52,0xf8,0x00,0x1e]
+@ CHECK: ldrt r2, [r6] @ encoding: [0x56,0xf8,0x00,0x2e]
+@ CHECK: ldrt r3, [r7, #3] @ encoding: [0x57,0xf8,0x03,0x3e]
+@ CHECK: ldrt r4, [r9, #255] @ encoding: [0x59,0xf8,0xff,0x4e]
+
+
+@------------------------------------------------------------------------------
+@ LSL (immediate)
+@------------------------------------------------------------------------------
+ lsl r2, r3, #12
+ lsls r8, r3, #31
+ lsls.w r2, r3, #1
+ lsl r2, r3, #4
+ lsls r2, r12, #15
+
+ lsl r3, #19
+ lsls r8, #2
+ lsls.w r7, #5
+ lsl.w r12, #21
+
+@ CHECK: lsl.w r2, r3, #12 @ encoding: [0x4f,0xea,0x03,0x32]
+@ CHECK: lsls.w r8, r3, #31 @ encoding: [0x5f,0xea,0xc3,0x78]
+@ CHECK: lsls.w r2, r3, #1 @ encoding: [0x5f,0xea,0x43,0x02]
+@ CHECK: lsl.w r2, r3, #4 @ encoding: [0x4f,0xea,0x03,0x12]
+@ CHECK: lsls.w r2, r12, #15 @ encoding: [0x5f,0xea,0xcc,0x32]
+
+@ CHECK: lsl.w r3, r3, #19 @ encoding: [0x4f,0xea,0xc3,0x43]
+@ CHECK: lsls.w r8, r8, #2 @ encoding: [0x5f,0xea,0x88,0x08]
+@ CHECK: lsls.w r7, r7, #5 @ encoding: [0x5f,0xea,0x47,0x17]
+@ CHECK: lsl.w r12, r12, #21 @ encoding: [0x4f,0xea,0x4c,0x5c]
+
+
+@------------------------------------------------------------------------------
+@ LSL (register)
+@------------------------------------------------------------------------------
+ lsl r3, r4, r2
+ lsl.w r1, r2
+ lsls r3, r4, r8
+
+@ CHECK: lsl.w r3, r4, r2 @ encoding: [0x04,0xfa,0x02,0xf3]
+@ CHECK: lsl.w r1, r1, r2 @ encoding: [0x01,0xfa,0x02,0xf1]
+@ CHECK: lsls.w r3, r4, r8 @ encoding: [0x14,0xfa,0x08,0xf3]
+
+
+@------------------------------------------------------------------------------
+@ LSR (immediate)
+@------------------------------------------------------------------------------
+ lsr r2, r3, #12
+ lsrs r8, r3, #32
+ lsrs.w r2, r3, #1
+ lsr r2, r3, #4
+ lsrs r2, r12, #15
+
+ lsr r3, #19
+ lsrs r8, #2
+ lsrs.w r7, #5
+ lsr.w r12, #21
+
+@ CHECK: lsr.w r2, r3, #12 @ encoding: [0x4f,0xea,0x13,0x32]
+@ CHECK: lsrs.w r8, r3, #32 @ encoding: [0x5f,0xea,0x13,0x08]
+@ CHECK: lsrs.w r2, r3, #1 @ encoding: [0x5f,0xea,0x53,0x02]
+@ CHECK: lsr.w r2, r3, #4 @ encoding: [0x4f,0xea,0x13,0x12]
+@ CHECK: lsrs.w r2, r12, #15 @ encoding: [0x5f,0xea,0xdc,0x32]
+
+@ CHECK: lsr.w r3, r3, #19 @ encoding: [0x4f,0xea,0xd3,0x43]
+@ CHECK: lsrs.w r8, r8, #2 @ encoding: [0x5f,0xea,0x98,0x08]
+@ CHECK: lsrs.w r7, r7, #5 @ encoding: [0x5f,0xea,0x57,0x17]
+@ CHECK: lsr.w r12, r12, #21 @ encoding: [0x4f,0xea,0x5c,0x5c]
+
+
+@------------------------------------------------------------------------------
+@ LSR (register)
+@------------------------------------------------------------------------------
+ lsr r3, r4, r2
+ lsr.w r1, r2
+ lsrs r3, r4, r8
+
+@ CHECK: lsr.w r3, r4, r2 @ encoding: [0x24,0xfa,0x02,0xf3]
+@ CHECK: lsr.w r1, r1, r2 @ encoding: [0x21,0xfa,0x02,0xf1]
+@ CHECK: lsrs.w r3, r4, r8 @ encoding: [0x34,0xfa,0x08,0xf3]
+
+@------------------------------------------------------------------------------
+@ MCR/MCR2
+@------------------------------------------------------------------------------
+ mcr p7, #1, r5, c1, c1, #4
+ mcr2 p7, #1, r5, c1, c1, #4
+
+@ CHECK: mcr p7, #1, r5, c1, c1, #4 @ encoding: [0x21,0xee,0x91,0x57]
+@ CHECK: mcr2 p7, #1, r5, c1, c1, #4 @ encoding: [0x21,0xfe,0x91,0x57]
+
+
+@------------------------------------------------------------------------------
+@ MCRR/MCRR2
+@------------------------------------------------------------------------------
+ mcrr p7, #15, r5, r4, c1
+ mcrr2 p7, #15, r5, r4, c1
+
+@ CHECK: mcrr p7, #15, r5, r4, c1 @ encoding: [0x44,0xec,0xf1,0x57]
+@ CHECK: mcrr2 p7, #15, r5, r4, c1 @ encoding: [0x44,0xfc,0xf1,0x57]
+
+
+@------------------------------------------------------------------------------
+@ MLA/MLS
+@------------------------------------------------------------------------------
+ mla r1,r2,r3,r4
+ mls r1,r2,r3,r4
+
+@ CHECK: mla r1, r2, r3, r4 @ encoding: [0x02,0xfb,0x03,0x41]
+@ CHECK: mls r1, r2, r3, r4 @ encoding: [0x02,0xfb,0x13,0x41]
+
+
+@------------------------------------------------------------------------------
+@ MOV(immediate)
+@------------------------------------------------------------------------------
+ movs r1, #21
+ movs.w r1, #21
+ movs r8, #21
+ movw r0, #65535
+ movw r1, #43777
+ movw r1, #43792
+ mov.w r0, #0x3fc0000
+ mov r0, #0x3fc0000
+ movs.w r0, #0x3fc0000
+ itte eq
+ movseq r1, #12
+ moveq r1, #12
+ movne.w r1, #12
+ mov.w r6, #450
+
+@ CHECK: movs r1, #21 @ encoding: [0x15,0x21]
+@ CHECK: movs.w r1, #21 @ encoding: [0x5f,0xf0,0x15,0x01]
+@ CHECK: movs.w r8, #21 @ encoding: [0x5f,0xf0,0x15,0x08]
+@ CHECK: movw r0, #65535 @ encoding: [0x4f,0xf6,0xff,0x70]
+@ CHECK: movw r1, #43777 @ encoding: [0x4a,0xf6,0x01,0x31]
+@ CHECK: movw r1, #43792 @ encoding: [0x4a,0xf6,0x10,0x31]
+@ CHECK: mov.w r0, #66846720 @ encoding: [0x4f,0xf0,0x7f,0x70]
+@ CHECK: mov.w r0, #66846720 @ encoding: [0x4f,0xf0,0x7f,0x70]
+@ CHECK: movs.w r0, #66846720 @ encoding: [0x5f,0xf0,0x7f,0x70]
+@ CHECK: itte eq @ encoding: [0x06,0xbf]
+@ CHECK: movseq.w r1, #12 @ encoding: [0x5f,0xf0,0x0c,0x01]
+@ CHECK: moveq r1, #12 @ encoding: [0x0c,0x21]
+@ CHECK: movne.w r1, #12 @ encoding: [0x4f,0xf0,0x0c,0x01]
+@ CHECK: mov.w r6, #450 @ encoding: [0x4f,0xf4,0xe1,0x76]
+
+
+@------------------------------------------------------------------------------
+@ MOVT
+@------------------------------------------------------------------------------
+ movt r3, #7
+ movt r6, #0xffff
+ it eq
+ movteq r4, #0xff0
+
+@ CHECK: movt r3, #7 @ encoding: [0xc0,0xf2,0x07,0x03]
+@ CHECK: movt r6, #65535 @ encoding: [0xcf,0xf6,0xff,0x76]
+@ CHECK: it eq @ encoding: [0x08,0xbf]
+@ CHECK: movteq r4, #4080 @ encoding: [0xc0,0xf6,0xf0,0x74]
+
+@------------------------------------------------------------------------------
+@ MRC/MRC2
+@------------------------------------------------------------------------------
+ mrc p14, #0, r1, c1, c2, #4
+ mrc2 p14, #0, r1, c1, c2, #4
+
+@ CHECK: mrc p14, #0, r1, c1, c2, #4 @ encoding: [0x11,0xee,0x92,0x1e]
+@ CHECK: mrc2 p14, #0, r1, c1, c2, #4 @ encoding: [0x11,0xfe,0x92,0x1e]
+
+
+@------------------------------------------------------------------------------
+@ MRRC/MRRC2
+@------------------------------------------------------------------------------
+ mrrc p7, #1, r5, r4, c1
+ mrrc2 p7, #1, r5, r4, c1
+
+@ CHECK: mrrc p7, #1, r5, r4, c1 @ encoding: [0x54,0xec,0x11,0x57]
+@ CHECK: mrrc2 p7, #1, r5, r4, c1 @ encoding: [0x54,0xfc,0x11,0x57]
+
+
+@------------------------------------------------------------------------------
+@ MRS
+@------------------------------------------------------------------------------
+ mrs r8, apsr
+ mrs r8, cpsr
+ mrs r8, spsr
+
+@ CHECK: mrs r8, apsr @ encoding: [0xef,0xf3,0x00,0x88]
+@ CHECK: mrs r8, apsr @ encoding: [0xef,0xf3,0x00,0x88]
+@ CHECK: mrs r8, spsr @ encoding: [0xff,0xf3,0x00,0x88]
+
+
+@------------------------------------------------------------------------------
+@ MSR
+@------------------------------------------------------------------------------
+ msr apsr, r1
+ msr apsr_g, r2
+ msr apsr_nzcvq, r3
+ msr APSR_nzcvq, r4
+ msr apsr_nzcvqg, r5
+ msr cpsr_fc, r6
+ msr cpsr_c, r7
+ msr cpsr_x, r8
+ msr cpsr_fc, r9
+ msr cpsr_all, r11
+ msr cpsr_fsx, r12
+ msr spsr_fc, r0
+ msr SPSR_fsxc, r5
+ msr cpsr_fsxc, r8
+
+@ CHECK: msr APSR_nzcvq, r1 @ encoding: [0x81,0xf3,0x00,0x88]
+@ CHECK: msr APSR_g, r2 @ encoding: [0x82,0xf3,0x00,0x84]
+@ CHECK: msr APSR_nzcvq, r3 @ encoding: [0x83,0xf3,0x00,0x88]
+@ CHECK: msr APSR_nzcvq, r4 @ encoding: [0x84,0xf3,0x00,0x88]
+@ CHECK: msr APSR_nzcvqg, r5 @ encoding: [0x85,0xf3,0x00,0x8c]
+@ CHECK: msr CPSR_fc, r6 @ encoding: [0x86,0xf3,0x00,0x89]
+@ CHECK: msr CPSR_c, r7 @ encoding: [0x87,0xf3,0x00,0x81]
+@ CHECK: msr CPSR_x, r8 @ encoding: [0x88,0xf3,0x00,0x82]
+@ CHECK: msr CPSR_fc, r9 @ encoding: [0x89,0xf3,0x00,0x89]
+@ CHECK: msr CPSR_fc, r11 @ encoding: [0x8b,0xf3,0x00,0x89]
+@ CHECK: msr CPSR_fsx, r12 @ encoding: [0x8c,0xf3,0x00,0x8e]
+@ CHECK: msr SPSR_fc, r0 @ encoding: [0x90,0xf3,0x00,0x89]
+@ CHECK: msr SPSR_fsxc, r5 @ encoding: [0x95,0xf3,0x00,0x8f]
+@ CHECK: msr CPSR_fsxc, r8 @ encoding: [0x88,0xf3,0x00,0x8f]
+
+
+@------------------------------------------------------------------------------
+@ MUL
+@------------------------------------------------------------------------------
+ muls r3, r4, r3
+ mul r3, r4, r3
+ mul r3, r4, r6
+ it eq
+ muleq r3, r4, r5
+
+@ CHECK: muls r3, r4, r3 @ encoding: [0x63,0x43]
+@ CHECK: mul r3, r4, r3 @ encoding: [0x04,0xfb,0x03,0xf3]
+@ CHECK: mul r3, r4, r6 @ encoding: [0x04,0xfb,0x06,0xf3]
+@ CHECK: it eq @ encoding: [0x08,0xbf]
+@ CHECK: muleq r3, r4, r5 @ encoding: [0x04,0xfb,0x05,0xf3]
+
+
+@------------------------------------------------------------------------------
+@ MVN(immediate)
+@------------------------------------------------------------------------------
+ mvns r8, #21
+ mvn r0, #0x3fc0000
+ mvns r0, #0x3fc0000
+ itte eq
+ mvnseq r1, #12
+ mvneq r1, #12
+ mvnne r1, #12
+
+@ CHECK: mvns r8, #21 @ encoding: [0x7f,0xf0,0x15,0x08]
+@ CHECK: mvn r0, #66846720 @ encoding: [0x6f,0xf0,0x7f,0x70]
+@ CHECK: mvns r0, #66846720 @ encoding: [0x7f,0xf0,0x7f,0x70]
+@ CHECK: itte eq @ encoding: [0x06,0xbf]
+@ CHECK: mvnseq r1, #12 @ encoding: [0x7f,0xf0,0x0c,0x01]
+@ CHECK: mvneq r1, #12 @ encoding: [0x6f,0xf0,0x0c,0x01]
+@ CHECK: mvnne r1, #12 @ encoding: [0x6f,0xf0,0x0c,0x01]
+
+
+@------------------------------------------------------------------------------
+@ MVN(register)
+@------------------------------------------------------------------------------
+ mvn r2, r3
+ mvns r2, r3
+ mvn r5, r6, lsl #19
+ mvn r5, r6, lsr #9
+ mvn r5, r6, asr #4
+ mvn r5, r6, ror #6
+ mvn r5, r6, rrx
+ it eq
+ mvneq r2, r3
+
+@ CHECK: mvn.w r2, r3 @ encoding: [0x6f,0xea,0x03,0x02]
+@ CHECK: mvns r2, r3 @ encoding: [0xda,0x43]
+@ CHECK: mvn.w r5, r6, lsl #19 @ encoding: [0x6f,0xea,0xc6,0x45]
+@ CHECK: mvn.w r5, r6, lsr #9 @ encoding: [0x6f,0xea,0x56,0x25]
+@ CHECK: mvn.w r5, r6, asr #4 @ encoding: [0x6f,0xea,0x26,0x15]
+@ CHECK: mvn.w r5, r6, ror #6 @ encoding: [0x6f,0xea,0xb6,0x15]
+@ CHECK: mvn.w r5, r6, rrx @ encoding: [0x6f,0xea,0x36,0x05]
+@ CHECK: it eq @ encoding: [0x08,0xbf]
+@ CHECK: mvneq r2, r3 @ encoding: [0xda,0x43]
+
+@------------------------------------------------------------------------------
+@ NOP
+@------------------------------------------------------------------------------
+ nop.w
+
+@ CHECK: nop.w @ encoding: [0xaf,0xf3,0x00,0x80]
+
+
+@------------------------------------------------------------------------------
+@ ORN
+@------------------------------------------------------------------------------
+ orn r4, r5, #0xf000
+ orn r4, r5, r6
+ orns r4, r5, r6
+ orn r4, r5, r6, lsl #5
+ orns r4, r5, r6, lsr #5
+ orn r4, r5, r6, lsr #5
+ orns r4, r5, r6, asr #5
+ orn r4, r5, r6, ror #5
+
+@ CHECK: orn r4, r5, #61440 @ encoding: [0x65,0xf4,0x70,0x44]
+@ CHECK: orn r4, r5, r6 @ encoding: [0x65,0xea,0x06,0x04]
+@ CHECK: orns r4, r5, r6 @ encoding: [0x75,0xea,0x06,0x04]
+@ CHECK: orn r4, r5, r6, lsl #5 @ encoding: [0x65,0xea,0x46,0x14]
+@ CHECK: orns r4, r5, r6, lsr #5 @ encoding: [0x75,0xea,0x56,0x14]
+@ CHECK: orn r4, r5, r6, lsr #5 @ encoding: [0x65,0xea,0x56,0x14]
+@ CHECK: orns r4, r5, r6, asr #5 @ encoding: [0x75,0xea,0x66,0x14]
+@ CHECK: orn r4, r5, r6, ror #5 @ encoding: [0x65,0xea,0x76,0x14]
+
+
+@------------------------------------------------------------------------------
+@ ORR
+@------------------------------------------------------------------------------
+ orr r4, r5, #0xf000
+ orr r4, r5, r6
+ orr r4, r5, r6, lsl #5
+ orrs r4, r5, r6, lsr #5
+ orr r4, r5, r6, lsr #5
+ orrs r4, r5, r6, asr #5
+ orr r4, r5, r6, ror #5
+
+@ CHECK: orr r4, r5, #61440 @ encoding: [0x45,0xf4,0x70,0x44]
+@ CHECK: orr.w r4, r5, r6 @ encoding: [0x45,0xea,0x06,0x04]
+@ CHECK: orr.w r4, r5, r6, lsl #5 @ encoding: [0x45,0xea,0x46,0x14]
+@ CHECK: orrs.w r4, r5, r6, lsr #5 @ encoding: [0x55,0xea,0x56,0x14]
+@ CHECK: orr.w r4, r5, r6, lsr #5 @ encoding: [0x45,0xea,0x56,0x14]
+@ CHECK: orrs.w r4, r5, r6, asr #5 @ encoding: [0x55,0xea,0x66,0x14]
+@ CHECK: orr.w r4, r5, r6, ror #5 @ encoding: [0x45,0xea,0x76,0x14]
+
+
+@------------------------------------------------------------------------------
+@ PKH
+@------------------------------------------------------------------------------
+ pkhbt r2, r2, r3
+ pkhbt r2, r2, r3, lsl #31
+ pkhbt r2, r2, r3, lsl #0
+ pkhbt r2, r2, r3, lsl #15
+
+ pkhtb r2, r2, r3
+ pkhtb r2, r2, r3, asr #31
+ pkhtb r2, r2, r3, asr #15
+
+@ CHECK: pkhbt r2, r2, r3 @ encoding: [0xc2,0xea,0x03,0x02]
+@ CHECK: pkhbt r2, r2, r3, lsl #31 @ encoding: [0xc2,0xea,0xc3,0x72]
+@ CHECK: pkhbt r2, r2, r3 @ encoding: [0xc2,0xea,0x03,0x02]
+@ CHECK: pkhbt r2, r2, r3, lsl #15 @ encoding: [0xc2,0xea,0xc3,0x32]
+
+@ CHECK: pkhbt r2, r2, r3 @ encoding: [0xc2,0xea,0x03,0x02]
+@ CHECK: pkhtb r2, r2, r3, asr #31 @ encoding: [0xc2,0xea,0xe3,0x72]
+@ CHECK: pkhtb r2, r2, r3, asr #15 @ encoding: [0xc2,0xea,0xe3,0x32]
+
+
+@------------------------------------------------------------------------------
+@ PLD(immediate)
+@------------------------------------------------------------------------------
+ pld [r5, #-4]
+ pld [r6, #32]
+ pld [r6, #33]
+ pld [r6, #257]
+ pld [r7, #257]
+
+@ CHECK: pld [r5, #-4] @ encoding: [0x15,0xf8,0x04,0xfc]
+@ CHECK: pld [r6, #32] @ encoding: [0x96,0xf8,0x20,0xf0]
+@ CHECK: pld [r6, #33] @ encoding: [0x96,0xf8,0x21,0xf0]
+@ CHECK: pld [r6, #257] @ encoding: [0x96,0xf8,0x01,0xf1]
+@ CHECK: pld [r7, #257] @ encoding: [0x97,0xf8,0x01,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ PLD(literal)
+@------------------------------------------------------------------------------
+ pld _foo
+
+@ CHECK: pld _foo @ encoding: [0x9f'A',0xf8'A',A,0xf0'A']
+ @ fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
+
+
+@------------------------------------------------------------------------------
+@ PLD(register)
+@------------------------------------------------------------------------------
+ pld [r8, r1]
+ pld [r5, r2]
+ pld [r0, r2, lsl #3]
+ pld [r8, r2, lsl #2]
+ pld [sp, r2, lsl #1]
+ pld [sp, r2, lsl #0]
+
+@ CHECK: pld [r8, r1] @ encoding: [0x18,0xf8,0x01,0xf0]
+@ CHECK: pld [r5, r2] @ encoding: [0x15,0xf8,0x02,0xf0]
+@ CHECK: pld [r0, r2, lsl #3] @ encoding: [0x10,0xf8,0x32,0xf0]
+@ CHECK: pld [r8, r2, lsl #2] @ encoding: [0x18,0xf8,0x22,0xf0]
+@ CHECK: pld [sp, r2, lsl #1] @ encoding: [0x1d,0xf8,0x12,0xf0]
+@ CHECK: pld [sp, r2] @ encoding: [0x1d,0xf8,0x02,0xf0]
+
+@------------------------------------------------------------------------------
+@ PLI(immediate)
+@------------------------------------------------------------------------------
+ pli [r5, #-4]
+ pli [r6, #32]
+ pli [r6, #33]
+ pli [r6, #257]
+ pli [r7, #257]
+
+@ CHECK: pli [r5, #-4] @ encoding: [0x15,0xf9,0x04,0xfc]
+@ CHECK: pli [r6, #32] @ encoding: [0x96,0xf9,0x20,0xf0]
+@ CHECK: pli [r6, #33] @ encoding: [0x96,0xf9,0x21,0xf0]
+@ CHECK: pli [r6, #257] @ encoding: [0x96,0xf9,0x01,0xf1]
+@ CHECK: pli [r7, #257] @ encoding: [0x97,0xf9,0x01,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ PLI(literal)
+@------------------------------------------------------------------------------
+ pli _foo
+
+
+@ CHECK: pli _foo @ encoding: [0x9f'A',0xf9'A',A,0xf0'A']
+ @ fixup A - offset: 0, value: _foo, kind: fixup_t2_ldst_pcrel_12
+
+
+@------------------------------------------------------------------------------
+@ PLI(register)
+@------------------------------------------------------------------------------
+ pli [r8, r1]
+ pli [r5, r2]
+ pli [r0, r2, lsl #3]
+ pli [r8, r2, lsl #2]
+ pli [sp, r2, lsl #1]
+ pli [sp, r2, lsl #0]
+
+@ CHECK: pli [r8, r1] @ encoding: [0x18,0xf9,0x01,0xf0]
+@ CHECK: pli [r5, r2] @ encoding: [0x15,0xf9,0x02,0xf0]
+@ CHECK: pli [r0, r2, lsl #3] @ encoding: [0x10,0xf9,0x32,0xf0]
+@ CHECK: pli [r8, r2, lsl #2] @ encoding: [0x18,0xf9,0x22,0xf0]
+@ CHECK: pli [sp, r2, lsl #1] @ encoding: [0x1d,0xf9,0x12,0xf0]
+@ CHECK: pli [sp, r2] @ encoding: [0x1d,0xf9,0x02,0xf0]
+
+
+@------------------------------------------------------------------------------
+@ QADD/QADD16/QADD8
+@------------------------------------------------------------------------------
+ qadd r1, r2, r3
+ qadd16 r1, r2, r3
+ qadd8 r1, r2, r3
+ itte gt
+ qaddgt r1, r2, r3
+ qadd16gt r1, r2, r3
+ qadd8le r1, r2, r3
+
+@ CHECK: qadd r1, r2, r3 @ encoding: [0x83,0xfa,0x82,0xf1]
+@ CHECK: qadd16 r1, r2, r3 @ encoding: [0x92,0xfa,0x13,0xf1]
+@ CHECK: qadd8 r1, r2, r3 @ encoding: [0x82,0xfa,0x13,0xf1]
+@ CHECK: itte gt @ encoding: [0xc6,0xbf]
+@ CHECK: qaddgt r1, r2, r3 @ encoding: [0x83,0xfa,0x82,0xf1]
+@ CHECK: qadd16gt r1, r2, r3 @ encoding: [0x92,0xfa,0x13,0xf1]
+@ CHECK: qadd8le r1, r2, r3 @ encoding: [0x82,0xfa,0x13,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ QDADD/QDSUB
+@------------------------------------------------------------------------------
+ qdadd r6, r7, r8
+ qdsub r6, r7, r8
+ itt hi
+ qdaddhi r6, r7, r8
+ qdsubhi r6, r7, r8
+
+@ CHECK: qdadd r6, r7, r8 @ encoding: [0x88,0xfa,0x97,0xf6]
+@ CHECK: qdsub r6, r7, r8 @ encoding: [0x88,0xfa,0xb7,0xf6]
+@ CHECK: itt hi @ encoding: [0x84,0xbf]
+@ CHECK: qdaddhi r6, r7, r8 @ encoding: [0x88,0xfa,0x97,0xf6]
+@ CHECK: qdsubhi r6, r7, r8 @ encoding: [0x88,0xfa,0xb7,0xf6]
+
+
+@------------------------------------------------------------------------------
+@ QSAX
+@------------------------------------------------------------------------------
+ qsax r9, r12, r0
+ it eq
+ qsaxeq r9, r12, r0
+
+@ CHECK: qsax r9, r12, r0 @ encoding: [0xec,0xfa,0x10,0xf9]
+@ CHECK: it eq @ encoding: [0x08,0xbf]
+@ CHECK: qsaxeq r9, r12, r0 @ encoding: [0xec,0xfa,0x10,0xf9]
+
+
+@------------------------------------------------------------------------------
+@ QSUB/QSUB16/QSUB8
+@------------------------------------------------------------------------------
+ qsub r1, r2, r3
+ qsub16 r1, r2, r3
+ qsub8 r1, r2, r3
+ itet le
+ qsuble r1, r2, r3
+ qsub16gt r1, r2, r3
+ qsub8le r1, r2, r3
+
+@ CHECK: qsub r1, r2, r3 @ encoding: [0x83,0xfa,0xa2,0xf1]
+@ CHECK: qsub16 r1, r2, r3 @ encoding: [0xd2,0xfa,0x13,0xf1]
+@ CHECK: qsub8 r1, r2, r3 @ encoding: [0xc2,0xfa,0x13,0xf1]
+@ CHECK: itet le @ encoding: [0xd6,0xbf]
+@ CHECK: qsuble r1, r2, r3 @ encoding: [0x83,0xfa,0xa2,0xf1]
+@ CHECK: qsub16gt r1, r2, r3 @ encoding: [0xd2,0xfa,0x13,0xf1]
+@ CHECK: qsub8le r1, r2, r3 @ encoding: [0xc2,0xfa,0x13,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ RBIT
+@------------------------------------------------------------------------------
+ rbit r1, r2
+ it ne
+ rbitne r1, r2
+
+@ CHECK: rbit r1, r2 @ encoding: [0x92,0xfa,0xa2,0xf1]
+@ CHECK: it ne @ encoding: [0x18,0xbf]
+@ CHECK: rbitne r1, r2 @ encoding: [0x92,0xfa,0xa2,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ REV
+@------------------------------------------------------------------------------
+ rev.w r1, r2
+ rev r2, r8
+ itt ne
+ revne r1, r2
+ revne r1, r8
+
+@ CHECK: rev.w r1, r2 @ encoding: [0x92,0xfa,0x82,0xf1]
+@ CHECK: rev.w r2, r8 @ encoding: [0x98,0xfa,0x88,0xf2]
+@ CHECK: itt ne @ encoding: [0x1c,0xbf]
+@ CHECK: revne r1, r2 @ encoding: [0x11,0xba]
+@ CHECK: revne.w r1, r8 @ encoding: [0x98,0xfa,0x88,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ REV16
+@------------------------------------------------------------------------------
+ rev16.w r1, r2
+ rev16 r2, r8
+ itt ne
+ rev16ne r1, r2
+ rev16ne r1, r8
+
+@ CHECK: rev16.w r1, r2 @ encoding: [0x92,0xfa,0x92,0xf1]
+@ CHECK: rev16.w r2, r8 @ encoding: [0x98,0xfa,0x98,0xf2]
+@ CHECK: itt ne @ encoding: [0x1c,0xbf]
+@ CHECK: rev16ne r1, r2 @ encoding: [0x51,0xba]
+@ CHECK: rev16ne.w r1, r8 @ encoding: [0x98,0xfa,0x98,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ REVSH
+@------------------------------------------------------------------------------
+ revsh.w r1, r2
+ revsh r2, r8
+ itt ne
+ revshne r1, r2
+ revshne r1, r8
+
+@ CHECK: revsh.w r1, r2 @ encoding: [0x92,0xfa,0xb2,0xf1]
+@ CHECK: revsh.w r2, r8 @ encoding: [0x98,0xfa,0xb8,0xf2]
+@ CHECK: itt ne @ encoding: [0x1c,0xbf]
+@ CHECK: revshne r1, r2 @ encoding: [0xd1,0xba]
+@ CHECK: revshne.w r1, r8 @ encoding: [0x98,0xfa,0xb8,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ ROR (immediate)
+@------------------------------------------------------------------------------
+ ror r2, r3, #12
+ rors r8, r3, #31
+ rors.w r2, r3, #1
+ ror r2, r3, #4
+ rors r2, r12, #15
+
+ ror r3, #19
+ rors r8, #2
+ rors.w r7, #5
+ ror.w r12, #21
+
+@ CHECK: ror.w r2, r3, #12 @ encoding: [0x4f,0xea,0x33,0x32]
+@ CHECK: rors.w r8, r3, #31 @ encoding: [0x5f,0xea,0xf3,0x78]
+@ CHECK: rors.w r2, r3, #1 @ encoding: [0x5f,0xea,0x73,0x02]
+@ CHECK: ror.w r2, r3, #4 @ encoding: [0x4f,0xea,0x33,0x12]
+@ CHECK: rors.w r2, r12, #15 @ encoding: [0x5f,0xea,0xfc,0x32]
+
+@ CHECK: ror.w r3, r3, #19 @ encoding: [0x4f,0xea,0xf3,0x43]
+@ CHECK: rors.w r8, r8, #2 @ encoding: [0x5f,0xea,0xb8,0x08]
+@ CHECK: rors.w r7, r7, #5 @ encoding: [0x5f,0xea,0x77,0x17]
+@ CHECK: ror.w r12, r12, #21 @ encoding: [0x4f,0xea,0x7c,0x5c]
+
+
+@------------------------------------------------------------------------------
+@ ROR (register)
+@------------------------------------------------------------------------------
+ ror r3, r4, r2
+ ror.w r1, r2
+ rors r3, r4, r8
+
+@ CHECK: ror.w r3, r4, r2 @ encoding: [0x64,0xfa,0x02,0xf3]
+@ CHECK: ror.w r1, r1, r2 @ encoding: [0x61,0xfa,0x02,0xf1]
+@ CHECK: rors.w r3, r4, r8 @ encoding: [0x74,0xfa,0x08,0xf3]
+
+
+@------------------------------------------------------------------------------
+@ RRX
+@------------------------------------------------------------------------------
+ rrx r1, r2
+ rrxs r1, r2
+ ite lt
+ rrxlt r9, r12
+ rrxsge r8, r3
+
+@ CHECK: rrx r1, r2 @ encoding: [0x4f,0xea,0x32,0x01]
+@ CHECK: rrxs r1, r2 @ encoding: [0x5f,0xea,0x32,0x01]
+@ CHECK: ite lt @ encoding: [0xb4,0xbf]
+@ CHECK: rrxlt r9, r12 @ encoding: [0x4f,0xea,0x3c,0x09]
+@ CHECK: rrxsge r8, r3 @ encoding: [0x5f,0xea,0x33,0x08]
+
+@------------------------------------------------------------------------------
+@ RSB (immediate)
+@------------------------------------------------------------------------------
+ rsb r2, r5, #0xff000
+ rsbs r3, r12, #0xf
+ rsb r1, #0xff
+ rsb r1, r1, #0xff
+
+@ CHECK: rsb.w r2, r5, #1044480 @ encoding: [0xc5,0xf5,0x7f,0x22]
+@ CHECK: rsbs.w r3, r12, #15 @ encoding: [0xdc,0xf1,0x0f,0x03]
+@ CHECK: rsb.w r1, r1, #255 @ encoding: [0xc1,0xf1,0xff,0x01]
+@ CHECK: rsb.w r1, r1, #255 @ encoding: [0xc1,0xf1,0xff,0x01]
+
+
+@------------------------------------------------------------------------------
+@ RSB (register)
+@------------------------------------------------------------------------------
+ rsb r4, r8
+ rsb r4, r9, r8
+ rsb r1, r4, r8, asr #3
+ rsbs r2, r1, r7, lsl #1
+
+@ CHECK: rsb r4, r4, r8 @ encoding: [0xc4,0xeb,0x08,0x04]
+@ CHECK: rsb r4, r9, r8 @ encoding: [0xc9,0xeb,0x08,0x04]
+@ CHECK: rsb r1, r4, r8, asr #3 @ encoding: [0xc4,0xeb,0xe8,0x01]
+@ CHECK: rsbs r2, r1, r7, lsl #1 @ encoding: [0xd1,0xeb,0x47,0x02]
+
+
+@------------------------------------------------------------------------------
+@ SADD16
+@------------------------------------------------------------------------------
+ sadd16 r3, r4, r8
+ it ne
+ sadd16ne r3, r4, r8
+
+@ CHECK: sadd16 r3, r4, r8 @ encoding: [0x94,0xfa,0x08,0xf3]
+@ CHECK: it ne @ encoding: [0x18,0xbf]
+@ CHECK: sadd16ne r3, r4, r8 @ encoding: [0x94,0xfa,0x08,0xf3]
+
+
+@------------------------------------------------------------------------------
+@ SADD8
+@------------------------------------------------------------------------------
+ sadd8 r3, r4, r8
+ it ne
+ sadd8ne r3, r4, r8
+
+@ CHECK: sadd8 r3, r4, r8 @ encoding: [0x84,0xfa,0x08,0xf3]
+@ CHECK: it ne @ encoding: [0x18,0xbf]
+@ CHECK: sadd8ne r3, r4, r8 @ encoding: [0x84,0xfa,0x08,0xf3]
+
+
+@------------------------------------------------------------------------------
+@ SASX
+@------------------------------------------------------------------------------
+ saddsubx r9, r2, r7
+ it ne
+ saddsubxne r2, r5, r6
+ sasx r9, r2, r7
+ it ne
+ sasxne r2, r5, r6
+
+@ CHECK: sasx r9, r2, r7 @ encoding: [0xa2,0xfa,0x07,0xf9]
+@ CHECK: it ne @ encoding: [0x18,0xbf]
+@ CHECK: sasxne r2, r5, r6 @ encoding: [0xa5,0xfa,0x06,0xf2]
+@ CHECK: sasx r9, r2, r7 @ encoding: [0xa2,0xfa,0x07,0xf9]
+@ CHECK: it ne @ encoding: [0x18,0xbf]
+@ CHECK: sasxne r2, r5, r6 @ encoding: [0xa5,0xfa,0x06,0xf2]
+
+
+@------------------------------------------------------------------------------
+@ SBC (immediate)
+@------------------------------------------------------------------------------
+ sbc r0, r1, #4
+ sbcs r0, r1, #0
+ sbc r1, r2, #255
+ sbc r3, r7, #0x00550055
+ sbc r8, r12, #0xaa00aa00
+ sbc r9, r7, #0xa5a5a5a5
+ sbc r5, r3, #0x87000000
+ sbc r4, r2, #0x7f800000
+ sbc r4, r2, #0x00000680
+
+@ CHECK: sbc r0, r1, #4 @ encoding: [0x61,0xf1,0x04,0x00]
+@ CHECK: sbcs r0, r1, #0 @ encoding: [0x71,0xf1,0x00,0x00]
+@ CHECK: sbc r1, r2, #255 @ encoding: [0x62,0xf1,0xff,0x01]
+@ CHECK: sbc r3, r7, #5570645 @ encoding: [0x67,0xf1,0x55,0x13]
+@ CHECK: sbc r8, r12, #2852170240 @ encoding: [0x6c,0xf1,0xaa,0x28]
+@ CHECK: sbc r9, r7, #2779096485 @ encoding: [0x67,0xf1,0xa5,0x39]
+@ CHECK: sbc r5, r3, #2264924160 @ encoding: [0x63,0xf1,0x07,0x45]
+@ CHECK: sbc r4, r2, #2139095040 @ encoding: [0x62,0xf1,0xff,0x44]
+@ CHECK: sbc r4, r2, #1664 @ encoding: [0x62,0xf5,0xd0,0x64]
+
+
+@------------------------------------------------------------------------------
+@ SBC (register)
+@------------------------------------------------------------------------------
+ sbc r4, r5, r6
+ sbcs r4, r5, r6
+ sbc.w r9, r1, r3
+ sbcs.w r9, r1, r3
+ sbc r0, r1, r3, ror #4
+ sbcs r0, r1, r3, lsl #7
+ sbc.w r0, r1, r3, lsr #31
+ sbcs.w r0, r1, r3, asr #32
+
+@ CHECK: sbc.w r4, r5, r6 @ encoding: [0x65,0xeb,0x06,0x04]
+@ CHECK: sbcs.w r4, r5, r6 @ encoding: [0x75,0xeb,0x06,0x04]
+@ CHECK: sbc.w r9, r1, r3 @ encoding: [0x61,0xeb,0x03,0x09]
+@ CHECK: sbcs.w r9, r1, r3 @ encoding: [0x71,0xeb,0x03,0x09]
+@ CHECK: sbc.w r0, r1, r3, ror #4 @ encoding: [0x61,0xeb,0x33,0x10]
+@ CHECK: sbcs.w r0, r1, r3, lsl #7 @ encoding: [0x71,0xeb,0xc3,0x10]
+@ CHECK: sbc.w r0, r1, r3, lsr #31 @ encoding: [0x61,0xeb,0xd3,0x70]
+@ CHECK: sbcs.w r0, r1, r3, asr #32 @ encoding: [0x71,0xeb,0x23,0x00]
+
+
+@------------------------------------------------------------------------------
+@ SBFX
+@------------------------------------------------------------------------------
+ sbfx r4, r5, #16, #1
+ it gt
+ sbfxgt r4, r5, #16, #16
+
+@ CHECK: sbfx r4, r5, #16, #1 @ encoding: [0x45,0xf3,0x00,0x44]
+@ CHECK: it gt @ encoding: [0xc8,0xbf]
+@ CHECK: sbfxgt r4, r5, #16, #16 @ encoding: [0x45,0xf3,0x0f,0x44]
+
+
+@------------------------------------------------------------------------------
+@ SEL
+@------------------------------------------------------------------------------
+ sel r5, r9, r2
+ it le
+ selle r5, r9, r2
+
+@ CHECK: sel r5, r9, r2 @ encoding: [0xa9,0xfa,0x82,0xf5]
+@ CHECK: it le @ encoding: [0xd8,0xbf]
+@ CHECK: selle r5, r9, r2 @ encoding: [0xa9,0xfa,0x82,0xf5]
+
+
+@------------------------------------------------------------------------------
+@ SEV
+@------------------------------------------------------------------------------
+ sev.w
+ it eq
+ seveq.w
+
+@ CHECK: sev.w @ encoding: [0xaf,0xf3,0x04,0x80]
+@ CHECK: it eq @ encoding: [0x08,0xbf]
+@ CHECK: seveq.w @ encoding: [0xaf,0xf3,0x04,0x80]
+
+
+@------------------------------------------------------------------------------
+@ SADD16/SADD8
+@------------------------------------------------------------------------------
+ sadd16 r1, r2, r3
+ sadd8 r1, r2, r3
+ ite gt
+ sadd16gt r1, r2, r3
+ sadd8le r1, r2, r3
+
+@ CHECK: sadd16 r1, r2, r3 @ encoding: [0x92,0xfa,0x03,0xf1]
+@ CHECK: sadd8 r1, r2, r3 @ encoding: [0x82,0xfa,0x03,0xf1]
+@ CHECK: ite gt @ encoding: [0xcc,0xbf]
+@ CHECK: sadd16gt r1, r2, r3 @ encoding: [0x92,0xfa,0x03,0xf1]
+@ CHECK: sadd8le r1, r2, r3 @ encoding: [0x82,0xfa,0x03,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ SHASX
+@------------------------------------------------------------------------------
+ shasx r4, r8, r2
+ it gt
+ shasxgt r4, r8, r2
+ shaddsubx r4, r8, r2
+ it gt
+ shaddsubxgt r4, r8, r2
+
+@ CHECK: shasx r4, r8, r2 @ encoding: [0xa8,0xfa,0x22,0xf4]
+@ CHECK: it gt @ encoding: [0xc8,0xbf]
+@ CHECK: shasxgt r4, r8, r2 @ encoding: [0xa8,0xfa,0x22,0xf4]
+@ CHECK: shasx r4, r8, r2 @ encoding: [0xa8,0xfa,0x22,0xf4]
+@ CHECK: it gt @ encoding: [0xc8,0xbf]
+@ CHECK: shasxgt r4, r8, r2 @ encoding: [0xa8,0xfa,0x22,0xf4]
+
+
+@------------------------------------------------------------------------------
+@ SHASX
+@------------------------------------------------------------------------------
+ shsax r4, r8, r2
+ it gt
+ shsaxgt r4, r8, r2
+ shsubaddx r4, r8, r2
+ it gt
+ shsubaddxgt r4, r8, r2
+
+@ CHECK: shsax r4, r8, r2 @ encoding: [0xe8,0xfa,0x22,0xf4]
+@ CHECK: it gt @ encoding: [0xc8,0xbf]
+@ CHECK: shsaxgt r4, r8, r2 @ encoding: [0xe8,0xfa,0x22,0xf4]
+@ CHECK: shsax r4, r8, r2 @ encoding: [0xe8,0xfa,0x22,0xf4]
+@ CHECK: it gt @ encoding: [0xc8,0xbf]
+@ CHECK: shsaxgt r4, r8, r2 @ encoding: [0xe8,0xfa,0x22,0xf4]
+
+
+@------------------------------------------------------------------------------
+@ SHSUB16/SHSUB8
+@------------------------------------------------------------------------------
+ shsub16 r4, r8, r2
+ shsub8 r4, r8, r2
+ itt gt
+ shsub16gt r4, r8, r2
+ shsub8gt r4, r8, r2
+
+@ CHECK: shsub16 r4, r8, r2 @ encoding: [0xd8,0xfa,0x22,0xf4]
+@ CHECK: shsub8 r4, r8, r2 @ encoding: [0xc8,0xfa,0x22,0xf4]
+@ CHECK: itt gt @ encoding: [0xc4,0xbf]
+@ CHECK: shsub16gt r4, r8, r2 @ encoding: [0xd8,0xfa,0x22,0xf4]
+@ CHECK: shsub8gt r4, r8, r2 @ encoding: [0xc8,0xfa,0x22,0xf4]
+
+
+@------------------------------------------------------------------------------
+@ SMLABB/SMLABT/SMLATB/SMLATT
+@------------------------------------------------------------------------------
+ smlabb r3, r1, r9, r0
+ smlabt r5, r6, r4, r1
+ smlatb r4, r2, r3, r2
+ smlatt r8, r3, r8, r4
+ itete gt
+ smlabbgt r3, r1, r9, r0
+ smlabtle r5, r6, r4, r1
+ smlatbgt r4, r2, r3, r2
+ smlattle r8, r3, r8, r4
+
+@ CHECK: smlabb r3, r1, r9, r0 @ encoding: [0x11,0xfb,0x09,0x03]
+@ CHECK: smlabt r5, r6, r4, r1 @ encoding: [0x16,0xfb,0x14,0x15]
+@ CHECK: smlatb r4, r2, r3, r2 @ encoding: [0x12,0xfb,0x23,0x24]
+@ CHECK: smlatt r8, r3, r8, r4 @ encoding: [0x13,0xfb,0x38,0x48]
+@ CHECK: itete gt @ encoding: [0xcb,0xbf]
+@ CHECK: smlabbgt r3, r1, r9, r0 @ encoding: [0x11,0xfb,0x09,0x03]
+@ CHECK: smlabtle r5, r6, r4, r1 @ encoding: [0x16,0xfb,0x14,0x15]
+@ CHECK: smlatbgt r4, r2, r3, r2 @ encoding: [0x12,0xfb,0x23,0x24]
+@ CHECK: smlattle r8, r3, r8, r4 @ encoding: [0x13,0xfb,0x38,0x48]
+
+
+@------------------------------------------------------------------------------
+@ SMLAD/SMLADX
+@------------------------------------------------------------------------------
+ smlad r2, r3, r5, r8
+ smladx r2, r3, r5, r8
+ itt hi
+ smladhi r2, r3, r5, r8
+ smladxhi r2, r3, r5, r8
+
+@ CHECK: smlad r2, r3, r5, r8 @ encoding: [0x23,0xfb,0x05,0x82]
+@ CHECK: smladx r2, r3, r5, r8 @ encoding: [0x23,0xfb,0x15,0x82]
+@ CHECK: itt hi @ encoding: [0x84,0xbf]
+@ CHECK: smladhi r2, r3, r5, r8 @ encoding: [0x23,0xfb,0x05,0x82]
+@ CHECK: smladxhi r2, r3, r5, r8 @ encoding: [0x23,0xfb,0x15,0x82]
+
+
+@------------------------------------------------------------------------------
+@ SMLAL
+@------------------------------------------------------------------------------
+ smlal r2, r3, r5, r8
+ it eq
+ smlaleq r2, r3, r5, r8
+
+@ CHECK: smlal r2, r3, r5, r8 @ encoding: [0xc5,0xfb,0x08,0x23]
+@ CHECK: it eq @ encoding: [0x08,0xbf]
+@ CHECK: smlaleq r2, r3, r5, r8 @ encoding: [0xc5,0xfb,0x08,0x23]
+
+
+@------------------------------------------------------------------------------
+@ SMLALBB/SMLALBT/SMLALTB/SMLALTT
+@------------------------------------------------------------------------------
+ smlalbb r3, r1, r9, r0
+ smlalbt r5, r6, r4, r1
+ smlaltb r4, r2, r3, r2
+ smlaltt r8, r3, r8, r4
+ iteet ge
+ smlalbbge r3, r1, r9, r0
+ smlalbtlt r5, r6, r4, r1
+ smlaltblt r4, r2, r3, r2
+ smlalttge r8, r3, r8, r4
+
+@ CHECK: smlalbb r3, r1, r9, r0 @ encoding: [0xc9,0xfb,0x80,0x31]
+@ CHECK: smlalbt r5, r6, r4, r1 @ encoding: [0xc4,0xfb,0x91,0x56]
+@ CHECK: smlaltb r4, r2, r3, r2 @ encoding: [0xc3,0xfb,0xa2,0x42]
+@ CHECK: smlaltt r8, r3, r8, r4 @ encoding: [0xc8,0xfb,0xb4,0x83]
+@ CHECK: iteet ge @ encoding: [0xad,0xbf]
+@ CHECK: smlalbbge r3, r1, r9, r0 @ encoding: [0xc9,0xfb,0x80,0x31]
+@ CHECK: smlalbtlt r5, r6, r4, r1 @ encoding: [0xc4,0xfb,0x91,0x56]
+@ CHECK: smlaltblt r4, r2, r3, r2 @ encoding: [0xc3,0xfb,0xa2,0x42]
+@ CHECK: smlalttge r8, r3, r8, r4 @ encoding: [0xc8,0xfb,0xb4,0x83]
+
+
+@------------------------------------------------------------------------------
+@ SMLALD/SMLALDX
+@------------------------------------------------------------------------------
+ smlald r2, r3, r5, r8
+ smlaldx r2, r3, r5, r8
+ ite eq
+ smlaldeq r2, r3, r5, r8
+ smlaldxne r2, r3, r5, r8
+
+@ CHECK: smlald r2, r3, r5, r8 @ encoding: [0xc5,0xfb,0xc8,0x23]
+@ CHECK: smlaldx r2, r3, r5, r8 @ encoding: [0xc5,0xfb,0xd8,0x23]
+@ CHECK: ite eq @ encoding: [0x0c,0xbf]
+@ CHECK: smlaldeq r2, r3, r5, r8 @ encoding: [0xc5,0xfb,0xc8,0x23]
+@ CHECK: smlaldxne r2, r3, r5, r8 @ encoding: [0xc5,0xfb,0xd8,0x23]
+
+
+@------------------------------------------------------------------------------
+@ SMLAWB/SMLAWT
+@------------------------------------------------------------------------------
+ smlawb r2, r3, r10, r8
+ smlawt r8, r3, r5, r9
+ ite eq
+ smlawbeq r2, r7, r5, r8
+ smlawtne r1, r3, r0, r8
+
+@ CHECK: smlawb r2, r3, r10, r8 @ encoding: [0x33,0xfb,0x0a,0x82]
+@ CHECK: smlawt r8, r3, r5, r9 @ encoding: [0x33,0xfb,0x15,0x98]
+@ CHECK: ite eq @ encoding: [0x0c,0xbf]
+@ CHECK: smlawbeq r2, r7, r5, r8 @ encoding: [0x37,0xfb,0x05,0x82]
+@ CHECK: smlawtne r1, r3, r0, r8 @ encoding: [0x33,0xfb,0x10,0x81]
+
+
+@------------------------------------------------------------------------------
+@ SMLSD/SMLSDX
+@------------------------------------------------------------------------------
+ smlsd r2, r3, r5, r8
+ smlsdx r2, r3, r5, r8
+ ite le
+ smlsdle r2, r3, r5, r8
+ smlsdxgt r2, r3, r5, r8
+
+@ CHECK: smlsd r2, r3, r5, r8 @ encoding: [0x43,0xfb,0x05,0x82]
+@ CHECK: smlsdx r2, r3, r5, r8 @ encoding: [0x43,0xfb,0x15,0x82]
+@ CHECK: ite le @ encoding: [0xd4,0xbf]
+@ CHECK: smlsdle r2, r3, r5, r8 @ encoding: [0x43,0xfb,0x05,0x82]
+@ CHECK: smlsdxgt r2, r3, r5, r8 @ encoding: [0x43,0xfb,0x15,0x82]
+
+
+@------------------------------------------------------------------------------
+@ SMLSLD/SMLSLDX
+@------------------------------------------------------------------------------
+ smlsld r2, r9, r5, r1
+ smlsldx r4, r11, r2, r8
+ ite ge
+ smlsldge r8, r2, r5, r6
+ smlsldxlt r1, r0, r3, r8
+
+@ CHECK: smlsld r2, r9, r5, r1 @ encoding: [0xd5,0xfb,0xc1,0x29]
+@ CHECK: smlsldx r4, r11, r2, r8 @ encoding: [0xd2,0xfb,0xd8,0x4b]
+@ CHECK: ite ge @ encoding: [0xac,0xbf]
+@ CHECK: smlsldge r8, r2, r5, r6 @ encoding: [0xd5,0xfb,0xc6,0x82]
+@ CHECK: smlsldxlt r1, r0, r3, r8 @ encoding: [0xd3,0xfb,0xd8,0x10]
+
+
+@------------------------------------------------------------------------------
+@ SMMLA/SMMLAR
+@------------------------------------------------------------------------------
+ smmla r1, r2, r3, r4
+ smmlar r4, r3, r2, r1
+ ite lo
+ smmlalo r1, r2, r3, r4
+ smmlarcs r4, r3, r2, r1
+
+@ CHECK: smmla r1, r2, r3, r4 @ encoding: [0x52,0xfb,0x03,0x41]
+@ CHECK: smmlar r4, r3, r2, r1 @ encoding: [0x53,0xfb,0x12,0x14]
+@ CHECK: ite lo @ encoding: [0x34,0xbf]
+@ CHECK: smmlalo r1, r2, r3, r4 @ encoding: [0x52,0xfb,0x03,0x41]
+@ CHECK: smmlarhs r4, r3, r2, r1 @ encoding: [0x53,0xfb,0x12,0x14]
+
+
+@------------------------------------------------------------------------------
+@ SMMLS/SMMLSR
+@------------------------------------------------------------------------------
+ smmls r1, r2, r3, r4
+ smmlsr r4, r3, r2, r1
+ ite lo
+ smmlslo r1, r2, r3, r4
+ smmlsrcs r4, r3, r2, r1
+
+@ CHECK: smmls r1, r2, r3, r4 @ encoding: [0x62,0xfb,0x03,0x41]
+@ CHECK: smmlsr r4, r3, r2, r1 @ encoding: [0x63,0xfb,0x12,0x14]
+@ CHECK: ite lo @ encoding: [0x34,0xbf]
+@ CHECK: smmlslo r1, r2, r3, r4 @ encoding: [0x62,0xfb,0x03,0x41]
+@ CHECK: smmlsrhs r4, r3, r2, r1 @ encoding: [0x63,0xfb,0x12,0x14]
+
+
+@------------------------------------------------------------------------------
+@ SMMUL/SMMULR
+@------------------------------------------------------------------------------
+ smmul r2, r3, r4
+ smmulr r3, r2, r1
+ ite cc
+ smmulcc r2, r3, r4
+ smmulrhs r3, r2, r1
+
+@ CHECK: smmul r2, r3, r4 @ encoding: [0x53,0xfb,0x04,0xf2]
+@ CHECK: smmulr r3, r2, r1 @ encoding: [0x52,0xfb,0x11,0xf3]
+@ CHECK: ite lo @ encoding: [0x34,0xbf]
+@ CHECK: smmullo r2, r3, r4 @ encoding: [0x53,0xfb,0x04,0xf2]
+@ CHECK: smmulrhs r3, r2, r1 @ encoding: [0x52,0xfb,0x11,0xf3]
+
+
+@------------------------------------------------------------------------------
+@ SMUAD/SMUADX
+@------------------------------------------------------------------------------
+ smuad r2, r3, r4
+ smuadx r3, r2, r1
+ ite lt
+ smuadlt r2, r3, r4
+ smuadxge r3, r2, r1
+
+@ CHECK: smuad r2, r3, r4 @ encoding: [0x23,0xfb,0x04,0xf2]
+@ CHECK: smuadx r3, r2, r1 @ encoding: [0x22,0xfb,0x11,0xf3]
+@ CHECK: ite lt @ encoding: [0xb4,0xbf]
+@ CHECK: smuadlt r2, r3, r4 @ encoding: [0x23,0xfb,0x04,0xf2]
+@ CHECK: smuadxge r3, r2, r1 @ encoding: [0x22,0xfb,0x11,0xf3]
+
+
+@------------------------------------------------------------------------------
+@ SMULBB/SMULBT/SMULTB/SMULTT
+@------------------------------------------------------------------------------
+ smulbb r3, r9, r0
+ smulbt r5, r4, r1
+ smultb r4, r2, r2
+ smultt r8, r3, r4
+ itete ge
+ smulbbge r1, r9, r0
+ smulbtlt r5, r6, r4
+ smultbge r2, r3, r2
+ smulttlt r8, r3, r4
+
+@ CHECK: smulbb r3, r9, r0 @ encoding: [0x19,0xfb,0x00,0xf3]
+@ CHECK: smulbt r5, r4, r1 @ encoding: [0x14,0xfb,0x11,0xf5]
+@ CHECK: smultb r4, r2, r2 @ encoding: [0x12,0xfb,0x22,0xf4]
+@ CHECK: smultt r8, r3, r4 @ encoding: [0x13,0xfb,0x34,0xf8]
+@ CHECK: itete ge @ encoding: [0xab,0xbf]
+@ CHECK: smulbbge r1, r9, r0 @ encoding: [0x19,0xfb,0x00,0xf1]
+@ CHECK: smulbtlt r5, r6, r4 @ encoding: [0x16,0xfb,0x14,0xf5]
+@ CHECK: smultbge r2, r3, r2 @ encoding: [0x13,0xfb,0x22,0xf2]
+@ CHECK: smulttlt r8, r3, r4 @ encoding: [0x13,0xfb,0x34,0xf8]
+
+
+@------------------------------------------------------------------------------
+@ SMULL
+@------------------------------------------------------------------------------
+ smull r3, r9, r0, r1
+ it eq
+ smulleq r8, r3, r4, r5
+
+@ CHECK: smull r3, r9, r0, r1 @ encoding: [0x80,0xfb,0x01,0x39]
+@ CHECK: it eq @ encoding: [0x08,0xbf]
+@ CHECK: smulleq r8, r3, r4, r5 @ encoding: [0x84,0xfb,0x05,0x83]
+
+
+@------------------------------------------------------------------------------
+@ SMULWB/SMULWT
+@------------------------------------------------------------------------------
+ smulwb r3, r9, r0
+ smulwt r3, r9, r2
+ ite gt
+ smulwbgt r3, r9, r0
+ smulwtle r3, r9, r2
+
+@ CHECK: smulwb r3, r9, r0 @ encoding: [0x39,0xfb,0x00,0xf3]
+@ CHECK: smulwt r3, r9, r2 @ encoding: [0x39,0xfb,0x12,0xf3]
+@ CHECK: ite gt @ encoding: [0xcc,0xbf]
+@ CHECK: smulwbgt r3, r9, r0 @ encoding: [0x39,0xfb,0x00,0xf3]
+@ CHECK: smulwtle r3, r9, r2 @ encoding: [0x39,0xfb,0x12,0xf3]
+
+
+@------------------------------------------------------------------------------
+@ SMUSD/SMUSDX
+@------------------------------------------------------------------------------
+ smusd r3, r0, r1
+ smusdx r3, r9, r2
+ ite eq
+ smusdeq r8, r3, r2
+ smusdxne r7, r4, r3
+
+@ CHECK: smusd r3, r0, r1 @ encoding: [0x40,0xfb,0x01,0xf3]
+@ CHECK: smusdx r3, r9, r2 @ encoding: [0x49,0xfb,0x12,0xf3]
+@ CHECK: ite eq @ encoding: [0x0c,0xbf]
+@ CHECK: smusdeq r8, r3, r2 @ encoding: [0x43,0xfb,0x02,0xf8]
+@ CHECK: smusdxne r7, r4, r3 @ encoding: [0x44,0xfb,0x13,0xf7]
+
+
+@------------------------------------------------------------------------------
+@ SRS
+@------------------------------------------------------------------------------
+ srsdb sp, #1
+ srsia sp, #0
+
+ srsdb sp!, #19
+ srsia sp!, #2
+
+ srsea sp, #10
+ srsfd sp, #9
+
+ srsea sp!, #5
+ srsfd sp!, #5
+
+ srs sp, #5
+ srs sp!, #5
+
+@ CHECK: srsdb sp, #1 @ encoding: [0x0d,0xe8,0x01,0xc0]
+@ CHECK: srsia sp, #0 @ encoding: [0x8d,0xe9,0x00,0xc0]
+@ CHECK: srsdb sp!, #19 @ encoding: [0x2d,0xe8,0x13,0xc0]
+@ CHECK: srsia sp!, #2 @ encoding: [0xad,0xe9,0x02,0xc0]
+@ CHECK: srsdb sp, #10 @ encoding: [0x0d,0xe8,0x0a,0xc0]
+@ CHECK: srsia sp, #9 @ encoding: [0x8d,0xe9,0x09,0xc0]
+@ CHECK: srsdb sp!, #5 @ encoding: [0x2d,0xe8,0x05,0xc0]
+@ CHECK: srsia sp!, #5 @ encoding: [0xad,0xe9,0x05,0xc0]
+@ CHECK: srsia sp, #5 @ encoding: [0x8d,0xe9,0x05,0xc0]
+@ CHECK: srsia sp!, #5 @ encoding: [0xad,0xe9,0x05,0xc0]
+
+
+@------------------------------------------------------------------------------
+@ SSAT
+@------------------------------------------------------------------------------
+ ssat r8, #1, r10
+ ssat r8, #1, r10, lsl #0
+ ssat r8, #1, r10, lsl #31
+ ssat r8, #1, r10, asr #1
+
+@ CHECK: ssat r8, #1, r10 @ encoding: [0x0a,0xf3,0x00,0x08]
+@ CHECK: ssat r8, #1, r10 @ encoding: [0x0a,0xf3,0x00,0x08]
+@ CHECK: ssat r8, #1, r10, lsl #31 @ encoding: [0x0a,0xf3,0xc0,0x78]
+@ CHECK: ssat r8, #1, r10, asr #1 @ encoding: [0x2a,0xf3,0x40,0x08]
+
+
+@------------------------------------------------------------------------------
+@ SSAT16
+@------------------------------------------------------------------------------
+ ssat16 r2, #1, r7
+ ssat16 r3, #16, r5
+
+@ CHECK: ssat16 r2, #1, r7 @ encoding: [0x27,0xf3,0x00,0x02]
+@ CHECK: ssat16 r3, #16, r5 @ encoding: [0x25,0xf3,0x0f,0x03]
+
+
+@------------------------------------------------------------------------------
+@ SSAX
+@------------------------------------------------------------------------------
+ ssubaddx r2, r3, r4
+ it lt
+ ssubaddxlt r2, r3, r4
+ ssax r2, r3, r4
+ it lt
+ ssaxlt r2, r3, r4
+
+@ CHECK: ssax r2, r3, r4 @ encoding: [0xe3,0xfa,0x04,0xf2]
+@ CHECK: it lt @ encoding: [0xb8,0xbf]
+@ CHECK: ssaxlt r2, r3, r4 @ encoding: [0xe3,0xfa,0x04,0xf2]
+@ CHECK: ssax r2, r3, r4 @ encoding: [0xe3,0xfa,0x04,0xf2]
+@ CHECK: it lt @ encoding: [0xb8,0xbf]
+@ CHECK: ssaxlt r2, r3, r4 @ encoding: [0xe3,0xfa,0x04,0xf2]
+
+
+@------------------------------------------------------------------------------
+@ SSUB16/SSUB8
+@------------------------------------------------------------------------------
+ ssub16 r1, r0, r6
+ ssub8 r9, r2, r4
+ ite ne
+ ssub16ne r5, r3, r2
+ ssub8eq r5, r1, r2
+
+@ CHECK: ssub16 r1, r0, r6 @ encoding: [0xd0,0xfa,0x06,0xf1]
+@ CHECK: ssub8 r9, r2, r4 @ encoding: [0xc2,0xfa,0x04,0xf9]
+@ CHECK: ite ne @ encoding: [0x14,0xbf]
+@ CHECK: ssub16ne r5, r3, r2 @ encoding: [0xd3,0xfa,0x02,0xf5]
+@ CHECK: ssub8eq r5, r1, r2 @ encoding: [0xc1,0xfa,0x02,0xf5]
+
+
+@------------------------------------------------------------------------------
+@ STC{L}/STC2{L}
+@------------------------------------------------------------------------------
+ stc2 p0, c8, [r1, #4]
+ stc2 p1, c7, [r2]
+ stc2 p2, c6, [r3, #-224]
+ stc2 p3, c5, [r4, #-120]!
+ stc2 p4, c4, [r5], #16
+ stc2 p5, c3, [r6], #-72
+ stc2l p6, c2, [r7, #4]
+ stc2l p7, c1, [r8]
+ stc2l p8, c0, [r9, #-224]
+ stc2l p9, c1, [r10, #-120]!
+ stc2l p10, c2, [r11], #16
+ stc2l p11, c3, [r12], #-72
+
+ stc p12, c4, [r0, #4]
+ stc p13, c5, [r1]
+ stc p14, c6, [r2, #-224]
+ stc p15, c7, [r3, #-120]!
+ stc p5, c8, [r4], #16
+ stc p4, c9, [r5], #-72
+ stcl p3, c10, [r6, #4]
+ stcl p2, c11, [r7]
+ stcl p1, c12, [r8, #-224]
+ stcl p0, c13, [r9, #-120]!
+ stcl p6, c14, [r10], #16
+ stcl p7, c15, [r11], #-72
+
+ stc2 p2, c8, [r1], { 25 }
+
+@ CHECK: stc2 p0, c8, [r1, #4] @ encoding: [0x81,0xfd,0x01,0x80]
+@ CHECK: stc2 p1, c7, [r2] @ encoding: [0x82,0xfd,0x00,0x71]
+@ CHECK: stc2 p2, c6, [r3, #-224] @ encoding: [0x03,0xfd,0x38,0x62]
+@ CHECK: stc2 p3, c5, [r4, #-120]! @ encoding: [0x24,0xfd,0x1e,0x53]
+@ CHECK: stc2 p4, c4, [r5], #16 @ encoding: [0xa5,0xfc,0x04,0x44]
+@ CHECK: stc2 p5, c3, [r6], #-72 @ encoding: [0x26,0xfc,0x12,0x35]
+@ CHECK: stc2l p6, c2, [r7, #4] @ encoding: [0xc7,0xfd,0x01,0x26]
+@ CHECK: stc2l p7, c1, [r8] @ encoding: [0xc8,0xfd,0x00,0x17]
+@ CHECK: stc2l p8, c0, [r9, #-224] @ encoding: [0x49,0xfd,0x38,0x08]
+@ CHECK: stc2l p9, c1, [r10, #-120]! @ encoding: [0x6a,0xfd,0x1e,0x19]
+@ CHECK: stc2l p10, c2, [r11], #16 @ encoding: [0xeb,0xfc,0x04,0x2a]
+@ CHECK: stc2l p11, c3, [r12], #-72 @ encoding: [0x6c,0xfc,0x12,0x3b]
+
+@ CHECK: stc p12, c4, [r0, #4] @ encoding: [0x80,0xed,0x01,0x4c]
+@ CHECK: stc p13, c5, [r1] @ encoding: [0x81,0xed,0x00,0x5d]
+@ CHECK: stc p14, c6, [r2, #-224] @ encoding: [0x02,0xed,0x38,0x6e]
+@ CHECK: stc p15, c7, [r3, #-120]! @ encoding: [0x23,0xed,0x1e,0x7f]
+@ CHECK: stc p5, c8, [r4], #16 @ encoding: [0xa4,0xec,0x04,0x85]
+@ CHECK: stc p4, c9, [r5], #-72 @ encoding: [0x25,0xec,0x12,0x94]
+@ CHECK: stcl p3, c10, [r6, #4] @ encoding: [0xc6,0xed,0x01,0xa3]
+@ CHECK: stcl p2, c11, [r7] @ encoding: [0xc7,0xed,0x00,0xb2]
+@ CHECK: stcl p1, c12, [r8, #-224] @ encoding: [0x48,0xed,0x38,0xc1]
+@ CHECK: stcl p0, c13, [r9, #-120]! @ encoding: [0x69,0xed,0x1e,0xd0]
+@ CHECK: stcl p6, c14, [r10], #16 @ encoding: [0xea,0xec,0x04,0xe6]
+@ CHECK: stcl p7, c15, [r11], #-72 @ encoding: [0x6b,0xec,0x12,0xf7]
+
+@ CHECK: stc2 p2, c8, [r1], {25} @ encoding: [0x81,0xfc,0x19,0x82]
+
+
+@------------------------------------------------------------------------------
+@ STMIA
+@------------------------------------------------------------------------------
+ stmia.w r4, {r4, r5, r8, r9}
+ stmia.w r4, {r5, r6}
+ stmia.w r5!, {r3, r8}
+ stm.w r4, {r4, r5, r8, r9}
+ stm.w r4, {r5, r6}
+ stm.w r5!, {r3, r8}
+ stm.w r5!, {r1, r2}
+ stm.w r2, {r1, r2}
+
+ stmia r4, {r4, r5, r8, r9}
+ stmia r4, {r5, r6}
+ stmia r5!, {r3, r8}
+ stm r4, {r4, r5, r8, r9}
+ stm r4, {r5, r6}
+ stm r5!, {r3, r8}
+ stmea r5!, {r3, r8}
+
+@ CHECK: stm.w r4, {r4, r5, r8, r9} @ encoding: [0x84,0xe8,0x30,0x03]
+@ CHECK: stm.w r4, {r5, r6} @ encoding: [0x84,0xe8,0x60,0x00]
+@ CHECK: stm.w r5!, {r3, r8} @ encoding: [0xa5,0xe8,0x08,0x01]
+@ CHECK: stm.w r4, {r4, r5, r8, r9} @ encoding: [0x84,0xe8,0x30,0x03]
+@ CHECK: stm.w r4, {r5, r6} @ encoding: [0x84,0xe8,0x60,0x00]
+@ CHECK: stm.w r5!, {r3, r8} @ encoding: [0xa5,0xe8,0x08,0x01]
+@ CHECK: stm.w r5!, {r1, r2} @ encoding: [0xa5,0xe8,0x06,0x00]
+@ CHECK: stm.w r2, {r1, r2} @ encoding: [0x82,0xe8,0x06,0x00]
+
+@ CHECK: stm.w r4, {r4, r5, r8, r9} @ encoding: [0x84,0xe8,0x30,0x03]
+@ CHECK: stm.w r4, {r5, r6} @ encoding: [0x84,0xe8,0x60,0x00]
+@ CHECK: stm.w r5!, {r3, r8} @ encoding: [0xa5,0xe8,0x08,0x01]
+@ CHECK: stm.w r4, {r4, r5, r8, r9} @ encoding: [0x84,0xe8,0x30,0x03]
+@ CHECK: stm.w r4, {r5, r6} @ encoding: [0x84,0xe8,0x60,0x00]
+@ CHECK: stm.w r5!, {r3, r8} @ encoding: [0xa5,0xe8,0x08,0x01]
+@ CHECK: stm.w r5!, {r3, r8} @ encoding: [0xa5,0xe8,0x08,0x01]
+
+
+@------------------------------------------------------------------------------
+@ STMDB
+@------------------------------------------------------------------------------
+ stmdb r4, {r4, r5, r8, r9}
+ stmdb r4, {r5, r6}
+ stmdb r5!, {r3, r8}
+ stmea r5!, {r3, r8}
+
+@ CHECK: stmdb r4, {r4, r5, r8, r9} @ encoding: [0x04,0xe9,0x30,0x03]
+@ CHECK: stmdb r4, {r5, r6} @ encoding: [0x04,0xe9,0x60,0x00]
+@ CHECK: stmdb r5!, {r3, r8} @ encoding: [0x25,0xe9,0x08,0x01]
+@ CHECK: stm.w r5!, {r3, r8} @ encoding: [0xa5,0xe8,0x08,0x01]
+
+
+@------------------------------------------------------------------------------
+@ STR(immediate)
+@------------------------------------------------------------------------------
+ str r5, [r5, #-4]
+ str r5, [r6, #32]
+ str r5, [r6, #33]
+ str r5, [r6, #257]
+ str.w pc, [r7, #257]
+ str r2, [r4, #255]!
+ str r8, [sp, #4]!
+ str lr, [sp, #-4]!
+ str r2, [r4], #255
+ str r8, [sp], #4
+ str lr, [sp], #-4
+
+@ CHECK: str r5, [r5, #-4] @ encoding: [0x45,0xf8,0x04,0x5c]
+@ CHECK: str r5, [r6, #32] @ encoding: [0x35,0x62]
+@ CHECK: str.w r5, [r6, #33] @ encoding: [0xc6,0xf8,0x21,0x50]
+@ CHECK: str.w r5, [r6, #257] @ encoding: [0xc6,0xf8,0x01,0x51]
+@ CHECK: str.w pc, [r7, #257] @ encoding: [0xc7,0xf8,0x01,0xf1]
+@ CHECK: str r2, [r4, #255]! @ encoding: [0x44,0xf8,0xff,0x2f]
+@ CHECK: str r8, [sp, #4]! @ encoding: [0x4d,0xf8,0x04,0x8f]
+@ CHECK: str lr, [sp, #-4]! @ encoding: [0x4d,0xf8,0x04,0xed]
+@ CHECK: str r2, [r4], #255 @ encoding: [0x44,0xf8,0xff,0x2b]
+@ CHECK: str r8, [sp], #4 @ encoding: [0x4d,0xf8,0x04,0x8b]
+@ CHECK: str lr, [sp], #-4 @ encoding: [0x4d,0xf8,0x04,0xe9]
+
+
+@------------------------------------------------------------------------------
+@ STR(register)
+@------------------------------------------------------------------------------
+ str r1, [r8, r1]
+ str.w r4, [r5, r2]
+ str r6, [r0, r2, lsl #3]
+ str r8, [r8, r2, lsl #2]
+ str r7, [sp, r2, lsl #1]
+ str r7, [sp, r2, lsl #0]
+
+@ CHECK: str.w r1, [r8, r1] @ encoding: [0x48,0xf8,0x01,0x10]
+@ CHECK: str.w r4, [r5, r2] @ encoding: [0x45,0xf8,0x02,0x40]
+@ CHECK: str.w r6, [r0, r2, lsl #3] @ encoding: [0x40,0xf8,0x32,0x60]
+@ CHECK: str.w r8, [r8, r2, lsl #2] @ encoding: [0x48,0xf8,0x22,0x80]
+@ CHECK: str.w r7, [sp, r2, lsl #1] @ encoding: [0x4d,0xf8,0x12,0x70]
+@ CHECK: str.w r7, [sp, r2] @ encoding: [0x4d,0xf8,0x02,0x70]
+
+
+@------------------------------------------------------------------------------
+@ STRB(immediate)
+@------------------------------------------------------------------------------
+ strb r5, [r5, #-4]
+ strb r5, [r6, #32]
+ strb r5, [r6, #33]
+ strb r5, [r6, #257]
+ strb.w lr, [r7, #257]
+ strb r5, [r8, #255]!
+ strb r2, [r5, #4]!
+ strb r1, [r4, #-4]!
+ strb lr, [r3], #255
+ strb r9, [r2], #4
+ strb r3, [sp], #-4
+ strb r4, [r8, #-0]!
+
+@ CHECK: strb r5, [r5, #-4] @ encoding: [0x05,0xf8,0x04,0x5c]
+@ CHECK: strb.w r5, [r6, #32] @ encoding: [0x86,0xf8,0x20,0x50]
+@ CHECK: strb.w r5, [r6, #33] @ encoding: [0x86,0xf8,0x21,0x50]
+@ CHECK: strb.w r5, [r6, #257] @ encoding: [0x86,0xf8,0x01,0x51]
+@ CHECK: strb.w lr, [r7, #257] @ encoding: [0x87,0xf8,0x01,0xe1]
+@ CHECK: strb r5, [r8, #255]! @ encoding: [0x08,0xf8,0xff,0x5f]
+@ CHECK: strb r2, [r5, #4]! @ encoding: [0x05,0xf8,0x04,0x2f]
+@ CHECK: strb r1, [r4, #-4]! @ encoding: [0x04,0xf8,0x04,0x1d]
+@ CHECK: strb lr, [r3], #255 @ encoding: [0x03,0xf8,0xff,0xeb]
+@ CHECK: strb r9, [r2], #4 @ encoding: [0x02,0xf8,0x04,0x9b]
+@ CHECK: strb r3, [sp], #-4 @ encoding: [0x0d,0xf8,0x04,0x39]
+@ CHECK: strb r4, [r8, #-0]! @ encoding: [0x08,0xf8,0x00,0x4d]
+
+
+@------------------------------------------------------------------------------
+@ STRB(register)
+@------------------------------------------------------------------------------
+ strb r1, [r8, r1]
+ strb.w r4, [r5, r2]
+ strb r6, [r0, r2, lsl #3]
+ strb r8, [r8, r2, lsl #2]
+ strb r7, [sp, r2, lsl #1]
+ strb r7, [sp, r2, lsl #0]
+
+@ CHECK: strb.w r1, [r8, r1] @ encoding: [0x08,0xf8,0x01,0x10]
+@ CHECK: strb.w r4, [r5, r2] @ encoding: [0x05,0xf8,0x02,0x40]
+@ CHECK: strb.w r6, [r0, r2, lsl #3] @ encoding: [0x00,0xf8,0x32,0x60]
+@ CHECK: strb.w r8, [r8, r2, lsl #2] @ encoding: [0x08,0xf8,0x22,0x80]
+@ CHECK: strb.w r7, [sp, r2, lsl #1] @ encoding: [0x0d,0xf8,0x12,0x70]
+@ CHECK: strb.w r7, [sp, r2] @ encoding: [0x0d,0xf8,0x02,0x70]
+
+
+@------------------------------------------------------------------------------
+@ STRBT
+@------------------------------------------------------------------------------
+ strbt r1, [r2]
+ strbt r1, [r8, #0]
+ strbt r1, [r8, #3]
+ strbt r1, [r8, #255]
+
+@ CHECK: strbt r1, [r2] @ encoding: [0x02,0xf8,0x00,0x1e]
+@ CHECK: strbt r1, [r8] @ encoding: [0x08,0xf8,0x00,0x1e]
+@ CHECK: strbt r1, [r8, #3] @ encoding: [0x08,0xf8,0x03,0x1e]
+@ CHECK: strbt r1, [r8, #255] @ encoding: [0x08,0xf8,0xff,0x1e]
+
+
+@------------------------------------------------------------------------------
+@ STRD
+@------------------------------------------------------------------------------
+ strd r3, r5, [r6, #24]
+ strd r3, r5, [r6, #24]!
+ strd r3, r5, [r6], #4
+ strd r3, r5, [r6], #-8
+ strd r3, r5, [r6]
+ strd r8, r1, [r3, #0]
+
+@ CHECK: strd r3, r5, [r6, #24] @ encoding: [0xc6,0xe9,0x06,0x35]
+@ CHECK: strd r3, r5, [r6, #24]! @ encoding: [0xe6,0xe9,0x06,0x35]
+@ CHECK: strd r3, r5, [r6], #4 @ encoding: [0xe6,0xe8,0x01,0x35]
+@ CHECK: strd r3, r5, [r6], #-8 @ encoding: [0x66,0xe8,0x02,0x35]
+@ CHECK: strd r3, r5, [r6] @ encoding: [0xc6,0xe9,0x00,0x35]
+@ CHECK: strd r8, r1, [r3] @ encoding: [0xc3,0xe9,0x00,0x81]
+
+
+@------------------------------------------------------------------------------
+@ STREX/STREXB/STREXH/STREXD
+@------------------------------------------------------------------------------
+ strex r1, r8, [r4]
+ strex r8, r2, [r4, #0]
+ strex r2, r12, [sp, #128]
+ strexb r5, r1, [r7]
+ strexh r9, r7, [r12]
+ strexd r9, r3, r6, [r4]
+
+@ CHECK: strex r1, r8, [r4] @ encoding: [0x44,0xe8,0x00,0x81]
+@ CHECK: strex r8, r2, [r4] @ encoding: [0x44,0xe8,0x00,0x28]
+@ CHECK: strex r2, r12, [sp, #128] @ encoding: [0x4d,0xe8,0x20,0xc2]
+@ CHECK: strexb r5, r1, [r7] @ encoding: [0xc7,0xe8,0x45,0x1f]
+@ CHECK: strexh r9, r7, [r12] @ encoding: [0xcc,0xe8,0x59,0x7f]
+@ CHECK: strexd r9, r3, r6, [r4] @ encoding: [0xc4,0xe8,0x79,0x36]
+
+
+@------------------------------------------------------------------------------
+@ STRH(immediate)
+@------------------------------------------------------------------------------
+ strh r5, [r5, #-4]
+ strh r5, [r6, #32]
+ strh r5, [r6, #33]
+ strh r5, [r6, #257]
+ strh.w lr, [r7, #257]
+ strh r5, [r8, #255]!
+ strh r2, [r5, #4]!
+ strh r1, [r4, #-4]!
+ strh lr, [r3], #255
+ strh r9, [r2], #4
+ strh r3, [sp], #-4
+
+@ CHECK: strh r5, [r5, #-4] @ encoding: [0x25,0xf8,0x04,0x5c]
+@ CHECK: strh r5, [r6, #32] @ encoding: [0x35,0x84]
+@ CHECK: strh.w r5, [r6, #33] @ encoding: [0xa6,0xf8,0x21,0x50]
+@ CHECK: strh.w r5, [r6, #257] @ encoding: [0xa6,0xf8,0x01,0x51]
+@ CHECK: strh.w lr, [r7, #257] @ encoding: [0xa7,0xf8,0x01,0xe1]
+@ CHECK: strh r5, [r8, #255]! @ encoding: [0x28,0xf8,0xff,0x5f]
+@ CHECK: strh r2, [r5, #4]! @ encoding: [0x25,0xf8,0x04,0x2f]
+@ CHECK: strh r1, [r4, #-4]! @ encoding: [0x24,0xf8,0x04,0x1d]
+@ CHECK: strh lr, [r3], #255 @ encoding: [0x23,0xf8,0xff,0xeb]
+@ CHECK: strh r9, [r2], #4 @ encoding: [0x22,0xf8,0x04,0x9b]
+@ CHECK: strh r3, [sp], #-4 @ encoding: [0x2d,0xf8,0x04,0x39]
+
+
+@------------------------------------------------------------------------------
+@ STRH(register)
+@------------------------------------------------------------------------------
+ strh r1, [r8, r1]
+ strh.w r4, [r5, r2]
+ strh r6, [r0, r2, lsl #3]
+ strh r8, [r8, r2, lsl #2]
+ strh r7, [sp, r2, lsl #1]
+ strh r7, [sp, r2, lsl #0]
+
+@ CHECK: strh.w r1, [r8, r1] @ encoding: [0x28,0xf8,0x01,0x10]
+@ CHECK: strh.w r4, [r5, r2] @ encoding: [0x25,0xf8,0x02,0x40]
+@ CHECK: strh.w r6, [r0, r2, lsl #3] @ encoding: [0x20,0xf8,0x32,0x60]
+@ CHECK: strh.w r8, [r8, r2, lsl #2] @ encoding: [0x28,0xf8,0x22,0x80]
+@ CHECK: strh.w r7, [sp, r2, lsl #1] @ encoding: [0x2d,0xf8,0x12,0x70]
+@ CHECK: strh.w r7, [sp, r2] @ encoding: [0x2d,0xf8,0x02,0x70]
+
+
+@------------------------------------------------------------------------------
+@ STRHT
+@------------------------------------------------------------------------------
+ strht r1, [r2]
+ strht r1, [r8, #0]
+ strht r1, [r8, #3]
+ strht r1, [r8, #255]
+
+@ CHECK: strht r1, [r2] @ encoding: [0x22,0xf8,0x00,0x1e]
+@ CHECK: strht r1, [r8] @ encoding: [0x28,0xf8,0x00,0x1e]
+@ CHECK: strht r1, [r8, #3] @ encoding: [0x28,0xf8,0x03,0x1e]
+@ CHECK: strht r1, [r8, #255] @ encoding: [0x28,0xf8,0xff,0x1e]
+
+
+@------------------------------------------------------------------------------
+@ STRT
+@------------------------------------------------------------------------------
+ strt r1, [r2]
+ strt r1, [r8, #0]
+ strt r1, [r8, #3]
+ strt r1, [r8, #255]
+
+@ CHECK: strt r1, [r2] @ encoding: [0x42,0xf8,0x00,0x1e]
+@ CHECK: strt r1, [r8] @ encoding: [0x48,0xf8,0x00,0x1e]
+@ CHECK: strt r1, [r8, #3] @ encoding: [0x48,0xf8,0x03,0x1e]
+@ CHECK: strt r1, [r8, #255] @ encoding: [0x48,0xf8,0xff,0x1e]
+
+
+@------------------------------------------------------------------------------
+@ SUB (immediate)
+@------------------------------------------------------------------------------
+ itet eq
+ subeq r1, r2, #4
+ subwne r5, r3, #1023
+ subeq r4, r5, #293
+ sub r2, sp, #1024
+ sub r2, r8, #0xff00
+ sub r2, r3, #257
+ subw r2, r3, #257
+ sub r12, r6, #0x100
+ subw r12, r6, #0x100
+ subs r1, r2, #0x1f0
+
+@ CHECK: itet eq @ encoding: [0x0a,0xbf]
+@ CHECK: subeq r1, r2, #4 @ encoding: [0x11,0x1f]
+@ CHECK: subwne r5, r3, #1023 @ encoding: [0xa3,0xf2,0xff,0x35]
+@ CHECK: subweq r4, r5, #293 @ encoding: [0xa5,0xf2,0x25,0x14]
+@ CHECK: sub.w r2, sp, #1024 @ encoding: [0xad,0xf5,0x80,0x62]
+@ CHECK: sub.w r2, r8, #65280 @ encoding: [0xa8,0xf5,0x7f,0x42]
+@ CHECK: subw r2, r3, #257 @ encoding: [0xa3,0xf2,0x01,0x12]
+@ CHECK: subw r2, r3, #257 @ encoding: [0xa3,0xf2,0x01,0x12]
+@ CHECK: sub.w r12, r6, #256 @ encoding: [0xa6,0xf5,0x80,0x7c]
+@ CHECK: subw r12, r6, #256 @ encoding: [0xa6,0xf2,0x00,0x1c]
+@ CHECK: subs.w r1, r2, #496 @ encoding: [0xb2,0xf5,0xf8,0x71]
+
+
+@------------------------------------------------------------------------------
+@ SUB (register)
+@------------------------------------------------------------------------------
+ sub r4, r5, r6
+ sub r4, r5, r6, lsl #5
+ sub r4, r5, r6, lsr #5
+ sub.w r4, r5, r6, lsr #5
+ sub r4, r5, r6, asr #5
+ sub r4, r5, r6, ror #5
+ sub.w r5, r2, r12, rrx
+
+@ CHECK: sub.w r4, r5, r6 @ encoding: [0xa5,0xeb,0x06,0x04]
+@ CHECK: sub.w r4, r5, r6, lsl #5 @ encoding: [0xa5,0xeb,0x46,0x14]
+@ CHECK: sub.w r4, r5, r6, lsr #5 @ encoding: [0xa5,0xeb,0x56,0x14]
+@ CHECK: sub.w r4, r5, r6, lsr #5 @ encoding: [0xa5,0xeb,0x56,0x14]
+@ CHECK: sub.w r4, r5, r6, asr #5 @ encoding: [0xa5,0xeb,0x66,0x14]
+@ CHECK: sub.w r4, r5, r6, ror #5 @ encoding: [0xa5,0xeb,0x76,0x14]
+@ CHECK: sub.w r5, r2, r12, rrx @ encoding: [0xa2,0xeb,0x3c,0x05]
+
+
+@------------------------------------------------------------------------------
+@ SVC
+@------------------------------------------------------------------------------
+ svc #0
+ ite eq
+ svceq #255
+ swine #33
+
+@ CHECK: svc #0 @ encoding: [0x00,0xdf]
+@ CHECK: ite eq @ encoding: [0x0c,0xbf]
+@ CHECK: svceq #255 @ encoding: [0xff,0xdf]
+@ CHECK: svcne #33 @ encoding: [0x21,0xdf]
+
+
+@------------------------------------------------------------------------------
+@ SXTAB
+@------------------------------------------------------------------------------
+ sxtab r2, r3, r4
+ sxtab r4, r5, r6, ror #0
+ it lt
+ sxtablt r6, r2, r9, ror #8
+ sxtab r5, r1, r4, ror #16
+ sxtab r7, r8, r3, ror #24
+
+@ CHECK: sxtab r2, r3, r4 @ encoding: [0x43,0xfa,0x84,0xf2]
+@ CHECK: sxtab r4, r5, r6 @ encoding: [0x45,0xfa,0x86,0xf4]
+@ CHECK: it lt @ encoding: [0xb8,0xbf]
+@ CHECK: sxtablt r6, r2, r9, ror #8 @ encoding: [0x42,0xfa,0x99,0xf6]
+@ CHECK: sxtab r5, r1, r4, ror #16 @ encoding: [0x41,0xfa,0xa4,0xf5]
+@ CHECK: sxtab r7, r8, r3, ror #24 @ encoding: [0x48,0xfa,0xb3,0xf7]
+
+
+@------------------------------------------------------------------------------
+@ SXTAB16
+@------------------------------------------------------------------------------
+ sxtab16 r6, r2, r7, ror #0
+ sxtab16 r3, r5, r8, ror #8
+ sxtab16 r3, r2, r1, ror #16
+ ite ne
+ sxtab16ne r0, r1, r4
+ sxtab16eq r1, r2, r3, ror #24
+
+@ CHECK: sxtab16 r6, r2, r7 @ encoding: [0x22,0xfa,0x87,0xf6]
+@ CHECK: sxtab16 r3, r5, r8, ror #8 @ encoding: [0x25,0xfa,0x98,0xf3]
+@ CHECK: sxtab16 r3, r2, r1, ror #16 @ encoding: [0x22,0xfa,0xa1,0xf3]
+@ CHECK: ite ne @ encoding: [0x14,0xbf]
+@ CHECK: sxtab16ne r0, r1, r4 @ encoding: [0x21,0xfa,0x84,0xf0]
+@ CHECK: sxtab16eq r1, r2, r3, ror #24 @ encoding: [0x22,0xfa,0xb3,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ SXTAH
+@------------------------------------------------------------------------------
+ sxtah r1, r3, r9
+ sxtah r3, r8, r3, ror #8
+ sxtah r9, r3, r3, ror #24
+ ite hi
+ sxtahhi r6, r1, r6, ror #0
+ sxtahls r2, r2, r4, ror #16
+
+@ CHECK: sxtah r1, r3, r9 @ encoding: [0x03,0xfa,0x89,0xf1]
+@ CHECK: sxtah r3, r8, r3, ror #8 @ encoding: [0x08,0xfa,0x93,0xf3]
+@ CHECK: sxtah r9, r3, r3, ror #24 @ encoding: [0x03,0xfa,0xb3,0xf9]
+@ CHECK: ite hi @ encoding: [0x8c,0xbf]
+@ CHECK: sxtahhi r6, r1, r6 @ encoding: [0x01,0xfa,0x86,0xf6]
+@ CHECK: sxtahls r2, r2, r4, ror #16 @ encoding: [0x02,0xfa,0xa4,0xf2]
+
+
+@------------------------------------------------------------------------------
+@ SXTB
+@------------------------------------------------------------------------------
+ sxtb r5, r6, ror #0
+ sxtb r6, r9, ror #8
+ sxtb r8, r3, ror #24
+ ite ge
+ sxtbge r2, r4
+ sxtblt r5, r1, ror #16
+ sxtb.w r7, r8
+
+@ CHECK: sxtb r5, r6 @ encoding: [0x75,0xb2]
+@ CHECK: sxtb.w r6, r9, ror #8 @ encoding: [0x4f,0xfa,0x99,0xf6]
+@ CHECK: sxtb.w r8, r3, ror #24 @ encoding: [0x4f,0xfa,0xb3,0xf8]
+@ CHECK: ite ge @ encoding: [0xac,0xbf]
+@ CHECK: sxtbge r2, r4 @ encoding: [0x62,0xb2]
+@ CHECK: sxtblt.w r5, r1, ror #16 @ encoding: [0x4f,0xfa,0xa1,0xf5]
+@ CHECK: sxtb.w r7, r8 @ encoding: [0x4f,0xfa,0x88,0xf7]
+
+
+@------------------------------------------------------------------------------
+@ SXTB16
+@------------------------------------------------------------------------------
+ sxtb16 r1, r4
+ sxtb16 r6, r7, ror #0
+ sxtb16 r3, r1, ror #16
+ ite cs
+ sxtb16cs r3, r5, ror #8
+ sxtb16lo r2, r3, ror #24
+
+@ CHECK: sxtb16 r1, r4 @ encoding: [0x2f,0xfa,0x84,0xf1]
+@ CHECK: sxtb16 r6, r7 @ encoding: [0x2f,0xfa,0x87,0xf6]
+@ CHECK: sxtb16 r3, r1, ror #16 @ encoding: [0x2f,0xfa,0xa1,0xf3]
+@ CHECK: ite hs @ encoding: [0x2c,0xbf]
+@ CHECK: sxtb16hs r3, r5, ror #8 @ encoding: [0x2f,0xfa,0x95,0xf3]
+@ CHECK: sxtb16lo r2, r3, ror #24 @ encoding: [0x2f,0xfa,0xb3,0xf2]
+
+
+@------------------------------------------------------------------------------
+@ SXTH
+@------------------------------------------------------------------------------
+ sxth r1, r6, ror #0
+ sxth r3, r8, ror #8
+ sxth r9, r3, ror #24
+ itt ne
+ sxthne r3, r9
+ sxthne r2, r2, ror #16
+ sxth.w r7, r8
+
+@ CHECK: sxth r1, r6 @ encoding: [0x31,0xb2]
+@ CHECK: sxth.w r3, r8, ror #8 @ encoding: [0x0f,0xfa,0x98,0xf3]
+@ CHECK: sxth.w r9, r3, ror #24 @ encoding: [0x0f,0xfa,0xb3,0xf9]
+@ CHECK: itt ne @ encoding: [0x1c,0xbf]
+@ CHECK: sxthne.w r3, r9 @ encoding: [0x0f,0xfa,0x89,0xf3]
+@ CHECK: sxthne.w r2, r2, ror #16 @ encoding: [0x0f,0xfa,0xa2,0xf2]
+@ CHECK: sxth.w r7, r8 @ encoding: [0x0f,0xfa,0x88,0xf7]
+
+
+@------------------------------------------------------------------------------
+@ SXTB
+@------------------------------------------------------------------------------
+ sxtb r5, r6, ror #0
+ sxtb.w r6, r9, ror #8
+ sxtb r8, r3, ror #24
+ ite ge
+ sxtbge r2, r4
+ sxtblt r5, r1, ror #16
+
+@ CHECK: sxtb r5, r6 @ encoding: [0x75,0xb2]
+@ CHECK: sxtb.w r6, r9, ror #8 @ encoding: [0x4f,0xfa,0x99,0xf6]
+@ CHECK: sxtb.w r8, r3, ror #24 @ encoding: [0x4f,0xfa,0xb3,0xf8]
+@ CHECK: ite ge @ encoding: [0xac,0xbf]
+@ CHECK: sxtbge r2, r4 @ encoding: [0x62,0xb2]
+@ CHECK: sxtblt.w r5, r1, ror #16 @ encoding: [0x4f,0xfa,0xa1,0xf5]
+
+
+@------------------------------------------------------------------------------
+@ SXTB16
+@------------------------------------------------------------------------------
+ sxtb16 r1, r4
+ sxtb16 r6, r7, ror #0
+ sxtb16 r3, r1, ror #16
+ ite cs
+ sxtb16cs r3, r5, ror #8
+ sxtb16lo r2, r3, ror #24
+
+@ CHECK: sxtb16 r1, r4 @ encoding: [0x2f,0xfa,0x84,0xf1]
+@ CHECK: sxtb16 r6, r7 @ encoding: [0x2f,0xfa,0x87,0xf6]
+@ CHECK: sxtb16 r3, r1, ror #16 @ encoding: [0x2f,0xfa,0xa1,0xf3]
+@ CHECK: ite hs @ encoding: [0x2c,0xbf]
+@ CHECK: sxtb16hs r3, r5, ror #8 @ encoding: [0x2f,0xfa,0x95,0xf3]
+@ CHECK: sxtb16lo r2, r3, ror #24 @ encoding: [0x2f,0xfa,0xb3,0xf2]
+
+
+@------------------------------------------------------------------------------
+@ SXTH
+@------------------------------------------------------------------------------
+ sxth r1, r6, ror #0
+ sxth.w r3, r8, ror #8
+ sxth r9, r3, ror #24
+ itt ne
+ sxthne r3, r9
+ sxthne r2, r2, ror #16
+
+@ CHECK: sxth r1, r6 @ encoding: [0x31,0xb2]
+@ CHECK: sxth.w r3, r8, ror #8 @ encoding: [0x0f,0xfa,0x98,0xf3]
+@ CHECK: sxth.w r9, r3, ror #24 @ encoding: [0x0f,0xfa,0xb3,0xf9]
+@ CHECK: itt ne @ encoding: [0x1c,0xbf]
+@ CHECK: sxthne.w r3, r9 @ encoding: [0x0f,0xfa,0x89,0xf3]
+@ CHECK: sxthne.w r2, r2, ror #16 @ encoding: [0x0f,0xfa,0xa2,0xf2]
+
+
+@------------------------------------------------------------------------------
+@ TBB/TBH
+@------------------------------------------------------------------------------
+ tbb [r3, r8]
+ tbh [r3, r8, lsl #1]
+ it eq
+ tbbeq [r3, r8]
+ it cs
+ tbhcs [r3, r8, lsl #1]
+
+@ CHECK: tbb [r3, r8] @ encoding: [0xd3,0xe8,0x08,0xf0]
+@ CHECK: tbh [r3, r8, lsl #1] @ encoding: [0xd3,0xe8,0x18,0xf0]
+@ CHECK: it eq @ encoding: [0x08,0xbf]
+@ CHECK: tbbeq [r3, r8] @ encoding: [0xd3,0xe8,0x08,0xf0]
+@ CHECK: it hs @ encoding: [0x28,0xbf]
+@ CHECK: tbhhs [r3, r8, lsl #1] @ encoding: [0xd3,0xe8,0x18,0xf0]
+
+
+@------------------------------------------------------------------------------
+@ TEQ
+@------------------------------------------------------------------------------
+ teq r5, #0xf000
+ teq r4, r5
+ teq r4, r5, lsl #5
+ teq r4, r5, lsr #5
+ teq r4, r5, lsr #5
+ teq r4, r5, asr #5
+ teq r4, r5, ror #5
+
+@ CHECK: teq.w r5, #61440 @ encoding: [0x95,0xf4,0x70,0x4f]
+@ CHECK: teq.w r4, r5 @ encoding: [0x94,0xea,0x05,0x0f]
+@ CHECK: teq.w r4, r5, lsl #5 @ encoding: [0x94,0xea,0x45,0x1f]
+@ CHECK: teq.w r4, r5, lsr #5 @ encoding: [0x94,0xea,0x55,0x1f]
+@ CHECK: teq.w r4, r5, lsr #5 @ encoding: [0x94,0xea,0x55,0x1f]
+@ CHECK: teq.w r4, r5, asr #5 @ encoding: [0x94,0xea,0x65,0x1f]
+@ CHECK: teq.w r4, r5, ror #5 @ encoding: [0x94,0xea,0x75,0x1f]
+
+
+@------------------------------------------------------------------------------
+@ TST
+@------------------------------------------------------------------------------
+ tst r5, #0xf000
+ tst r2, r5
+ tst r3, r12, lsl #5
+ tst r4, r11, lsr #4
+ tst r5, r10, lsr #12
+ tst r6, r9, asr #30
+ tst r7, r8, ror #2
+
+@ CHECK: tst.w r5, #61440 @ encoding: [0x15,0xf4,0x70,0x4f]
+@ CHECK: tst r2, r5 @ encoding: [0x2a,0x42]
+@ CHECK: tst.w r3, r12, lsl #5 @ encoding: [0x13,0xea,0x4c,0x1f]
+@ CHECK: tst.w r4, r11, lsr #4 @ encoding: [0x14,0xea,0x1b,0x1f]
+@ CHECK: tst.w r5, r10, lsr #12 @ encoding: [0x15,0xea,0x1a,0x3f]
+@ CHECK: tst.w r6, r9, asr #30 @ encoding: [0x16,0xea,0xa9,0x7f]
+@ CHECK: tst.w r7, r8, ror #2 @ encoding: [0x17,0xea,0xb8,0x0f]
+
+
+@------------------------------------------------------------------------------
+@ UADD16/UADD8
+@------------------------------------------------------------------------------
+ uadd16 r1, r2, r3
+ uadd8 r1, r2, r3
+ ite gt
+ uadd16gt r1, r2, r3
+ uadd8le r1, r2, r3
+
+@ CHECK: uadd16 r1, r2, r3 @ encoding: [0x92,0xfa,0x43,0xf1]
+@ CHECK: uadd8 r1, r2, r3 @ encoding: [0x82,0xfa,0x43,0xf1]
+@ CHECK: ite gt @ encoding: [0xcc,0xbf]
+@ CHECK: uadd16gt r1, r2, r3 @ encoding: [0x92,0xfa,0x43,0xf1]
+@ CHECK: uadd8le r1, r2, r3 @ encoding: [0x82,0xfa,0x43,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ UASX
+@------------------------------------------------------------------------------
+ uasx r9, r12, r0
+ it eq
+ uasxeq r9, r12, r0
+ uaddsubx r9, r12, r0
+ it eq
+ uaddsubxeq r9, r12, r0
+
+@ CHECK: uasx r9, r12, r0 @ encoding: [0xac,0xfa,0x40,0xf9]
+@ CHECK: it eq @ encoding: [0x08,0xbf]
+@ CHECK: uasxeq r9, r12, r0 @ encoding: [0xac,0xfa,0x40,0xf9]
+@ CHECK: uasx r9, r12, r0 @ encoding: [0xac,0xfa,0x40,0xf9]
+@ CHECK: it eq @ encoding: [0x08,0xbf]
+@ CHECK: uasxeq r9, r12, r0 @ encoding: [0xac,0xfa,0x40,0xf9]
+
+
+@------------------------------------------------------------------------------
+@ UBFX
+@------------------------------------------------------------------------------
+ ubfx r4, r5, #16, #1
+ it gt
+ ubfxgt r4, r5, #16, #16
+
+@ CHECK: ubfx r4, r5, #16, #1 @ encoding: [0xc5,0xf3,0x00,0x44]
+@ CHECK: it gt @ encoding: [0xc8,0xbf]
+@ CHECK: ubfxgt r4, r5, #16, #16 @ encoding: [0xc5,0xf3,0x0f,0x44]
+
+
+@------------------------------------------------------------------------------
+@ UHADD16/UHADD8
+@------------------------------------------------------------------------------
+ uhadd16 r4, r8, r2
+ uhadd8 r4, r8, r2
+ itt gt
+ uhadd16gt r4, r8, r2
+ uhadd8gt r4, r8, r2
+
+@ CHECK: uhadd16 r4, r8, r2 @ encoding: [0x98,0xfa,0x62,0xf4]
+@ CHECK: uhadd8 r4, r8, r2 @ encoding: [0x88,0xfa,0x62,0xf4]
+@ CHECK: itt gt @ encoding: [0xc4,0xbf]
+@ CHECK: uhadd16gt r4, r8, r2 @ encoding: [0x98,0xfa,0x62,0xf4]
+@ CHECK: uhadd8gt r4, r8, r2 @ encoding: [0x88,0xfa,0x62,0xf4]
+
+
+@------------------------------------------------------------------------------
+@ UHASX/UHSAX
+@------------------------------------------------------------------------------
+ uhasx r4, r1, r5
+ uhsax r5, r6, r6
+ itt gt
+ uhasxgt r6, r9, r8
+ uhsaxgt r7, r8, r12
+ uhaddsubx r4, r1, r5
+ uhsubaddx r5, r6, r6
+ itt gt
+ uhaddsubxgt r6, r9, r8
+ uhsubaddxgt r7, r8, r12
+
+@ CHECK: uhasx r4, r1, r5 @ encoding: [0xa1,0xfa,0x65,0xf4]
+@ CHECK: uhsax r5, r6, r6 @ encoding: [0xe6,0xfa,0x66,0xf5]
+@ CHECK: itt gt @ encoding: [0xc4,0xbf]
+@ CHECK: uhasxgt r6, r9, r8 @ encoding: [0xa9,0xfa,0x68,0xf6]
+@ CHECK: uhsaxgt r7, r8, r12 @ encoding: [0xe8,0xfa,0x6c,0xf7]
+@ CHECK: uhasx r4, r1, r5 @ encoding: [0xa1,0xfa,0x65,0xf4]
+@ CHECK: uhsax r5, r6, r6 @ encoding: [0xe6,0xfa,0x66,0xf5]
+@ CHECK: itt gt @ encoding: [0xc4,0xbf]
+@ CHECK: uhasxgt r6, r9, r8 @ encoding: [0xa9,0xfa,0x68,0xf6]
+@ CHECK: uhsaxgt r7, r8, r12 @ encoding: [0xe8,0xfa,0x6c,0xf7]
+
+
+@------------------------------------------------------------------------------
+@ UHSUB16/UHSUB8
+@------------------------------------------------------------------------------
+ uhsub16 r5, r8, r3
+ uhsub8 r1, r7, r6
+ itt lt
+ uhsub16lt r4, r9, r12
+ uhsub8lt r3, r1, r5
+
+@ CHECK: uhsub16 r5, r8, r3 @ encoding: [0xd8,0xfa,0x63,0xf5]
+@ CHECK: uhsub8 r1, r7, r6 @ encoding: [0xc7,0xfa,0x66,0xf1]
+@ CHECK: itt lt @ encoding: [0xbc,0xbf]
+@ CHECK: uhsub16lt r4, r9, r12 @ encoding: [0xd9,0xfa,0x6c,0xf4]
+@ CHECK: uhsub8lt r3, r1, r5 @ encoding: [0xc1,0xfa,0x65,0xf3]
+
+
+@------------------------------------------------------------------------------
+@ UMAAL
+@------------------------------------------------------------------------------
+ umaal r3, r4, r5, r6
+ it lt
+ umaallt r3, r4, r5, r6
+
+@ CHECK: umaal r3, r4, r5, r6 @ encoding: [0xe5,0xfb,0x66,0x34]
+@ CHECK: it lt @ encoding: [0xb8,0xbf]
+@ CHECK: umaallt r3, r4, r5, r6 @ encoding: [0xe5,0xfb,0x66,0x34]
+
+
+@------------------------------------------------------------------------------
+@ UMLAL
+@------------------------------------------------------------------------------
+ umlal r2, r4, r6, r8
+ it gt
+ umlalgt r6, r1, r2, r6
+
+@ CHECK: umlal r2, r4, r6, r8 @ encoding: [0xe6,0xfb,0x08,0x24]
+@ CHECK: it gt @ encoding: [0xc8,0xbf]
+@ CHECK: umlalgt r6, r1, r2, r6 @ encoding: [0xe2,0xfb,0x06,0x61]
+
+
+@------------------------------------------------------------------------------
+@ UMULL
+@------------------------------------------------------------------------------
+ umull r2, r4, r6, r8
+ it gt
+ umullgt r6, r1, r2, r6
+
+@ CHECK: umull r2, r4, r6, r8 @ encoding: [0xa6,0xfb,0x08,0x24]
+@ CHECK: it gt @ encoding: [0xc8,0xbf]
+@ CHECK: umullgt r6, r1, r2, r6 @ encoding: [0xa2,0xfb,0x06,0x61]
+
+
+@------------------------------------------------------------------------------
+@ UQADD16/UQADD8
+@------------------------------------------------------------------------------
+ uqadd16 r1, r2, r3
+ uqadd8 r3, r4, r8
+ ite gt
+ uqadd16gt r4, r7, r9
+ uqadd8le r8, r1, r2
+
+@ CHECK: uqadd16 r1, r2, r3 @ encoding: [0x92,0xfa,0x53,0xf1]
+@ CHECK: uqadd8 r3, r4, r8 @ encoding: [0x84,0xfa,0x58,0xf3]
+@ CHECK: ite gt @ encoding: [0xcc,0xbf]
+@ CHECK: uqadd16gt r4, r7, r9 @ encoding: [0x97,0xfa,0x59,0xf4]
+@ CHECK: uqadd8le r8, r1, r2 @ encoding: [0x81,0xfa,0x52,0xf8]
+
+
+@------------------------------------------------------------------------------
+@ UQASX/UQSAX
+@------------------------------------------------------------------------------
+ uqasx r1, r2, r3
+ uqsax r3, r4, r8
+ ite gt
+ uqasxgt r4, r7, r9
+ uqsaxle r8, r1, r2
+
+ uqaddsubx r1, r2, r3
+ uqsubaddx r3, r4, r8
+ ite gt
+ uqaddsubxgt r4, r7, r9
+ uqsubaddxle r8, r1, r2
+
+@ CHECK: uqasx r1, r2, r3 @ encoding: [0xa2,0xfa,0x53,0xf1]
+@ CHECK: uqsax r3, r4, r8 @ encoding: [0xe4,0xfa,0x58,0xf3]
+@ CHECK: ite gt @ encoding: [0xcc,0xbf]
+@ CHECK: uqasxgt r4, r7, r9 @ encoding: [0xa7,0xfa,0x59,0xf4]
+@ CHECK: uqsaxle r8, r1, r2 @ encoding: [0xe1,0xfa,0x52,0xf8]
+
+@ CHECK: uqasx r1, r2, r3 @ encoding: [0xa2,0xfa,0x53,0xf1]
+@ CHECK: uqsax r3, r4, r8 @ encoding: [0xe4,0xfa,0x58,0xf3]
+@ CHECK: ite gt @ encoding: [0xcc,0xbf]
+@ CHECK: uqasxgt r4, r7, r9 @ encoding: [0xa7,0xfa,0x59,0xf4]
+@ CHECK: uqsaxle r8, r1, r2 @ encoding: [0xe1,0xfa,0x52,0xf8]
+
+
+@------------------------------------------------------------------------------
+@ UQSUB16/UQSUB8
+@------------------------------------------------------------------------------
+ uqsub8 r8, r2, r9
+ uqsub16 r1, r9, r7
+ ite gt
+ uqsub8gt r3, r1, r6
+ uqsub16le r4, r6, r4
+
+@ CHECK: uqsub8 r8, r2, r9 @ encoding: [0xc2,0xfa,0x59,0xf8]
+@ CHECK: uqsub16 r1, r9, r7 @ encoding: [0xd9,0xfa,0x57,0xf1]
+@ CHECK: ite gt @ encoding: [0xcc,0xbf]
+@ CHECK: uqsub8gt r3, r1, r6 @ encoding: [0xc1,0xfa,0x56,0xf3]
+@ CHECK: uqsub16le r4, r6, r4 @ encoding: [0xd6,0xfa,0x54,0xf4]
+
+
+@------------------------------------------------------------------------------
+@ UQSUB16/UQSUB8
+@------------------------------------------------------------------------------
+ usad8 r1, r9, r7
+ usada8 r8, r2, r9, r12
+ ite gt
+ usada8gt r3, r1, r6, r9
+ usad8le r4, r6, r4
+
+@ CHECK: usad8 r1, r9, r7 @ encoding: [0x79,0xfb,0x07,0xf1]
+@ CHECK: usada8 r8, r2, r9, r12 @ encoding: [0x72,0xfb,0x09,0xc8]
+@ CHECK: ite gt @ encoding: [0xcc,0xbf]
+@ CHECK: usada8gt r3, r1, r6, r9 @ encoding: [0x71,0xfb,0x06,0x93]
+@ CHECK: usad8le r4, r6, r4 @ encoding: [0x76,0xfb,0x04,0xf4]
+
+
+@------------------------------------------------------------------------------
+@ USAT
+@------------------------------------------------------------------------------
+ usat r8, #1, r10
+ usat r8, #4, r10, lsl #0
+ usat r8, #5, r10, lsl #31
+ usat r8, #16, r10, asr #1
+
+@ CHECK: usat r8, #1, r10 @ encoding: [0x8a,0xf3,0x01,0x08]
+@ CHECK: usat r8, #4, r10 @ encoding: [0x8a,0xf3,0x04,0x08]
+@ CHECK: usat r8, #5, r10, lsl #31 @ encoding: [0x8a,0xf3,0xc5,0x78]
+@ CHECK: usat r8, #16, r10, asr #1 @ encoding: [0xaa,0xf3,0x50,0x08]
+
+
+@------------------------------------------------------------------------------
+@ USAT16
+@------------------------------------------------------------------------------
+ usat16 r2, #2, r7
+ usat16 r3, #15, r5
+
+@ CHECK: usat16 r2, #2, r7 @ encoding: [0xa7,0xf3,0x02,0x02]
+@ CHECK: usat16 r3, #15, r5 @ encoding: [0xa5,0xf3,0x0f,0x03]
+
+
+@------------------------------------------------------------------------------
+@ USAX
+@------------------------------------------------------------------------------
+ usax r2, r3, r4
+ it ne
+ usaxne r6, r1, r9
+ usubaddx r2, r3, r4
+ it ne
+ usubaddxne r6, r1, r9
+
+@ CHECK: usax r2, r3, r4 @ encoding: [0xe3,0xfa,0x44,0xf2]
+@ CHECK: it ne @ encoding: [0x18,0xbf]
+@ CHECK: usaxne r6, r1, r9 @ encoding: [0xe1,0xfa,0x49,0xf6]
+@ CHECK: usax r2, r3, r4 @ encoding: [0xe3,0xfa,0x44,0xf2]
+@ CHECK: it ne @ encoding: [0x18,0xbf]
+@ CHECK: usaxne r6, r1, r9 @ encoding: [0xe1,0xfa,0x49,0xf6]
+
+
+@------------------------------------------------------------------------------
+@ USUB16/USUB8
+@------------------------------------------------------------------------------
+ usub16 r4, r2, r7
+ usub8 r1, r8, r5
+ ite hi
+ usub16hi r1, r1, r3
+ usub8ls r9, r2, r3
+
+@ CHECK: usub16 r4, r2, r7 @ encoding: [0xd2,0xfa,0x47,0xf4]
+@ CHECK: usub8 r1, r8, r5 @ encoding: [0xc8,0xfa,0x45,0xf1]
+@ CHECK: ite hi @ encoding: [0x8c,0xbf]
+@ CHECK: usub16hi r1, r1, r3 @ encoding: [0xd1,0xfa,0x43,0xf1]
+@ CHECK: usub8ls r9, r2, r3 @ encoding: [0xc2,0xfa,0x43,0xf9]
+
+
+@------------------------------------------------------------------------------
+@ UXTAB
+@------------------------------------------------------------------------------
+ uxtab r2, r3, r4
+ uxtab r4, r5, r6, ror #0
+ it lt
+ uxtablt r6, r2, r9, ror #8
+ uxtab r5, r1, r4, ror #16
+ uxtab r7, r8, r3, ror #24
+
+@ CHECK: uxtab r2, r3, r4 @ encoding: [0x53,0xfa,0x84,0xf2]
+@ CHECK: uxtab r4, r5, r6 @ encoding: [0x55,0xfa,0x86,0xf4]
+@ CHECK: it lt @ encoding: [0xb8,0xbf]
+@ CHECK: uxtablt r6, r2, r9, ror #8 @ encoding: [0x52,0xfa,0x99,0xf6]
+@ CHECK: uxtab r5, r1, r4, ror #16 @ encoding: [0x51,0xfa,0xa4,0xf5]
+@ CHECK: uxtab r7, r8, r3, ror #24 @ encoding: [0x58,0xfa,0xb3,0xf7]
+
+
+@------------------------------------------------------------------------------
+@ UXTAB16
+@------------------------------------------------------------------------------
+ it ge
+ uxtab16ge r0, r1, r4
+ uxtab16 r6, r2, r7, ror #0
+ uxtab16 r3, r5, r8, ror #8
+ uxtab16 r3, r2, r1, ror #16
+ it eq
+ uxtab16eq r1, r2, r3, ror #24
+
+@ CHECK: it ge @ encoding: [0xa8,0xbf]
+@ CHECK: uxtab16ge r0, r1, r4 @ encoding: [0x31,0xfa,0x84,0xf0]
+@ CHECK: uxtab16 r6, r2, r7 @ encoding: [0x32,0xfa,0x87,0xf6]
+@ CHECK: uxtab16 r3, r5, r8, ror #8 @ encoding: [0x35,0xfa,0x98,0xf3]
+@ CHECK: uxtab16 r3, r2, r1, ror #16 @ encoding: [0x32,0xfa,0xa1,0xf3]
+@ CHECK: it eq @ encoding: [0x08,0xbf]
+@ CHECK: uxtab16eq r1, r2, r3, ror #24 @ encoding: [0x32,0xfa,0xb3,0xf1]
+
+
+@------------------------------------------------------------------------------
+@ UXTAH
+@------------------------------------------------------------------------------
+ uxtah r1, r3, r9
+ it hi
+ uxtahhi r6, r1, r6, ror #0
+ uxtah r3, r8, r3, ror #8
+ it lo
+ uxtahlo r2, r2, r4, ror #16
+ uxtah r9, r3, r3, ror #24
+
+@ CHECK: uxtah r1, r3, r9 @ encoding: [0x13,0xfa,0x89,0xf1]
+@ CHECK: it hi @ encoding: [0x88,0xbf]
+@ CHECK: uxtahhi r6, r1, r6 @ encoding: [0x11,0xfa,0x86,0xf6]
+@ CHECK: uxtah r3, r8, r3, ror #8 @ encoding: [0x18,0xfa,0x93,0xf3]
+@ CHECK: it lo @ encoding: [0x38,0xbf]
+@ CHECK: uxtahlo r2, r2, r4, ror #16 @ encoding: [0x12,0xfa,0xa4,0xf2]
+@ CHECK: uxtah r9, r3, r3, ror #24 @ encoding: [0x13,0xfa,0xb3,0xf9]
+
+
+@------------------------------------------------------------------------------
+@ UXTB
+@------------------------------------------------------------------------------
+ it ge
+ uxtbge r2, r4
+ uxtb r5, r6, ror #0
+ uxtb r6, r9, ror #8
+ it cc
+ uxtbcc r5, r1, ror #16
+ uxtb r8, r3, ror #24
+ uxtb.w r7, r8
+
+@ CHECK: it ge @ encoding: [0xa8,0xbf]
+@ CHECK: uxtbge r2, r4 @ encoding: [0xe2,0xb2]
+@ CHECK: uxtb r5, r6 @ encoding: [0xf5,0xb2]
+@ CHECK: uxtb.w r6, r9, ror #8 @ encoding: [0x5f,0xfa,0x99,0xf6]
+@ CHECK: it lo @ encoding: [0x38,0xbf]
+@ CHECK: uxtblo.w r5, r1, ror #16 @ encoding: [0x5f,0xfa,0xa1,0xf5]
+@ CHECK: uxtb.w r8, r3, ror #24 @ encoding: [0x5f,0xfa,0xb3,0xf8]
+@ CHECK: uxtb.w r7, r8 @ encoding: [0x5f,0xfa,0x88,0xf7]
+
+
+@------------------------------------------------------------------------------
+@ UXTB16
+@------------------------------------------------------------------------------
+ uxtb16 r1, r4
+ uxtb16 r6, r7, ror #0
+ it cs
+ uxtb16cs r3, r5, ror #8
+ uxtb16 r3, r1, ror #16
+ it ge
+ uxtb16ge r2, r3, ror #24
+
+@ CHECK: uxtb16 r1, r4 @ encoding: [0x3f,0xfa,0x84,0xf1]
+@ CHECK: uxtb16 r6, r7 @ encoding: [0x3f,0xfa,0x87,0xf6]
+@ CHECK: it hs @ encoding: [0x28,0xbf]
+@ CHECK: uxtb16hs r3, r5, ror #8 @ encoding: [0x3f,0xfa,0x95,0xf3]
+@ CHECK: uxtb16 r3, r1, ror #16 @ encoding: [0x3f,0xfa,0xa1,0xf3]
+@ CHECK: it ge @ encoding: [0xa8,0xbf]
+@ CHECK: uxtb16ge r2, r3, ror #24 @ encoding: [0x3f,0xfa,0xb3,0xf2]
+
+
+@------------------------------------------------------------------------------
+@ UXTH
+@------------------------------------------------------------------------------
+ it ne
+ uxthne r3, r9
+ uxth r1, r6, ror #0
+ uxth r3, r8, ror #8
+ it le
+ uxthle r2, r2, ror #16
+ uxth r9, r3, ror #24
+ uxth.w r7, r8
+
+@ CHECK: it ne @ encoding: [0x18,0xbf]
+@ CHECK: uxthne.w r3, r9 @ encoding: [0x1f,0xfa,0x89,0xf3]
+@ CHECK: uxth r1, r6 @ encoding: [0xb1,0xb2]
+@ CHECK: uxth.w r3, r8, ror #8 @ encoding: [0x1f,0xfa,0x98,0xf3]
+@ CHECK: it le @ encoding: [0xd8,0xbf]
+@ CHECK: uxthle.w r2, r2, ror #16 @ encoding: [0x1f,0xfa,0xa2,0xf2]
+@ CHECK: uxth.w r9, r3, ror #24 @ encoding: [0x1f,0xfa,0xb3,0xf9]
+@ CHECK: uxth.w r7, r8 @ encoding: [0x1f,0xfa,0x88,0xf7]
+
+@------------------------------------------------------------------------------
+@ WFE/WFI/YIELD
+@------------------------------------------------------------------------------
+ wfe
+ wfi
+ yield
+ itet lt
+ wfelt
+ wfige
+ yieldlt
+
+@ CHECK: wfe @ encoding: [0x20,0xbf]
+@ CHECK: wfi @ encoding: [0x30,0xbf]
+@ CHECK: yield @ encoding: [0x10,0xbf]
+@ CHECK: itet lt @ encoding: [0xb6,0xbf]
+@ CHECK: wfelt @ encoding: [0x20,0xbf]
+@ CHECK: wfige @ encoding: [0x30,0xbf]
+@ CHECK: yieldlt @ encoding: [0x10,0xbf]
diff --git a/test/MC/ARM/diagnostics.s b/test/MC/ARM/diagnostics.s
index 4537a0f..f722dd7 100644
--- a/test/MC/ARM/diagnostics.s
+++ b/test/MC/ARM/diagnostics.s
@@ -88,3 +88,230 @@
@ CHECK-ERRORS: error: invalid operand for instruction
@ CHECK-ERRORS: error: invalid operand for instruction
@ CHECK-ERRORS: error: invalid operand for instruction
+
+
+ @ Out of range immediate for MOV
+ movw r9, 0x10000
+@ CHECK-ERRORS: error: invalid operand for instruction
+
+ @ Invalid 's' bit usage for MOVW
+ movs r6, #0xffff
+ movwseq r9, #0xffff
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: error: instruction 'movw' can not set flags, but 's' suffix specified
+
+ @ Out of range immediate for MOVT
+ movt r9, 0x10000
+@ CHECK-ERRORS: error: invalid operand for instruction
+
+ @ Out of range immediates for MRC/MRC2/MRRC/MRRC2
+ mrc p14, #8, r1, c1, c2, #4
+ mrc p14, #1, r1, c1, c2, #8
+ mrc2 p14, #8, r1, c1, c2, #4
+ mrc2 p14, #0, r1, c1, c2, #9
+ mrrc p7, #16, r5, r4, c1
+ mrrc2 p7, #17, r5, r4, c1
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: error: invalid operand for instruction
+
+ @ Shifter operand validation for PKH instructions.
+ pkhbt r2, r2, r3, lsl #-1
+ pkhbt r2, r2, r3, lsl #32
+ pkhtb r2, r2, r3, asr #0
+ pkhtb r2, r2, r3, asr #33
+ pkhbt r2, r2, r3, asr #3
+ pkhtb r2, r2, r3, lsl #3
+
+@ CHECK-ERRORS: error: immediate value out of range
+@ CHECK-ERRORS: pkhbt r2, r2, r3, lsl #-1
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: immediate value out of range
+@ CHECK-ERRORS: pkhbt r2, r2, r3, lsl #32
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: immediate value out of range
+@ CHECK-ERRORS: pkhtb r2, r2, r3, asr #0
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: immediate value out of range
+@ CHECK-ERRORS: pkhtb r2, r2, r3, asr #33
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: lsl operand expected.
+@ CHECK-ERRORS: pkhbt r2, r2, r3, asr #3
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: asr operand expected.
+@ CHECK-ERRORS: pkhtb r2, r2, r3, lsl #3
+@ CHECK-ERRORS: ^
+
+
+ @ bad values for SETEND
+ setendne be
+ setend me
+ setend 1
+
+@ CHECK-ERRORS: error: instruction 'setend' is not predicable, but condition code specified
+@ CHECK-ERRORS: setendne be
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: 'be' or 'le' operand expected
+@ CHECK-ERRORS: setend me
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: 'be' or 'le' operand expected
+@ CHECK-ERRORS: setend 1
+@ CHECK-ERRORS: ^
+
+
+ @ Out of range immediates and bad shift types for SSAT
+ ssat r8, #0, r10, lsl #8
+ ssat r8, #33, r10, lsl #8
+ ssat r8, #1, r10, lsl #-1
+ ssat r8, #1, r10, lsl #32
+ ssat r8, #1, r10, asr #0
+ ssat r8, #1, r10, asr #33
+ ssat r8, #1, r10, lsr #5
+ ssat r8, #1, r10, lsl fred
+ ssat r8, #1, r10, lsl #fred
+
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: ssat r8, #0, r10, lsl #8
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: ssat r8, #33, r10, lsl #8
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31]
+@ CHECK-ERRORS: ssat r8, #1, r10, lsl #-1
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: 'lsr' shift amount must be in range [0,31]
+@ CHECK-ERRORS: ssat r8, #1, r10, lsl #32
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32]
+@ CHECK-ERRORS: ssat r8, #1, r10, asr #0
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: 'asr' shift amount must be in range [1,32]
+@ CHECK-ERRORS: ssat r8, #1, r10, asr #33
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: shift operator 'asr' or 'lsl' expected
+@ CHECK-ERRORS: ssat r8, #1, r10, lsr #5
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: '#' expected
+@ CHECK-ERRORS: ssat r8, #1, r10, lsl fred
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: shift amount must be an immediate
+@ CHECK-ERRORS: ssat r8, #1, r10, lsl #fred
+@ CHECK-ERRORS: ^
+
+ @ Out of range immediates for SSAT16
+ ssat16 r2, #0, r7
+ ssat16 r3, #17, r5
+
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: ssat16 r2, #0, r7
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: ssat16 r3, #17, r5
+@ CHECK-ERRORS: ^
+
+
+ @ Out of order STM registers
+ stmda sp!, {r5, r2}
+
+@ CHECK-ERRORS: error: register list not in ascending order
+@ CHECK-ERRORS: stmda sp!, {r5, r2}
+@ CHECK-ERRORS: ^
+
+
+ @ Out of range immediate on SVC
+ svc #0x1000000
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: svc #0x1000000
+@ CHECK-ERRORS: ^
+
+
+ @ Out of order Rt/Rt2 operands for ldrexd/strexd
+ ldrexd r4, r3, [r8]
+ strexd r6, r5, r3, [r8]
+
+@ CHECK-ERRORS: error: destination operands must be sequential
+@ CHECK-ERRORS: ldrexd r4, r3, [r8]
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: source operands must be sequential
+@ CHECK-ERRORS: strexd r6, r5, r3, [r8]
+@ CHECK-ERRORS: ^
+
+ @ Illegal rotate operators for extend instructions
+ sxtb r8, r3, #8
+ sxtb r8, r3, ror 24
+ sxtb r8, r3, ror #8 -
+ sxtab r3, r8, r3, ror #(fred - wilma)
+ sxtab r7, r8, r3, ror #25
+ sxtah r9, r3, r3, ror #-8
+ sxtb16ge r2, r3, lsr #24
+
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: sxtb r8, r3, #8
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: '#' expected
+@ CHECK-ERRORS: sxtb r8, r3, ror 24
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: unknown token in expression
+@ CHECK-ERRORS: sxtb r8, r3, ror #8 -
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: malformed rotate expression
+@ CHECK-ERRORS: sxtb r8, r3, ror #8 -
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: rotate amount must be an immediate
+@ CHECK-ERRORS: sxtab r3, r8, r3, ror #(fred - wilma)
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24
+@ CHECK-ERRORS: sxtab r7, r8, r3, ror #25
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: 'ror' rotate amount must be 8, 16, or 24
+@ CHECK-ERRORS: sxtah r9, r3, r3, ror #-8
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: sxtb16ge r2, r3, lsr #24
+@ CHECK-ERRORS: ^
+
+ @ Out of range width for SBFX/UBFX
+ sbfx r4, r5, #31, #2
+ ubfxgt r4, r5, #16, #17
+
+@ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb]
+@ CHECK-ERRORS: sbfx r4, r5, #31, #2
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: bitfield width must be in range [1,32-lsb]
+@ CHECK-ERRORS: ubfxgt r4, r5, #16, #17
+@ CHECK-ERRORS: ^
+
+ @ Out of order Rt/Rt2 operands for ldrd
+ ldrd r4, r3, [r8]
+ ldrd r4, r3, [r8, #8]!
+ ldrd r4, r3, [r8], #8
+@ CHECK-ERRORS: error: destination operands must be sequential
+@ CHECK-ERRORS: ldrd r4, r3, [r8]
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: destination operands must be sequential
+@ CHECK-ERRORS: ldrd r4, r3, [r8, #8]!
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: destination operands must be sequential
+@ CHECK-ERRORS: ldrd r4, r3, [r8], #8
+@ CHECK-ERRORS: ^
+
+
+ @ Bad register lists for VFP.
+ vpush {s0, s3}
+@ CHECK-ERRORS: error: non-contiguous register range
+@ CHECK-ERRORS: vpush {s0, s3}
+@ CHECK-ERRORS: ^
+
+ @ Out of range coprocessor option immediate.
+ ldc2 p2, c8, [r1], { 256 }
+ ldc2 p2, c8, [r1], { -1 }
+
+@ CHECK-ERRORS: error: coprocessor option must be an immediate in range [0, 255]
+@ CHECK-ERRORS: ldc2 p2, c8, [r1], { 256 }
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: coprocessor option must be an immediate in range [0, 255]
+@ CHECK-ERRORS: ldc2 p2, c8, [r1], { -1 }
+@ CHECK-ERRORS: ^
diff --git a/test/MC/ARM/elf-movt.s b/test/MC/ARM/elf-movt.s
index 18061f5..02bb5a6 100644
--- a/test/MC/ARM/elf-movt.s
+++ b/test/MC/ARM/elf-movt.s
@@ -27,13 +27,13 @@ barf: @ @barf
@ OBJ-NEXT: 'sh_entsize', 0x00000000
@ OBJ-NEXT: '_section_data', 'f00f0fe3 f40f4fe3'
-@ OBJ: Relocation 0x00000000
+@ OBJ: Relocation 0
@ OBJ-NEXT: 'r_offset', 0x00000000
@ OBJ-NEXT: 'r_sym'
-@ OBJ-NEXT: 'r_type', 0x0000002d
+@ OBJ-NEXT: 'r_type', 0x2d
-@ OBJ: Relocation 0x00000001
+@ OBJ: Relocation 1
@ OBJ-NEXT: 'r_offset', 0x00000004
@ OBJ-NEXT: 'r_sym'
-@ OBJ-NEXT: 'r_type', 0x0000002e
+@ OBJ-NEXT: 'r_type', 0x2e
diff --git a/test/MC/ARM/elf-reloc-01.ll b/test/MC/ARM/elf-reloc-01.ll
index eb6e243..e6efe7e 100644
--- a/test/MC/ARM/elf-reloc-01.ll
+++ b/test/MC/ARM/elf-reloc-01.ll
@@ -60,11 +60,11 @@ bb3: ; preds = %bb, %entry
declare void @exit(i32) noreturn nounwind
-;; OBJ: Relocation 0x00000001
+;; OBJ: Relocation 1
;; OBJ-NEXT: 'r_offset',
-;; OBJ-NEXT: 'r_sym', 0x00000002
-;; OBJ-NEXT: 'r_type', 0x0000002b
+;; OBJ-NEXT: 'r_sym', 0x000002
+;; OBJ-NEXT: 'r_type', 0x2b
-;; OBJ: Symbol 0x00000002
+;; OBJ: Symbol 2
;; OBJ-NEXT: '_MergedGlobals'
;; OBJ-NEXT: 'st_value', 0x00000010
diff --git a/test/MC/ARM/elf-reloc-02.ll b/test/MC/ARM/elf-reloc-02.ll
index 091e89f..e51bac3 100644
--- a/test/MC/ARM/elf-reloc-02.ll
+++ b/test/MC/ARM/elf-reloc-02.ll
@@ -41,10 +41,10 @@ declare i32 @write(...)
declare void @exit(i32) noreturn nounwind
-;; OBJ: Relocation 0x00000000
+;; OBJ: Relocation 0
;; OBJ-NEXT: 'r_offset',
-;; OBJ-NEXT: 'r_sym', 0x00000002
-;; OBJ-NEXT: 'r_type', 0x0000002b
+;; OBJ-NEXT: 'r_sym', 0x000002
+;; OBJ-NEXT: 'r_type', 0x2b
-;; OBJ: Symbol 0x00000002
+;; OBJ: Symbol 2
;; OBJ-NEXT: '.L.str'
diff --git a/test/MC/ARM/elf-reloc-03.ll b/test/MC/ARM/elf-reloc-03.ll
index 91dba55..922242f 100644
--- a/test/MC/ARM/elf-reloc-03.ll
+++ b/test/MC/ARM/elf-reloc-03.ll
@@ -88,10 +88,10 @@ entry:
declare void @exit(i32) noreturn nounwind
-;; OBJ: Relocation 0x00000001
+;; OBJ: Relocation 1
;; OBJ-NEXT: 'r_offset',
-;; OBJ-NEXT: 'r_sym', 0x0000000c
-;; OBJ-NEXT: 'r_type', 0x0000002b
+;; OBJ-NEXT: 'r_sym', 0x00000c
+;; OBJ-NEXT: 'r_type', 0x2b
-;; OBJ: Symbol 0x0000000c
+;; OBJ: Symbol 12
;; OBJ-NEXT: 'vtable'
diff --git a/test/MC/ARM/elf-thumbfunc-reloc.ll b/test/MC/ARM/elf-thumbfunc-reloc.ll
index 6fce4038..e7cb01e 100644
--- a/test/MC/ARM/elf-thumbfunc-reloc.ll
+++ b/test/MC/ARM/elf-thumbfunc-reloc.ll
@@ -22,16 +22,16 @@ entry:
; make sure that bl 0 <foo> (fff7feff) is correctly encoded
-; CHECK: '_section_data', '70470000 2de90048 fff7feff bde80088'
+; CHECK: '_section_data', '704700bf 2de90048 fff7feff bde80008'
; Offset Info Type Sym.Value Sym. Name
; 00000008 0000070a R_ARM_THM_CALL 00000001 foo
-; CHECK: Relocation 0x00000000
+; CHECK: Relocation 0
; CHECK-NEXT: 'r_offset', 0x00000008
-; CHECK-NEXT: 'r_sym', 0x00000007
-; CHECK-NEXT: 'r_type', 0x0000000a
+; CHECK-NEXT: 'r_sym', 0x000007
+; CHECK-NEXT: 'r_type', 0x0a
; make sure foo is thumb function: bit 0 = 1
-; CHECK: Symbol 0x00000007
+; CHECK: Symbol 7
; CHECK-NEXT: 'foo'
; CHECK-NEXT: 'st_value', 0x00000001
diff --git a/test/MC/ARM/elf-thumbfunc.s b/test/MC/ARM/elf-thumbfunc.s
index a1b3c31..0aa7f41 100644
--- a/test/MC/ARM/elf-thumbfunc.s
+++ b/test/MC/ARM/elf-thumbfunc.s
@@ -12,9 +12,9 @@ foo:
bx lr
@@ make sure foo is thumb function: bit 0 = 1 (st_value)
-@CHECK: Symbol 0x00000004
+@CHECK: Symbol 4
@CHECK-NEXT: 'st_name', 0x00000001
@CHECK-NEXT: 'st_value', 0x00000001
@CHECK-NEXT: 'st_size', 0x00000000
-@CHECK-NEXT: 'st_bind', 0x00000001
-@CHECK-NEXT: 'st_type', 0x00000002
+@CHECK-NEXT: 'st_bind', 0x1
+@CHECK-NEXT: 'st_type', 0x2
diff --git a/test/MC/ARM/mode-switch.s b/test/MC/ARM/mode-switch.s
index 4cc986a..9d49954 100644
--- a/test/MC/ARM/mode-switch.s
+++ b/test/MC/ARM/mode-switch.s
@@ -1,17 +1,15 @@
@ Test ARM / Thumb mode switching with .code
-@ RUN: llvm-mc -mcpu=cortex-a8 -triple arm-unknown-unknown -show-encoding < %s | FileCheck %s
-@ RUN: llvm-mc -mcpu=cortex-a8 -triple thumb-unknown-unknown -show-encoding < %s | FileCheck %s
+@ RUN: llvm-mc -triple armv7-unknown-unknown -show-encoding < %s | FileCheck %s
+@ RUN: llvm-mc -triple thumbv7-unknown-unknown -show-encoding <%s | FileCheck %s
.code 16
-
-@ CHECK: add.w r0, r0, r1 @ encoding: [0x00,0xeb,0x01,0x00]
add.w r0, r0, r1
+@ CHECK: add.w r0, r0, r1 @ encoding: [0x00,0xeb,0x01,0x00]
.code 32
-@ CHECK: add r0, r0, r1 @ encoding: [0x01,0x00,0x80,0xe0]
add r0, r0, r1
+@ CHECK: add r0, r0, r1 @ encoding: [0x01,0x00,0x80,0xe0]
.code 16
-@ CHECK: add r0, r0, r1 @ encoding: [0x40,0x18]
-
- add r0, r0, r1
+ adds r0, r0, r1
+@ CHECK: adds r0, r0, r1 @ encoding: [0x40,0x18]
diff --git a/test/MC/ARM/neon-bitwise-encoding.s b/test/MC/ARM/neon-bitwise-encoding.s
index 8710923..81e2c4d 100644
--- a/test/MC/ARM/neon-bitwise-encoding.s
+++ b/test/MC/ARM/neon-bitwise-encoding.s
@@ -1,47 +1,55 @@
@ RUN: llvm-mc -mcpu=cortex-a8 -triple arm-unknown-unknown -show-encoding < %s | FileCheck %s
-@ XFAIL: *
-@ CHECK: vand d16, d17, d16 @ encoding: [0xb0,0x01,0x41,0xf2]
vand d16, d17, d16
-@ CHECK: vand q8, q8, q9 @ encoding: [0xf2,0x01,0x40,0xf2]
vand q8, q8, q9
-@ CHECK: veor d16, d17, d16 @ encoding: [0xb0,0x01,0x41,0xf3]
+@ CHECK: vand d16, d17, d16 @ encoding: [0xb0,0x01,0x41,0xf2]
+@ CHECK: vand q8, q8, q9 @ encoding: [0xf2,0x01,0x40,0xf2]
+
veor d16, d17, d16
-@ CHECK: veor q8, q8, q9 @ encoding: [0xf2,0x01,0x40,0xf3]
veor q8, q8, q9
-@ CHECK: vorr d16, d17, d16 @ encoding: [0xb0,0x01,0x61,0xf2]
+@ CHECK: veor d16, d17, d16 @ encoding: [0xb0,0x01,0x41,0xf3]
+@ CHECK: veor q8, q8, q9 @ encoding: [0xf2,0x01,0x40,0xf3]
+
vorr d16, d17, d16
-@ CHECK: vorr q8, q8, q9 @ encoding: [0xf2,0x01,0x60,0xf2]
vorr q8, q8, q9
-@ CHECK: vorr.i32 d16, #0x1000000 @ encoding: [0x11,0x07,0xc0,0xf2]
- vorr.i32 d16, #0x1000000
-@ CHECK: vorr.i32 q8, #0x1000000 @ encoding: [0x51,0x07,0xc0,0xf2]
- vorr.i32 q8, #0x1000000
-@ CHECK: vorr.i32 q8, #0x0 @ encoding: [0x50,0x01,0xc0,0xf2]
- vorr.i32 q8, #0x0
-@ CHECK: vbic d16, d17, d16 @ encoding: [0xb0,0x01,0x51,0xf2]
+@ CHECK: vorr d16, d17, d16 @ encoding: [0xb0,0x01,0x61,0xf2]
+@ CHECK: vorr q8, q8, q9 @ encoding: [0xf2,0x01,0x60,0xf2]
+
+ vorr.i32 d16, #0x1000000
+ vorr.i32 q8, #0x1000000
+ vorr.i32 q8, #0x0
+
+@ FIXME: vorr.i32 d16, #0x1000000 @ encoding: [0x11,0x07,0xc0,0xf2]
+@ FIXME: vorr.i32 q8, #0x1000000 @ encoding: [0x51,0x07,0xc0,0xf2]
+@ FIXME: vorr.i32 q8, #0x0 @ encoding: [0x50,0x01,0xc0,0xf2]
+
vbic d16, d17, d16
-@ CHECK: vbic q8, q8, q9 @ encoding: [0xf2,0x01,0x50,0xf2]
vbic q8, q8, q9
-@ CHECK: vbic.i32 d16, #0xFF000000 @ encoding: [0x3f,0x07,0xc7,0xf3]
- vbic.i32 d16, #0xFF000000
-@ CHECK: vbic.i32 q8, #0xFF000000 @ encoding: [0x7f,0x07,0xc7,0xf3]
- vbic.i32 q8, #0xFF000000
+ vbic.i32 d16, #0xFF000000
+ vbic.i32 q8, #0xFF000000
+
+@ CHECK: vbic d16, d17, d16 @ encoding: [0xb0,0x01,0x51,0xf2]
+@ CHECK: vbic q8, q8, q9 @ encoding: [0xf2,0x01,0x50,0xf2]
+@ FIXME: vbic.i32 d16, #0xFF000000 @ encoding: [0x3f,0x07,0xc7,0xf3]
+@ FIXME: vbic.i32 q8, #0xFF000000 @ encoding: [0x7f,0x07,0xc7,0xf3]
-@ CHECK: vorn d16, d17, d16 @ encoding: [0xb0,0x01,0x71,0xf2]
vorn d16, d17, d16
-@ CHECK: vorn q8, q8, q9 @ encoding: [0xf2,0x01,0x70,0xf2]
vorn q8, q8, q9
-@ CHECK: vmvn d16, d16 @ encoding: [0xa0,0x05,0xf0,0xf3]
+@ CHECK: vorn d16, d17, d16 @ encoding: [0xb0,0x01,0x71,0xf2]
+@ CHECK: vorn q8, q8, q9 @ encoding: [0xf2,0x01,0x70,0xf2]
+
vmvn d16, d16
-@ CHECK: vmvn q8, q8 @ encoding: [0xe0,0x05,0xf0,0xf3]
vmvn q8, q8
-@ CHECK: vbsl d18, d17, d16 @ encoding: [0xb0,0x21,0x51,0xf3]
+@ CHECK: vmvn d16, d16 @ encoding: [0xa0,0x05,0xf0,0xf3]
+@ CHECK: vmvn q8, q8 @ encoding: [0xe0,0x05,0xf0,0xf3]
+
vbsl d18, d17, d16
-@ CHECK: vbsl q8, q10, q9 @ encoding: [0xf2,0x01,0x54,0xf3]
vbsl q8, q10, q9
+
+@ CHECK: vbsl d18, d17, d16 @ encoding: [0xb0,0x21,0x51,0xf3]
+@ CHECK: vbsl q8, q10, q9 @ encoding: [0xf2,0x01,0x54,0xf3]
diff --git a/test/MC/ARM/neon-cmp-encoding.s b/test/MC/ARM/neon-cmp-encoding.s
index 6bfc549..d94e2f7 100644
--- a/test/MC/ARM/neon-cmp-encoding.s
+++ b/test/MC/ARM/neon-cmp-encoding.s
@@ -1,115 +1,113 @@
@ RUN: llvm-mc -mcpu=cortex-a8 -triple arm-unknown-unknown -show-encoding < %s | FileCheck %s
-@ XFAIL: *
-@ FIXME: We cannot currently test the following instructions, which are
-@ currently marked as for-disassembly only in the .td files:
-@ - VCEQz
-@ - VCGEz, VCLEz
-@ - VCGTz, VCLTz
-
-@ CHECK: vceq.i8 d16, d16, d17 @ encoding: [0xb1,0x08,0x40,0xf3]
vceq.i8 d16, d16, d17
-@ CHECK: vceq.i16 d16, d16, d17 @ encoding: [0xb1,0x08,0x50,0xf3]
vceq.i16 d16, d16, d17
-@ CHECK: vceq.i32 d16, d16, d17 @ encoding: [0xb1,0x08,0x60,0xf3]
vceq.i32 d16, d16, d17
-@ CHECK: vceq.f32 d16, d16, d17 @ encoding: [0xa1,0x0e,0x40,0xf2]
vceq.f32 d16, d16, d17
-@ CHECK: vceq.i8 q8, q8, q9 @ encoding: [0xf2,0x08,0x40,0xf3]
vceq.i8 q8, q8, q9
-@ CHECK: vceq.i16 q8, q8, q9 @ encoding: [0xf2,0x08,0x50,0xf3]
vceq.i16 q8, q8, q9
-@ CHECK: vceq.i32 q8, q8, q9 @ encoding: [0xf2,0x08,0x60,0xf3]
vceq.i32 q8, q8, q9
-@ CHECK: vceq.f32 q8, q8, q9 @ encoding: [0xe2,0x0e,0x40,0xf2]
vceq.f32 q8, q8, q9
-@ CHECK: vcge.s8 d16, d16, d17 @ encoding: [0xb1,0x03,0x40,0xf2]
+@ CHECK: vceq.i8 d16, d16, d17 @ encoding: [0xb1,0x08,0x40,0xf3]
+@ CHECK: vceq.i16 d16, d16, d17 @ encoding: [0xb1,0x08,0x50,0xf3]
+@ CHECK: vceq.i32 d16, d16, d17 @ encoding: [0xb1,0x08,0x60,0xf3]
+@ CHECK: vceq.f32 d16, d16, d17 @ encoding: [0xa1,0x0e,0x40,0xf2]
+@ CHECK: vceq.i8 q8, q8, q9 @ encoding: [0xf2,0x08,0x40,0xf3]
+@ CHECK: vceq.i16 q8, q8, q9 @ encoding: [0xf2,0x08,0x50,0xf3]
+@ CHECK: vceq.i32 q8, q8, q9 @ encoding: [0xf2,0x08,0x60,0xf3]
+@ CHECK: vceq.f32 q8, q8, q9 @ encoding: [0xe2,0x0e,0x40,0xf2]
+
vcge.s8 d16, d16, d17
-@ CHECK: vcge.s16 d16, d16, d17 @ encoding: [0xb1,0x03,0x50,0xf2]
vcge.s16 d16, d16, d17
-@ CHECK: vcge.s32 d16, d16, d17 @ encoding: [0xb1,0x03,0x60,0xf2]
vcge.s32 d16, d16, d17
-@ CHECK: vcge.u8 d16, d16, d17 @ encoding: [0xb1,0x03,0x40,0xf3]
vcge.u8 d16, d16, d17
-@ CHECK: vcge.u16 d16, d16, d17 @ encoding: [0xb1,0x03,0x50,0xf3]
vcge.u16 d16, d16, d17
-@ CHECK: vcge.u32 d16, d16, d17 @ encoding: [0xb1,0x03,0x60,0xf3]
vcge.u32 d16, d16, d17
-@ CHECK: vcge.f32 d16, d16, d17 @ encoding: [0xa1,0x0e,0x40,0xf3]
vcge.f32 d16, d16, d17
-@ CHECK: vcge.s8 q8, q8, q9 @ encoding: [0xf2,0x03,0x40,0xf2]
vcge.s8 q8, q8, q9
-@ CHECK: vcge.s16 q8, q8, q9 @ encoding: [0xf2,0x03,0x50,0xf2]
vcge.s16 q8, q8, q9
-@ CHECK: vcge.s32 q8, q8, q9 @ encoding: [0xf2,0x03,0x60,0xf2]
vcge.s32 q8, q8, q9
-@ CHECK: vcge.u8 q8, q8, q9 @ encoding: [0xf2,0x03,0x40,0xf3]
vcge.u8 q8, q8, q9
-@ CHECK: vcge.u16 q8, q8, q9 @ encoding: [0xf2,0x03,0x50,0xf3]
vcge.u16 q8, q8, q9
-@ CHECK: vcge.u32 q8, q8, q9 @ encoding: [0xf2,0x03,0x60,0xf3]
vcge.u32 q8, q8, q9
-@ CHECK: vcge.f32 q8, q8, q9 @ encoding: [0xe2,0x0e,0x40,0xf3]
vcge.f32 q8, q8, q9
-@ CHECK: vacge.f32 d16, d16, d17 @ encoding: [0xb1,0x0e,0x40,0xf3]
vacge.f32 d16, d16, d17
-@ CHECK: vacge.f32 q8, q8, q9 @ encoding: [0xf2,0x0e,0x40,0xf3]
vacge.f32 q8, q8, q9
-@ CHECK: vcgt.s8 d16, d16, d17 @ encoding: [0xa1,0x03,0x40,0xf2]
+@ CHECK: vcge.s8 d16, d16, d17 @ encoding: [0xb1,0x03,0x40,0xf2]
+@ CHECK: vcge.s16 d16, d16, d17 @ encoding: [0xb1,0x03,0x50,0xf2]
+@ CHECK: vcge.s32 d16, d16, d17 @ encoding: [0xb1,0x03,0x60,0xf2]
+@ CHECK: vcge.u8 d16, d16, d17 @ encoding: [0xb1,0x03,0x40,0xf3]
+@ CHECK: vcge.u16 d16, d16, d17 @ encoding: [0xb1,0x03,0x50,0xf3]
+@ CHECK: vcge.u32 d16, d16, d17 @ encoding: [0xb1,0x03,0x60,0xf3]
+@ CHECK: vcge.f32 d16, d16, d17 @ encoding: [0xa1,0x0e,0x40,0xf3]
+@ CHECK: vcge.s8 q8, q8, q9 @ encoding: [0xf2,0x03,0x40,0xf2]
+@ CHECK: vcge.s16 q8, q8, q9 @ encoding: [0xf2,0x03,0x50,0xf2]
+@ CHECK: vcge.s32 q8, q8, q9 @ encoding: [0xf2,0x03,0x60,0xf2]
+@ CHECK: vcge.u8 q8, q8, q9 @ encoding: [0xf2,0x03,0x40,0xf3]
+@ CHECK: vcge.u16 q8, q8, q9 @ encoding: [0xf2,0x03,0x50,0xf3]
+@ CHECK: vcge.u32 q8, q8, q9 @ encoding: [0xf2,0x03,0x60,0xf3]
+@ CHECK: vcge.f32 q8, q8, q9 @ encoding: [0xe2,0x0e,0x40,0xf3]
+@ CHECK: vacge.f32 d16, d16, d17 @ encoding: [0xb1,0x0e,0x40,0xf3]
+@ CHECK: vacge.f32 q8, q8, q9 @ encoding: [0xf2,0x0e,0x40,0xf3]
+
vcgt.s8 d16, d16, d17
-@ CHECK: vcgt.s16 d16, d16, d17 @ encoding: [0xa1,0x03,0x50,0xf2]
vcgt.s16 d16, d16, d17
-@ CHECK: vcgt.s32 d16, d16, d17 @ encoding: [0xa1,0x03,0x60,0xf2]
vcgt.s32 d16, d16, d17
-@ CHECK: vcgt.u8 d16, d16, d17 @ encoding: [0xa1,0x03,0x40,0xf3]
vcgt.u8 d16, d16, d17
-@ CHECK: vcgt.u16 d16, d16, d17 @ encoding: [0xa1,0x03,0x50,0xf3]
vcgt.u16 d16, d16, d17
-@ CHECK: vcgt.u32 d16, d16, d17 @ encoding: [0xa1,0x03,0x60,0xf3]
vcgt.u32 d16, d16, d17
-@ CHECK: vcgt.f32 d16, d16, d17 @ encoding: [0xa1,0x0e,0x60,0xf3]
vcgt.f32 d16, d16, d17
-@ CHECK: vcgt.s8 q8, q8, q9 @ encoding: [0xe2,0x03,0x40,0xf2]
vcgt.s8 q8, q8, q9
-@ CHECK: vcgt.s16 q8, q8, q9 @ encoding: [0xe2,0x03,0x50,0xf2]
vcgt.s16 q8, q8, q9
-@ CHECK: vcgt.s32 q8, q8, q9 @ encoding: [0xe2,0x03,0x60,0xf2]
vcgt.s32 q8, q8, q9
-@ CHECK: vcgt.u8 q8, q8, q9 @ encoding: [0xe2,0x03,0x40,0xf3]
vcgt.u8 q8, q8, q9
-@ CHECK: vcgt.u16 q8, q8, q9 @ encoding: [0xe2,0x03,0x50,0xf3]
vcgt.u16 q8, q8, q9
-@ CHECK: vcgt.u32 q8, q8, q9 @ encoding: [0xe2,0x03,0x60,0xf3]
vcgt.u32 q8, q8, q9
-@ CHECK: vcgt.f32 q8, q8, q9 @ encoding: [0xe2,0x0e,0x60,0xf3]
vcgt.f32 q8, q8, q9
-@ CHECK: vacgt.f32 d16, d16, d17 @ encoding: [0xb1,0x0e,0x60,0xf3]
vacgt.f32 d16, d16, d17
-@ CHECK: vacgt.f32 q8, q8, q9 @ encoding: [0xf2,0x0e,0x60,0xf3]
vacgt.f32 q8, q8, q9
-@ CHECK: vtst.8 d16, d16, d17 @ encoding: [0xb1,0x08,0x40,0xf2]
+@ CHECK: vcgt.s8 d16, d16, d17 @ encoding: [0xa1,0x03,0x40,0xf2]
+@ CHECK: vcgt.s16 d16, d16, d17 @ encoding: [0xa1,0x03,0x50,0xf2]
+@ CHECK: vcgt.s32 d16, d16, d17 @ encoding: [0xa1,0x03,0x60,0xf2]
+@ CHECK: vcgt.u8 d16, d16, d17 @ encoding: [0xa1,0x03,0x40,0xf3]
+@ CHECK: vcgt.u16 d16, d16, d17 @ encoding: [0xa1,0x03,0x50,0xf3]
+@ CHECK: vcgt.u32 d16, d16, d17 @ encoding: [0xa1,0x03,0x60,0xf3]
+@ CHECK: vcgt.f32 d16, d16, d17 @ encoding: [0xa1,0x0e,0x60,0xf3]
+@ CHECK: vcgt.s8 q8, q8, q9 @ encoding: [0xe2,0x03,0x40,0xf2]
+@ CHECK: vcgt.s16 q8, q8, q9 @ encoding: [0xe2,0x03,0x50,0xf2]
+@ CHECK: vcgt.s32 q8, q8, q9 @ encoding: [0xe2,0x03,0x60,0xf2]
+@ CHECK: vcgt.u8 q8, q8, q9 @ encoding: [0xe2,0x03,0x40,0xf3]
+@ CHECK: vcgt.u16 q8, q8, q9 @ encoding: [0xe2,0x03,0x50,0xf3]
+@ CHECK: vcgt.u32 q8, q8, q9 @ encoding: [0xe2,0x03,0x60,0xf3]
+@ CHECK: vcgt.f32 q8, q8, q9 @ encoding: [0xe2,0x0e,0x60,0xf3]
+@ CHECK: vacgt.f32 d16, d16, d17 @ encoding: [0xb1,0x0e,0x60,0xf3]
+@ CHECK: vacgt.f32 q8, q8, q9 @ encoding: [0xf2,0x0e,0x60,0xf3]
+
vtst.8 d16, d16, d17
-@ CHECK: vtst.16 d16, d16, d17 @ encoding: [0xb1,0x08,0x50,0xf2]
vtst.16 d16, d16, d17
-@ CHECK: vtst.32 d16, d16, d17 @ encoding: [0xb1,0x08,0x60,0xf2]
vtst.32 d16, d16, d17
-@ CHECK: vtst.8 q8, q8, q9 @ encoding: [0xf2,0x08,0x40,0xf2]
vtst.8 q8, q8, q9
-@ CHECK: vtst.16 q8, q8, q9 @ encoding: [0xf2,0x08,0x50,0xf2]
vtst.16 q8, q8, q9
-@ CHECK: vtst.32 q8, q8, q9 @ encoding: [0xf2,0x08,0x60,0xf2]
vtst.32 q8, q8, q9
-@ CHECK: vceq.i8 d16, d16, #0 @ encoding: [0x20,0x01,0xf1,0xf3]
- vceq.i8 d16, d16, #0
-@ CHECK: vcge.s8 d16, d16, #0 @ encoding: [0xa0,0x00,0xf1,0xf3]
- vcge.s8 d16, d16, #0
-@ CHECK: vcle.s8 d16, d16, #0 @ encoding: [0xa0,0x01,0xf1,0xf3]
- vcle.s8 d16, d16, #0
-@ CHECK: vcgt.s8 d16, d16, #0 @ encoding: [0x20,0x00,0xf1,0xf3]
- vcgt.s8 d16, d16, #0
-@ CHECK: vclt.s8 d16, d16, #0 @ encoding: [0x20,0x02,0xf1,0xf3]
- vclt.s8 d16, d16, #0
+@ CHECK: vtst.8 d16, d16, d17 @ encoding: [0xb1,0x08,0x40,0xf2]
+@ CHECK: vtst.16 d16, d16, d17 @ encoding: [0xb1,0x08,0x50,0xf2]
+@ CHECK: vtst.32 d16, d16, d17 @ encoding: [0xb1,0x08,0x60,0xf2]
+@ CHECK: vtst.8 q8, q8, q9 @ encoding: [0xf2,0x08,0x40,0xf2]
+@ CHECK: vtst.16 q8, q8, q9 @ encoding: [0xf2,0x08,0x50,0xf2]
+@ CHECK: vtst.32 q8, q8, q9 @ encoding: [0xf2,0x08,0x60,0xf2]
+
+ vceq.i8 d16, d16, #0
+ vcge.s8 d16, d16, #0
+ vcle.s8 d16, d16, #0
+ vcgt.s8 d16, d16, #0
+ vclt.s8 d16, d16, #0
+
+@ CHECK: vceq.i8 d16, d16, #0 @ encoding: [0x20,0x01,0xf1,0xf3]
+@ CHECK: vcge.s8 d16, d16, #0 @ encoding: [0xa0,0x00,0xf1,0xf3]
+@ CHECK: vcle.s8 d16, d16, #0 @ encoding: [0xa0,0x01,0xf1,0xf3]
+@ CHECK: vcgt.s8 d16, d16, #0 @ encoding: [0x20,0x00,0xf1,0xf3]
+@ CHECK: vclt.s8 d16, d16, #0 @ encoding: [0x20,0x02,0xf1,0xf3]
diff --git a/test/MC/ARM/neon-dup-encoding.s b/test/MC/ARM/neon-dup-encoding.s
index 0aebdce..31dcf0b 100644
--- a/test/MC/ARM/neon-dup-encoding.s
+++ b/test/MC/ARM/neon-dup-encoding.s
@@ -1,27 +1,33 @@
@ RUN: llvm-mc -mcpu=cortex-a8 -triple arm-unknown-unknown -show-encoding < %s | FileCheck %s
-@ XFAIL: *
-@ CHECK: vdup.8 d16, r0 @ encoding: [0x90,0x0b,0xc0,0xee]
vdup.8 d16, r0
-@ CHECK: vdup.16 d16, r0 @ encoding: [0xb0,0x0b,0x80,0xee]
vdup.16 d16, r0
-@ CHECK: vdup.32 d16, r0 @ encoding: [0x90,0x0b,0x80,0xee]
vdup.32 d16, r0
-@ CHECK: vdup.8 q8, r0 @ encoding: [0x90,0x0b,0xe0,0xee]
+
+@ CHECK: vdup.8 d16, r0 @ encoding: [0x90,0x0b,0xc0,0xee]
+@ CHECK: vdup.16 d16, r0 @ encoding: [0xb0,0x0b,0x80,0xee]
+@ CHECK: vdup.32 d16, r0 @ encoding: [0x90,0x0b,0x80,0xee]
+
vdup.8 q8, r0
-@ CHECK: vdup.16 q8, r0 @ encoding: [0xb0,0x0b,0xa0,0xee]
vdup.16 q8, r0
-@ CHECK: vdup.32 q8, r0 @ encoding: [0x90,0x0b,0xa0,0xee]
vdup.32 q8, r0
-@ CHECK: vdup.8 d16, d16[1] @ encoding: [0x20,0x0c,0xf3,0xf3]
+
+@ CHECK: vdup.8 q8, r0 @ encoding: [0x90,0x0b,0xe0,0xee]
+@ CHECK: vdup.16 q8, r0 @ encoding: [0xb0,0x0b,0xa0,0xee]
+@ CHECK: vdup.32 q8, r0 @ encoding: [0x90,0x0b,0xa0,0xee]
+
vdup.8 d16, d16[1]
-@ CHECK: vdup.16 d16, d16[1] @ encoding: [0x20,0x0c,0xf6,0xf3]
vdup.16 d16, d16[1]
-@ CHECK: vdup.32 d16, d16[1] @ encoding: [0x20,0x0c,0xfc,0xf3]
vdup.32 d16, d16[1]
-@ CHECK: vdup.8 q8, d16[1] @ encoding: [0x60,0x0c,0xf3,0xf3]
+
+@ CHECK: vdup.8 d16, d16[1] @ encoding: [0x20,0x0c,0xf3,0xf3]
+@ CHECK: vdup.16 d16, d16[1] @ encoding: [0x20,0x0c,0xf6,0xf3]
+@ CHECK: vdup.32 d16, d16[1] @ encoding: [0x20,0x0c,0xfc,0xf3]
+
vdup.8 q8, d16[1]
-@ CHECK: vdup.16 q8, d16[1] @ encoding: [0x60,0x0c,0xf6,0xf3]
vdup.16 q8, d16[1]
-@ CHECK: vdup.32 q8, d16[1] @ encoding: [0x60,0x0c,0xfc,0xf3]
vdup.32 q8, d16[1]
+
+@ CHECK: vdup.8 q8, d16[1] @ encoding: [0x60,0x0c,0xf3,0xf3]
+@ CHECK: vdup.16 q8, d16[1] @ encoding: [0x60,0x0c,0xf6,0xf3]
+@ CHECK: vdup.32 q8, d16[1] @ encoding: [0x60,0x0c,0xfc,0xf3]
diff --git a/test/MC/ARM/neon-mov-encoding.s b/test/MC/ARM/neon-mov-encoding.s
index ca678d0..02eec12 100644
--- a/test/MC/ARM/neon-mov-encoding.s
+++ b/test/MC/ARM/neon-mov-encoding.s
@@ -1,117 +1,131 @@
@ RUN: llvm-mc -mcpu=cortex-a8 -triple arm-unknown-unknown -show-encoding < %s | FileCheck %s
@ XFAIL: *
-@ CHECK: vmov.i8 d16, #0x8 @ encoding: [0x18,0x0e,0xc0,0xf2]
- vmov.i8 d16, #0x8
-@ CHECK: vmov.i16 d16, #0x10 @ encoding: [0x10,0x08,0xc1,0xf2]
+ vmov.i8 d16, #0x8
vmov.i16 d16, #0x10
-@ CHECK: vmov.i16 d16, #0x1000 @ encoding: [0x10,0x0a,0xc1,0xf2]
vmov.i16 d16, #0x1000
-@ CHECK: vmov.i32 d16, #0x20 @ encoding: [0x10,0x00,0xc2,0xf2]
vmov.i32 d16, #0x20
-@ CHECK: vmov.i32 d16, #0x2000 @ encoding: [0x10,0x02,0xc2,0xf2]
vmov.i32 d16, #0x2000
-@ CHECK: vmov.i32 d16, #0x200000 @ encoding: [0x10,0x04,0xc2,0xf2]
vmov.i32 d16, #0x200000
-@ CHECK: vmov.i32 d16, #0x20000000 @ encoding: [0x10,0x06,0xc2,0xf2]
vmov.i32 d16, #0x20000000
-@ CHECK: vmov.i32 d16, #0x20FF @ encoding: [0x10,0x0c,0xc2,0xf2]
vmov.i32 d16, #0x20FF
-@ CHECK: vmov.i32 d16, #0x20FFFF @ encoding: [0x10,0x0d,0xc2,0xf2]
vmov.i32 d16, #0x20FFFF
-@ CHECK: vmov.i64 d16, #0xFF0000FF0000FFFF @ encoding: [0x33,0x0e,0xc1,0xf3]
vmov.i64 d16, #0xFF0000FF0000FFFF
-@ CHECK: vmov.i8 q8, #0x8 @ encoding: [0x58,0x0e,0xc0,0xf2]
- vmov.i8 q8, #0x8
-@ CHECK: vmov.i16 q8, #0x10 @ encoding: [0x50,0x08,0xc1,0xf2]
+
+@ CHECK: vmov.i8 d16, #0x8 @ encoding: [0x18,0x0e,0xc0,0xf2]
+@ CHECK: vmov.i16 d16, #0x10 @ encoding: [0x10,0x08,0xc1,0xf2]
+@ CHECK: vmov.i16 d16, #0x1000 @ encoding: [0x10,0x0a,0xc1,0xf2]
+@ CHECK: vmov.i32 d16, #0x20 @ encoding: [0x10,0x00,0xc2,0xf2]
+@ CHECK: vmov.i32 d16, #0x2000 @ encoding: [0x10,0x02,0xc2,0xf2]
+@ CHECK: vmov.i32 d16, #0x200000 @ encoding: [0x10,0x04,0xc2,0xf2]
+@ CHECK: vmov.i32 d16, #0x20000000 @ encoding: [0x10,0x06,0xc2,0xf2]
+@ CHECK: vmov.i32 d16, #0x20FF @ encoding: [0x10,0x0c,0xc2,0xf2]
+@ CHECK: vmov.i32 d16, #0x20FFFF @ encoding: [0x10,0x0d,0xc2,0xf2]
+@ CHECK: vmov.i64 d16, #0xFF0000FF0000FFFF @ encoding: [0x33,0x0e,0xc1,0xf3]
+
+
+
+ vmov.i8 q8, #0x8
vmov.i16 q8, #0x10
-@ CHECK: vmov.i16 q8, #0x1000 @ encoding: [0x50,0x0a,0xc1,0xf2]
vmov.i16 q8, #0x1000
-@ CHECK: vmov.i32 q8, #0x20 @ encoding: [0x50,0x00,0xc2,0xf2]
vmov.i32 q8, #0x20
-@ CHECK: vmov.i32 q8, #0x2000 @ encoding: [0x50,0x02,0xc2,0xf2]
vmov.i32 q8, #0x2000
-@ CHECK: vmov.i32 q8, #0x200000 @ encoding: [0x50,0x04,0xc2,0xf2]
vmov.i32 q8, #0x200000
-@ CHECK: vmov.i32 q8, #0x20000000 @ encoding: [0x50,0x06,0xc2,0xf2]
vmov.i32 q8, #0x20000000
-@ CHECK: vmov.i32 q8, #0x20FF @ encoding: [0x50,0x0c,0xc2,0xf2]
vmov.i32 q8, #0x20FF
-@ CHECK: vmov.i32 q8, #0x20FFFF @ encoding: [0x50,0x0d,0xc2,0xf2]
vmov.i32 q8, #0x20FFFF
-@ CHECK: vmov.i64 q8, #0xFF0000FF0000FFFF @ encoding: [0x73,0x0e,0xc1,0xf3]
vmov.i64 q8, #0xFF0000FF0000FFFF
-@ CHECK: vmvn.i16 d16, #0x10 @ encoding: [0x30,0x08,0xc1,0xf2]
+
+@ CHECK: vmov.i8 q8, #0x8 @ encoding: [0x58,0x0e,0xc0,0xf2]
+@ CHECK: vmov.i16 q8, #0x10 @ encoding: [0x50,0x08,0xc1,0xf2]
+@ CHECK: vmov.i16 q8, #0x1000 @ encoding: [0x50,0x0a,0xc1,0xf2]
+@ CHECK: vmov.i32 q8, #0x20 @ encoding: [0x50,0x00,0xc2,0xf2]
+@ CHECK: vmov.i32 q8, #0x2000 @ encoding: [0x50,0x02,0xc2,0xf2]
+@ CHECK: vmov.i32 q8, #0x200000 @ encoding: [0x50,0x04,0xc2,0xf2]
+@ CHECK: vmov.i32 q8, #0x20000000 @ encoding: [0x50,0x06,0xc2,0xf2]
+@ CHECK: vmov.i32 q8, #0x20FF @ encoding: [0x50,0x0c,0xc2,0xf2]
+@ CHECK: vmov.i32 q8, #0x20FFFF @ encoding: [0x50,0x0d,0xc2,0xf2]
+@ CHECK: vmov.i64 q8, #0xFF0000FF0000FFFF @ encoding: [0x73,0x0e,0xc1,0xf3]
+
vmvn.i16 d16, #0x10
-@ CHECK: vmvn.i16 d16, #0x1000 @ encoding: [0x30,0x0a,0xc1,0xf2]
vmvn.i16 d16, #0x1000
-@ CHECK: vmvn.i32 d16, #0x20 @ encoding: [0x30,0x00,0xc2,0xf2]
vmvn.i32 d16, #0x20
-@ CHECK: vmvn.i32 d16, #0x2000 @ encoding: [0x30,0x02,0xc2,0xf2]
vmvn.i32 d16, #0x2000
-@ CHECK: vmvn.i32 d16, #0x200000 @ encoding: [0x30,0x04,0xc2,0xf2]
vmvn.i32 d16, #0x200000
-@ CHECK: vmvn.i32 d16, #0x20000000 @ encoding: [0x30,0x06,0xc2,0xf2]
vmvn.i32 d16, #0x20000000
-@ CHECK: vmvn.i32 d16, #0x20FF @ encoding: [0x30,0x0c,0xc2,0xf2]
vmvn.i32 d16, #0x20FF
-@ CHECK: vmvn.i32 d16, #0x20FFFF @ encoding: [0x30,0x0d,0xc2,0xf2]
vmvn.i32 d16, #0x20FFFF
-@ CHECK: vmovl.s8 q8, d16 @ encoding: [0x30,0x0a,0xc8,0xf2]
+
+@ CHECK: vmvn.i16 d16, #0x10 @ encoding: [0x30,0x08,0xc1,0xf2]
+@ CHECK: vmvn.i16 d16, #0x1000 @ encoding: [0x30,0x0a,0xc1,0xf2]
+@ CHECK: vmvn.i32 d16, #0x20 @ encoding: [0x30,0x00,0xc2,0xf2]
+@ CHECK: vmvn.i32 d16, #0x2000 @ encoding: [0x30,0x02,0xc2,0xf2]
+@ CHECK: vmvn.i32 d16, #0x200000 @ encoding: [0x30,0x04,0xc2,0xf2]
+@ CHECK: vmvn.i32 d16, #0x20000000 @ encoding: [0x30,0x06,0xc2,0xf2]
+@ CHECK: vmvn.i32 d16, #0x20FF @ encoding: [0x30,0x0c,0xc2,0xf2]
+@ CHECK: vmvn.i32 d16, #0x20FFFF @ encoding: [0x30,0x0d,0xc2,0xf2]
+
vmovl.s8 q8, d16
-@ CHECK: vmovl.s16 q8, d16 @ encoding: [0x30,0x0a,0xd0,0xf2]
vmovl.s16 q8, d16
-@ CHECK: vmovl.s32 q8, d16 @ encoding: [0x30,0x0a,0xe0,0xf2]
vmovl.s32 q8, d16
-@ CHECK: vmovl.u8 q8, d16 @ encoding: [0x30,0x0a,0xc8,0xf3]
vmovl.u8 q8, d16
-@ CHECK: vmovl.u16 q8, d16 @ encoding: [0x30,0x0a,0xd0,0xf3]
vmovl.u16 q8, d16
-@ CHECK: vmovl.u32 q8, d16 @ encoding: [0x30,0x0a,0xe0,0xf3]
vmovl.u32 q8, d16
-@ CHECK: vmovn.i16 d16, q8 @ encoding: [0x20,0x02,0xf2,0xf3]
+
+@ CHECK: vmovl.s8 q8, d16 @ encoding: [0x30,0x0a,0xc8,0xf2]
+@ CHECK: vmovl.s16 q8, d16 @ encoding: [0x30,0x0a,0xd0,0xf2]
+@ CHECK: vmovl.s32 q8, d16 @ encoding: [0x30,0x0a,0xe0,0xf2]
+@ CHECK: vmovl.u8 q8, d16 @ encoding: [0x30,0x0a,0xc8,0xf3]
+@ CHECK: vmovl.u16 q8, d16 @ encoding: [0x30,0x0a,0xd0,0xf3]
+@ CHECK: vmovl.u32 q8, d16 @ encoding: [0x30,0x0a,0xe0,0xf3]
+
+
vmovn.i16 d16, q8
-@ CHECK: vmovn.i32 d16, q8 @ encoding: [0x20,0x02,0xf6,0xf3]
vmovn.i32 d16, q8
-@ CHECK: vmovn.i64 d16, q8 @ encoding: [0x20,0x02,0xfa,0xf3]
vmovn.i64 d16, q8
-@ CHECK: vqmovn.s16 d16, q8 @ encoding: [0xa0,0x02,0xf2,0xf3]
vqmovn.s16 d16, q8
-@ CHECK: vqmovn.s32 d16, q8 @ encoding: [0xa0,0x02,0xf6,0xf3]
vqmovn.s32 d16, q8
-@ CHECK: vqmovn.s64 d16, q8 @ encoding: [0xa0,0x02,0xfa,0xf3]
vqmovn.s64 d16, q8
-@ CHECK: vqmovn.u16 d16, q8 @ encoding: [0xe0,0x02,0xf2,0xf3]
vqmovn.u16 d16, q8
-@ CHECK: vqmovn.u32 d16, q8 @ encoding: [0xe0,0x02,0xf6,0xf3]
vqmovn.u32 d16, q8
-@ CHECK: vqmovn.u64 d16, q8 @ encoding: [0xe0,0x02,0xfa,0xf3]
vqmovn.u64 d16, q8
-@ CHECK: vqmovun.s16 d16, q8 @ encoding: [0x60,0x02,0xf2,0xf3]
vqmovun.s16 d16, q8
-@ CHECK: vqmovun.s32 d16, q8 @ encoding: [0x60,0x02,0xf6,0xf3]
vqmovun.s32 d16, q8
-@ CHECK: vqmovun.s64 d16, q8 @ encoding: [0x60,0x02,0xfa,0xf3]
vqmovun.s64 d16, q8
-@ CHECK: vmov.s8 r0, d16[1] @ encoding: [0xb0,0x0b,0x50,0xee]
- vmov.s8 r0, d16[1]
-@ CHECK: vmov.s16 r0, d16[1] @ encoding: [0xf0,0x0b,0x10,0xee]
+
+@ CHECK: vmovn.i16 d16, q8 @ encoding: [0x20,0x02,0xf2,0xf3]
+@ CHECK: vmovn.i32 d16, q8 @ encoding: [0x20,0x02,0xf6,0xf3]
+@ CHECK: vmovn.i64 d16, q8 @ encoding: [0x20,0x02,0xfa,0xf3]
+@ CHECK: vqmovn.s16 d16, q8 @ encoding: [0xa0,0x02,0xf2,0xf3]
+@ CHECK: vqmovn.s32 d16, q8 @ encoding: [0xa0,0x02,0xf6,0xf3]
+@ CHECK: vqmovn.s64 d16, q8 @ encoding: [0xa0,0x02,0xfa,0xf3]
+@ CHECK: vqmovn.u16 d16, q8 @ encoding: [0xe0,0x02,0xf2,0xf3]
+@ CHECK: vqmovn.u32 d16, q8 @ encoding: [0xe0,0x02,0xf6,0xf3]
+@ CHECK: vqmovn.u64 d16, q8 @ encoding: [0xe0,0x02,0xfa,0xf3]
+@ CHECK: vqmovun.s16 d16, q8 @ encoding: [0x60,0x02,0xf2,0xf3]
+@ CHECK: vqmovun.s32 d16, q8 @ encoding: [0x60,0x02,0xf6,0xf3]
+@ CHECK: vqmovun.s64 d16, q8 @ encoding: [0x60,0x02,0xfa,0xf3]
+
+ vmov.s8 r0, d16[1]
vmov.s16 r0, d16[1]
-@ CHECK: vmov.u8 r0, d16[1] @ encoding: [0xb0,0x0b,0xd0,0xee]
- vmov.u8 r0, d16[1]
-@ CHECK: vmov.u16 r0, d16[1] @ encoding: [0xf0,0x0b,0x90,0xee]
+ vmov.u8 r0, d16[1]
vmov.u16 r0, d16[1]
-@ CHECK: vmov.32 r0, d16[1] @ encoding: [0x90,0x0b,0x30,0xee]
- vmov.32 r0, d16[1]
-@ CHECK: vmov.8 d16[1], r1 @ encoding: [0xb0,0x1b,0x40,0xee]
+ vmov.32 r0, d16[1]
vmov.8 d16[1], r1
-@ CHECK: vmov.16 d16[1], r1 @ encoding: [0xf0,0x1b,0x00,0xee]
vmov.16 d16[1], r1
-@ CHECK: vmov.32 d16[1], r1 @ encoding: [0x90,0x1b,0x20,0xee]
vmov.32 d16[1], r1
-@ CHECK: vmov.8 d18[1], r1 @ encoding: [0xb0,0x1b,0x42,0xee]
vmov.8 d18[1], r1
-@ CHECK: vmov.16 d18[1], r1 @ encoding: [0xf0,0x1b,0x02,0xee]
vmov.16 d18[1], r1
-@ CHECK: vmov.32 d18[1], r1 @ encoding: [0x90,0x1b,0x22,0xee]
vmov.32 d18[1], r1
+
+@ CHECK: vmov.s8 r0, d16[1] @ encoding: [0xb0,0x0b,0x50,0xee]
+@ CHECK: vmov.s16 r0, d16[1] @ encoding: [0xf0,0x0b,0x10,0xee]
+@ CHECK: vmov.u8 r0, d16[1] @ encoding: [0xb0,0x0b,0xd0,0xee]
+@ CHECK: vmov.u16 r0, d16[1] @ encoding: [0xf0,0x0b,0x90,0xee]
+@ CHECK: vmov.32 r0, d16[1] @ encoding: [0x90,0x0b,0x30,0xee]
+@ CHECK: vmov.8 d16[1], r1 @ encoding: [0xb0,0x1b,0x40,0xee]
+@ CHECK: vmov.16 d16[1], r1 @ encoding: [0xf0,0x1b,0x00,0xee]
+@ CHECK: vmov.32 d16[1], r1 @ encoding: [0x90,0x1b,0x20,0xee]
+@ CHECK: vmov.8 d18[1], r1 @ encoding: [0xb0,0x1b,0x42,0xee]
+@ CHECK: vmov.16 d18[1], r1 @ encoding: [0xf0,0x1b,0x02,0xee]
+@ CHECK: vmov.32 d18[1], r1 @ encoding: [0x90,0x1b,0x22,0xee]
diff --git a/test/MC/ARM/neon-mul-accum-encoding.s b/test/MC/ARM/neon-mul-accum-encoding.s
index e269dea..ed9ceb3 100644
--- a/test/MC/ARM/neon-mul-accum-encoding.s
+++ b/test/MC/ARM/neon-mul-accum-encoding.s
@@ -1,11 +1,10 @@
@ RUN: llvm-mc -mcpu=cortex-a8 -triple arm-unknown-unknown -show-encoding < %s | FileCheck %s
-@ XFAIL: *
@ CHECK: vmla.i8 d16, d18, d17 @ encoding: [0xa1,0x09,0x42,0xf2]
vmla.i8 d16, d18, d17
@ CHECK: vmla.i16 d16, d18, d17 @ encoding: [0xa1,0x09,0x52,0xf2]
vmla.i16 d16, d18, d17
-@ CHECK: vmla.i16 d16, d18, d17 @ encoding: [0xa1,0x09,0x52,0xf2]
+@ CHECK: vmla.i32 d16, d18, d17 @ encoding: [0xa1,0x09,0x62,0xf2]
vmla.i32 d16, d18, d17
@ CHECK: vmla.f32 d16, d18, d17 @ encoding: [0xb1,0x0d,0x42,0xf2]
vmla.f32 d16, d18, d17
diff --git a/test/MC/ARM/neon-mul-encoding.s b/test/MC/ARM/neon-mul-encoding.s
index 4ff192f..4dc7803 100644
--- a/test/MC/ARM/neon-mul-encoding.s
+++ b/test/MC/ARM/neon-mul-encoding.s
@@ -1,56 +1,82 @@
@ RUN: llvm-mc -mcpu=cortex-a8 -triple arm-unknown-unknown -show-encoding < %s | FileCheck %s
-@ CHECK: vmul.i8 d16, d16, d17 @ encoding: [0xb1,0x09,0x40,0xf2]
- vmul.i8 d16, d16, d17
-@ CHECK: vmul.i16 d16, d16, d17 @ encoding: [0xb1,0x09,0x50,0xf2]
- vmul.i16 d16, d16, d17
-@ CHECK: vmul.i32 d16, d16, d17 @ encoding: [0xb1,0x09,0x60,0xf2]
- vmul.i32 d16, d16, d17
-@ CHECK: vmul.f32 d16, d16, d17 @ encoding: [0xb1,0x0d,0x40,0xf3]
- vmul.f32 d16, d16, d17
-@ CHECK: vmul.i8 q8, q8, q9 @ encoding: [0xf2,0x09,0x40,0xf2]
- vmul.i8 q8, q8, q9
-@ CHECK: vmul.i16 q8, q8, q9 @ encoding: [0xf2,0x09,0x50,0xf2]
- vmul.i16 q8, q8, q9
-@ CHECK: vmul.i32 q8, q8, q9 @ encoding: [0xf2,0x09,0x60,0xf2]
- vmul.i32 q8, q8, q9
-@ CHECK: vmul.f32 q8, q8, q9 @ encoding: [0xf2,0x0d,0x40,0xf3]
- vmul.f32 q8, q8, q9
-@ CHECK: vmul.p8 d16, d16, d17 @ encoding: [0xb1,0x09,0x40,0xf3]
- vmul.p8 d16, d16, d17
-@ CHECK: vmul.p8 q8, q8, q9 @ encoding: [0xf2,0x09,0x40,0xf3]
- vmul.p8 q8, q8, q9
-@ CHECK: vqdmulh.s16 d16, d16, d17 @ encoding: [0xa1,0x0b,0x50,0xf2]
- vqdmulh.s16 d16, d16, d17
-@ CHECK: vqdmulh.s32 d16, d16, d17 @ encoding: [0xa1,0x0b,0x60,0xf2]
- vqdmulh.s32 d16, d16, d17
-@ CHECK: vqdmulh.s16 q8, q8, q9 @ encoding: [0xe2,0x0b,0x50,0xf2]
- vqdmulh.s16 q8, q8, q9
-@ CHECK: vqdmulh.s32 q8, q8, q9 @ encoding: [0xe2,0x0b,0x60,0xf2]
- vqdmulh.s32 q8, q8, q9
-@ CHECK: vqrdmulh.s16 d16, d16, d17 @ encoding: [0xa1,0x0b,0x50,0xf3]
- vqrdmulh.s16 d16, d16, d17
-@ CHECK: vqrdmulh.s32 d16, d16, d17 @ encoding: [0xa1,0x0b,0x60,0xf3]
- vqrdmulh.s32 d16, d16, d17
-@ CHECK: vqrdmulh.s16 q8, q8, q9 @ encoding: [0xe2,0x0b,0x50,0xf3]
- vqrdmulh.s16 q8, q8, q9
-@ CHECK: vqrdmulh.s32 q8, q8, q9 @ encoding: [0xe2,0x0b,0x60,0xf3]
- vqrdmulh.s32 q8, q8, q9
-@ CHECK: vmull.s8 q8, d16, d17 @ encoding: [0xa1,0x0c,0xc0,0xf2]
- vmull.s8 q8, d16, d17
-@ CHECK: vmull.s16 q8, d16, d17 @ encoding: [0xa1,0x0c,0xd0,0xf2]
- vmull.s16 q8, d16, d17
-@ CHECK: vmull.s32 q8, d16, d17 @ encoding: [0xa1,0x0c,0xe0,0xf2]
- vmull.s32 q8, d16, d17
-@ CHECK: vmull.u8 q8, d16, d17 @ encoding: [0xa1,0x0c,0xc0,0xf3]
- vmull.u8 q8, d16, d17
-@ CHECK: vmull.u16 q8, d16, d17 @ encoding: [0xa1,0x0c,0xd0,0xf3]
- vmull.u16 q8, d16, d17
-@ CHECK: vmull.u32 q8, d16, d17 @ encoding: [0xa1,0x0c,0xe0,0xf3]
- vmull.u32 q8, d16, d17
-@ CHECK: vmull.p8 q8, d16, d17 @ encoding: [0xa1,0x0e,0xc0,0xf2]
- vmull.p8 q8, d16, d17
-@ CHECK: vqdmull.s16 q8, d16, d17 @ encoding: [0xa1,0x0d,0xd0,0xf2]
- vqdmull.s16 q8, d16, d17
-@ CHECK: vqdmull.s32 q8, d16, d17 @ encoding: [0xa1,0x0d,0xe0,0xf2]
- vqdmull.s32 q8, d16, d17
+ vmla.i8 d16, d18, d17
+ vmla.i16 d16, d18, d17
+ vmla.i32 d16, d18, d17
+ vmla.f32 d16, d18, d17
+ vmla.i8 q9, q8, q10
+ vmla.i16 q9, q8, q10
+ vmla.i32 q9, q8, q10
+ vmla.f32 q9, q8, q10
+
+@ CHECK: vmla.i8 d16, d18, d17 @ encoding: [0xa1,0x09,0x42,0xf2]
+@ CHECK: vmla.i16 d16, d18, d17 @ encoding: [0xa1,0x09,0x52,0xf2]
+@ CHECK: vmla.i32 d16, d18, d17 @ encoding: [0xa1,0x09,0x62,0xf2]
+@ CHECK: vmla.f32 d16, d18, d17 @ encoding: [0xb1,0x0d,0x42,0xf2]
+@ CHECK: vmla.i8 q9, q8, q10 @ encoding: [0xe4,0x29,0x40,0xf2]
+@ CHECK: vmla.i16 q9, q8, q10 @ encoding: [0xe4,0x29,0x50,0xf2]
+@ CHECK: vmla.i32 q9, q8, q10 @ encoding: [0xe4,0x29,0x60,0xf2]
+@ CHECK: vmla.f32 q9, q8, q10 @ encoding: [0xf4,0x2d,0x40,0xf2]
+
+
+ vmlal.s8 q8, d19, d18
+ vmlal.s16 q8, d19, d18
+ vmlal.s32 q8, d19, d18
+ vmlal.u8 q8, d19, d18
+ vmlal.u16 q8, d19, d18
+ vmlal.u32 q8, d19, d18
+
+@ CHECK: vmlal.s8 q8, d19, d18 @ encoding: [0xa2,0x08,0xc3,0xf2]
+@ CHECK: vmlal.s16 q8, d19, d18 @ encoding: [0xa2,0x08,0xd3,0xf2]
+@ CHECK: vmlal.s32 q8, d19, d18 @ encoding: [0xa2,0x08,0xe3,0xf2]
+@ CHECK: vmlal.u8 q8, d19, d18 @ encoding: [0xa2,0x08,0xc3,0xf3]
+@ CHECK: vmlal.u16 q8, d19, d18 @ encoding: [0xa2,0x08,0xd3,0xf3]
+@ CHECK: vmlal.u32 q8, d19, d18 @ encoding: [0xa2,0x08,0xe3,0xf3]
+
+
+ vqdmlal.s16 q8, d19, d18
+ vqdmlal.s32 q8, d19, d18
+
+@ CHECK: vqdmlal.s16 q8, d19, d18 @ encoding: [0xa2,0x09,0xd3,0xf2]
+@ CHECK: vqdmlal.s32 q8, d19, d18 @ encoding: [0xa2,0x09,0xe3,0xf2]
+
+
+ vmls.i8 d16, d18, d17
+ vmls.i16 d16, d18, d17
+ vmls.i32 d16, d18, d17
+ vmls.f32 d16, d18, d17
+ vmls.i8 q9, q8, q10
+ vmls.i16 q9, q8, q10
+ vmls.i32 q9, q8, q10
+ vmls.f32 q9, q8, q10
+
+@ CHECK: vmls.i8 d16, d18, d17 @ encoding: [0xa1,0x09,0x42,0xf3]
+@ CHECK: vmls.i16 d16, d18, d17 @ encoding: [0xa1,0x09,0x52,0xf3]
+@ CHECK: vmls.i32 d16, d18, d17 @ encoding: [0xa1,0x09,0x62,0xf3]
+@ CHECK: vmls.f32 d16, d18, d17 @ encoding: [0xb1,0x0d,0x62,0xf2]
+@ CHECK: vmls.i8 q9, q8, q10 @ encoding: [0xe4,0x29,0x40,0xf3]
+@ CHECK: vmls.i16 q9, q8, q10 @ encoding: [0xe4,0x29,0x50,0xf3]
+@ CHECK: vmls.i32 q9, q8, q10 @ encoding: [0xe4,0x29,0x60,0xf3]
+@ CHECK: vmls.f32 q9, q8, q10 @ encoding: [0xf4,0x2d,0x60,0xf2]
+
+
+ vmlsl.s8 q8, d19, d18
+ vmlsl.s16 q8, d19, d18
+ vmlsl.s32 q8, d19, d18
+ vmlsl.u8 q8, d19, d18
+ vmlsl.u16 q8, d19, d18
+ vmlsl.u32 q8, d19, d18
+
+@ CHECK: vmlsl.s8 q8, d19, d18 @ encoding: [0xa2,0x0a,0xc3,0xf2]
+@ CHECK: vmlsl.s16 q8, d19, d18 @ encoding: [0xa2,0x0a,0xd3,0xf2]
+@ CHECK: vmlsl.s32 q8, d19, d18 @ encoding: [0xa2,0x0a,0xe3,0xf2]
+@ CHECK: vmlsl.u8 q8, d19, d18 @ encoding: [0xa2,0x0a,0xc3,0xf3]
+@ CHECK: vmlsl.u16 q8, d19, d18 @ encoding: [0xa2,0x0a,0xd3,0xf3]
+@ CHECK: vmlsl.u32 q8, d19, d18 @ encoding: [0xa2,0x0a,0xe3,0xf3]
+
+
+ vqdmlsl.s16 q8, d19, d18
+ vqdmlsl.s32 q8, d19, d18
+
+@ CHECK: vqdmlsl.s16 q8, d19, d18 @ encoding: [0xa2,0x0b,0xd3,0xf2]
+@ CHECK: vqdmlsl.s32 q8, d19, d18 @ encoding: [0xa2,0x0b,0xe3,0xf2]
diff --git a/test/MC/ARM/neon-vld-encoding.s b/test/MC/ARM/neon-vld-encoding.s
index be55f47..55c8868 100644
--- a/test/MC/ARM/neon-vld-encoding.s
+++ b/test/MC/ARM/neon-vld-encoding.s
@@ -1,110 +1,125 @@
@ RUN: llvm-mc -mcpu=cortex-a8 -triple armv7-apple-darwin -show-encoding < %s | FileCheck %s
@ XFAIL: *
-@ CHECK: vld1.8 {d16}, [r0, :64] @ encoding: [0x1f,0x07,0x60,0xf4]
vld1.8 {d16}, [r0, :64]
-@ CHECK: vld1.16 {d16}, [r0] @ encoding: [0x4f,0x07,0x60,0xf4]
- vld1.16 {d16}, [r0]
-@ CHECK: vld1.32 {d16}, [r0] @ encoding: [0x8f,0x07,0x60,0xf4]
- vld1.32 {d16}, [r0]
-@ CHECK: vld1.64 {d16}, [r0] @ encoding: [0xcf,0x07,0x60,0xf4]
- vld1.64 {d16}, [r0]
+ vld1.16 {d16}, [r0]
+ vld1.32 {d16}, [r0]
+ vld1.64 {d16}, [r0]
+ vld1.8 {d16, d17}, [r0, :64]
+ vld1.16 {d16, d17}, [r0, :128]
+ vld1.32 {d16, d17}, [r0]
+ vld1.64 {d16, d17}, [r0]
+
+@ CHECK: vld1.8 {d16}, [r0, :64] @ encoding: [0x1f,0x07,0x60,0xf4]
+@ CHECK: vld1.16 {d16}, [r0] @ encoding: [0x4f,0x07,0x60,0xf4]
+@ CHECK: vld1.32 {d16}, [r0] @ encoding: [0x8f,0x07,0x60,0xf4]
+@ CHECK: vld1.64 {d16}, [r0] @ encoding: [0xcf,0x07,0x60,0xf4]
@ CHECK: vld1.8 {d16, d17}, [r0, :64] @ encoding: [0x1f,0x0a,0x60,0xf4]
- vld1.8 {d16, d17}, [r0, :64]
-@ CHECK: vld1.16 {d16, d17}, [r0, :128] @ encoding: [0x6f,0x0a,0x60,0xf4]
- vld1.16 {d16, d17}, [r0, :128]
-@ CHECK: vld1.32 {d16, d17}, [r0] @ encoding: [0x8f,0x0a,0x60,0xf4]
- vld1.32 {d16, d17}, [r0]
-@ CHECK: vld1.64 {d16, d17}, [r0] @ encoding: [0xcf,0x0a,0x60,0xf4]
- vld1.64 {d16, d17}, [r0]
+@ CHECK: vld1.16 {d16, d17}, [r0, :128] @ encoding: [0x6f,0x0a,0x60,0xf4]
+@ CHECK: vld1.32 {d16, d17}, [r0]@ encoding: [0x8f,0x0a,0x60,0xf4]
+@ CHECK: vld1.64 {d16, d17}, [r0]@ encoding: [0xcf,0x0a,0x60,0xf4]
+
+
+ vld2.8 {d16, d17}, [r0, :64]
+ vld2.16 {d16, d17}, [r0, :128]
+ vld2.32 {d16, d17}, [r0]
+ vld2.8 {d16, d17, d18, d19}, [r0, :64]
+ vld2.16 {d16, d17, d18, d19}, [r0, :128]
+ vld2.32 {d16, d17, d18, d19}, [r0, :256]
@ CHECK: vld2.8 {d16, d17}, [r0, :64] @ encoding: [0x1f,0x08,0x60,0xf4]
- vld2.8 {d16, d17}, [r0, :64]
-@ CHECK: vld2.16 {d16, d17}, [r0, :128] @ encoding: [0x6f,0x08,0x60,0xf4]
- vld2.16 {d16, d17}, [r0, :128]
-@ CHECK: vld2.32 {d16, d17}, [r0] @ encoding: [0x8f,0x08,0x60,0xf4]
- vld2.32 {d16, d17}, [r0]
-@ CHECK: vld2.8 {d16, d17, d18, d19}, [r0, :64] @ encoding: [0x1f,0x03,0x60,0xf4]
- vld2.8 {d16, d17, d18, d19}, [r0, :64]
-@ CHECK: vld2.16 {d16, d17, d18, d19}, [r0, :128] @ encoding: [0x6f,0x03,0x60,0xf4]
- vld2.16 {d16, d17, d18, d19}, [r0, :128]
-@ CHECK: vld2.32 {d16, d17, d18, d19}, [r0, :256] @ encoding: [0xbf,0x03,0x60,0xf4]
- vld2.32 {d16, d17, d18, d19}, [r0, :256]
+@ CHECK: vld2.16 {d16, d17}, [r0, :128] @ encoding: [0x6f,0x08,0x60,0xf4]
+@ CHECK: vld2.32 {d16, d17}, [r0]@ encoding: [0x8f,0x08,0x60,0xf4]
+@ CHECK: vld2.8 {d16, d17, d18, d19}, [r0, :64]@ encoding: [0x1f,0x03,0x60,0xf4]
+@ CHECK: vld2.16 {d16, d17, d18, d19}, [r0, :128] @ encoding: [0x6f,0x03,0x60,0xf4]
+@ CHECK: vld2.32 {d16, d17, d18, d19}, [r0, :256] @ encoding: [0xbf,0x03,0x60,0xf4]
+
+
+ vld3.8 {d16, d17, d18}, [r0, :64]
+ vld3.16 {d16, d17, d18}, [r0]
+ vld3.32 {d16, d17, d18}, [r0]
+ vld3.8 {d16, d18, d20}, [r0, :64]!
+ vld3.8 {d17, d19, d21}, [r0, :64]!
+ vld3.16 {d16, d18, d20}, [r0]!
+ vld3.16 {d17, d19, d21}, [r0]!
+ vld3.32 {d16, d18, d20}, [r0]!
+ vld3.32 {d17, d19, d21}, [r0]!
@ CHECK: vld3.8 {d16, d17, d18}, [r0, :64] @ encoding: [0x1f,0x04,0x60,0xf4]
- vld3.8 {d16, d17, d18}, [r0, :64]
-@ CHECK: vld3.16 {d16, d17, d18}, [r0] @ encoding: [0x4f,0x04,0x60,0xf4]
- vld3.16 {d16, d17, d18}, [r0]
-@ CHECK: vld3.32 {d16, d17, d18}, [r0] @ encoding: [0x8f,0x04,0x60,0xf4]
- vld3.32 {d16, d17, d18}, [r0]
+@ CHECK: vld3.16 {d16, d17, d18}, [r0] @ encoding: [0x4f,0x04,0x60,0xf4]
+@ CHECK: vld3.32 {d16, d17, d18}, [r0] @ encoding: [0x8f,0x04,0x60,0xf4]
@ CHECK: vld3.8 {d16, d18, d20}, [r0, :64]! @ encoding: [0x1d,0x05,0x60,0xf4]
- vld3.8 {d16, d18, d20}, [r0, :64]!
@ CHECK: vld3.8 {d17, d19, d21}, [r0, :64]! @ encoding: [0x1d,0x15,0x60,0xf4]
- vld3.8 {d17, d19, d21}, [r0, :64]!
-@ CHECK: vld3.16 {d16, d18, d20}, [r0]! @ encoding: [0x4d,0x05,0x60,0xf4]
- vld3.16 {d16, d18, d20}, [r0]!
-@ CHECK: vld3.16 {d17, d19, d21}, [r0]! @ encoding: [0x4d,0x15,0x60,0xf4]
- vld3.16 {d17, d19, d21}, [r0]!
-@ CHECK: vld3.32 {d16, d18, d20}, [r0]! @ encoding: [0x8d,0x05,0x60,0xf4]
- vld3.32 {d16, d18, d20}, [r0]!
-@ CHECK: vld3.32 {d17, d19, d21}, [r0]! @ encoding: [0x8d,0x15,0x60,0xf4]
- vld3.32 {d17, d19, d21}, [r0]!
-
-@ CHECK: vld4.8 {d16, d17, d18, d19}, [r0, :64] @ encoding: [0x1f,0x00,0x60,0xf4]
- vld4.8 {d16, d17, d18, d19}, [r0, :64]
-@ CHECK: vld4.16 {d16, d17, d18, d19}, [r0, :128] @ encoding: [0x6f,0x00,0x60,0xf4]
- vld4.16 {d16, d17, d18, d19}, [r0, :128]
-@ CHECK: vld4.32 {d16, d17, d18, d19}, [r0, :256] @ encoding: [0xbf,0x00,0x60,0xf4]
- vld4.32 {d16, d17, d18, d19}, [r0, :256]
-@ CHECK: vld4.8 {d16, d18, d20, d22}, [r0, :256]! @ encoding: [0x3d,0x01,0x60,0xf4]
- vld4.8 {d16, d18, d20, d22}, [r0, :256]!
-@ CHECK: vld4.8 {d17, d19, d21, d23}, [r0, :256]! @ encoding: [0x3d,0x11,0x60,0xf4]
- vld4.8 {d17, d19, d21, d23}, [r0, :256]!
-@ CHECK: vld4.16 {d16, d18, d20, d22}, [r0]! @ encoding: [0x4d,0x01,0x60,0xf4]
- vld4.16 {d16, d18, d20, d22}, [r0]!
-@ CHECK: vld4.16 {d17, d19, d21, d23}, [r0]! @ encoding: [0x4d,0x11,0x60,0xf4]
- vld4.16 {d17, d19, d21, d23}, [r0]!
-@ CHECK: vld4.32 {d16, d18, d20, d22}, [r0]! @ encoding: [0x8d,0x01,0x60,0xf4]
- vld4.32 {d16, d18, d20, d22}, [r0]!
-@ CHECK: vld4.32 {d17, d19, d21, d23}, [r0]! @ encoding: [0x8d,0x11,0x60,0xf4]
- vld4.32 {d17, d19, d21, d23}, [r0]!
+@ CHECK: vld3.16 {d16, d18, d20}, [r0]! @ encoding: [0x4d,0x05,0x60,0xf4]
+@ CHECK: vld3.16 {d17, d19, d21}, [r0]! @ encoding: [0x4d,0x15,0x60,0xf4]
+@ CHECK: vld3.32 {d16, d18, d20}, [r0]! @ encoding: [0x8d,0x05,0x60,0xf4]
+@ CHECK: vld3.32 {d17, d19, d21}, [r0]! @ encoding: [0x8d,0x15,0x60,0xf4]
+
+
+ vld4.8 {d16, d17, d18, d19}, [r0, :64]
+ vld4.16 {d16, d17, d18, d19}, [r0, :128]
+ vld4.32 {d16, d17, d18, d19}, [r0, :256]
+ vld4.8 {d16, d18, d20, d22}, [r0, :256]!
+ vld4.8 {d17, d19, d21, d23}, [r0, :256]!
+ vld4.16 {d16, d18, d20, d22}, [r0]!
+ vld4.16 {d17, d19, d21, d23}, [r0]!
+ vld4.32 {d16, d18, d20, d22}, [r0]!
+ vld4.32 {d17, d19, d21, d23}, [r0]!
+
+@ CHECK: vld4.8 {d16, d17, d18, d19}, [r0, :64]@ encoding: [0x1f,0x00,0x60,0xf4]
+@ CHECK: vld4.16 {d16, d17, d18, d19}, [r0,:128]@ encoding:[0x6f,0x00,0x60,0xf4]
+@ CHECK: vld4.32 {d16, d17, d18, d19}, [r0,:256]@ encoding:[0xbf,0x00,0x60,0xf4]
+@ CHECK: vld4.8 {d16, d18, d20, d22}, [r0,:256]!@ encoding:[0x3d,0x01,0x60,0xf4]
+@ CHECK: vld4.8 {d17, d19, d21, d23}, [r0,:256]!@ encoding:[0x3d,0x11,0x60,0xf4]
+@ CHECK: vld4.16 {d16, d18, d20, d22}, [r0]! @ encoding: [0x4d,0x01,0x60,0xf4]
+@ CHECK: vld4.16 {d17, d19, d21, d23}, [r0]! @ encoding: [0x4d,0x11,0x60,0xf4]
+@ CHECK: vld4.32 {d16, d18, d20, d22}, [r0]! @ encoding: [0x8d,0x01,0x60,0xf4]
+@ CHECK: vld4.32 {d17, d19, d21, d23}, [r0]! @ encoding: [0x8d,0x11,0x60,0xf4]
+
+
+ vld1.8 {d16[3]}, [r0]
+ vld1.16 {d16[2]}, [r0, :16]
+ vld1.32 {d16[1]}, [r0, :32]
@ CHECK: vld1.8 {d16[3]}, [r0] @ encoding: [0x6f,0x00,0xe0,0xf4]
- vld1.8 {d16[3]}, [r0]
-@ CHECK: vld1.16 {d16[2]}, [r0, :16] @ encoding: [0x9f,0x04,0xe0,0xf4]
- vld1.16 {d16[2]}, [r0, :16]
-@ CHECK: vld1.32 {d16[1]}, [r0, :32] @ encoding: [0xbf,0x08,0xe0,0xf4]
- vld1.32 {d16[1]}, [r0, :32]
+@ CHECK: vld1.16 {d16[2]}, [r0, :16] @ encoding: [0x9f,0x04,0xe0,0xf4]
+@ CHECK: vld1.32 {d16[1]}, [r0, :32] @ encoding: [0xbf,0x08,0xe0,0xf4]
+
+
+ vld2.8 {d16[1], d17[1]}, [r0, :16]
+ vld2.16 {d16[1], d17[1]}, [r0, :32]
+ vld2.32 {d16[1], d17[1]}, [r0]
+ vld2.16 {d17[1], d19[1]}, [r0]
+ vld2.32 {d17[0], d19[0]}, [r0, :64]
@ CHECK: vld2.8 {d16[1], d17[1]}, [r0, :16] @ encoding: [0x3f,0x01,0xe0,0xf4]
- vld2.8 {d16[1], d17[1]}, [r0, :16]
-@ CHECK: vld2.16 {d16[1], d17[1]}, [r0, :32] @ encoding: [0x5f,0x05,0xe0,0xf4]
- vld2.16 {d16[1], d17[1]}, [r0, :32]
-@ CHECK: vld2.32 {d16[1], d17[1]}, [r0] @ encoding: [0x8f,0x09,0xe0,0xf4]
- vld2.32 {d16[1], d17[1]}, [r0]
-@ CHECK: vld2.16 {d17[1], d19[1]}, [r0] @ encoding: [0x6f,0x15,0xe0,0xf4]
- vld2.16 {d17[1], d19[1]}, [r0]
-@ CHECK: vld2.32 {d17[0], d19[0]}, [r0, :64] @ encoding: [0x5f,0x19,0xe0,0xf4]
- vld2.32 {d17[0], d19[0]}, [r0, :64]
+@ CHECK: vld2.16 {d16[1], d17[1]}, [r0, :32] @ encoding: [0x5f,0x05,0xe0,0xf4]
+@ CHECK: vld2.32 {d16[1], d17[1]}, [r0] @ encoding: [0x8f,0x09,0xe0,0xf4]
+@ CHECK: vld2.16 {d17[1], d19[1]}, [r0] @ encoding: [0x6f,0x15,0xe0,0xf4]
+@ CHECK: vld2.32 {d17[0], d19[0]}, [r0, :64] @ encoding: [0x5f,0x19,0xe0,0xf4]
+
+
+ vld3.8 {d16[1], d17[1], d18[1]}, [r0]
+ vld3.16 {d16[1], d17[1], d18[1]}, [r0]
+ vld3.32 {d16[1], d17[1], d18[1]}, [r0]
+ vld3.16 {d16[1], d18[1], d20[1]}, [r0]
+ vld3.32 {d17[1], d19[1], d21[1]}, [r0]
@ CHECK: vld3.8 {d16[1], d17[1], d18[1]}, [r0] @ encoding: [0x2f,0x02,0xe0,0xf4]
- vld3.8 {d16[1], d17[1], d18[1]}, [r0]
-@ CHECK: vld3.16 {d16[1], d17[1], d18[1]}, [r0] @ encoding: [0x4f,0x06,0xe0,0xf4]
- vld3.16 {d16[1], d17[1], d18[1]}, [r0]
-@ CHECK: vld3.32 {d16[1], d17[1], d18[1]}, [r0] @ encoding: [0x8f,0x0a,0xe0,0xf4]
- vld3.32 {d16[1], d17[1], d18[1]}, [r0]
-@ CHECK: vld3.16 {d16[1], d18[1], d20[1]}, [r0] @ encoding: [0x6f,0x06,0xe0,0xf4]
- vld3.16 {d16[1], d18[1], d20[1]}, [r0]
-@ CHECK: vld3.32 {d17[1], d19[1], d21[1]}, [r0] @ encoding: [0xcf,0x1a,0xe0,0xf4]
- vld3.32 {d17[1], d19[1], d21[1]}, [r0]
+@ CHECK: vld3.16 {d16[1], d17[1], d18[1]}, [r0]@ encoding: [0x4f,0x06,0xe0,0xf4]
+@ CHECK: vld3.32 {d16[1], d17[1], d18[1]}, [r0]@ encoding: [0x8f,0x0a,0xe0,0xf4]
+@ CHECK: vld3.16 {d16[1], d18[1], d20[1]}, [r0]@ encoding: [0x6f,0x06,0xe0,0xf4]
+@ CHECK: vld3.32 {d17[1], d19[1], d21[1]}, [r0]@ encoding: [0xcf,0x1a,0xe0,0xf4]
+
+
+ vld4.8 {d16[1], d17[1], d18[1], d19[1]}, [r0, :32]
+ vld4.16 {d16[1], d17[1], d18[1], d19[1]}, [r0]
+ vld4.32 {d16[1], d17[1], d18[1], d19[1]}, [r0, :128]
+ vld4.16 {d16[1], d18[1], d20[1], d22[1]}, [r0, :64]
+ vld4.32 {d17[0], d19[0], d21[0], d23[0]}, [r0]
@ CHECK: vld4.8 {d16[1], d17[1], d18[1], d19[1]}, [r0, :32] @ encoding: [0x3f,0x03,0xe0,0xf4]
- vld4.8 {d16[1], d17[1], d18[1], d19[1]}, [r0, :32]
-@ CHECK: vld4.16 {d16[1], d17[1], d18[1], d19[1]}, [r0] @ encoding: [0x4f,0x07,0xe0,0xf4]
- vld4.16 {d16[1], d17[1], d18[1], d19[1]}, [r0]
-@ CHECK: vld4.32 {d16[1], d17[1], d18[1], d19[1]}, [r0, :128] @ encoding: [0xaf,0x0b,0xe0,0xf4]
- vld4.32 {d16[1], d17[1], d18[1], d19[1]}, [r0, :128]
-@ CHECK: vld4.16 {d16[1], d18[1], d20[1], d22[1]}, [r0, :64] @ encoding: [0x7f,0x07,0xe0,0xf4]
- vld4.16 {d16[1], d18[1], d20[1], d22[1]}, [r0, :64]
-@ CHECK: vld4.32 {d17[0], d19[0], d21[0], d23[0]}, [r0] @ encoding: [0x4f,0x1b,0xe0,0xf4]
- vld4.32 {d17[0], d19[0], d21[0], d23[0]}, [r0]
+@ CHECK: vld4.16 {d16[1], d17[1], d18[1], d19[1]}, [r0] @ encoding: [0x4f,0x07,0xe0,0xf4]
+@ CHECK: vld4.32 {d16[1], d17[1], d18[1], d19[1]}, [r0, :128] @ encoding: [0xaf,0x0b,0xe0,0xf4]
+@ CHECK: vld4.16 {d16[1], d18[1], d20[1], d22[1]}, [r0, :64] @ encoding: [0x7f,0x07,0xe0,0xf4]
+@ CHECK: vld4.32 {d17[0], d19[0], d21[0], d23[0]}, [r0] @ encoding: [0x4f,0x1b,0xe0,0xf4]
diff --git a/test/MC/ARM/neont2-absdiff-encoding.s b/test/MC/ARM/neont2-absdiff-encoding.s
index 2096357..4313483 100644
--- a/test/MC/ARM/neont2-absdiff-encoding.s
+++ b/test/MC/ARM/neont2-absdiff-encoding.s
@@ -1,86 +1,91 @@
-@ RUN: llvm-mc -mcpu=cortex-a8 -triple thumb-unknown-unknown -show-encoding < %s | FileCheck %s
-@ XFAIL: *
-@ NOTE: This currently fails because the ASM parser doesn't parse vabal.
+@RUN: llvm-mc -triple thumbv7-unknown-unknown -show-encoding < %s | FileCheck %s
.code 16
-@ CHECK: vabd.s8 d16, d16, d17 @ encoding: [0xa1,0x07,0x40,0xef]
vabd.s8 d16, d16, d17
-@ CHECK: vabd.s16 d16, d16, d17 @ encoding: [0xa1,0x07,0x50,0xef]
vabd.s16 d16, d16, d17
-@ CHECK: vabd.s32 d16, d16, d17 @ encoding: [0xa1,0x07,0x60,0xef]
vabd.s32 d16, d16, d17
-@ CHECK: vabd.u8 d16, d16, d17 @ encoding: [0xa1,0x07,0x40,0xff]
vabd.u8 d16, d16, d17
-@ CHECK: vabd.u16 d16, d16, d17 @ encoding: [0xa1,0x07,0x50,0xff]
vabd.u16 d16, d16, d17
- @ CHECK: vabd.u32 d16, d16, d17 @ encoding: [0xa1,0x07,0x60,0xff]
vabd.u32 d16, d16, d17
-@ CHECK: vabd.f32 d16, d16, d17 @ encoding: [0xa1,0x0d,0x60,0xff]
vabd.f32 d16, d16, d17
-@ CHECK: vabd.s8 q8, q8, q9 @ encoding: [0xe2,0x07,0x40,0xef]
vabd.s8 q8, q8, q9
-@ CHECK: vabd.s16 q8, q8, q9 @ encoding: [0xe2,0x07,0x50,0xef]
vabd.s16 q8, q8, q9
-@ CHECK: vabd.s32 q8, q8, q9 @ encoding: [0xe2,0x07,0x60,0xef]
vabd.s32 q8, q8, q9
-@ CHECK: vabd.u8 q8, q8, q9 @ encoding: [0xe2,0x07,0x40,0xff]
vabd.u8 q8, q8, q9
-@ CHECK: vabd.u16 q8, q8, q9 @ encoding: [0xe2,0x07,0x50,0xff]
vabd.u16 q8, q8, q9
-@ CHECK: vabd.u32 q8, q8, q9 @ encoding: [0xe2,0x07,0x60,0xff]
vabd.u32 q8, q8, q9
-@ CHECK: vabd.f32 q8, q8, q9 @ encoding: [0xe2,0x0d,0x60,0xff]
vabd.f32 q8, q8, q9
-@ CHECK: vabdl.s8 q8, d16, d17 @ encoding: [0xa1,0x07,0xc0,0xef]
+@ CHECK: vabd.s8 d16, d16, d17 @ encoding: [0x40,0xef,0xa1,0x07]
+@ CHECK: vabd.s16 d16, d16, d17 @ encoding: [0x50,0xef,0xa1,0x07]
+@ CHECK: vabd.s32 d16, d16, d17 @ encoding: [0x60,0xef,0xa1,0x07]
+@ CHECK: vabd.u8 d16, d16, d17 @ encoding: [0x40,0xff,0xa1,0x07]
+@ CHECK: vabd.u16 d16, d16, d17 @ encoding: [0x50,0xff,0xa1,0x07]
+@ CHECK: vabd.u32 d16, d16, d17 @ encoding: [0x60,0xff,0xa1,0x07]
+@ CHECK: vabd.f32 d16, d16, d17 @ encoding: [0x60,0xff,0xa1,0x0d]
+@ CHECK: vabd.s8 q8, q8, q9 @ encoding: [0x40,0xef,0xe2,0x07]
+@ CHECK: vabd.s16 q8, q8, q9 @ encoding: [0x50,0xef,0xe2,0x07]
+@ CHECK: vabd.s32 q8, q8, q9 @ encoding: [0x60,0xef,0xe2,0x07]
+@ CHECK: vabd.u8 q8, q8, q9 @ encoding: [0x40,0xff,0xe2,0x07]
+@ CHECK: vabd.u16 q8, q8, q9 @ encoding: [0x50,0xff,0xe2,0x07]
+@ CHECK: vabd.u32 q8, q8, q9 @ encoding: [0x60,0xff,0xe2,0x07]
+@ CHECK: vabd.f32 q8, q8, q9 @ encoding: [0x60,0xff,0xe2,0x0d]
+
+
vabdl.s8 q8, d16, d17
-@ CHECK: vabdl.s16 q8, d16, d17 @ encoding: [0xa1,0x07,0xd0,0xef]
vabdl.s16 q8, d16, d17
-@ CHECK: vabdl.s32 q8, d16, d17 @ encoding: [0xa1,0x07,0xe0,0xef]
vabdl.s32 q8, d16, d17
-@ CHECK: vabdl.u8 q8, d16, d17 @ encoding: [0xa1,0x07,0xc0,0xff]
vabdl.u8 q8, d16, d17
-@ CHECK: vabdl.u16 q8, d16, d17 @ encoding: [0xa1,0x07,0xd0,0xff]
vabdl.u16 q8, d16, d17
-@ CHECK: vabdl.u32 q8, d16, d17 @ encoding: [0xa1,0x07,0xe0,0xff]
vabdl.u32 q8, d16, d17
-@ CHECK: vaba.s8 d16, d18, d17 @ encoding: [0xb1,0x07,0x42,0xef]
+@ CHECK: vabdl.s8 q8, d16, d17 @ encoding: [0xc0,0xef,0xa1,0x07]
+@ CHECK: vabdl.s16 q8, d16, d17 @ encoding: [0xd0,0xef,0xa1,0x07]
+@ CHECK: vabdl.s32 q8, d16, d17 @ encoding: [0xe0,0xef,0xa1,0x07]
+@ CHECK: vabdl.u8 q8, d16, d17 @ encoding: [0xc0,0xff,0xa1,0x07]
+@ CHECK: vabdl.u16 q8, d16, d17 @ encoding: [0xd0,0xff,0xa1,0x07]
+@ CHECK: vabdl.u32 q8, d16, d17 @ encoding: [0xe0,0xff,0xa1,0x07]
+
+
vaba.s8 d16, d18, d17
-@ CHECK: vaba.s16 d16, d18, d17 @ encoding: [0xb1,0x07,0x52,0xef]
vaba.s16 d16, d18, d17
-@ CHECK: vaba.s32 d16, d18, d17 @ encoding: [0xb1,0x07,0x62,0xef]
vaba.s32 d16, d18, d17
-@ CHECK: vaba.u8 d16, d18, d17 @ encoding: [0xb1,0x07,0x42,0xff]
vaba.u8 d16, d18, d17
-@ CHECK: vaba.u16 d16, d18, d17 @ encoding: [0xb1,0x07,0x52,0xff]
vaba.u16 d16, d18, d17
-@ CHECK: vaba.u32 d16, d18, d17 @ encoding: [0xb1,0x07,0x62,0xff]
vaba.u32 d16, d18, d17
-@ CHECK: vaba.s8 q9, q8, q10 @ encoding: [0xf4,0x27,0x40,0xef]
vaba.s8 q9, q8, q10
-@ CHECK: vaba.s16 q9, q8, q10 @ encoding: [0xf4,0x27,0x50,0xef]
vaba.s16 q9, q8, q10
-@ CHECK: vaba.s32 q9, q8, q10 @ encoding: [0xf4,0x27,0x60,0xef]
vaba.s32 q9, q8, q10
-@ CHECK: vaba.u8 q9, q8, q10 @ encoding: [0xf4,0x27,0x40,0xff]
vaba.u8 q9, q8, q10
-@ CHECK: vaba.u16 q9, q8, q10 @ encoding: [0xf4,0x27,0x50,0xff]
vaba.u16 q9, q8, q10
-@ CHECK: vaba.u32 q9, q8, q10 @ encoding: [0xf4,0x27,0x60,0xff]
vaba.u32 q9, q8, q10
-@ CHECK: vabal.s8 q8, d19, d18 @ encoding: [0xa2,0x05,0xc3,0xef]
+@ CHECK: vaba.s8 d16, d18, d17 @ encoding: [0x42,0xef,0xb1,0x07]
+@ CHECK: vaba.s16 d16, d18, d17 @ encoding: [0x52,0xef,0xb1,0x07]
+@ CHECK: vaba.s32 d16, d18, d17 @ encoding: [0x62,0xef,0xb1,0x07]
+@ CHECK: vaba.u8 d16, d18, d17 @ encoding: [0x42,0xff,0xb1,0x07]
+@ CHECK: vaba.u16 d16, d18, d17 @ encoding: [0x52,0xff,0xb1,0x07]
+@ CHECK: vaba.u32 d16, d18, d17 @ encoding: [0x62,0xff,0xb1,0x07]
+@ CHECK: vaba.s8 q9, q8, q10 @ encoding: [0x40,0xef,0xf4,0x27]
+@ CHECK: vaba.s16 q9, q8, q10 @ encoding: [0x50,0xef,0xf4,0x27]
+@ CHECK: vaba.s32 q9, q8, q10 @ encoding: [0x60,0xef,0xf4,0x27]
+@ CHECK: vaba.u8 q9, q8, q10 @ encoding: [0x40,0xff,0xf4,0x27]
+@ CHECK: vaba.u16 q9, q8, q10 @ encoding: [0x50,0xff,0xf4,0x27]
+@ CHECK: vaba.u32 q9, q8, q10 @ encoding: [0x60,0xff,0xf4,0x27]
+
+
vabal.s8 q8, d19, d18
-@ CHECK: vabal.s16 q8, d19, d18 @ encoding: [0xa2,0x05,0xd3,0xef]
vabal.s16 q8, d19, d18
-@ CHECK: vabal.s32 q8, d19, d18 @ encoding: [0xa2,0x05,0xe3,0xef]
vabal.s32 q8, d19, d18
-@ CHECK: vabal.u8 q8, d19, d18 @ encoding: [0xa2,0x05,0xc3,0xff]
vabal.u8 q8, d19, d18
-@ CHECK: vabal.u16 q8, d19, d18 @ encoding: [0xa2,0x05,0xd3,0xff]
vabal.u16 q8, d19, d18
-@ CHECK: vabal.u32 q8, d19, d18 @ encoding: [0xa2,0x05,0xe3,0xff]
vabal.u32 q8, d19, d18
+@ CHECK: vabal.s8 q8, d19, d18 @ encoding: [0xc3,0xef,0xa2,0x05]
+@ CHECK: vabal.s16 q8, d19, d18 @ encoding: [0xd3,0xef,0xa2,0x05]
+@ CHECK: vabal.s32 q8, d19, d18 @ encoding: [0xe3,0xef,0xa2,0x05]
+@ CHECK: vabal.u8 q8, d19, d18 @ encoding: [0xc3,0xff,0xa2,0x05]
+@ CHECK: vabal.u16 q8, d19, d18 @ encoding: [0xd3,0xff,0xa2,0x05]
+@ CHECK: vabal.u32 q8, d19, d18 @ encoding: [0xe3,0xff,0xa2,0x05]
+
diff --git a/test/MC/ARM/neont2-bitcount-encoding.s b/test/MC/ARM/neont2-bitcount-encoding.s
index 4280cbd..bd525f1 100644
--- a/test/MC/ARM/neont2-bitcount-encoding.s
+++ b/test/MC/ARM/neont2-bitcount-encoding.s
@@ -1,34 +1,38 @@
@ RUN: llvm-mc -mcpu=cortex-a8 -triple thumb-unknown-unknown -show-encoding < %s | FileCheck %s
-@ XFAIL: *
.code 16
-@ CHECK: vcnt.8 d16, d16 @ encoding: [0x20,0x05,0xf0,0xff]
vcnt.8 d16, d16
-@ CHECK: vcnt.8 q8, q8 @ encoding: [0x60,0x05,0xf0,0xff]
vcnt.8 q8, q8
-@ CHECK: vclz.i8 d16, d16 @ encoding: [0xa0,0x04,0xf0,0xff]
+
+@ CHECK: vcnt.8 d16, d16 @ encoding: [0xf0,0xff,0x20,0x05]
+@ CHECK: vcnt.8 q8, q8 @ encoding: [0xf0,0xff,0x60,0x05]
+
vclz.i8 d16, d16
-@ CHECK: vclz.i16 d16, d16 @ encoding: [0xa0,0x04,0xf4,0xff]
vclz.i16 d16, d16
-@ CHECK: vclz.i32 d16, d16 @ encoding: [0xa0,0x04,0xf8,0xff]
vclz.i32 d16, d16
-@ CHECK: vclz.i8 q8, q8 @ encoding: [0xe0,0x04,0xf0,0xff]
vclz.i8 q8, q8
-@ CHECK: vclz.i16 q8, q8 @ encoding: [0xe0,0x04,0xf4,0xff]
vclz.i16 q8, q8
-@ CHECK: vclz.i32 q8, q8 @ encoding: [0xe0,0x04,0xf8,0xff]
vclz.i32 q8, q8
-@ CHECK: vcls.s8 d16, d16 @ encoding: [0x20,0x04,0xf0,0xff]
+
+@ CHECK: vclz.i8 d16, d16 @ encoding: [0xf0,0xff,0xa0,0x04]
+@ CHECK: vclz.i16 d16, d16 @ encoding: [0xf4,0xff,0xa0,0x04]
+@ CHECK: vclz.i32 d16, d16 @ encoding: [0xf8,0xff,0xa0,0x04]
+@ CHECK: vclz.i8 q8, q8 @ encoding: [0xf0,0xff,0xe0,0x04]
+@ CHECK: vclz.i16 q8, q8 @ encoding: [0xf4,0xff,0xe0,0x04]
+@ CHECK: vclz.i32 q8, q8 @ encoding: [0xf8,0xff,0xe0,0x04]
+
vcls.s8 d16, d16
-@ CHECK: vcls.s16 d16, d16 @ encoding: [0x20,0x04,0xf4,0xff]
vcls.s16 d16, d16
-@ CHECK: vcls.s32 d16, d16 @ encoding: [0x20,0x04,0xf8,0xff]
vcls.s32 d16, d16
-@ CHECK: vcls.s8 q8, q8 @ encoding: [0x60,0x04,0xf0,0xff]
vcls.s8 q8, q8
-@ CHECK: vcls.s16 q8, q8 @ encoding: [0x60,0x04,0xf4,0xff]
vcls.s16 q8, q8
-@ CHECK: vcls.s32 q8, q8 @ encoding: [0x60,0x04,0xf8,0xff]
vcls.s32 q8, q8
+@ CHECK: vcls.s8 d16, d16 @ encoding: [0xf0,0xff,0x20,0x04]
+@ CHECK: vcls.s16 d16, d16 @ encoding: [0xf4,0xff,0x20,0x04]
+@ CHECK: vcls.s32 d16, d16 @ encoding: [0xf8,0xff,0x20,0x04]
+@ CHECK: vcls.s8 q8, q8 @ encoding: [0xf0,0xff,0x60,0x04]
+@ CHECK: vcls.s16 q8, q8 @ encoding: [0xf4,0xff,0x60,0x04]
+@ CHECK: vcls.s32 q8, q8 @ encoding: [0xf8,0xff,0x60,0x04]
+
diff --git a/test/MC/ARM/neont2-bitwise-encoding.s b/test/MC/ARM/neont2-bitwise-encoding.s
index 3acd7a8..175873b 100644
--- a/test/MC/ARM/neont2-bitwise-encoding.s
+++ b/test/MC/ARM/neont2-bitwise-encoding.s
@@ -1,49 +1,55 @@
@ RUN: llvm-mc -mcpu=cortex-a8 -triple thumb-unknown-unknown -show-encoding < %s | FileCheck %s
-@ XFAIL: *
.code 16
-@ CHECK: vand d16, d17, d16 @ encoding: [0xb0,0x01,0x41,0xef]
vand d16, d17, d16
-@ CHECK: vand q8, q8, q9 @ encoding: [0xf2,0x01,0x40,0xef]
vand q8, q8, q9
-@ CHECK: veor d16, d17, d16 @ encoding: [0xb0,0x01,0x41,0xff]
+@ CHECK: vand d16, d17, d16 @ encoding: [0x41,0xef,0xb0,0x01]
+@ CHECK: vand q8, q8, q9 @ encoding: [0x40,0xef,0xf2,0x01]
+
veor d16, d17, d16
-@ CHECK: veor q8, q8, q9 @ encoding: [0xf2,0x01,0x40,0xff]
veor q8, q8, q9
-@ CHECK: vorr d16, d17, d16 @ encoding: [0xb0,0x01,0x61,0xef]
+@ CHECK: veor d16, d17, d16 @ encoding: [0x41,0xff,0xb0,0x01]
+@ CHECK: veor q8, q8, q9 @ encoding: [0x40,0xff,0xf2,0x01]
+
+
vorr d16, d17, d16
-@ CHECK: vorr q8, q8, q9 @ encoding: [0xf2,0x01,0x60,0xef]
vorr q8, q8, q9
-@ CHECK: vorr.i32 d16, #0x1000000 @ encoding: [0x11,0x07,0xc0,0xef]
- vorr.i32 d16, #0x1000000
-@ CHECK: vorr.i32 q8, #0x1000000 @ encoding: [0x51,0x07,0xc0,0xef]
- vorr.i32 q8, #0x1000000
-@ CHECK: vorr.i32 q8, #0x0 @ encoding: [0x50,0x01,0xc0,0xef]
- vorr.i32 q8, #0x0
-
-@ CHECK: vbic d16, d17, d16 @ encoding: [0xb0,0x01,0x51,0xef]
+@ vorr.i32 d16, #0x1000000
+@ vorr.i32 q8, #0x1000000
+@ vorr.i32 q8, #0x0
+
+@ CHECK: vorr d16, d17, d16 @ encoding: [0x61,0xef,0xb0,0x01]
+@ CHECK: vorr q8, q8, q9 @ encoding: [0x60,0xef,0xf2,0x01]
+
+
vbic d16, d17, d16
-@ CHECK: vbic q8, q8, q9 @ encoding: [0xf2,0x01,0x50,0xef]
vbic q8, q8, q9
-@ CHECK: vbic.i32 d16, #0xFF000000 @ encoding: [0x3f,0x07,0xc7,0xff]
- vbic.i32 d16, #0xFF000000
-@ CHECK: vbic.i32 q8, #0xFF000000 @ encoding: [0x7f,0x07,0xc7,0xff]
- vbic.i32 q8, #0xFF000000
+@ vbic.i32 d16, #0xFF000000
+@ vbic.i32 q8, #0xFF000000
+
+@ CHECK: vbic d16, d17, d16 @ encoding: [0x51,0xef,0xb0,0x01]
+@ CHECK: vbic q8, q8, q9 @ encoding: [0x50,0xef,0xf2,0x01]
+
-@ CHECK: vorn d16, d17, d16 @ encoding: [0xb0,0x01,0x71,0xef]
vorn d16, d17, d16
-@ CHECK: vorn q8, q8, q9 @ encoding: [0xf2,0x01,0x70,0xef]
vorn q8, q8, q9
-@ CHECK: vmvn d16, d16 @ encoding: [0xa0,0x05,0xf0,0xff]
+@ CHECK: vorn d16, d17, d16 @ encoding: [0x71,0xef,0xb0,0x01]
+@ CHECK: vorn q8, q8, q9 @ encoding: [0x70,0xef,0xf2,0x01]
+
+
vmvn d16, d16
-@ CHECK: vmvn q8, q8 @ encoding: [0xe0,0x05,0xf0,0xff]
vmvn q8, q8
-@ CHECK: vbsl d18, d17, d16 @ encoding: [0xb0,0x21,0x51,0xff]
+@ CHECK: vmvn d16, d16 @ encoding: [0xf0,0xff,0xa0,0x05]
+@ CHECK: vmvn q8, q8 @ encoding: [0xf0,0xff,0xe0,0x05]
+
+
vbsl d18, d17, d16
-@ CHECK: vbsl q8, q10, q9 @ encoding: [0xf2,0x01,0x54,0xff]
vbsl q8, q10, q9
+
+@ CHECK: vbsl d18, d17, d16 @ encoding: [0x51,0xff,0xb0,0x21]
+@ CHECK: vbsl q8, q10, q9 @ encoding: [0x54,0xff,0xf2,0x01]
diff --git a/test/MC/ARM/neont2-dup-encoding.s b/test/MC/ARM/neont2-dup-encoding.s
index da6e78f..bf25d70 100644
--- a/test/MC/ARM/neont2-dup-encoding.s
+++ b/test/MC/ARM/neont2-dup-encoding.s
@@ -1,29 +1,43 @@
-@ RUN: llvm-mc -mcpu=cortex-a8 -triple thumb-unknown-unknown -show-encoding < %s | FileCheck %s
-@ XFAIL: *
+@RUN: llvm-mc -triple thumbv7-unknown-unknown -show-encoding < %s | FileCheck %s
.code 16
-@ CHECK: vdup.8 d16, r0 @ encoding: [0x90,0x0b,0xc0,0xee]
- vdup.8 d16, r0
-@ CHECK: vdup.16 d16, r0 @ encoding: [0xb0,0x0b,0x80,0xee]
- vdup.16 d16, r0
-@ CHECK: vdup.32 d16, r0 @ encoding: [0x90,0x0b,0x80,0xee]
- vdup.32 d16, r0
-@ CHECK: vdup.8 q8, r0 @ encoding: [0x90,0x0b,0xe0,0xee]
- vdup.8 q8, r0
-@ CHECK: vdup.16 q8, r0 @ encoding: [0xb0,0x0b,0xa0,0xee]
- vdup.16 q8, r0
-@ CHECK: vdup.32 q8, r0 @ encoding: [0x90,0x0b,0xa0,0xee]
- vdup.32 q8, r0
-@ CHECK: vdup.8 d16, d16[1] @ encoding: [0x20,0x0c,0xf3,0xff]
- vdup.8 d16, d16[1]
-@ CHECK: vdup.16 d16, d16[1] @ encoding: [0x20,0x0c,0xf6,0xff]
- vdup.16 d16, d16[1]
-@ CHECK: vdup.32 d16, d16[1] @ encoding: [0x20,0x0c,0xfc,0xff]
- vdup.32 d16, d16[1]
-@ CHECK: vdup.8 q8, d16[1] @ encoding: [0x60,0x0c,0xf3,0xff]
- vdup.8 q8, d16[1]
-@ CHECK: vdup.16 q8, d16[1] @ encoding: [0x60,0x0c,0xf6,0xff]
- vdup.16 q8, d16[1]
-@ CHECK: vdup.32 q8, d16[1] @ encoding: [0x60,0x0c,0xfc,0xff]
- vdup.32 q8, d16[1]
+ vdup.8 d16, r1
+ vdup.16 d15, r2
+ vdup.32 d14, r3
+ vdup.8 q9, r4
+ vdup.16 q8, r5
+ vdup.32 q7, r6
+
+@ CHECK: vdup.8 d16, r1 @ encoding: [0xc0,0xee,0x90,0x1b]
+@ CHECK: vdup.16 d15, r2 @ encoding: [0x8f,0xee,0x30,0x2b]
+@ CHECK: vdup.32 d14, r3 @ encoding: [0x8e,0xee,0x10,0x3b]
+@ CHECK: vdup.8 q9, r4 @ encoding: [0xe2,0xee,0x90,0x4b]
+@ CHECK: vdup.16 q8, r5 @ encoding: [0xa0,0xee,0xb0,0x5b]
+@ CHECK: vdup.32 q7, r6 @ encoding: [0xae,0xee,0x10,0x6b]
+
+ vdup.8 d16, d11[0]
+ vdup.16 d17, d12[0]
+ vdup.32 d18, d13[0]
+ vdup.8 q3, d10[0]
+ vdup.16 q9, d9[0]
+ vdup.32 q8, d8[0]
+ vdup.8 d16, d11[1]
+ vdup.16 d17, d12[1]
+ vdup.32 d18, d13[1]
+ vdup.8 q3, d10[1]
+ vdup.16 q9, d9[1]
+ vdup.32 q8, d8[1]
+
+@ CHECK: vdup.8 d16, d11[0] @ encoding: [0xf1,0xff,0x0b,0x0c]
+@ CHECK: vdup.16 d17, d12[0] @ encoding: [0xf2,0xff,0x0c,0x1c]
+@ CHECK: vdup.32 d18, d13[0] @ encoding: [0xf4,0xff,0x0d,0x2c]
+@ CHECK: vdup.8 q3, d10[0] @ encoding: [0xb1,0xff,0x4a,0x6c]
+@ CHECK: vdup.16 q9, d9[0] @ encoding: [0xf2,0xff,0x49,0x2c]
+@ CHECK: vdup.32 q8, d8[0] @ encoding: [0xf4,0xff,0x48,0x0c]
+@ CHECK: vdup.8 d16, d11[1] @ encoding: [0xf3,0xff,0x0b,0x0c]
+@ CHECK: vdup.16 d17, d12[1] @ encoding: [0xf6,0xff,0x0c,0x1c]
+@ CHECK: vdup.32 d18, d13[1] @ encoding: [0xfc,0xff,0x0d,0x2c]
+@ CHECK: vdup.8 q3, d10[1] @ encoding: [0xb3,0xff,0x4a,0x6c]
+@ CHECK: vdup.16 q9, d9[1] @ encoding: [0xf6,0xff,0x49,0x2c]
+@ CHECK: vdup.32 q8, d8[1] @ encoding: [0xfc,0xff,0x48,0x0c]
diff --git a/test/MC/ARM/neont2-mul-accum-encoding.s b/test/MC/ARM/neont2-mul-accum-encoding.s
index e21c67d..be4bf79 100644
--- a/test/MC/ARM/neont2-mul-accum-encoding.s
+++ b/test/MC/ARM/neont2-mul-accum-encoding.s
@@ -1,69 +1,84 @@
@ RUN: llvm-mc -mcpu=cortex-a8 -triple thumb-unknown-unknown -show-encoding < %s | FileCheck %s
-@ XFAIL: *
.code 16
-@ CHECK: vmla.i8 d16, d18, d17 @ encoding: [0xa1,0x09,0x42,0xef]
vmla.i8 d16, d18, d17
-@ CHECK: vmla.i16 d16, d18, d17 @ encoding: [0xa1,0x09,0x52,0xef]
vmla.i16 d16, d18, d17
-@ CHECK: vmla.i16 d16, d18, d17 @ encoding: [0xa1,0x09,0x52,0xef]
vmla.i32 d16, d18, d17
-@ CHECK: vmla.f32 d16, d18, d17 @ encoding: [0xb1,0x0d,0x42,0xef]
vmla.f32 d16, d18, d17
-@ CHECK: vmla.i8 q9, q8, q10 @ encoding: [0xe4,0x29,0x40,0xef]
vmla.i8 q9, q8, q10
-@ CHECK: vmla.i16 q9, q8, q10 @ encoding: [0xe4,0x29,0x50,0xef]
vmla.i16 q9, q8, q10
-@ CHECK: vmla.i32 q9, q8, q10 @ encoding: [0xe4,0x29,0x60,0xef]
vmla.i32 q9, q8, q10
-@ CHECK: vmla.f32 q9, q8, q10 @ encoding: [0xf4,0x2d,0x40,0xef]
vmla.f32 q9, q8, q10
-@ CHECK: vmlal.s8 q8, d19, d18 @ encoding: [0xa2,0x08,0xc3,0xef]
+
+@ CHECK: vmla.i8 d16, d18, d17 @ encoding: [0x42,0xef,0xa1,0x09]
+@ CHECK: vmla.i16 d16, d18, d17 @ encoding: [0x52,0xef,0xa1,0x09]
+@ CHECK: vmla.i32 d16, d18, d17 @ encoding: [0x62,0xef,0xa1,0x09]
+@ CHECK: vmla.f32 d16, d18, d17 @ encoding: [0x42,0xef,0xb1,0x0d]
+@ CHECK: vmla.i8 q9, q8, q10 @ encoding: [0x40,0xef,0xe4,0x29]
+@ CHECK: vmla.i16 q9, q8, q10 @ encoding: [0x50,0xef,0xe4,0x29]
+@ CHECK: vmla.i32 q9, q8, q10 @ encoding: [0x60,0xef,0xe4,0x29]
+@ CHECK: vmla.f32 q9, q8, q10 @ encoding: [0x40,0xef,0xf4,0x2d]
+
+
vmlal.s8 q8, d19, d18
-@ CHECK: vmlal.s16 q8, d19, d18 @ encoding: [0xa2,0x08,0xd3,0xef]
vmlal.s16 q8, d19, d18
-@ CHECK: vmlal.s32 q8, d19, d18 @ encoding: [0xa2,0x08,0xe3,0xef]
vmlal.s32 q8, d19, d18
-@ CHECK: vmlal.u8 q8, d19, d18 @ encoding: [0xa2,0x08,0xc3,0xff]
vmlal.u8 q8, d19, d18
-@ CHECK: vmlal.u16 q8, d19, d18 @ encoding: [0xa2,0x08,0xd3,0xff]
vmlal.u16 q8, d19, d18
-@ CHECK: vmlal.u32 q8, d19, d18 @ encoding: [0xa2,0x08,0xe3,0xff]
vmlal.u32 q8, d19, d18
-@ CHECK: vqdmlal.s16 q8, d19, d18 @ encoding: [0xa2,0x09,0xd3,0xef]
+
+@ CHECK: vmlal.s8 q8, d19, d18 @ encoding: [0xc3,0xef,0xa2,0x08]
+@ CHECK: vmlal.s16 q8, d19, d18 @ encoding: [0xd3,0xef,0xa2,0x08]
+@ CHECK: vmlal.s32 q8, d19, d18 @ encoding: [0xe3,0xef,0xa2,0x08]
+@ CHECK: vmlal.u8 q8, d19, d18 @ encoding: [0xc3,0xff,0xa2,0x08]
+@ CHECK: vmlal.u16 q8, d19, d18 @ encoding: [0xd3,0xff,0xa2,0x08]
+@ CHECK: vmlal.u32 q8, d19, d18 @ encoding: [0xe3,0xff,0xa2,0x08]
+
+
vqdmlal.s16 q8, d19, d18
-@ CHECK: vqdmlal.s32 q8, d19, d18 @ encoding: [0xa2,0x09,0xe3,0xef]
vqdmlal.s32 q8, d19, d18
-@ CHECK: vmls.i8 d16, d18, d17 @ encoding: [0xa1,0x09,0x42,0xff]
+
+@ CHECK: vqdmlal.s16 q8, d19, d18 @ encoding: [0xd3,0xef,0xa2,0x09]
+@ CHECK: vqdmlal.s32 q8, d19, d18 @ encoding: [0xe3,0xef,0xa2,0x09]
+
+
vmls.i8 d16, d18, d17
-@ CHECK: vmls.i16 d16, d18, d17 @ encoding: [0xa1,0x09,0x52,0xff]
vmls.i16 d16, d18, d17
-@ CHECK: vmls.i32 d16, d18, d17 @ encoding: [0xa1,0x09,0x62,0xff]
vmls.i32 d16, d18, d17
-@ CHECK: vmls.f32 d16, d18, d17 @ encoding: [0xb1,0x0d,0x62,0xef]
vmls.f32 d16, d18, d17
-@ CHECK: vmls.i8 q9, q8, q10 @ encoding: [0xe4,0x29,0x40,0xff]
vmls.i8 q9, q8, q10
-@ CHECK: vmls.i16 q9, q8, q10 @ encoding: [0xe4,0x29,0x50,0xff]
vmls.i16 q9, q8, q10
-@ CHECK: vmls.i32 q9, q8, q10 @ encoding: [0xe4,0x29,0x60,0xff]
vmls.i32 q9, q8, q10
-@ CHECK: vmls.f32 q9, q8, q10 @ encoding: [0xf4,0x2d,0x60,0xef]
vmls.f32 q9, q8, q10
-@ CHECK: vmlsl.s8 q8, d19, d18 @ encoding: [0xa2,0x0a,0xc3,0xef]
+
+@ CHECK: vmls.i8 d16, d18, d17 @ encoding: [0x42,0xff,0xa1,0x09]
+@ CHECK: vmls.i16 d16, d18, d17 @ encoding: [0x52,0xff,0xa1,0x09]
+@ CHECK: vmls.i32 d16, d18, d17 @ encoding: [0x62,0xff,0xa1,0x09]
+@ CHECK: vmls.f32 d16, d18, d17 @ encoding: [0x62,0xef,0xb1,0x0d]
+@ CHECK: vmls.i8 q9, q8, q10 @ encoding: [0x40,0xff,0xe4,0x29]
+@ CHECK: vmls.i16 q9, q8, q10 @ encoding: [0x50,0xff,0xe4,0x29]
+@ CHECK: vmls.i32 q9, q8, q10 @ encoding: [0x60,0xff,0xe4,0x29]
+@ CHECK: vmls.f32 q9, q8, q10 @ encoding: [0x60,0xef,0xf4,0x2d]
+
+
vmlsl.s8 q8, d19, d18
-@ CHECK: vmlsl.s16 q8, d19, d18 @ encoding: [0xa2,0x0a,0xd3,0xef]
vmlsl.s16 q8, d19, d18
-@ CHECK: vmlsl.s32 q8, d19, d18 @ encoding: [0xa2,0x0a,0xe3,0xef]
vmlsl.s32 q8, d19, d18
-@ CHECK: vmlsl.u8 q8, d19, d18 @ encoding: [0xa2,0x0a,0xc3,0xff]
vmlsl.u8 q8, d19, d18
-@ CHECK: vmlsl.u16 q8, d19, d18 @ encoding: [0xa2,0x0a,0xd3,0xff]
vmlsl.u16 q8, d19, d18
-@ CHECK: vmlsl.u32 q8, d19, d18 @ encoding: [0xa2,0x0a,0xe3,0xff]
vmlsl.u32 q8, d19, d18
-@ CHECK: vqdmlsl.s16 q8, d19, d18 @ encoding: [0xa2,0x0b,0xd3,0xef]
+
+@ CHECK: vmlsl.s8 q8, d19, d18 @ encoding: [0xc3,0xef,0xa2,0x0a]
+@ CHECK: vmlsl.s16 q8, d19, d18 @ encoding: [0xd3,0xef,0xa2,0x0a]
+@ CHECK: vmlsl.s32 q8, d19, d18 @ encoding: [0xe3,0xef,0xa2,0x0a]
+@ CHECK: vmlsl.u8 q8, d19, d18 @ encoding: [0xc3,0xff,0xa2,0x0a]
+@ CHECK: vmlsl.u16 q8, d19, d18 @ encoding: [0xd3,0xff,0xa2,0x0a]
+@ CHECK: vmlsl.u32 q8, d19, d18 @ encoding: [0xe3,0xff,0xa2,0x0a]
+
+
vqdmlsl.s16 q8, d19, d18
-@ CHECK: vqdmlsl.s32 q8, d19, d18 @ encoding: [0xa2,0x0b,0xe3,0xef]
vqdmlsl.s32 q8, d19, d18
+
+@ CHECK: vqdmlsl.s16 q8, d19, d18 @ encoding: [0xd3,0xef,0xa2,0x0b]
+@ CHECK: vqdmlsl.s32 q8, d19, d18 @ encoding: [0xe3,0xef,0xa2,0x0b]
diff --git a/test/MC/ARM/neont2-pairwise-encoding.s b/test/MC/ARM/neont2-pairwise-encoding.s
index ef90922..29aac36 100644
--- a/test/MC/ARM/neont2-pairwise-encoding.s
+++ b/test/MC/ARM/neont2-pairwise-encoding.s
@@ -1,89 +1,100 @@
@ RUN: llvm-mc -mcpu=cortex-a8 -triple thumb-unknown-unknown -show-encoding < %s | FileCheck %s
-@ XFAIL: *
.code 16
+ vpadd.i8 d1, d5, d11
+ vpadd.i16 d13, d2, d12
+ vpadd.i32 d14, d1, d13
+ vpadd.f32 d19, d16, d14
-@ CHECK: vpadd.i8 d16, d17, d16 @ encoding: [0xb0,0x0b,0x41,0xef]
- vpadd.i8 d16, d17, d16
-@ CHECK: vpadd.i16 d16, d17, d16 @ encoding: [0xb0,0x0b,0x51,0xef]
- vpadd.i16 d16, d17, d16
-@ CHECK: vpadd.i32 d16, d17, d16 @ encoding: [0xb0,0x0b,0x61,0xef]
- vpadd.i32 d16, d17, d16
-@ CHECK: vpadd.f32 d16, d16, d17 @ encoding: [0xa1,0x0d,0x40,0xff]
- vpadd.f32 d16, d16, d17
-@ CHECK: vpaddl.s8 d16, d16 @ encoding: [0x20,0x02,0xf0,0xff]
- vpaddl.s8 d16, d16
-@ CHECK: vpaddl.s16 d16, d16 @ encoding: [0x20,0x02,0xf4,0xff]
- vpaddl.s16 d16, d16
-@ CHECK: vpaddl.s32 d16, d16 @ encoding: [0x20,0x02,0xf8,0xff]
- vpaddl.s32 d16, d16
-@ CHECK: vpaddl.u8 d16, d16 @ encoding: [0xa0,0x02,0xf0,0xff]
- vpaddl.u8 d16, d16
-@ CHECK: vpaddl.u16 d16, d16 @ encoding: [0xa0,0x02,0xf4,0xff]
- vpaddl.u16 d16, d16
-@ CHECK: vpaddl.u32 d16, d16 @ encoding: [0xa0,0x02,0xf8,0xff]
- vpaddl.u32 d16, d16
-@ CHECK: vpaddl.s8 q8, q8 @ encoding: [0x60,0x02,0xf0,0xff]
- vpaddl.s8 q8, q8
-@ CHECK: vpaddl.s16 q8, q8 @ encoding: [0x60,0x02,0xf4,0xff]
- vpaddl.s16 q8, q8
-@ CHECK: vpaddl.s32 q8, q8 @ encoding: [0x60,0x02,0xf8,0xff]
- vpaddl.s32 q8, q8
-@ CHECK: vpaddl.u8 q8, q8 @ encoding: [0xe0,0x02,0xf0,0xff]
- vpaddl.u8 q8, q8
-@ CHECK: vpaddl.u16 q8, q8 @ encoding: [0xe0,0x02,0xf4,0xff]
- vpaddl.u16 q8, q8
-@ CHECK: vpaddl.u32 q8, q8 @ encoding: [0xe0,0x02,0xf8,0xff]
- vpaddl.u32 q8, q8
-@ CHECK: vpadal.s8 d16, d17 @ encoding: [0x21,0x06,0xf0,0xff]
- vpadal.s8 d16, d17
-@ CHECK: vpadal.s16 d16, d17 @ encoding: [0x21,0x06,0xf4,0xff]
- vpadal.s16 d16, d17
-@ CHECK: vpadal.s32 d16, d17 @ encoding: [0x21,0x06,0xf8,0xff]
- vpadal.s32 d16, d17
-@ CHECK: vpadal.u8 d16, d17 @ encoding: [0xa1,0x06,0xf0,0xff]
- vpadal.u8 d16, d17
-@ CHECK: vpadal.u16 d16, d17 @ encoding: [0xa1,0x06,0xf4,0xff]
- vpadal.u16 d16, d17
-@ CHECK: vpadal.u32 d16, d17 @ encoding: [0xa1,0x06,0xf8,0xff]
- vpadal.u32 d16, d17
-@ CHECK: vpadal.s8 q9, q8 @ encoding: [0x60,0x26,0xf0,0xff]
- vpadal.s8 q9, q8
-@ CHECK: vpadal.s16 q9, q8 @ encoding: [0x60,0x26,0xf4,0xff]
- vpadal.s16 q9, q8
-@ CHECK: vpadal.s32 q9, q8 @ encoding: [0x60,0x26,0xf8,0xff]
- vpadal.s32 q9, q8
-@ CHECK: vpadal.u8 q9, q8 @ encoding: [0xe0,0x26,0xf0,0xff]
- vpadal.u8 q9, q8
-@ CHECK: vpadal.u16 q9, q8 @ encoding: [0xe0,0x26,0xf4,0xff]
- vpadal.u16 q9, q8
-@ CHECK: vpadal.u32 q9, q8 @ encoding: [0xe0,0x26,0xf8,0xff]
- vpadal.u32 q9, q8
-@ CHECK: vpmin.s8 d16, d16, d17 @ encoding: [0xb1,0x0a,0x40,0xef]
- vpmin.s8 d16, d16, d17
-@ CHECK: vpmin.s16 d16, d16, d17 @ encoding: [0xb1,0x0a,0x50,0xef]
- vpmin.s16 d16, d16, d17
-@ CHECK: vpmin.s32 d16, d16, d17 @ encoding: [0xb1,0x0a,0x60,0xef]
- vpmin.s32 d16, d16, d17
-@ CHECK: vpmin.u8 d16, d16, d17 @ encoding: [0xb1,0x0a,0x40,0xff]
- vpmin.u8 d16, d16, d17
-@ CHECK: vpmin.u16 d16, d16, d17 @ encoding: [0xb1,0x0a,0x50,0xff]
- vpmin.u16 d16, d16, d17
-@ CHECK: vpmin.u32 d16, d16, d17 @ encoding: [0xb1,0x0a,0x60,0xff]
- vpmin.u32 d16, d16, d17
-@ CHECK: vpmin.f32 d16, d16, d17 @ encoding: [0xa1,0x0f,0x60,0xff]
- vpmin.f32 d16, d16, d17
-@ CHECK: vpmax.s8 d16, d16, d17 @ encoding: [0xa1,0x0a,0x40,0xef]
- vpmax.s8 d16, d16, d17
-@ CHECK: vpmax.s16 d16, d16, d17 @ encoding: [0xa1,0x0a,0x50,0xef]
- vpmax.s16 d16, d16, d17
-@ CHECK: vpmax.s32 d16, d16, d17 @ encoding: [0xa1,0x0a,0x60,0xef]
- vpmax.s32 d16, d16, d17
-@ CHECK: vpmax.u8 d16, d16, d17 @ encoding: [0xa1,0x0a,0x40,0xff]
- vpmax.u8 d16, d16, d17
-@ CHECK: vpmax.u16 d16, d16, d17 @ encoding: [0xa1,0x0a,0x50,0xff]
- vpmax.u16 d16, d16, d17
-@ CHECK: vpmax.u32 d16, d16, d17 @ encoding: [0xa1,0x0a,0x60,0xff]
- vpmax.u32 d16, d16, d17
-@ CHECK: vpmax.f32 d16, d16, d17 @ encoding: [0xa1,0x0f,0x40,0xff]
- vpmax.f32 d16, d16, d17
+@ CHECK: vpadd.i8 d1, d5, d11 @ encoding: [0x05,0xef,0x1b,0x1b]
+@ CHECK: vpadd.i16 d13, d2, d12 @ encoding: [0x12,0xef,0x1c,0xdb]
+@ CHECK: vpadd.i32 d14, d1, d13 @ encoding: [0x21,0xef,0x1d,0xeb]
+@ CHECK: vpadd.f32 d19, d16, d14 @ encoding: [0x40,0xff,0x8e,0x3d]
+
+
+ vpaddl.s8 d7, d10
+ vpaddl.s16 d8, d11
+ vpaddl.s32 d9, d12
+ vpaddl.u8 d0, d13
+ vpaddl.u16 d5, d14
+ vpaddl.u32 d6, d15
+ vpaddl.s8 q4, q7
+ vpaddl.s16 q5, q6
+ vpaddl.s32 q6, q5
+ vpaddl.u8 q7, q4
+ vpaddl.u16 q8, q3
+ vpaddl.u32 q9, q2
+
+@ CHECK: vpaddl.s8 d7, d10 @ encoding: [0xb0,0xff,0x0a,0x72]
+@ CHECK: vpaddl.s16 d8, d11 @ encoding: [0xb4,0xff,0x0b,0x82]
+@ CHECK: vpaddl.s32 d9, d12 @ encoding: [0xb8,0xff,0x0c,0x92]
+@ CHECK: vpaddl.u8 d0, d13 @ encoding: [0xb0,0xff,0x8d,0x02]
+@ CHECK: vpaddl.u16 d5, d14 @ encoding: [0xb4,0xff,0x8e,0x52]
+@ CHECK: vpaddl.u32 d6, d15 @ encoding: [0xb8,0xff,0x8f,0x62]
+@ CHECK: vpaddl.s8 q4, q7 @ encoding: [0xb0,0xff,0x4e,0x82]
+@ CHECK: vpaddl.s16 q5, q6 @ encoding: [0xb4,0xff,0x4c,0xa2]
+@ CHECK: vpaddl.s32 q6, q5 @ encoding: [0xb8,0xff,0x4a,0xc2]
+@ CHECK: vpaddl.u8 q7, q4 @ encoding: [0xb0,0xff,0xc8,0xe2]
+@ CHECK: vpaddl.u16 q8, q3 @ encoding: [0xf4,0xff,0xc6,0x02]
+@ CHECK: vpaddl.u32 q9, q2 @ encoding: [0xf8,0xff,0xc4,0x22]
+
+
+ vpadal.s8 d16, d4
+ vpadal.s16 d20, d9
+ vpadal.s32 d18, d1
+ vpadal.u8 d14, d25
+ vpadal.u16 d12, d6
+ vpadal.u32 d11, d7
+ vpadal.s8 q4, q10
+ vpadal.s16 q5, q11
+ vpadal.s32 q6, q12
+ vpadal.u8 q7, q13
+ vpadal.u16 q8, q14
+ vpadal.u32 q9, q15
+
+@ CHECK: vpadal.s8 d16, d4 @ encoding: [0xf0,0xff,0x04,0x06]
+@ CHECK: vpadal.s16 d20, d9 @ encoding: [0xf4,0xff,0x09,0x46]
+@ CHECK: vpadal.s32 d18, d1 @ encoding: [0xf8,0xff,0x01,0x26]
+@ CHECK: vpadal.u8 d14, d25 @ encoding: [0xb0,0xff,0xa9,0xe6]
+@ CHECK: vpadal.u16 d12, d6 @ encoding: [0xb4,0xff,0x86,0xc6]
+@ CHECK: vpadal.u32 d11, d7 @ encoding: [0xb8,0xff,0x87,0xb6]
+@ CHECK: vpadal.s8 q4, q10 @ encoding: [0xb0,0xff,0x64,0x86]
+@ CHECK: vpadal.s16 q5, q11 @ encoding: [0xb4,0xff,0x66,0xa6]
+@ CHECK: vpadal.s32 q6, q12 @ encoding: [0xb8,0xff,0x68,0xc6]
+@ CHECK: vpadal.u8 q7, q13 @ encoding: [0xb0,0xff,0xea,0xe6]
+@ CHECK: vpadal.u16 q8, q14 @ encoding: [0xf4,0xff,0xec,0x06]
+@ CHECK: vpadal.u32 q9, q15 @ encoding: [0xf8,0xff,0xee,0x26]
+
+
+ vpmin.s8 d16, d29, d10
+ vpmin.s16 d17, d28, d11
+ vpmin.s32 d18, d27, d12
+ vpmin.u8 d19, d26, d13
+ vpmin.u16 d20, d25, d14
+ vpmin.u32 d21, d24, d15
+ vpmin.f32 d22, d23, d16
+
+@ CHECK: vpmin.s8 d16, d29, d10 @ encoding: [0x4d,0xef,0x9a,0x0a]
+@ CHECK: vpmin.s16 d17, d28, d11 @ encoding: [0x5c,0xef,0x9b,0x1a]
+@ CHECK: vpmin.s32 d18, d27, d12 @ encoding: [0x6b,0xef,0x9c,0x2a]
+@ CHECK: vpmin.u8 d19, d26, d13 @ encoding: [0x4a,0xff,0x9d,0x3a]
+@ CHECK: vpmin.u16 d20, d25, d14 @ encoding: [0x59,0xff,0x9e,0x4a]
+@ CHECK: vpmin.u32 d21, d24, d15 @ encoding: [0x68,0xff,0x9f,0x5a]
+@ CHECK: vpmin.f32 d22, d23, d16 @ encoding: [0x67,0xff,0xa0,0x6f]
+
+
+ vpmax.s8 d3, d20, d17
+ vpmax.s16 d4, d21, d16
+ vpmax.s32 d5, d22, d15
+ vpmax.u8 d6, d23, d14
+ vpmax.u16 d7, d24, d13
+ vpmax.u32 d8, d25, d12
+ vpmax.f32 d9, d26, d11
+
+@ CHECK: vpmax.s8 d3, d20, d17 @ encoding: [0x04,0xef,0xa1,0x3a]
+@ CHECK: vpmax.s16 d4, d21, d16 @ encoding: [0x15,0xef,0xa0,0x4a]
+@ CHECK: vpmax.s32 d5, d22, d15 @ encoding: [0x26,0xef,0x8f,0x5a]
+@ CHECK: vpmax.u8 d6, d23, d14 @ encoding: [0x07,0xff,0x8e,0x6a]
+@ CHECK: vpmax.u16 d7, d24, d13 @ encoding: [0x18,0xff,0x8d,0x7a]
+@ CHECK: vpmax.u32 d8, d25, d12 @ encoding: [0x29,0xff,0x8c,0x8a]
+@ CHECK: vpmax.f32 d9, d26, d11 @ encoding: [0x0a,0xff,0x8b,0x9f]
diff --git a/test/MC/ARM/nop-armv4-padding.s b/test/MC/ARM/nop-armv4-padding.s
new file mode 100644
index 0000000..8f646db
--- /dev/null
+++ b/test/MC/ARM/nop-armv4-padding.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc -triple armv4-apple-darwin %s -filetype=obj -o %t.obj
+@ RUN: macho-dump --dump-section-data < %t.obj > %t.dump
+@ RUN: FileCheck %s < %t.dump
+
+x:
+ add r0, r1, r2
+ .align 4
+ add r0, r1, r2
+
+@ CHECK: ('_section_data', '020081e0 00001a0e 00001a0e 00001a0e 020081e0')
diff --git a/test/MC/ARM/nop-armv6t2-padding.s b/test/MC/ARM/nop-armv6t2-padding.s
new file mode 100644
index 0000000..0e25718
--- /dev/null
+++ b/test/MC/ARM/nop-armv6t2-padding.s
@@ -0,0 +1,10 @@
+@ RUN: llvm-mc -triple armv6t2-apple-darwin %s -filetype=obj -o %t.obj
+@ RUN: macho-dump --dump-section-data < %t.obj > %t.dump
+@ RUN: FileCheck %s < %t.dump
+
+x:
+ add r0, r1, r2
+ .align 4
+ add r0, r1, r2
+
+@ CHECK: ('_section_data', '020081e0 007820e3 007820e3 007820e3 020081e0')
diff --git a/test/MC/ARM/nop-thumb-padding.s b/test/MC/ARM/nop-thumb-padding.s
new file mode 100644
index 0000000..1e173f1
--- /dev/null
+++ b/test/MC/ARM/nop-thumb-padding.s
@@ -0,0 +1,12 @@
+@ RUN: llvm-mc -triple armv6-apple-darwin %s -filetype=obj -o %t.obj
+@ RUN: macho-dump --dump-section-data < %t.obj > %t.dump
+@ RUN: FileCheck %s < %t.dump
+
+.thumb_func x
+.code 16
+x:
+ adds r0, r1, r2
+ .align 4
+ adds r0, r1, r2
+
+@ CHECK: ('_section_data', '8818c046 c046c046 c046c046 c046c046 8818')
diff --git a/test/MC/ARM/nop-thumb2-padding.s b/test/MC/ARM/nop-thumb2-padding.s
new file mode 100644
index 0000000..a8aa3a1
--- /dev/null
+++ b/test/MC/ARM/nop-thumb2-padding.s
@@ -0,0 +1,12 @@
+@ RUN: llvm-mc -triple armv7-apple-darwin %s -filetype=obj -o %t.obj
+@ RUN: macho-dump --dump-section-data < %t.obj > %t.dump
+@ RUN: FileCheck %s < %t.dump
+
+.thumb_func x
+.code 16
+x:
+ adds r0, r1, r2
+ .align 4
+ adds r0, r1, r2
+
+@ CHECK: ('_section_data', '881800bf 00bf00bf 00bf00bf 00bf00bf 8818')
diff --git a/test/MC/ARM/reg-list.s b/test/MC/ARM/reg-list.s
deleted file mode 100644
index 4dd392e..0000000
--- a/test/MC/ARM/reg-list.s
+++ /dev/null
@@ -1,8 +0,0 @@
-@ RUN: llvm-mc -triple thumb-apple-darwin10 -show-encoding < %s 2> %t | FileCheck %s
-@ RUN: FileCheck --check-prefix=CHECK-WARNINGS < %t %s
-
- push {r7, lr}
-@ CHECK-WARNINGS: register not in ascending order in register list
-
- push {lr, r7}
-@ CHECK: push {lr, r7}
diff --git a/test/MC/ARM/simple-encoding.ll b/test/MC/ARM/simple-encoding.ll
deleted file mode 100644
index 14ed945..0000000
--- a/test/MC/ARM/simple-encoding.ll
+++ /dev/null
@@ -1,236 +0,0 @@
-;RUN: llc -mtriple=armv7-apple-darwin -show-mc-encoding -disable-cgp-branch-opts -join-physregs < %s | FileCheck %s
-
-
-;FIXME: Once the ARM integrated assembler is up and going, these sorts of tests
-; should run on .s source files rather than using llc to generate the
-; assembly. There's also a large number of instruction encodings the
-; compiler never generates, so we need the integrated assembler to be
-; able to test those at all.
-
-declare void @llvm.trap() nounwind
-declare i32 @llvm.ctlz.i32(i32)
-
-define i32 @foo(i32 %a, i32 %b) {
-; CHECK: foo
-; CHECK: trap @ encoding: [0xfe,0xde,0xff,0xe7]
-; CHECK: bx lr @ encoding: [0x1e,0xff,0x2f,0xe1]
-
- tail call void @llvm.trap()
- ret i32 undef
-}
-
-define i32 @f2(i32 %a, i32 %b) {
-; CHECK: f2
-; CHECK: add r0, r1, r0 @ encoding: [0x00,0x00,0x81,0xe0]
-; CHECK: bx lr @ encoding: [0x1e,0xff,0x2f,0xe1]
- %add = add nsw i32 %b, %a
- ret i32 %add
-}
-
-
-define i32 @f3(i32 %a, i32 %b) {
-; CHECK: f3
-; CHECK: add r0, r0, r1, lsl #3 @ encoding: [0x81,0x01,0x80,0xe0]
-; CHECK: bx lr @ encoding: [0x1e,0xff,0x2f,0xe1]
- %mul = shl i32 %b, 3
- %add = add nsw i32 %mul, %a
- ret i32 %add
-}
-
-define i32 @f4(i32 %a, i32 %b) {
-; CHECK: f4
-; CHECK: add r0, r0, #4064 @ encoding: [0xfe,0x0e,0x80,0xe2]
-; CHECK: bx lr @ encoding: [0x1e,0xff,0x2f,0xe1]
- %add = add nsw i32 %a, 4064
- ret i32 %add
-}
-
-define i32 @f5(i32 %a, i32 %b, i32 %c) {
-; CHECK: f5
-; CHECK: cmp r0, r1 @ encoding: [0x01,0x00,0x50,0xe1]
-; CHECK: mov r0, r2 @ encoding: [0x02,0x00,0xa0,0xe1]
-; CHECK: movgt r0, r1 @ encoding: [0x01,0x00,0xa0,0xc1]
- %cmp = icmp sgt i32 %a, %b
- %retval.0 = select i1 %cmp, i32 %b, i32 %c
- ret i32 %retval.0
-}
-
-define i64 @f6(i64 %a, i64 %b, i64 %c) {
-; CHECK: f6
-; CHECK: adds r0, r2, r0 @ encoding: [0x00,0x00,0x92,0xe0]
-; CHECK: adc r1, r3, r1 @ encoding: [0x01,0x10,0xa3,0xe0]
- %add = add nsw i64 %b, %a
- ret i64 %add
-}
-
-define i32 @f7(i32 %a, i32 %b) {
-; CHECK: f7
-; CHECK: uxtab r0, r0, r1 @ encoding: [0x71,0x00,0xe0,0xe6]
- %and = and i32 %b, 255
- %add = add i32 %and, %a
- ret i32 %add
-}
-
-define i32 @f8(i32 %a) {
-; CHECK: f8
-; CHECK: movt r0, #42405 @ encoding: [0xa5,0x05,0x4a,0xe3]
- %and = and i32 %a, 65535
- %or = or i32 %and, -1515913216
- ret i32 %or
-}
-
-define i32 @f9() {
-; CHECK: f9
-; CHECK: movw r0, #42405 @ encoding: [0xa5,0x05,0x0a,0xe3]
- ret i32 42405
-}
-
-define i64 @f10(i64 %a) {
-; CHECK: f10
-; CHECK: asrs r1, r1, #1 @ encoding: [0xc1,0x10,0xb0,0xe1]
-; CHECK: rrx r0, r0 @ encoding: [0x60,0x00,0xa0,0xe1]
- %shr = ashr i64 %a, 1
- ret i64 %shr
-}
-
-define i32 @f11([1 x i32] %A.coerce0, [1 x i32] %B.coerce0) {
-; CHECK: f11
-; CHECK: ubfx r1, r1, #8, #5 @ encoding: [0x51,0x14,0xe4,0xe7]
-; CHECK: sbfx r0, r0, #13, #7 @ encoding: [0xd0,0x06,0xa6,0xe7]
- %tmp1 = extractvalue [1 x i32] %A.coerce0, 0
- %tmp2 = extractvalue [1 x i32] %B.coerce0, 0
- %tmp3 = shl i32 %tmp1, 12
- %bf.val.sext = ashr i32 %tmp3, 25
- %tmp4 = lshr i32 %tmp2, 8
- %bf.clear2 = and i32 %tmp4, 31
- %mul = mul nsw i32 %bf.val.sext, %bf.clear2
- ret i32 %mul
-}
-
-define i32 @f12(i32 %a) {
-; CHECK: f12:
-; CHECK: bfc r0, #4, #20 @ encoding: [0x1f,0x02,0xd7,0xe7]
- %tmp = and i32 %a, 4278190095
- ret i32 %tmp
-}
-
-define i64 @f13() {
-; CHECK: f13:
-; CHECK: mvn r0, #0 @ encoding: [0x00,0x00,0xe0,0xe3]
-; CHECK: mvn r1, #-2147483648 @ encoding: [0x02,0x11,0xe0,0xe3]
- ret i64 9223372036854775807
-}
-
-define i32 @f14(i32 %x, i32 %y) {
-; CHECK: f14:
-; CHECK: smmul r0, r1, r0 @ encoding: [0x11,0xf0,0x50,0xe7]
- %tmp = sext i32 %x to i64
- %tmp1 = sext i32 %y to i64
- %tmp2 = mul i64 %tmp1, %tmp
- %tmp3 = lshr i64 %tmp2, 32
- %tmp3.upgrd.1 = trunc i64 %tmp3 to i32
- ret i32 %tmp3.upgrd.1
-}
-
-define i32 @f15(i32 %x, i32 %y) {
-; CHECK: f15:
-; CHECK: umull r1, r0, r1, r0 @ encoding: [0x91,0x10,0x80,0xe0]
- %tmp = zext i32 %x to i64
- %tmp1 = zext i32 %y to i64
- %tmp2 = mul i64 %tmp1, %tmp
- %tmp3 = lshr i64 %tmp2, 32
- %tmp3.upgrd.2 = trunc i64 %tmp3 to i32
- ret i32 %tmp3.upgrd.2
-}
-
-define i32 @f16(i16 %x, i32 %y) {
-; CHECK: f16:
-; CHECK: smulbt r0, r0, r1 @ encoding: [0xc0,0x01,0x60,0xe1]
- %tmp1 = add i16 %x, 2
- %tmp2 = sext i16 %tmp1 to i32
- %tmp3 = ashr i32 %y, 16
- %tmp4 = mul i32 %tmp2, %tmp3
- ret i32 %tmp4
-}
-
-define i32 @f17(i32 %x, i32 %y) {
-; CHECK: f17:
-; CHECK: smultt r0, r1, r0 @ encoding: [0xe1,0x00,0x60,0xe1]
- %tmp1 = ashr i32 %x, 16
- %tmp3 = ashr i32 %y, 16
- %tmp4 = mul i32 %tmp3, %tmp1
- ret i32 %tmp4
-}
-
-define i32 @f18(i32 %a, i16 %x, i32 %y) {
-; CHECK: f18:
-; CHECK: smlabt r0, r1, r2, r0 @ encoding: [0xc1,0x02,0x00,0xe1]
- %tmp = sext i16 %x to i32
- %tmp2 = ashr i32 %y, 16
- %tmp3 = mul i32 %tmp2, %tmp
- %tmp5 = add i32 %tmp3, %a
- ret i32 %tmp5
-}
-
-define i32 @f19(i32 %x) {
-; CHECK: f19
-; CHECK: clz r0, r0 @ encoding: [0x10,0x0f,0x6f,0xe1]
- %tmp.1 = call i32 @llvm.ctlz.i32( i32 %x )
- ret i32 %tmp.1
-}
-
-define i32 @f20(i32 %X) {
-; CHECK: f20
-; CHECK: rev16 r0, r0 @ encoding: [0xb0,0x0f,0xbf,0xe6]
- %tmp1 = lshr i32 %X, 8
- %X15 = bitcast i32 %X to i32
- %tmp4 = shl i32 %X15, 8
- %tmp2 = and i32 %tmp1, 16711680
- %tmp5 = and i32 %tmp4, -16777216
- %tmp9 = and i32 %tmp1, 255
- %tmp13 = and i32 %tmp4, 65280
- %tmp6 = or i32 %tmp5, %tmp2
- %tmp10 = or i32 %tmp6, %tmp13
- %tmp14 = or i32 %tmp10, %tmp9
- ret i32 %tmp14
-}
-
-define i32 @f21(i32 %X) {
-; CHECK: f21
-; CHECK: revsh r0, r0 @ encoding: [0xb0,0x0f,0xff,0xe6]
- %tmp1 = lshr i32 %X, 8
- %tmp1.upgrd.1 = trunc i32 %tmp1 to i16
- %tmp3 = trunc i32 %X to i16
- %tmp2 = and i16 %tmp1.upgrd.1, 255
- %tmp4 = shl i16 %tmp3, 8
- %tmp5 = or i16 %tmp2, %tmp4
- %tmp5.upgrd.2 = sext i16 %tmp5 to i32
- ret i32 %tmp5.upgrd.2
-}
-
-define i32 @f22(i32 %X, i32 %Y) {
-; CHECK: f22
-; CHECK: pkhtb r0, r0, r1, asr #22 @ encoding: [0x51,0x0b,0x80,0xe6]
- %tmp1 = and i32 %X, -65536
- %tmp2 = lshr i32 %Y, 22
- %tmp3 = or i32 %tmp2, %tmp1
- ret i32 %tmp3
-}
-
-define i32 @f23(i32 %X, i32 %Y) {
-; CHECK: f23
-; CHECK: pkhbt r0, r0, r1, lsl #18 @ encoding: [0x11,0x09,0x80,0xe6]
- %tmp1 = and i32 %X, 65535
- %tmp2 = shl i32 %Y, 18
- %tmp3 = or i32 %tmp1, %tmp2
- ret i32 %tmp3
-}
-
-define void @f24(i32 %a) {
-; CHECK: f24
-; CHECK: cmp r0, #65536 @ encoding: [0x01,0x08,0x50,0xe3]
- %b = icmp ugt i32 %a, 65536
- br i1 %b, label %r, label %r
-r:
- ret void
-}
diff --git a/test/MC/ARM/simple-fp-encoding.s b/test/MC/ARM/simple-fp-encoding.s
index 8917380..e7d452a 100644
--- a/test/MC/ARM/simple-fp-encoding.s
+++ b/test/MC/ARM/simple-fp-encoding.s
@@ -2,7 +2,7 @@
@ CHECK: vadd.f64 d16, d17, d16 @ encoding: [0xa0,0x0b,0x71,0xee]
vadd.f64 d16, d17, d16
-
+
@ CHECK: vadd.f32 s0, s1, s0 @ encoding: [0x80,0x0a,0x30,0xee]
vadd.f32 s0, s1, s0
@@ -36,18 +36,18 @@
@ CHECK: vcmpe.f32 s1, s0 @ encoding: [0xc0,0x0a,0xf4,0xee]
vcmpe.f32 s1, s0
-@ FIXME: vcmpe.f64 d16, #0 @ encoding: [0xc0,0x0b,0xf5,0xee]
-@ vcmpe.f64 d16, #0
+@ CHECK: vcmpe.f64 d16, #0 @ encoding: [0xc0,0x0b,0xf5,0xee]
+ vcmpe.f64 d16, #0
-@ FIXME: vcmpe.f32 s0, #0 @ encoding: [0xc0,0x0a,0xb5,0xee]
-@ vcmpe.f32 s0, #0
+@ CHECK: vcmpe.f32 s0, #0 @ encoding: [0xc0,0x0a,0xb5,0xee]
+ vcmpe.f32 s0, #0
@ CHECK: vabs.f64 d16, d16 @ encoding: [0xe0,0x0b,0xf0,0xee]
vabs.f64 d16, d16
@ CHECK: vabs.f32 s0, s0 @ encoding: [0xc0,0x0a,0xb0,0xee]
vabs.f32 s0, s0
-
+
@ CHECK: vcvt.f32.f64 s0, d16 @ encoding: [0xe0,0x0b,0xb7,0xee]
vcvt.f32.f64 s0, d16
@@ -114,9 +114,11 @@
@ CHECK: vnmls.f32 s1, s2, s0 @ encoding: [0x00,0x0a,0x51,0xee]
vnmls.f32 s1, s2, s0
-@ FIXME: vmrs apsr_nzcv, fpscr @ encoding: [0x10,0xfa,0xf1,0xee]
-@ vmrs apsr_nzcv, fpscr
-
+@ CHECK: vmrs apsr_nzcv, fpscr @ encoding: [0x10,0xfa,0xf1,0xee]
+@ CHECK: vmrs apsr_nzcv, fpscr @ encoding: [0x10,0xfa,0xf1,0xee]
+ vmrs apsr_nzcv, fpscr
+ fmstat
+
@ CHECK: vnegne.f64 d16, d16 @ encoding: [0x60,0x0b,0xf1,0x1e]
vnegne.f64 d16, d16
@@ -139,11 +141,15 @@
@ CHECK: vmsr fpsid, r0 @ encoding: [0x10,0x0a,0xe0,0xee]
vmsr fpsid, r0
-@ FIXME: vmov.f64 d16, #3.000000e+00 @ encoding: [0x08,0x0b,0xf0,0xee]
-@ vmov.f64 d16, #3.000000e+00
+ vmov.f64 d16, #3.000000e+00
+ vmov.f32 s0, #3.000000e+00
+ vmov.f64 d16, #-3.000000e+00
+ vmov.f32 s0, #-3.000000e+00
-@ FIXME: vmov.f32 s0, #3.000000e+00 @ encoding: [0x08,0x0a,0xb0,0xee]
-@ vmov.f32 s0, #3.000000e+00
+@ CHECK: vmov.f64 d16, #3.000000e+00 @ encoding: [0x08,0x0b,0xf0,0xee]
+@ CHECK: vmov.f32 s0, #3.000000e+00 @ encoding: [0x08,0x0a,0xb0,0xee]
+@ CHECK: vmov.f64 d16, #-3.000000e+00 @ encoding: [0x08,0x0b,0xf8,0xee]
+@ CHECK: vmov.f32 s0, #-3.000000e+00 @ encoding: [0x08,0x0a,0xb8,0xee]
@ CHECK: vmov s0, r0 @ encoding: [0x10,0x0a,0x00,0xee]
@ CHECK: vmov s1, r1 @ encoding: [0x90,0x1a,0x00,0xee]
@@ -173,13 +179,13 @@
@ CHECK: vldr.64 d1, [r2, #-32] @ encoding: [0x08,0x1b,0x12,0xed]
vldr.64 d1, [r2, #32]
vldr.64 d1, [r2, #-32]
-
+
@ CHECK: vldr.64 d2, [r3] @ encoding: [0x00,0x2b,0x93,0xed]
vldr.64 d2, [r3]
@ CHECK: vldr.64 d3, [pc] @ encoding: [0x00,0x3b,0x9f,0xed]
@ CHECK: vldr.64 d3, [pc] @ encoding: [0x00,0x3b,0x9f,0xed]
-@ CHECK: vldr.64 d3, [pc] @ encoding: [0x00,0x3b,0x9f,0xed]
+@ CHECK: vldr.64 d3, [pc, #-0] @ encoding: [0x00,0x3b,0x1f,0xed]
vldr.64 d3, [pc]
vldr.64 d3, [pc,#0]
vldr.64 d3, [pc,#-0]
@@ -191,13 +197,13 @@
@ CHECK: vldr.32 s1, [r2, #-32] @ encoding: [0x08,0x0a,0x52,0xed]
vldr.32 s1, [r2, #32]
vldr.32 s1, [r2, #-32]
-
+
@ CHECK: vldr.32 s2, [r3] @ encoding: [0x00,0x1a,0x93,0xed]
vldr.32 s2, [r3]
@ CHECK: vldr.32 s5, [pc] @ encoding: [0x00,0x2a,0xdf,0xed]
@ CHECK: vldr.32 s5, [pc] @ encoding: [0x00,0x2a,0xdf,0xed]
-@ CHECK: vldr.32 s5, [pc] @ encoding: [0x00,0x2a,0xdf,0xed]
+@ CHECK: vldr.32 s5, [pc, #-0] @ encoding: [0x00,0x2a,0x5f,0xed]
vldr.32 s5, [pc]
vldr.32 s5, [pc,#0]
vldr.32 s5, [pc,#-0]
@@ -234,3 +240,6 @@
vcvtr.s32.f32 s0, s1
vcvtr.u32.f64 s0, d0
vcvtr.u32.f32 s0, s1
+
+@ CHECK: vmovne s25, s26, r2, r5
+ vmovne s25, s26, r2, r5 @ encoding: [0x39,0x2a,0x45,0x1c]
diff --git a/test/MC/ARM/thumb-diagnostics.s b/test/MC/ARM/thumb-diagnostics.s
new file mode 100644
index 0000000..d02c27e
--- /dev/null
+++ b/test/MC/ARM/thumb-diagnostics.s
@@ -0,0 +1,139 @@
+@ RUN: not llvm-mc -triple=thumbv6-apple-darwin < %s 2> %t
+@ RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s
+@ RUN: not llvm-mc -triple=thumbv5-apple-darwin < %s 2> %t
+@ RUN: FileCheck --check-prefix=CHECK-ERRORS-V5 < %t %s
+
+@ Check for various assembly diagnostic messages on invalid input.
+
+@ ADD instruction w/o 'S' suffix.
+ add r1, r2, r3
+@ CHECK-ERRORS: error: invalid instruction
+@ CHECK-ERRORS: add r1, r2, r3
+@ CHECK-ERRORS: ^
+
+@ Instructions which require v6+ for both registers to be low regs.
+ add r2, r3
+ mov r2, r3
+@ CHECK-ERRORS: error: instruction variant requires Thumb2
+@ CHECK-ERRORS: add r2, r3
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS-V5: error: instruction variant requires ARMv6 or later
+@ CHECK-ERRORS-V5: mov r2, r3
+@ CHECK-ERRORS-V5: ^
+
+
+@ Out of range immediates for ASR instruction.
+ asrs r2, r3, #33
+ asrs r2, r3, #0
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: asrs r2, r3, #33
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: asrs r2, r3, #0
+@ CHECK-ERRORS: ^
+
+@ Out of range immediates for BKPT instruction.
+ bkpt #256
+ bkpt #-1
+error: invalid operand for instruction
+ bkpt #256
+ ^
+error: invalid operand for instruction
+ bkpt #-1
+ ^
+
+@ Invalid writeback and register lists for LDM
+ ldm r2!, {r5, r8}
+ ldm r2, {r5, r7}
+ ldm r2!, {r2, r3, r4}
+@ CHECK-ERRORS: error: registers must be in range r0-r7
+@ CHECK-ERRORS: ldm r2!, {r5, r8}
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: writeback operator '!' expected
+@ CHECK-ERRORS: ldm r2, {r5, r7}
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: writeback operator '!' not allowed when base register in register list
+@ CHECK-ERRORS: ldm r2!, {r2, r3, r4}
+@ CHECK-ERRORS: ^
+
+
+@ Invalid writeback and register lists for PUSH/POP
+ pop {r1, r2, r10}
+ push {r8, r9}
+@ CHECK-ERRORS: error: registers must be in range r0-r7 or pc
+@ CHECK-ERRORS: pop {r1, r2, r10}
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: registers must be in range r0-r7 or lr
+@ CHECK-ERRORS: push {r8, r9}
+@ CHECK-ERRORS: ^
+
+
+@ Invalid writeback and register lists for STM
+ stm r1, {r2, r6}
+ stm r1!, {r2, r9}
+@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
+@ CHECK-ERRORS: stm r1, {r2, r6}
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: registers must be in range r0-r7
+@ CHECK-ERRORS: stm r1!, {r2, r9}
+@ CHECK-ERRORS: ^
+
+@ Out of range immediates for LSL instruction.
+ lsls r4, r5, #-1
+ lsls r4, r5, #32
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: lsls r4, r5, #-1
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: lsls r4, r5, #32
+@ CHECK-ERRORS: ^
+
+@ Mismatched source/destination operands for MUL instruction.
+ muls r1, r2, r3
+@ CHECK-ERRORS: error: destination register must match source register
+@ CHECK-ERRORS: muls r1, r2, r3
+@ CHECK-ERRORS: ^
+
+
+@ Out of range immediates for STR instruction.
+ str r2, [r7, #-1]
+ str r5, [r1, #3]
+ str r3, [r7, #128]
+@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
+@ CHECK-ERRORS: str r2, [r7, #-1]
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
+@ CHECK-ERRORS: str r5, [r1, #3]
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
+@ CHECK-ERRORS: str r3, [r7, #128]
+@ CHECK-ERRORS: ^
+
+@ Out of range immediate for SVC instruction.
+ svc #-1
+ svc #256
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: svc #-1
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
+@ CHECK-ERRORS: svc #256
+@ CHECK-ERRORS: ^
+
+
+@ Out of range immediate for ADD SP instructions
+ add sp, #-1
+ add sp, #3
+ add sp, sp, #512
+ add r2, sp, #1024
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: add sp, #-1
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: add sp, #3
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
+@ CHECK-ERRORS: add sp, sp, #512
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: instruction requires a CPU feature not currently enabled
+@ CHECK-ERRORS: add r2, sp, #1024
+@ CHECK-ERRORS: ^
diff --git a/test/MC/ARM/thumb-nop.s b/test/MC/ARM/thumb-nop.s
new file mode 100644
index 0000000..0b580ea
--- /dev/null
+++ b/test/MC/ARM/thumb-nop.s
@@ -0,0 +1,9 @@
+@ RUN: llvm-mc -triple=thumbv6-apple-darwin -show-encoding < %s | FileCheck %s -check-prefix=CHECK-V6
+@ RUN: llvm-mc -triple=thumbv7-apple-darwin -show-encoding < %s | FileCheck %s -check-prefix=CHECK-V7
+
+ .syntax unified
+
+ nop
+
+@ CHECK-V6: nop @ encoding: [0xc0,0x46]
+@ CHECK-V7: nop @ encoding: [0x00,0xbf]
diff --git a/test/MC/ARM/thumb.s b/test/MC/ARM/thumb.s
index 79ea2e4..625882c 100644
--- a/test/MC/ARM/thumb.s
+++ b/test/MC/ARM/thumb.s
@@ -1,60 +1,58 @@
@ RUN: llvm-mc -triple thumbv6-apple-darwin -show-encoding < %s | FileCheck %s
.code 16
-@ CHECK: cmp r1, r2 @ encoding: [0x91,0x42]
cmp r1, r2
+@ CHECK: cmp r1, r2 @ encoding: [0x91,0x42]
-@ CHECK: pop {r1, r2, r4} @ encoding: [0x16,0xbc]
pop {r1, r2, r4}
+@ CHECK: pop {r1, r2, r4} @ encoding: [0x16,0xbc]
-@ CHECK: trap @ encoding: [0xfe,0xde]
trap
+@ CHECK: trap @ encoding: [0xfe,0xde]
-@ CHECK: blx r9 @ encoding: [0xc8,0x47]
blx r9
+ blx r10
+@ CHECK: blx r9 @ encoding: [0xc8,0x47]
@ CHECK: blx r10 @ encoding: [0xd0,0x47]
- blx r10
-@ CHECK: rev r2, r3 @ encoding: [0x1a,0xba]
-@ CHECK: rev16 r3, r4 @ encoding: [0x63,0xba]
-@ CHECK: revsh r5, r6 @ encoding: [0xf5,0xba]
rev r2, r3
rev16 r3, r4
revsh r5, r6
+@ CHECK: rev r2, r3 @ encoding: [0x1a,0xba]
+@ CHECK: rev16 r3, r4 @ encoding: [0x63,0xba]
+@ CHECK: revsh r5, r6 @ encoding: [0xf5,0xba]
-@ CHECK: sxtb r2, r3 @ encoding: [0x5a,0xb2]
-@ CHECK: sxth r2, r3 @ encoding: [0x1a,0xb2]
sxtb r2, r3
sxth r2, r3
+@ CHECK: sxtb r2, r3 @ encoding: [0x5a,0xb2]
+@ CHECK: sxth r2, r3 @ encoding: [0x1a,0xb2]
-@ CHECK: tst r4, r5 @ encoding: [0x2c,0x42]
tst r4, r5
+@ CHECK: tst r4, r5 @ encoding: [0x2c,0x42]
-@ CHECK: uxtb r3, r6 @ encoding: [0xf3,0xb2]
-@ CHECK: uxth r3, r6 @ encoding: [0xb3,0xb2]
uxtb r3, r6
uxth r3, r6
+@ CHECK: uxtb r3, r6 @ encoding: [0xf3,0xb2]
+@ CHECK: uxth r3, r6 @ encoding: [0xb3,0xb2]
-@ CHECK: ldr r3, [r1, r2] @ encoding: [0x8b,0x58]
ldr r3, [r1, r2]
+@ CHECK: ldr r3, [r1, r2] @ encoding: [0x8b,0x58]
-@ CHECK: bkpt #2 @ encoding: [0x02,0xbe]
- bkpt #2
+ bkpt #2
+@ CHECK: bkpt #2 @ encoding: [0x02,0xbe]
-@ CHECK: nop @ encoding: [0x00,0xbf]
nop
+@ CHECK: nop @ encoding: [0xc0,0x46]
-@ CHECK: yield @ encoding: [0x10,0xbf]
- yield
-
-@ CHECK: wfe @ encoding: [0x20,0xbf]
wfe
-
-@ CHECK: wfi @ encoding: [0x30,0xbf]
wfi
+ yield
+@ CHECK: wfe @ encoding: [0x20,0xbf]
+@ CHECK: wfi @ encoding: [0x30,0xbf]
+@ CHECK: yield @ encoding: [0x10,0xbf]
-@ CHECK: cpsie aif @ encoding: [0x67,0xb6]
cpsie aif
+@ CHECK: cpsie aif @ encoding: [0x67,0xb6]
-@ CHECK: mov r0, pc @ encoding: [0x78,0x46]
mov r0, pc
+@ CHECK: mov r0, pc @ encoding: [0x78,0x46]
diff --git a/test/MC/ARM/thumb2-diagnostics.s b/test/MC/ARM/thumb2-diagnostics.s
new file mode 100644
index 0000000..e38f53c
--- /dev/null
+++ b/test/MC/ARM/thumb2-diagnostics.s
@@ -0,0 +1,44 @@
+@ RUN: not llvm-mc -triple=thumbv7-apple-darwin < %s 2> %t
+@ RUN: FileCheck --check-prefix=CHECK-ERRORS < %t %s
+
+@ Ill-formed IT block instructions.
+ itet eq
+ addle r0, r1, r2
+ nop
+ it le
+ iteeee gt
+ ittfe le
+ nopeq
+
+@ CHECK-ERRORS: error: incorrect condition in IT block; got 'le', but expected 'eq'
+@ CHECK-ERRORS: addle r0, r1, r2
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: incorrect condition in IT block; got 'al', but expected 'ne'
+@ CHECK-ERRORS: nop
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: instructions in IT block must be predicable
+@ CHECK-ERRORS: it le
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: too many conditions on IT instruction
+@ CHECK-ERRORS: iteeee gt
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: illegal IT block condition mask 'tfe'
+@ CHECK-ERRORS: ittfe le
+@ CHECK-ERRORS: ^
+@ CHECK-ERRORS: error: predicated instructions must be in IT block
+@ CHECK-ERRORS: nopeq
+@ CHECK-ERRORS: ^
+
+ @ Out of range immediates for MRC/MRC2/MRRC/MRRC2
+ mrc p14, #8, r1, c1, c2, #4
+ mrc p14, #1, r1, c1, c2, #8
+ mrc2 p14, #8, r1, c1, c2, #4
+ mrc2 p14, #0, r1, c1, c2, #9
+ mrrc p7, #16, r5, r4, c1
+ mrrc2 p7, #17, r5, r4, c1
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: error: invalid operand for instruction
+@ CHECK-ERRORS: error: invalid operand for instruction
diff --git a/test/MC/ARM/thumb2-mclass.s b/test/MC/ARM/thumb2-mclass.s
new file mode 100644
index 0000000..10460f9
--- /dev/null
+++ b/test/MC/ARM/thumb2-mclass.s
@@ -0,0 +1,74 @@
+@ RUN: llvm-mc -triple=thumbv7m-apple-darwin -show-encoding < %s | FileCheck %s
+ .syntax unified
+ .globl _func
+
+@ Check that the assembler can handle the documented syntax from the ARM ARM.
+@ These tests test instruction encodings specific to v7m & v7m (FeatureMClass).
+
+@------------------------------------------------------------------------------
+@ MRS
+@------------------------------------------------------------------------------
+
+ mrs r0, apsr
+ mrs r0, iapsr
+ mrs r0, eapsr
+ mrs r0, xpsr
+ mrs r0, ipsr
+ mrs r0, epsr
+ mrs r0, iepsr
+ mrs r0, msp
+ mrs r0, psp
+ mrs r0, primask
+ mrs r0, basepri
+ mrs r0, basepri_max
+ mrs r0, faultmask
+ mrs r0, control
+
+@ CHECK: mrs r0, apsr @ encoding: [0xef,0xf3,0x00,0x80]
+@ CHECK: mrs r0, iapsr @ encoding: [0xef,0xf3,0x01,0x80]
+@ CHECK: mrs r0, eapsr @ encoding: [0xef,0xf3,0x02,0x80]
+@ CHECK: mrs r0, xpsr @ encoding: [0xef,0xf3,0x03,0x80]
+@ CHECK: mrs r0, ipsr @ encoding: [0xef,0xf3,0x05,0x80]
+@ CHECK: mrs r0, epsr @ encoding: [0xef,0xf3,0x06,0x80]
+@ CHECK: mrs r0, iepsr @ encoding: [0xef,0xf3,0x07,0x80]
+@ CHECK: mrs r0, msp @ encoding: [0xef,0xf3,0x08,0x80]
+@ CHECK: mrs r0, psp @ encoding: [0xef,0xf3,0x09,0x80]
+@ CHECK: mrs r0, primask @ encoding: [0xef,0xf3,0x10,0x80]
+@ CHECK: mrs r0, basepri @ encoding: [0xef,0xf3,0x11,0x80]
+@ CHECK: mrs r0, basepri_max @ encoding: [0xef,0xf3,0x12,0x80]
+@ CHECK: mrs r0, faultmask @ encoding: [0xef,0xf3,0x13,0x80]
+@ CHECK: mrs r0, control @ encoding: [0xef,0xf3,0x14,0x80]
+
+@------------------------------------------------------------------------------
+@ MSR
+@------------------------------------------------------------------------------
+
+ msr apsr, r0
+ msr iapsr, r0
+ msr eapsr, r0
+ msr xpsr, r0
+ msr ipsr, r0
+ msr epsr, r0
+ msr iepsr, r0
+ msr msp, r0
+ msr psp, r0
+ msr primask, r0
+ msr basepri, r0
+ msr basepri_max, r0
+ msr faultmask, r0
+ msr control, r0
+
+@ CHECK: msr apsr, r0 @ encoding: [0x80,0xf3,0x00,0x80]
+@ CHECK: msr iapsr, r0 @ encoding: [0x80,0xf3,0x01,0x80]
+@ CHECK: msr eapsr, r0 @ encoding: [0x80,0xf3,0x02,0x80]
+@ CHECK: msr xpsr, r0 @ encoding: [0x80,0xf3,0x03,0x80]
+@ CHECK: msr ipsr, r0 @ encoding: [0x80,0xf3,0x05,0x80]
+@ CHECK: msr epsr, r0 @ encoding: [0x80,0xf3,0x06,0x80]
+@ CHECK: msr iepsr, r0 @ encoding: [0x80,0xf3,0x07,0x80]
+@ CHECK: msr msp, r0 @ encoding: [0x80,0xf3,0x08,0x80]
+@ CHECK: msr psp, r0 @ encoding: [0x80,0xf3,0x09,0x80]
+@ CHECK: msr primask, r0 @ encoding: [0x80,0xf3,0x10,0x80]
+@ CHECK: msr basepri, r0 @ encoding: [0x80,0xf3,0x11,0x80]
+@ CHECK: msr basepri_max, r0 @ encoding: [0x80,0xf3,0x12,0x80]
+@ CHECK: msr faultmask, r0 @ encoding: [0x80,0xf3,0x13,0x80]
+@ CHECK: msr control, r0 @ encoding: [0x80,0xf3,0x14,0x80]
diff --git a/test/MC/ARM/thumb2.s b/test/MC/ARM/thumb2.s
deleted file mode 100644
index 7d632db..0000000
--- a/test/MC/ARM/thumb2.s
+++ /dev/null
@@ -1,355 +0,0 @@
-@ RUN: llvm-mc -mcpu=cortex-a8 -triple thumb-unknown-unknown -show-encoding < %s | FileCheck %s
-@ XFAIL: *
-.code 16
-
-@ CHECK: adc r1, r1, #171 @ encoding: [0xab,0x01,0x41,0xf1]
- adc r1, r1, #171
-@ CHECK: adc r1, r1, #1179666 @ encoding: [0x12,0x11,0x41,0xf1]
- adc r1, r1, #1179666
-@ CHECK: adc r1, r1, #872428544 @ encoding: [0x34,0x21,0x41,0xf1]
- adc r1, r1, #872428544
-@ CHECK: adc r1, r1, #1448498774 @ encoding: [0x56,0x31,0x41,0xf1]
- adc r1, r1, #1448498774
-@ CHECK: adc r1, r1, #66846720 @ encoding: [0x7f,0x71,0x41,0xf1]
- adc r1, r1, #66846720
-
-@ CHECK: mvn r0, #187 @ encoding: [0xbb,0x00,0x6f,0xf0]
- mvn r0, #187
-@ CHECK: mvn r0, #11141290 @ encoding: [0xaa,0x10,0x6f,0xf0]
- mvn r0, #11141290
-@ CHECK: mvn r0, #-872363008 @ encoding: [0xcc,0x20,0x6f,0xf0]
- mvn r0, #-872363008
-@ CHECK: mvn r0, #1114112 @ encoding: [0x88,0x10,0x6f,0xf4]
- mvn r0, #1114112
-
-@ CHECK: cmp.w r0, #11141290 @ encoding: [0xaa,0x1f,0xb0,0xf1]
- cmp.w r0, #11141290
-@ CHECK: cmp.w r0, #-872363008 @ encoding: [0xcc,0x2f,0xb0,0xf1]
- cmp.w r0, #-872363008
-@ CHECK: cmp.w r0, #-572662307 @ encoding: [0xdd,0x3f,0xb0,0xf1]
- cmp.w r0, #-572662307
-@ CHECK: cmp.w r0, #1114112 @ encoding: [0x88,0x1f,0xb0,0xf5]
- cmp.w r0, #1114112
-@ CHECK: cmp.w r0, r1, lsl #5 @ encoding: [0x41,0x1f,0xb0,0xeb]
- cmp.w r0, r1, lsl #5
-
-@ CHECK: sxtab r0, r1, r0 @ encoding: [0x80,0xf0,0x41,0xfa]
- sxtab r0, r1, r0 @ encoding: [0x80,0xf0,0x41,0xfa]
-
-@ CHECK: movw r0, #65535 @ encoding: [0xff,0x70,0x4f,0xf6]
- movw r0, #65535
-@ CHECK: movw r1, #43777 @ encoding: [0x01,0x31,0x4a,0xf6]
- movw r1, #43777
-@ CHECK: movt r1, #427 @ encoding: [0xab,0x11,0xc0,0xf2]
- movt r1, #427
-@ CHECK: movw r1, #43792 @ encoding: [0x10,0x31,0x4a,0xf6]
- movw r1, #43792
-@ CHECK: movt r1, #4267 @ encoding: [0xab,0x01,0xc0,0xf2]
- movt r1, #4267
-@ CHECK: mov.w r0, #66846720 @ encoding: [0x7f,0x70,0x4f,0xf0]
- mov.w r0, #66846720
-
-@ Aliases w/ the vanilla 'mov' mnemonic, and explicit alternative selection.
- mov r2, #0xbf000000
- mov r1, #0x100
- mov r3, #32
- mov.w r3, #32
- movw r3, #32
-
-@ CHECK: mov.w r2, #3204448256 @ encoding: [0x4f,0xf0,0x3f,0x42]
-@ CHECK: mov.w r1, #256 @ encoding: [0x4f,0xf4,0x80,0x71]
-@ CHECK: mov r3, #32 @ encoding: [0x20,0x23]
-@ CHECK: mov.w r3, #32 @ encoding: [0x4f,0xf0,0x20,0x03]
-@ CHECK: movw r3, #32 @ encoding: [0x40,0xf2,0x20,0x03]
-
-
-
-
-@ CHECK: rrx r0, r0 @ encoding: [0x30,0x00,0x4f,0xea]
- rrx r0, r0
-
-@ CHECK: bfc r0, #4, #20 @ encoding: [0x17,0x10,0x6f,0xf3]
- bfc r0, #4, #20
-@ CHECK: bfc r0, #0, #23 @ encoding: [0x16,0x00,0x6f,0xf3]
- bfc r0, #0, #23
-@ CHECK: bfc r0, #12, #20 @ encoding: [0x1f,0x30,0x6f,0xf3]
- bfc r0, #12, #20
-
-@ CHECK: sbfx r0, r0, #7, #11 @ encoding: [0xca,0x10,0x40,0xf3]
- sbfx r0, r0, #7, #11
-@ CHECK: ubfx r0, r0, #7, #11 @ encoding: [0xca,0x10,0xc0,0xf3]
- ubfx r0, r0, #7, #11
-
-@ CHECK: mla r0, r0, r1, r2 @ encoding: [0x01,0x20,0x00,0xfb]
- mla r0, r0, r1, r2
-@ CHECK: mls r0, r0, r1, r2 @ encoding: [0x11,0x20,0x00,0xfb]
- mls r0, r0, r1, r2
-
-@ CHECK: smlabt r0, r1, r2, r0 @ encoding: [0x12,0x00,0x11,0xfb]
- smlabt r0, r1, r2, r0
-
-@ CHECK: clz r0, r0 @ encoding: [0x80,0xf0,0xb0,0xfa]
- clz r0, r0
-
-@ CHECK: pkhbt r0, r0, r1, lsl #16 @ encoding: [0x01,0x40,0xc0,0xea]
- pkhbt r0, r0, r1, lsl #16
-@ CHECK: pkhbt r0, r0, r1, lsl #12 @ encoding: [0x01,0x30,0xc0,0xea]
- pkhbt r0, r0, r1, lsl #16
-@ CHECK: pkhbt r0, r0, r1, lsl #18 @ encoding: [0x81,0x40,0xc0,0xea]
- pkhbt r0, r0, r1, lsl #18
-@ CHECK: pkhbt r0, r0, r1 @ encoding: [0x01,0x00,0xc0,0xea]
- pkhbt r0, r0, r1
-@ CHECK: pkhtb r0, r0, r1, asr #16 @ encoding: [0x21,0x40,0xc0,0xea]
- pkhtb r0, r0, r1, asr #16
-@ CHECK: pkhtb r0, r0, r1, asr #12 @ encoding: [0x21,0x30,0xc0,0xea]
- pkhtb r0, r0, r1, asr #12
-@ CHECK: pkhtb r0, r0, r1, asr #18 @ encoding: [0xa1,0x40,0xc0,0xea]
- pkhtb r0, r0, r1, asr #18
-@ CHECK: pkhtb r0, r0, r1, asr #22 @ encoding: [0xa1,0x50,0xc0,0xea]
- pkhtb r0, r0, r1, asr #22
-
-@ CHECK: str.w r0, [r1, #4092] @ encoding: [0xfc,0x0f,0xc1,0xf8]
- str.w r0, [r1, #4092]
-@ CHECK: str r0, [r1, #-128] @ encoding: [0x80,0x0c,0x41,0xf8]
- str r0, [r1, #-128]
-@ CHECK: str.w r0, [r1, r2, lsl #2] @ encoding: [0x22,0x00,0x41,0xf8
- str.w r0, [r1, r2, lsl #2]
-
-@ CHECK: ldr.w r0, [r0, #4092] @ encoding: [0xfc,0x0f,0xd0,0xf8]
- ldr.w r0, [r0, #4092]
-@ CHECK: ldr r0, [r0, #-128] @ encoding: [0x80,0x0c,0x50,0xf8]
- ldr r0, [r0, #-128]
-@ CHECK: ldr.w r0, [r0, r1, lsl #2] @ encoding: [0x21,0x00,0x50,0xf8]
- ldr.w r0, [r0, r1, lsl #2]
-
-@ CHECK: str r1, [r0, #16]! @ encoding: [0x10,0x1f,0x40,0xf8]
- str r1, [r0, #16]!
-@ CHECK: strh r1, [r0, #8]! @ encoding: [0x08,0x1f,0x20,0xf8]
- strh r1, [r0, #8]!
-@ CHECK: strh r2, [r0], #-4 @ encoding: [0x04,0x29,0x20,0xf8]
- strh r2, [r0], #-4
-@ CHECK: str r2, [r0], #-4 @ encoding: [0x04,0x29,0x40,0xf8]
- str r2, [r0], #-4
-
-@ CHECK: ldr r2, [r0, #16]! @ encoding: [0x10,0x2f,0x50,0xf8]
- ldr r2, [r0, #16]!
-@ CHECK: ldr r2, [r0, #-64]! @ encoding: [0x40,0x2d,0x50,0xf8]
- ldr r2, [r0, #-64]!
-@ CHECK: ldrsb r2, [r0, #4]! @ encoding: [0x04,0x2f,0x10,0xf9]
- ldrsb r2, [r0, #4]!
-
-@ CHECK: strb.w r0, [r1, #4092] @ encoding: [0xfc,0x0f,0x81,0xf8]
- strb.w r0, [r1, #4092]
-@ CHECK: strb r0, [r1, #-128] @ encoding: [0x80,0x0c,0x01,0xf8]
- strb r0, [r1, #-128]
-@ CHECK: strb.w r0, [r1, r2, lsl #2] @ encoding: [0x22,0x00,0x01,0xf8]
- strb.w r0, [r1, r2, lsl #2]
-@ CHECK: strh.w r0, [r1, #4092] @ encoding: [0xfc,0x0f,0xa1,0xf8]
- strh.w r0, [r1, #4092]
-@ CHECK: strh r0, [r1, #-128] @ encoding: [0x80,0x0c,0x21,0xf8]
- strh r0, [r1, #-128]
-@ CHECK: strh r0, [r1, #-128] @ encoding: [0x80,0x0c,0x21,0xf8]
- strh r0, [r1, #-128]
-@ CHECK: strh.w r0, [r1, r2, lsl #2] @ encoding: [0x22,0x00,0x21,0xf8]
- strh.w r0, [r1, r2, lsl #2]
-
-@ CHECK: ldrb r0, [r0, #-1] @ encoding: [0x01,0x0c,0x10,0xf8]
- ldrb r0, [r0, #-1]
-@ CHECK: ldrb r0, [r0, #-128] @ encoding: [0x80,0x0c,0x10,0xf8]
- ldrb r0, [r0, #-128]
-@ CHECK: ldrb.w r0, [r0, r1, lsl #2] @ encoding: [0x21,0x00,0x10,0xf8]
- ldrb.w r0, [r0, r1, lsl #2]
-@ CHECK: ldrh.w r0, [r0, #2046] @ encoding: [0xfe,0x07,0xb0,0xf8]
- ldrh.w r0, [r0, #2046]
-@ CHECK: ldrh r0, [r0, #-128] @ encoding: [0x80,0x0c,0x30,0xf8]
- ldrh r0, [r0, #-128]
-@ CHECK: ldrh.w r0, [r0, r1, lsl #2] @ encoding: [0x21,0x00,0x30,0xf8]
- ldrh.w r0, [r0, r1, lsl #2]
-@ CHECK: ldrsb.w r0, [r0] @ encoding: [0x00,0x00,0x90,0xf9]
- ldrsb.w r0, [r0]
-@ CHECK: ldrsh.w r0, [r0] @ encoding: [0x00,0x00,0xb0,0xf9]
- ldrsh.w r0, [r0]
-@ CHECK: bfi r0, r0, #5, #7 @ encoding: [0x60,0xf3,0x4b,0x10]
- bfi r0, r0, #5, #7
-@ CHECK: isb @ encoding: [0xbf,0xf3,0x6f,0x8f]
- isb
-@ CHECK: mrs r0, cpsr @ encoding: [0xef,0xf3,0x00,0x80]
- mrs r0, cpsr
-@ CHECK: vmrs r0, fpscr @ encoding: [0xf1,0xee,0x10,0x0a]
- vmrs r0, fpscr
-@ CHECK: vmrs r0, fpexc @ encoding: [0xf8,0xee,0x10,0x0a]
- vmrs r0, fpexc
-@ CHECK: vmrs r0, fpsid @ encoding: [0xf0,0xee,0x10,0x0a]
- vmrs r0, fpsid
-
-@ CHECK: vmsr fpscr, r0 @ encoding: [0xe1,0xee,0x10,0x0a]
- vmsr fpscr, r0
-@ CHECK: vmsr fpexc, r0 @ encoding: [0xe8,0xee,0x10,0x0a]
- vmsr fpexc, r0
-@ CHECK: vmsr fpsid, r0 @ encoding: [0xe0,0xee,0x10,0x0a]
- vmsr fpsid, r0
-
-@ CHECK: mcr p7, #1, r5, c1, c1, #4 @ encoding: [0x21,0xee,0x91,0x57]
- mcr p7, #1, r5, c1, c1, #4
-
-@ CHECK: mrc p14, #0, r1, c1, c2, #4 @ encoding: [0x11,0xee,0x92,0x1e]
- mrc p14, #0, r1, c1, c2, #4
-
-@ CHECK: mcrr p7, #1, r5, r4, c1 @ encoding: [0x44,0xec,0x11,0x57]
- mcrr p7, #1, r5, r4, c1
-
-@ CHECK: mrrc p7, #1, r5, r4, c1 @ encoding: [0x54,0xec,0x11,0x57]
- mrrc p7, #1, r5, r4, c1
-
-@ CHECK: mcr2 p7, #1, r5, c1, c1, #4 @ encoding: [0x21,0xfe,0x91,0x57]
- mcr2 p7, #1, r5, c1, c1, #4
-
-@ CHECK: mrc2 p14, #0, r1, c1, c2, #4 @ encoding: [0x11,0xfe,0x92,0x1e]
- mrc2 p14, #0, r1, c1, c2, #4
-
-@ CHECK: mcrr2 p7, #1, r5, r4, c1 @ encoding: [0x44,0xfc,0x11,0x57]
- mcrr2 p7, #1, r5, r4, c1
-
-@ CHECK: mrrc2 p7, #1, r5, r4, c1 @ encoding: [0x54,0xfc,0x11,0x57]
- mrrc2 p7, #1, r5, r4, c1
-
-@ CHECK: cdp p7, #1, c1, c1, c1, #4 @ encoding: [0x11,0xee,0x81,0x17]
- cdp p7, #1, c1, c1, c1, #4
-
-@ CHECK: cdp2 p7, #1, c1, c1, c1, #4 @ encoding: [0x11,0xfe,0x81,0x17]
- cdp2 p7, #1, c1, c1, c1, #4
-
-@ CHECK: clrex @ encoding: [0xbf,0xf3,0x2f,0x8f]
- clrex
-
-@ CHECK: clz r9, r0 @ encoding: [0xb0,0xfa,0x80,0xf9]
- clz r9, r0
-
-@ CHECK: qadd r1, r2, r3 @ encoding: [0x83,0xfa,0x82,0xf1]
- qadd r1, r2, r3
-
-@ CHECK: qsub r1, r2, r3 @ encoding: [0x83,0xfa,0xa2,0xf1]
- qsub r1, r2, r3
-
-@ CHECK: qdadd r1, r2, r3 @ encoding: [0x83,0xfa,0x92,0xf1]
- qdadd r1, r2, r3
-
-@ CHECK: qdsub r1, r2, r3 @ encoding: [0x83,0xfa,0xb2,0xf1]
- qdsub r1, r2, r3
-
-@ CHECK: nop.w @ encoding: [0xaf,0xf3,0x00,0x80]
- nop.w
-
-@ CHECK: yield.w @ encoding: [0xaf,0xf3,0x01,0x80]
- yield.w
-
-@ CHECK: wfe.w @ encoding: [0xaf,0xf3,0x02,0x80]
- wfe.w
-
-@ CHECK: wfi.w @ encoding: [0xaf,0xf3,0x03,0x80]
- wfi.w
-
-@ CHECK: dmb sy @ encoding: [0xbf,0xf3,0x5f,0x8f]
- dmb sy
-@ CHECK: dmb st @ encoding: [0xbf,0xf3,0x5e,0x8f]
- dmb st
-@ CHECK: dmb ish @ encoding: [0xbf,0xf3,0x5b,0x8f]
- dmb ish
-@ CHECK: dmb ishst @ encoding: [0xbf,0xf3,0x5a,0x8f]
- dmb ishst
-@ CHECK: dmb nsh @ encoding: [0xbf,0xf3,0x57,0x8f]
- dmb nsh
-@ CHECK: dmb nshst @ encoding: [0xbf,0xf3,0x56,0x8f]
- dmb nshst
-@ CHECK: dmb osh @ encoding: [0xbf,0xf3,0x53,0x8f]
- dmb osh
-@ CHECK: dmb oshst @ encoding: [0xbf,0xf3,0x52,0x8f]
- dmb oshst
-
-@ CHECK: dsb sy @ encoding: [0xbf,0xf3,0x4f,0x8f]
- dsb sy
-@ CHECK: dsb st @ encoding: [0xbf,0xf3,0x4e,0x8f]
- dsb st
-@ CHECK: dsb ish @ encoding: [0xbf,0xf3,0x4b,0x8f]
- dsb ish
-@ CHECK: dsb ishst @ encoding: [0xbf,0xf3,0x4a,0x8f]
- dsb ishst
-@ CHECK: dsb nsh @ encoding: [0xbf,0xf3,0x47,0x8f]
- dsb nsh
-@ CHECK: dsb nshst @ encoding: [0xbf,0xf3,0x46,0x8f]
- dsb nshst
-@ CHECK: dsb osh @ encoding: [0xbf,0xf3,0x43,0x8f]
- dsb osh
-@ CHECK: dsb oshst @ encoding: [0xbf,0xf3,0x42,0x8f]
- dsb oshst
-
-@ CHECK: cpsie.w aif @ encoding: [0xaf,0xf3,0xe0,0x84]
- cpsie.w aif
-@ CHECK: cps #15 @ encoding: [0xaf,0xf3,0x0f,0x81]
- cps #15
-@ CHECK: cpsie.w if, #10 @ encoding: [0xaf,0xf3,0x6a,0x85]
- cpsie.w if, #10
-
-@ CHECK: msr cpsr_fc, r0 @ encoding: [0x80,0xf3,0x00,0x89]
- msr apsr, r0
-@ CHECK: msr cpsr_s, r0 @ encoding: [0x80,0xf3,0x00,0x84]
- msr apsr_g, r0
-@ CHECK: msr cpsr_f, r0 @ encoding: [0x80,0xf3,0x00,0x88]
- msr apsr_nzcvq, r0
-@ CHECK: msr cpsr_fs, r0 @ encoding: [0x80,0xf3,0x00,0x8c]
- msr apsr_nzcvqg, r0
-@ CHECK: msr cpsr_fc, r0 @ encoding: [0x80,0xf3,0x00,0x89]
- msr cpsr_fc, r0
-@ CHECK: msr cpsr_c, r0 @ encoding: [0x80,0xf3,0x00,0x81]
- msr cpsr_c, r0
-@ CHECK: msr cpsr_x, r0 @ encoding: [0x80,0xf3,0x00,0x82]
- msr cpsr_x, r0
-@ CHECK: msr cpsr_fc, r0 @ encoding: [0x80,0xf3,0x00,0x89]
- msr cpsr_fc, r0
-@ CHECK: msr cpsr_fsx, r0 @ encoding: [0x80,0xf3,0x00,0x8e]
- msr cpsr_fsx, r0
-@ CHECK: msr spsr_fc, r0 @ encoding: [0x90,0xf3,0x00,0x89]
- msr spsr_fc, r0
-@ CHECK: msr spsr_fsxc, r0 @ encoding: [0x90,0xf3,0x00,0x8f]
- msr spsr_fsxc, r0
-@ CHECK: msr cpsr_fsxc, r0 @ encoding: [0x80,0xf3,0x00,0x8f]
- msr cpsr_fsxc, r0
-
-@ CHECK: strexb r0, r1, [r2] @ encoding: [0xc2,0xe8,0x40,0x1f]
- strexb r0, r1, [r2]
-@ CHECK: strexh r0, r1, [r2] @ encoding: [0xc2,0xe8,0x50,0x1f]
- strexh r0, r1, [r2]
-@ CHECK: strex r0, r1, [r2] @ encoding: [0x42,0xe8,0x00,0x10]
- strex r0, r1, [r2]
-@ CHECK: strexd r0, r2, r3, [r1] @ encoding: [0xc1,0xe8,0x70,0x23]
- strexd r0, r2, r3, [r1]
-@ CHECK: ldrexb r0, [r0] @ encoding: [0xd0,0xe8,0x4f,0x0f]
- ldrexb r0, [r0]
-@ CHECK: ldrexh r0, [r0] @ encoding: [0xd0,0xe8,0x5f,0x0f]
- ldrexh r0, [r0]
-@ CHECK: ldrex r0, [r0] @ encoding: [0x50,0xe8,0x00,0x0f]
- ldrex r0, [r0]
-@ CHECK: ldrexd r0, r1, [r0] @ encoding: [0xd0,0xe8,0x7f,0x01]
- ldrexd r0, r1, [r0]
-@ CHECK: ssat16 r0, #7, r0 @ encoding: [0x20,0xf3,0x06,0x00]
- ssat16 r0, #7, r0
-
- and r1, #0xff
- and r1, r1, #0xff
- orr r1, 0x100
- orr r1, r1, 0x100
- eor r1, 0x100
- eor r1, r1, 0x100
- bic r1, 0x100
- bic r1, r1, 0x100
-
-@ CHECK: and r1, r1, #255 @ encoding: [0x01,0xf0,0xff,0x01]
-@ CHECK: and r1, r1, #255 @ encoding: [0x01,0xf0,0xff,0x01]
-@ CHECK: orr r1, r1, #256 @ encoding: [0x41,0xf4,0x80,0x71]
-@ CHECK: orr r1, r1, #256 @ encoding: [0x41,0xf4,0x80,0x71]
-@ CHECK: eor r1, r1, #256 @ encoding: [0x81,0xf4,0x80,0x71]
-@ CHECK: eor r1, r1, #256 @ encoding: [0x81,0xf4,0x80,0x71]
-@ CHECK: bic r1, r1, #256 @ encoding: [0x21,0xf4,0x80,0x71]
-@ CHECK: bic r1, r1, #256 @ encoding: [0x21,0xf4,0x80,0x71]
-
-
diff --git a/test/MC/ARM/thumb2_instructions.s b/test/MC/ARM/thumb2_instructions.s
deleted file mode 100644
index 71cd4ae..0000000
--- a/test/MC/ARM/thumb2_instructions.s
+++ /dev/null
@@ -1,12 +0,0 @@
-@ RUN: llvm-mc -triple thumbv7-unknown-unknown -show-encoding %s > %t
-@ RUN: FileCheck < %t %s
-
- .syntax unified
- .text
-
-@ FIXME: This is not the correct instruction representation, but at least we are
-@ parsing the ldr to something.
-@
-@ CHECK: ldr r0, [r7, #258]
- ldr r0, [r7, #-8]
-
diff --git a/test/MC/ARM/xscale-attributes.ll b/test/MC/ARM/xscale-attributes.ll
index e576278..3ccf02b 100644
--- a/test/MC/ARM/xscale-attributes.ll
+++ b/test/MC/ARM/xscale-attributes.ll
@@ -17,7 +17,7 @@ entry:
; ASM-NEXT: .eabi_attribute 8, 1
; ASM-NEXT: .eabi_attribute 9, 1
-; OBJ: Section 0x00000004
+; OBJ: Section 4
; OBJ-NEXT: 'sh_name', 0x0000000c
; OBJ-NEXT: 'sh_type', 0x70000003
; OBJ-NEXT: 'sh_flags', 0x00000000
OpenPOWER on IntegriCloud