-@ 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
.syntax unified
.globl _func
@------------------------------------------------------------------------------
@ ADC (immediate)
@------------------------------------------------------------------------------
- adc r1, r2, #0xf
- adc r1, r2, #0xf0
- adc r1, r2, #0xf00
- adc r1, r2, #0xf000
- adc r1, r2, #0xf0000
- adc r1, r2, #0xf00000
- adc r1, r2, #0xf000000
- adc r1, r2, #0xf0000000
- adc r1, r2, #0xf000000f
- adcs r1, r2, #0xf00
- adcseq r1, r2, #0xf00
- adceq r1, r2, #0xf00
+ adc r1, r2, #0xf
+ adc r1, r2, #0xf0
+ adc r1, r2, #0xf00
+ adc r1, r2, #0xf000
+ adc r1, r2, #0xf0000
+ adc r1, r2, #0xf00000
+ adc r1, r2, #0xf000000
+ adc r1, r2, #0xf0000000
+ adc r1, r2, #0xf000000f
+ adcs r1, r2, #0xf00
+ adcseq r1, r2, #0xf00
+ adceq r1, r2, #0xf00
@ CHECK: adc r1, r2, #15 @ encoding: [0x0f,0x10,0xa2,0xe2]
@ CHECK: adc r1, r2, #240 @ encoding: [0xf0,0x10,0xa2,0xe2]
@ 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]
@------------------------------------------------------------------------------
-@ 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: 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: 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 r4, r5, #0xf000
- add r4, r5, r6
- add r4, r5, r6, lsl #5
- add r4, r5, r6, lsr #5
- add r4, r5, r6, lsr #5
- add r4, r5, r6, asr #5
- add r4, r5, r6, ror #5
- add r6, r7, r8, lsl r9
- add r6, r7, r8, lsr r9
- add r6, r7, r8, asr r9
- add r6, r7, r8, ror r9
- add r4, r5, r6, rrx
-
- @ destination register is optional
- add r5, #0xf000
- add r4, r5
- add r4, r5, lsl #5
- add r4, r5, lsr #5
- add r4, r5, lsr #5
- add r4, r5, asr #5
- add r4, r5, ror #5
- add r6, r7, lsl r9
- add r6, r7, lsr r9
- add r6, r7, asr r9
- add r6, r7, ror r9
- add r4, r5, rrx
+ add r4, r5, #0xf000
+ add r4, r5, r6
+ add r4, r5, r6, lsl #5
+ add r4, r5, r6, lsr #5
+ add r4, r5, r6, lsr #5
+ add r4, r5, r6, asr #5
+ add r4, r5, r6, ror #5
+ add r6, r7, r8, lsl r9
+ add 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
@ CHECK: add r4, r5, #61440 @ encoding: [0x0f,0x4a,0x85,0xe2]
@ CHECK: add r4, r5, r6 @ encoding: [0x06,0x40,0x85,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 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 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]
+
+ @ 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]
@------------------------------------------------------------------------------
@ AND
@------------------------------------------------------------------------------
- and r10, r1, #0xf
- and r10, r1, r6
- and r10, r1, r6, lsl #10
- and r10, r1, r6, lsr #10
- and r10, r1, r6, lsr #10
- and r10, r1, r6, asr #10
- and r10, r1, r6, ror #10
- and r6, r7, r8, lsl r2
- and r6, r7, r8, lsr r2
- and r6, r7, r8, asr r2
- and r6, r7, r8, ror r2
- and r10, r1, r6, rrx
-
- @ destination register is optional
- and r1, #0xf
- and r10, r1
- and r10, r1, lsl #10
- and r10, r1, lsr #10
- and r10, r1, lsr #10
- and r10, r1, asr #10
- and r10, r1, ror #10
- and r6, r7, lsl r2
- and r6, r7, lsr r2
- and r6, r7, asr r2
- and r6, r7, ror r2
- and r10, r1, rrx
+ and r10, r1, #0xf
+ and r10, r1, r6
+ and r10, r1, r6, lsl #10
+ and r10, r1, r6, lsr #10
+ and r10, r1, r6, lsr #10
+ and r10, r1, r6, asr #10
+ and r10, r1, r6, ror #10
+ and r6, r7, r8, lsl r2
+ and r6, r7, r8, lsr r2
+ and r6, r7, r8, asr r2
+ and r6, r7, r8, ror r2
+ and r10, r1, r6, rrx
+ 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, r6 @ encoding: [0x06,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 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]
+ @ fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbranch
+@ CHECK: beq _baz @ encoding: [A,A,A,0x0a]
+ @ fixup A - offset: 0, value: _baz, kind: fixup_arm_condbranch
+
+
@------------------------------------------------------------------------------
-@ FIXME: BFC
+@ BFC
@------------------------------------------------------------------------------
+ bfc r5, #3, #17
+ bfccc r5, #3, #17
+
+@ CHECK: bfc r5, #3, #17 @ encoding: [0x9f,0x51,0xd3,0xe7]
+@ CHECK: bfclo r5, #3, #17 @ encoding: [0x9f,0x51,0xd3,0x37]
+
+
@------------------------------------------------------------------------------
-@ FIXME: BFI
+@ BFI
@------------------------------------------------------------------------------
+ bfi r5, r2, #3, #17
+ bfine r5, r2, #3, #17
+
+@ CHECK: bfi r5, r2, #3, #17 @ encoding: [0x92,0x51,0xd3,0xe7]
+@ CHECK: bfine r5, r2, #3, #17 @ encoding: [0x92,0x51,0xd3,0x17]
+
@------------------------------------------------------------------------------
@ BIC
@------------------------------------------------------------------------------
- bic r10, r1, #0xf
- bic r10, r1, r6
- bic r10, r1, r6, lsl #10
- bic r10, r1, r6, lsr #10
- bic r10, r1, r6, lsr #10
- bic r10, r1, r6, asr #10
- bic r10, r1, r6, ror #10
- bic r6, r7, r8, lsl r2
- bic r6, r7, r8, lsr r2
- bic r6, r7, r8, asr r2
- bic r6, r7, r8, ror r2
- bic r10, r1, r6, rrx
-
- @ destination register is optional
- bic r1, #0xf
- bic r10, r1
- bic r10, r1, lsl #10
- bic r10, r1, lsr #10
- bic r10, r1, lsr #10
- bic r10, r1, asr #10
- bic r10, r1, ror #10
- bic r6, r7, lsl r2
- bic r6, r7, lsr r2
- bic r6, r7, asr r2
- bic r6, r7, ror r2
- bic r10, r1, rrx
+ bic r10, r1, #0xf
+ bic r10, r1, r6
+ bic r10, r1, r6, lsl #10
+ bic r10, r1, r6, lsr #10
+ bic r10, r1, r6, lsr #10
+ bic r10, r1, r6, asr #10
+ bic r10, r1, r6, ror #10
+ bic r6, r7, r8, lsl r2
+ bic r6, r7, r8, lsr r2
+ bic r6, r7, r8, asr r2
+ bic r6, r7, r8, ror r2
+ bic r10, r1, r6, rrx
+
+ @ destination register is optional
+ bic r1, #0xf
+ bic r10, r1
+ bic r10, r1, lsl #10
+ bic r10, r1, lsr #10
+ bic r10, r1, lsr #10
+ bic r10, r1, asr #10
+ bic r10, r1, ror #10
+ bic r6, r7, lsl r2
+ bic r6, r7, lsr r2
+ bic r6, r7, asr r2
+ bic r6, r7, ror r2
+ bic r10, r1, rrx
@ CHECK: bic r10, r1, #15 @ encoding: [0x0f,0xa0,0xc1,0xe3]
@ CHECK: bic r10, r1, r6 @ encoding: [0x06,0xa0,0xc1,0xe1]
@ 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 #10
- bkpt #65535
+ bkpt #10
+ bkpt #65535
@ CHECK: bkpt #10 @ encoding: [0x7a,0x00,0x20,0xe1]
@ CHECK: bkpt #65535 @ encoding: [0x7f,0xff,0x2f,0xe1]
@ 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: @ fixup A - offset: 0, value: _bar, kind: fixup_arm_uncondbranch
-
+@ CHECK: @ 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: blx _bar @ encoding: [A,A,A,0xfa]
+ @ 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 r2
- blxne r2
+ blx r2
+ blxne r2
@ CHECK: blx r2 @ encoding: [0x32,0xff,0x2f,0xe1]
@ CHECK: blxne r2 @ encoding: [0x32,0xff,0x2f,0x11]
@------------------------------------------------------------------------------
@ 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]
@------------------------------------------------------------------------------
@ BXJ
@------------------------------------------------------------------------------
-
- bxj r2
- bxjne r2
+ bxj r2
+ bxjne r2
@ CHECK: bxj r2 @ encoding: [0x22,0xff,0x2f,0xe1]
@ CHECK: bxjne r2 @ encoding: [0x22,0xff,0x2f,0x11]
-@------------------------------------------------------------------------------
-@ FIXME: CBNZ/CBZ
-@------------------------------------------------------------------------------
-
@------------------------------------------------------------------------------
@ CDP/CDP2
@------------------------------------------------------------------------------
- cdp p7, #1, c1, c1, c1, #4
- cdp2 p7, #1, c1, c1, c1, #4
+ cdp p7, #1, c1, c1, c1, #4
+ cdp2 p7, #1, c1, c1, c1, #4
+ cdp2 p10, #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: cdp2 p10, #0, c6, c12, c0, #7 @ encoding: [0xe0,0x6a,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
@ CHECK: clrex @ encoding: [0x1f,0xf0,0x7f,0xf5]
@------------------------------------------------------------------------------
@ 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]
@------------------------------------------------------------------------------
@ CMN
@------------------------------------------------------------------------------
- cmn r1, #0xf
- cmn r1, r6
- cmn r1, r6, lsl #10
- cmn r1, r6, lsr #10
- cmn sp, r6, lsr #10
- cmn r1, r6, asr #10
- cmn r1, r6, ror #10
- cmn r7, r8, lsl r2
- cmn sp, r8, lsr r2
- cmn r7, r8, asr r2
- cmn r7, r8, ror r2
- cmn r1, r6, rrx
+ cmn r1, #0xf
+ cmn r1, r6
+ cmn r1, r6, lsl #10
+ cmn r1, r6, lsr #10
+ cmn sp, r6, lsr #10
+ cmn r1, r6, asr #10
+ cmn r1, r6, ror #10
+ cmn r7, r8, lsl r2
+ cmn sp, r8, lsr r2
+ cmn r7, r8, asr r2
+ cmn r7, r8, ror r2
+ cmn r1, r6, rrx
@ CHECK: cmn r1, #15 @ encoding: [0x0f,0x00,0x71,0xe3]
@ CHECK: cmn r1, r6 @ encoding: [0x06,0x00,0x71,0xe1]
@------------------------------------------------------------------------------
@ CMP
@------------------------------------------------------------------------------
- cmp r1, #0xf
- cmp r1, r6
- cmp r1, r6, lsl #10
- cmp r1, r6, lsr #10
- cmp sp, r6, lsr #10
- cmp r1, r6, asr #10
- cmp r1, r6, ror #10
- cmp r7, r8, lsl r2
- cmp sp, r8, lsr r2
- cmp r7, r8, asr r2
- cmp r7, r8, ror r2
- cmp r1, r6, rrx
+ cmp r1, #0xf
+ cmp r1, r6
+ cmp r1, r6, lsl #10
+ cmp r1, r6, lsr #10
+ cmp sp, r6, lsr #10
+ cmp r1, r6, asr #10
+ cmp r1, r6, ror #10
+ cmp r7, r8, lsl r2
+ cmp sp, r8, lsr r2
+ cmp r7, r8, asr r2
+ cmp r7, r8, ror r2
+ cmp r1, r6, rrx
+ cmp r0, #-2
+ cmp lr, #0
@ CHECK: cmp r1, #15 @ encoding: [0x0f,0x00,0x51,0xe3]
@ CHECK: cmp r1, r6 @ encoding: [0x06,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 #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]
@------------------------------------------------------------------------------
@ 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]
@------------------------------------------------------------------------------
@ 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 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 r4, r5, #0xf000
- eor r4, r5, r6
- eor r4, r5, r6, lsl #5
- eor r4, r5, r6, lsr #5
- eor r4, r5, r6, lsr #5
- eor r4, r5, r6, asr #5
- eor r4, r5, r6, ror #5
- eor r6, r7, r8, lsl r9
- eor r6, r7, r8, lsr r9
- eor r6, r7, r8, asr r9
- eor r6, r7, r8, ror r9
- eor r4, r5, r6, rrx
-
- @ destination register is optional
- eor r5, #0xf000
- eor r4, r5
- eor r4, r5, lsl #5
- eor r4, r5, lsr #5
- eor r4, r5, lsr #5
- eor r4, r5, asr #5
- eor r4, r5, ror #5
- eor r6, r7, lsl r9
- eor r6, r7, lsr r9
- eor r6, r7, asr r9
- eor r6, r7, ror r9
- eor r4, r5, rrx
+ eor r4, r5, #0xf000
+ eor r4, r5, r6
+ eor r4, r5, r6, lsl #5
+ eor r4, r5, r6, lsr #5
+ eor r4, r5, r6, lsr #5
+ eor r4, r5, r6, asr #5
+ eor r4, r5, r6, ror #5
+ eor r6, r7, r8, lsl r9
+ eor r6, r7, r8, lsr r9
+ eor r6, r7, r8, asr r9
+ eor r6, r7, r8, ror r9
+ eor r4, r5, r6, rrx
+
+ @ destination register is optional
+ eor r5, #0xf000
+ eor r4, r5
+ eor r4, r5, lsl #5
+ eor r4, r5, lsr #5
+ eor r4, r5, lsr #5
+ eor r4, r5, asr #5
+ eor r4, r5, ror #5
+ eor r6, r7, lsl r9
+ eor r6, r7, lsr r9
+ eor r6, r7, asr r9
+ eor r6, r7, ror r9
+ eor r4, r5, rrx
@ CHECK: eor r4, r5, #61440 @ encoding: [0x0f,0x4a,0x25,0xe2]
@ CHECK: eor r4, r5, r6 @ encoding: [0x06,0x40,0x25,0xe0]
@ 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 #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 #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 p10, c2, [r11], #16
+ ldc2l p11, c3, [r12], #-72
+
+ ldc p12, c4, [r0, #4]
+ ldc p13, c5, [r1]
+ ldc p14, c6, [r2, #-224]
+ ldc p15, c7, [r3, #-120]!
+ ldc p5, c8, [r4], #16
+ ldc p4, c9, [r5], #-72
+ ldcl p3, c10, [r6, #4]
+ ldcl p2, c11, [r7]
+ ldcl p1, c12, [r8, #-224]
+ ldcl p0, c13, [r9, #-120]!
+ ldcl p6, c14, [r10], #16
+ ldcl p7, c15, [r11], #-72
+
+ ldclo p12, c4, [r0, #4]
+ ldchi p13, c5, [r1]
+ ldccs p14, c6, [r2, #-224]
+ ldccc p15, c7, [r3, #-120]!
+ ldceq p5, c8, [r4], #16
+ ldcgt p4, c9, [r5], #-72
+ ldcllt p3, c10, [r6, #4]
+ ldclge p2, c11, [r7]
+ ldclle p1, c12, [r8, #-224]
+ ldclne p0, c13, [r9, #-120]!
+ ldcleq p6, c14, [r10], #16
+ ldclhi p7, c15, [r11], #-72
+
+ ldc2 p2, c8, [r1], { 25 }
+
+@ CHECK: ldc2 p0, c8, [r1, #4] @ encoding: [0x01,0x80,0x91,0xfd]
+@ CHECK: ldc2 p1, c7, [r2] @ encoding: [0x00,0x71,0x92,0xfd]
+@ CHECK: ldc2 p2, c6, [r3, #-224] @ encoding: [0x38,0x62,0x13,0xfd]
+@ CHECK: ldc2 p3, c5, [r4, #-120]! @ encoding: [0x1e,0x53,0x34,0xfd]
+@ CHECK: ldc2 p4, c4, [r5], #16 @ encoding: [0x04,0x44,0xb5,0xfc]
+@ CHECK: ldc2 p5, c3, [r6], #-72 @ encoding: [0x12,0x35,0x36,0xfc]
+@ CHECK: ldc2l p6, c2, [r7, #4] @ encoding: [0x01,0x26,0xd7,0xfd]
+@ CHECK: ldc2l p7, c1, [r8] @ encoding: [0x00,0x17,0xd8,0xfd]
+@ CHECK: ldc2l p8, c0, [r9, #-224] @ encoding: [0x38,0x08,0x59,0xfd]
+@ CHECK: ldc2l p9, c1, [r10, #-120]! @ encoding: [0x1e,0x19,0x7a,0xfd]
+@ CHECK: ldc2l p10, c2, [r11], #16 @ encoding: [0x04,0x2a,0xfb,0xfc]
+@ CHECK: ldc2l p11, c3, [r12], #-72 @ encoding: [0x12,0x3b,0x7c,0xfc]
+
+@ CHECK: ldc p12, c4, [r0, #4] @ encoding: [0x01,0x4c,0x90,0xed]
+@ CHECK: ldc p13, c5, [r1] @ encoding: [0x00,0x5d,0x91,0xed]
+@ CHECK: ldc p14, c6, [r2, #-224] @ encoding: [0x38,0x6e,0x12,0xed]
+@ CHECK: ldc p15, c7, [r3, #-120]! @ encoding: [0x1e,0x7f,0x33,0xed]
+@ CHECK: ldc p5, c8, [r4], #16 @ encoding: [0x04,0x85,0xb4,0xec]
+@ CHECK: ldc p4, c9, [r5], #-72 @ encoding: [0x12,0x94,0x35,0xec]
+@ CHECK: ldcl p3, c10, [r6, #4] @ encoding: [0x01,0xa3,0xd6,0xed]
+@ CHECK: ldcl p2, c11, [r7] @ encoding: [0x00,0xb2,0xd7,0xed]
+@ CHECK: ldcl p1, c12, [r8, #-224] @ encoding: [0x38,0xc1,0x58,0xed]
+@ CHECK: ldcl p0, c13, [r9, #-120]! @ encoding: [0x1e,0xd0,0x79,0xed]
+@ CHECK: ldcl p6, c14, [r10], #16 @ encoding: [0x04,0xe6,0xfa,0xec]
+@ CHECK: ldcl p7, c15, [r11], #-72 @ encoding: [0x12,0xf7,0x7b,0xec]
+
+@ CHECK: ldclo p12, c4, [r0, #4] @ encoding: [0x01,0x4c,0x90,0x3d]
+@ CHECK: ldchi p13, c5, [r1] @ encoding: [0x00,0x5d,0x91,0x8d]
+@ CHECK: ldchs p14, c6, [r2, #-224] @ encoding: [0x38,0x6e,0x12,0x2d]
+@ CHECK: ldclo p15, c7, [r3, #-120]! @ encoding: [0x1e,0x7f,0x33,0x3d]
+@ CHECK: ldceq p5, c8, [r4], #16 @ encoding: [0x04,0x85,0xb4,0x0c]
+@ CHECK: ldcgt p4, c9, [r5], #-72 @ encoding: [0x12,0x94,0x35,0xcc]
+@ CHECK: ldcllt p3, c10, [r6, #4] @ encoding: [0x01,0xa3,0xd6,0xbd]
+@ CHECK: ldclge p2, c11, [r7] @ encoding: [0x00,0xb2,0xd7,0xad]
+@ CHECK: ldclle p1, c12, [r8, #-224] @ encoding: [0x38,0xc1,0x58,0xdd]
+@ CHECK: ldclne p0, c13, [r9, #-120]! @ encoding: [0x1e,0xd0,0x79,0x1d]
+@ CHECK: ldcleq p6, c14, [r10], #16 @ encoding: [0x04,0xe6,0xfa,0x0c]
+@ CHECK: ldclhi p7, c15, [r11], #-72 @ encoding: [0x12,0xf7,0x7b,0x8c]
+
+@ CHECK: ldc2 p2, c8, [r1], {25} @ encoding: [0x19,0x82,0x91,0xfc]
@------------------------------------------------------------------------------
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: 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
@ 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 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 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
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
@------------------------------------------------------------------------------
@ 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 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]
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 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 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]
@ 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 p10, #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 p10, #7, apsr_nzcv, c15, c0, #1 @ encoding: [0x30,0xfa,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
@ 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 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]
msr SPSR_fsxc, #5
msr cpsr_fsxc, #5
-@ 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]
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 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]
@------------------------------------------------------------------------------
@ 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
+ 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: 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.w
nopgt
+@ CHECK: nop @ encoding: [0x00,0xf0,0x20,0xe3]
@ CHECK: nop @ encoding: [0x00,0xf0,0x20,0xe3]
@ CHECK: nopgt @ encoding: [0x00,0xf0,0x20,0xc3]
@ 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
@------------------------------------------------------------------------------
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]
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]
@------------------------------------------------------------------------------
-@ QADD/QADD16/QADD8
+@ QSUB/QSUB16/QSUB8
@------------------------------------------------------------------------------
qsub r1, r2, r3
qsubne r1, r2, r3
@ 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
@------------------------------------------------------------------------------
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
@ 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 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
@ SETEND
@------------------------------------------------------------------------------
setend be
+ setend BE
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]
@------------------------------------------------------------------------------
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
@ 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
@------------------------------------------------------------------------------
@------------------------------------------------------------------------------
-@ SMULBB/SMLALBT/SMLALTB/SMLALTT
+@ SMULBB/SMULBT/SMULTB/SMULTT
@------------------------------------------------------------------------------
smulbb r3, r9, r0
smulbt r5, r4, r1
@------------------------------------------------------------------------------
-@ 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 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]
@------------------------------------------------------------------------------
@ 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: ssub8 r9, r2, r4 @ encoding: [0xf4,0x9f,0x12,0xe6]
@ CHECK: ssub8eq r5, r1, r2 @ encoding: [0xf2,0x5f,0x11,0x06]
+@------------------------------------------------------------------------------
+@ STC{L}/STC2{L}
+@------------------------------------------------------------------------------
+ stc2 p0, c8, [r1, #4]
+ stc2 p1, c7, [r2]
+ stc2 p2, c6, [r3, #-224]
+ stc2 p3, c5, [r4, #-120]!
+ stc2 p4, c4, [r5], #16
+ stc2 p5, c3, [r6], #-72
+ stc2l p6, c2, [r7, #4]
+ stc2l p7, c1, [r8]
+ stc2l p8, c0, [r9, #-224]
+ stc2l p9, c1, [r10, #-120]!
+ stc2l p10, c2, [r11], #16
+ stc2l p11, c3, [r12], #-72
+
+ stc p12, c4, [r0, #4]
+ stc p13, c5, [r1]
+ stc p14, c6, [r2, #-224]
+ stc p15, c7, [r3, #-120]!
+ stc p5, c8, [r4], #16
+ stc p4, c9, [r5], #-72
+ stcl p3, c10, [r6, #4]
+ stcl p2, c11, [r7]
+ stcl p1, c12, [r8, #-224]
+ stcl p0, c13, [r9, #-120]!
+ stcl p6, c14, [r10], #16
+ stcl p7, c15, [r11], #-72
+
+ stclo p12, c4, [r0, #4]
+ stchi p13, c5, [r1]
+ stccs p14, c6, [r2, #-224]
+ stccc p15, c7, [r3, #-120]!
+ stceq p5, c8, [r4], #16
+ stcgt p4, c9, [r5], #-72
+ stcllt p3, c10, [r6, #4]
+ stclge p2, c11, [r7]
+ stclle p1, c12, [r8, #-224]
+ stclne p0, c13, [r9, #-120]!
+ stcleq p6, c14, [r10], #16
+ stclhi p7, c15, [r11], #-72
+
+ stc2 p2, c8, [r1], { 25 }
+
+@ CHECK: stc2 p0, c8, [r1, #4] @ encoding: [0x01,0x80,0x81,0xfd]
+@ CHECK: stc2 p1, c7, [r2] @ encoding: [0x00,0x71,0x82,0xfd]
+@ CHECK: stc2 p2, c6, [r3, #-224] @ encoding: [0x38,0x62,0x03,0xfd]
+@ CHECK: stc2 p3, c5, [r4, #-120]! @ encoding: [0x1e,0x53,0x24,0xfd]
+@ CHECK: stc2 p4, c4, [r5], #16 @ encoding: [0x04,0x44,0xa5,0xfc]
+@ CHECK: stc2 p5, c3, [r6], #-72 @ encoding: [0x12,0x35,0x26,0xfc]
+@ CHECK: stc2l p6, c2, [r7, #4] @ encoding: [0x01,0x26,0xc7,0xfd]
+@ CHECK: stc2l p7, c1, [r8] @ encoding: [0x00,0x17,0xc8,0xfd]
+@ CHECK: stc2l p8, c0, [r9, #-224] @ encoding: [0x38,0x08,0x49,0xfd]
+@ CHECK: stc2l p9, c1, [r10, #-120]! @ encoding: [0x1e,0x19,0x6a,0xfd]
+@ CHECK: stc2l p10, c2, [r11], #16 @ encoding: [0x04,0x2a,0xeb,0xfc]
+@ CHECK: stc2l p11, c3, [r12], #-72 @ encoding: [0x12,0x3b,0x6c,0xfc]
+
+@ CHECK: stc p12, c4, [r0, #4] @ encoding: [0x01,0x4c,0x80,0xed]
+@ CHECK: stc p13, c5, [r1] @ encoding: [0x00,0x5d,0x81,0xed]
+@ CHECK: stc p14, c6, [r2, #-224] @ encoding: [0x38,0x6e,0x02,0xed]
+@ CHECK: stc p15, c7, [r3, #-120]! @ encoding: [0x1e,0x7f,0x23,0xed]
+@ CHECK: stc p5, c8, [r4], #16 @ encoding: [0x04,0x85,0xa4,0xec]
+@ CHECK: stc p4, c9, [r5], #-72 @ encoding: [0x12,0x94,0x25,0xec]
+@ CHECK: stcl p3, c10, [r6, #4] @ encoding: [0x01,0xa3,0xc6,0xed]
+@ CHECK: stcl p2, c11, [r7] @ encoding: [0x00,0xb2,0xc7,0xed]
+@ CHECK: stcl p1, c12, [r8, #-224] @ encoding: [0x38,0xc1,0x48,0xed]
+@ CHECK: stcl p0, c13, [r9, #-120]! @ encoding: [0x1e,0xd0,0x69,0xed]
+@ CHECK: stcl p6, c14, [r10], #16 @ encoding: [0x04,0xe6,0xea,0xec]
+@ CHECK: stcl p7, c15, [r11], #-72 @ encoding: [0x12,0xf7,0x6b,0xec]
+
+@ CHECK: stclo p12, c4, [r0, #4] @ encoding: [0x01,0x4c,0x80,0x3d]
+@ CHECK: stchi p13, c5, [r1] @ encoding: [0x00,0x5d,0x81,0x8d]
+@ CHECK: stchs p14, c6, [r2, #-224] @ encoding: [0x38,0x6e,0x02,0x2d]
+@ CHECK: stclo p15, c7, [r3, #-120]! @ encoding: [0x1e,0x7f,0x23,0x3d]
+@ CHECK: stceq p5, c8, [r4], #16 @ encoding: [0x04,0x85,0xa4,0x0c]
+@ CHECK: stcgt p4, c9, [r5], #-72 @ encoding: [0x12,0x94,0x25,0xcc]
+@ CHECK: stcllt p3, c10, [r6, #4] @ encoding: [0x01,0xa3,0xc6,0xbd]
+@ CHECK: stclge p2, c11, [r7] @ encoding: [0x00,0xb2,0xc7,0xad]
+@ CHECK: stclle p1, c12, [r8, #-224] @ encoding: [0x38,0xc1,0x48,0xdd]
+@ CHECK: stclne p0, c13, [r9, #-120]! @ encoding: [0x1e,0xd0,0x69,0x1d]
+@ CHECK: stcleq p6, c14, [r10], #16 @ encoding: [0x04,0xe6,0xea,0x0c]
+@ CHECK: stclhi p7, c15, [r11], #-72 @ encoding: [0x12,0xf7,0x6b,0x8c]
+
+@ CHECK: stc2 p2, c8, [r1], {25} @ encoding: [0x19,0x82,0x81,0xfc]
+
@------------------------------------------------------------------------------
@ STM*
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: 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
@------------------------------------------------------------------------------
@ 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
@ 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]
@------------------------------------------------------------------------------
@ SVC
@ 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]
@------------------------------------------------------------------------------
@ 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
@ 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
@ 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]
@------------------------------------------------------------------------------
@ 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]
@------------------------------------------------------------------------------
@ 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]
@------------------------------------------------------------------------------
umaal r3, r4, r5, r6
umaallt r3, r4, r5, r6
-@ CHECK: umaal r3, r4, r5, r6 @ encoding: [0x95,0x46,0x43,0xe0]
-@ CHECK: umaallt r3, r4, r5, r6 @ encoding: [0x95,0x46,0x43,0xb0]
+@ 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]