; RUN: llvm-mc -triple arm64-apple-darwin -show-encoding < %s | FileCheck %s
foo:
;-----------------------------------------------------------------------------
; Unconditional branch (register) instructions.
;-----------------------------------------------------------------------------
ret
; CHECK: encoding: [0xc0,0x03,0x5f,0xd6]
ret x1
; CHECK: encoding: [0x20,0x00,0x5f,0xd6]
drps
; CHECK: encoding: [0xe0,0x03,0xbf,0xd6]
eret
; CHECK: encoding: [0xe0,0x03,0x9f,0xd6]
br x5
; CHECK: encoding: [0xa0,0x00,0x1f,0xd6]
blr x9
; CHECK: encoding: [0x20,0x01,0x3f,0xd6]
bl L1
; CHECK: bl L1 ; encoding: [A,A,A,0b100101AA]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_call26
;-----------------------------------------------------------------------------
; Contitional branch instructions.
;-----------------------------------------------------------------------------
b L1
; CHECK: b L1 ; encoding: [A,A,A,0b000101AA]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch26
b.eq L1
; CHECK: b.eq L1 ; encoding: [0bAAA00000,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
b.ne L1
; CHECK: b.ne L1 ; encoding: [0bAAA00001,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
b.cs L1
; CHECK: b.hs L1 ; encoding: [0bAAA00010,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
b.cc L1
; CHECK: b.lo L1 ; encoding: [0bAAA00011,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
b.mi L1
; CHECK: b.mi L1 ; encoding: [0bAAA00100,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
b.pl L1
; CHECK: b.pl L1 ; encoding: [0bAAA00101,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
b.vs L1
; CHECK: b.vs L1 ; encoding: [0bAAA00110,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
b.vc L1
; CHECK: b.vc L1 ; encoding: [0bAAA00111,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
b.hi L1
; CHECK: b.hi L1 ; encoding: [0bAAA01000,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
b.ls L1
; CHECK: b.ls L1 ; encoding: [0bAAA01001,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
b.ge L1
; CHECK: b.ge L1 ; encoding: [0bAAA01010,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
b.lt L1
; CHECK: b.lt L1 ; encoding: [0bAAA01011,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
b.gt L1
; CHECK: b.gt L1 ; encoding: [0bAAA01100,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
b.le L1
; CHECK: b.le L1 ; encoding: [0bAAA01101,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
b.al L1
; CHECK: b.al L1 ; encoding: [0bAAA01110,A,A,0x54]
; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
L1:
b #28
; CHECK: b #28
b.lt #28
; CHECK: b.lt #28
b.cc #1048572
; CHECK: b.lo #1048572 ; encoding: [0xe3,0xff,0x7f,0x54]
b #134217724
; CHECK: b #134217724 ; encoding: [0xff,0xff,0xff,0x15]
b #-134217728
; CHECK: b #-134217728 ; encoding: [0x00,0x00,0x00,0x16]
;-----------------------------------------------------------------------------
; Compare-and-branch instructions.
;-----------------------------------------------------------------------------
cbz w1, foo
; CHECK: encoding: [0bAAA00001,A,A,0x34]
cbz x1, foo
; CHECK: encoding: [0bAAA00001,A,A,0xb4]
cbnz w2, foo
; CHECK: encoding: [0bAAA00010,A,A,0x35]
cbnz x2, foo
; CHECK: encoding: [0bAAA00010,A,A,0xb5]
cbz w1, #28
; CHECK: cbz w1, #28
cbz w20, #1048572
; CHECK: cbz w20, #1048572 ; encoding: [0xf4,0xff,0x7f,0x34]
cbnz x2, #-1048576
; CHECK: cbnz x2, #-1048576 ; encoding: [0x02,0x00,0x80,0xb5]
;-----------------------------------------------------------------------------
; Bit-test-and-branch instructions.
;-----------------------------------------------------------------------------
tbz x1, #3, foo
; CHECK: encoding: [0bAAA00001,A,0b00011AAA,0x36]
tbnz x1, #63, foo
; CHECK: encoding: [0bAAA00001,A,0b11111AAA,0xb7]
tbz w1, #3, foo
; CHECK: encoding: [0bAAA00001,A,0b00011AAA,0x36]
tbnz w1, #31, foo
; CHECK: encoding: [0bAAA00001,A,0b11111AAA,0x37]
tbz w1, #3, #28
; CHECK: tbz w1, #3, #28
tbz w3, #5, #32764
; CHECK: tbz w3, #5, #32764 ; encoding: [0xe3,0xff,0x2b,0x36]
tbnz x3, #8, #-32768
; CHECK: tbnz w3, #8, #-32768 ; encoding: [0x03,0x00,0x44,0x37]
;-----------------------------------------------------------------------------
; Exception generation instructions.
;-----------------------------------------------------------------------------
brk #1
; CHECK: encoding: [0x20,0x00,0x20,0xd4]
dcps1 #2
; CHECK: encoding: [0x41,0x00,0xa0,0xd4]
dcps2 #3
; CHECK: encoding: [0x62,0x00,0xa0,0xd4]
dcps3 #4
; CHECK: encoding: [0x83,0x00,0xa0,0xd4]
hlt #5
; CHECK: encoding: [0xa0,0x00,0x40,0xd4]
hvc #6
; CHECK: encoding: [0xc2,0x00,0x00,0xd4]
smc #7
; CHECK: encoding: [0xe3,0x00,0x00,0xd4]
svc #8
; CHECK: encoding: [0x01,0x01,0x00,0xd4]
; The immediate defaults to zero for DCPSn
dcps1
dcps2
dcps3
; CHECK: dcps1 ; encoding: [0x01,0x00,0xa0,0xd4]
; CHECK: dcps2 ; encoding: [0x02,0x00,0xa0,0xd4]
; CHECK: dcps3 ; encoding: [0x03,0x00,0xa0,0xd4]
;; Test "bad" names
bl lsl
b.eq lsr
b.ne uxth
; CHECK: bl lsl ; encoding: [A,A,A,0b100101AA]
; CHECK-NEXT: fixup A - offset: 0, value: lsl, kind: fixup_aarch64_pcrel_call26
; CHECK-NEXT: b.eq lsr ; encoding: [0bAAA00000,A,A,0x54]
; CHECK-NEXT: fixup A - offset: 0, value: lsr, kind: fixup_aarch64_pcrel_branch19
; CHECK-NEXT: b.ne uxth ; encoding: [0bAAA00001,A,A,0x54]
; CHECK-NEXT: fixup A - offset: 0, value: uxth, kind: fixup_aarch64_pcrel_branch19