xref: /aosp_15_r20/external/llvm/test/MC/Hexagon/instructions/j.s (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker# RUN: llvm-mc -triple hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
2*9880d681SAndroid Build Coastguard Worker# Hexagon Programmer's Reference Manual 11.4 J
3*9880d681SAndroid Build Coastguard Worker
4*9880d681SAndroid Build Coastguard Worker# Call subroutine
5*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 00 5a
6*9880d681SAndroid Build Coastguard Workercall 0
7*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 00 5d
8*9880d681SAndroid Build Coastguard Workerif (p3) call 0
9*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 20 5d
10*9880d681SAndroid Build Coastguard Workerif (!p3) call 0
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker# Compare and jump
13*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 89 11
14*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17,#-1); if (p0.new) jump:nt 0 }
15*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c1 89 11
16*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17,#-1); if (p0.new) jump:nt 0 }
17*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 89 11
18*9880d681SAndroid Build Coastguard Worker{ p0 = tstbit(r17, #0); if (p0.new) jump:nt 0 }
19*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e0 89 11
20*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17,#-1); if (p0.new) jump:t 0 }
21*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e1 89 11
22*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17,#-1); if (p0.new) jump:t 0 }
23*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e3 89 11
24*9880d681SAndroid Build Coastguard Worker{ p0 = tstbit(r17, #0); if (p0.new) jump:t 0 }
25*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 c9 11
26*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17,#-1); if (!p0.new) jump:nt 0 }
27*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c1 c9 11
28*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17,#-1); if (!p0.new) jump:nt 0 }
29*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 c9 11
30*9880d681SAndroid Build Coastguard Worker{ p0 = tstbit(r17, #0); if (!p0.new) jump:nt 0 }
31*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e0 c9 11
32*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17,#-1); if (!p0.new) jump:t 0 }
33*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e1 c9 11
34*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17,#-1); if (!p0.new) jump:t 0 }
35*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e3 c9 11
36*9880d681SAndroid Build Coastguard Worker{ p0 = tstbit(r17, #0); if (!p0.new) jump:t 0 }
37*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 09 10
38*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, #21); if (p0.new) jump:nt 0 }
39*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 09 10
40*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, #21); if (p0.new) jump:t 0 }
41*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 49 10
42*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, #21); if (!p0.new) jump:nt 0 }
43*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 49 10
44*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, #21); if (!p0.new) jump:t 0 }
45*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 89 10
46*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, #21); if (p0.new) jump:nt 0 }
47*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 89 10
48*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, #21); if (p0.new) jump:t 0 }
49*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 c9 10
50*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, #21); if (!p0.new) jump:nt 0 }
51*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 c9 10
52*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, #21); if (!p0.new) jump:t 0 }
53*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 09 11
54*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, #21); if (p0.new) jump:nt 0 }
55*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 09 11
56*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, #21); if (p0.new) jump:t 0 }
57*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 49 11
58*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, #21); if (!p0.new) jump:nt 0 }
59*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 49 11
60*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, #21); if (!p0.new) jump:t 0 }
61*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 89 13
62*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17,#-1); if (p1.new) jump:nt 0 }
63*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c1 89 13
64*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17,#-1); if (p1.new) jump:nt 0 }
65*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 89 13
66*9880d681SAndroid Build Coastguard Worker{ p1 = tstbit(r17, #0); if (p1.new) jump:nt 0 }
67*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e0 89 13
68*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17,#-1); if (p1.new) jump:t 0 }
69*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e1 89 13
70*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17,#-1); if (p1.new) jump:t 0 }
71*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e3 89 13
72*9880d681SAndroid Build Coastguard Worker{ p1 = tstbit(r17, #0); if (p1.new) jump:t 0 }
73*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 c9 13
74*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17,#-1); if (!p1.new) jump:nt 0 }
75*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c1 c9 13
76*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17,#-1); if (!p1.new) jump:nt 0 }
77*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 c9 13
78*9880d681SAndroid Build Coastguard Worker{ p1 = tstbit(r17, #0); if (!p1.new) jump:nt 0 }
79*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e0 c9 13
80*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17,#-1); if (!p1.new) jump:t 0 }
81*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e1 c9 13
82*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17,#-1); if (!p1.new) jump:t 0 }
83*9880d681SAndroid Build Coastguard Worker# CHECK: 00 e3 c9 13
84*9880d681SAndroid Build Coastguard Worker{ p1 = tstbit(r17, #0); if (!p1.new) jump:t 0 }
85*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 09 12
86*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, #21); if (p1.new) jump:nt 0 }
87*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 09 12
88*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, #21); if (p1.new) jump:t 0 }
89*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 49 12
90*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, #21); if (!p1.new) jump:nt 0 }
91*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 49 12
92*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, #21); if (!p1.new) jump:t 0 }
93*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 89 12
94*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, #21); if (p1.new) jump:nt 0 }
95*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 89 12
96*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, #21); if (p1.new) jump:t 0 }
97*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 c9 12
98*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, #21); if (!p1.new) jump:nt 0 }
99*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 c9 12
100*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, #21); if (!p1.new) jump:t 0 }
101*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 09 13
102*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, #21); if (p1.new) jump:nt 0 }
103*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 09 13
104*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, #21); if (p1.new) jump:t 0 }
105*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 49 13
106*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, #21); if (!p1.new) jump:nt 0 }
107*9880d681SAndroid Build Coastguard Worker# CHECK: 00 f5 49 13
108*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, #21); if (!p1.new) jump:t 0 }
109*9880d681SAndroid Build Coastguard Worker# CHECK: 00 cd 09 14
110*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, r21); if (p0.new) jump:nt 0 }
111*9880d681SAndroid Build Coastguard Worker# CHECK: 00 dd 09 14
112*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, r21); if (p1.new) jump:nt 0 }
113*9880d681SAndroid Build Coastguard Worker# CHECK: 00 ed 09 14
114*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, r21); if (p0.new) jump:t 0 }
115*9880d681SAndroid Build Coastguard Worker# CHECK: 00 fd 09 14
116*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, r21); if (p1.new) jump:t 0 }
117*9880d681SAndroid Build Coastguard Worker# CHECK: 00 cd 49 14
118*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, r21); if (!p0.new) jump:nt 0 }
119*9880d681SAndroid Build Coastguard Worker# CHECK: 00 dd 49 14
120*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, r21); if (!p1.new) jump:nt 0 }
121*9880d681SAndroid Build Coastguard Worker# CHECK: 00 ed 49 14
122*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.eq(r17, r21); if (!p0.new) jump:t 0 }
123*9880d681SAndroid Build Coastguard Worker# CHECK: 00 fd 49 14
124*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.eq(r17, r21); if (!p1.new) jump:t 0 }
125*9880d681SAndroid Build Coastguard Worker# CHECK: 00 cd 89 14
126*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, r21); if (p0.new) jump:nt 0 }
127*9880d681SAndroid Build Coastguard Worker# CHECK: 00 dd 89 14
128*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, r21); if (p1.new) jump:nt 0 }
129*9880d681SAndroid Build Coastguard Worker# CHECK: 00 ed 89 14
130*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, r21); if (p0.new) jump:t 0 }
131*9880d681SAndroid Build Coastguard Worker# CHECK: 00 fd 89 14
132*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, r21); if (p1.new) jump:t 0 }
133*9880d681SAndroid Build Coastguard Worker# CHECK: 00 cd c9 14
134*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, r21); if (!p0.new) jump:nt 0 }
135*9880d681SAndroid Build Coastguard Worker# CHECK: 00 dd c9 14
136*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, r21); if (!p1.new) jump:nt 0 }
137*9880d681SAndroid Build Coastguard Worker# CHECK: 00 ed c9 14
138*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gt(r17, r21); if (!p0.new) jump:t 0 }
139*9880d681SAndroid Build Coastguard Worker# CHECK: 00 fd c9 14
140*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gt(r17, r21); if (!p1.new) jump:t 0 }
141*9880d681SAndroid Build Coastguard Worker# CHECK: 00 cd 09 15
142*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, r21); if (p0.new) jump:nt 0 }
143*9880d681SAndroid Build Coastguard Worker# CHECK: 00 dd 09 15
144*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, r21); if (p1.new) jump:nt 0 }
145*9880d681SAndroid Build Coastguard Worker# CHECK: 00 ed 09 15
146*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, r21); if (p0.new) jump:t 0 }
147*9880d681SAndroid Build Coastguard Worker# CHECK: 00 fd 09 15
148*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, r21); if (p1.new) jump:t 0 }
149*9880d681SAndroid Build Coastguard Worker# CHECK: 00 cd 49 15
150*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, r21); if (!p0.new) jump:nt 0 }
151*9880d681SAndroid Build Coastguard Worker# CHECK: 00 dd 49 15
152*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, r21); if (!p1.new) jump:nt 0 }
153*9880d681SAndroid Build Coastguard Worker# CHECK: 00 ed 49 15
154*9880d681SAndroid Build Coastguard Worker{ p0 = cmp.gtu(r17, r21); if (!p0.new) jump:t 0 }
155*9880d681SAndroid Build Coastguard Worker# CHECK: 00 fd 49 15
156*9880d681SAndroid Build Coastguard Worker{ p1 = cmp.gtu(r17, r21); if (!p1.new) jump:t 0 }
157*9880d681SAndroid Build Coastguard Worker
158*9880d681SAndroid Build Coastguard Worker# Jump to address
159*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 00 58
160*9880d681SAndroid Build Coastguard Workerjump 0
161*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 00 5c
162*9880d681SAndroid Build Coastguard Workerif (p3) jump 0
163*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c3 20 5c
164*9880d681SAndroid Build Coastguard Workerif (!p3) jump 0
165*9880d681SAndroid Build Coastguard Worker
166*9880d681SAndroid Build Coastguard Worker# Jump to address conditioned on new predicate
167*9880d681SAndroid Build Coastguard Worker# CHECK: 03 40 45 85
168*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: 00 cb 00 5c
169*9880d681SAndroid Build Coastguard Worker{ p3 = r5
170*9880d681SAndroid Build Coastguard Worker  if (p3.new) jump:nt 0 }
171*9880d681SAndroid Build Coastguard Worker# CHECK: 03 40 45 85
172*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: 00 db 00 5c
173*9880d681SAndroid Build Coastguard Worker{ p3 = r5
174*9880d681SAndroid Build Coastguard Worker  if (p3.new) jump:t 0 }
175*9880d681SAndroid Build Coastguard Worker# CHECK: 03 40 45 85
176*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: 00 cb 20 5c
177*9880d681SAndroid Build Coastguard Worker{ p3 = r5
178*9880d681SAndroid Build Coastguard Worker  if (!p3.new) jump:nt 0 }
179*9880d681SAndroid Build Coastguard Worker# CHECK: 03 40 45 85
180*9880d681SAndroid Build Coastguard Worker# CHECK-NEXT: 00 db 20 5c
181*9880d681SAndroid Build Coastguard Worker{ p3 = r5
182*9880d681SAndroid Build Coastguard Worker  if (!p3.new) jump:t 0 }
183*9880d681SAndroid Build Coastguard Worker
184*9880d681SAndroid Build Coastguard Worker# Jump to address conditioned on register value
185*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 11 61
186*9880d681SAndroid Build Coastguard Workerif (r17!=#0) jump:nt 0
187*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d0 11 61
188*9880d681SAndroid Build Coastguard Workerif (r17!=#0) jump:t 0
189*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 51 61
190*9880d681SAndroid Build Coastguard Workerif (r17>=#0) jump:nt 0
191*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d0 51 61
192*9880d681SAndroid Build Coastguard Workerif (r17>=#0) jump:t 0
193*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 91 61
194*9880d681SAndroid Build Coastguard Workerif (r17==#0) jump:nt 0
195*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d0 91 61
196*9880d681SAndroid Build Coastguard Workerif (r17==#0) jump:t 0
197*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c0 d1 61
198*9880d681SAndroid Build Coastguard Workerif (r17<=#0) jump:nt 0
199*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d0 d1 61
200*9880d681SAndroid Build Coastguard Workerif (r17<=#0) jump:t 0
201*9880d681SAndroid Build Coastguard Worker
202*9880d681SAndroid Build Coastguard Worker# Transfer and jump
203*9880d681SAndroid Build Coastguard Worker# CHECK: 00 d5 09 16
204*9880d681SAndroid Build Coastguard Worker{ r17 = #21 ; jump 0}
205*9880d681SAndroid Build Coastguard Worker# CHECK: 00 c9 0d 17
206*9880d681SAndroid Build Coastguard Worker{ r17 = r21 ; jump 0 }
207