blob: 084b39d8cbf577d1ee3b45296550f459c6d91d0d [file] [log] [blame]
Colin LeMahieu3c740a32015-01-29 21:47:15 +00001# RUN: llvm-mc -triple hexagon -disassemble < %s | FileCheck %s
Colin LeMahieubc63f422015-01-29 21:30:22 +00002# Hexagon Programmer's Reference Manual 11.1.3 ALU32/PRED
Colin LeMahieu01785bb2014-12-05 17:27:39 +00003
Colin LeMahieubc63f422015-01-29 21:30:22 +00004# Conditional add
50xf1 0xc3 0x75 0x74
6# CHECK: if (p3) r17 = add(r21, #31)
70x03 0x40 0x45 0x85 0xf1 0xe3 0x75 0x74
8# CHECK: p3 = r5
9# CHECK-NEXT: if (p3.new) r17 = add(r21, #31)
100xf1 0xc3 0xf5 0x74
11# CHECK: if (!p3) r17 = add(r21, #31)
120x03 0x40 0x45 0x85 0xf1 0xe3 0xf5 0x74
13# CHECK: p3 = r5
14# CHECK-NEXT: if (!p3.new) r17 = add(r21, #31)
Colin LeMahieu01785bb2014-12-05 17:27:39 +0000150x71 0xdf 0x15 0xfb
16# CHECK: if (p3) r17 = add(r21, r31)
Colin LeMahieubc63f422015-01-29 21:30:22 +0000170x03 0x40 0x45 0x85 0x71 0xff 0x15 0xfb
18# CHECK: p3 = r5
19# CHECK-NEXT: if (p3.new) r17 = add(r21, r31)
200xf1 0xdf 0x15 0xfb
21# CHECK: if (!p3) r17 = add(r21, r31)
220x03 0x40 0x45 0x85 0xf1 0xff 0x15 0xfb
23# CHECK: p3 = r5
24# CHECK-NEXT: if (!p3.new) r17 = add(r21, r31)
25
26# Conditional shift halfword
Colin LeMahieu01785bb2014-12-05 17:27:39 +0000270x11 0xe3 0x15 0x70
28# CHECK: if (p3) r17 = aslh(r21)
Colin LeMahieubc63f422015-01-29 21:30:22 +0000290x03 0x40 0x45 0x85 0x11 0xe7 0x15 0x70
30# CHECK: p3 = r5
31# CHECK-NEXT: if (p3.new) r17 = aslh(r21)
320x11 0xeb 0x15 0x70
33# CHECK: if (!p3) r17 = aslh(r21)
340x03 0x40 0x45 0x85 0x11 0xef 0x15 0x70
35# CHECK: p3 = r5
36# CHECK-NEXT: if (!p3.new) r17 = aslh(r21)
Colin LeMahieu01785bb2014-12-05 17:27:39 +0000370x11 0xe3 0x35 0x70
38# CHECK: if (p3) r17 = asrh(r21)
Colin LeMahieubc63f422015-01-29 21:30:22 +0000390x03 0x40 0x45 0x85 0x11 0xe7 0x35 0x70
40# CHECK: p3 = r5
41# CHECK-NEXT: if (p3.new) r17 = asrh(r21)
420x11 0xeb 0x35 0x70
43# CHECK: if (!p3) r17 = asrh(r21)
440x03 0x40 0x45 0x85 0x11 0xef 0x35 0x70
45# CHECK: p3 = r5
46# CHECK-NEXT: if (!p3.new) r17 = asrh(r21)
47
48# Conditional combine
Colin LeMahieub56e6cd2014-12-08 17:33:06 +0000490x70 0xdf 0x15 0xfd
50# CHECK: if (p3) r17:16 = combine(r21, r31)
510xf0 0xdf 0x15 0xfd
52# CHECK: if (!p3) r17:16 = combine(r21, r31)
Colin LeMahieub580d7d2014-12-09 19:23:45 +0000530x03 0x40 0x45 0x85 0x70 0xff 0x15 0xfd
54# CHECK: p3 = r5
55# CHECK-NEXT: if (p3.new) r17:16 = combine(r21, r31)
560x03 0x40 0x45 0x85 0xf0 0xff 0x15 0xfd
57# CHECK: p3 = r5
58# CHECK-NEXT: if (!p3.new) r17:16 = combine(r21, r31)
Colin LeMahieubc63f422015-01-29 21:30:22 +000059
60# Conditional logical operations
Colin LeMahieu01785bb2014-12-05 17:27:39 +0000610x71 0xdf 0x15 0xf9
62# CHECK: if (p3) r17 = and(r21, r31)
Colin LeMahieubc63f422015-01-29 21:30:22 +0000630xf1 0xdf 0x15 0xf9
64# CHECK: if (!p3) r17 = and(r21, r31)
650x03 0x40 0x45 0x85 0x71 0xff 0x15 0xf9
66# CHECK: p3 = r5
67# CHECK-NEXT: if (p3.new) r17 = and(r21, r31)
680x03 0x40 0x45 0x85 0xf1 0xff 0x15 0xf9
69# CHECK: p3 = r5
70# CHECK-NEXT: if (!p3.new) r17 = and(r21, r31)
Colin LeMahieu01785bb2014-12-05 17:27:39 +0000710x71 0xdf 0x35 0xf9
72# CHECK: if (p3) r17 = or(r21, r31)
Colin LeMahieubc63f422015-01-29 21:30:22 +0000730xf1 0xdf 0x35 0xf9
74# CHECK: if (!p3) r17 = or(r21, r31)
750x03 0x40 0x45 0x85 0x71 0xff 0x35 0xf9
76# CHECK: p3 = r5
77# CHECK-NEXT: if (p3.new) r17 = or(r21, r31)
780x03 0x40 0x45 0x85 0xf1 0xff 0x35 0xf9
79# CHECK: p3 = r5
80# CHECK-NEXT: if (!p3.new) r17 = or(r21, r31)
Colin LeMahieu01785bb2014-12-05 17:27:39 +0000810x71 0xdf 0x75 0xf9
82# CHECK: if (p3) r17 = xor(r21, r31)
Colin LeMahieubc63f422015-01-29 21:30:22 +0000830xf1 0xdf 0x75 0xf9
84# CHECK: if (!p3) r17 = xor(r21, r31)
850x03 0x40 0x45 0x85 0x71 0xff 0x75 0xf9
86# CHECK: p3 = r5
87# CHECK-NEXT: if (p3.new) r17 = xor(r21, r31)
880x03 0x40 0x45 0x85 0xf1 0xff 0x75 0xf9
89# CHECK: p3 = r5
90# CHECK-NEXT: if (!p3.new) r17 = xor(r21, r31)
91
92# Conditional subtract
Colin LeMahieu01785bb2014-12-05 17:27:39 +0000930x71 0xdf 0x35 0xfb
94# CHECK: if (p3) r17 = sub(r31, r21)
Colin LeMahieubc63f422015-01-29 21:30:22 +0000950xf1 0xdf 0x35 0xfb
96# CHECK: if (!p3) r17 = sub(r31, r21)
970x03 0x40 0x45 0x85 0x71 0xff 0x35 0xfb
98# CHECK: p3 = r5
99# CHECK-NEXT: if (p3.new) r17 = sub(r31, r21)
1000x03 0x40 0x45 0x85 0xf1 0xff 0x35 0xfb
101# CHECK: p3 = r5
102# CHECK-NEXT: if (!p3.new) r17 = sub(r31, r21)
103
104# Conditional sign extend
Colin LeMahieu01785bb2014-12-05 17:27:39 +00001050x11 0xe3 0xb5 0x70
106# CHECK: if (p3) r17 = sxtb(r21)
Colin LeMahieubc63f422015-01-29 21:30:22 +00001070x11 0xeb 0xb5 0x70
108# CHECK: if (!p3) r17 = sxtb(r21)
1090x03 0x40 0x45 0x85 0x11 0xe7 0xb5 0x70
110# CHECK: p3 = r5
111# CHECK-NEXT: if (p3.new) r17 = sxtb(r21)
1120x03 0x40 0x45 0x85 0x11 0xef 0xb5 0x70
113# CHECK: p3 = r5
114# CHECK-NEXT: if (!p3.new) r17 = sxtb(r21)
Colin LeMahieu01785bb2014-12-05 17:27:39 +00001150x11 0xe3 0xf5 0x70
116# CHECK: if (p3) r17 = sxth(r21)
Colin LeMahieubc63f422015-01-29 21:30:22 +00001170x11 0xeb 0xf5 0x70
118# CHECK: if (!p3) r17 = sxth(r21)
1190x03 0x40 0x45 0x85 0x11 0xe7 0xf5 0x70
120# CHECK: p3 = r5
121# CHECK-NEXT: if (p3.new) r17 = sxth(r21)
1220x03 0x40 0x45 0x85 0x11 0xef 0xf5 0x70
123# CHECK: p3 = r5
124# CHECK-NEXT: if (!p3.new) r17 = sxth(r21)
125
126# Conditional transfer
Colin LeMahieu4af437f2014-12-09 20:23:30 +00001270xb1 0xc2 0x60 0x7e
Colin LeMahieub030c252014-12-09 20:36:53 +0000128# CHECK: if (p3) r17 = #21
Colin LeMahieu4af437f2014-12-09 20:23:30 +00001290xb1 0xc2 0xe0 0x7e
Colin LeMahieub030c252014-12-09 20:36:53 +0000130# CHECK: if (!p3) r17 = #21
Colin LeMahieu4af437f2014-12-09 20:23:30 +00001310x03 0x40 0x45 0x85 0xb1 0xe2 0x60 0x7e
Colin LeMahieub030c252014-12-09 20:36:53 +0000132# CHECK: p3 = r5
133# CHECK-NEXT: if (p3.new) r17 = #21
Colin LeMahieu4af437f2014-12-09 20:23:30 +00001340x03 0x40 0x45 0x85 0xb1 0xe2 0xe0 0x7e
Colin LeMahieub030c252014-12-09 20:36:53 +0000135# CHECK: p3 = r5
136# CHECK-NEXT: if (!p3.new) r17 = #21
Colin LeMahieubc63f422015-01-29 21:30:22 +0000137
138# Conditional zero extend
Colin LeMahieu01785bb2014-12-05 17:27:39 +00001390x11 0xe3 0x95 0x70
140# CHECK: if (p3) r17 = zxtb(r21)
Colin LeMahieubc63f422015-01-29 21:30:22 +00001410x11 0xeb 0x95 0x70
142# CHECK: if (!p3) r17 = zxtb(r21)
1430x03 0x40 0x45 0x85 0x11 0xe7 0x95 0x70
144# CHECK: p3 = r5
145# CHECK-NEXT: if (p3.new) r17 = zxtb(r21)
1460x03 0x40 0x45 0x85 0x11 0xef 0x95 0x70
147# CHECK: p3 = r5
148# CHECK-NEXT: if (!p3.new) r17 = zxtb(r21)
Colin LeMahieu01785bb2014-12-05 17:27:39 +00001490x11 0xe3 0xd5 0x70
150# CHECK: if (p3) r17 = zxth(r21)
Colin LeMahieubc63f422015-01-29 21:30:22 +00001510x11 0xeb 0xd5 0x70
152# CHECK: if (!p3) r17 = zxth(r21)
1530x03 0x40 0x45 0x85 0x11 0xe7 0xd5 0x70
154# CHECK: p3 = r5
155# CHECK-NEXT: if (p3.new) r17 = zxth(r21)
1560x03 0x40 0x45 0x85 0x11 0xef 0xd5 0x70
157# CHECK: p3 = r5
158# CHECK-NEXT: if (!p3.new) r17 = zxth(r21)
159
160# Compare
1610xe3 0xc3 0x15 0x75
162# CHECK: p3 = cmp.eq(r21, #31)
1630xf3 0xc3 0x15 0x75
164# CHECK: p3 = !cmp.eq(r21, #31)
1650xe3 0xc3 0x55 0x75
166# CHECK: p3 = cmp.gt(r21, #31)
1670xf3 0xc3 0x55 0x75
168# CHECK: p3 = !cmp.gt(r21, #31)
1690xe3 0xc3 0x95 0x75
170# CHECK: p3 = cmp.gtu(r21, #31)
1710xf3 0xc3 0x95 0x75
172# CHECK: p3 = !cmp.gtu(r21, #31)
Colin LeMahieu01785bb2014-12-05 17:27:39 +00001730x03 0xdf 0x15 0xf2
174# CHECK: p3 = cmp.eq(r21, r31)
Colin LeMahieud7a56fd2014-12-30 15:44:17 +00001750x13 0xdf 0x15 0xf2
176# CHECK: p3 = !cmp.eq(r21, r31)
Colin LeMahieu01785bb2014-12-05 17:27:39 +00001770x03 0xdf 0x55 0xf2
178# CHECK: p3 = cmp.gt(r21, r31)
Colin LeMahieud7a56fd2014-12-30 15:44:17 +00001790x13 0xdf 0x55 0xf2
180# CHECK: p3 = !cmp.gt(r21, r31)
Colin LeMahieu01785bb2014-12-05 17:27:39 +00001810x03 0xdf 0x75 0xf2
182# CHECK: p3 = cmp.gtu(r21, r31)
Colin LeMahieud7a56fd2014-12-30 15:44:17 +00001830x13 0xdf 0x75 0xf2
184# CHECK: p3 = !cmp.gtu(r21, r31)
Colin LeMahieubc63f422015-01-29 21:30:22 +0000185
186# Compare to general register
Colin LeMahieu377ac652014-12-30 17:39:24 +00001870xf1 0xe3 0x55 0x73
188# CHECK: r17 = cmp.eq(r21, #31)
1890xf1 0xe3 0x75 0x73
190# CHECK: r17 = !cmp.eq(r21, #31)
Colin LeMahieu01785bb2014-12-05 17:27:39 +00001910x11 0xdf 0x55 0xf3
Colin LeMahieud7a56fd2014-12-30 15:44:17 +0000192# CHECK: r17 = cmp.eq(r21, r31)
1930x11 0xdf 0x75 0xf3
194# CHECK: r17 = !cmp.eq(r21, r31)