Fix a minor regression introduced in r223113
[oota-llvm.git] / test / MC / ARM / basic-arm-instructions.s
index 6920c5fef9e369f376b7b5c49b16a0dae487e335..878948ae7b414e06c1572b50fa337f2d95c55b80 100644 (file)
@@ -1,4 +1,5 @@
-@ RUN: llvm-mc -triple=armv7-apple-darwin -show-encoding < %s | FileCheck %s
+@ RUN: llvm-mc -triple=armv7-apple-darwin -mcpu=cortex-a8 -show-encoding < %s | FileCheck %s
+@ RUN: llvm-mc -triple=armebv7-unknown-unknown -mcpu=cortex-a8 -show-encoding < %s | FileCheck --check-prefix=CHECK-BE %s
   .syntax unified
   .globl _func
 
   .syntax unified
   .globl _func
 
@@ -14,30 +15,39 @@ _func:
 @------------------------------------------------------------------------------
 @ ADC (immediate)
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ 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 r7, r8, #42, #2
+        adc r7, r8, #-2147483638
+        adc r7, r8, #40, #2
+       adc r7, r8, #(0xff << 16)
+        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
+        adcs r7, r8, #40, #2
+        adcseq r1, r2, #0xf00
+        adceq r1, r2, #0xf00
 
 @ CHECK: adc   r1, r2, #15             @ encoding: [0x0f,0x10,0xa2,0xe2]
 
 @ CHECK: adc   r1, r2, #15             @ encoding: [0x0f,0x10,0xa2,0xe2]
+@ CHECK: adc    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0xa8,0xe2]
+@ CHECK: adc    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0xa8,0xe2]
+@ CHECK: adc    r7, r8, #40, #2         @ encoding: [0x28,0x71,0xa8,0xe2]
+@ CHECK: adc   r7, r8, #16711680       @ encoding: [0xff,0x78,0xa8,0xe2]
 @ CHECK: adc   r1, r2, #240            @ encoding: [0xf0,0x10,0xa2,0xe2]
 @ CHECK: adc   r1, r2, #3840           @ encoding: [0x0f,0x1c,0xa2,0xe2]
 @ CHECK: adc   r1, r2, #61440          @ encoding: [0x0f,0x1a,0xa2,0xe2]
 @ CHECK: adc   r1, r2, #983040         @ encoding: [0x0f,0x18,0xa2,0xe2]
 @ CHECK: adc   r1, r2, #15728640       @ encoding: [0x0f,0x16,0xa2,0xe2]
 @ CHECK: adc   r1, r2, #251658240      @ encoding: [0x0f,0x14,0xa2,0xe2]
 @ CHECK: adc   r1, r2, #240            @ encoding: [0xf0,0x10,0xa2,0xe2]
 @ CHECK: adc   r1, r2, #3840           @ encoding: [0x0f,0x1c,0xa2,0xe2]
 @ CHECK: adc   r1, r2, #61440          @ encoding: [0x0f,0x1a,0xa2,0xe2]
 @ CHECK: adc   r1, r2, #983040         @ encoding: [0x0f,0x18,0xa2,0xe2]
 @ CHECK: adc   r1, r2, #15728640       @ encoding: [0x0f,0x16,0xa2,0xe2]
 @ CHECK: adc   r1, r2, #251658240      @ encoding: [0x0f,0x14,0xa2,0xe2]
-@ CHECK: adc   r1, r2, #4026531840     @ encoding: [0x0f,0x12,0xa2,0xe2]
-@ CHECK: adc   r1, r2, #4026531855     @ encoding: [0xff,0x12,0xa2,0xe2]
-
+@ CHECK: adc   r1, r2, #-268435456     @ encoding: [0x0f,0x12,0xa2,0xe2]
+@ CHECK: adc   r1, r2, #-268435441     @ encoding: [0xff,0x12,0xa2,0xe2]
 @ CHECK: adcs  r1, r2, #3840           @ encoding: [0x0f,0x1c,0xb2,0xe2]
 @ CHECK: adcs  r1, r2, #3840           @ encoding: [0x0f,0x1c,0xb2,0xe2]
+@ CHECK: adcs   r7, r8, #40, #2         @ encoding: [0x28,0x71,0xb8,0xe2]
 @ CHECK: adcseq        r1, r2, #3840           @ encoding: [0x0f,0x1c,0xb2,0x02]
 @ CHECK: adceq r1, r2, #3840           @ encoding: [0x0f,0x1c,0xa2,0x02]
 
 @ CHECK: adcseq        r1, r2, #3840           @ encoding: [0x0f,0x1c,0xb2,0x02]
 @ CHECK: adceq r1, r2, #3840           @ encoding: [0x0f,0x1c,0xa2,0x02]
 
@@ -45,44 +55,44 @@ _func:
 @ ADC (register)
 @ ADC (shifted register)
 @------------------------------------------------------------------------------
 @ 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]
 
 
 @ CHECK: adc   r4, r5, r6              @ encoding: [0x06,0x40,0xa5,0xe0]
 
@@ -123,40 +133,86 @@ _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: [A,0x20'A',0x0f'A',0xe2'A']
+@ CHECK:  @   fixup A - offset: 0, value: Lback, kind: fixup_arm_adr_pcrel_12
+@ CHECK-BE: adr        r2, Lback    @ encoding: [0xe2'A',0x0f'A',0x20'A',A]
+@ CHECK-BE:  @   fixup A - offset: 0, value: Lback, kind: fixup_arm_adr_pcrel_12
+@ CHECK: adr   r3, Lforward @ encoding: [A,0x30'A',0x0f'A',0xe2'A']
+@ CHECK:  @   fixup A - offset: 0, value: Lforward, kind: fixup_arm_adr_pcrel_12
+@ CHECK-BE: adr        r3, Lforward @ encoding: [0xe2'A',0x0f'A',0x30'A',A]
+@ CHECK-BE:  @   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]
+
+        adr r1, #-0x0
+        adr r1, #-0x12000000
+        adr r1, #-0x80000001
+        adr r1, #0x12000000
+        adr r1, #0x80000001
+
+@ CHECK: adr   r1, #-0                 @ encoding: [0x00,0x10,0x4f,0xe2]
+@ CHECK: adr   r1, #-301989888         @ encoding: [0x12,0x14,0x4f,0xe2]
+@ CHECK: adr   r1, #2147483647         @ encoding: [0x06,0x11,0x4f,0xe2]
+@ CHECK: adr   r1, #301989888          @ encoding: [0x12,0x14,0x8f,0xe2]
+@ CHECK: adr   r1, #-2147483647        @ encoding: [0x06,0x11,0x8f,0xe2]
 
 @------------------------------------------------------------------------------
 @ ADD
 @------------------------------------------------------------------------------
 
 @------------------------------------------------------------------------------
 @ 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 r7, r8, #42, #2
+        add r7, r8, #-2147483638
+        add r7, r8, #40, #2
+       add r7, r8, #(0xff << 16)
+        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 r4, r4, r3, asl 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 r0, #-4
+       add r4, r5, #-21
+       add r0, pc, #0xc0000000
+
+       add r0, pc, #(Lback - .)
 
 @ CHECK: add   r4, r5, #61440          @ encoding: [0x0f,0x4a,0x85,0xe2]
 
 @ CHECK: add   r4, r5, #61440          @ encoding: [0x0f,0x4a,0x85,0xe2]
+@ CHECK: add    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x88,0xe2]
+@ CHECK: add    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x88,0xe2]
+@ CHECK: add    r7, r8, #40, #2         @ encoding: [0x28,0x71,0x88,0xe2]
+@ CHECK: add   r7, r8, #16711680       @ encoding: [0xff,0x78,0x88,0xe2]
 @ CHECK: add   r4, r5, r6              @ encoding: [0x06,0x40,0x85,0xe0]
 @ CHECK: add   r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x85,0xe0]
 @ CHECK: add   r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe0]
 @ CHECK: add   r4, r5, r6              @ encoding: [0x06,0x40,0x85,0xe0]
 @ CHECK: add   r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x85,0xe0]
 @ CHECK: add   r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x85,0xe0]
@@ -164,12 +220,12 @@ _func:
 @ CHECK: add   r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x85,0xe0]
 @ CHECK: add   r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x85,0xe0]
 @ CHECK: add   r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x87,0xe0]
 @ CHECK: add   r4, r5, r6, asr #5      @ encoding: [0xc6,0x42,0x85,0xe0]
 @ CHECK: add   r4, r5, r6, ror #5      @ encoding: [0xe6,0x42,0x85,0xe0]
 @ CHECK: add   r6, r7, r8, lsl r9      @ encoding: [0x18,0x69,0x87,0xe0]
+@ CHECK: add   r4, r4, r3, lsl r9      @ encoding: [0x13,0x49,0x84,0xe0]
 @ CHECK: add   r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x87,0xe0]
 @ CHECK: add   r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x87,0xe0]
 @ CHECK: add   r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x87,0xe0]
 @ CHECK: add   r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x85,0xe0]
 
 @ CHECK: add   r6, r7, r8, lsr r9      @ encoding: [0x38,0x69,0x87,0xe0]
 @ CHECK: add   r6, r7, r8, asr r9      @ encoding: [0x58,0x69,0x87,0xe0]
 @ CHECK: add   r6, r7, r8, ror r9      @ encoding: [0x78,0x69,0x87,0xe0]
 @ CHECK: add   r4, r5, r6, rrx         @ encoding: [0x66,0x40,0x85,0xe0]
 
-
 @ CHECK: add   r5, r5, #61440          @ encoding: [0x0f,0x5a,0x85,0xe2]
 @ CHECK: add   r4, r4, r5              @ encoding: [0x05,0x40,0x84,0xe0]
 @ CHECK: add   r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x84,0xe0]
 @ CHECK: add   r5, r5, #61440          @ encoding: [0x0f,0x5a,0x85,0xe2]
 @ CHECK: add   r4, r4, r5              @ encoding: [0x05,0x40,0x84,0xe0]
 @ CHECK: add   r4, r4, r5, lsl #5      @ encoding: [0x85,0x42,0x84,0xe0]
@@ -183,38 +239,73 @@ _func:
 @ CHECK: add   r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x86,0xe0]
 @ CHECK: add   r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x84,0xe0]
 
 @ CHECK: add   r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x86,0xe0]
 @ CHECK: add   r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x84,0xe0]
 
