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