# RUN: llvm-mc -triple=thumbv7-apple-darwin -mcpu=cortex-a8 -disassemble < %s | FileCheck %s

#------------------------------------------------------------------------------
# ADC (immediate)
#------------------------------------------------------------------------------
# CHECK: adc r0, r1, #4
# CHECK: adcs r0, r1, #0
# CHECK: adc r1, r2, #255
# CHECK: adc r3, r7, #5570645
# CHECK: adc r8, r12, #2852170240
# CHECK: adc r9, r7, #2779096485
# CHECK: adc r5, r3, #2264924160
# CHECK: adc r4, r2, #2139095040
# CHECK: adc r4, r2, #1664

0x41 0xf1 0x04 0x00
0x51 0xf1 0x00 0x00
0x42 0xf1 0xff 0x01
0x47 0xf1 0x55 0x13
0x4c 0xf1 0xaa 0x28
0x47 0xf1 0xa5 0x39
0x43 0xf1 0x07 0x45
0x42 0xf1 0xff 0x44
0x42 0xf5 0xd0 0x64

#------------------------------------------------------------------------------
# ADC (register)
#------------------------------------------------------------------------------
# CHECK: adc.w r4, r5, r6
# CHECK: adcs.w r4, r5, r6
# CHECK: adc.w r9, r1, r3
# CHECK: adcs.w r9, r1, r3
# CHECK: adc.w r0, r1, r3, ror #4
# CHECK: adcs.w  r0, r1, r3, lsl #7
# CHECK: adc.w r0, r1, r3, lsr #31
# CHECK: adcs.w  r0, r1, r3, asr #32

0x45 0xeb 0x06 0x04
0x55 0xeb 0x06 0x04
0x41 0xeb 0x03 0x09
0x51 0xeb 0x03 0x09
0x41 0xeb 0x33 0x10
0x51 0xeb 0xc3 0x10
0x41 0xeb 0xd3 0x70
0x51 0xeb 0x23 0x00


#------------------------------------------------------------------------------
# ADD (immediate)
#------------------------------------------------------------------------------
# CHECK: itet eq
# CHECK: addeq r1, r2, #4
# CHECK: addwne r5, r3, #1023
# CHECK: addweq r4, r5, #293
# CHECK: add.w r2, sp, #1024
# CHECK: add.w r2, r8, #65280
# CHECK: addw r2, r3, #257
# CHECK: add.w r12, r6, #256
# CHECK: addw r12, r6, #256
# CHECK: adds.w r1, r2, #496

0x0a 0xbf
0x11 0x1d
0x03 0xf2 0xff 0x35
0x05 0xf2 0x25 0x14
0x0d 0xf5 0x80 0x62
0x08 0xf5 0x7f 0x42
0x03 0xf2 0x01 0x12
0x06 0xf5 0x80 0x7c
0x06 0xf2 0x00 0x1c
0x12 0xf5 0xf8 0x71


#------------------------------------------------------------------------------
# ADD (register)
#------------------------------------------------------------------------------
# CHECK: add.w r1, r2, r8
# CHECK: add.w r5, r9, r2, asr #32
# CHECK: adds.w r7, r3, r1, lsl #31
# CHECK: adds.w r0, r3, r6, lsr #25
# CHECK: add.w r4, r8, r1, ror #12

0x02 0xeb 0x08 0x01
0x09 0xeb 0x22 0x05
0x13 0xeb 0xc1 0x77
0x13 0xeb 0x56 0x60
0x08 0xeb 0x31 0x34


#------------------------------------------------------------------------------
# ADR
#------------------------------------------------------------------------------
# CHECK: subw r11, pc, #3270
# CHECK: subw r11, pc, #826
# CHECK: subw r1, pc, #0

0xaf 0xf6 0xc6 0x4b
0xaf 0xf2 0x3a 0x3b
0xaf 0xf2 0x00 0x01

#------------------------------------------------------------------------------
# AND (immediate)
#------------------------------------------------------------------------------
# CHECK: and r2, r5, #1044480
# CHECK: ands r3, r12, #15
# CHECK: and r1, r1, #255

0x05 0xf4 0x7f 0x22
0x1c 0xf0 0x0f 0x03
0x01 0xf0 0xff 0x01


#------------------------------------------------------------------------------
# AND (register)
#------------------------------------------------------------------------------
# CHECK: and.w r4, r9, r8
# CHECK: and.w r1, r4, r8, asr #3
# CHECK: ands.w r2, r1, r7, lsl #1
# CHECK: ands.w r4, r5, r2, lsr #20
# CHECK: and.w r9, r12, r1, ror #17

0x09 0xea 0x08 0x04
0x04 0xea 0xe8 0x01
0x11 0xea 0x47 0x02
0x15 0xea 0x12 0x54
0x0c 0xea 0x71 0x49

#------------------------------------------------------------------------------
# ASR (immediate)
#------------------------------------------------------------------------------
# CHECK: asr.w r2, r3, #12
# CHECK: asrs.w r8, r3, #32
# CHECK: asrs.w r2, r3, #1
# CHECK: asr.w r2, r3, #4
# CHECK: asrs.w r2, r12, #15

# CHECK: asr.w r3, r3, #19
# CHECK: asrs.w r8, r8, #2
# CHECK: asrs.w r7, r7, #5
# CHECK: asr.w r12, r12, #21

0x4f 0xea 0x23 0x32
0x5f 0xea 0x23 0x08
0x5f 0xea 0x63 0x02
0x4f 0xea 0x23 0x12
0x5f 0xea 0xec 0x32

0x4f 0xea 0xe3 0x43
0x5f 0xea 0xa8 0x08
0x5f 0xea 0x67 0x17
0x4f 0xea 0x6c 0x5c


#------------------------------------------------------------------------------
# ASR (register)
#------------------------------------------------------------------------------
# CHECK: asr.w r3, r4, r2
# CHECK: asr.w r1, r1, r2
# CHECK: asrs.w r3, r4, r8

0x44 0xfa 0x02 0xf3
0x41 0xfa 0x02 0xf1
0x54 0xfa 0x08 0xf3

#------------------------------------------------------------------------------
# B
#------------------------------------------------------------------------------
# CHECK: bmi.w   #-183396

0x13 0xf5 0xce 0xa9

# CHECK: b.w   #208962
# CHECK: b.w   #-16777216

0x33 0xf0 0x21 0xb8 # rdar://12585795
0x00 0xf4 0x00 0x90

#------------------------------------------------------------------------------
# BFC
#------------------------------------------------------------------------------
# CHECK: bfc r5, #3, #17
# CHECK: it lo
# CHECK: bfclo r5, #3, #17

0x6f 0xf3 0xd3 0x05
0x38 0xbf
0x6f 0xf3 0xd3 0x05


#------------------------------------------------------------------------------
# BFI
#------------------------------------------------------------------------------
# CHECK: bfi r5, r2, #3, #17
# CHECK: it ne
# CHECK: bfine r5, r2, #3, #17
# CHECK: bfi r6, r0, #0, #32
# CHECK: bfi r6, r0, #31, #1

0x62 0xf3 0xd3 0x05
0x18 0xbf
0x62 0xf3 0xd3 0x05
0x60 0xf3 0x1f 0x06
0x60 0xf3 0xdf 0x76


#------------------------------------------------------------------------------
# BIC
#------------------------------------------------------------------------------
# CHECK: bic r10, r1, #15
# CHECK: bic.w r12, r3, r6
# CHECK: bic.w r11, r2, r6, lsl #12
# CHECK: bic.w r8, r4, r1, lsr #11
# CHECK: bic.w r7, r5, r7, lsr #15
# CHECK: bic.w r6, r7, r9, asr #32
# CHECK: bic.w r5, r6, r8, ror #1

# CHECK: bic r1, r1, #15
# CHECK: bic.w r1, r1, r1
# CHECK: bic.w r4, r4, r2, lsl #31
# CHECK: bic.w r6, r6, r3, lsr #12
# CHECK: bic.w r7, r7, r4, lsr #7
# CHECK: bic.w r8, r8, r5, asr #15
# CHECK: bic.w r12, r12, r6, ror #29

0x21 0xf0 0x0f 0x0a
0x23 0xea 0x06 0x0c
0x22 0xea 0x06 0x3b
0x24 0xea 0xd1 0x28
0x25 0xea 0xd7 0x37
0x27 0xea 0x29 0x06
0x26 0xea 0x78 0x05

0x21 0xf0 0x0f 0x01
0x21 0xea 0x01 0x01
0x24 0xea 0xc2 0x74
0x26 0xea 0x13 0x36
0x27 0xea 0xd4 0x17
0x28 0xea 0xe5 0x38
0x2c 0xea 0x76 0x7c


#------------------------------------------------------------------------------
# BXJ
#------------------------------------------------------------------------------
# CHECK: bxj r5
# CHECK: it ne
# CHECK: bxjne r7

0xc5 0xf3 0x00 0x8f
0x18 0xbf
0xc7 0xf3 0x00 0x8f


#------------------------------------------------------------------------------
# CBZ/CBNZ
#------------------------------------------------------------------------------
# CHECK: cbnz    r7, #6
# CHECK: cbnz    r7, #12
# CHECK: cbz     r4, #64

0x1f 0xb9
0x37 0xb9
0x04 0xb3


#------------------------------------------------------------------------------
# CDP/CDP2
#------------------------------------------------------------------------------
# CHECK: cdp  p7, #1, c1, c1, c1, #4
# CHECK: cdp2  p7, #1, c1, c1, c1, #4

0x11 0xee 0x81 0x17
0x11 0xfe 0x81 0x17


#------------------------------------------------------------------------------
# CLREX
#------------------------------------------------------------------------------
#CHECK: clrex
#CHECK: it ne
#CHECK: clrexne

0xbf 0xf3 0x2f 0x8f
0x18 0xbf
0xbf 0xf3 0x2f 0x8f


#------------------------------------------------------------------------------
# CLZ
#------------------------------------------------------------------------------
#CHECK: clz r1, r2
#CHECK: it eq
#CHECK: clzeq r1, r2

0xb2 0xfa 0x82 0xf1
0x08 0xbf
0xb2 0xfa 0x82 0xf1


#------------------------------------------------------------------------------
# CMN
#------------------------------------------------------------------------------
#CHECK: cmn.w r1, #15
#CHECK: cmn.w r8, r6
#CHECK: cmn.w r1, r6, lsl #10
#CHECK: cmn.w r1, r6, lsr #10
#CHECK: cmn.w sp, r6, lsr #10
#CHECK: cmn.w r1, r6, asr #10
#CHECK: cmn.w r1, r6, ror #10

0x11 0xf1 0x0f 0x0f
0x18 0xeb 0x06 0x0f
0x11 0xeb 0x86 0x2f
0x11 0xeb 0x96 0x2f
0x1d 0xeb 0x96 0x2f
0x11 0xeb 0xa6 0x2f
0x11 0xeb 0xb6 0x2f


#------------------------------------------------------------------------------
# CMP
#------------------------------------------------------------------------------
#CHECK: cmp.w r5, #65280
#CHECK: cmp.w r4, r12
#CHECK: cmp.w r9, r6, lsl #12
#CHECK: cmp.w r3, r7, lsr #31
#CHECK: cmp.w sp, r6, lsr #1
#CHECK: cmp.w r2, r5, asr #24
#CHECK: cmp.w r1, r4, ror #15

0xb5 0xf5 0x7f 0x4f
0xb4 0xeb 0x0c 0x0f
0xb9 0xeb 0x06 0x3f
0xb3 0xeb 0xd7 0x7f
0xbd 0xeb 0x56 0x0f
0xb2 0xeb 0x25 0x6f
0xb1 0xeb 0xf4 0x3f


#------------------------------------------------------------------------------
# DBG
#------------------------------------------------------------------------------
#CHECK: dbg #5
#CHECK: dbg #0
#CHECK: dbg #15

