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