+@ CHECK: sub   r0, r0, #4              @ encoding: [0x04,0x00,0x40,0xe2]
+@ CHECK: sub   r4, r5, #21             @ encoding: [0x15,0x40,0x45,0xe2]
+@ CHECK: adr   r0, #-1073741824        @ encoding: [0x03,0x01,0x8f,0xe2]
+@ CHECK:        Ltmp0:
+@ CHECK-NEXT:   Ltmp1:
+@ CHECK-NEXT:   adr    r0, (Ltmp1+8)+(Lback-Ltmp0) @ encoding: [A,A,0x0f'A',0xe2'A']
+@ CHECK-NEXT:                           @   fixup A - offset: 0, value: (Ltmp1+8)+(Lback-Ltmp0), kind: fixup_arm_adr_pcrel_12
+
+    @ Test right shift by 32, which is encoded as 0
+    add r3, r1, r2, lsr #32
+    add r3, r1, r2, asr #32
+@ CHECK: add   r3, r1, r2, lsr #32     @ encoding: [0x22,0x30,0x81,0xe0]
+@ CHECK: add   r3, r1, r2, asr #32     @ encoding: [0x42,0x30,0x81,0xe0]
+
+@------------------------------------------------------------------------------
+@ ADDS
+@------------------------------------------------------------------------------
+    adds r7, r8, #42, #2
+    adds r7, r8, #-2147483638
+    adds r7, r8, #40, #2
+    adds r7, r8, #(0xff << 16)
+
+@ CHECK: adds   r7, r8, #-2147483638      @ encoding: [0x2a,0x71,0x98,0xe2]
+@ CHECK: adds   r7, r8, #-2147483638      @ encoding: [0x2a,0x71,0x98,0xe2]
+@ CHECK: adds   r7, r8, #40, #2           @ encoding: [0x28,0x71,0x98,0xe2]
+@ CHECK: adds  r7, r8, #16711680         @ encoding: [0xff,0x78,0x98,0xe2]
 
 @------------------------------------------------------------------------------
 @ AND
 @------------------------------------------------------------------------------
 
 @------------------------------------------------------------------------------
 @ 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 r7, r8, #42, #2
+    and r7, r8, #-2147483638
+    and r7, r8, #40, #2
+    and r7, r8, #(0xff << 16)
+    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
+    and r2, r3, #0x7fffffff
+
+    @ 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, #15            @ encoding: [0x0f,0xa0,0x01,0xe2]
+@ CHECK: and    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x08,0xe2]
+@ CHECK: and    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x08,0xe2]
+@ CHECK: and    r7, r8, #40, #2         @ encoding: [0x28,0x71,0x08,0xe2]
+@ CHECK: and   r7, r8, #16711680       @ encoding: [0xff,0x78,0x08,0xe2]
 @ CHECK: and   r10, r1, r6             @ encoding: [0x06,0xa0,0x01,0xe0]
 @ CHECK: and   r10, r1, r6, lsl #10    @ encoding: [0x06,0xa5,0x01,0xe0]
 @ CHECK: and   r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0x01,0xe0]
 @ CHECK: and   r10, r1, r6             @ encoding: [0x06,0xa0,0x01,0xe0]
 @ CHECK: and   r10, r1, r6, lsl #10    @ encoding: [0x06,0xa5,0x01,0xe0]
 @ CHECK: and   r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0x01,0xe0]
@@ -226,6 +317,7 @@ _func:
 @ CHECK: and   r6, r7, r8, asr r2      @ encoding: [0x58,0x62,0x07,0xe0]
 @ CHECK: and   r6, r7, r8, ror r2      @ encoding: [0x78,0x62,0x07,0xe0]
 @ CHECK: and   r10, r1, r6, rrx        @ encoding: [0x66,0xa0,0x01,0xe0]
 @ CHECK: and   r6, r7, r8, asr r2      @ encoding: [0x58,0x62,0x07,0xe0]
 @ CHECK: and   r6, r7, r8, ror r2      @ encoding: [0x78,0x62,0x07,0xe0]
 @ CHECK: and   r10, r1, r6, rrx        @ encoding: [0x66,0xa0,0x01,0xe0]
+@ CHECK: bic   r2, r3, #-2147483648    @ encoding: [0x02,0x21,0xc3,0xe3]
 
 @ CHECK: and   r1, r1, #15             @ encoding: [0x0f,0x10,0x01,0xe2]
 @ CHECK: and   r10, r10, r1            @ encoding: [0x01,0xa0,0x0a,0xe0]
 
 @ CHECK: and   r1, r1, #15             @ encoding: [0x0f,0x10,0x01,0xe2]
 @ CHECK: and   r10, r10, r1            @ encoding: [0x01,0xa0,0x0a,0xe0]
@@ -240,50 +332,105 @@ _func:
 @ CHECK: and   r6, r6, r7, ror r2      @ encoding: [0x77,0x62,0x06,0xe0]
 @ CHECK: and   r10, r10, r1, rrx       @ encoding: [0x61,0xa0,0x0a,0xe0]
 
 @ CHECK: and   r6, r6, r7, ror r2      @ encoding: [0x77,0x62,0x06,0xe0]
 @ CHECK: and   r10, r10, r1, rrx       @ encoding: [0x61,0xa0,0x0a,0xe0]
 
+    @ Test right shift by 32, which is encoded as 0
+    and r3, r1, r2, lsr #32
+    and r3, r1, r2, asr #32
+@ CHECK: and   r3, r1, r2, lsr #32     @ encoding: [0x22,0x30,0x01,0xe0]
+@ CHECK: and   r3, r1, r2, asr #32     @ encoding: [0x42,0x30,0x01,0xe0]
+
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
-@ FIXME: ASR
+@ ASR
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
+       asr r2, r4, #32
+       asr r2, r4, #2
+       asr r2, r4, #0
+       asr r4, #2
+
+@ CHECK: asr   r2, r4, #32             @ encoding: [0x44,0x20,0xa0,0xe1]
+@ CHECK: asr   r2, r4, #2              @ encoding: [0x44,0x21,0xa0,0xe1]
+@ CHECK: mov   r2, r4                  @ encoding: [0x04,0x20,0xa0,0xe1]
+@ CHECK: asr   r4, r4, #2              @ encoding: [0x44,0x41,0xa0,0xe1]
+
+
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
-@ FIXME: B
+@ B
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
+        b _bar
+        beq _baz
+
+@ CHECK: b     _bar                    @ encoding: [A,A,A,0xea]
+@ CHECK: @   fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbranch
+@ CHECK-BE: b  _bar                    @ encoding: [0xea,A,A,A]
+@ CHECK-BE: @   fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbranch
+@ CHECK: beq   _baz                    @ encoding: [A,A,A,0x0a]
+@ CHECK: @   fixup A - offset: 0, value: _baz, kind: fixup_arm_condbranch
+@ CHECK-BE: beq        _baz                    @ encoding: [0x0a,A,A,A]
+@ CHECK-BE: @   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
 @------------------------------------------------------------------------------
-  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 r7, r8, #42, #2
+        bic r7, r8, #-2147483638
+        bic r7, r8, #40, #2
+        bic r7, r8, #(0xff << 16)
+        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 r7, #42, #2
+        bic r7, #-2147483638
+        bic r7, #40, #2
+        bic r7, #(0xff << 16)
+        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, #15            @ encoding: [0x0f,0xa0,0xc1,0xe3]
+@ CHECK: bic    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0xc8,0xe3]
+@ CHECK: bic    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0xc8,0xe3]
+@ CHECK: bic    r7, r8, #40, #2         @ encoding: [0x28,0x71,0xc8,0xe3]
+@ CHECK: bic   r7, r8, #16711680       @ encoding: [0xff,0x78,0xc8,0xe3]
 @ CHECK: bic   r10, r1, r6             @ encoding: [0x06,0xa0,0xc1,0xe1]
 @ CHECK: bic   r10, r1, r6, lsl #10    @ encoding: [0x06,0xa5,0xc1,0xe1]
 @ CHECK: bic   r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0xc1,0xe1]
 @ CHECK: bic   r10, r1, r6             @ encoding: [0x06,0xa0,0xc1,0xe1]
 @ CHECK: bic   r10, r1, r6, lsl #10    @ encoding: [0x06,0xa5,0xc1,0xe1]
 @ CHECK: bic   r10, r1, r6, lsr #10    @ encoding: [0x26,0xa5,0xc1,0xe1]
@@ -298,6 +445,10 @@ _func:
 
 
 @ CHECK: bic   r1, r1, #15             @ encoding: [0x0f,0x10,0xc1,0xe3]
 
 
 @ CHECK: bic   r1, r1, #15             @ encoding: [0x0f,0x10,0xc1,0xe3]
+@ CHECK: bic    r7, r7, #-2147483638    @ encoding: [0x2a,0x71,0xc7,0xe3]
+@ CHECK: bic    r7, r7, #-2147483638    @ encoding: [0x2a,0x71,0xc7,0xe3]
+@ CHECK: bic    r7, r7, #40, #2         @ encoding: [0x28,0x71,0xc7,0xe3]
+@ CHECK: bic   r7, r7, #16711680       @ encoding: [0xff,0x78,0xc7,0xe3]
 @ CHECK: bic   r10, r10, r1            @ encoding: [0x01,0xa0,0xca,0xe1]
 @ CHECK: bic   r10, r10, r1, lsl #10   @ encoding: [0x01,0xa5,0xca,0xe1]
 @ CHECK: bic   r10, r10, r1, lsr #10   @ encoding: [0x21,0xa5,0xca,0xe1]
 @ CHECK: bic   r10, r10, r1            @ encoding: [0x01,0xa0,0xca,0xe1]
 @ CHECK: bic   r10, r10, r1, lsl #10   @ encoding: [0x01,0xa5,0xca,0xe1]
 @ CHECK: bic   r10, r10, r1, lsr #10   @ encoding: [0x21,0xa5,0xca,0xe1]
@@ -310,11 +461,17 @@ _func:
 @ CHECK: bic   r6, r6, r7, ror r2      @ encoding: [0x77,0x62,0xc6,0xe1]
 @ CHECK: bic   r10, r10, r1, rrx       @ encoding: [0x61,0xa0,0xca,0xe1]
 
 @ CHECK: bic   r6, r6, r7, ror r2      @ encoding: [0x77,0x62,0xc6,0xe1]
 @ CHECK: bic   r10, r10, r1, rrx       @ encoding: [0x61,0xa0,0xca,0xe1]
 
+    @ Test right shift by 32, which is encoded as 0
+    bic r3, r1, r2, lsr #32
+    bic r3, r1, r2, asr #32
+@ CHECK: bic   r3, r1, r2, lsr #32     @ encoding: [0x22,0x30,0xc1,0xe1]
+@ CHECK: bic   r3, r1, r2, asr #32     @ encoding: [0x42,0x30,0xc1,0xe1]
+
 @------------------------------------------------------------------------------
 @ BKPT
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ 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]
 
 @ CHECK: bkpt  #10                      @ encoding: [0x7a,0x00,0x20,0xe1]
 @ CHECK: bkpt  #65535                   @ encoding: [0x7f,0xff,0x2f,0xe1]