0xaf 0xf3 0xf5 0x80
0xaf 0xf3 0xf0 0x80
0xaf 0xf3 0xff 0x80


#------------------------------------------------------------------------------
# DMB
#------------------------------------------------------------------------------
#CHECK: dmb sy
#CHECK: dmb st
#CHECK: dmb #0xd
#CHECK: dmb #0xc
#CHECK: dmb ish
#CHECK: dmb ishst
#CHECK: dmb #0x9
#CHECK: dmb #0x8
#CHECK: dmb nsh
#CHECK: dmb nshst
#CHECK: dmb #0x5
#CHECK: dmb #0x4
#CHECK: dmb osh
#CHECK: dmb oshst
#CHECK: dmb #0x1
#CHECK: dmb #0x0

0xbf 0xf3 0x5f 0x8f
0xbf 0xf3 0x5e 0x8f
0xbf 0xf3 0x5d 0x8f
0xbf 0xf3 0x5c 0x8f
0xbf 0xf3 0x5b 0x8f
0xbf 0xf3 0x5a 0x8f
0xbf 0xf3 0x59 0x8f
0xbf 0xf3 0x58 0x8f
0xbf 0xf3 0x57 0x8f
0xbf 0xf3 0x56 0x8f
0xbf 0xf3 0x55 0x8f
0xbf 0xf3 0x54 0x8f
0xbf 0xf3 0x53 0x8f
0xbf 0xf3 0x52 0x8f
0xbf 0xf3 0x51 0x8f
0xbf 0xf3 0x50 0x8f


#------------------------------------------------------------------------------
# DSB
#------------------------------------------------------------------------------
#CHECK: dsb sy
#CHECK: dsb st
#CHECK: dsb #0xd
#CHECK: dsb #0xc
#CHECK: dsb ish
#CHECK: dsb ishst
#CHECK: dsb #0x9
#CHECK: dsb #0x8
#CHECK: dsb nsh
#CHECK: dsb nshst
#CHECK: dsb #0x5
#CHECK: dsb #0x4
#CHECK: dsb osh
#CHECK: dsb oshst
#CHECK: dsb #0x1
#CHECK: dsb #0x0

0xbf 0xf3 0x4f 0x8f
0xbf 0xf3 0x4e 0x8f
0xbf 0xf3 0x4d 0x8f
0xbf 0xf3 0x4c 0x8f
0xbf 0xf3 0x4b 0x8f
0xbf 0xf3 0x4a 0x8f
0xbf 0xf3 0x49 0x8f
0xbf 0xf3 0x48 0x8f
0xbf 0xf3 0x47 0x8f
0xbf 0xf3 0x46 0x8f
0xbf 0xf3 0x45 0x8f
0xbf 0xf3 0x44 0x8f
0xbf 0xf3 0x43 0x8f
0xbf 0xf3 0x42 0x8f
0xbf 0xf3 0x41 0x8f
0xbf 0xf3 0x40 0x8f


#------------------------------------------------------------------------------
# EOR
#------------------------------------------------------------------------------
#CHECK: eor r4, r5, #61440
#CHECK: eor.w r4, r5, r6
#CHECK: eor.w r4, r5, r6, lsl #5
#CHECK: eor.w r4, r5, r6, lsr #5
#CHECK: eor.w r4, r5, r6, lsr #5
#CHECK: eor.w r4, r5, r6, asr #5
#CHECK: eor.w r4, r5, r6, ror #5

0x85 0xf4 0x70 0x44
0x85 0xea 0x06 0x04
0x85 0xea 0x46 0x14
0x85 0xea 0x56 0x14
0x85 0xea 0x56 0x14
0x85 0xea 0x66 0x14
0x85 0xea 0x76 0x14


#------------------------------------------------------------------------------
# ISB
#------------------------------------------------------------------------------
#CHECK: isb sy
#CHECK: isb #0xa

0xbf 0xf3 0x6f 0x8f
0xbf 0xf3 0x6a 0x8f

#------------------------------------------------------------------------------
# IT
#------------------------------------------------------------------------------
# Test encodings of a few full IT blocks, not just the IT instruction

# CHECK: iteet eq
# CHECK: addeq r0, r1, r2
# CHECK: nopne
# CHECK: subne r5, r6, r7
# CHECK: addeq r1, r2, #4

0x0d 0xbf
0x88 0x18
0x00 0xbf
0xf5 0x1b
0x11 0x1d

# CHECK: ittee ls
# CHECK: addls r0, r1, r2
# CHECK: nopls
# CHECK: subhi r5, r6, r7
# CHECK: addhi r1, r2, #4

0x99 0xbf
0x88 0x18
0x00 0xbf
0xf5 0x1b
0x11 0x1d


#------------------------------------------------------------------------------
# LDMIA
#------------------------------------------------------------------------------
# CHECK: ldm.w r4, {r4, r5, r8, r9}
# CHECK: ldm.w r4, {r5, r6}
# CHECK: ldm.w r5!, {r3, r8}
# CHECK: ldm.w r4, {r4, r5, r8, r9}
# CHECK: ldm.w r4, {r5, r6}
# CHECK: ldm.w r5!, {r3, r8}
# CHECK: ldm.w r5!, {r1, r2}
# CHECK: ldm.w r2, {r1, r2}

# CHECK: ldm.w r4, {r4, r5, r8, r9}
# CHECK: ldm.w r4, {r5, r6}
# CHECK: ldm.w r5!, {r3, r8}
# CHECK: ldm.w r4, {r4, r5, r8, r9}
# CHECK: ldm.w r4, {r5, r6}
# CHECK: ldm.w r5!, {r3, r8}
# CHECK: ldm.w r5!, {r3, r8}

0x94 0xe8 0x30 0x03
0x94 0xe8 0x60 0x00
0xb5 0xe8 0x08 0x01
0x94 0xe8 0x30 0x03
0x94 0xe8 0x60 0x00
0xb5 0xe8 0x08 0x01
0xb5 0xe8 0x06 0x00
0x92 0xe8 0x06 0x00

0x94 0xe8 0x30 0x03
0x94 0xe8 0x60 0x00
0xb5 0xe8 0x08 0x01
0x94 0xe8 0x30 0x03
0x94 0xe8 0x60 0x00
0xb5 0xe8 0x08 0x01
0xb5 0xe8 0x08 0x01


#------------------------------------------------------------------------------
# LDMDB
#------------------------------------------------------------------------------
# CHECK: ldmdb r4, {r4, r5, r8, r9}
# CHECK: ldmdb r4, {r5, r6}
# CHECK: ldmdb r5!, {r3, r8}
# CHECK: ldmdb r5!, {r3, r8}

0x14 0xe9 0x30 0x03
0x14 0xe9 0x60 0x00
0x35 0xe9 0x08 0x01
0x35 0xe9 0x08 0x01


#------------------------------------------------------------------------------
# LDR(immediate)
#------------------------------------------------------------------------------
# CHECK: ldr r5, [r5, #-4]
# CHECK: ldr r5, [r6, #32]
# CHECK: ldr.w r5, [r6, #33]
# CHECK: ldr.w r5, [r6, #257]
# CHECK: ldr.w pc, [r7, #257]

0x55 0xf8 0x04 0x5c
0x35 0x6a
0xd6 0xf8 0x21 0x50
0xd6 0xf8 0x01 0x51
0xd7 0xf8 0x01 0xf1


#------------------------------------------------------------------------------
# LDR(literal)
#------------------------------------------------------------------------------
# CHECK: ldr.w r4, [pc, #-0]
# CHECK: ldr.w r2, [pc, #-40]
# CHECK: ldr.w r1, [pc, #1024]
0x5f 0xf8 0x00 0x40
0x5f 0xf8 0x28 0x20
0xdf 0xf8 0x00 0x14


#------------------------------------------------------------------------------
# LDR(register)
#------------------------------------------------------------------------------
# CHECK: ldr.w r1, [r8, r1]
# CHECK: ldr.w r4, [r5, r2]
# CHECK: ldr.w r6, [r0, r2, lsl #3]
# CHECK: ldr.w r8, [r8, r2, lsl #2]
# CHECK: ldr.w r7, [sp, r2, lsl #1]
# CHECK: ldr.w r7, [sp, r2]
# CHECK: ldr pc, [sp], #12
# CHECK: ldr r2, [r4, #255]!
# CHECK: ldr r8, [sp, #4]!
# CHECK: ldr lr, [sp, #-4]!
# CHECK: ldr lr, [sp, #0]!
# CHECK: ldr r2, [r4], #255
# CHECK: ldr r8, [sp], #4
# CHECK: ldr lr, [sp], #-4

0x58 0xf8 0x01 0x10
0x55 0xf8 0x02 0x40
0x50 0xf8 0x32 0x60
0x58 0xf8 0x22 0x80
0x5d 0xf8 0x12 0x70
0x5d 0xf8 0x02 0x70
0x5d 0xf8 0x0c 0xfb
0x54 0xf8 0xff 0x2f
0x5d 0xf8 0x04 0x8f
0x5d 0xf8 0x04 0xed
0x5d 0xf8 0x00 0xef
0x54 0xf8 0xff 0x2b
0x5d 0xf8 0x04 0x8b
0x5d 0xf8 0x04 0xe9


#------------------------------------------------------------------------------
# LDRB(immediate)
#------------------------------------------------------------------------------
# CHECK: ldrb r5, [r5, #-4]
# CHECK: ldrb.w r5, [r6, #32]
# CHECK: ldrb.w r5, [r6, #33]
# CHECK: ldrb.w r5, [r6, #257]
# CHECK: ldrb.w lr, [r7, #257]

0x15 0xf8 0x04 0x5c
0x96 0xf8 0x20 0x50
0x96 0xf8 0x21 0x50
0x96 0xf8 0x01 0x51
0x97 0xf8 0x01 0xe1


#------------------------------------------------------------------------------
# LDRB(register)
#------------------------------------------------------------------------------
# CHECK: ldrb.w r1, [r8, r1]
# CHECK: ldrb.w r4, [r5, r2]
# CHECK: ldrb.w r6, [r0, r2, lsl #3]
# CHECK: ldrb.w r8, [r8, r2, lsl #2]
# CHECK: ldrb.w r7, [sp, r2, lsl #1]
# CHECK: ldrb.w r7, [sp, r2]
# CHECK: ldrb r5, [r8, #255]!
# CHECK: ldrb r2, [r5, #4]!
# CHECK: ldrb r1, [r4, #-4]!
# CHECK: ldrb r1, [r4, #0]!
# CHECK: ldrb lr, [r3], #255
# CHECK: ldrb r9, [r2], #4
# CHECK: ldrb r3, [sp], #-4

0x18 0xf8 0x01 0x10
0x15 0xf8 0x02 0x40
0x10 0xf8 0x32 0x60
0x18 0xf8 0x22 0x80
0x1d 0xf8 0x12 0x70
0x1d 0xf8 0x02 0x70
0x18 0xf8 0xff 0x5f
0x15 0xf8 0x04 0x2f
0x14 0xf8 0x04 0x1d
0x14 0xf8 0x00 0x1f
0x13 0xf8 0xff 0xeb
0x12 0xf8 0x04 0x9b
0x1d 0xf8 0x04 0x39


#------------------------------------------------------------------------------
# LDRB(literal)
#------------------------------------------------------------------------------
# CHECK: ldrb.w r6, [pc, #-0]
# CHECK: ldrb.w r10, [pc, #227]
# CHECK: ldrb.w r5, [pc, #0]
0x1f 0xf8 0x00 0x60
0x9f 0xf8 0xe3 0xa0
0x9f 0xf8 0x00 0x50


#------------------------------------------------------------------------------
# LDRBT
#------------------------------------------------------------------------------
# CHECK: ldrbt r1, [r2]
# CHECK: ldrbt r1, [r8]
# CHECK: ldrbt r1, [r8, #3]
# CHECK: ldrbt r1, [r8, #255]

