1# RUN: llvm-mc -triple=hexagon -filetype=obj -o - %s | llvm-objdump -d - | FileCheck %s
2# Hexagon Programmer's Reference Manual 11.10.7 XTYPE/PRED
3
4# Bounds check
5# CHECK: 83 f4 10 d2
6p3 = boundscheck(r17:16, r21:20):raw:lo
7# CHECK: a3 f4 10 d2
8p3 = boundscheck(r17:16, r21:20):raw:hi
9
10# Compare byte
11# CHECK: 43 d5 d1 c7
12p3 = cmpb.gt(r17, r21)
13# CHECK: c3 d5 d1 c7
14p3 = cmpb.eq(r17, r21)
15# CHECK: e3 d5 d1 c7
16p3 = cmpb.gtu(r17, r21)
17# CHECK: a3 c2 11 dd
18p3 = cmpb.eq(r17, #21)
19# CHECK: a3 c2 31 dd
20p3 = cmpb.gt(r17, #21)
21# CHECK: a3 c2 51 dd
22p3 = cmpb.gtu(r17, #21)
23
24# Compare half
25# CHECK: 63 d5 d1 c7
26p3 = cmph.eq(r17, r21)
27# CHECK: 83 d5 d1 c7
28p3 = cmph.gt(r17, r21)
29# CHECK: a3 d5 d1 c7
30p3 = cmph.gtu(r17, r21)
31# CHECK: ab c2 11 dd
32p3 = cmph.eq(r17, #21)
33# CHECK: ab c2 31 dd
34p3 = cmph.gt(r17, #21)
35# CHECK: ab c2 51 dd
36p3 = cmph.gtu(r17, #21)
37
38# Compare doublewords
39# CHECK: 03 de 94 d2
40p3 = cmp.eq(r21:20, r31:30)
41# CHECK: 43 de 94 d2
42p3 = cmp.gt(r21:20, r31:30)
43# CHECK: 83 de 94 d2
44p3 = cmp.gtu(r21:20, r31:30)
45
46# Compare bitmask
47# CHECK: 03 d5 91 85
48p3 = bitsclr(r17, #21)
49# CHECK: 03 d5 b1 85
50p3 = !bitsclr(r17, #21)
51# CHECK: 03 d5 51 c7
52p3 = bitsset(r17, r21)
53# CHECK: 03 d5 71 c7
54p3 = !bitsset(r17, r21)
55# CHECK: 03 d5 91 c7
56p3 = bitsclr(r17, r21)
57# CHECK: 03 d5 b1 c7
58p3 = !bitsclr(r17, r21)
59
60# mask generate from predicate
61# CHECK: 10 c3 00 86
62r17:16 = mask(p3)
63
64# Check for TLB match
65# CHECK: 63 f5 10 d2
66p3 = tlbmatch(r17:16, r21)
67
68# Predicate Transfer
69# CHECK: 03 c0 45 85
70p3 = r5
71# CHECK: 05 c0 43 89
72r5 = p3
73
74# Test bit
75# CHECK: 03 d5 11 85
76p3 = tstbit(r17, #21)
77# CHECK: 03 d5 31 85
78p3 = !tstbit(r17, #21)
79# CHECK: 03 d5 11 c7
80p3 = tstbit(r17, r21)
81# CHECK: 03 d5 31 c7
82p3 = !tstbit(r17, r21)
83
84# Vector compare halfwords
85# CHECK: 63 de 14 d2
86p3 = vcmph.eq(r21:20, r31:30)
87# CHECK: 83 de 14 d2
88p3 = vcmph.gt(r21:20, r31:30)
89# CHECK: a3 de 14 d2
90p3 = vcmph.gtu(r21:20, r31:30)
91# CHECK: eb c3 14 dc
92p3 = vcmph.eq(r21:20, #31)
93# CHECK: eb c3 34 dc
94p3 = vcmph.gt(r21:20, #31)
95# CHECK: eb c3 54 dc
96p3 = vcmph.gtu(r21:20, #31)
97
98# Vector compare bytes for any match
99# CHECK: 03 fe 14 d2
100p3 = any8(vcmpb.eq(r21:20, r31:30))
101
102# Vector compare bytes
103# CHECK: 63 de 14 d2
104p3 = vcmph.eq(r21:20, r31:30)
105# CHECK: 83 de 14 d2
106p3 = vcmph.gt(r21:20, r31:30)
107# CHECK: a3 de 14 d2
108p3 = vcmph.gtu(r21:20, r31:30)
109# CHECK: eb c3 14 dc
110p3 = vcmph.eq(r21:20, #31)
111# CHECK: eb c3 34 dc
112p3 = vcmph.gt(r21:20, #31)
113# CHECK: eb c3 54 dc
114p3 = vcmph.gtu(r21:20, #31)
115
116# Vector compare words
117# CHECK: 03 de 14 d2
118p3 = vcmpw.eq(r21:20, r31:30)
119# CHECK: 23 de 14 d2
120p3 = vcmpw.gt(r21:20, r31:30)
121# CHECK: 43 de 14 d2
122p3 = vcmpw.gtu(r21:20, r31:30)
123# CHECK: f3 c3 14 dc
124p3 = vcmpw.eq(r21:20, #31)
125# CHECK: f3 c3 34 dc
126p3 = vcmpw.gt(r21:20, #31)
127# CHECK: f3 c3 54 dc
128p3 = vcmpw.gtu(r21:20, #31)
129
130# Viterbi pack even and odd predicate bits
131# CHECK: 11 c2 03 89
132r17 = vitpack(p3, p2)
133
134# Vector mux
135# CHECK: 70 de 14 d1
136r17:16 = vmux(p3, r21:20, r31:30)
137