summaryrefslogtreecommitdiff
path: root/test/MC/AArch64/arm64-branch-encoding.s
blob: 48c2099012f6820d7eb39b2b5c2934d11a6d9eae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
; 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]