0x12 0xf8 0x00 0x1e
0x18 0xf8 0x00 0x1e
0x18 0xf8 0x03 0x1e
0x18 0xf8 0xff 0x1e


#------------------------------------------------------------------------------
# LDRD(immediate)
#------------------------------------------------------------------------------
# CHECK: ldrd r3, r5, [r6, #24]
# CHECK: ldrd r3, r5, [r6, #24]!
# CHECK: ldrd r3, r5, [r6], #4
# CHECK: ldrd r3, r5, [r6], #-8
# CHECK: ldrd r3, r5, [r6]
# CHECK: ldrd r8, r1, [r3]
# CHECK: ldrd r0, r1, [r2], #-0
# CHECK: ldrd r0, r1, [r2, #-0]!
# CHECK: ldrd r0, r1, [r2, #0]!
# CHECK: ldrd r0, r1, [r2, #-0]
# CHECK: ldrd r1, r1, [r0], #0

0xd6 0xe9 0x06 0x35
0xf6 0xe9 0x06 0x35
0xf6 0xe8 0x01 0x35
0x76 0xe8 0x02 0x35
0xd6 0xe9 0x00 0x35
0xd3 0xe9 0x00 0x81
0x72 0xe8 0x00 0x01
0x72 0xe9 0x00 0x01
0xf2 0xe9 0x00 0x01
0x52 0xe9 0x00 0x01
0xf0 0xe8 0x00 0x11


#------------------------------------------------------------------------------
# FIXME: LDRD(literal)
#------------------------------------------------------------------------------


#------------------------------------------------------------------------------
# LDREX/LDREXB/LDREXH/LDREXD
#------------------------------------------------------------------------------
# CHECK: ldrex r1, [r4]
# CHECK: ldrex r8, [r4]
# CHECK: ldrex r2, [sp, #128]
# CHECK: ldrexb r5, [r7]
# CHECK: ldrexh r9, [r12]
# CHECK: ldrexd r9, r3, [r4]

0x54 0xe8 0x00 0x1f
0x54 0xe8 0x00 0x8f
0x5d 0xe8 0x20 0x2f
0xd7 0xe8 0x4f 0x5f
0xdc 0xe8 0x5f 0x9f
0xd4 0xe8 0x7f 0x93


#------------------------------------------------------------------------------
# LDRH(immediate)
#------------------------------------------------------------------------------
# CHECK: ldrh r5, [r5, #-4]
# CHECK: ldrh r5, [r6, #32]
# CHECK: ldrh.w r5, [r6, #33]
# CHECK: ldrh.w r5, [r6, #257]
# CHECK: ldrh.w lr, [r7, #257]

0x35 0xf8 0x04 0x5c
0x35 0x8c
0xb6 0xf8 0x21 0x50
0xb6 0xf8 0x01 0x51
0xb7 0xf8 0x01 0xe1


#------------------------------------------------------------------------------
# LDRH(register)
#------------------------------------------------------------------------------
# CHECK: ldrh.w r1, [r8, r1]
# CHECK: ldrh.w r4, [r5, r2]
# CHECK: ldrh.w r6, [r0, r2, lsl #3]
# CHECK: ldrh.w r8, [r8, r2, lsl #2]
# CHECK: ldrh.w r7, [sp, r2, lsl #1]
# CHECK: ldrh.w r7, [sp, r2]
# CHECK: ldrh r5, [r8, #255]!
# CHECK: ldrh r2, [r5, #4]!
# CHECK: ldrh r1, [r4, #-4]!
# CHECK: ldrh r1, [r4, #0]!
# CHECK: ldrh lr, [r3], #255
# CHECK: ldrh r9, [r2], #4
# CHECK: ldrh r3, [sp], #-4

0x38 0xf8 0x01 0x10
0x35 0xf8 0x02 0x40
0x30 0xf8 0x32 0x60
0x38 0xf8 0x22 0x80
0x3d 0xf8 0x12 0x70
0x3d 0xf8 0x02 0x70
0x38 0xf8 0xff 0x5f
0x35 0xf8 0x04 0x2f
0x34 0xf8 0x04 0x1d
0x34 0xf8 0x00 0x1f
0x33 0xf8 0xff 0xeb
0x32 0xf8 0x04 0x9b
0x3d 0xf8 0x04 0x39


#------------------------------------------------------------------------------
# LDRH(literal)
#------------------------------------------------------------------------------
# CHECK: ldrh.w r7, [pc, #-0]
# CHECK: ldrh.w r5, [pc, #121]
# CHECK: ldrh.w r4, [pc, #0]
0x3f 0xf8 0x00 0x70
0xbf 0xf8 0x79 0x50
0xbf 0xf8 0x00 0x40


#------------------------------------------------------------------------------
# LDRSB(immediate)
#------------------------------------------------------------------------------
# CHECK: ldrsb r5, [r5, #-4]
# CHECK: ldrsb.w r5, [r6, #32]
# CHECK: ldrsb.w r5, [r6, #33]
# CHECK: ldrsb.w r5, [r6, #257]
# CHECK: ldrsb.w lr, [r7, #257]

0x15 0xf9 0x04 0x5c
0x96 0xf9 0x20 0x50
0x96 0xf9 0x21 0x50
0x96 0xf9 0x01 0x51
0x97 0xf9 0x01 0xe1


#------------------------------------------------------------------------------
# LDRSB(register)
#------------------------------------------------------------------------------
# CHECK: ldrsb.w r1, [r8, r1]
# CHECK: ldrsb.w r4, [r5, r2]
# CHECK: ldrsb.w r6, [r0, r2, lsl #3]
# CHECK: ldrsb.w r8, [r8, r2, lsl #2]
# CHECK: ldrsb.w r7, [sp, r2, lsl #1]
# CHECK: ldrsb.w r7, [sp, r2]
# CHECK: ldrsb r5, [r8, #255]!
# CHECK: ldrsb r2, [r5, #4]!
# CHECK: ldrsb r1, [r4, #-4]!
# CHECK: ldrsb r1, [r4, #0]!
# CHECK: ldrsb lr, [r3], #255
# CHECK: ldrsb r9, [r2], #4
# CHECK: ldrsb r3, [sp], #-4

0x18 0xf9 0x01 0x10
0x15 0xf9 0x02 0x40
0x10 0xf9 0x32 0x60
0x18 0xf9 0x22 0x80
0x1d 0xf9 0x12 0x70
0x1d 0xf9 0x02 0x70
0x18 0xf9 0xff 0x5f
0x15 0xf9 0x04 0x2f
0x14 0xf9 0x04 0x1d
0x14 0xf9 0x00 0x1f
0x13 0xf9 0xff 0xeb
0x12 0xf9 0x04 0x9b
0x1d 0xf9 0x04 0x39


#------------------------------------------------------------------------------
# LDRSB(literal)
#------------------------------------------------------------------------------
# CHECK: ldrsb.w r0, [pc, #-0]
# CHECK: ldrsb.w r12, [pc, #80]
# CHECK: ldrsb.w r3, [pc, #0]
0x1f 0xf9 0x00 0x00
0x9f 0xf9 0x50 0xc0
0x9f 0xf9 0x00 0x30


#------------------------------------------------------------------------------
# LDRSBT
#------------------------------------------------------------------------------
# CHECK: ldrsbt r1, [r2]
# CHECK: ldrsbt r1, [r8]
# CHECK: ldrsbt r1, [r8, #3]
# CHECK: ldrsbt r1, [r8, #255]

0x12 0xf9 0x00 0x1e
0x18 0xf9 0x00 0x1e
0x18 0xf9 0x03 0x1e
0x18 0xf9 0xff 0x1e


#------------------------------------------------------------------------------
# LDRSH(immediate)
#------------------------------------------------------------------------------
# CHECK: ldrsh r5, [r5, #-4]
# CHECK: ldrsh.w r5, [r6, #32]
# CHECK: ldrsh.w r5, [r6, #33]
# CHECK: ldrsh.w r5, [r6, #257]
# CHECK: ldrsh.w lr, [r7, #257]
# CHECK: ldrsh r10, [r5, #-0]

0x35 0xf9 0x04 0x5c
0xb6 0xf9 0x20 0x50
0xb6 0xf9 0x21 0x50
0xb6 0xf9 0x01 0x51
0xb7 0xf9 0x01 0xe1
0x35 0xf9 0x00 0xac

#------------------------------------------------------------------------------
# LDRSH(register)
#------------------------------------------------------------------------------
# CHECK: ldrsh.w r1, [r8, r1]
# CHECK: ldrsh.w r4, [r5, r2]
# CHECK: ldrsh.w r6, [r0, r2, lsl #3]
# CHECK: ldrsh.w r8, [r8, r2, lsl #2]
# CHECK: ldrsh.w r7, [sp, r2, lsl #1]
# CHECK: ldrsh.w r7, [sp, r2]
# CHECK: ldrsh r5, [r8, #255]!
# CHECK: ldrsh r2, [r5, #4]!
# CHECK: ldrsh r1, [r4, #-4]!
# CHECK: ldrsh r1, [r4, #0]!
# CHECK: ldrsh lr, [r3], #255
# CHECK: ldrsh r9, [r2], #4
# CHECK: ldrsh r3, [sp], #-4

0x38 0xf9 0x01 0x10
0x35 0xf9 0x02 0x40
0x30 0xf9 0x32 0x60
0x38 0xf9 0x22 0x80
0x3d 0xf9 0x12 0x70
0x3d 0xf9 0x02 0x70
0x38 0xf9 0xff 0x5f
0x35 0xf9 0x04 0x2f
0x34 0xf9 0x04 0x1d
0x34 0xf9 0x00 0x1f
0x33 0xf9 0xff 0xeb
0x32 0xf9 0x04 0x9b
0x3d 0xf9 0x04 0x39


#------------------------------------------------------------------------------
# LDRSH(literal)
#------------------------------------------------------------------------------
# CHECK: ldrsh.w r0, [pc, #-0]
# CHECK: ldrsh.w r10, [pc, #-231]
# CHECK: ldrsh.w r6, [pc, #0]
0x3f 0xf9 0x00 0x00
0x3f 0xf9 0xe7 0xa0
0xbf 0xf9 0x00 0x60


#------------------------------------------------------------------------------
# LDRSHT
#------------------------------------------------------------------------------
# CHECK: ldrsht r1, [r2]
# CHECK: ldrsht r1, [r8]
# CHECK: ldrsht r1, [r8, #3]
# CHECK: ldrsht r1, [r8, #255]

0x32 0xf9 0x00 0x1e
0x38 0xf9 0x00 0x1e
0x38 0xf9 0x03 0x1e
0x38 0xf9 0xff 0x1e


#------------------------------------------------------------------------------
# LDRT
#------------------------------------------------------------------------------
# CHECK: ldrt r1, [r2]
# CHECK: ldrt r2, [r6]
# CHECK: ldrt r3, [r7, #3]
# CHECK: ldrt r4, [r9, #255]

0x52 0xf8 0x00 0x1e
0x56 0xf8 0x00 0x2e
0x57 0xf8 0x03 0x3e
0x59 0xf8 0xff 0x4e


#------------------------------------------------------------------------------
# LSL (immediate)
#------------------------------------------------------------------------------
# CHECK: lsl.w r2, r3, #12
# CHECK: lsls.w r8, r3, #31
# CHECK: lsls.w r2, r3, #1
# CHECK: lsl.w r2, r3, #4
# CHECK: lsls.w r2, r12, #15

# CHECK: lsl.w r3, r3, #19
# CHECK: lsls.w r8, r8, #2
# CHECK: lsls.w r7, r7, #5
# CHECK: lsl.w r12, r12, #21

0x4f 0xea 0x03 0x32
0x5f 0xea 0xc3 0x78
0x5f 0xea 0x43 0x02
0x4f 0xea 0x03 0x12
0x5f 0xea 0xcc 0x32

0x4f 0xea 0xc3 0x43
0x5f 0xea 0x88 0x08
0x5f 0xea 0x47 0x17
0x4f 0xea 0x4c 0x5c


