xref: /aosp_15_r20/external/llvm/test/MC/AArch64/arm64-branch-encoding.s (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llvm-mc -triple arm64-apple-darwin -show-encoding < %s | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker
3*9880d681SAndroid Build Coastguard Workerfoo:
4*9880d681SAndroid Build Coastguard Worker
5*9880d681SAndroid Build Coastguard Worker;-----------------------------------------------------------------------------
6*9880d681SAndroid Build Coastguard Worker; Unconditional branch (register) instructions.
7*9880d681SAndroid Build Coastguard Worker;-----------------------------------------------------------------------------
8*9880d681SAndroid Build Coastguard Worker
9*9880d681SAndroid Build Coastguard Worker  ret
10*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0xc0,0x03,0x5f,0xd6]
11*9880d681SAndroid Build Coastguard Worker  ret x1
12*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0x20,0x00,0x5f,0xd6]
13*9880d681SAndroid Build Coastguard Worker  drps
14*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0xe0,0x03,0xbf,0xd6]
15*9880d681SAndroid Build Coastguard Worker  eret
16*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0xe0,0x03,0x9f,0xd6]
17*9880d681SAndroid Build Coastguard Worker  br  x5
18*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0xa0,0x00,0x1f,0xd6]
19*9880d681SAndroid Build Coastguard Worker  blr x9
20*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0x20,0x01,0x3f,0xd6]
21*9880d681SAndroid Build Coastguard Worker  bl  L1
22*9880d681SAndroid Build Coastguard Worker; CHECK: bl L1   ; encoding: [A,A,A,0b100101AA]
23*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_call26
24*9880d681SAndroid Build Coastguard Worker
25*9880d681SAndroid Build Coastguard Worker;-----------------------------------------------------------------------------
26*9880d681SAndroid Build Coastguard Worker; Contitional branch instructions.
27*9880d681SAndroid Build Coastguard Worker;-----------------------------------------------------------------------------
28*9880d681SAndroid Build Coastguard Worker
29*9880d681SAndroid Build Coastguard Worker  b     L1
30*9880d681SAndroid Build Coastguard Worker; CHECK: b L1      ; encoding: [A,A,A,0b000101AA]
31*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch26
32*9880d681SAndroid Build Coastguard Worker  b.eq  L1
33*9880d681SAndroid Build Coastguard Worker; CHECK: b.eq L1   ; encoding: [0bAAA00000,A,A,0x54]
34*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
35*9880d681SAndroid Build Coastguard Worker  b.ne  L1
36*9880d681SAndroid Build Coastguard Worker; CHECK: b.ne L1   ; encoding: [0bAAA00001,A,A,0x54]
37*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
38*9880d681SAndroid Build Coastguard Worker  b.cs  L1
39*9880d681SAndroid Build Coastguard Worker; CHECK: b.hs L1   ; encoding: [0bAAA00010,A,A,0x54]
40*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
41*9880d681SAndroid Build Coastguard Worker  b.cc  L1
42*9880d681SAndroid Build Coastguard Worker; CHECK: b.lo L1   ; encoding: [0bAAA00011,A,A,0x54]
43*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
44*9880d681SAndroid Build Coastguard Worker  b.mi  L1
45*9880d681SAndroid Build Coastguard Worker; CHECK: b.mi L1   ; encoding: [0bAAA00100,A,A,0x54]
46*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
47*9880d681SAndroid Build Coastguard Worker  b.pl  L1
48*9880d681SAndroid Build Coastguard Worker; CHECK: b.pl L1   ; encoding: [0bAAA00101,A,A,0x54]
49*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
50*9880d681SAndroid Build Coastguard Worker  b.vs  L1
51*9880d681SAndroid Build Coastguard Worker; CHECK: b.vs L1   ; encoding: [0bAAA00110,A,A,0x54]
52*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
53*9880d681SAndroid Build Coastguard Worker  b.vc  L1
54*9880d681SAndroid Build Coastguard Worker; CHECK: b.vc L1   ; encoding: [0bAAA00111,A,A,0x54]
55*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
56*9880d681SAndroid Build Coastguard Worker  b.hi  L1
57*9880d681SAndroid Build Coastguard Worker; CHECK: b.hi L1   ; encoding: [0bAAA01000,A,A,0x54]
58*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
59*9880d681SAndroid Build Coastguard Worker  b.ls  L1
60*9880d681SAndroid Build Coastguard Worker; CHECK: b.ls L1   ; encoding: [0bAAA01001,A,A,0x54]
61*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
62*9880d681SAndroid Build Coastguard Worker  b.ge  L1
63*9880d681SAndroid Build Coastguard Worker; CHECK: b.ge L1   ; encoding: [0bAAA01010,A,A,0x54]
64*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
65*9880d681SAndroid Build Coastguard Worker  b.lt  L1
66*9880d681SAndroid Build Coastguard Worker; CHECK: b.lt L1   ; encoding: [0bAAA01011,A,A,0x54]
67*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
68*9880d681SAndroid Build Coastguard Worker  b.gt  L1
69*9880d681SAndroid Build Coastguard Worker; CHECK: b.gt L1   ; encoding: [0bAAA01100,A,A,0x54]
70*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
71*9880d681SAndroid Build Coastguard Worker  b.le  L1
72*9880d681SAndroid Build Coastguard Worker; CHECK: b.le L1   ; encoding: [0bAAA01101,A,A,0x54]
73*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
74*9880d681SAndroid Build Coastguard Worker  b.al  L1
75*9880d681SAndroid Build Coastguard Worker; CHECK: b.al L1      ; encoding: [0bAAA01110,A,A,0x54]
76*9880d681SAndroid Build Coastguard Worker; CHECK: fixup A - offset: 0, value: L1, kind: fixup_aarch64_pcrel_branch19
77*9880d681SAndroid Build Coastguard WorkerL1:
78*9880d681SAndroid Build Coastguard Worker  b #28
79*9880d681SAndroid Build Coastguard Worker; CHECK: b #28
80*9880d681SAndroid Build Coastguard Worker  b.lt #28
81*9880d681SAndroid Build Coastguard Worker; CHECK: b.lt #28
82*9880d681SAndroid Build Coastguard Worker  b.cc #1048572
83*9880d681SAndroid Build Coastguard Worker; CHECK: b.lo	#1048572                ; encoding: [0xe3,0xff,0x7f,0x54]
84*9880d681SAndroid Build Coastguard Worker  b #134217724
85*9880d681SAndroid Build Coastguard Worker; CHECK: b	#134217724              ; encoding: [0xff,0xff,0xff,0x15]
86*9880d681SAndroid Build Coastguard Worker  b #-134217728
87*9880d681SAndroid Build Coastguard Worker; CHECK: b	#-134217728             ; encoding: [0x00,0x00,0x00,0x16]
88*9880d681SAndroid Build Coastguard Worker
89*9880d681SAndroid Build Coastguard Worker;-----------------------------------------------------------------------------
90*9880d681SAndroid Build Coastguard Worker; Compare-and-branch instructions.
91*9880d681SAndroid Build Coastguard Worker;-----------------------------------------------------------------------------
92*9880d681SAndroid Build Coastguard Worker
93*9880d681SAndroid Build Coastguard Worker  cbz w1, foo
94*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0bAAA00001,A,A,0x34]
95*9880d681SAndroid Build Coastguard Worker  cbz x1, foo
96*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0bAAA00001,A,A,0xb4]
97*9880d681SAndroid Build Coastguard Worker  cbnz w2, foo
98*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0bAAA00010,A,A,0x35]
99*9880d681SAndroid Build Coastguard Worker  cbnz x2, foo
100*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0bAAA00010,A,A,0xb5]
101*9880d681SAndroid Build Coastguard Worker  cbz w1, #28
102*9880d681SAndroid Build Coastguard Worker; CHECK: cbz w1, #28
103*9880d681SAndroid Build Coastguard Worker  cbz     w20, #1048572
104*9880d681SAndroid Build Coastguard Worker; CHECK: cbz	w20, #1048572           ; encoding: [0xf4,0xff,0x7f,0x34]
105*9880d681SAndroid Build Coastguard Worker  cbnz x2, #-1048576
106*9880d681SAndroid Build Coastguard Worker; CHECK: cbnz	x2, #-1048576           ; encoding: [0x02,0x00,0x80,0xb5]
107*9880d681SAndroid Build Coastguard Worker
108*9880d681SAndroid Build Coastguard Worker
109*9880d681SAndroid Build Coastguard Worker;-----------------------------------------------------------------------------
110*9880d681SAndroid Build Coastguard Worker; Bit-test-and-branch instructions.
111*9880d681SAndroid Build Coastguard Worker;-----------------------------------------------------------------------------
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Worker  tbz x1, #3, foo
114*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0bAAA00001,A,0b00011AAA,0x36]
115*9880d681SAndroid Build Coastguard Worker  tbnz x1, #63, foo
116*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0bAAA00001,A,0b11111AAA,0xb7]
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Worker  tbz w1, #3, foo
119*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0bAAA00001,A,0b00011AAA,0x36]
120*9880d681SAndroid Build Coastguard Worker  tbnz w1, #31, foo
121*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0bAAA00001,A,0b11111AAA,0x37]
122*9880d681SAndroid Build Coastguard Worker
123*9880d681SAndroid Build Coastguard Worker  tbz w1, #3, #28
124*9880d681SAndroid Build Coastguard Worker; CHECK: tbz w1, #3, #28
125*9880d681SAndroid Build Coastguard Worker  tbz w3, #5, #32764
126*9880d681SAndroid Build Coastguard Worker; CHECK: tbz	w3, #5, #32764          ; encoding: [0xe3,0xff,0x2b,0x36]
127*9880d681SAndroid Build Coastguard Worker  tbnz x3, #8, #-32768
128*9880d681SAndroid Build Coastguard Worker; CHECK: tbnz	w3, #8, #-32768         ; encoding: [0x03,0x00,0x44,0x37]
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Worker;-----------------------------------------------------------------------------
131*9880d681SAndroid Build Coastguard Worker; Exception generation instructions.
132*9880d681SAndroid Build Coastguard Worker;-----------------------------------------------------------------------------
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Worker  brk   #1
135*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0x20,0x00,0x20,0xd4]
136*9880d681SAndroid Build Coastguard Worker  dcps1 #2
137*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0x41,0x00,0xa0,0xd4]
138*9880d681SAndroid Build Coastguard Worker  dcps2 #3
139*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0x62,0x00,0xa0,0xd4]
140*9880d681SAndroid Build Coastguard Worker  dcps3 #4
141*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0x83,0x00,0xa0,0xd4]
142*9880d681SAndroid Build Coastguard Worker  hlt   #5
143*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0xa0,0x00,0x40,0xd4]
144*9880d681SAndroid Build Coastguard Worker  hvc   #6
145*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0xc2,0x00,0x00,0xd4]
146*9880d681SAndroid Build Coastguard Worker  smc   #7
147*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0xe3,0x00,0x00,0xd4]
148*9880d681SAndroid Build Coastguard Worker  svc   #8
149*9880d681SAndroid Build Coastguard Worker; CHECK: encoding: [0x01,0x01,0x00,0xd4]
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker; The immediate defaults to zero for DCPSn
152*9880d681SAndroid Build Coastguard Worker  dcps1
153*9880d681SAndroid Build Coastguard Worker  dcps2
154*9880d681SAndroid Build Coastguard Worker  dcps3
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Worker; CHECK: dcps1                     ; encoding: [0x01,0x00,0xa0,0xd4]
157*9880d681SAndroid Build Coastguard Worker; CHECK: dcps2                     ; encoding: [0x02,0x00,0xa0,0xd4]
158*9880d681SAndroid Build Coastguard Worker; CHECK: dcps3                     ; encoding: [0x03,0x00,0xa0,0xd4]
159*9880d681SAndroid Build Coastguard Worker
160