@@ -323,17 +480,33 @@ _func:
 @ BL/BLX (immediate)
 @------------------------------------------------------------------------------
 
 @ BL/BLX (immediate)
 @------------------------------------------------------------------------------
 
-  bl _bar
-  @ FIXME: blx _bar
+        bl _bar
+        bleq _bar
+        blx _bar
+        blls #28634268
+        blx    #32424576
+        blx    #16212288
 
 @ CHECK: bl  _bar @ encoding: [A,A,A,0xeb]
 
 @ CHECK: bl  _bar @ encoding: [A,A,A,0xeb]
-@ CHECK:   @   fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbranch
-
+@ CHECK:   @   fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbl
+@ CHECK-BE: bl  _bar @ encoding: [0xeb,A,A,A]
+@ CHECK-BE:   @   fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbl
+@ CHECK: bleq  _bar @ encoding: [A,A,A,0x0b]
+@ CHECK:   @   fixup A - offset: 0, value: _bar, kind: fixup_arm_condbl
+@ CHECK-BE: bleq  _bar @ encoding: [0x0b,A,A,A]
+@ CHECK-BE:   @   fixup A - offset: 0, value: _bar, kind: fixup_arm_condbl
+@ CHECK: blx   _bar @ encoding: [A,A,A,0xfa]
+@ CHECK:   @   fixup A - offset: 0, value: _bar, kind: fixup_arm_blx
+@ CHECK-BE: blx        _bar @ encoding: [0xfa,A,A,A]
+@ CHECK-BE:   @   fixup A - offset: 0, value: _bar, kind: fixup_arm_blx
+@ 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 (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]
 
 @ CHECK: blx r2                         @ encoding: [0x32,0xff,0x2f,0xe1]
 @ CHECK: blxne r2                       @ encoding: [0x32,0xff,0x2f,0x11]
@@ -341,9 +514,8 @@ _func:
 @------------------------------------------------------------------------------
 @ BX
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ 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]
 
 @ CHECK: bx    r2                      @ encoding: [0x12,0xff,0x2f,0xe1]
 @ CHECK: bxne  r2                      @ encoding: [0x12,0xff,0x2f,0x11]
@@ -351,32 +523,31 @@ _func:
 @------------------------------------------------------------------------------
 @ BXJ
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ 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]
 
 
 @ CHECK: bxj   r2                      @ encoding: [0x22,0xff,0x2f,0xe1]
 @ CHECK: bxjne r2                      @ encoding: [0x22,0xff,0x2f,0x11]
 
-@------------------------------------------------------------------------------
-@ FIXME: CBNZ/CBZ
-@------------------------------------------------------------------------------
-
 
 @------------------------------------------------------------------------------
 @ CDP/CDP2
 @------------------------------------------------------------------------------
 
 @------------------------------------------------------------------------------
 @ 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
+        cdp2   p12, #0, c6, c12, c0, #7
 
 @ 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]
 
 @ 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]
+@ CHECK: cdp2  p12, #0, c6, c12, c0, #7   @ encoding: [0xe0,0x6c,0x0c,0xfe]
 
 
+        cdpne  p7, #1, c1, c1, c1, #4
+@ CHECK: cdpne  p7, #1, c1, c1, c1, #4     @ encoding: [0x81,0x17,0x11,0x1e]
 
 @------------------------------------------------------------------------------
 @ CLREX
 @------------------------------------------------------------------------------
 
 @------------------------------------------------------------------------------
 @ CLREX
 @------------------------------------------------------------------------------
-  clrex
+        clrex
 
 @ CHECK: clrex                           @ encoding: [0x1f,0xf0,0x7f,0xf5]
 
 
 @ CHECK: clrex                           @ encoding: [0x1f,0xf0,0x7f,0xf5]
 
@@ -384,8 +555,8 @@ _func:
 @------------------------------------------------------------------------------
 @ CLZ
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ 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]
 
 @ CHECK: clz r1, r2                      @ encoding: [0x12,0x1f,0x6f,0xe1]
 @ CHECK: clzeq r1, r2                    @ encoding: [0x12,0x1f,0x6f,0x01]
@@ -393,20 +564,28 @@ _func:
 @------------------------------------------------------------------------------
 @ CMN
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ 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 r7, #42, #2
+        cmn r7, #-2147483638
+        cmn r7, #40, #2
+        cmn r7, #(0xff << 16)
+        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, #15                 @ encoding: [0x0f,0x00,0x71,0xe3]
+@ CHECK: cmn   r7, #-2147483638        @ encoding: [0x2a,0x01,0x77,0xe3]
+@ CHECK: cmn   r7, #-2147483638        @ encoding: [0x2a,0x01,0x77,0xe3]
+@ CHECK: cmn   r7, #40, #2             @ encoding: [0x28,0x01,0x77,0xe3]
+@ CHECK: cmn   r7, #16711680           @ encoding: [0xff,0x08,0x77,0xe3]
 @ CHECK: cmn   r1, r6                  @ encoding: [0x06,0x00,0x71,0xe1]
 @ CHECK: cmn   r1, r6, lsl #10         @ encoding: [0x06,0x05,0x71,0xe1]
 @ CHECK: cmn   r1, r6, lsr #10         @ encoding: [0x26,0x05,0x71,0xe1]
 @ CHECK: cmn   r1, r6                  @ encoding: [0x06,0x00,0x71,0xe1]
 @ CHECK: cmn   r1, r6, lsl #10         @ encoding: [0x06,0x05,0x71,0xe1]
 @ CHECK: cmn   r1, r6, lsr #10         @ encoding: [0x26,0x05,0x71,0xe1]
@@ -422,20 +601,30 @@ _func:
 @------------------------------------------------------------------------------
 @ CMP
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ 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 r7, #42, #2
+        cmp r7, #-2147483638
+        cmp r7, #40, #2
+        cmp r7, #(0xff << 16)
+        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 r0, #-2
+        cmp lr, #0
 
 @ CHECK: cmp   r1, #15                 @ encoding: [0x0f,0x00,0x51,0xe3]
 
 @ CHECK: cmp   r1, #15                 @ encoding: [0x0f,0x00,0x51,0xe3]
+@ CHECK: cmp   r7, #-2147483638        @ encoding: [0x2a,0x01,0x57,0xe3]
+@ CHECK: cmp   r7, #-2147483638        @ encoding: [0x2a,0x01,0x57,0xe3]
+@ CHECK: cmp    r7, #40, #2             @ encoding: [0x28,0x01,0x57,0xe3]
+@ CHECK: cmp   r7, #16711680           @ encoding: [0xff,0x08,0x57,0xe3]
 @ CHECK: cmp   r1, r6                  @ encoding: [0x06,0x00,0x51,0xe1]
 @ CHECK: cmp   r1, r6, lsl #10         @ encoding: [0x06,0x05,0x51,0xe1]
 @ CHECK: cmp   r1, r6, lsr #10         @ encoding: [0x26,0x05,0x51,0xe1]
 @ CHECK: cmp   r1, r6                  @ encoding: [0x06,0x00,0x51,0xe1]
 @ CHECK: cmp   r1, r6, lsl #10         @ encoding: [0x06,0x05,0x51,0xe1]
 @ CHECK: cmp   r1, r6, lsr #10         @ encoding: [0x26,0x05,0x51,0xe1]
@@ -447,13 +636,28 @@ _func:
 @ CHECK: cmp   r7, r8, asr r2          @ encoding: [0x58,0x02,0x57,0xe1]
 @ CHECK: cmp   r7, r8, ror r2          @ encoding: [0x78,0x02,0x57,0xe1]
 @ CHECK: cmp   r1, r6, rrx             @ encoding: [0x66,0x00,0x51,0xe1]
 @ CHECK: cmp   r7, r8, asr r2          @ encoding: [0x58,0x02,0x57,0xe1]
 @ CHECK: cmp   r7, r8, ror r2          @ encoding: [0x78,0x02,0x57,0xe1]
 @ CHECK: cmp   r1, r6, rrx             @ encoding: [0x66,0x00,0x51,0xe1]
+@ CHECK: cmn   r0, #2                  @ encoding: [0x02,0x00,0x70,0xe3]
+@ CHECK: cmp  lr, #0                    @ encoding: [0x00,0x00,0x5e,0xe3]
+
+
+@------------------------------------------------------------------------------
+@ 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
 @------------------------------------------------------------------------------
-  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]
 
 @ CHECK: dbg #0                         @ encoding: [0xf0,0xf0,0x20,0xe3]
 @ CHECK: dbg #5                         @ encoding: [0xf5,0xf0,0x20,0xe3]
@@ -463,19 +667,53 @@ _func:
 @------------------------------------------------------------------------------
 @ DMB
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ 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 #0xf
+        dmb #0xe
+        dmb #0xd
+        dmb #0xc
+        dmb #0xb
+        dmb #0xa
+        dmb #0x9
+        dmb #0x8
+        dmb #0x7
+        dmb #0x6
+        dmb #0x5
+        dmb #0x4
+        dmb #0x3
+        dmb #0x2
+        dmb #0x1
+        dmb #0x0
+
+        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]
+@ CHECK: dmb   #0xd                    @ encoding: [0x5d,0xf0,0x7f,0xf5]
+@ CHECK: dmb   #0xc                    @ encoding: [0x5c,0xf0,0x7f,0xf5]
+@ CHECK: dmb   ish                     @ encoding: [0x5b,0xf0,0x7f,0xf5]
+@ CHECK: dmb   ishst                   @ encoding: [0x5a,0xf0,0x7f,0xf5]
+@ CHECK: dmb   #0x9                    @ encoding: [0x59,0xf0,0x7f,0xf5]
+@ CHECK: dmb   #0x8                    @ encoding: [0x58,0xf0,0x7f,0xf5]
+@ CHECK: dmb   nsh                     @ encoding: [0x57,0xf0,0x7f,0xf5]
+@ CHECK: dmb   nshst                   @ encoding: [0x56,0xf0,0x7f,0xf5]
+@ CHECK: dmb   #0x5                    @ encoding: [0x55,0xf0,0x7f,0xf5]
+@ CHECK: dmb   #0x4                    @ encoding: [0x54,0xf0,0x7f,0xf5]
+@ CHECK: dmb   osh                     @ encoding: [0x53,0xf0,0x7f,0xf5]
+@ CHECK: dmb   oshst                   @ encoding: [0x52,0xf0,0x7f,0xf5]
+@ CHECK: dmb   #0x1                    @ encoding: [0x51,0xf0,0x7f,0xf5]
+@ CHECK: dmb   #0x0                    @ encoding: [0x50,0xf0,0x7f,0xf5]
 
 @ CHECK: dmb   sy                      @ encoding: [0x5f,0xf0,0x7f,0xf5]
 @ CHECK: dmb   st                      @ encoding: [0x5e,0xf0,0x7f,0xf5]
 
 @ CHECK: dmb   sy                      @ encoding: [0x5f,0xf0,0x7f,0xf5]
 @ CHECK: dmb   st                      @ encoding: [0x5e,0xf0,0x7f,0xf5]