#------------------------------------------------------------------------------
# LSL (register)
#------------------------------------------------------------------------------
# CHECK: lsl.w r3, r4, r2
# CHECK: lsl.w r1, r1, r2
# CHECK: lsls.w r3, r4, r8

0x04 0xfa 0x02 0xf3
0x01 0xfa 0x02 0xf1
0x14 0xfa 0x08 0xf3


#------------------------------------------------------------------------------
# LSR (immediate)
#------------------------------------------------------------------------------
# CHECK: lsr.w r2, r3, #12
# CHECK: lsrs.w r8, r3, #32
# CHECK: lsrs.w r2, r3, #1
# CHECK: lsr.w r2, r3, #4
# CHECK: lsrs.w r2, r12, #15

# CHECK: lsr.w r3, r3, #19
# CHECK: lsrs.w r8, r8, #2
# CHECK: lsrs.w r7, r7, #5
# CHECK: lsr.w r12, r12, #21

0x4f 0xea 0x13 0x32
0x5f 0xea 0x13 0x08
0x5f 0xea 0x53 0x02
0x4f 0xea 0x13 0x12
0x5f 0xea 0xdc 0x32

0x4f 0xea 0xd3 0x43
0x5f 0xea 0x98 0x08
0x5f 0xea 0x57 0x17
0x4f 0xea 0x5c 0x5c


#------------------------------------------------------------------------------
# LSR (register)
#------------------------------------------------------------------------------
# CHECK: lsr.w r3, r4, r2
# CHECK: lsr.w r1, r1, r2
# CHECK: lsrs.w r3, r4, r8

0x24 0xfa 0x02 0xf3
0x21 0xfa 0x02 0xf1
0x34 0xfa 0x08 0xf3

#------------------------------------------------------------------------------
# MCR/MCR2
#------------------------------------------------------------------------------
# CHECK: mcr  p7, #1, r5, c1, c1, #4
# CHECK: mcr2  p7, #1, r5, c1, c1, #4

0x21 0xee 0x91 0x57
0x21 0xfe 0x91 0x57


#------------------------------------------------------------------------------
# MCRR/MCRR2
#------------------------------------------------------------------------------
# CHECK: mcrr  p7, #15, r5, r4, c1
# CHECK: mcrr2  p7, #15, r5, r4, c1

0x44 0xec 0xf1 0x57
0x44 0xfc 0xf1 0x57


#------------------------------------------------------------------------------
# MLA/MLS
#------------------------------------------------------------------------------
# CHECK: mla  r1, r2, r3, r4
# CHECK: mls  r1, r2, r3, r4

0x02 0xfb 0x03 0x41
0x02 0xfb 0x13 0x41


#------------------------------------------------------------------------------
# MOV(immediate)
#------------------------------------------------------------------------------
# CHECK: movs r1, #21
# CHECK: movs.w r1, #21
# CHECK: movs.w r8, #21
# CHECK: movw r0, #65535
# CHECK: movw r1, #43777
# CHECK: movw r1, #43792
# CHECK: mov.w r0, #66846720
# CHECK: mov.w r0, #66846720
# CHECK: movs.w r0, #66846720

0x15 0x21
0x5f 0xf0 0x15 0x01
0x5f 0xf0 0x15 0x08
0x4f 0xf6 0xff 0x70
0x4a 0xf6 0x01 0x31
0x4a 0xf6 0x10 0x31
0x4f 0xf0 0x7f 0x70
0x4f 0xf0 0x7f 0x70
0x5f 0xf0 0x7f 0x70

#------------------------------------------------------------------------------
# MOVT
#------------------------------------------------------------------------------
# CHECK: movt r3, #7
# CHECK: movt r6, #65535
# CHECK: it eq
# CHECK: movteq r4, #4080

0xc0 0xf2 0x07 0x03
0xcf 0xf6 0xff 0x76
0x08 0xbf
0xc0 0xf6 0xf0 0x74

#------------------------------------------------------------------------------
# MRC/MRC2
#------------------------------------------------------------------------------
# CHECK: mrc  p14, #0, r1, c1, c2, #4
# CHECK: mrc2  p14, #0, r1, c1, c2, #4

0x11 0xee 0x92 0x1e
0x11 0xfe 0x92 0x1e


#------------------------------------------------------------------------------
# MRRC/MRRC2
#------------------------------------------------------------------------------
# CHECK: mrrc  p7, #1, r5, r4, c1
# CHECK: mrrc2  p7, #1, r5, r4, c1

0x54 0xec 0x11 0x57
0x54 0xfc 0x11 0x57


#------------------------------------------------------------------------------
# MRS
#------------------------------------------------------------------------------
# CHECK: mrs  r8, apsr
# CHECK: mrs  r8, spsr

0xef 0xf3 0x00 0x88
0xff 0xf3 0x00 0x88


#------------------------------------------------------------------------------
# MSR
#------------------------------------------------------------------------------
# CHECK: msr  APSR_nzcvq, r1
# CHECK: msr  APSR_g, r2
# CHECK: msr  APSR_nzcvq, r3
# CHECK: msr  APSR_nzcvq, r4
# CHECK: msr  APSR_nzcvqg, r5
# CHECK: msr  CPSR_fc, r6
# CHECK: msr  CPSR_c, r7
# CHECK: msr  CPSR_x, r8
# CHECK: msr  CPSR_fc, r9
# CHECK: msr  CPSR_fc, r11
# CHECK: msr  CPSR_fsx, r12
# CHECK: msr  SPSR_fc, r0
# CHECK: msr  SPSR_fsxc, r5
# CHECK: msr  CPSR_fsxc, r8

0x81 0xf3 0x00 0x88
0x82 0xf3 0x00 0x84
0x83 0xf3 0x00 0x88
0x84 0xf3 0x00 0x88
0x85 0xf3 0x00 0x8c
0x86 0xf3 0x00 0x89
0x87 0xf3 0x00 0x81
0x88 0xf3 0x00 0x82
0x89 0xf3 0x00 0x89
0x8b 0xf3 0x00 0x89
0x8c 0xf3 0x00 0x8e
0x90 0xf3 0x00 0x89
0x95 0xf3 0x00 0x8f
0x88 0xf3 0x00 0x8f


#------------------------------------------------------------------------------
# MUL
#------------------------------------------------------------------------------
# CHECK: muls r3, r4, r3
# CHECK: mul r3, r4, r3
# CHECK: mul r3, r4, r6
# CHECK: it eq
# CHECK: muleq r3, r4, r5

0x63 0x43
0x04 0xfb 0x03 0xf3
0x04 0xfb 0x06 0xf3
0x08 0xbf
0x04 0xfb 0x05 0xf3


#------------------------------------------------------------------------------
# MVN(immediate)
#------------------------------------------------------------------------------
# CHECK: mvns r8, #21
# CHECK: mvn r0, #66846720
# CHECK: mvns r0, #66846720
# CHECK: itte eq
# CHECK: mvnseq r1, #12
# CHECK: mvneq r1, #12
# CHECK: mvnne r1, #12

0x7f 0xf0 0x15 0x08
0x6f 0xf0 0x7f 0x70
0x7f 0xf0 0x7f 0x70
0x06 0xbf
0x7f 0xf0 0x0c 0x01
0x6f 0xf0 0x0c 0x01
0x6f 0xf0 0x0c 0x01


#------------------------------------------------------------------------------
# MVN(register)
#------------------------------------------------------------------------------
# CHECK: mvn.w r2, r3
# CHECK: mvns r2, r3
# CHECK: mvn.w r5, r6, lsl #19
# CHECK: mvn.w r5, r6, lsr #9
# CHECK: mvn.w r5, r6, asr #4
# CHECK: mvn.w r5, r6, ror #6
# CHECK: mvn.w r5, r6, rrx
# CHECK: it eq
# CHECK: mvneq r2, r3

0x6f 0xea 0x03 0x02
0xda 0x43
0x6f 0xea 0xc6 0x45
0x6f 0xea 0x56 0x25
0x6f 0xea 0x26 0x15
0x6f 0xea 0xb6 0x15
0x6f 0xea 0x36 0x05
0x08 0xbf
0xda 0x43

#------------------------------------------------------------------------------
# NOP
#------------------------------------------------------------------------------
# CHECK: nop.w

0xaf 0xf3 0x00 0x80


#------------------------------------------------------------------------------
# ORN
#------------------------------------------------------------------------------
# CHECK: orn r4, r5, #61440
# CHECK: orn r4, r5, r6
# CHECK: orns r4, r5, r6
# CHECK: orn r4, r5, r6, lsl #5
# CHECK: orns r4, r5, r6, lsr #5
# CHECK: orn r4, r5, r6, lsr #5
# CHECK: orns r4, r5, r6, asr #5
# CHECK: orn r4, r5, r6, ror #5

0x65 0xf4 0x70 0x44
0x65 0xea 0x06 0x04
0x75 0xea 0x06 0x04
0x65 0xea 0x46 0x14
0x75 0xea 0x56 0x14
0x65 0xea 0x56 0x14
0x75 0xea 0x66 0x14
0x65 0xea 0x76 0x14


#------------------------------------------------------------------------------
# ORR
#------------------------------------------------------------------------------
# CHECK: orr r4, r5, #61440
# CHECK: orr.w r4, r5, r6
# CHECK: orr.w r4, r5, r6, lsl #5
# CHECK: orrs.w r4, r5, r6, lsr #5
# CHECK: orr.w r4, r5, r6, lsr #5
# CHECK: orrs.w r4, r5, r6, asr #5
# CHECK: orr.w r4, r5, r6, ror #5

0x45 0xf4 0x70 0x44
0x45 0xea 0x06 0x04
0x45 0xea 0x46 0x14
0x55 0xea 0x56 0x14
0x45 0xea 0x56 0x14
0x55 0xea 0x66 0x14
0x45 0xea 0x76 0x14


#------------------------------------------------------------------------------
# PKH
#------------------------------------------------------------------------------
# CHECK: pkhbt r2, r2, r3
# CHECK: pkhbt r2, r2, r3, lsl #31
# CHECK: pkhbt r2, r2, r3, lsl #15

# CHECK: pkhtb r2, r2, r3, asr #31
# CHECK: pkhtb r2, r2, r3, asr #15

0xc2 0xea 0x03 0x02
0xc2 0xea 0xc3 0x72
0xc2 0xea 0xc3 0x32

0xc2 0xea 0xe3 0x72
0xc2 0xea 0xe3 0x32


#------------------------------------------------------------------------------
# PLD(immediate)
#------------------------------------------------------------------------------
# CHECK: pld [r5, #-4]
# CHECK: pld [r6, #32]
# CHECK: pld [r6, #33]
# CHECK: pld [r6, #257]
# CHECK: pld [r7, #257]

0x15 0xf8 0x04 0xfc
0x96 0xf8 0x20 0xf0
0x96 0xf8 0x21 0xf0
0x96 0xf8 0x01 0xf1
0x97 0xf8 0x01 0xf1

#------------------------------------------------------------------------------
# PLD(register)
#------------------------------------------------------------------------------
# CHECK: pld [r8, r1]
# CHECK: pld [r5, r2]
# CHECK: pld [r0, r2, lsl #3]
# CHECK: pld [r8, r2, lsl #2]
# CHECK: pld [sp, r2, lsl #1]
# CHECK: pld [sp, r2]

0x18 0xf8 0x01 0xf0
0x15 0xf8 0x02 0xf0
0x10 0xf8 0x32 0xf0
0x18 0xf8 0x22 0xf0
0x1d 0xf8 0x12 0xf0
0x1d 0xf8 0x02 0xf0

#------------------------------------------------------------------------------
# PLD(literal)
#------------------------------------------------------------------------------
# CHECK: pld [pc, #-0]
# CHECK: pld [pc, #455]
# CHECK: pld [pc, #0]

