1# RUN: llvm-mc --triple hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
2# Hexagon Programmer's Reference Manual 11.2 CR
3
4# Corner detection acceleration
5# CHECK: 93 e1 12 6b
6p3 = !fastcorner9(p2, p1)
7# CHECK: 91 e3 02 6b
8p1 = fastcorner9(p2, p3)
9
10# Logical reductions on predicates
11# CHECK: 01 c0 82 6b
12p1 = any8(p2)
13# CHECK: 01 c0 a2 6b
14p1 = all8(p2)
15
16# Looping instructions
17# CHECK: 00 c0 15 60
18loop0(0, r21)
19# CHECK: 00 c0 35 60
20loop1(0, r21)
21# CHECK: 60 c0 00 69
22loop0(0, #12)
23# CHECK: 60 c0 20 69
24loop1(0, #12)
25
26# Add to PC
27# CHECK: 91 ca 49 6a
28r17 = add(pc, #21)
29
30# Pipelined loop instructions
31# CHECK: 00 c0 b5 60
32p3 = sp1loop0(0, r21)
33# CHECK: 00 c0 d5 60
34p3 = sp2loop0(0, r21)
35# CHECK: 00 c0 f5 60
36p3 = sp3loop0(0, r21)
37# CHECK: a1 c0 a0 69
38p3 = sp1loop0(0, #21)
39# CHECK: a1 c0 c0 69
40p3 = sp2loop0(0, #21)
41# CHECK: a1 c0 e0 69
42p3 = sp3loop0(0, #21)
43
44# Logical operations on predicates
45# CHECK: 01 c3 02 6b
46p1 = and(p3, p2)
47# CHECK: c1 c3 12 6b
48p1 = and(p2, and(p3, p3))
49# CHECK: 01 c3 22 6b
50p1 = or(p3, p2)
51# CHECK: c1 c3 32 6b
52p1 = and(p2, or(p3, p3))
53# CHECK: 01 c3 42 6b
54p1 = xor(p2, p3)
55# CHECK: c1 c3 52 6b
56p1 = or(p2, and(p3, p3))
57# CHECK: 01 c2 63 6b
58p1 = and(p2, !p3)
59# CHECK: c1 c3 72 6b
60p1 = or(p2, or(p3, p3))
61# CHECK: c1 c3 92 6b
62p1 = and(p2, and(p3, !p3))
63# CHECK: c1 c3 b2 6b
64p1 = and(p2, or(p3, !p3))
65# CHECK: 01 c0 c2 6b
66p1 = not(p2)
67# CHECK: c1 c3 d2 6b
68p1 = or(p2, and(p3, !p3))
69# CHECK: 01 c2 e3 6b
70p1 = or(p2, !p3)
71# CHECK: c1 c3 f2 6b
72p1 = or(p2, or(p3, !p3))
73
74# User control register transfer
75# CHECK: 0d c0 35 62
76cs1 = r21
77# CHECK: 11 c0 0d 6a
78r17 = cs1
79