@@ -494,19 +732,59 @@ _func:
 @------------------------------------------------------------------------------
 @ DSB
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ 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 #0xf
+        dsb #0xe
+        dsb #0xd
+        dsb #0xc
+        dsb #0xb
+        dsb #0xa
+        dsb #0x9
+        dsb #0x8
+        dsb #0x7
+        dsb #0x6
+        dsb #0x5
+        dsb #0x4
+        dsb #0x3
+        dsb #0x2
+        dsb #0x1
+        dsb #0x0
+
+        dsb 8
+        dsb 7
+
+        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]
+@ CHECK: dsb   #0xd                    @ encoding: [0x4d,0xf0,0x7f,0xf5]
+@ CHECK: dsb   #0xc                    @ encoding: [0x4c,0xf0,0x7f,0xf5]
+@ CHECK: dsb   ish                     @ encoding: [0x4b,0xf0,0x7f,0xf5]
+@ CHECK: dsb   ishst                   @ encoding: [0x4a,0xf0,0x7f,0xf5]
+@ CHECK: dsb   #0x9                    @ encoding: [0x49,0xf0,0x7f,0xf5]
+@ CHECK: dsb   #0x8                    @ encoding: [0x48,0xf0,0x7f,0xf5]
+@ CHECK: dsb   nsh                     @ encoding: [0x47,0xf0,0x7f,0xf5]
+@ CHECK: dsb   nshst                   @ encoding: [0x46,0xf0,0x7f,0xf5]
+@ CHECK: dsb   #0x5                    @ encoding: [0x45,0xf0,0x7f,0xf5]
+@ CHECK: dsb   #0x4                    @ encoding: [0x44,0xf0,0x7f,0xf5]
+@ CHECK: dsb   osh                     @ encoding: [0x43,0xf0,0x7f,0xf5]
+@ CHECK: dsb   oshst                   @ encoding: [0x42,0xf0,0x7f,0xf5]
+@ CHECK: dsb   #0x1                    @ encoding: [0x41,0xf0,0x7f,0xf5]
+@ CHECK: dsb   #0x0                    @ encoding: [0x40,0xf0,0x7f,0xf5]
+
+@ CHECK: dsb   #0x8                    @ encoding: [0x48,0xf0,0x7f,0xf5]
+@ CHECK: dsb   nsh                     @ encoding: [0x47,0xf0,0x7f,0xf5]
 
 @ CHECK: dsb   sy                      @ encoding: [0x4f,0xf0,0x7f,0xf5]
 @ CHECK: dsb   st                      @ encoding: [0x4e,0xf0,0x7f,0xf5]
 
 @ CHECK: dsb   sy                      @ encoding: [0x4f,0xf0,0x7f,0xf5]
 @ CHECK: dsb   st                      @ encoding: [0x4e,0xf0,0x7f,0xf5]
@@ -522,37 +800,51 @@ _func:
 @ CHECK: dsb   oshst                   @ encoding: [0x42,0xf0,0x7f,0xf5]
 @ CHECK: dsb   sy                      @ encoding: [0x4f,0xf0,0x7f,0xf5]
 
 @ CHECK: dsb   oshst                   @ encoding: [0x42,0xf0,0x7f,0xf5]
 @ CHECK: dsb   sy                      @ encoding: [0x4f,0xf0,0x7f,0xf5]
 
+@ With capitals
+        dsb SY
+        dsb OSHST
+
+@ CHECK: dsb   sy                      @ encoding: [0x4f,0xf0,0x7f,0xf5]
+@ CHECK: dsb   oshst                   @ encoding: [0x42,0xf0,0x7f,0xf5]
 @------------------------------------------------------------------------------
 @ EOR
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ 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 r7, r8, #42, #2
+        eor r7, r8, #-2147483638
+        eor r7, r8, #40, #2
+        eor r7, r8, #(0xff << 16)
+        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, #61440          @ encoding: [0x0f,0x4a,0x25,0xe2]
+@ CHECK: eor    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x28,0xe2]
+@ CHECK: eor    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x28,0xe2]
+@ CHECK: eor    r7, r8, #40, #2         @ encoding: [0x28,0x71,0x28,0xe2]
+@ CHECK: eor   r7, r8, #16711680       @ encoding: [0xff,0x78,0x28,0xe2]
 @ CHECK: eor   r4, r5, r6              @ encoding: [0x06,0x40,0x25,0xe0]
 @ CHECK: eor   r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x25,0xe0]
 @ CHECK: eor   r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x25,0xe0]
 @ CHECK: eor   r4, r5, r6              @ encoding: [0x06,0x40,0x25,0xe0]
 @ CHECK: eor   r4, r5, r6, lsl #5      @ encoding: [0x86,0x42,0x25,0xe0]
 @ CHECK: eor   r4, r5, r6, lsr #5      @ encoding: [0xa6,0x42,0x25,0xe0]
@@ -579,16 +871,110 @@ _func:
 @ CHECK: eor   r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x26,0xe0]
 @ CHECK: eor   r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x24,0xe0]
 
 @ CHECK: eor   r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x26,0xe0]
 @ CHECK: eor   r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x24,0xe0]
 
+    @ Test right shift by 32, which is encoded as 0
+    eor r3, r1, r2, lsr #32
+    eor r3, r1, r2, asr #32
+@ CHECK: eor   r3, r1, r2, lsr #32     @ encoding: [0x22,0x30,0x21,0xe0]
+@ CHECK: eor   r3, r1, r2, asr #32     @ encoding: [0x42,0x30,0x21,0xe0]
 
 @------------------------------------------------------------------------------
 @ ISB
 @------------------------------------------------------------------------------
         isb sy
         isb
 
 @------------------------------------------------------------------------------
 @ ISB
 @------------------------------------------------------------------------------
         isb sy
         isb
+        isb #15
+        isb #1
 
 @ CHECK: isb sy                         @ encoding: [0x6f,0xf0,0x7f,0xf5]
 @ CHECK: isb sy                         @ encoding: [0x6f,0xf0,0x7f,0xf5]
 
 @ CHECK: isb sy                         @ encoding: [0x6f,0xf0,0x7f,0xf5]
 @ CHECK: isb sy                         @ encoding: [0x6f,0xf0,0x7f,0xf5]
-
+@ CHECK: isb sy                         @ encoding: [0x6f,0xf0,0x7f,0xf5]
+@ CHECK: isb #0x1                       @ encoding: [0x61,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 p0, c2, [r11], #16
+        ldc2l p1, 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 p0, c2, [r11], #16      @ encoding: [0x04,0x20,0xfb,0xfc]
+@ CHECK: ldc2l p1, c3, [r12], #-72     @ encoding: [0x12,0x31,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]
 
 
 @------------------------------------------------------------------------------
 
 
 @------------------------------------------------------------------------------
@@ -607,6 +993,10 @@ _func:
         ldmda     r2!, {r1,r3-r6,sp}
         ldmdb     r2!, {r1,r3-r6,sp}
 
         ldmda     r2!, {r1,r3-r6,sp}
         ldmdb     r2!, {r1,r3-r6,sp}
 
+        @ system version
+        ldm r0, {r0, r2, lr}^
+        ldm sp!, {r0-r3, pc}^
+
 @ CHECK: ldm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe8]
 @ CHECK: ldm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe8]
 @ CHECK: ldmib r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe9]
 @ CHECK: ldm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe8]
 @ CHECK: ldm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe8]
 @ CHECK: ldmib r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x92,0xe9]
@@ -618,10 +1008,9 @@ _func:
 @ CHECK: ldmib r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xb2,0xe9]
 @ 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]
 @ CHECK: ldmib r2!, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0xb2,0xe9]
 @ 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]
+@ CHECK: ldm   r0, {r0, r2, lr} ^          @ encoding: [0x05,0x40,0xd0,0xe8]
+@ CHECK: ldm   sp!, {r0, r1, r2, r3, pc} ^ @ encoding: [0x0f,0x80,0xfd,0xe8]
 
 
-@------------------------------------------------------------------------------
-@ FIXME: LDR*
-@------------------------------------------------------------------------------
 
 @------------------------------------------------------------------------------
 @ LDREX/LDREXB/LDREXH/LDREXD
 
 @------------------------------------------------------------------------------
 @ LDREX/LDREXB/LDREXH/LDREXD
@@ -636,13 +1025,42 @@ _func:
 @ CHECK: ldrex r1, [r7]                @ encoding: [0x9f,0x1f,0x97,0xe1]
 @ CHECK: ldrexd        r6, r7, [r8]            @ encoding: [0x9f,0x6f,0xb8,0xe1]
 
 @ CHECK: ldrex r1, [r7]                @ encoding: [0x9f,0x1f,0x97,0xe1]
 @ CHECK: ldrexd        r6, r7, [r8]            @ encoding: [0x9f,0x6f,0xb8,0xe1]
 
+@------------------------------------------------------------------------------
+@ 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
+@ LSL
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
+       lsl r2, r4, #31
+       lsl r2, r4, #1
+       lsl r2, r4, #0
+       lsl r4, #1
+
+@ CHECK: lsl   r2, r4, #31             @ encoding: [0x84,0x2f,0xa0,0xe1]
+@ CHECK: lsl   r2, r4, #1              @ encoding: [0x84,0x20,0xa0,0xe1]
+@ CHECK: mov   r2, r4                  @ encoding: [0x04,0x20,0xa0,0xe1]
+@ CHECK: lsl   r4, r4, #1              @ encoding: [0x84,0x40,0xa0,0xe1]
+
+
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
-@ FIXME: LSR
+@ LSR
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
+       lsr r2, r4, #32
+       lsr r2, r4, #2
+       lsr r2, r4, #0
+       lsr r4, #2
+
+@ CHECK: lsr   r2, r4, #32             @ encoding: [0x24,0x20,0xa0,0xe1]
+@ CHECK: lsr   r2, r4, #2              @ encoding: [0x24,0x21,0xa0,0xe1]
+@ CHECK: mov   r2, r4                  @ encoding: [0x04,0x20,0xa0,0xe1]
+@ CHECK: lsr   r4, r4, #2              @ encoding: [0x24,0x41,0xa0,0xe1]
+
 
 @------------------------------------------------------------------------------
 @ MCR/MCR2
 
 @------------------------------------------------------------------------------
 @ MCR/MCR2