0x1f 0xf8 0x00 0xf0
0x9f 0xf8 0xc7 0xf1
0x9f 0xf8 0x00 0xf0

#------------------------------------------------------------------------------
# PLI(immediate)
#------------------------------------------------------------------------------
# CHECK: pli [r5, #-4]
# CHECK: pli [r6, #32]
# CHECK: pli [r6, #33]
# CHECK: pli [r6, #257]
# CHECK: pli [r7, #257]

0x15 0xf9 0x04 0xfc
0x96 0xf9 0x20 0xf0
0x96 0xf9 0x21 0xf0
0x96 0xf9 0x01 0xf1
0x97 0xf9 0x01 0xf1

#------------------------------------------------------------------------------
# PLI(register)
#------------------------------------------------------------------------------
# CHECK: pli [r8, r1]
# CHECK: pli [r5, r2]
# CHECK: pli [r0, r2, lsl #3]
# CHECK: pli [r8, r2, lsl #2]
# CHECK: pli [sp, r2, lsl #1]
# CHECK: pli [sp, r2]

0x18 0xf9 0x01 0xf0
0x15 0xf9 0x02 0xf0
0x10 0xf9 0x32 0xf0
0x18 0xf9 0x22 0xf0
0x1d 0xf9 0x12 0xf0
0x1d 0xf9 0x02 0xf0

#------------------------------------------------------------------------------
# PLI(literal)
#------------------------------------------------------------------------------
# CHECK: pli [pc, #-0]
# CHECK: pli [pc, #-328]
# CHECK: pli [pc, #0]

0x1f 0xf9 0x00 0xf0
0x1f 0xf9 0x48 0xf1
0x9f 0xf9 0x00 0xf0


#------------------------------------------------------------------------------
# QADD/QADD16/QADD8
#------------------------------------------------------------------------------
# CHECK: qadd r1, r2, r3
# CHECK: qadd16 r1, r2, r3
# CHECK: qadd8 r1, r2, r3
# CHECK: itte gt
# CHECK: qaddgt r1, r2, r3
# CHECK: qadd16gt r1, r2, r3
# CHECK: qadd8le r1, r2, r3

0x83 0xfa 0x82 0xf1
0x92 0xfa 0x13 0xf1
0x82 0xfa 0x13 0xf1
0xc6 0xbf
0x83 0xfa 0x82 0xf1
0x92 0xfa 0x13 0xf1
0x82 0xfa 0x13 0xf1


#------------------------------------------------------------------------------
# QDADD/QDSUB
#------------------------------------------------------------------------------
# CHECK: qdadd r6, r7, r8
# CHECK: qdsub r6, r7, r8
# CHECK: itt hi
# CHECK: qdaddhi r6, r7, r8
# CHECK: qdsubhi r6, r7, r8

0x88 0xfa 0x97 0xf6
0x88 0xfa 0xb7 0xf6
0x84 0xbf
0x88 0xfa 0x97 0xf6
0x88 0xfa 0xb7 0xf6


#------------------------------------------------------------------------------
# QSAX
#------------------------------------------------------------------------------
# CHECK: qsax r9, r12, r0
# CHECK: it eq
# CHECK: qsaxeq r9, r12, r0

0xec 0xfa 0x10 0xf9
0x08 0xbf
0xec 0xfa 0x10 0xf9


#------------------------------------------------------------------------------
# QSUB/QSUB16/QSUB8
#------------------------------------------------------------------------------
# CHECK: qsub r1, r2, r3
# CHECK: qsub16 r1, r2, r3
# CHECK: qsub8 r1, r2, r3
# CHECK: itet le
# CHECK: qsuble r1, r2, r3
# CHECK: qsub16gt r1, r2, r3
# CHECK: qsub8le r1, r2, r3

0x83 0xfa 0xa2 0xf1
0xd2 0xfa 0x13 0xf1
0xc2 0xfa 0x13 0xf1
0xd6 0xbf
0x83 0xfa 0xa2 0xf1
0xd2 0xfa 0x13 0xf1
0xc2 0xfa 0x13 0xf1


#------------------------------------------------------------------------------
# RBIT
#------------------------------------------------------------------------------
# CHECK: rbit r1, r2
# CHECK: it ne
# CHECK: rbitne r1, r2

0x92 0xfa 0xa2 0xf1
0x18 0xbf
0x92 0xfa 0xa2 0xf1


#------------------------------------------------------------------------------
# REV
#------------------------------------------------------------------------------
# CHECK: rev.w r1, r2
# CHECK: rev.w r2, r8
# CHECK: itt ne
# CHECK: revne r1, r2
# CHECK: revne.w r1, r8

0x92 0xfa 0x82 0xf1
0x98 0xfa 0x88 0xf2
0x1c 0xbf
0x11 0xba
0x98 0xfa 0x88 0xf1


#------------------------------------------------------------------------------
# REV16
#------------------------------------------------------------------------------
# CHECK: rev16.w r1, r2
# CHECK: rev16.w r2, r8
# CHECK: itt ne
# CHECK: rev16ne r1, r2
# CHECK: rev16ne.w r1, r8

0x92 0xfa 0x92 0xf1
0x98 0xfa 0x98 0xf2
0x1c 0xbf
0x51 0xba
0x98 0xfa 0x98 0xf1


#------------------------------------------------------------------------------
# REVSH
#------------------------------------------------------------------------------
# CHECK: revsh.w r1, r2
# CHECK: revsh.w r2, r8
# CHECK: itt ne
# CHECK: revshne r1, r2
# CHECK: revshne.w r1, r8

0x92 0xfa 0xb2 0xf1
0x98 0xfa 0xb8 0xf2
0x1c 0xbf
0xd1 0xba
0x98 0xfa 0xb8 0xf1


#------------------------------------------------------------------------------
# ROR (immediate)
#------------------------------------------------------------------------------
# CHECK: ror.w r2, r3, #12
# CHECK: rors.w r8, r3, #31
# CHECK: rors.w r2, r3, #1
# CHECK: ror.w r2, r3, #4
# CHECK: rors.w r2, r12, #15

# CHECK: ror.w r3, r3, #19
# CHECK: rors.w r8, r8, #2
# CHECK: rors.w r7, r7, #5
# CHECK: ror.w r12, r12, #21

0x4f 0xea 0x33 0x32
0x5f 0xea 0xf3 0x78
0x5f 0xea 0x73 0x02
0x4f 0xea 0x33 0x12
0x5f 0xea 0xfc 0x32

0x4f 0xea 0xf3 0x43
0x5f 0xea 0xb8 0x08
0x5f 0xea 0x77 0x17
0x4f 0xea 0x7c 0x5c


#------------------------------------------------------------------------------
# ROR (register)
#------------------------------------------------------------------------------
# CHECK: ror.w r3, r4, r2
# CHECK: ror.w r1, r1, r2
# CHECK: rors.w r3, r4, r8

0x64 0xfa 0x02 0xf3
0x61 0xfa 0x02 0xf1
0x74 0xfa 0x08 0xf3


#------------------------------------------------------------------------------
# RRX
#------------------------------------------------------------------------------
# CHECK: rrx r1, r2
# CHECK: rrxs r1, r2
# CHECK: ite lt
# CHECK: rrxlt r9, r12
# CHECK: rrxsge r8, r3

0x4f 0xea 0x32 0x01
0x5f 0xea 0x32 0x01
0xb4 0xbf
0x4f 0xea 0x3c 0x09
0x5f 0xea 0x33 0x08

#------------------------------------------------------------------------------
# RSB (immediate)
#------------------------------------------------------------------------------
# CHECK: rsb.w r2, r5, #1044480
# CHECK: rsbs.w r3, r12, #15
# CHECK: rsb.w r1, r1, #255

0xc5 0xf5 0x7f 0x22
0xdc 0xf1 0x0f 0x03
0xc1 0xf1 0xff 0x01


#------------------------------------------------------------------------------
# RSB (register)
#------------------------------------------------------------------------------
# CHECK: rsb r4, r4, r8
# CHECK: rsb r4, r9, r8
# CHECK: rsb r1, r4, r8, asr #3
# CHECK: rsbs r2, r1, r7, lsl #1

0xc4 0xeb 0x08 0x04
0xc9 0xeb 0x08 0x04
0xc4 0xeb 0xe8 0x01
0xd1 0xeb 0x47 0x02


#------------------------------------------------------------------------------
# SADD16
#------------------------------------------------------------------------------
# CHECK: sadd16 r3, r4, r8
# CHECK: it ne
# CHECK: sadd16ne r3, r4, r8

0x94 0xfa 0x08 0xf3
0x18 0xbf
0x94 0xfa 0x08 0xf3


#------------------------------------------------------------------------------
# SADD8
#------------------------------------------------------------------------------
# CHECK: sadd8 r3, r4, r8
# CHECK: it ne
# CHECK: sadd8ne r3, r4, r8

0x84 0xfa 0x08 0xf3
0x18 0xbf
0x84 0xfa 0x08 0xf3


#------------------------------------------------------------------------------
# SASX
#------------------------------------------------------------------------------
# CHECK: sasx r9, r2, r7
# CHECK: it ne
# CHECK: sasxne r2, r5, r6

0xa2 0xfa 0x07 0xf9
0x18 0xbf
0xa5 0xfa 0x06 0xf2


#------------------------------------------------------------------------------
# SBC (immediate)
#------------------------------------------------------------------------------
# CHECK: sbc r0, r1, #4
# CHECK: sbcs r0, r1, #0
# CHECK: sbc r1, r2, #255
# CHECK: sbc r3, r7, #5570645
# CHECK: sbc r8, r12, #2852170240
# CHECK: sbc r9, r7, #2779096485
# CHECK: sbc r5, r3, #2264924160
# CHECK: sbc r4, r2, #2139095040
# CHECK: sbc r4, r2, #1664

0x61 0xf1 0x04 0x00
0x71 0xf1 0x00 0x00
0x62 0xf1 0xff 0x01
0x67 0xf1 0x55 0x13
0x6c 0xf1 0xaa 0x28
0x67 0xf1 0xa5 0x39
0x63 0xf1 0x07 0x45
0x62 0xf1 0xff 0x44
0x62 0xf5 0xd0 0x64


#------------------------------------------------------------------------------
# SBC (register)
#------------------------------------------------------------------------------
# CHECK: sbc.w r4, r5, r6
# CHECK: sbcs.w r4, r5, r6
# CHECK: sbc.w r9, r1, r3
# CHECK: sbcs.w r9, r1, r3
# CHECK: sbc.w r0, r1, r3, ror #4
# CHECK: sbcs.w r0, r1, r3, lsl #7
# CHECK: sbc.w r0, r1, r3, lsr #31
# CHECK: sbcs.w r0, r1, r3, asr #32

0x65 0xeb 0x06 0x04
0x75 0xeb 0x06 0x04
0x61 0xeb 0x03 0x09
0x71 0xeb 0x03 0x09
0x61 0xeb 0x33 0x10
0x71 0xeb 0xc3 0x10
0x61 0xeb 0xd3 0x70
0x71 0xeb 0x23 0x00


#------------------------------------------------------------------------------
# SBFX
#------------------------------------------------------------------------------
# CHECK: sbfx r4, r5, #16, #1
# CHECK: it gt
# CHECK: sbfxgt r4, r5, #16, #16

0x45 0xf3 0x00 0x44
0xc8 0xbf
0x45 0xf3 0x0f 0x44


#------------------------------------------------------------------------------
# SEL
#------------------------------------------------------------------------------
# CHECK: sel r5, r9, r2
# CHECK: it le
# CHECK: selle r5, r9, r2

0xa9 0xfa 0x82 0xf5
0xd8 0xbf
0xa9 0xfa 0x82 0xf5


#------------------------------------------------------------------------------
# SEV
#------------------------------------------------------------------------------
# CHECK: sev.w
# CHECK: it eq
# CHECK: seveq.w

0xaf 0xf3 0x04 0x80
0x08 0xbf
0xaf 0xf3 0x04 0x80


