aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Anderson <resistor@mac.com>2011-08-12 19:42:45 +0000
committerOwen Anderson <resistor@mac.com>2011-08-12 19:42:45 +0000
commita211c2c7e974908dcf18838f07d85cc65a7b5e0f (patch)
treeef2b41bf144c3d993913906acc9b33a6c411b18a
parent6368119c251a0862b48fbafcd4d00430a7f6ea02 (diff)
Port over the basic ARM encodings test file to a decoding test file. Greatly increases our test coverage of basic ARM-mode instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@137495 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--test/MC/Disassembler/ARM/basic-arm-instructions.txt2345
1 files changed, 2345 insertions, 0 deletions
diff --git a/test/MC/Disassembler/ARM/basic-arm-instructions.txt b/test/MC/Disassembler/ARM/basic-arm-instructions.txt
new file mode 100644
index 0000000000..f4143a1084
--- /dev/null
+++ b/test/MC/Disassembler/ARM/basic-arm-instructions.txt
@@ -0,0 +1,2345 @@
+# RUN: llvm-mc -triple=armv7-apple-darwin -disassemble < %s | FileCheck %s
+
+#------------------------------------------------------------------------------
+# ADC (immediate)
+#------------------------------------------------------------------------------
+# CHECK: adc r1, r2, #15
+# CHECK: adc r1, r2, #240
+# CHECK: adc r1, r2, #3840
+# CHECK: adc r1, r2, #61440
+# CHECK: adc r1, r2, #983040
+# CHECK: adc r1, r2, #15728640
+# CHECK: adc r1, r2, #251658240
+# CHECK: adc r1, r2, #4026531840
+# CHECK: adc r1, r2, #4026531855
+# CHECK: adcs r1, r2, #3840
+# CHECK: adcseq r1, r2, #3840
+# CHECK: adceq r1, r2, #3840
+
+0x0f 0x10 0xa2 0xe2
+0xf0 0x10 0xa2 0xe2
+0x0f 0x1c 0xa2 0xe2
+0x0f 0x1a 0xa2 0xe2
+0x0f 0x18 0xa2 0xe2
+0x0f 0x16 0xa2 0xe2
+0x0f 0x14 0xa2 0xe2
+0x0f 0x12 0xa2 0xe2
+0xff 0x12 0xa2 0xe2
+
+0x0f 0x1c 0xb2 0xe2
+0x0f 0x1c 0xb2 0x02
+0x0f 0x1c 0xa2 0x02
+
+#------------------------------------------------------------------------------
+# ADC (register)
+# ADC (shifted register)
+#------------------------------------------------------------------------------
+# CHECK: adc r4, r5, r6
+
+# CHECK: adc r4, r5, r6, lsl #1
+# CHECK: adc r4, r5, r6, lsl #31
+# CHECK: adc r4, r5, r6, lsr #1
+# CHECK: adc r4, r5, r6, lsr #31
+# CHECK: adc r4, r5, r6, lsr #32
+# CHECK: adc r4, r5, r6, asr #1
+# CHECK: adc r4, r5, r6, asr #31
+# CHECK: adc r4, r5, r6, asr #32
+# CHECK: adc r4, r5, r6, ror #1
+# CHECK: adc r4, r5, r6, ror #31
+
+# CHECK: adc r6, r7, r8, lsl r9
+# CHECK: adc r6, r7, r8, lsr r9
+# CHECK: adc r6, r7, r8, asr r9
+# CHECK: adc r6, r7, r8, ror r9
+# CHECK: adc r4, r5, r6, rrx
+
+# CHECK: adc r5, r5, r6
+# CHECK: adc r4, r4, r5, lsl #1
+# CHECK: adc r4, r4, r5, lsl #31
+# CHECK: adc r4, r4, r5, lsr #1
+# CHECK: adc r4, r4, r5, lsr #31
+# CHECK: adc r4, r4, r5, lsr #32
+# CHECK: adc r4, r4, r5, asr #1
+# CHECK: adc r4, r4, r5, asr #31
+# CHECK: adc r4, r4, r5, asr #32
+# CHECK: adc r4, r4, r5, ror #1
+# CHECK: adc r4, r4, r5, ror #31
+# CHECK: adc r4, r4, r5, rrx
+# CHECK: adc r6, r6, r7, lsl r9
+# CHECK: adc r6, r6, r7, lsr r9
+# CHECK: adc r6, r6, r7, asr r9
+# CHECK: adc r6, r6, r7, ror r9
+# CHECK: adc r4, r4, r5, rrx
+
+0x06 0x40 0xa5 0xe0
+
+0x86 0x40 0xa5 0xe0
+0x86 0x4f 0xa5 0xe0
+0xa6 0x40 0xa5 0xe0
+0xa6 0x4f 0xa5 0xe0
+0x26 0x40 0xa5 0xe0
+0xc6 0x40 0xa5 0xe0
+0xc6 0x4f 0xa5 0xe0
+0x46 0x40 0xa5 0xe0
+0xe6 0x40 0xa5 0xe0
+0xe6 0x4f 0xa5 0xe0
+
+0x18 0x69 0xa7 0xe0
+0x38 0x69 0xa7 0xe0
+0x58 0x69 0xa7 0xe0
+0x78 0x69 0xa7 0xe0
+0x66 0x40 0xa5 0xe0
+
+0x06 0x50 0xa5 0xe0
+0x85 0x40 0xa4 0xe0
+0x85 0x4f 0xa4 0xe0
+0xa5 0x40 0xa4 0xe0
+0xa5 0x4f 0xa4 0xe0
+0x25 0x40 0xa4 0xe0
+0xc5 0x40 0xa4 0xe0
+0xc5 0x4f 0xa4 0xe0
+0x45 0x40 0xa4 0xe0
+0xe5 0x40 0xa4 0xe0
+0xe5 0x4f 0xa4 0xe0
+0x65 0x40 0xa4 0xe0
+0x17 0x69 0xa6 0xe0
+0x37 0x69 0xa6 0xe0
+0x57 0x69 0xa6 0xe0
+0x77 0x69 0xa6 0xe0
+0x65 0x40 0xa4 0xe0
+
+#------------------------------------------------------------------------------
+# ADD
+#------------------------------------------------------------------------------
+# CHECK: add r4, r5, #61440
+# CHECK: add r4, r5, r6
+# CHECK: add r4, r5, r6, lsl #5
+# CHECK: add r4, r5, r6, lsr #5
+# CHECK: add r4, r5, r6, lsr #5
+# CHECK: add r4, r5, r6, asr #5
+# CHECK: add r4, r5, r6, ror #5
+# CHECK: add r6, r7, r8, lsl r9
+# CHECK: add r6, r7, r8, lsr r9
+# CHECK: add r6, r7, r8, asr r9
+# CHECK: add r6, r7, r8, ror r9
+# CHECK: add r4, r5, r6, rrx
+
+# CHECK: add r5, r5, #61440
+# CHECK: add r4, r4, r5
+# CHECK: add r4, r4, r5, lsl #5
+# CHECK: add r4, r4, r5, lsr #5
+# CHECK: add r4, r4, r5, lsr #5
+# CHECK: add r4, r4, r5, asr #5
+# CHECK: add r4, r4, r5, ror #5
+# CHECK: add r6, r6, r7, lsl r9
+# CHECK: add r6, r6, r7, lsr r9
+# CHECK: add r6, r6, r7, asr r9
+# CHECK: add r6, r6, r7, ror r9
+# CHECK: add r4, r4, r5, rrx
+
+0x0f 0x4a 0x85 0xe2
+0x06 0x40 0x85 0xe0
+0x86 0x42 0x85 0xe0
+0xa6 0x42 0x85 0xe0
+0xa6 0x42 0x85 0xe0
+0xc6 0x42 0x85 0xe0
+0xe6 0x42 0x85 0xe0
+0x18 0x69 0x87 0xe0
+0x38 0x69 0x87 0xe0
+0x58 0x69 0x87 0xe0
+0x78 0x69 0x87 0xe0
+0x66 0x40 0x85 0xe0
+
+
+0x0f 0x5a 0x85 0xe2
+0x05 0x40 0x84 0xe0
+0x85 0x42 0x84 0xe0
+0xa5 0x42 0x84 0xe0
+0xa5 0x42 0x84 0xe0
+0xc5 0x42 0x84 0xe0
+0xe5 0x42 0x84 0xe0
+0x17 0x69 0x86 0xe0
+0x37 0x69 0x86 0xe0
+0x57 0x69 0x86 0xe0
+0x77 0x69 0x86 0xe0
+0x65 0x40 0x84 0xe0
+
+
+#------------------------------------------------------------------------------
+# AND
+#------------------------------------------------------------------------------
+# CHECK: and r10, r1, #15
+# CHECK: and r10, r1, r6
+# CHECK: and r10, r1, r6, lsl #10
+# CHECK: and r10, r1, r6, lsr #10
+# CHECK: and r10, r1, r6, lsr #10
+# CHECK: and r10, r1, r6, asr #10
+# CHECK: and r10, r1, r6, ror #10
+# CHECK: and r6, r7, r8, lsl r2
+# CHECK: and r6, r7, r8, lsr r2
+# CHECK: and r6, r7, r8, asr r2
+# CHECK: and r6, r7, r8, ror r2
+# CHECK: and r10, r1, r6, rrx
+
+# CHECK: and r1, r1, #15
+# CHECK: and r10, r10, r1
+# CHECK: and r10, r10, r1, lsl #10
+# CHECK: and r10, r10, r1, lsr #10
+# CHECK: and r10, r10, r1, lsr #10
+# CHECK: and r10, r10, r1, asr #10
+# CHECK: and r10, r10, r1, ror #10
+# CHECK: and r6, r6, r7, lsl r2
+# CHECK: and r6, r6, r7, lsr r2
+# CHECK: and r6, r6, r7, asr r2
+# CHECK: and r6, r6, r7, ror r2
+# CHECK: and r10, r10, r1, rrx
+
+0x0f 0xa0 0x01 0xe2
+0x06 0xa0 0x01 0xe0
+0x06 0xa5 0x01 0xe0
+0x26 0xa5 0x01 0xe0
+0x26 0xa5 0x01 0xe0
+0x46 0xa5 0x01 0xe0
+0x66 0xa5 0x01 0xe0
+0x18 0x62 0x07 0xe0
+0x38 0x62 0x07 0xe0
+0x58 0x62 0x07 0xe0
+0x78 0x62 0x07 0xe0
+0x66 0xa0 0x01 0xe0
+
+0x0f 0x10 0x01 0xe2
+0x01 0xa0 0x0a 0xe0
+0x01 0xa5 0x0a 0xe0
+0x21 0xa5 0x0a 0xe0
+0x21 0xa5 0x0a 0xe0
+0x41 0xa5 0x0a 0xe0
+0x61 0xa5 0x0a 0xe0
+0x17 0x62 0x06 0xe0
+0x37 0x62 0x06 0xe0
+0x57 0x62 0x06 0xe0
+0x77 0x62 0x06 0xe0
+0x61 0xa0 0x0a 0xe0
+
+#------------------------------------------------------------------------------
+# FIXME: ASR
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# BFC
+#------------------------------------------------------------------------------
+# CHECK: bfc r5, #3, #17
+# CHECK: bfclo r5, #3, #17
+
+0x9f 0x51 0xd3 0xe7
+0x9f 0x51 0xd3 0x37
+
+
+#------------------------------------------------------------------------------
+# BFI
+#------------------------------------------------------------------------------
+# CHECK: bfi r5, r2, #3, #17
+# CHECK: bfine r5, r2, #3, #17
+
+0x92 0x51 0xd3 0xe7
+0x92 0x51 0xd3 0x17
+
+
+#------------------------------------------------------------------------------
+# BIC
+#------------------------------------------------------------------------------
+# CHECK: bic r10, r1, #15
+# CHECK: bic r10, r1, r6
+# CHECK: bic r10, r1, r6, lsl #10
+# CHECK: bic r10, r1, r6, lsr #10
+# CHECK: bic r10, r1, r6, lsr #10
+# CHECK: bic r10, r1, r6, asr #10
+# CHECK: bic r10, r1, r6, ror #10
+# CHECK: bic r6, r7, r8, lsl r2
+# CHECK: bic r6, r7, r8, lsr r2
+# CHECK: bic r6, r7, r8, asr r2
+# CHECK: bic r6, r7, r8, ror r2
+# CHECK: bic r10, r1, r6, rrx
+
+# CHECK: bic r1, r1, #15
+# CHECK: bic r10, r10, r1
+# CHECK: bic r10, r10, r1, lsl #10
+# CHECK: bic r10, r10, r1, lsr #10
+# CHECK: bic r10, r10, r1, lsr #10
+# CHECK: bic r10, r10, r1, asr #10
+# CHECK: bic r10, r10, r1, ror #10
+# CHECK: bic r6, r6, r7, lsl r2
+# CHECK: bic r6, r6, r7, lsr r2
+# CHECK: bic r6, r6, r7, asr r2
+# CHECK: bic r6, r6, r7, ror r2
+# CHECK: bic r10, r10, r1, rrx
+
+0x0f 0xa0 0xc1 0xe3
+0x06 0xa0 0xc1 0xe1
+0x06 0xa5 0xc1 0xe1
+0x26 0xa5 0xc1 0xe1
+0x26 0xa5 0xc1 0xe1
+0x46 0xa5 0xc1 0xe1
+0x66 0xa5 0xc1 0xe1
+0x18 0x62 0xc7 0xe1
+0x38 0x62 0xc7 0xe1
+0x58 0x62 0xc7 0xe1
+0x78 0x62 0xc7 0xe1
+0x66 0xa0 0xc1 0xe1
+
+
+0x0f 0x10 0xc1 0xe3
+0x01 0xa0 0xca 0xe1
+0x01 0xa5 0xca 0xe1
+0x21 0xa5 0xca 0xe1
+0x21 0xa5 0xca 0xe1
+0x41 0xa5 0xca 0xe1
+0x61 0xa5 0xca 0xe1
+0x17 0x62 0xc6 0xe1
+0x37 0x62 0xc6 0xe1
+0x57 0x62 0xc6 0xe1
+0x77 0x62 0xc6 0xe1
+0x61 0xa0 0xca 0xe1
+
+#------------------------------------------------------------------------------
+# BKPT
+#------------------------------------------------------------------------------
+# CHECK: bkpt #10
+# CHECK: bkpt #65535
+
+0x7a 0x00 0x20 0xe1
+0x7f 0xff 0x2f 0xe1
+
+#------------------------------------------------------------------------------
+# BLX (register)
+#------------------------------------------------------------------------------
+# CHECK: blx r2
+# CHECK: blxne r2
+
+0x32 0xff 0x2f 0xe1
+0x32 0xff 0x2f 0x11
+
+#------------------------------------------------------------------------------
+# BX
+#------------------------------------------------------------------------------
+
+# CHECK: bx r2
+# CHECK: bxne r2
+
+0x12 0xff 0x2f 0xe1
+0x12 0xff 0x2f 0x11
+
+#------------------------------------------------------------------------------
+# BXJ
+#------------------------------------------------------------------------------
+
+# CHECK: bxj r2
+# CHECK: bxjne r2
+
+0x22 0xff 0x2f 0xe1
+0x22 0xff 0x2f 0x11
+
+
+#------------------------------------------------------------------------------
+# CDP/CDP2
+#------------------------------------------------------------------------------
+# CHECK: cdp p7, #1, c1, c1, c1, #4
+# CHECK: cdp2 p7, #1, c1, c1, c1, #4
+
+0x81 0x17 0x11 0xee
+0x81 0x17 0x11 0xfe
+
+
+#------------------------------------------------------------------------------
+# CLREX
+#------------------------------------------------------------------------------
+# CHECK: clrex
+
+0x1f 0xf0 0x7f 0xf5
+
+
+#------------------------------------------------------------------------------
+# CLZ
+#------------------------------------------------------------------------------
+# CHECK: clz r1, r2
+# CHECK: clzeq r1, r2
+
+0x12 0x1f 0x6f 0xe1
+0x12 0x1f 0x6f 0x01
+
+#------------------------------------------------------------------------------
+# CMN
+#------------------------------------------------------------------------------
+# CHECK: cmn r1, #15
+# CHECK: cmn r1, r6
+# CHECK: cmn r1, r6, lsl #10
+# CHECK: cmn r1, r6, lsr #10
+# CHECK: cmn sp, r6, lsr #10
+# CHECK: cmn r1, r6, asr #10
+# CHECK: cmn r1, r6, ror #10
+# CHECK: cmn r7, r8, lsl r2
+# CHECK: cmn sp, r8, lsr r2
+# CHECK: cmn r7, r8, asr r2
+# CHECK: cmn r7, r8, ror r2
+# CHECK: cmn r1, r6, rrx
+
+0x0f 0x00 0x71 0xe3
+0x06 0x00 0x71 0xe1
+0x06 0x05 0x71 0xe1
+0x26 0x05 0x71 0xe1
+0x26 0x05 0x7d 0xe1
+0x46 0x05 0x71 0xe1
+0x66 0x05 0x71 0xe1
+0x18 0x02 0x77 0xe1
+0x38 0x02 0x7d 0xe1
+0x58 0x02 0x77 0xe1
+0x78 0x02 0x77 0xe1
+0x66 0x00 0x71 0xe1
+
+#------------------------------------------------------------------------------
+# CMP
+#------------------------------------------------------------------------------
+# CHECK: cmp r1, #15
+# CHECK: cmp r1, r6
+# CHECK: cmp r1, r6, lsl #10
+# CHECK: cmp r1, r6, lsr #10
+# CHECK: cmp sp, r6, lsr #10
+# CHECK: cmp r1, r6, asr #10
+# CHECK: cmp r1, r6, ror #10
+# CHECK: cmp r7, r8, lsl r2
+# CHECK: cmp sp, r8, lsr r2
+# CHECK: cmp r7, r8, asr r2
+# CHECK: cmp r7, r8, ror r2
+# CHECK: cmp r1, r6, rrx
+
+0x0f 0x00 0x51 0xe3
+0x06 0x00 0x51 0xe1
+0x06 0x05 0x51 0xe1
+0x26 0x05 0x51 0xe1
+0x26 0x05 0x5d 0xe1
+0x46 0x05 0x51 0xe1
+0x66 0x05 0x51 0xe1
+0x18 0x02 0x57 0xe1
+0x38 0x02 0x5d 0xe1
+0x58 0x02 0x57 0xe1
+0x78 0x02 0x57 0xe1
+0x66 0x00 0x51 0xe1
+
+
+#------------------------------------------------------------------------------
+# CPS
+#------------------------------------------------------------------------------
+# CHECK: cpsie aif
+# CHECK: cps #15
+# CHECK: cpsid if, #10
+
+0xc0 0x01 0x08 0xf1
+0x0f 0x00 0x02 0xf1
+0xca 0x00 0x0e 0xf1
+
+
+#------------------------------------------------------------------------------
+# DBG
+#------------------------------------------------------------------------------
+# CHECK: dbg #0
+# CHECK: dbg #5
+# CHECK: dbg #15
+
+0xf0 0xf0 0x20 0xe3
+0xf5 0xf0 0x20 0xe3
+0xff 0xf0 0x20 0xe3
+
+
+#------------------------------------------------------------------------------
+# DMB
+#------------------------------------------------------------------------------
+# CHECK: dmb sy
+# CHECK: dmb st
+# CHECK: dmb ish
+# CHECK: dmb ishst
+# CHECK: dmb nsh
+# CHECK: dmb nshst
+# CHECK: dmb osh
+# CHECK: dmb oshst
+# CHECK: dmb
+
+0x5f 0xf0 0x7f 0xf5
+0x5e 0xf0 0x7f 0xf5
+0x5b 0xf0 0x7f 0xf5
+0x5a 0xf0 0x7f 0xf5
+0x57 0xf0 0x7f 0xf5
+0x56 0xf0 0x7f 0xf5
+0x53 0xf0 0x7f 0xf5
+0x52 0xf0 0x7f 0xf5
+0x5f 0xf0 0x7f 0xf5
+
+#------------------------------------------------------------------------------
+# DSB
+#------------------------------------------------------------------------------
+# CHECK: dsb sy
+# CHECK: dsb st
+# CHECK: dsb ish
+# CHECK: dsb ishst
+# CHECK: dsb nsh
+# CHECK: dsb nshst
+# CHECK: dsb osh
+# CHECK: dsb oshst
+# CHECK: dsb
+
+0x4f 0xf0 0x7f 0xf5
+0x4e 0xf0 0x7f 0xf5
+0x4b 0xf0 0x7f 0xf5
+0x4a 0xf0 0x7f 0xf5
+0x47 0xf0 0x7f 0xf5
+0x46 0xf0 0x7f 0xf5
+0x43 0xf0 0x7f 0xf5
+0x42 0xf0 0x7f 0xf5
+0x4f 0xf0 0x7f 0xf5
+
+#------------------------------------------------------------------------------
+# EOR
+#------------------------------------------------------------------------------
+# CHECK: eor r4, r5, #61440
+# CHECK: eor r4, r5, r6
+# CHECK: eor r4, r5, r6, lsl #5
+# CHECK: eor r4, r5, r6, lsr #5
+# CHECK: eor r4, r5, r6, lsr #5
+# CHECK: eor r4, r5, r6, asr #5
+# CHECK: eor r4, r5, r6, ror #5
+# CHECK: eor r6, r7, r8, lsl r9
+# CHECK: eor r6, r7, r8, lsr r9
+# CHECK: eor r6, r7, r8, asr r9
+# CHECK: eor r6, r7, r8, ror r9
+# CHECK: eor r4, r5, r6, rrx
+
+# CHECK: eor r5, r5, #61440
+# CHECK: eor r4, r4, r5
+# CHECK: eor r4, r4, r5, lsl #5
+# CHECK: eor r4, r4, r5, lsr #5
+# CHECK: eor r4, r4, r5, lsr #5
+# CHECK: eor r4, r4, r5, asr #5
+# CHECK: eor r4, r4, r5, ror #5
+# CHECK: eor r6, r6, r7, lsl r9
+# CHECK: eor r6, r6, r7, lsr r9
+# CHECK: eor r6, r6, r7, asr r9
+# CHECK: eor r6, r6, r7, ror r9
+# CHECK: eor r4, r4, r5, rrx
+
+0x0f 0x4a 0x25 0xe2
+0x06 0x40 0x25 0xe0
+0x86 0x42 0x25 0xe0
+0xa6 0x42 0x25 0xe0
+0xa6 0x42 0x25 0xe0
+0xc6 0x42 0x25 0xe0
+0xe6 0x42 0x25 0xe0
+0x18 0x69 0x27 0xe0
+0x38 0x69 0x27 0xe0
+0x58 0x69 0x27 0xe0
+0x78 0x69 0x27 0xe0
+0x66 0x40 0x25 0xe0
+
+
+0x0f 0x5a 0x25 0xe2
+0x05 0x40 0x24 0xe0
+0x85 0x42 0x24 0xe0
+0xa5 0x42 0x24 0xe0
+0xa5 0x42 0x24 0xe0
+0xc5 0x42 0x24 0xe0
+0xe5 0x42 0x24 0xe0
+0x17 0x69 0x26 0xe0
+0x37 0x69 0x26 0xe0
+0x57 0x69 0x26 0xe0
+0x77 0x69 0x26 0xe0
+0x65 0x40 0x24 0xe0
+
+
+#------------------------------------------------------------------------------
+# ISB
+#------------------------------------------------------------------------------
+# CHECK: isb sy
+
+0x6f 0xf0 0x7f 0xf5
+
+
+
+#------------------------------------------------------------------------------
+# LDM*
+#------------------------------------------------------------------------------
+# CHECK: ldm r2, {r1, r3, r4, r5, r6, sp}
+# CHECK: ldmib r2, {r1, r3, r4, r5, r6, sp}
+# CHECK: ldmda r2, {r1, r3, r4, r5, r6, sp}
+# CHECK: ldmdb r2, {r1, r3, r4, r5, r6, sp}
+
+
+# CHECK: ldm r2!, {r1, r3, r4, r5, r6, sp}
+# CHECK: ldmib r2!, {r1, r3, r4, r5, r6, sp}
+# CHECK: ldmda r2!, {r1, r3, r4, r5, r6, sp}
+# CHECK: ldmdb r2!, {r1, r3, r4, r5, r6, sp}
+
+0x7a 0x20 0x92 0xe8
+0x7a 0x20 0x92 0xe9
+0x7a 0x20 0x12 0xe8
+0x7a 0x20 0x12 0xe9
+
+0x7a 0x20 0xb2 0xe8
+0x7a 0x20 0xb2 0xe9
+0x7a 0x20 0x32 0xe8
+0x7a 0x20 0x32 0xe9
+
+
+#------------------------------------------------------------------------------
+# LDREX/LDREXB/LDREXH/LDREXD
+#------------------------------------------------------------------------------
+# CHECK: ldrexb r3, [r4]
+# CHECK: ldrexh r2, [r5]
+# CHECK: ldrex r1, [r7]
+# CHECK: ldrexd r6, r7, [r8]
+
+0x9f 0x3f 0xd4 0xe1
+0x9f 0x2f 0xf5 0xe1
+0x9f 0x1f 0x97 0xe1
+0x9f 0x6f 0xb8 0xe1
+
+
+#------------------------------------------------------------------------------
+# FIXME: LSL
+#------------------------------------------------------------------------------
+#------------------------------------------------------------------------------
+# FIXME: LSR
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# MCR/MCR2
+#------------------------------------------------------------------------------
+# CHECK: mcr p7, #1, r5, c1, c1, #4
+# CHECK: mcr2 p7, #1, r5, c1, c1, #4
+
+0x91 0x57 0x21 0xee
+0x91 0x57 0x21 0xfe
+
+#------------------------------------------------------------------------------
+# MCRR/MCRR2
+#------------------------------------------------------------------------------
+# CHECK: mcrr p7, #15, r5, r4, c1
+# CHECK: mcrr2 p7, #15, r5, r4, c1
+
+0xf1 0x57 0x44 0xec
+0xf1 0x57 0x44 0xfc
+
+
+#------------------------------------------------------------------------------
+# MLA
+#------------------------------------------------------------------------------
+# CHECK: mla r1, r2, r3, r4
+# CHECK: mlas r1, r2, r3, r4
+# CHECK: mlane r1, r2, r3, r4
+# CHECK: mlasne r1, r2, r3, r4
+
+0x92 0x43 0x21 0xe0
+0x92 0x43 0x31 0xe0
+0x92 0x43 0x21 0x10
+0x92 0x43 0x31 0x10
+
+#------------------------------------------------------------------------------
+# MLS
+#------------------------------------------------------------------------------
+# CHECK: mls r2, r5, r6, r3
+# CHECK: mlsne r2, r5, r6, r3
+
+0x95 0x36 0x62 0xe0
+0x95 0x36 0x62 0x10
+
+#------------------------------------------------------------------------------
+# MOV (immediate)
+#------------------------------------------------------------------------------
+# CHECK: mov r3, #7
+# CHECK: mov r4, #4080
+# CHECK: mov r5, #16711680
+# CHECK: movw r6, #65535
+# CHECK: movw r9, #65535
+# CHECK: movs r3, #7
+# CHECK: moveq r4, #4080
+# CHECK: movseq r5, #16711680
+
+0x07 0x30 0xa0 0xe3
+0xff 0x4e 0xa0 0xe3
+0xff 0x58 0xa0 0xe3
+0xff 0x6f 0x0f 0xe3
+0xff 0x9f 0x0f 0xe3
+0x07 0x30 0xb0 0xe3
+0xff 0x4e 0xa0 0x03
+0xff 0x58 0xb0 0x03
+
+#------------------------------------------------------------------------------
+# MOV (register)
+#------------------------------------------------------------------------------
+# CHECK: mov r2, r3
+# CHECK: movs r2, r3
+# CHECK: moveq r2, r3
+# CHECK: movseq r2, r3
+
+0x03 0x20 0xa0 0xe1
+0x03 0x20 0xb0 0xe1
+0x03 0x20 0xa0 0x01
+0x03 0x20 0xb0 0x01
+
+#------------------------------------------------------------------------------
+# MOVT
+#------------------------------------------------------------------------------
+# CHECK: movt r3, #7
+# CHECK: movt r6, #65535
+# CHECK: movteq r4, #4080
+
+0x07 0x30 0x40 0xe3
+0xff 0x6f 0x4f 0xe3
+0xf0 0x4f 0x40 0x03
+
+
+#------------------------------------------------------------------------------
+# MRC/MRC2
+#------------------------------------------------------------------------------
+# CHECK: mrc p14, #0, r1, c1, c2, #4
+# CHECK: mrc2 p14, #0, r1, c1, c2, #4
+
+0x92 0x1e 0x11 0xee
+0x92 0x1e 0x11 0xfe
+
+#------------------------------------------------------------------------------
+# MRRC/MRRC2
+#------------------------------------------------------------------------------
+# CHECK: mrrc p7, #1, r5, r4, c1
+# CHECK: mrrc2 p7, #1, r5, r4, c1
+
+0x11 0x57 0x54 0xec
+0x11 0x57 0x54 0xfc
+
+
+#------------------------------------------------------------------------------
+# MRS
+#------------------------------------------------------------------------------
+# CHECK: mrs r8, apsr
+# CHECK: mrs r8, spsr
+0x00 0x80 0x0f 0xe1
+0x00 0x80 0x4f 0xe1
+
+
+
+#------------------------------------------------------------------------------
+# MSR
+#------------------------------------------------------------------------------
+
+# CHECK: msr CPSR_fc, #5
+# CHECK: msr APSR_g, #5
+# CHECK: msr APSR_nzcvq, #5
+# CHECK: msr APSR_nzcvq, #5
+# CHECK: msr APSR_nzcvqg, #5
+# CHECK: msr CPSR_fc, #5
+# CHECK: msr CPSR_c, #5
+# CHECK: msr CPSR_x, #5
+# CHECK: msr CPSR_fc, #5
+# CHECK: msr CPSR_fc, #5
+# CHECK: msr CPSR_fsx, #5
+# CHECK: msr SPSR_fc, #5
+# CHECK: msr SPSR_fsxc, #5
+# CHECK: msr CPSR_fsxc, #5
+
+0x05 0xf0 0x29 0xe3
+0x05 0xf0 0x24 0xe3
+0x05 0xf0 0x28 0xe3
+0x05 0xf0 0x28 0xe3
+0x05 0xf0 0x2c 0xe3
+0x05 0xf0 0x29 0xe3
+0x05 0xf0 0x21 0xe3
+0x05 0xf0 0x22 0xe3
+0x05 0xf0 0x29 0xe3
+0x05 0xf0 0x29 0xe3
+0x05 0xf0 0x2e 0xe3
+0x05 0xf0 0x69 0xe3
+0x05 0xf0 0x6f 0xe3
+0x05 0xf0 0x2f 0xe3
+
+# CHECK: msr CPSR_fc, r0
+# CHECK: msr APSR_g, r0
+# CHECK: msr APSR_nzcvq, r0
+# CHECK: msr APSR_nzcvq, r0
+# CHECK: msr APSR_nzcvqg, r0
+# CHECK: msr CPSR_fc, r0
+# CHECK: msr CPSR_c, r0
+# CHECK: msr CPSR_x, r0
+# CHECK: msr CPSR_fc, r0
+# CHECK: msr CPSR_fc, r0
+# CHECK: msr CPSR_fsx, r0
+# CHECK: msr SPSR_fc, r0
+# CHECK: msr SPSR_fsxc, r0
+# CHECK: msr CPSR_fsxc, r0
+
+0x00 0xf0 0x29 0xe1
+0x00 0xf0 0x24 0xe1
+0x00 0xf0 0x28 0xe1
+0x00 0xf0 0x28 0xe1
+0x00 0xf0 0x2c 0xe1
+0x00 0xf0 0x29 0xe1
+0x00 0xf0 0x21 0xe1
+0x00 0xf0 0x22 0xe1
+0x00 0xf0 0x29 0xe1
+0x00 0xf0 0x29 0xe1
+0x00 0xf0 0x2e 0xe1
+0x00 0xf0 0x69 0xe1
+0x00 0xf0 0x6f 0xe1
+0x00 0xf0 0x2f 0xe1
+
+#------------------------------------------------------------------------------
+# MUL
+#------------------------------------------------------------------------------
+
+# CHECK: mul r5, r6, r7
+# CHECK: muls r5, r6, r7
+# CHECK: mulgt r5, r6, r7
+# CHECK: mulsle r5, r6, r7
+
+0x96 0x07 0x05 0xe0
+0x96 0x07 0x15 0xe0
+0x96 0x07 0x05 0xc0
+0x96 0x07 0x15 0xd0
+
+
+#------------------------------------------------------------------------------
+# MVN (immediate)
+#------------------------------------------------------------------------------
+# CHECK: mvn r3, #7
+# CHECK: mvn r4, #4080
+# CHECK: mvn r5, #16711680
+# CHECK: mvns r3, #7
+# CHECK: mvneq r4, #4080
+# CHECK: mvnseq r5, #16711680
+
+0x07 0x30 0xe0 0xe3
+0xff 0x4e 0xe0 0xe3
+0xff 0x58 0xe0 0xe3
+0x07 0x30 0xf0 0xe3
+0xff 0x4e 0xe0 0x03
+0xff 0x58 0xf0 0x03
+
+
+#------------------------------------------------------------------------------
+# MVN (register)
+#------------------------------------------------------------------------------
+# CHECK: mvn r2, r3
+# CHECK: mvns r2, r3
+# CHECK: mvn r5, r6, lsl #19
+# CHECK: mvn r5, r6, lsr #9
+# CHECK: mvn r5, r6, asr #4
+# CHECK: mvn r5, r6, ror #6
+# CHECK: mvn r5, r6, rrx
+# CHECK: mvneq r2, r3
+# CHECK: mvnseq r2, r3, lsl #10
+
+0x03 0x20 0xe0 0xe1
+0x03 0x20 0xf0 0xe1
+0x86 0x59 0xe0 0xe1
+0xa6 0x54 0xe0 0xe1
+0x46 0x52 0xe0 0xe1
+0x66 0x53 0xe0 0xe1
+0x66 0x50 0xe0 0xe1
+0x03 0x20 0xe0 0x01
+0x03 0x25 0xf0 0x01
+
+
+#------------------------------------------------------------------------------
+# MVN (shifted register)
+#------------------------------------------------------------------------------
+# CHECK: mvn r5, r6, lsl r7
+# CHECK: mvns r5, r6, lsr r7
+# CHECK: mvngt r5, r6, asr r7
+# CHECK: mvnslt r5, r6, ror r7
+
+0x16 0x57 0xe0 0xe1
+0x36 0x57 0xf0 0xe1
+0x56 0x57 0xe0 0xc1
+0x76 0x57 0xf0 0xb1
+
+#------------------------------------------------------------------------------
+# NOP
+#------------------------------------------------------------------------------
+# CHECK: nop
+# CHECK: nopgt
+
+0x00 0xf0 0x20 0xe3
+0x00 0xf0 0x20 0xc3
+
+
+#------------------------------------------------------------------------------
+# ORR
+#------------------------------------------------------------------------------
+# CHECK: orr r4, r5, #61440
+# CHECK: orr r4, r5, r6
+# CHECK: orr r4, r5, r6, lsl #5
+# CHECK: orr r4, r5, r6, lsr #5
+# CHECK: orr r4, r5, r6, lsr #5
+# CHECK: orr r4, r5, r6, asr #5
+# CHECK: orr r4, r5, r6, ror #5
+# CHECK: orr r6, r7, r8, lsl r9
+# CHECK: orr r6, r7, r8, lsr r9
+# CHECK: orr r6, r7, r8, asr r9
+# CHECK: orr r6, r7, r8, ror r9
+# CHECK: orr r4, r5, r6, rrx
+
+# CHECK: orr r5, r5, #61440
+# CHECK: orr r4, r4, r5
+# CHECK: orr r4, r4, r5, lsl #5
+# CHECK: orr r4, r4, r5, lsr #5
+# CHECK: orr r4, r4, r5, lsr #5
+# CHECK: orr r4, r4, r5, asr #5
+# CHECK: orr r4, r4, r5, ror #5
+# CHECK: orr r6, r6, r7, lsl r9
+# CHECK: orr r6, r6, r7, lsr r9
+# CHECK: orr r6, r6, r7, asr r9
+# CHECK: orr r6, r6, r7, ror r9
+# CHECK: orr r4, r4, r5, rrx
+
+0x0f 0x4a 0x85 0xe3
+0x06 0x40 0x85 0xe1
+0x86 0x42 0x85 0xe1
+0xa6 0x42 0x85 0xe1
+0xa6 0x42 0x85 0xe1
+0xc6 0x42 0x85 0xe1
+0xe6 0x42 0x85 0xe1
+0x18 0x69 0x87 0xe1
+0x38 0x69 0x87 0xe1
+0x58 0x69 0x87 0xe1
+0x78 0x69 0x87 0xe1
+0x66 0x40 0x85 0xe1
+
+0x0f 0x5a 0x85 0xe3
+0x05 0x40 0x84 0xe1
+0x85 0x42 0x84 0xe1
+0xa5 0x42 0x84 0xe1
+0xa5 0x42 0x84 0xe1
+0xc5 0x42 0x84 0xe1
+0xe5 0x42 0x84 0xe1
+0x17 0x69 0x86 0xe1
+0x37 0x69 0x86 0xe1
+0x57 0x69 0x86 0xe1
+0x77 0x69 0x86 0xe1
+0x65 0x40 0x84 0xe1
+
+# CHECK: orrseq r4, r5, #61440
+# CHECK: orrne r4, r5, r6
+# CHECK: orrseq r4, r5, r6, lsl #5
+# CHECK: orrlo r6, r7, r8, ror r9
+# CHECK: orrshi r4, r5, r6, rrx
+# CHECK: orrhs r5, r5, #61440
+# CHECK: orrseq r4, r4, r5
+# CHECK: orrne r6, r6, r7, asr r9
+# CHECK: orrslt r6, r6, r7, ror r9
+# CHECK: orrsgt r4, r4, r5, rrx
+
+0x0f 0x4a 0x95 0x03
+0x06 0x40 0x85 0x11
+0x86 0x42 0x95 0x01
+0x78 0x69 0x87 0x31
+0x66 0x40 0x95 0x81
+0x0f 0x5a 0x85 0x23
+0x05 0x40 0x94 0x01
+0x57 0x69 0x86 0x11
+0x77 0x69 0x96 0xb1
+0x65 0x40 0x94 0xc1
+
+#------------------------------------------------------------------------------
+# PKH
+#------------------------------------------------------------------------------
+# CHECK: pkhbt r2, r2, r3
+# CHECK: pkhbt r2, r2, r3, lsl #31
+# CHECK: pkhbt r2, r2, r3
+# CHECK: pkhbt r2, r2, r3, lsl #15
+
+# CHECK: pkhbt r2, r2, r3
+# CHECK: pkhtb r2, r2, r3, asr #31
+# CHECK: pkhtb r2, r2, r3, asr #15
+
+0x13 0x20 0x82 0xe6
+0x93 0x2f 0x82 0xe6
+0x13 0x20 0x82 0xe6
+0x93 0x27 0x82 0xe6
+
+0x13 0x20 0x82 0xe6
+0xd3 0x2f 0x82 0xe6
+0xd3 0x27 0x82 0xe6
+
+#------------------------------------------------------------------------------
+# FIXME: PLD
+#------------------------------------------------------------------------------
+#------------------------------------------------------------------------------
+# FIXME: PLI
+#------------------------------------------------------------------------------
+
+
+#------------------------------------------------------------------------------
+# POP
+#------------------------------------------------------------------------------
+# CHECK: ldr r7, [sp], #4
+# CHECK: pop {r7, r8, r9, r10}
+
+0x04 0x70 0x9d 0xe4
+0x80 0x07 0xbd 0xe8
+
+
+#------------------------------------------------------------------------------
+# PUSH
+#------------------------------------------------------------------------------
+# CHECK: str r7, [sp, #-4]!
+# CHECK: push {r7, r8, r9, r10}
+
+0x04 0x70 0x2d 0xe5
+0x80 0x07 0x2d 0xe9
+
+
+#------------------------------------------------------------------------------
+# QADD/QADD16/QADD8
+#------------------------------------------------------------------------------
+# CHECK: qadd r1, r2, r3
+# CHECK: qaddne r1, r2, r3
+# CHECK: qadd16 r1, r2, r3
+# CHECK: qadd16gt r1, r2, r3
+# CHECK: qadd8 r1, r2, r3
+# CHECK: qadd8le r1, r2, r3
+
+0x52 0x10 0x03 0xe1
+0x52 0x10 0x03 0x11
+0x13 0x1f 0x22 0xe6
+0x13 0x1f 0x22 0xc6
+0x93 0x1f 0x22 0xe6
+0x93 0x1f 0x22 0xd6
+
+
+#------------------------------------------------------------------------------
+# QDADD/QDSUB
+#------------------------------------------------------------------------------
+# CHECK: qdadd r6, r7, r8
+# CHECK: qdaddhi r6, r7, r8
+# CHECK: qdsub r6, r7, r8
+# CHECK: qdsubhi r6, r7, r8
+
+0x57 0x60 0x48 0xe1
+0x57 0x60 0x48 0x81
+0x57 0x60 0x68 0xe1
+0x57 0x60 0x68 0x81
+
+
+#------------------------------------------------------------------------------
+# QSAX
+#------------------------------------------------------------------------------
+# CHECK: qsax r9, r12, r0
+# CHECK: qsaxeq r9, r12, r0
+
+0x50 0x9f 0x2c 0xe6
+0x50 0x9f 0x2c 0x06
+
+
+#------------------------------------------------------------------------------
+# QSUB/QSUB16/QSUB8
+#------------------------------------------------------------------------------
+# CHECK: qsub r1, r2, r3
+# CHECK: qsubne r1, r2, r3
+# CHECK: qsub16 r1, r2, r3
+# CHECK: qsub16gt r1, r2, r3
+# CHECK: qsub8 r1, r2, r3
+# CHECK: qsub8le r1, r2, r3
+
+0x52 0x10 0x23 0xe1
+0x52 0x10 0x23 0x11
+0x73 0x1f 0x22 0xe6
+0x73 0x1f 0x22 0xc6
+0xf3 0x1f 0x22 0xe6
+0xf3 0x1f 0x22 0xd6
+
+
+#------------------------------------------------------------------------------
+# RBIT
+#------------------------------------------------------------------------------
+# CHECK: rbit r1, r2
+# CHECK: rbitne r1, r2
+
+0x32 0x1f 0xff 0xe6
+0x32 0x1f 0xff 0x16
+
+
+#------------------------------------------------------------------------------
+# REV/REV16/REVSH
+#------------------------------------------------------------------------------
+# CHECK: rev r1, r9
+# CHECK: revne r1, r5
+# CHECK: rev16 r8, r3
+# CHECK: rev16ne r12, r4
+# CHECK: revsh r4, r9
+# CHECK: revshne r9, r1
+
+0x39 0x1f 0xbf 0xe6
+0x35 0x1f 0xbf 0x16
+0xb3 0x8f 0xbf 0xe6
+0xb4 0xcf 0xbf 0x16
+0xb9 0x4f 0xff 0xe6
+0xb1 0x9f 0xff 0x16
+
+
+#------------------------------------------------------------------------------
+# RFE
+#------------------------------------------------------------------------------
+# CHECK: rfeda r2
+# CHECK: rfedb r3
+# CHECK: rfeia r5
+# CHECK: rfeib r6
+
+# CHECK: rfeda r4!
+# CHECK: rfedb r7!
+# CHECK: rfeia r9!
+# CHECK: rfeib r8!
+
+# CHECK: rfeda r2
+# CHECK: rfedb r3
+# CHECK: rfeia r5
+# CHECK: rfeib r6
+
+# CHECK: rfeda r4!
+# CHECK: rfedb r7!
+# CHECK: rfeia r9!
+# CHECK: rfeib r8!
+
+# CHECK: rfeia r1
+# CHECK: rfeia r1!
+
+0x00 0x0a 0x12 0xf8
+0x00 0x0a 0x13 0xf9
+0x00 0x0a 0x95 0xf8
+0x00 0x0a 0x96 0xf9
+
+0x00 0x0a 0x34 0xf8
+0x00 0x0a 0x37 0xf9
+0x00 0x0a 0xb9 0xf8
+0x00 0x0a 0xb8 0xf9
+
+0x00 0x0a 0x12 0xf8
+0x00 0x0a 0x13 0xf9
+0x00 0x0a 0x95 0xf8
+0x00 0x0a 0x96 0xf9
+
+0x00 0x0a 0x34 0xf8
+0x00 0x0a 0x37 0xf9
+0x00 0x0a 0xb9 0xf8
+0x00 0x0a 0xb8 0xf9
+
+0x00 0x0a 0x91 0xf8
+0x00 0x0a 0xb1 0xf8
+
+
+#------------------------------------------------------------------------------
+# RSB
+#------------------------------------------------------------------------------
+# CHECK: rsb r4, r5, #61440
+# CHECK: rsb r4, r5, r6
+# CHECK: rsb r4, r5, r6, lsl #5
+# CHECK: rsblo r4, r5, r6, lsr #5
+# CHECK: rsb r4, r5, r6, lsr #5
+# CHECK: rsb r4, r5, r6, asr #5
+# CHECK: rsb r4, r5, r6, ror #5
+# CHECK: rsb r6, r7, r8, lsl r9
+# CHECK: rsb r6, r7, r8, lsr r9
+# CHECK: rsb r6, r7, r8, asr r9
+# CHECK: rsble r6, r7, r8, ror r9
+# CHECK: rsb r4, r5, r6, rrx
+
+# CHECK: rsb r5, r5, #61440
+# CHECK: rsb r4, r4, r5
+# CHECK: rsb r4, r4, r5, lsl #5
+# CHECK: rsb r4, r4, r5, lsr #5
+# CHECK: rsbne r4, r4, r5, lsr #5
+# CHECK: rsb r4, r4, r5, asr #5
+# CHECK: rsb r4, r4, r5, ror #5
+# CHECK: rsbgt r6, r6, r7, lsl r9
+# CHECK: rsb r6, r6, r7, lsr r9
+# CHECK: rsb r6, r6, r7, asr r9
+# CHECK: rsb r6, r6, r7, ror r9
+# CHECK: rsb r4, r4, r5, rrx
+
+0x0f 0x4a 0x65 0xe2
+0x06 0x40 0x65 0xe0
+0x86 0x42 0x65 0xe0
+0xa6 0x42 0x65 0x30
+0xa6 0x42 0x65 0xe0
+0xc6 0x42 0x65 0xe0
+0xe6 0x42 0x65 0xe0
+0x18 0x69 0x67 0xe0
+0x38 0x69 0x67 0xe0
+0x58 0x69 0x67 0xe0
+0x78 0x69 0x67 0xd0
+0x66 0x40 0x65 0xe0
+
+0x0f 0x5a 0x65 0xe2
+0x05 0x40 0x64 0xe0
+0x85 0x42 0x64 0xe0
+0xa5 0x42 0x64 0xe0
+0xa5 0x42 0x64 0x10
+0xc5 0x42 0x64 0xe0
+0xe5 0x42 0x64 0xe0
+0x17 0x69 0x66 0xc0
+0x37 0x69 0x66 0xe0
+0x57 0x69 0x66 0xe0
+0x77 0x69 0x66 0xe0
+0x65 0x40 0x64 0xe0
+
+#------------------------------------------------------------------------------
+# RSC