@@ -650,8 +1068,11 @@ _func:
         mcr  p7, #1, r5, c1, c1, #4
         mcr2  p7, #1, r5, c1, c1, #4
 
         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]
+
+        mcrls  p7, #1, r5, c1, c1, #4
+@ CHECK: mcrls  p7, #1, r5, c1, c1, #4   @ encoding: [0x91,0x57,0x21,0x9e]
 
 @------------------------------------------------------------------------------
 @ MCRR/MCRR2
 
 @------------------------------------------------------------------------------
 @ MCRR/MCRR2
@@ -659,9 +1080,11 @@ _func:
         mcrr  p7, #15, r5, r4, c1
         mcrr2  p7, #15, r5, r4, c1
 
         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]
 
 
+        mcrrgt  p7, #15, r5, r4, c1
+@ CHECK: mcrrgt  p7, #15, r5, r4, c1     @ encoding: [0xf1,0x57,0x44,0xcc]
 
 @------------------------------------------------------------------------------
 @ MLA
 
 @------------------------------------------------------------------------------
 @ MLA
@@ -671,10 +1094,10 @@ _func:
         mlane  r1,r2,r3,r4
         mlasne r1,r2,r3,r4
 
         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
 
 @------------------------------------------------------------------------------
 @ MLS
@@ -688,18 +1111,36 @@ _func:
 @------------------------------------------------------------------------------
 @ MOV (immediate)
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ 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
+        mov r3, #7
+        mov r4, #0xff0
+        mov r5, #0xff0000
+        mov r7, #0, #2
+        mov r7, #42, #0
+        mov r7, #40, #2
+        mov r7, #42, #10
+        mov r7, #42, #30
+        mov r7, #42, #2
+        mov r7, #-2147483638
+        mov pc, #42, #2
+       mov r7, #(0xff << 16)
+        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: 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: mov    r7, #0, #2              @ encoding: [0x00,0x71,0xa0,0xe3]
+@ CHECK: mov    r7, #42                 @ encoding: [0x2a,0x70,0xa0,0xe3]
+@ CHECK: mov    r7, #40, #2             @ encoding: [0x28,0x71,0xa0,0xe3]
+@ CHECK: mov    r7, #176160768          @ encoding: [0x2a,0x75,0xa0,0xe3]
+@ CHECK: mov    r7, #42, #30            @ encoding: [0x2a,0x7f,0xa0,0xe3]
+@ CHECK: mov    r7, #-2147483638        @ encoding: [0x2a,0x71,0xa0,0xe3]
+@ CHECK: mov    r7, #-2147483638        @ encoding: [0x2a,0x71,0xa0,0xe3]
+@ CHECK: mov    pc, #2147483658         @ encoding: [0x2a,0xf1,0xa0,0xe3]
+@ CHECK: mov   r7, #16711680           @ encoding: [0xff,0x78,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: 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]
@@ -713,18 +1154,35 @@ _func:
         movs r2, r3
         moveq r2, r3
         movseq r2, r3
         movs r2, r3
         moveq r2, r3
         movseq r2, r3
+        mov r12, r8, lsl #(2 - 2)
+        lsl r2, r3, #(2 - 2)
+        mov r12, r8, lsr #(2 - 2)
+        lsr r2, r3, #(2 - 2)
+        mov r12, r8, asr #(2 - 2)
+        asr r2, r3, #(2 - 2)
+        mov r12, r8, ror #(2 - 2)
+        ror r2, r3, #(2 - 2)
 
 @ 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]
 
 @ 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]
+@ CHECK: mov   r12, r8                 @ encoding: [0x08,0xc0,0xa0,0xe1]
+@ CHECK: mov   r2, r3                  @ encoding: [0x03,0x20,0xa0,0xe1]
+@ CHECK: mov   r12, r8                 @ encoding: [0x08,0xc0,0xa0,0xe1]
+@ CHECK: mov   r2, r3                  @ encoding: [0x03,0x20,0xa0,0xe1]
+@ CHECK: mov   r12, r8                 @ encoding: [0x08,0xc0,0xa0,0xe1]
+@ CHECK: mov   r2, r3                  @ encoding: [0x03,0x20,0xa0,0xe1]
+@ CHECK: mov   r12, r8                 @ encoding: [0x08,0xc0,0xa0,0xe1]
+@ CHECK: mov   r2, r3                  @ encoding: [0x03,0x20,0xa0,0xe1]
+
 
 @------------------------------------------------------------------------------
 @ MOVT
 @------------------------------------------------------------------------------
 
 @------------------------------------------------------------------------------
 @ MOVT
 @------------------------------------------------------------------------------
-    movt r3, #7
-    movt r6, #0xffff
-    movteq r4, #0xff0
+        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: movt  r3, #7                  @ encoding: [0x07,0x30,0x40,0xe3]
 @ CHECK: movt  r6, #65535              @ encoding: [0xff,0x6f,0x4f,0xe3]
@@ -735,10 +1193,17 @@ _func:
 @ MRC/MRC2
 @------------------------------------------------------------------------------
         mrc  p14, #0, r1, c1, c2, #4
 @ MRC/MRC2
 @------------------------------------------------------------------------------
         mrc  p14, #0, r1, c1, c2, #4
+        mrc  p15, #7, apsr_nzcv, c15, c6, #6
         mrc2  p14, #0, r1, c1, c2, #4
         mrc2  p14, #0, r1, c1, c2, #4
+        mrc2  p9, #7, apsr_nzcv, c15, c0, #1
 
 
-@ 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]
+@ CHECK: mrc  p14, #0, r1, c1, c2, #4             @ encoding: [0x92,0x1e,0x11,0xee]
+@ CHECK: mrc  p15, #7, apsr_nzcv, c15, c6, #6     @ encoding: [0xd6,0xff,0xff,0xee]
+@ CHECK: mrc2  p14, #0, r1, c1, c2, #4            @ encoding: [0x92,0x1e,0x11,0xfe]
+@ CHECK: mrc2  p9, #7, apsr_nzcv, c15, c0, #1     @ encoding: [0x30,0xf9,0xff,0xfe]
+
+         mrceq  p15, #7, apsr_nzcv, c15, c6, #6
+@ CHECK: mrceq  p15, #7, apsr_nzcv, c15, c6, #6   @ encoding: [0xd6,0xff,0xff,0x0e]
 
 @------------------------------------------------------------------------------
 @ MRRC/MRRC2
 
 @------------------------------------------------------------------------------
 @ MRRC/MRRC2
@@ -749,6 +1214,8 @@ _func:
 @ CHECK: mrrc  p7, #1, r5, r4, c1       @ encoding: [0x11,0x57,0x54,0xec]
 @ CHECK: mrrc2  p7, #1, r5, r4, c1      @ encoding: [0x11,0x57,0x54,0xfc]
 
 @ CHECK: mrrc  p7, #1, r5, r4, c1       @ encoding: [0x11,0x57,0x54,0xec]
 @ CHECK: mrrc2  p7, #1, r5, r4, c1      @ encoding: [0x11,0x57,0x54,0xfc]
 
+        mrrclo  p7, #1, r5, r4, c1
+@ CHECK: mrrclo  p7, #1, r5, r4, c1      @ encoding: [0x11,0x57,0x54,0x3c]
 
 @------------------------------------------------------------------------------
 @ MRS
 
 @------------------------------------------------------------------------------
 @ MRS
@@ -756,9 +1223,9 @@ _func:
         mrs  r8, apsr
         mrs  r8, cpsr
         mrs  r8, spsr
         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]
+@ 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]
 
 
 
 
 
 
@@ -780,8 +1247,12 @@ _func:
         msr  spsr_fc, #5
         msr  SPSR_fsxc, #5
         msr  cpsr_fsxc, #5
         msr  spsr_fc, #5
         msr  SPSR_fsxc, #5
         msr  cpsr_fsxc, #5
+        msr  APSR_nzcvq, #42, #2
+       msr  apsr_nzcvqg, #(0xff << 16)
+        msr  apsr_nzcvqg, #2147483658
+        msr  SPSR_fsxc, #40, #2
 
 
-@ CHECK: msr   CPSR_fc, #5             @ encoding: [0x05,0xf0,0x29,0xe3]
+@ 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_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]
@@ -795,6 +1266,10 @@ _func:
 @ 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]
 @ 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]
+@ CHECK: msr    APSR_nzcvq, #2147483658 @ encoding: [0x2a,0xf1,0x28,0xe3]
+@ CHECK: msr   APSR_nzcvqg, #16711680  @ encoding: [0xff,0xf8,0x2c,0xe3]
+@ CHECK: msr    APSR_nzcvqg, #2147483658 @ encoding: [0x2a,0xf1,0x2c,0xe3]
+@ CHECK: msr    SPSR_fsxc, #40, #2      @ encoding: [0x28,0xf1,0x6f,0xe3]
 
         msr  apsr, r0
         msr  apsr_g, r0
 
         msr  apsr, r0
         msr  apsr_g, r0
@@ -811,29 +1286,29 @@ _func:
         msr  SPSR_fsxc, r0
         msr  cpsr_fsxc, r0
 
         msr  SPSR_fsxc, r0
         msr  cpsr_fsxc, r0
 
-@ CHECK: msr  CPSR_fc, r0 @ encoding: [0x00,0xf0,0x29,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]
+@ 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
 @------------------------------------------------------------------------------
-
-  mul r5, r6, r7
-  muls r5, r6, r7
-  mulgt r5, r6, r7
-  mulsle r5, r6, r7
+        mul r5, r6, r7
+        muls r5, r6, r7
+        mulgt r5, r6, r7
+        mulsle r5, r6, r7
+        mul r11, r5
 
 @ CHECK: mul   r5, r6, r7              @ encoding: [0x96,0x07,0x05,0xe0]
 @ CHECK: muls  r5, r6, r7              @ encoding: [0x96,0x07,0x15,0xe0]
 
 @ CHECK: mul   r5, r6, r7              @ encoding: [0x96,0x07,0x05,0xe0]
 @ CHECK: muls  r5, r6, r7              @ encoding: [0x96,0x07,0x15,0xe0]
@@ -844,16 +1319,24 @@ _func:
 @------------------------------------------------------------------------------
 @ MVN (immediate)
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ MVN (immediate)
 @------------------------------------------------------------------------------
