# RUN: llvm-mc -triple=thumbv6-apple-darwin -disassemble -show-encoding < %s | FileCheck %s
#------------------------------------------------------------------------------
# ADC (register)
#------------------------------------------------------------------------------
# CHECK: adcs r4, r6
0x74 0x41
#------------------------------------------------------------------------------
# ADD (immediate)
#------------------------------------------------------------------------------
# CHECK: adds r1, r2, #3
# CHECK: adds r2, r2, #3
# CHECK: adds r2, #8
0xd1 0x1c
0xd2 0x1c
0x08 0x32
#------------------------------------------------------------------------------
# ADD (register)
#------------------------------------------------------------------------------
# CHECK: adds r1, r2, r3
# CHECK: add r2, r8
0xd1 0x18
0x42 0x44
#------------------------------------------------------------------------------
# ADD (SP plus immediate)
#------------------------------------------------------------------------------
# CHECK: add sp, #508
# CHECK: add sp, #4
# CHECK: add r2, sp, #8
# CHECK: add r2, sp, #1020
0x7f 0xb0
0x01 0xb0
0x02 0xaa
0xff 0xaa
#------------------------------------------------------------------------------
# ADD (SP plus register)
#------------------------------------------------------------------------------
# CHECK: add sp, r3
# CHECK: add r2, sp, r2
0x9d 0x44
0x6a 0x44
#------------------------------------------------------------------------------
# ADR
#------------------------------------------------------------------------------
# CHECK: adr r5, #0
# CHECK: adr r2, #12
# CHECK: adr r3, #1020
0x00 0xa5
0x03 0xa2
0xff 0xa3
#------------------------------------------------------------------------------
# ASR (immediate)
#------------------------------------------------------------------------------
# CHECK: asrs r2, r3, #32
# CHECK: asrs r2, r3, #5
# CHECK: asrs r2, r3, #1
0x1a 0x10
0x5a 0x11
0x5a 0x10
#------------------------------------------------------------------------------
# ASR (register)
#------------------------------------------------------------------------------
# CHECK: asrs r5, r2
0x15 0x41
#------------------------------------------------------------------------------
# BICS
#------------------------------------------------------------------------------
# CHECK: bics r1, r6
0xb1 0x43
#------------------------------------------------------------------------------
# B
#------------------------------------------------------------------------------
# CHECK: bls #128 @ encoding: [0x40,0xd9]
# CHECK: beq #-256 @ encoding: [0x80,0xd0]
0x40 0xd9
0x80 0xd0
#------------------------------------------------------------------------------
# BKPT
#------------------------------------------------------------------------------
# CHECK: bkpt #0
# CHECK: bkpt #255
0x00 0xbe
0xff 0xbe
#------------------------------------------------------------------------------
# BLX (register)
#------------------------------------------------------------------------------
# CHECK: blx r4
0xa0 0x47
#------------------------------------------------------------------------------
# BX
#------------------------------------------------------------------------------
# CHECK: bx r2
0x10 0x47
#------------------------------------------------------------------------------
# CMN
#------------------------------------------------------------------------------
# CHECK: cmn r5, r1
0xcd 0x42
#------------------------------------------------------------------------------
# CMP
#------------------------------------------------------------------------------
# CHECK: cmp r6, #32
# CHECK: cmp r3, r4
# CHECK: cmp r8, r1
0x20 0x2e
0xa3 0x42
0x88 0x45
#------------------------------------------------------------------------------
# EOR
#------------------------------------------------------------------------------
# CHECK: eors r4, r5
0x6c 0x40
#------------------------------------------------------------------------------
# LDM
#------------------------------------------------------------------------------
# CHECK: ldm r3, {r0, r1, r2, r3, r4, r5, r6, r7}
# CHECK: ldm r2!, {r1, r3, r4, r5, r7}
# CHECK: ldm r1, {r1}
0xff 0xcb
0xba 0xca
0x02 0xc9
#------------------------------------------------------------------------------
# LDR (immediate)
#------------------------------------------------------------------------------
# CHECK: ldr r1, [r5]
# CHECK: ldr r2, [r6, #32]
# CHECK: ldr r3, [r7, #124]
# CHECK: ldr r1, [sp]
# CHECK: ldr r2, [sp, #24]
# CHECK: ldr r3, [sp, #1020]
# CHECK: ldr r1, [pc, #12]
0x29 0x68
0x32 0x6a
0xfb 0x6f
0x00 0x99
0x06 0x9a
0xff 0x9b
0x03 0x49
#------------------------------------------------------------------------------
# LDR (register)
#------------------------------------------------------------------------------
# CHECK: ldr r1, [r2, r3]
0xd1 0x58
#------------------------------------------------------------------------------
# LDRB (immediate)
#------------------------------------------------------------------------------
# CHECK: ldrb r4, [r3]
# CHECK: ldrb r5, [r6]
# CHECK: ldrb r6, [r7, #31]
0x1c 0x78
0x35 0x78
0xfe 0x7f
#------------------------------------------------------------------------------
# LDRB (register)
#------------------------------------------------------------------------------
# CHECK: ldrb r6, [r4, r5]
0x66 0x5d
#------------------------------------------------------------------------------
# LDRH (immediate)
#------------------------------------------------------------------------------
# CHECK: ldrh r3, [r3]
# CHECK: ldrh r4, [r6, #2]
# CHECK: ldrh r5, [r7, #62]
0x1b 0x88
0x74 0x88
0xfd 0x8f
#------------------------------------------------------------------------------
# LDRH (register)
#------------------------------------------------------------------------------
# CHECK: ldrh r6, [r2, r6]
0x96 0x5b
#------------------------------------------------------------------------------
# LDRSB/LDRSH
#------------------------------------------------------------------------------
# CHECK: ldrsb r6, [r2, r6]
# CHECK: ldrsh r3, [r7, r1]
0x96 0x57
0x7b 0x5e
#------------------------------------------------------------------------------
# LSL (immediate)
#------------------------------------------------------------------------------
# CHECK: movs r4, r5
# CHECK: lsls r4, r5, #4
0x2c 0x00
0x2c 0x01
#------------------------------------------------------------------------------
# LSL (register)
#------------------------------------------------------------------------------
# CHECK: lsls r2, r6
0xb2 0x40
#------------------------------------------------------------------------------
# LSR (immediate)
#------------------------------------------------------------------------------
# CHECK: lsrs r1, r3, #1
# CHECK: lsrs r1, r3, #32
0x59 0x08
0x19 0x08
#------------------------------------------------------------------------------
# LSR (register)
#------------------------------------------------------------------------------
# CHECK: lsrs r2, r6
0xf2 0x40
#------------------------------------------------------------------------------
# MOV (immediate)
#------------------------------------------------------------------------------
# CHECK: movs r2, #0
# CHECK: movs r2, #255
# CHECK: movs r2, #23
0x00 0x22
0xff 0x22
0x17 0x22
#------------------------------------------------------------------------------
# MOV (register)
#------------------------------------------------------------------------------
# CHECK: mov r3, r4
# CHECK: movs r1, r3
# CHECK: mov r8, r8
0x23 0x46
0x19 0x00
0xc0 0x46
#------------------------------------------------------------------------------
# MUL
#------------------------------------------------------------------------------
# CHECK: muls r1, r2, r1
# CHECK: muls r3, r4
0x51 0x43
0x63 0x43
#------------------------------------------------------------------------------
# MVN
#------------------------------------------------------------------------------
# CHECK: mvns r6, r3
0xde 0x43
#------------------------------------------------------------------------------
# NEG
#------------------------------------------------------------------------------
# CHECK: rsbs r3, r4, #0
0x63 0x42
#------------------------------------------------------------------------------
# ORR
#------------------------------------------------------------------------------
# CHECK: orrs r3, r4
0x23 0x43
#------------------------------------------------------------------------------
# POP
#------------------------------------------------------------------------------
# CHECK: pop {r2, r3, r6}
0x4c 0xbc
#------------------------------------------------------------------------------
# PUSH
#------------------------------------------------------------------------------
# CHECK: push {r1, r2, r7}
0x86 0xb4
#------------------------------------------------------------------------------
# REV/REV16/REVSH
#------------------------------------------------------------------------------
# CHECK: rev r6, r3
# CHECK: rev16 r7, r2
# CHECK: revsh r5, r1
0x1e 0xba
0x57 0xba
0xcd 0xba
#------------------------------------------------------------------------------
# ROR
#------------------------------------------------------------------------------
# CHECK: rors r2, r7
0xfa 0x41
#------------------------------------------------------------------------------
# RSB
#------------------------------------------------------------------------------
# CHECK: rsbs r1, r3, #0
0x59 0x42
#------------------------------------------------------------------------------
# SBC
#------------------------------------------------------------------------------
# CHECK: sbcs r4, r3
0x9c 0x41
#------------------------------------------------------------------------------
# SETEND
#------------------------------------------------------------------------------
# CHECK: setend be
# CHECK: setend le
0x58 0xb6
0x50 0xb6
#------------------------------------------------------------------------------
# STM
#------------------------------------------------------------------------------
# CHECK: stm r1!, {r2, r6}
# CHECK: stm r1!, {r1, r2, r3, r7}
0x44 0xc1
0x8e 0xc1
#------------------------------------------------------------------------------
# STR (immediate)
#------------------------------------------------------------------------------
# CHECK: str r2, [r7]
# CHECK: str r2, [r7]
# CHECK: str r5, [r1, #4]
# CHECK: str r3, [r7, #124]
# CHECK: str r2, [sp]
# CHECK: str r3, [sp]
# CHECK: str r4, [sp, #20]
# CHECK: str r5, [sp, #1020]
0x3a 0x60
0x3a 0x60
0x4d 0x60
0xfb 0x67
0x00 0x92
0x00 0x93
0x05 0x94
0xff 0x95
#------------------------------------------------------------------------------
# STR (register)
#------------------------------------------------------------------------------
# CHECK: str r2, [r7, r3]
0xfa 0x50
#------------------------------------------------------------------------------
# STRB (immediate)
#------------------------------------------------------------------------------
# CHECK: strb r4, [r3]
# CHECK: strb r5, [r6]
# CHECK: strb r6, [r7, #31]
0x1c 0x70
0x35 0x70
0xfe 0x77
#------------------------------------------------------------------------------
# STRB (register)
#------------------------------------------------------------------------------
# CHECK: strb r6, [r4, r5]
0x66 0x55
#------------------------------------------------------------------------------
# STRH (immediate)
#------------------------------------------------------------------------------
# CHECK: strh r3, [r3]
# CHECK: strh r4, [r6, #2]
# CHECK: strh r5, [r7, #62]
0x1b 0x80
0x74 0x80
0xfd 0x87
#------------------------------------------------------------------------------
# STRH (register)
#------------------------------------------------------------------------------
# CHECK: strh r6, [r2, r6]
0x96 0x53
#------------------------------------------------------------------------------
# SUB (immediate)
#------------------------------------------------------------------------------
# CHECK: subs r1, r2, #3
# CHECK: subs r2, #3
# CHECK: subs r2, #8
0xd1 0x1e
0x03 0x3a
0x08 0x3a
#------------------------------------------------------------------------------
# SUB (register)
#------------------------------------------------------------------------------
# CHECK: subs r1, r2, r3
0xd1 0x1a
#------------------------------------------------------------------------------
# SUB (SP minus immediate)
#------------------------------------------------------------------------------
# CHECK: sub sp, #12
# CHECK: sub sp, #508
0x83 0xb0
0xff 0xb0
#------------------------------------------------------------------------------
# SVC
#------------------------------------------------------------------------------
# CHECK: svc #0
# CHECK: svc #255
0x00 0xdf
0xff 0xdf
#------------------------------------------------------------------------------
# SXTB/SXTH
#------------------------------------------------------------------------------
# CHECK: sxtb r3, r5
# CHECK: sxth r3, r5
0x6b 0xb2
0x2b 0xb2
#------------------------------------------------------------------------------
# TST
#------------------------------------------------------------------------------
# CHECK: tst r6, r1
0x0e 0x42
#------------------------------------------------------------------------------
# UXTB/UXTH
#------------------------------------------------------------------------------
# CHECK: uxtb r7, r2
# CHECK: uxth r1, r4
0xd7 0xb2
0xa1 0xb2