#------------------------------------------------------------------------------
# SADD16/SADD8
#------------------------------------------------------------------------------
# CHECK: sadd16 r1, r2, r3
# CHECK: sadd8 r1, r2, r3
# CHECK: ite gt
# CHECK: sadd16gt r1, r2, r3
# CHECK: sadd8le r1, r2, r3

0x92 0xfa 0x03 0xf1
0x82 0xfa 0x03 0xf1
0xcc 0xbf
0x92 0xfa 0x03 0xf1
0x82 0xfa 0x03 0xf1


#------------------------------------------------------------------------------
# SHASX
#------------------------------------------------------------------------------
# CHECK: shasx r4, r8, r2
# CHECK: it gt
# CHECK: shasxgt r4, r8, r2

0xa8 0xfa 0x22 0xf4
0xc8 0xbf
0xa8 0xfa 0x22 0xf4


#------------------------------------------------------------------------------
# SHASX
#------------------------------------------------------------------------------
# CHECK: shsax r4, r8, r2
# CHECK: it gt
# CHECK: shsaxgt r4, r8, r2

0xe8 0xfa 0x22 0xf4
0xc8 0xbf
0xe8 0xfa 0x22 0xf4


#------------------------------------------------------------------------------
# SHSUB16/SHSUB8
#------------------------------------------------------------------------------
# CHECK: shsub16 r4, r8, r2
# CHECK: shsub8 r4, r8, r2
# CHECK: itt gt
# CHECK: shsub16gt r4, r8, r2
# CHECK: shsub8gt r4, r8, r2

0xd8 0xfa 0x22 0xf4
0xc8 0xfa 0x22 0xf4
0xc4 0xbf
0xd8 0xfa 0x22 0xf4
0xc8 0xfa 0x22 0xf4


#------------------------------------------------------------------------------
# SMLABB/SMLABT/SMLATB/SMLATT
#------------------------------------------------------------------------------
# CHECK: smlabb r3, r1, r9, r0
# CHECK: smlabt r5, r6, r4, r1
# CHECK: smlatb r4, r2, r3, r2
# CHECK: smlatt r8, r3, r8, r4
# CHECK: itete gt
# CHECK: smlabbgt r3, r1, r9, r0
# CHECK: smlabtle r5, r6, r4, r1
# CHECK: smlatbgt r4, r2, r3, r2
# CHECK: smlattle r8, r3, r8, r4

0x11 0xfb 0x09 0x03
0x16 0xfb 0x14 0x15
0x12 0xfb 0x23 0x24
0x13 0xfb 0x38 0x48
0xcb 0xbf
0x11 0xfb 0x09 0x03
0x16 0xfb 0x14 0x15
0x12 0xfb 0x23 0x24
0x13 0xfb 0x38 0x48


#------------------------------------------------------------------------------
# SMLAD/SMLADX
#------------------------------------------------------------------------------
# CHECK: smlad r2, r3, r5, r8
# CHECK: smladx r2, r3, r5, r8
# CHECK: itt hi
# CHECK: smladhi r2, r3, r5, r8
# CHECK: smladxhi r2, r3, r5, r8

0x23 0xfb 0x05 0x82
0x23 0xfb 0x15 0x82
0x84 0xbf
0x23 0xfb 0x05 0x82
0x23 0xfb 0x15 0x82


#------------------------------------------------------------------------------
# SMLAL
#------------------------------------------------------------------------------
# CHECK: smlal r2, r3, r5, r8
# CHECK: it eq
# CHECK: smlaleq r2, r3, r5, r8

0xc5 0xfb 0x08 0x23
0x08 0xbf
0xc5 0xfb 0x08 0x23


#------------------------------------------------------------------------------
# SMLALBB/SMLALBT/SMLALTB/SMLALTT
#------------------------------------------------------------------------------
# CHECK: smlalbb r3, r1, r9, r0
# CHECK: smlalbt r5, r6, r4, r1
# CHECK: smlaltb r4, r2, r3, r2
# CHECK: smlaltt r8, r3, r8, r4
# CHECK: iteet ge
# CHECK: smlalbbge r3, r1, r9, r0
# CHECK: smlalbtlt r5, r6, r4, r1
# CHECK: smlaltblt r4, r2, r3, r2
# CHECK: smlalttge r8, r3, r8, r4

0xc9 0xfb 0x80 0x31
0xc4 0xfb 0x91 0x56
0xc3 0xfb 0xa2 0x42
0xc8 0xfb 0xb4 0x83
0xad 0xbf
0xc9 0xfb 0x80 0x31
0xc4 0xfb 0x91 0x56
0xc3 0xfb 0xa2 0x42
0xc8 0xfb 0xb4 0x83

#------------------------------------------------------------------------------
# SMLALD/SMLALDX
#------------------------------------------------------------------------------
# CHECK: smlald r2, r3, r5, r8
# CHECK: smlaldx r2, r3, r5, r8
# CHECK: ite eq
# CHECK: smlaldeq r2, r3, r5, r8
# CHECK: smlaldxne r2, r3, r5, r8

0xc5 0xfb 0xc8 0x23
0xc5 0xfb 0xd8 0x23
0x0c 0xbf
0xc5 0xfb 0xc8 0x23
0xc5 0xfb 0xd8 0x23


#------------------------------------------------------------------------------
# SMLAWB/SMLAWT
#------------------------------------------------------------------------------
# CHECK: smlawb r2, r3, r10, r8
# CHECK: smlawt r8, r3, r5, r9
# CHECK: ite eq
# CHECK: smlawbeq r2, r7, r5, r8
# CHECK: smlawtne r1, r3, r0, r8

0x33 0xfb 0x0a 0x82
0x33 0xfb 0x15 0x98
0x0c 0xbf
0x37 0xfb 0x05 0x82
0x33 0xfb 0x10 0x81


#------------------------------------------------------------------------------
# SMLSD/SMLSDX
#------------------------------------------------------------------------------
# CHECK: smlsd r2, r3, r5, r8
# CHECK: smlsdx r2, r3, r5, r8
# CHECK: ite le
# CHECK: smlsdle r2, r3, r5, r8
# CHECK: smlsdxgt r2, r3, r5, r8

0x43 0xfb 0x05 0x82
0x43 0xfb 0x15 0x82
0xd4 0xbf
0x43 0xfb 0x05 0x82
0x43 0xfb 0x15 0x82


#------------------------------------------------------------------------------
# SMLSLD/SMLSLDX
#------------------------------------------------------------------------------
# CHECK: smlsld r2, r9, r5, r1
# CHECK: smlsldx r4, r11, r2, r8
# CHECK: ite ge
# CHECK: smlsldge r8, r2, r5, r6
# CHECK: smlsldxlt r1, r0, r3, r8

0xd5 0xfb 0xc1 0x29
0xd2 0xfb 0xd8 0x4b
0xac 0xbf
0xd5 0xfb 0xc6 0x82
0xd3 0xfb 0xd8 0x10


#------------------------------------------------------------------------------
# SMMLA/SMMLAR
#------------------------------------------------------------------------------
# CHECK: smmla r1, r2, r3, r4
# CHECK: smmlar r4, r3, r2, r1
# CHECK: ite lo
# CHECK: smmlalo r1, r2, r3, r4
# CHECK: smmlarhs r4, r3, r2, r1

0x52 0xfb 0x03 0x41
0x53 0xfb 0x12 0x14
0x34 0xbf
0x52 0xfb 0x03 0x41
0x53 0xfb 0x12 0x14


#------------------------------------------------------------------------------
# SMMLS/SMMLSR
#------------------------------------------------------------------------------
# CHECK: smmls r1, r2, r3, r4
# CHECK: smmlsr r4, r3, r2, r1
# CHECK: ite lo
# CHECK: smmlslo r1, r2, r3, r4
# CHECK: smmlsrhs r4, r3, r2, r1

0x62 0xfb 0x03 0x41
0x63 0xfb 0x12 0x14
0x34 0xbf
0x62 0xfb 0x03 0x41
0x63 0xfb 0x12 0x14

#------------------------------------------------------------------------------
# SSAT
#------------------------------------------------------------------------------
# CHECK: ssat r9, #30, r0, asr #2

0x20 0xf3 0x9d 0x09

#------------------------------------------------------------------------------
# STR (immediate)
#------------------------------------------------------------------------------
# CHECK: str r10, [r11], #0

0x4b 0xf8 0x00 0xab

#------------------------------------------------------------------------------
# STRD (immediate)
#------------------------------------------------------------------------------
# CHECK: strd r1, r1, [r0], #0
# CHECK: strd r6, r3, [r5], #-8
# CHECK: strd r8, r5, [r5], #-0
# CHECK: strd r7, r4, [r5], #-4
# CHECK: strd r0, r1, [r2, #-0]!
# CHECK: strd r0, r1, [r2, #0]!
# CHECK: strd r0, r1, [r2, #-0]

0xe0 0xe8 0x00 0x11
0x65 0xe8 0x02 0x63
0x65 0xe8 0x00 0x85
0x65 0xe8 0x01 0x74
0x62 0xe9 0x00 0x01
0xe2 0xe9 0x00 0x01
0x42 0xe9 0x00 0x01

#------------------------------------------------------------------------------
# STREX/STREXB/STREXH/STREXD
#------------------------------------------------------------------------------
# CHECK: strex r1, r8, [r4]
# CHECK: strex r8, r2, [r4]
# CHECK: strex r2, r12, [sp, #128]
# CHECK: strexb r5, r1, [r7]
# CHECK: strexh r9, r7, [r12]
# CHECK: strexd r9, r3, r6, [r4]

0x44 0xe8 0x00 0x81
0x44 0xe8 0x00 0x28
0x4d 0xe8 0x20 0xc2
0xc7 0xe8 0x45 0x1f
0xcc 0xe8 0x59 0x7f
0xc4 0xe8 0x79 0x36


#------------------------------------------------------------------------------
# STRH(immediate)
#------------------------------------------------------------------------------
# CHECK: strh r5, [r5, #-4]
# CHECK: strh r5, [r6, #32]
# CHECK: strh.w r5, [r6, #33]
# CHECK: strh.w r5, [r6, #257]
# CHECK: strh.w lr, [r7, #257]
# CHECK: strh r5, [r8, #255]!
# CHECK: strh r2, [r5, #4]!
# CHECK: strh r1, [r4, #-4]!
# CHECK: strh r1, [r4, #0]!
# CHECK: strh lr, [r3], #255
# CHECK: strh r9, [r2], #4
# CHECK: strh r3, [sp], #-4

0x25 0xf8 0x04 0x5c
0x35 0x84
0xa6 0xf8 0x21 0x50
0xa6 0xf8 0x01 0x51
0xa7 0xf8 0x01 0xe1
0x28 0xf8 0xff 0x5f
0x25 0xf8 0x04 0x2f
0x24 0xf8 0x04 0x1d
0x24 0xf8 0x00 0x1f
0x23 0xf8 0xff 0xeb
0x22 0xf8 0x04 0x9b
0x2d 0xf8 0x04 0x39


#------------------------------------------------------------------------------
# STRH(register)
#------------------------------------------------------------------------------
# CHECK: strh.w r1, [r8, r1]
# CHECK: strh.w r4, [r5, r2]
# CHECK: strh.w r6, [r0, r2, lsl #3]
# CHECK: strh.w r8, [r8, r2, lsl #2]
# CHECK: strh.w r7, [sp, r2, lsl #1]
# CHECK: strh.w r7, [sp, r2]

0x28 0xf8 0x01 0x10
0x25 0xf8 0x02 0x40
0x20 0xf8 0x32 0x60
0x28 0xf8 0x22 0x80
0x2d 0xf8 0x12 0x70
0x2d 0xf8 0x02 0x70


#------------------------------------------------------------------------------
# STRHT
#------------------------------------------------------------------------------
# CHECK: strht r1, [r2]
# CHECK: strht r1, [r8]
# CHECK: strht r1, [r8, #3]
# CHECK: strht r1, [r8, #255]