-    mvn r3, #7
-    mvn r4, #0xff0
-    mvn r5, #0xff0000
-    mvns r3, #7
-    mvneq r4, #0xff0
-    mvnseq r5, #0xff0000
+        mvn r3, #7
+        mvn r4, #0xff0
+        mvn r5, #0xff0000
+        mvn r7, #42, #2
+        mvn r7, #-2147483638
+        mvn r7, #40, #2
+       mvn r7, #(0xff << 16)
+        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: 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: mvn    r7, #-2147483638        @ encoding: [0x2a,0x71,0xe0,0xe3]
+@ CHECK: mvn    r7, #-2147483638        @ encoding: [0x2a,0x71,0xe0,0xe3]
+@ CHECK: mvn    r7, #40, #2             @ encoding: [0x28,0x71,0xe0,0xe3]
+@ CHECK: mvn   r7, #16711680           @ encoding: [0xff,0x78,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]
 @ 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]
@@ -896,12 +1379,22 @@ _func:
 @ CHECK: mvngt r5, r6, asr r7          @ encoding: [0x56,0x57,0xe0,0xc1]
 @ CHECK: mvnslt        r5, r6, ror r7          @ encoding: [0x76,0x57,0xf0,0xb1]
 
 @ CHECK: mvngt r5, r6, asr r7          @ encoding: [0x56,0x57,0xe0,0xc1]
 @ CHECK: mvnslt        r5, r6, ror r7          @ encoding: [0x76,0x57,0xf0,0xb1]
 
+@------------------------------------------------------------------------------
+@ NEG
+@------------------------------------------------------------------------------
+        neg r5, r8
+
+@ CHECK: rsb   r5, r8, #0              @ encoding: [0x00,0x50,0x68,0xe2]
+
+
 @------------------------------------------------------------------------------
 @ NOP
 @------------------------------------------------------------------------------
         nop
 @------------------------------------------------------------------------------
 @ NOP
 @------------------------------------------------------------------------------
         nop
+        nop.w
         nopgt
 
         nopgt
 
+@ CHECK: nop @ encoding: [0x00,0xf0,0x20,0xe3]
 @ CHECK: nop @ encoding: [0x00,0xf0,0x20,0xe3]
 @ CHECK: nopgt @ encoding: [0x00,0xf0,0x20,0xc3]
 
 @ CHECK: nop @ encoding: [0x00,0xf0,0x20,0xe3]
 @ CHECK: nopgt @ encoding: [0x00,0xf0,0x20,0xc3]
 
@@ -910,6 +1403,10 @@ _func:
 @ ORR
 @------------------------------------------------------------------------------
         orr r4, r5, #0xf000
 @ ORR
 @------------------------------------------------------------------------------
         orr r4, r5, #0xf000
+        orr r7, r8, #42, #2
+        orr r7, r8, #-2147483638
+        orr r7, r8, #40, #2
+       orr r7, r8, #(0xff << 16)
         orr r4, r5, r6
         orr r4, r5, r6, lsl #5
         orr r4, r5, r6, lsr #5
         orr r4, r5, r6
         orr r4, r5, r6, lsl #5
         orr r4, r5, r6, lsr #5
@@ -937,6 +1434,10 @@ _func:
         orr r4, r5, rrx
 
 @ CHECK: orr   r4, r5, #61440          @ encoding: [0x0f,0x4a,0x85,0xe3]
         orr r4, r5, rrx
 
 @ CHECK: orr   r4, r5, #61440          @ encoding: [0x0f,0x4a,0x85,0xe3]
+@ CHECK: orr    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x88,0xe3]
+@ CHECK: orr    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x88,0xe3]
+@ CHECK: orr    r7, r8, #40, #2         @ encoding: [0x28,0x71,0x88,0xe3]
+@ CHECK: orr   r7, r8, #16711680       @ encoding: [0xff,0x78,0x88,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              @ 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]
@@ -984,6 +1485,12 @@ _func:
 @ CHECK: orrslt        r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x96,0xb1]
 @ CHECK: orrsgt        r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x94,0xc1]
 
 @ CHECK: orrslt        r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x96,0xb1]
 @ CHECK: orrsgt        r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x94,0xc1]
 
+    @ Test right shift by 32, which is encoded as 0
+    orr r3, r1, r2, lsr #32
+    orr r3, r1, r2, asr #32
+@ CHECK: orr   r3, r1, r2, lsr #32     @ encoding: [0x22,0x30,0x81,0xe1]
+@ CHECK: orr   r3, r1, r2, asr #32     @ encoding: [0x42,0x30,0x81,0xe1]
+
 @------------------------------------------------------------------------------
 @ PKH
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ PKH
 @------------------------------------------------------------------------------
@@ -1019,8 +1526,7 @@ _func:
         pop {r7}
         pop {r7, r8, r9, r10}
 
         pop {r7}
         pop {r7, r8, r9, r10}
 
-@ FIXME: pop of a single register should encode as "ldr r7, [sp], #4"
-@ CHECK-FIXME: pop     {r7}                    @ encoding: [0x04,0x70,0x9d,0xe4]
+@ CHECK: pop   {r7}                    @ encoding: [0x04,0x70,0x9d,0xe4]
 @ CHECK: pop   {r7, r8, r9, r10}       @ encoding: [0x80,0x07,0xbd,0xe8]
 
 
 @ CHECK: pop   {r7, r8, r9, r10}       @ encoding: [0x80,0x07,0xbd,0xe8]
 
 
@@ -1030,8 +1536,7 @@ _func:
         push {r7}
         push {r7, r8, r9, r10}
 
         push {r7}
         push {r7, r8, r9, r10}
 
-@ FIXME: push of a single register should encode as "str r7, [sp, #-4]!"
-@ CHECK-FIXME: push    {r7}                    @ encoding: [0x04,0x70,0x2d,0xe5]
+@ CHECK: push  {r7}                    @ encoding: [0x04,0x70,0x2d,0xe5]
 @ CHECK: push  {r7, r8, r9, r10}       @ encoding: [0x80,0x07,0x2d,0xe9]
 
 
 @ CHECK: push  {r7, r8, r9, r10}       @ encoding: [0x80,0x07,0x2d,0xe9]
 
 
@@ -1078,7 +1583,7 @@ _func:
 
 
 @------------------------------------------------------------------------------
 
 
 @------------------------------------------------------------------------------
-@ QADD/QADD16/QADD8
+@ QSUB/QSUB16/QSUB8
 @------------------------------------------------------------------------------
         qsub r1, r2, r3
         qsubne r1, r2, r3
 @------------------------------------------------------------------------------
         qsub r1, r2, r3
         qsubne r1, r2, r3
@@ -1123,10 +1628,78 @@ _func:
 @ CHECK: revshne r9, r1                 @ encoding: [0xb1,0x9f,0xff,0x16]
 
 
 @ 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]
+
+
+@------------------------------------------------------------------------------
+@ ROR
+@------------------------------------------------------------------------------
+       ror r2, r4, #31
+       ror r2, r4, #1
+       ror r2, r4, #0
+       ror r4, #1
+
+@ CHECK: ror   r2, r4, #31             @ encoding: [0xe4,0x2f,0xa0,0xe1]
+@ CHECK: ror   r2, r4, #1              @ encoding: [0xe4,0x20,0xa0,0xe1]
+@ CHECK: mov   r2, r4                  @ encoding: [0x04,0x20,0xa0,0xe1]
+@ CHECK: ror   r4, r4, #1              @ encoding: [0xe4,0x40,0xa0,0xe1]
+
+
 @------------------------------------------------------------------------------
 @ RSB
 @------------------------------------------------------------------------------
         rsb r4, r5, #0xf000
 @------------------------------------------------------------------------------
 @ RSB
 @------------------------------------------------------------------------------
         rsb r4, r5, #0xf000
+        rsb r7, r8, #42, #2
+        rsb r7, r8, #-2147483638
+        rsb r7, r8, #40, #2
+        rsb r7, r8, #(0xff << 16)
         rsb r4, r5, r6
         rsb r4, r5, r6, lsl #5
         rsblo r4, r5, r6, lsr #5
         rsb r4, r5, r6
         rsb r4, r5, r6, lsl #5
         rsblo r4, r5, r6, lsr #5
@@ -1154,6 +1727,10 @@ _func:
         rsb r4, r5, rrx
 
 @ CHECK: rsb   r4, r5, #61440          @ encoding: [0x0f,0x4a,0x65,0xe2]
         rsb r4, r5, rrx
 
 @ CHECK: rsb   r4, r5, #61440          @ encoding: [0x0f,0x4a,0x65,0xe2]
+@ CHECK: rsb    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x68,0xe2]
+@ CHECK: rsb    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x68,0xe2]
+@ CHECK: rsb    r7, r8, #40, #2         @ encoding: [0x28,0x71,0x68,0xe2]
+@ CHECK: rsb   r7, r8, #16711680       @ encoding: [0xff,0x78,0x68,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              @ 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]
@@ -1179,10 +1756,27 @@ _func:
 @ CHECK: rsb   r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x66,0xe0]
 @ CHECK: rsb   r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x64,0xe0]
 
 @ CHECK: rsb   r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0x66,0xe0]
 @ CHECK: rsb   r4, r4, r5, rrx         @ encoding: [0x65,0x40,0x64,0xe0]
 
+@------------------------------------------------------------------------------
+@ RSBS
+@------------------------------------------------------------------------------
+    rsbs r7, r8, #42, #2
+    rsbs r7, r8, #-2147483638
+    rsbs r7, r8, #40, #2
+    rsbs r7, #(0xff << 16)
+
+@ CHECK: rsbs   r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x78,0xe2]
+@ CHECK: rsbs   r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x78,0xe2]
+@ CHECK: rsbs   r7, r8, #40, #2         @ encoding: [0x28,0x71,0x78,0xe2]
+@ CHECK: rsbs  r7, r7, #16711680       @ encoding: [0xff,0x78,0x77,0xe2]
+
 @------------------------------------------------------------------------------
 @ RSC
 @------------------------------------------------------------------------------
         rsc r4, r5, #0xf000
 @------------------------------------------------------------------------------
 @ RSC
 @------------------------------------------------------------------------------
         rsc r4, r5, #0xf000
+        rsc r7, r8, #42, #2
+        rsc r7, r8, #-2147483638
+        rsc r7, r8, #40, #2
+        rsc r7, r8, #(0xff << 16)
         rsc r4, r5, r6
         rsc r4, r5, r6, lsl #5
         rsclo r4, r5, r6, lsr #5
         rsc r4, r5, r6
         rsc r4, r5, r6, lsl #5
         rsclo r4, r5, r6, lsr #5
@@ -1193,6 +1787,7 @@ _func:
         rsc r6, r7, r8, lsr r9
         rsc r6, r7, r8, asr r9
         rscle r6, r7, r8, ror 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
 
         @ destination register is optional
         rsc r5, #0xf000
@@ -1208,6 +1803,10 @@ _func:
         rsc r6, r7, ror r9
 
 @ CHECK: rsc   r4, r5, #61440          @ encoding: [0x0f,0x4a,0xe5,0xe2]
         rsc r6, r7, ror r9
 
 @ CHECK: rsc   r4, r5, #61440          @ encoding: [0x0f,0x4a,0xe5,0xe2]
+@ CHECK: rsc    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0xe8,0xe2]
+@ CHECK: rsc    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0xe8,0xe2]
+@ CHECK: rsc    r7, r8, #40, #2         @ encoding: [0x28,0x71,0xe8,0xe2]
+@ CHECK: rsc    r7, r8, #16711680       @ encoding: [0xff,0x78,0xe8,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              @ 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]
@@ -1218,6 +1817,7 @@ _func:
 @ 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: 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   r5, r5, #61440          @ encoding: [0x0f,0x5a,0xe5,0xe2]
 @ CHECK: rsc   r4, r4, r5              @ encoding: [0x05,0x40,0xe4,0xe0]
@@ -1232,6 +1832,30 @@ _func:
 @ CHECK: rsc   r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0xe6,0xe0]
 
 @------------------------------------------------------------------------------
 @ CHECK: rsc   r6, r6, r7, ror r9      @ encoding: [0x77,0x69,0xe6,0xe0]
 
 @------------------------------------------------------------------------------
+@ RRX/RRXS
+@------------------------------------------------------------------------------
+
+         rrx r0, r1
+        rrx sp, pc
+        rrx pc, lr
+        rrx lr, sp
+
+@ CHECK: rrx   r0, r1                  @ encoding: [0x61,0x00,0xa0,0xe1]
+@ CHECK: rrx   sp, pc                  @ encoding: [0x6f,0xd0,0xa0,0xe1]
+@ CHECK: rrx   pc, lr                  @ encoding: [0x6e,0xf0,0xa0,0xe1]
+@ CHECK: rrx   lr, sp                  @ encoding: [0x6d,0xe0,0xa0,0xe1]
+
+         rrxs r0, r1
+        rrxs sp, pc
+        rrxs pc, lr
+        rrxs lr, sp
+
+@CHECK: rrxs   r0, r1                  @ encoding: [0x61,0x00,0xb0,0xe1]
+@CHECK: rrxs   sp, pc                  @ encoding: [0x6f,0xd0,0xb0,0xe1]
+@CHECK: rrxs   pc, lr                  @ encoding: [0x6e,0xf0,0xb0,0xe1]
+@CHECK: rrxs   lr, sp                  @ encoding: [0x6d,0xe0,0xb0,0xe1]
+
+@ ------------------------------------------------------------------------------
 @ SADD16/SADD8
 @------------------------------------------------------------------------------
         sadd16 r1, r2, r3
 @ SADD16/SADD8
 @------------------------------------------------------------------------------
         sadd16 r1, r2, r3
@@ -1259,6 +1883,10 @@ _func:
 @ SBC
 @------------------------------------------------------------------------------
         sbc r4, r5, #0xf000
 @ SBC
 @------------------------------------------------------------------------------
         sbc r4, r5, #0xf000
+        sbc r7, r8, #42, #2
+        sbc r7, r8, #-2147483638
+        sbc r7, r8, #40, #2
+        sbc r7, r8, #(0xff << 16)
         sbc r4, r5, r6
         sbc r4, r5, r6, lsl #5
         sbc r4, r5, r6, lsr #5
         sbc r4, r5, r6
         sbc r4, r5, r6, lsl #5
         sbc r4, r5, r6, lsr #5
@@ -1284,6 +1912,10 @@ _func:
         sbc r6, r7, ror r9
 
 @ CHECK: sbc   r4, r5, #61440          @ encoding: [0x0f,0x4a,0xc5,0xe2]
         sbc r6, r7, ror r9
 
 @ CHECK: sbc   r4, r5, #61440          @ encoding: [0x0f,0x4a,0xc5,0xe2]
+@ CHECK: sbc    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0xc8,0xe2]
+@ CHECK: sbc    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0xc8,0xe2]
+@ CHECK: sbc    r7, r8, #40, #2         @ encoding: [0x28,0x71,0xc8,0xe2]
+@ CHECK: sbc   r7, r8, #16711680       @ encoding: [0xff,0x78,0xc8,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              @ 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]
@@ -1308,6 +1940,16 @@ _func:
 @ CHECK: sbc   r6, r6, r7, ror r9      @ encoding: [0x77,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
 @------------------------------------------------------------------------------
@@ -1322,10 +1964,14 @@ _func:
 @ SETEND
 @------------------------------------------------------------------------------
         setend be
 @ SETEND
 @------------------------------------------------------------------------------
         setend be
+        setend BE
         setend le
         setend le
+        setend LE
 
 
-       sel     r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0xe6]
-       selne   r9, r2, r1              @ encoding: [0xb1,0x9f,0x82,0x16]
+@ CHECK: setend        be                      @ encoding: [0x00,0x02,0x01,0xf1]
+@ CHECK: setend        be                      @ encoding: [0x00,0x02,0x01,0xf1]
+@ CHECK: setend        le                      @ encoding: [0x00,0x00,0x01,0xf1]
+@ CHECK: setend        le                      @ encoding: [0x00,0x00,0x01,0xf1]
 
 
 @------------------------------------------------------------------------------
 
 
 @------------------------------------------------------------------------------
@@ -1334,8 +1980,9 @@ _func:
         sev
         seveq
 
         sev
         seveq
 
-@ CHECK: sev                             @ encoding: [0x04,0xf0,0x20,0xe3]
-@ CHECK: seveq                           @ encoding: [0x04,0xf0,0x20,0x03]
+@ CHECK: sev                            @ encoding: [0x04,0xf0,0x20,0xe3]
+@ CHECK: seveq                          @ encoding: [0x04,0xf0,0x20,0x03]
+
 
 @------------------------------------------------------------------------------
 @ SHADD16/SHADD8
 
 @------------------------------------------------------------------------------
 @ SHADD16/SHADD8
@@ -1374,15 +2021,6 @@ _func:
 @ CHECK: shsub8        r4, r8, r2              @ encoding: [0xf2,0x4f,0x38,0xe6]
 @ CHECK: shsub8gt      r4, r8, r2      @ encoding: [0xf2,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/SMLABT/SMLATB/SMLATT
 @------------------------------------------------------------------------------
@@ -1567,7 +2205,7 @@ _func:
 
 
 @------------------------------------------------------------------------------
 
 
 @------------------------------------------------------------------------------
-@ SMULBB/SMLALBT/SMLALTB/SMLALTT
+@ SMULBB/SMULBT/SMULTB/SMULTT
 @------------------------------------------------------------------------------
         smulbb r3, r9, r0
         smulbt r5, r4, r1
 @------------------------------------------------------------------------------
         smulbb r3, r9, r0
         smulbt r5, r4, r1
@@ -1627,18 +2265,106 @@ _func:
 
 
 @------------------------------------------------------------------------------
 
 
 @------------------------------------------------------------------------------
-@ FIXME: SRS
-@------------------------------------------------------------------------------
+@ 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: srsib sp, #11                 @ encoding: [0x0b,0x05,0xcd,0xf9]
+@ CHECK: srsia sp, #10                 @ encoding: [0x0a,0x05,0xcd,0xf8]
+@ CHECK: srsdb sp, #9                  @ encoding: [0x09,0x05,0x4d,0xf9]
+@ CHECK: srsda sp, #5                  @ encoding: [0x05,0x05,0x4d,0xf8]
+
+@ CHECK: srsib sp!, #5                 @ encoding: [0x05,0x05,0xed,0xf9]
+@ CHECK: srsia sp!, #5                 @ encoding: [0x05,0x05,0xed,0xf8]
+@ CHECK: srsdb sp!, #5                 @ encoding: [0x05,0x05,0x6d,0xf9]
+@ CHECK: srsda sp!, #5                 @ encoding: [0x05,0x05,0x6d,0xf8]
+
+@ CHECK: srsia sp, #5                  @ encoding: [0x05,0x05,0xcd,0xf8]
+@ CHECK: srsia sp!, #5                 @ encoding: [0x05,0x05,0xed,0xf8]
+
+@ Compatibility aliases.
+        srsda #5
+        srsdb #1
+        srsia #0
+        srsib #15
+
+        srsda #31!
+        srsdb #19!
+        srsia #2!
+        srsib #14!
+
+        srsfa #11
+        srsea #10
+        srsfd #9
+        srsed #5
+
+        srsfa #5!
+        srsea #5!
+        srsfd #5!
+        srsed #5!
+
+        srs #5
+        srs #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: srsib sp, #11                 @ encoding: [0x0b,0x05,0xcd,0xf9]
+@ CHECK: srsia sp, #10                 @ encoding: [0x0a,0x05,0xcd,0xf8]
+@ CHECK: srsdb sp, #9                  @ encoding: [0x09,0x05,0x4d,0xf9]
+@ CHECK: srsda sp, #5                  @ encoding: [0x05,0x05,0x4d,0xf8]
+@ CHECK: srsib sp!, #5                 @ encoding: [0x05,0x05,0xed,0xf9]
+@ CHECK: srsia sp!, #5                 @ encoding: [0x05,0x05,0xed,0xf8]
+@ CHECK: srsdb sp!, #5                 @ encoding: [0x05,0x05,0x6d,0xf9]
+@ CHECK: srsda sp!, #5                 @ encoding: [0x05,0x05,0x6d,0xf8]
+@ CHECK: srsia sp, #5                  @ encoding: [0x05,0x05,0xcd,0xf8]
+@ CHECK: srsia sp!, #5                 @ encoding: [0x05,0x05,0xed,0xf8]
 
 
 @------------------------------------------------------------------------------
 @ SSAT
 @------------------------------------------------------------------------------
 
 
 @------------------------------------------------------------------------------
 @ 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
+        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             @ encoding: [0x1a,0x80,0xa0,0xe6]
 @ CHECK: ssat  r8, #1, r10             @ encoding: [0x1a,0x80,0xa0,0xe6]
@@ -1650,8 +2376,8 @@ _func:
 @------------------------------------------------------------------------------
 @ SSAT16
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ SSAT16
 @------------------------------------------------------------------------------
-       ssat16  r2, #1, r7
-       ssat16  r3, #16, r5
+        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]
 
 @ CHECK: ssat16        r2, #1, r7              @ encoding: [0x37,0x2f,0xa0,0xe6]
 @ CHECK: ssat16        r3, #16, r5             @ encoding: [0x35,0x3f,0xaf,0xe6]