0x22 0xf8 0x00 0x1e
0x28 0xf8 0x00 0x1e
0x28 0xf8 0x03 0x1e
0x28 0xf8 0xff 0x1e


#------------------------------------------------------------------------------
# STRT
#------------------------------------------------------------------------------
# CHECK: strt r1, [r2]
# CHECK: strt r1, [r8]
# CHECK: strt r1, [r8, #3]
# CHECK: strt r1, [r8, #255]

0x42 0xf8 0x00 0x1e
0x48 0xf8 0x00 0x1e
0x48 0xf8 0x03 0x1e
0x48 0xf8 0xff 0x1e


#------------------------------------------------------------------------------
# SUB (immediate)
#------------------------------------------------------------------------------
# CHECK: itet eq
# CHECK: subeq r1, r2, #4
# CHECK: subwne r5, r3, #1023
# CHECK: subweq r4, r5, #293
# CHECK: sub.w r2, sp, #1024
# CHECK: sub.w r2, r8, #65280
# CHECK: subw r2, r3, #257
# CHECK: sub.w r12, r6, #256
# CHECK: subw r12, r6, #256
# CHECK: subs.w r1, r2, #496
# CHECK: subs pc, lr, #4

0x0a 0xbf
0x11 0x1f
0xa3 0xf2 0xff 0x35
0xa5 0xf2 0x25 0x14
0xad 0xf5 0x80 0x62
0xa8 0xf5 0x7f 0x42
0xa3 0xf2 0x01 0x12
0xa6 0xf5 0x80 0x7c
0xa6 0xf2 0x00 0x1c
0xb2 0xf5 0xf8 0x71
0xde 0xf3 0x04 0x8f


#------------------------------------------------------------------------------
# SUB (register)
#------------------------------------------------------------------------------
# CHECK: sub.w r4, r5, r6
# CHECK: sub.w r4, r5, r6, lsl #5
# CHECK: sub.w r4, r5, r6, lsr #5
# CHECK: sub.w r4, r5, r6, lsr #5
# CHECK: sub.w r4, r5, r6, asr #5
# CHECK: sub.w r4, r5, r6, ror #5
# CHECK: sub.w r5, r2, r12, rrx

0xa5 0xeb 0x06 0x04
0xa5 0xeb 0x46 0x14
0xa5 0xeb 0x56 0x14
0xa5 0xeb 0x56 0x14
0xa5 0xeb 0x66 0x14
0xa5 0xeb 0x76 0x14
0xa2 0xeb 0x3c 0x05


#------------------------------------------------------------------------------
# SVC
#------------------------------------------------------------------------------
# CHECK: svc #0
# CHECK: ite eq
# CHECK: svceq #255
# CHECK: svcne #33

0x00 0xdf
0x0c 0xbf
0xff 0xdf
0x21 0xdf

#------------------------------------------------------------------------------
# SXTAB
#------------------------------------------------------------------------------
# CHECK:  sxtab r2, r3, r4
# CHECK:  sxtab r4, r5, r6
# CHECK:  it lt
# CHECK:  sxtablt r6, r2, r9, ror #8
# CHECK:  sxtab r5, r1, r4, ror #16
# CHECK:  sxtab r7, r8, r3, ror #24

0x43 0xfa 0x84 0xf2
0x45 0xfa 0x86 0xf4
0xb8 0xbf
0x42 0xfa 0x99 0xf6
0x41 0xfa 0xa4 0xf5
0x48 0xfa 0xb3 0xf7


#------------------------------------------------------------------------------
# SXTAB16
#------------------------------------------------------------------------------
# CHECK:  sxtab16 r6, r2, r7
# CHECK:  sxtab16 r3, r5, r8, ror #8
# CHECK:  sxtab16 r3, r2, r1, ror #16
# CHECK:  ite ne
# CHECK:  sxtab16ne r0, r1, r4
# CHECK:  sxtab16eq r1, r2, r3, ror #24

0x22 0xfa 0x87 0xf6
0x25 0xfa 0x98 0xf3
0x22 0xfa 0xa1 0xf3
0x14 0xbf
0x21 0xfa 0x84 0xf0
0x22 0xfa 0xb3 0xf1


#------------------------------------------------------------------------------
# SXTAH
#------------------------------------------------------------------------------
# CHECK:  sxtah r1, r3, r9
# CHECK:  sxtah r3, r8, r3, ror #8
# CHECK:  sxtah r9, r3, r3, ror #24
# CHECK:  ite hi
# CHECK:  sxtahhi r6, r1, r6
# CHECK:  sxtahls r2, r2, r4, ror #16

0x03 0xfa 0x89 0xf1
0x08 0xfa 0x93 0xf3
0x03 0xfa 0xb3 0xf9
0x8c 0xbf
0x01 0xfa 0x86 0xf6
0x02 0xfa 0xa4 0xf2


#------------------------------------------------------------------------------
# SXTB
#------------------------------------------------------------------------------
# CHECK:  sxtb r5, r6
# CHECK:  sxtb.w r6, r9, ror #8
# CHECK:  sxtb.w r8, r3, ror #24
# CHECK:  ite ge
# CHECK:  sxtbge r2, r4
# CHECK:  sxtblt.w r5, r1, ror #16

0x75 0xb2
0x4f 0xfa 0x99 0xf6
0x4f 0xfa 0xb3 0xf8
0xac 0xbf
0x62 0xb2
0x4f 0xfa 0xa1 0xf5


#------------------------------------------------------------------------------
# SXTB16
#------------------------------------------------------------------------------
# CHECK:  sxtb16 r1, r4
# CHECK:  sxtb16 r6, r7
# CHECK:  sxtb16 r3, r1, ror #16
# CHECK:  ite hs
# CHECK:  sxtb16hs r3, r5, ror #8
# CHECK:  sxtb16lo r2, r3, ror #24

0x2f 0xfa 0x84 0xf1
0x2f 0xfa 0x87 0xf6
0x2f 0xfa 0xa1 0xf3
0x2c 0xbf
0x2f 0xfa 0x95 0xf3
0x2f 0xfa 0xb3 0xf2


#------------------------------------------------------------------------------
# SXTH
#------------------------------------------------------------------------------
# CHECK:  sxth r1, r6
# CHECK:  sxth.w r3, r8, ror #8
# CHECK:  sxth.w r9, r3, ror #24
# CHECK:  itt ne
# CHECK:  sxthne.w r3, r9
# CHECK:  sxthne.w r2, r2, ror #16

0x31 0xb2
0x0f 0xfa 0x98 0xf3
0x0f 0xfa 0xb3 0xf9
0x1c 0xbf
0x0f 0xfa 0x89 0xf3
0x0f 0xfa 0xa2 0xf2


#------------------------------------------------------------------------------
# SXTB
#------------------------------------------------------------------------------
# CHECK:  sxtb r5, r6
# CHECK:  sxtb.w r6, r9, ror #8
# CHECK:  sxtb.w r8, r3, ror #24
# CHECK:  ite ge
# CHECK:  sxtbge r2, r4
# CHECK:  sxtblt.w r5, r1, ror #16

0x75 0xb2
0x4f 0xfa 0x99 0xf6
0x4f 0xfa 0xb3 0xf8
0xac 0xbf
0x62 0xb2
0x4f 0xfa 0xa1 0xf5


#------------------------------------------------------------------------------
# SXTB16
#------------------------------------------------------------------------------
# CHECK:  sxtb16 r1, r4
# CHECK:  sxtb16 r6, r7
# CHECK:  sxtb16 r3, r1, ror #16
# CHECK:  ite hs
# CHECK:  sxtb16hs r3, r5, ror #8
# CHECK:  sxtb16lo r2, r3, ror #24

0x2f 0xfa 0x84 0xf1
0x2f 0xfa 0x87 0xf6
0x2f 0xfa 0xa1 0xf3
0x2c 0xbf
0x2f 0xfa 0x95 0xf3
0x2f 0xfa 0xb3 0xf2


#------------------------------------------------------------------------------
# SXTH
#------------------------------------------------------------------------------
# CHECK:  sxth r1, r6
# CHECK:  sxth.w r3, r8, ror #8
# CHECK:  sxth.w r9, r3, ror #24
# CHECK:  itt ne
# CHECK:  sxthne.w r3, r9
# CHECK:  sxthne.w r2, r2, ror #16

0x31 0xb2
0x0f 0xfa 0x98 0xf3
0x0f 0xfa 0xb3 0xf9
0x1c 0xbf
0x0f 0xfa 0x89 0xf3
0x0f 0xfa 0xa2 0xf2


#------------------------------------------------------------------------------
# TBB/TBH
#------------------------------------------------------------------------------
# CHECK:  tbb [r3, r8]
# CHECK:  tbh [r3, r8, lsl #1]
# CHECK:  it eq
# CHECK:  tbbeq [r3, r8]
# CHECK:  it hs
# CHECK:  tbhhs [r3, r8, lsl #1]

0xd3 0xe8 0x08 0xf0
0xd3 0xe8 0x18 0xf0
0x08 0xbf
0xd3 0xe8 0x08 0xf0
0x28 0xbf
0xd3 0xe8 0x18 0xf0


#------------------------------------------------------------------------------
# TEQ
#------------------------------------------------------------------------------
# CHECK:  teq.w r5, #61440
# CHECK:  teq.w r4, r5
# CHECK:  teq.w r4, r5, lsl #5
# CHECK:  teq.w r4, r5, lsr #5
# CHECK:  teq.w r4, r5, lsr #5
# CHECK:  teq.w r4, r5, asr #5
# CHECK:  teq.w r4, r5, ror #5

0x95 0xf4 0x70 0x4f
0x94 0xea 0x05 0x0f
0x94 0xea 0x45 0x1f
0x94 0xea 0x55 0x1f
0x94 0xea 0x55 0x1f
0x94 0xea 0x65 0x1f
0x94 0xea 0x75 0x1f


#------------------------------------------------------------------------------
# TST
#------------------------------------------------------------------------------
# CHECK:  tst.w r5, #61440
# CHECK:  tst r2, r5
# CHECK:  tst.w r3, r12, lsl #5
# CHECK:  tst.w r4, r11, lsr #4
# CHECK:  tst.w r5, r10, lsr #12
# CHECK:  tst.w r6, r9, asr #30
# CHECK:  tst.w r7, r8, ror #2

0x15 0xf4 0x70 0x4f
0x2a 0x42
0x13 0xea 0x4c 0x1f
0x14 0xea 0x1b 0x1f
0x15 0xea 0x1a 0x3f
0x16 0xea 0xa9 0x7f
0x17 0xea 0xb8 0x0f


#------------------------------------------------------------------------------
# UADD16/UADD8
#------------------------------------------------------------------------------
# CHECK:  uadd16 r1, r2, r3
# CHECK:  uadd8 r1, r2, r3
# CHECK:  ite gt
# CHECK:  uadd16gt r1, r2, r3
# CHECK:  uadd8le r1, r2, r3

0x92 0xfa 0x43 0xf1
0x82 0xfa 0x43 0xf1
0xcc 0xbf
0x92 0xfa 0x43 0xf1
0x82 0xfa 0x43 0xf1


#------------------------------------------------------------------------------
# UASX
#------------------------------------------------------------------------------
# CHECK:  uasx r9, r12, r0
# CHECK:  it eq
# CHECK:  uasxeq r9, r12, r0
# CHECK:  uasx r9, r12, r0
# CHECK:  it eq
# CHECK:  uasxeq r9, r12, r0

0xac 0xfa 0x40 0xf9
0x08 0xbf
0xac 0xfa 0x40 0xf9
0xac 0xfa 0x40 0xf9
0x08 0xbf
0xac 0xfa 0x40 0xf9


#------------------------------------------------------------------------------
# UBFX
#------------------------------------------------------------------------------
# CHECK:  ubfx r4, r5, #16, #1
# CHECK:  it gt
# CHECK:  ubfxgt r4, r5, #16, #16