@@ -1679,6 +2405,91 @@ _func:
 @ CHECK: ssub8 r9, r2, r4              @ encoding: [0xf4,0x9f,0x12,0xe6]
 @ CHECK: ssub8eq       r5, r1, r2      @ encoding: [0xf2,0x5f,0x11,0x06]
 
 @ 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 p0, c2, [r11], #16
+        stc2l p1, 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 p0, c2, [r11], #16      @ encoding: [0x04,0x20,0xeb,0xfc]
+@ CHECK: stc2l p1, c3, [r12], #-72     @ encoding: [0x12,0x31,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*
@@ -1697,7 +2508,7 @@ _func:
         stmdb     r0!, {r1,r5,r7,sp}
 
 @ CHECK: stm   r2, {r1, r3, r4, r5, r6, sp} @ encoding: [0x7a,0x20,0x82,0xe8]
         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: stm   r3, {r1, r3, r4, r5, r6, lr} @ 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: 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]
@@ -1705,13 +2516,10 @@ _func:
 
 @ 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: 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]
+@ 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]
 
 
 
 
-@------------------------------------------------------------------------------
-@ FIXME:STR*
-@------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ STREX/STREXB/STREXH/STREXD
 @------------------------------------------------------------------------------
 @------------------------------------------------------------------------------
 @ STREX/STREXB/STREXH/STREXD
 @------------------------------------------------------------------------------
@@ -1725,11 +2533,23 @@ _func:
 @ CHECK: strex r2, r1, [r7]            @ encoding: [0x91,0x2f,0x87,0xe1]
 @ CHECK: strexd        r6, r2, r3, [r8]        @ encoding: [0x92,0x6f,0xa8,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, #0]!          @ encoding: [0x00,0x30,0xaa,0x55]
 
 @------------------------------------------------------------------------------
 @ SUB
 @------------------------------------------------------------------------------
         sub r4, r5, #0xf000
 
 @------------------------------------------------------------------------------
 @ SUB
 @------------------------------------------------------------------------------
         sub r4, r5, #0xf000
+        sub r7, r8, #42, #2
+        sub r7, r8, #-2147483638
+        sub r7, r8, #40, #2
+        sub r7, r8, #(0xff << 16)
         sub r4, r5, r6
         sub r4, r5, r6, lsl #5
         sub r4, r5, r6, lsr #5
         sub r4, r5, r6
         sub r4, r5, r6, lsl #5
         sub r4, r5, r6, lsr #5
@@ -1755,6 +2575,10 @@ _func:
         sub r6, r7, ror r9
 
 @ CHECK: sub   r4, r5, #61440          @ encoding: [0x0f,0x4a,0x45,0xe2]
         sub r6, r7, ror r9
 
 @ CHECK: sub   r4, r5, #61440          @ encoding: [0x0f,0x4a,0x45,0xe2]
+@ CHECK: sub    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x48,0xe2]
+@ CHECK: sub    r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x48,0xe2]
+@ CHECK: sub    r7, r8, #40, #2         @ encoding: [0x28,0x71,0x48,0xe2]
+@ CHECK: sub   r7, r8, #16711680       @ encoding: [0xff,0x78,0x48,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              @ 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]
@@ -1779,6 +2603,24 @@ _func:
 @ CHECK: sub   r6, r6, r7, asr r9      @ encoding: [0x57,0x69,0x46,0xe0]
 @ CHECK: sub   r6, r6, r7, ror r9      @ encoding: [0x77,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]
 
+    @ Test right shift by 32, which is encoded as 0
+    sub r3, r1, r2, lsr #32
+    sub r3, r1, r2, asr #32
+@ CHECK: sub   r3, r1, r2, lsr #32     @ encoding: [0x22,0x30,0x41,0xe0]
+@ CHECK: sub   r3, r1, r2, asr #32     @ encoding: [0x42,0x30,0x41,0xe0]
+
+@------------------------------------------------------------------------------
+@ SUBS
+@------------------------------------------------------------------------------
+    subs r7, r8, #42, #2
+    subs r7, r8, #-2147483638
+    subs r7, r8, #40, #2
+    subs r7, r8, #(0xff << 16)
+
+@ CHECK: subs   r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x58,0xe2]
+@ CHECK: subs   r7, r8, #-2147483638    @ encoding: [0x2a,0x71,0x58,0xe2]
+@ CHECK: subs   r7, r8, #40, #2         @ encoding: [0x28,0x71,0x58,0xe2]
+@ CHECK: subs  r7, r8, #16711680       @ encoding: [0xff,0x78,0x58,0xe2]
 
 @------------------------------------------------------------------------------
 @ SVC
 
 @------------------------------------------------------------------------------
 @ SVC
@@ -1815,12 +2657,9 @@ _func:
 
 @ CHECK: sxtab r2, r3, r4              @ encoding: [0x74,0x20,0xa3,0xe6]
 @ CHECK: sxtab r4, r5, r6              @ encoding: [0x76,0x40,0xa5,0xe6]
 
 @ 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]
+@ 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]
 
 
 @------------------------------------------------------------------------------
 
 
 @------------------------------------------------------------------------------
@@ -1834,12 +2673,9 @@ _func:
 
 @ CHECK: sxtab16ge     r0, r1, r4      @ encoding: [0x74,0x00,0x81,0xa6]
 @ CHECK: sxtab16       r6, r2, r7      @ encoding: [0x77,0x60,0x82,0xe6]
 
 @ 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]
+@ 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
@@ -1852,12 +2688,9 @@ _func:
 
 @ CHECK: sxtah r1, r3, r9              @ encoding: [0x79,0x10,0xb3,0xe6]
 @ CHECK: sxtahhi       r6, r1, r6      @ encoding: [0x76,0x60,0xb1,0x86]
 
 @ 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]
+@ 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
 
 @------------------------------------------------------------------------------
 @ SXTB
@@ -1870,12 +2703,9 @@ _func:
 
 @ CHECK: sxtbge        r2, r4                  @ encoding: [0x74,0x20,0xaf,0xa6]
 @ CHECK: sxtb  r5, r6                  @ encoding: [0x76,0x50,0xaf,0xe6]
 
 @ 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]
+@ 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]
 
 
 @------------------------------------------------------------------------------
 
 
 @------------------------------------------------------------------------------
@@ -1889,12 +2719,9 @@ _func:
 
 @ CHECK: sxtb16        r1, r4                  @ encoding: [0x74,0x10,0x8f,0xe6]
 @ CHECK: sxtb16        r6, r7                  @ encoding: [0x77,0x60,0x8f,0xe6]
 
 @ 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]
+@ 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]
 
 
 @------------------------------------------------------------------------------
 
 
 @------------------------------------------------------------------------------
@@ -1908,23 +2735,19 @@ _func:
 
 @ CHECK: sxthne        r3, r9                  @ encoding: [0x79,0x30,0xbf,0x16]
 @ CHECK: sxth  r1, r6                  @ encoding: [0x76,0x10,0xbf,0xe6]
 
 @ 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]
-
-
-@------------------------------------------------------------------------------
-@ FIXME: TBB/TBH
-@------------------------------------------------------------------------------
+@ 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
 @------------------------------------------------------------------------------
         teq r5, #0xf000
+        teq r7, #42, #2
+        teq r7, #-2147483638
+        teq r7, #40, #2
+        teq r7, #(0xff << 16)
         teq r4, r5
         teq r4, r5, lsl #5
         teq r4, r5, lsr #5
         teq r4, r5
         teq r4, r5, lsl #5
         teq r4, r5, lsr #5
@@ -1937,6 +2760,10 @@ _func:
         teq r6, r7, ror r9
 
 @ CHECK: teq   r5, #61440              @ encoding: [0x0f,0x0a,0x35,0xe3]
         teq r6, r7, ror r9
 
 @ CHECK: teq   r5, #61440              @ encoding: [0x0f,0x0a,0x35,0xe3]
+@ CHECK: teq    r7, #-2147483638        @ encoding: [0x2a,0x01,0x37,0xe3]
+@ CHECK: teq    r7, #-2147483638        @ encoding: [0x2a,0x01,0x37,0xe3]
+@ CHECK: teq    r7, #40, #2             @ encoding: [0x28,0x01,0x37,0xe3]
+@ CHECK: teq   r7, #16711680           @ encoding: [0xff,0x08,0x37,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                  @ 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]
@@ -1953,6 +2780,10 @@ _func:
 @ TST
 @------------------------------------------------------------------------------
         tst r5, #0xf000
 @ TST
 @------------------------------------------------------------------------------
         tst r5, #0xf000
+        tst r7, #42, #2
+        tst r7, #-2147483638
+        tst r7, #40, #2
+        tst r7, #(0xff << 16)
         tst r4, r5
         tst r4, r5, lsl #5
         tst r4, r5, lsr #5
         tst r4, r5
         tst r4, r5, lsl #5
         tst r4, r5, lsr #5
@@ -1965,6 +2796,10 @@ _func:
         tst r6, r7, ror r9
 
 @ CHECK: tst   r5, #61440              @ encoding: [0x0f,0x0a,0x15,0xe3]
         tst r6, r7, ror r9
 
 @ CHECK: tst   r5, #61440              @ encoding: [0x0f,0x0a,0x15,0xe3]
+@ CHECK: tst    r7, #-2147483638        @ encoding: [0x2a,0x01,0x17,0xe3]
+@ CHECK: tst    r7, #-2147483638        @ encoding: [0x2a,0x01,0x17,0xe3]
+@ CHECK: tst    r7, #40, #2             @ encoding: [0x28,0x01,0x17,0xe3]
+@ CHECK: tst    r7, #16711680           @ encoding: [0xff,0x08,0x17,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                  @ 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]
@@ -1976,3 +2811,349 @@ _func:
 @ CHECK: tst   r6, r7, asr r9          @ encoding: [0x57,0x09,0x16,0xe1]
 @ CHECK: tst   r6, r7, ror r9          @ encoding: [0x77,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
+        hint #4
+        hint #3
+        hint #2
+        hint #1
+        hint #0
+        hintgt #239
+
+@ 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]
+@ CHECK: sev                            @ encoding: [0x04,0xf0,0x20,0xe3]
+@ CHECK: wfi                            @ encoding: [0x03,0xf0,0x20,0xe3]
+@ CHECK: wfe                            @ encoding: [0x02,0xf0,0x20,0xe3]
+@ CHECK: yield                          @ encoding: [0x01,0xf0,0x20,0xe3]
+@ CHECK: nop                            @ encoding: [0x00,0xf0,0x20,0xe3]
+@ CHECK: hintgt #239                    @ encoding: [0xef,0xf0,0x20,0xc3]