0xc5 0xf3 0x00 0x44
0xc8 0xbf
0xc5 0xf3 0x0f 0x44


#------------------------------------------------------------------------------
# UHADD16/UHADD8
#------------------------------------------------------------------------------
# CHECK:  uhadd16 r4, r8, r2
# CHECK:  uhadd8 r4, r8, r2
# CHECK:  itt gt
# CHECK:  uhadd16gt r4, r8, r2
# CHECK:  uhadd8gt r4, r8, r2

0x98 0xfa 0x62 0xf4
0x88 0xfa 0x62 0xf4
0xc4 0xbf
0x98 0xfa 0x62 0xf4
0x88 0xfa 0x62 0xf4


#------------------------------------------------------------------------------
# UHASX/UHSAX
#------------------------------------------------------------------------------
# CHECK:  uhasx r4, r1, r5
# CHECK:  uhsax r5, r6, r6
# CHECK:  itt gt
# CHECK:  uhasxgt r6, r9, r8
# CHECK:  uhsaxgt r7, r8, r12

0xa1 0xfa 0x65 0xf4
0xe6 0xfa 0x66 0xf5
0xc4 0xbf
0xa9 0xfa 0x68 0xf6
0xe8 0xfa 0x6c 0xf7

#------------------------------------------------------------------------------
# UHSUB16/UHSUB8
#------------------------------------------------------------------------------
# CHECK:  uhsub16 r5, r8, r3
# CHECK:  uhsub8 r1, r7, r6
# CHECK:  itt lt
# CHECK:  uhsub16lt r4, r9, r12
# CHECK:  uhsub8lt r3, r1, r5

0xd8 0xfa 0x63 0xf5
0xc7 0xfa 0x66 0xf1
0xbc 0xbf
0xd9 0xfa 0x6c 0xf4
0xc1 0xfa 0x65 0xf3


#------------------------------------------------------------------------------
# UMAAL
#------------------------------------------------------------------------------
# CHECK:  umaal r3, r4, r5, r6
# CHECK:  it lt
# CHECK:  umaallt r3, r4, r5, r6

0xe5 0xfb 0x66 0x34
0xb8 0xbf
0xe5 0xfb 0x66 0x34


#------------------------------------------------------------------------------
# UMLAL
#------------------------------------------------------------------------------
# CHECK:  umlal r2, r4, r6, r8
# CHECK:  it gt
# CHECK:  umlalgt r6, r1, r2, r6

0xe6 0xfb 0x08 0x24
0xc8 0xbf
0xe2 0xfb 0x06 0x61


#------------------------------------------------------------------------------
# UMULL
#------------------------------------------------------------------------------
# CHECK:  umull r2, r4, r6, r8
# CHECK:  it gt
# CHECK:  umullgt r6, r1, r2, r6

0xa6 0xfb 0x08 0x24
0xc8 0xbf
0xa2 0xfb 0x06 0x61


#------------------------------------------------------------------------------
# UQADD16/UQADD8
#------------------------------------------------------------------------------
# CHECK:  uqadd16 r1, r2, r3
# CHECK:  uqadd8 r3, r4, r8
# CHECK:  ite gt
# CHECK:  uqadd16gt r4, r7, r9
# CHECK:  uqadd8le r8, r1, r2

0x92 0xfa 0x53 0xf1
0x84 0xfa 0x58 0xf3
0xcc 0xbf
0x97 0xfa 0x59 0xf4
0x81 0xfa 0x52 0xf8


#------------------------------------------------------------------------------
# UQASX/UQSAX
#------------------------------------------------------------------------------
# CHECK:  uqasx r1, r2, r3
# CHECK:  uqsax r3, r4, r8
# CHECK:  ite gt
# CHECK:  uqasxgt r4, r7, r9
# CHECK:  uqsaxle r8, r1, r2

0xa2 0xfa 0x53 0xf1
0xe4 0xfa 0x58 0xf3
0xcc 0xbf
0xa7 0xfa 0x59 0xf4
0xe1 0xfa 0x52 0xf8


#------------------------------------------------------------------------------
# UQSUB16/UQSUB8
#------------------------------------------------------------------------------
# CHECK:  uqsub8 r8, r2, r9
# CHECK:  uqsub16 r1, r9, r7
# CHECK:  ite gt
# CHECK:  uqsub8gt r3, r1, r6
# CHECK:  uqsub16le r4, r6, r4

0xc2 0xfa 0x59 0xf8
0xd9 0xfa 0x57 0xf1
0xcc 0xbf
0xc1 0xfa 0x56 0xf3
0xd6 0xfa 0x54 0xf4


#------------------------------------------------------------------------------
# UQSUB16/UQSUB8
#------------------------------------------------------------------------------
# CHECK:  usad8 r1, r9, r7
# CHECK:  usada8 r8, r2, r9, r12
# CHECK:  ite gt
# CHECK:  usada8gt r3, r1, r6, r9
# CHECK:  usad8le r4, r6, r4

0x79 0xfb 0x07 0xf1
0x72 0xfb 0x09 0xc8
0xcc 0xbf
0x71 0xfb 0x06 0x93
0x76 0xfb 0x04 0xf4


#------------------------------------------------------------------------------
# USAT
#------------------------------------------------------------------------------
# CHECK:  usat r8, #1, r10
# CHECK:  usat r8, #4, r10
# CHECK:  usat r8, #5, r10, lsl #31
# CHECK:  usat r8, #16, r10, asr #1

0x8a 0xf3 0x01 0x08
0x8a 0xf3 0x04 0x08
0x8a 0xf3 0xc5 0x78
0xaa 0xf3 0x50 0x08


#------------------------------------------------------------------------------
# USAT16
#------------------------------------------------------------------------------
# CHECK:  usat16	r2, #2, r7
# CHECK:  usat16	r3, #15, r5

0xa7 0xf3 0x02 0x02
0xa5 0xf3 0x0f 0x03


#------------------------------------------------------------------------------
# USAX
#------------------------------------------------------------------------------
# CHECK:  usax r2, r3, r4
# CHECK:  it ne
# CHECK:  usaxne r6, r1, r9
# CHECK:  usax r2, r3, r4
# CHECK:  it ne
# CHECK:  usaxne r6, r1, r9

0xe3 0xfa 0x44 0xf2
0x18 0xbf
0xe1 0xfa 0x49 0xf6
0xe3 0xfa 0x44 0xf2
0x18 0xbf
0xe1 0xfa 0x49 0xf6


#------------------------------------------------------------------------------
# USUB16/USUB8
#------------------------------------------------------------------------------
# CHECK:  usub16 r4, r2, r7
# CHECK:  usub8 r1, r8, r5
# CHECK:  ite hi
# CHECK:  usub16hi r1, r1, r3
# CHECK:  usub8ls r9, r2, r3

0xd2 0xfa 0x47 0xf4
0xc8 0xfa 0x45 0xf1
0x8c 0xbf
0xd1 0xfa 0x43 0xf1
0xc2 0xfa 0x43 0xf9


#------------------------------------------------------------------------------
# UXTAB
#------------------------------------------------------------------------------
# CHECK:  uxtab r2, r3, r4
# CHECK:  uxtab r4, r5, r6
# CHECK:  it lt
# CHECK:  uxtablt r6, r2, r9, ror #8
# CHECK:  uxtab r5, r1, r4, ror #16
# CHECK:  uxtab r7, r8, r3, ror #24

0x53 0xfa 0x84 0xf2
0x55 0xfa 0x86 0xf4
0xb8 0xbf
0x52 0xfa 0x99 0xf6
0x51 0xfa 0xa4 0xf5
0x58 0xfa 0xb3 0xf7


#------------------------------------------------------------------------------
# UXTAB16
#------------------------------------------------------------------------------
# CHECK:  it ge
# CHECK:  uxtab16ge r0, r1, r4
# CHECK:  uxtab16 r6, r2, r7
# CHECK:  uxtab16 r3, r5, r8, ror #8
# CHECK:  uxtab16 r3, r2, r1, ror #16
# CHECK:  it eq
# CHECK:  uxtab16eq r1, r2, r3, ror #24

0xa8 0xbf
0x31 0xfa 0x84 0xf0
0x32 0xfa 0x87 0xf6
0x35 0xfa 0x98 0xf3
0x32 0xfa 0xa1 0xf3
0x08 0xbf
0x32 0xfa 0xb3 0xf1


#------------------------------------------------------------------------------
# UXTAH
#------------------------------------------------------------------------------
# CHECK:  uxtah r1, r3, r9
# CHECK:  it hi
# CHECK:  uxtahhi r6, r1, r6
# CHECK:  uxtah r3, r8, r3, ror #8
# CHECK:  it lo
# CHECK:  uxtahlo r2, r2, r4, ror #16
# CHECK:  uxtah r9, r3, r3, ror #24

0x13 0xfa 0x89 0xf1
0x88 0xbf
0x11 0xfa 0x86 0xf6
0x18 0xfa 0x93 0xf3
0x38 0xbf
0x12 0xfa 0xa4 0xf2
0x13 0xfa 0xb3 0xf9


#------------------------------------------------------------------------------
# UXTB
#------------------------------------------------------------------------------
# CHECK:  it ge
# CHECK:  uxtbge r2, r4
# CHECK:  uxtb r5, r6
# CHECK:  uxtb.w r6, r9, ror #8
# CHECK:  it lo
# CHECK:  uxtblo.w r5, r1, ror #16
# CHECK:  uxtb.w r8, r3, ror #24

0xa8 0xbf
0xe2 0xb2
0xf5 0xb2
0x5f 0xfa 0x99 0xf6
0x38 0xbf
0x5f 0xfa 0xa1 0xf5
0x5f 0xfa 0xb3 0xf8


#------------------------------------------------------------------------------
# UXTB16
#------------------------------------------------------------------------------
# CHECK:  uxtb16 r1, r4
# CHECK:  uxtb16 r6, r7
# CHECK:  it hs
# CHECK:  uxtb16hs r3, r5, ror #8
# CHECK:  uxtb16 r3, r1, ror #16
# CHECK:  it ge
# CHECK:  uxtb16ge r2, r3, ror #24

0x3f 0xfa 0x84 0xf1
0x3f 0xfa 0x87 0xf6
0x28 0xbf
0x3f 0xfa 0x95 0xf3
0x3f 0xfa 0xa1 0xf3
0xa8 0xbf
0x3f 0xfa 0xb3 0xf2


#------------------------------------------------------------------------------
# UXTH
#------------------------------------------------------------------------------
# CHECK:  it ne
# CHECK:  uxthne.w r3, r9
# CHECK:  uxth r1, r6
# CHECK:  uxth.w r3, r8, ror #8
# CHECK:  it le
# CHECK:  uxthle.w r2, r2, ror #16
# CHECK:  uxth.w r9, r3, ror #24

0x18 0xbf
0x1f 0xfa 0x89 0xf3
0xb1 0xb2
0x1f 0xfa 0x98 0xf3
0xd8 0xbf
0x1f 0xfa 0xa2 0xf2
0x1f 0xfa 0xb3 0xf9


#------------------------------------------------------------------------------
# WFE/WFI/YIELD
#------------------------------------------------------------------------------
# CHECK:  wfe
# CHECK:  wfi
# CHECK:  yield
# CHECK:  itet lt
# CHECK:  wfelt
# CHECK:  wfige
# CHECK:  yieldlt

0x20 0xbf
0x30 0xbf
0x10 0xbf
0xb6 0xbf
0x20 0xbf
0x30 0xbf
0x10 0xbf

#------------------------------------------------------------------------------
# Unallocated hints (They execute as NOPs, but software must not use them.)
#------------------------------------------------------------------------------
# CHECK: hint #6
# CHECK: hint.w #6
# CHECK: hint.w #102

0x60 0xbf
0xaf 0xf3 0x06 0x80
0xaf 0xf3 0x66 0x80