xref: /aosp_15_r20/external/llvm/lib/Target/Hexagon/HexagonIntrinsics.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//===-- HexagonIntrinsics.td - Instruction intrinsics ------*- tablegen -*-===//
2*9880d681SAndroid Build Coastguard Worker//
3*9880d681SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker//
5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker//
8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker// This is populated based on the following specs:
10*9880d681SAndroid Build Coastguard Worker// Hexagon V2 Architecture
11*9880d681SAndroid Build Coastguard Worker// Application-Level Specification
12*9880d681SAndroid Build Coastguard Worker// 80-V9418-8 Rev. B
13*9880d681SAndroid Build Coastguard Worker// March 4, 2008
14*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Workerclass T_I_pat <InstHexagon MI, Intrinsic IntID>
17*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID imm:$Is),
18*9880d681SAndroid Build Coastguard Worker         (MI imm:$Is)>;
19*9880d681SAndroid Build Coastguard Worker
20*9880d681SAndroid Build Coastguard Workerclass T_R_pat <InstHexagon MI, Intrinsic IntID>
21*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rs),
22*9880d681SAndroid Build Coastguard Worker         (MI I32:$Rs)>;
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Workerclass T_P_pat <InstHexagon MI, Intrinsic IntID>
25*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I64:$Rs),
26*9880d681SAndroid Build Coastguard Worker         (MI I64:$Rs)>;
27*9880d681SAndroid Build Coastguard Worker
28*9880d681SAndroid Build Coastguard Workerclass T_II_pat <InstHexagon MI, Intrinsic IntID, PatFrag Imm1, PatFrag Imm2>
29*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID Imm1:$Is, Imm2:$It),
30*9880d681SAndroid Build Coastguard Worker        (MI Imm1:$Is, Imm2:$It)>;
31*9880d681SAndroid Build Coastguard Worker
32*9880d681SAndroid Build Coastguard Workerclass T_RI_pat <InstHexagon MI, Intrinsic IntID,
33*9880d681SAndroid Build Coastguard Worker                PatLeaf ImmPred = PatLeaf<(i32 imm)>>
34*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID I32:$Rs, ImmPred:$It),
35*9880d681SAndroid Build Coastguard Worker        (MI I32:$Rs, ImmPred:$It)>;
36*9880d681SAndroid Build Coastguard Worker
37*9880d681SAndroid Build Coastguard Workerclass T_IR_pat <InstHexagon MI, Intrinsic IntID,
38*9880d681SAndroid Build Coastguard Worker                PatFrag ImmPred = PatLeaf<(i32 imm)>>
39*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID ImmPred:$Is, I32:$Rt),
40*9880d681SAndroid Build Coastguard Worker        (MI ImmPred:$Is, I32:$Rt)>;
41*9880d681SAndroid Build Coastguard Worker
42*9880d681SAndroid Build Coastguard Workerclass T_PI_pat <InstHexagon MI, Intrinsic IntID>
43*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID I64:$Rs, imm:$It),
44*9880d681SAndroid Build Coastguard Worker        (MI I64:$Rs, imm:$It)>;
45*9880d681SAndroid Build Coastguard Worker
46*9880d681SAndroid Build Coastguard Workerclass T_RP_pat <InstHexagon MI, Intrinsic IntID>
47*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID I32:$Rs, I64:$Rt),
48*9880d681SAndroid Build Coastguard Worker        (MI I32:$Rs, I64:$Rt)>;
49*9880d681SAndroid Build Coastguard Worker
50*9880d681SAndroid Build Coastguard Workerclass T_RR_pat <InstHexagon MI, Intrinsic IntID>
51*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rs, I32:$Rt),
52*9880d681SAndroid Build Coastguard Worker         (MI I32:$Rs, I32:$Rt)>;
53*9880d681SAndroid Build Coastguard Worker
54*9880d681SAndroid Build Coastguard Workerclass T_PP_pat <InstHexagon MI, Intrinsic IntID>
55*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I64:$Rs, I64:$Rt),
56*9880d681SAndroid Build Coastguard Worker         (MI I64:$Rs, I64:$Rt)>;
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Workerclass T_QQ_pat <InstHexagon MI, Intrinsic IntID>
59*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rs, I32:$Rt),
60*9880d681SAndroid Build Coastguard Worker         (MI (C2_tfrrp I32:$Rs), (C2_tfrrp I32:$Rt))>;
61*9880d681SAndroid Build Coastguard Worker
62*9880d681SAndroid Build Coastguard Workerclass T_QII_pat <InstHexagon MI, Intrinsic IntID, PatFrag Imm1, PatFrag Imm2>
63*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rp, Imm1:$Is, Imm2:$It),
64*9880d681SAndroid Build Coastguard Worker         (MI (C2_tfrrp I32:$Rp), Imm1:$Is, Imm2:$It)>;
65*9880d681SAndroid Build Coastguard Worker
66*9880d681SAndroid Build Coastguard Workerclass T_QRR_pat <InstHexagon MI, Intrinsic IntID>
67*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rp, I32:$Rs, I32:$Rt),
68*9880d681SAndroid Build Coastguard Worker         (MI (C2_tfrrp I32:$Rp), I32:$Rs, I32:$Rt)>;
69*9880d681SAndroid Build Coastguard Worker
70*9880d681SAndroid Build Coastguard Workerclass T_QRI_pat <InstHexagon MI, Intrinsic IntID, PatFrag ImmPred>
71*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rp, I32:$Rs, ImmPred:$Is),
72*9880d681SAndroid Build Coastguard Worker         (MI (C2_tfrrp I32:$Rp), I32:$Rs, ImmPred:$Is)>;
73*9880d681SAndroid Build Coastguard Worker
74*9880d681SAndroid Build Coastguard Workerclass T_QIR_pat <InstHexagon MI, Intrinsic IntID, PatFrag ImmPred>
75*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rp, ImmPred:$Is, I32:$Rs),
76*9880d681SAndroid Build Coastguard Worker         (MI (C2_tfrrp I32:$Rp), ImmPred:$Is, I32:$Rs)>;
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Workerclass T_QPP_pat <InstHexagon MI, Intrinsic IntID>
79*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rp, I64:$Rs, I64:$Rt),
80*9880d681SAndroid Build Coastguard Worker         (MI (C2_tfrrp I32:$Rp), I64:$Rs, I64:$Rt)>;
81*9880d681SAndroid Build Coastguard Worker
82*9880d681SAndroid Build Coastguard Workerclass T_RRI_pat <InstHexagon MI, Intrinsic IntID>
83*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rs, I32:$Rt, imm:$Iu),
84*9880d681SAndroid Build Coastguard Worker         (MI I32:$Rs, I32:$Rt, imm:$Iu)>;
85*9880d681SAndroid Build Coastguard Worker
86*9880d681SAndroid Build Coastguard Workerclass T_RII_pat <InstHexagon MI, Intrinsic IntID>
87*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rs, imm:$It, imm:$Iu),
88*9880d681SAndroid Build Coastguard Worker         (MI I32:$Rs, imm:$It, imm:$Iu)>;
89*9880d681SAndroid Build Coastguard Worker
90*9880d681SAndroid Build Coastguard Workerclass T_IRI_pat <InstHexagon MI, Intrinsic IntID>
91*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID imm:$It, I32:$Rs, imm:$Iu),
92*9880d681SAndroid Build Coastguard Worker         (MI imm:$It, I32:$Rs, imm:$Iu)>;
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Workerclass T_IRR_pat <InstHexagon MI, Intrinsic IntID>
95*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID imm:$Is, I32:$Rs, I32:$Rt),
96*9880d681SAndroid Build Coastguard Worker         (MI imm:$Is, I32:$Rs, I32:$Rt)>;
97*9880d681SAndroid Build Coastguard Worker
98*9880d681SAndroid Build Coastguard Workerclass T_RIR_pat <InstHexagon MI, Intrinsic IntID>
99*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rs, imm:$Is, I32:$Rt),
100*9880d681SAndroid Build Coastguard Worker         (MI I32:$Rs, imm:$Is, I32:$Rt)>;
101*9880d681SAndroid Build Coastguard Worker
102*9880d681SAndroid Build Coastguard Workerclass T_RRR_pat <InstHexagon MI, Intrinsic IntID>
103*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rs, I32:$Rt, I32:$Ru),
104*9880d681SAndroid Build Coastguard Worker         (MI I32:$Rs, I32:$Rt, I32:$Ru)>;
105*9880d681SAndroid Build Coastguard Worker
106*9880d681SAndroid Build Coastguard Workerclass T_PPI_pat <InstHexagon MI, Intrinsic IntID>
107*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I64:$Rs, I64:$Rt, imm:$Iu),
108*9880d681SAndroid Build Coastguard Worker         (MI I64:$Rs, I64:$Rt, imm:$Iu)>;
109*9880d681SAndroid Build Coastguard Worker
110*9880d681SAndroid Build Coastguard Workerclass T_PII_pat <InstHexagon MI, Intrinsic IntID>
111*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I64:$Rs, imm:$It, imm:$Iu),
112*9880d681SAndroid Build Coastguard Worker         (MI I64:$Rs, imm:$It, imm:$Iu)>;
113*9880d681SAndroid Build Coastguard Worker
114*9880d681SAndroid Build Coastguard Workerclass T_PPP_pat <InstHexagon MI, Intrinsic IntID>
115*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I64:$Rs, I64:$Rt, I64:$Ru),
116*9880d681SAndroid Build Coastguard Worker         (MI I64:$Rs, I64:$Rt, I64:$Ru)>;
117*9880d681SAndroid Build Coastguard Worker
118*9880d681SAndroid Build Coastguard Workerclass T_PPR_pat <InstHexagon MI, Intrinsic IntID>
119*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I64:$Rs, I64:$Rt, I32:$Ru),
120*9880d681SAndroid Build Coastguard Worker         (MI I64:$Rs, I64:$Rt, I32:$Ru)>;
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Workerclass T_PRR_pat <InstHexagon MI, Intrinsic IntID>
123*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I64:$Rs, I32:$Rt, I32:$Ru),
124*9880d681SAndroid Build Coastguard Worker         (MI I64:$Rs, I32:$Rt, I32:$Ru)>;
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerclass T_PPQ_pat <InstHexagon MI, Intrinsic IntID>
127*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I64:$Rs, I64:$Rt, I32:$Rp),
128*9880d681SAndroid Build Coastguard Worker         (MI I64:$Rs, I64:$Rt, (C2_tfrrp I32:$Rp))>;
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Workerclass T_PR_pat <InstHexagon MI, Intrinsic IntID>
131*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I64:$Rs, I32:$Rt),
132*9880d681SAndroid Build Coastguard Worker         (MI I64:$Rs, I32:$Rt)>;
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Workerclass T_D_pat <InstHexagon MI, Intrinsic IntID>
135*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID (F64:$Rs)),
136*9880d681SAndroid Build Coastguard Worker        (MI (F64:$Rs))>;
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Workerclass T_DI_pat <InstHexagon MI, Intrinsic IntID,
139*9880d681SAndroid Build Coastguard Worker                PatLeaf ImmPred = PatLeaf<(i32 imm)>>
140*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID F64:$Rs, ImmPred:$It),
141*9880d681SAndroid Build Coastguard Worker        (MI F64:$Rs, ImmPred:$It)>;
142*9880d681SAndroid Build Coastguard Worker
143*9880d681SAndroid Build Coastguard Workerclass T_F_pat <InstHexagon MI, Intrinsic IntID>
144*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID F32:$Rs),
145*9880d681SAndroid Build Coastguard Worker        (MI F32:$Rs)>;
146*9880d681SAndroid Build Coastguard Worker
147*9880d681SAndroid Build Coastguard Workerclass T_FI_pat <InstHexagon MI, Intrinsic IntID,
148*9880d681SAndroid Build Coastguard Worker                PatLeaf ImmPred = PatLeaf<(i32 imm)>>
149*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID F32:$Rs, ImmPred:$It),
150*9880d681SAndroid Build Coastguard Worker        (MI F32:$Rs, ImmPred:$It)>;
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Workerclass T_FF_pat <InstHexagon MI, Intrinsic IntID>
153*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID F32:$Rs, F32:$Rt),
154*9880d681SAndroid Build Coastguard Worker        (MI F32:$Rs, F32:$Rt)>;
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Workerclass T_DD_pat <InstHexagon MI, Intrinsic IntID>
157*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID F64:$Rs, F64:$Rt),
158*9880d681SAndroid Build Coastguard Worker        (MI F64:$Rs, F64:$Rt)>;
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Workerclass T_FFF_pat <InstHexagon MI, Intrinsic IntID>
161*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID F32:$Rs, F32:$Rt, F32:$Ru),
162*9880d681SAndroid Build Coastguard Worker        (MI F32:$Rs, F32:$Rt, F32:$Ru)>;
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Workerclass T_FFFQ_pat <InstHexagon MI, Intrinsic IntID>
165*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID F32:$Rs, F32:$Rt, F32:$Ru, I32:$Rp),
166*9880d681SAndroid Build Coastguard Worker         (MI F32:$Rs, F32:$Rt, F32:$Ru, (C2_tfrrp I32:$Rp))>;
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Workerclass T_Q_RI_pat <InstHexagon MI, Intrinsic IntID,
169*9880d681SAndroid Build Coastguard Worker                  PatLeaf ImmPred = PatLeaf<(i32 imm)>>
170*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID I32:$Rs, ImmPred:$It),
171*9880d681SAndroid Build Coastguard Worker        (C2_tfrpr (MI I32:$Rs, ImmPred:$It))>;
172*9880d681SAndroid Build Coastguard Worker
173*9880d681SAndroid Build Coastguard Workerclass T_Q_RR_pat <InstHexagon MI, Intrinsic IntID>
174*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rs, I32:$Rt),
175*9880d681SAndroid Build Coastguard Worker         (C2_tfrpr (MI I32:$Rs, I32:$Rt))>;
176*9880d681SAndroid Build Coastguard Worker
177*9880d681SAndroid Build Coastguard Workerclass T_Q_RP_pat <InstHexagon MI, Intrinsic IntID>
178*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rs, I64:$Rt),
179*9880d681SAndroid Build Coastguard Worker         (C2_tfrpr (MI I32:$Rs, I64:$Rt))>;
180*9880d681SAndroid Build Coastguard Worker
181*9880d681SAndroid Build Coastguard Workerclass T_Q_PR_pat <InstHexagon MI, Intrinsic IntID>
182*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I64:$Rs, I32:$Rt),
183*9880d681SAndroid Build Coastguard Worker         (C2_tfrpr (MI I64:$Rs, I32:$Rt))>;
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Workerclass T_Q_PI_pat <InstHexagon MI, Intrinsic IntID>
186*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID I64:$Rs, imm:$It),
187*9880d681SAndroid Build Coastguard Worker        (C2_tfrpr (MI I64:$Rs, imm:$It))>;
188*9880d681SAndroid Build Coastguard Worker
189*9880d681SAndroid Build Coastguard Workerclass T_Q_PP_pat <InstHexagon MI, Intrinsic IntID>
190*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I64:$Rs, I64:$Rt),
191*9880d681SAndroid Build Coastguard Worker         (C2_tfrpr (MI I64:$Rs, I64:$Rt))>;
192*9880d681SAndroid Build Coastguard Worker
193*9880d681SAndroid Build Coastguard Workerclass T_Q_Q_pat <InstHexagon MI, Intrinsic IntID>
194*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rp),
195*9880d681SAndroid Build Coastguard Worker         (C2_tfrpr (MI (C2_tfrrp I32:$Rp)))>;
196*9880d681SAndroid Build Coastguard Worker
197*9880d681SAndroid Build Coastguard Workerclass T_Q_QQ_pat <InstHexagon MI, Intrinsic IntID>
198*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rp, I32:$Rq),
199*9880d681SAndroid Build Coastguard Worker         (C2_tfrpr (MI (C2_tfrrp I32:$Rp), (C2_tfrrp I32:$Rq)))>;
200*9880d681SAndroid Build Coastguard Worker
201*9880d681SAndroid Build Coastguard Workerclass T_Q_FF_pat <InstHexagon MI, Intrinsic IntID>
202*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID F32:$Rs, F32:$Rt),
203*9880d681SAndroid Build Coastguard Worker        (C2_tfrpr (MI F32:$Rs, F32:$Rt))>;
204*9880d681SAndroid Build Coastguard Worker
205*9880d681SAndroid Build Coastguard Workerclass T_Q_DD_pat <InstHexagon MI, Intrinsic IntID>
206*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID F64:$Rs, F64:$Rt),
207*9880d681SAndroid Build Coastguard Worker        (C2_tfrpr (MI F64:$Rs, F64:$Rt))>;
208*9880d681SAndroid Build Coastguard Worker
209*9880d681SAndroid Build Coastguard Workerclass T_Q_FI_pat <InstHexagon MI, Intrinsic IntID>
210*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID F32:$Rs, imm:$It),
211*9880d681SAndroid Build Coastguard Worker        (C2_tfrpr (MI F32:$Rs, imm:$It))>;
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Workerclass T_Q_DI_pat <InstHexagon MI, Intrinsic IntID>
214*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID F64:$Rs, imm:$It),
215*9880d681SAndroid Build Coastguard Worker        (C2_tfrpr (MI F64:$Rs, imm:$It))>;
216*9880d681SAndroid Build Coastguard Worker
217*9880d681SAndroid Build Coastguard Workerclass T_Q_QQQ_pat <InstHexagon MI, Intrinsic IntID>
218*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$Rp, I32:$Rq, I32:$Rs),
219*9880d681SAndroid Build Coastguard Worker         (C2_tfrpr (MI (C2_tfrrp I32:$Rp), (C2_tfrrp I32:$Rq),
220*9880d681SAndroid Build Coastguard Worker                       (C2_tfrrp I32:$Rs)))>;
221*9880d681SAndroid Build Coastguard Worker
222*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
223*9880d681SAndroid Build Coastguard Worker// MPYS / Multipy signed/unsigned halfwords
224*9880d681SAndroid Build Coastguard Worker//Rd=mpy[u](Rs.[H|L],Rt.[H|L])[:<<1][:rnd][:sat]
225*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
226*9880d681SAndroid Build Coastguard Worker
227*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_ll_s1, int_hexagon_M2_mpy_ll_s1>;
228*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_ll_s0, int_hexagon_M2_mpy_ll_s0>;
229*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_lh_s1, int_hexagon_M2_mpy_lh_s1>;
230*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_lh_s0, int_hexagon_M2_mpy_lh_s0>;
231*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_hl_s1, int_hexagon_M2_mpy_hl_s1>;
232*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_hl_s0, int_hexagon_M2_mpy_hl_s0>;
233*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_hh_s1, int_hexagon_M2_mpy_hh_s1>;
234*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_hh_s0, int_hexagon_M2_mpy_hh_s0>;
235*9880d681SAndroid Build Coastguard Worker
236*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyu_ll_s1, int_hexagon_M2_mpyu_ll_s1>;
237*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyu_ll_s0, int_hexagon_M2_mpyu_ll_s0>;
238*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyu_lh_s1, int_hexagon_M2_mpyu_lh_s1>;
239*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyu_lh_s0, int_hexagon_M2_mpyu_lh_s0>;
240*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyu_hl_s1, int_hexagon_M2_mpyu_hl_s1>;
241*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyu_hl_s0, int_hexagon_M2_mpyu_hl_s0>;
242*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyu_hh_s1, int_hexagon_M2_mpyu_hh_s1>;
243*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyu_hh_s0, int_hexagon_M2_mpyu_hh_s0>;
244*9880d681SAndroid Build Coastguard Worker
245*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_ll_s1, int_hexagon_M2_mpy_sat_ll_s1>;
246*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_ll_s0, int_hexagon_M2_mpy_sat_ll_s0>;
247*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_lh_s1, int_hexagon_M2_mpy_sat_lh_s1>;
248*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_lh_s0, int_hexagon_M2_mpy_sat_lh_s0>;
249*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_hl_s1, int_hexagon_M2_mpy_sat_hl_s1>;
250*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_hl_s0, int_hexagon_M2_mpy_sat_hl_s0>;
251*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_hh_s1, int_hexagon_M2_mpy_sat_hh_s1>;
252*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_hh_s0, int_hexagon_M2_mpy_sat_hh_s0>;
253*9880d681SAndroid Build Coastguard Worker
254*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_rnd_ll_s1, int_hexagon_M2_mpy_rnd_ll_s1>;
255*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_rnd_ll_s0, int_hexagon_M2_mpy_rnd_ll_s0>;
256*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_rnd_lh_s1, int_hexagon_M2_mpy_rnd_lh_s1>;
257*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_rnd_lh_s0, int_hexagon_M2_mpy_rnd_lh_s0>;
258*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_rnd_hl_s1, int_hexagon_M2_mpy_rnd_hl_s1>;
259*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_rnd_hl_s0, int_hexagon_M2_mpy_rnd_hl_s0>;
260*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_rnd_hh_s1, int_hexagon_M2_mpy_rnd_hh_s1>;
261*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_rnd_hh_s0, int_hexagon_M2_mpy_rnd_hh_s0>;
262*9880d681SAndroid Build Coastguard Worker
263*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_rnd_ll_s1, int_hexagon_M2_mpy_sat_rnd_ll_s1>;
264*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_rnd_ll_s0, int_hexagon_M2_mpy_sat_rnd_ll_s0>;
265*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_rnd_lh_s1, int_hexagon_M2_mpy_sat_rnd_lh_s1>;
266*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_rnd_lh_s0, int_hexagon_M2_mpy_sat_rnd_lh_s0>;
267*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_rnd_hl_s1, int_hexagon_M2_mpy_sat_rnd_hl_s1>;
268*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_rnd_hl_s0, int_hexagon_M2_mpy_sat_rnd_hl_s0>;
269*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_rnd_hh_s1, int_hexagon_M2_mpy_sat_rnd_hh_s1>;
270*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_sat_rnd_hh_s0, int_hexagon_M2_mpy_sat_rnd_hh_s0>;
271*9880d681SAndroid Build Coastguard Worker
272*9880d681SAndroid Build Coastguard Worker
273*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
274*9880d681SAndroid Build Coastguard Worker// MPYS / Multipy signed/unsigned halfwords and add/subtract the
275*9880d681SAndroid Build Coastguard Worker// result from the accumulator.
276*9880d681SAndroid Build Coastguard Worker//Rx [-+]= mpy[u](Rs.[H|L],Rt.[H|L])[:<<1][:sat]
277*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
278*9880d681SAndroid Build Coastguard Worker
279*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_ll_s1, int_hexagon_M2_mpy_acc_ll_s1>;
280*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_ll_s0, int_hexagon_M2_mpy_acc_ll_s0>;
281*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_lh_s1, int_hexagon_M2_mpy_acc_lh_s1>;
282*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_lh_s0, int_hexagon_M2_mpy_acc_lh_s0>;
283*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_hl_s1, int_hexagon_M2_mpy_acc_hl_s1>;
284*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_hl_s0, int_hexagon_M2_mpy_acc_hl_s0>;
285*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_hh_s1, int_hexagon_M2_mpy_acc_hh_s1>;
286*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_hh_s0, int_hexagon_M2_mpy_acc_hh_s0>;
287*9880d681SAndroid Build Coastguard Worker
288*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_acc_ll_s1, int_hexagon_M2_mpyu_acc_ll_s1>;
289*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_acc_ll_s0, int_hexagon_M2_mpyu_acc_ll_s0>;
290*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_acc_lh_s1, int_hexagon_M2_mpyu_acc_lh_s1>;
291*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_acc_lh_s0, int_hexagon_M2_mpyu_acc_lh_s0>;
292*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_acc_hl_s1, int_hexagon_M2_mpyu_acc_hl_s1>;
293*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_acc_hl_s0, int_hexagon_M2_mpyu_acc_hl_s0>;
294*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_acc_hh_s1, int_hexagon_M2_mpyu_acc_hh_s1>;
295*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_acc_hh_s0, int_hexagon_M2_mpyu_acc_hh_s0>;
296*9880d681SAndroid Build Coastguard Worker
297*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_ll_s1, int_hexagon_M2_mpy_nac_ll_s1>;
298*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_ll_s0, int_hexagon_M2_mpy_nac_ll_s0>;
299*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_lh_s1, int_hexagon_M2_mpy_nac_lh_s1>;
300*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_lh_s0, int_hexagon_M2_mpy_nac_lh_s0>;
301*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_hl_s1, int_hexagon_M2_mpy_nac_hl_s1>;
302*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_hl_s0, int_hexagon_M2_mpy_nac_hl_s0>;
303*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_hh_s1, int_hexagon_M2_mpy_nac_hh_s1>;
304*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_hh_s0, int_hexagon_M2_mpy_nac_hh_s0>;
305*9880d681SAndroid Build Coastguard Worker
306*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_nac_ll_s1, int_hexagon_M2_mpyu_nac_ll_s1>;
307*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_nac_ll_s0, int_hexagon_M2_mpyu_nac_ll_s0>;
308*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_nac_lh_s1, int_hexagon_M2_mpyu_nac_lh_s1>;
309*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_nac_lh_s0, int_hexagon_M2_mpyu_nac_lh_s0>;
310*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_nac_hl_s1, int_hexagon_M2_mpyu_nac_hl_s1>;
311*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_nac_hl_s0, int_hexagon_M2_mpyu_nac_hl_s0>;
312*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_nac_hh_s1, int_hexagon_M2_mpyu_nac_hh_s1>;
313*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpyu_nac_hh_s0, int_hexagon_M2_mpyu_nac_hh_s0>;
314*9880d681SAndroid Build Coastguard Worker
315*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_sat_ll_s1, int_hexagon_M2_mpy_acc_sat_ll_s1>;
316*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_sat_ll_s0, int_hexagon_M2_mpy_acc_sat_ll_s0>;
317*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_sat_lh_s1, int_hexagon_M2_mpy_acc_sat_lh_s1>;
318*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_sat_lh_s0, int_hexagon_M2_mpy_acc_sat_lh_s0>;
319*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_sat_hl_s1, int_hexagon_M2_mpy_acc_sat_hl_s1>;
320*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_sat_hl_s0, int_hexagon_M2_mpy_acc_sat_hl_s0>;
321*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_sat_hh_s1, int_hexagon_M2_mpy_acc_sat_hh_s1>;
322*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_acc_sat_hh_s0, int_hexagon_M2_mpy_acc_sat_hh_s0>;
323*9880d681SAndroid Build Coastguard Worker
324*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_sat_ll_s1, int_hexagon_M2_mpy_nac_sat_ll_s1>;
325*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_sat_ll_s0, int_hexagon_M2_mpy_nac_sat_ll_s0>;
326*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_sat_lh_s1, int_hexagon_M2_mpy_nac_sat_lh_s1>;
327*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_sat_lh_s0, int_hexagon_M2_mpy_nac_sat_lh_s0>;
328*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_sat_hl_s1, int_hexagon_M2_mpy_nac_sat_hl_s1>;
329*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_sat_hl_s0, int_hexagon_M2_mpy_nac_sat_hl_s0>;
330*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_sat_hh_s1, int_hexagon_M2_mpy_nac_sat_hh_s1>;
331*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_mpy_nac_sat_hh_s0, int_hexagon_M2_mpy_nac_sat_hh_s0>;
332*9880d681SAndroid Build Coastguard Worker
333*9880d681SAndroid Build Coastguard Worker
334*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
335*9880d681SAndroid Build Coastguard Worker// Multiply signed/unsigned halfwords with and without saturation and rounding
336*9880d681SAndroid Build Coastguard Worker// into a 64-bits destination register.
337*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
338*9880d681SAndroid Build Coastguard Worker
339*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_hh_s0, int_hexagon_M2_mpyd_hh_s0>;
340*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_hl_s0, int_hexagon_M2_mpyd_hl_s0>;
341*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_lh_s0, int_hexagon_M2_mpyd_lh_s0>;
342*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_ll_s0, int_hexagon_M2_mpyd_ll_s0>;
343*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_hh_s1, int_hexagon_M2_mpyd_hh_s1>;
344*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_hl_s1, int_hexagon_M2_mpyd_hl_s1>;
345*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_lh_s1, int_hexagon_M2_mpyd_lh_s1>;
346*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_ll_s1, int_hexagon_M2_mpyd_ll_s1>;
347*9880d681SAndroid Build Coastguard Worker
348*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_rnd_hh_s0, int_hexagon_M2_mpyd_rnd_hh_s0>;
349*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_rnd_hl_s0, int_hexagon_M2_mpyd_rnd_hl_s0>;
350*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_rnd_lh_s0, int_hexagon_M2_mpyd_rnd_lh_s0>;
351*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_rnd_ll_s0, int_hexagon_M2_mpyd_rnd_ll_s0>;
352*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_rnd_hh_s1, int_hexagon_M2_mpyd_rnd_hh_s1>;
353*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_rnd_hl_s1, int_hexagon_M2_mpyd_rnd_hl_s1>;
354*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_rnd_lh_s1, int_hexagon_M2_mpyd_rnd_lh_s1>;
355*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyd_rnd_ll_s1, int_hexagon_M2_mpyd_rnd_ll_s1>;
356*9880d681SAndroid Build Coastguard Worker
357*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyud_hh_s0, int_hexagon_M2_mpyud_hh_s0>;
358*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyud_hl_s0, int_hexagon_M2_mpyud_hl_s0>;
359*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyud_lh_s0, int_hexagon_M2_mpyud_lh_s0>;
360*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyud_ll_s0, int_hexagon_M2_mpyud_ll_s0>;
361*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyud_hh_s1, int_hexagon_M2_mpyud_hh_s1>;
362*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyud_hl_s1, int_hexagon_M2_mpyud_hl_s1>;
363*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyud_lh_s1, int_hexagon_M2_mpyud_lh_s1>;
364*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyud_ll_s1, int_hexagon_M2_mpyud_ll_s1>;
365*9880d681SAndroid Build Coastguard Worker
366*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
367*9880d681SAndroid Build Coastguard Worker// MPYS / Multipy signed/unsigned halfwords and add/subtract the
368*9880d681SAndroid Build Coastguard Worker// result from the 64-bit destination register.
369*9880d681SAndroid Build Coastguard Worker//Rxx [-+]= mpy[u](Rs.[H|L],Rt.[H|L])[:<<1][:sat]
370*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
371*9880d681SAndroid Build Coastguard Worker
372*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_acc_hh_s0, int_hexagon_M2_mpyd_acc_hh_s0>;
373*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_acc_hl_s0, int_hexagon_M2_mpyd_acc_hl_s0>;
374*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_acc_lh_s0, int_hexagon_M2_mpyd_acc_lh_s0>;
375*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_acc_ll_s0, int_hexagon_M2_mpyd_acc_ll_s0>;
376*9880d681SAndroid Build Coastguard Worker
377*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_acc_hh_s1, int_hexagon_M2_mpyd_acc_hh_s1>;
378*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_acc_hl_s1, int_hexagon_M2_mpyd_acc_hl_s1>;
379*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_acc_lh_s1, int_hexagon_M2_mpyd_acc_lh_s1>;
380*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_acc_ll_s1, int_hexagon_M2_mpyd_acc_ll_s1>;
381*9880d681SAndroid Build Coastguard Worker
382*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_nac_hh_s0, int_hexagon_M2_mpyd_nac_hh_s0>;
383*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_nac_hl_s0, int_hexagon_M2_mpyd_nac_hl_s0>;
384*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_nac_lh_s0, int_hexagon_M2_mpyd_nac_lh_s0>;
385*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_nac_ll_s0, int_hexagon_M2_mpyd_nac_ll_s0>;
386*9880d681SAndroid Build Coastguard Worker
387*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_nac_hh_s1, int_hexagon_M2_mpyd_nac_hh_s1>;
388*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_nac_hl_s1, int_hexagon_M2_mpyd_nac_hl_s1>;
389*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_nac_lh_s1, int_hexagon_M2_mpyd_nac_lh_s1>;
390*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyd_nac_ll_s1, int_hexagon_M2_mpyd_nac_ll_s1>;
391*9880d681SAndroid Build Coastguard Worker
392*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_acc_hh_s0, int_hexagon_M2_mpyud_acc_hh_s0>;
393*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_acc_hl_s0, int_hexagon_M2_mpyud_acc_hl_s0>;
394*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_acc_lh_s0, int_hexagon_M2_mpyud_acc_lh_s0>;
395*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_acc_ll_s0, int_hexagon_M2_mpyud_acc_ll_s0>;
396*9880d681SAndroid Build Coastguard Worker
397*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_acc_hh_s1, int_hexagon_M2_mpyud_acc_hh_s1>;
398*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_acc_hl_s1, int_hexagon_M2_mpyud_acc_hl_s1>;
399*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_acc_lh_s1, int_hexagon_M2_mpyud_acc_lh_s1>;
400*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_acc_ll_s1, int_hexagon_M2_mpyud_acc_ll_s1>;
401*9880d681SAndroid Build Coastguard Worker
402*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_nac_hh_s0, int_hexagon_M2_mpyud_nac_hh_s0>;
403*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_nac_hl_s0, int_hexagon_M2_mpyud_nac_hl_s0>;
404*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_nac_lh_s0, int_hexagon_M2_mpyud_nac_lh_s0>;
405*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_nac_ll_s0, int_hexagon_M2_mpyud_nac_ll_s0>;
406*9880d681SAndroid Build Coastguard Worker
407*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_nac_hh_s1, int_hexagon_M2_mpyud_nac_hh_s1>;
408*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_nac_hl_s1, int_hexagon_M2_mpyud_nac_hl_s1>;
409*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_nac_lh_s1, int_hexagon_M2_mpyud_nac_lh_s1>;
410*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_mpyud_nac_ll_s1, int_hexagon_M2_mpyud_nac_ll_s1>;
411*9880d681SAndroid Build Coastguard Worker
412*9880d681SAndroid Build Coastguard Worker// Vector complex multiply imaginary: Rdd=vcmpyi(Rss,Rtt)[:<<1]:sat
413*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_vcmpy_s1_sat_i, int_hexagon_M2_vcmpy_s1_sat_i>;
414*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_vcmpy_s0_sat_i, int_hexagon_M2_vcmpy_s0_sat_i>;
415*9880d681SAndroid Build Coastguard Worker
416*9880d681SAndroid Build Coastguard Worker// Vector complex multiply real: Rdd=vcmpyr(Rss,Rtt)[:<<1]:sat
417*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_vcmpy_s1_sat_r, int_hexagon_M2_vcmpy_s1_sat_r>;
418*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_vcmpy_s0_sat_r, int_hexagon_M2_vcmpy_s0_sat_r>;
419*9880d681SAndroid Build Coastguard Worker
420*9880d681SAndroid Build Coastguard Worker// Vector dual multiply: Rdd=vdmpy(Rss,Rtt)[:<<1]:sat
421*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_vdmpys_s1, int_hexagon_M2_vdmpys_s1>;
422*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_vdmpys_s0, int_hexagon_M2_vdmpys_s0>;
423*9880d681SAndroid Build Coastguard Worker
424*9880d681SAndroid Build Coastguard Worker// Vector multiply even halfwords: Rdd=vmpyeh(Rss,Rtt)[:<<1]:sat
425*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_vmpy2es_s1, int_hexagon_M2_vmpy2es_s1>;
426*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_vmpy2es_s0, int_hexagon_M2_vmpy2es_s0>;
427*9880d681SAndroid Build Coastguard Worker
428*9880d681SAndroid Build Coastguard Worker//Rdd=vmpywoh(Rss,Rtt)[:<<1][:rnd]:sat
429*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyh_s0,  int_hexagon_M2_mmpyh_s0>;
430*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyh_s1,  int_hexagon_M2_mmpyh_s1>;
431*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyh_rs0, int_hexagon_M2_mmpyh_rs0>;
432*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyh_rs1, int_hexagon_M2_mmpyh_rs1>;
433*9880d681SAndroid Build Coastguard Worker
434*9880d681SAndroid Build Coastguard Worker//Rdd=vmpyweh(Rss,Rtt)[:<<1][:rnd]:sat
435*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyl_s0,  int_hexagon_M2_mmpyl_s0>;
436*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyl_s1,  int_hexagon_M2_mmpyl_s1>;
437*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyl_rs0, int_hexagon_M2_mmpyl_rs0>;
438*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyl_rs1, int_hexagon_M2_mmpyl_rs1>;
439*9880d681SAndroid Build Coastguard Worker
440*9880d681SAndroid Build Coastguard Worker//Rdd=vmpywouh(Rss,Rtt)[:<<1][:rnd]:sat
441*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyuh_s0,  int_hexagon_M2_mmpyuh_s0>;
442*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyuh_s1,  int_hexagon_M2_mmpyuh_s1>;
443*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyuh_rs0, int_hexagon_M2_mmpyuh_rs0>;
444*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyuh_rs1, int_hexagon_M2_mmpyuh_rs1>;
445*9880d681SAndroid Build Coastguard Worker
446*9880d681SAndroid Build Coastguard Worker//Rdd=vmpyweuh(Rss,Rtt)[:<<1][:rnd]:sat
447*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyul_s0,  int_hexagon_M2_mmpyul_s0>;
448*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyul_s1,  int_hexagon_M2_mmpyul_s1>;
449*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyul_rs0, int_hexagon_M2_mmpyul_rs0>;
450*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_mmpyul_rs1, int_hexagon_M2_mmpyul_rs1>;
451*9880d681SAndroid Build Coastguard Worker
452*9880d681SAndroid Build Coastguard Worker// Vector reduce add unsigned bytes: Rdd32[+]=vrmpybu(Rss32,Rtt32)
453*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat  <A2_vraddub,     int_hexagon_A2_vraddub>;
454*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <A2_vraddub_acc, int_hexagon_A2_vraddub_acc>;
455*9880d681SAndroid Build Coastguard Worker
456*9880d681SAndroid Build Coastguard Worker// Vector sum of absolute differences unsigned bytes: Rdd=vrsadub(Rss,Rtt)
457*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat  <A2_vrsadub,     int_hexagon_A2_vrsadub>;
458*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <A2_vrsadub_acc, int_hexagon_A2_vrsadub_acc>;
459*9880d681SAndroid Build Coastguard Worker
460*9880d681SAndroid Build Coastguard Worker// Vector absolute difference: Rdd=vabsdiffh(Rtt,Rss)
461*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_vabsdiffh, int_hexagon_M2_vabsdiffh>;
462*9880d681SAndroid Build Coastguard Worker
463*9880d681SAndroid Build Coastguard Worker// Vector absolute difference words: Rdd=vabsdiffw(Rtt,Rss)
464*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_vabsdiffw, int_hexagon_M2_vabsdiffw>;
465*9880d681SAndroid Build Coastguard Worker
466*9880d681SAndroid Build Coastguard Worker// Vector reduce complex multiply real or imaginary:
467*9880d681SAndroid Build Coastguard Worker// Rdd[+]=vrcmpy[ir](Rss,Rtt[*])
468*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat  <M2_vrcmpyi_s0,  int_hexagon_M2_vrcmpyi_s0>;
469*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat  <M2_vrcmpyi_s0c, int_hexagon_M2_vrcmpyi_s0c>;
470*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_vrcmaci_s0,  int_hexagon_M2_vrcmaci_s0>;
471*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_vrcmaci_s0c, int_hexagon_M2_vrcmaci_s0c>;
472*9880d681SAndroid Build Coastguard Worker
473*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat  <M2_vrcmpyr_s0,  int_hexagon_M2_vrcmpyr_s0>;
474*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat  <M2_vrcmpyr_s0c, int_hexagon_M2_vrcmpyr_s0c>;
475*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_vrcmacr_s0,  int_hexagon_M2_vrcmacr_s0>;
476*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_vrcmacr_s0c, int_hexagon_M2_vrcmacr_s0c>;
477*9880d681SAndroid Build Coastguard Worker
478*9880d681SAndroid Build Coastguard Worker// Vector reduce halfwords
479*9880d681SAndroid Build Coastguard Worker// Rdd[+]=vrmpyh(Rss,Rtt)
480*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat  <M2_vrmpy_s0, int_hexagon_M2_vrmpy_s0>;
481*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_vrmac_s0, int_hexagon_M2_vrmac_s0>;
482*9880d681SAndroid Build Coastguard Worker
483*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
484*9880d681SAndroid Build Coastguard Worker// Vector Multipy with accumulation
485*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
486*9880d681SAndroid Build Coastguard Worker
487*9880d681SAndroid Build Coastguard Worker// Vector multiply word by signed half with accumulation
488*9880d681SAndroid Build Coastguard Worker// Rxx+=vmpyw[eo]h(Rss,Rtt)[:<<1][:rnd]:sat
489*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmacls_s1, int_hexagon_M2_mmacls_s1>;
490*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmacls_s0, int_hexagon_M2_mmacls_s0>;
491*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmacls_rs1, int_hexagon_M2_mmacls_rs1>;
492*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmacls_rs0, int_hexagon_M2_mmacls_rs0>;
493*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmachs_s1, int_hexagon_M2_mmachs_s1>;
494*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmachs_s0, int_hexagon_M2_mmachs_s0>;
495*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmachs_rs1, int_hexagon_M2_mmachs_rs1>;
496*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmachs_rs0, int_hexagon_M2_mmachs_rs0>;
497*9880d681SAndroid Build Coastguard Worker
498*9880d681SAndroid Build Coastguard Worker// Vector multiply word by unsigned half with accumulation
499*9880d681SAndroid Build Coastguard Worker// Rxx+=vmpyw[eo]uh(Rss,Rtt)[:<<1][:rnd]:sat
500*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmaculs_s1, int_hexagon_M2_mmaculs_s1>;
501*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmaculs_s0, int_hexagon_M2_mmaculs_s0>;
502*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmaculs_rs1, int_hexagon_M2_mmaculs_rs1>;
503*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmaculs_rs0, int_hexagon_M2_mmaculs_rs0>;
504*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmacuhs_s1, int_hexagon_M2_mmacuhs_s1>;
505*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmacuhs_s0, int_hexagon_M2_mmacuhs_s0>;
506*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmacuhs_rs1, int_hexagon_M2_mmacuhs_rs1>;
507*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_mmacuhs_rs0, int_hexagon_M2_mmacuhs_rs0>;
508*9880d681SAndroid Build Coastguard Worker
509*9880d681SAndroid Build Coastguard Worker// Vector multiply even halfwords with accumulation
510*9880d681SAndroid Build Coastguard Worker// Rxx+=vmpyeh(Rss,Rtt)[:<<1][:sat]
511*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_vmac2es, int_hexagon_M2_vmac2es>;
512*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_vmac2es_s1, int_hexagon_M2_vmac2es_s1>;
513*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_vmac2es_s0, int_hexagon_M2_vmac2es_s0>;
514*9880d681SAndroid Build Coastguard Worker
515*9880d681SAndroid Build Coastguard Worker// Vector dual multiply with accumulation
516*9880d681SAndroid Build Coastguard Worker// Rxx+=vdmpy(Rss,Rtt)[:sat]
517*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_vdmacs_s1, int_hexagon_M2_vdmacs_s1>;
518*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_vdmacs_s0, int_hexagon_M2_vdmacs_s0>;
519*9880d681SAndroid Build Coastguard Worker
520*9880d681SAndroid Build Coastguard Worker// Vector complex multiply real or imaginary with accumulation
521*9880d681SAndroid Build Coastguard Worker// Rxx+=vcmpy[ir](Rss,Rtt):sat
522*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_vcmac_s0_sat_r, int_hexagon_M2_vcmac_s0_sat_r>;
523*9880d681SAndroid Build Coastguard Workerdef : T_PPP_pat <M2_vcmac_s0_sat_i, int_hexagon_M2_vcmac_s0_sat_i>;
524*9880d681SAndroid Build Coastguard Worker
525*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
526*9880d681SAndroid Build Coastguard Worker// Add/Subtract halfword
527*9880d681SAndroid Build Coastguard Worker// Rd=add(Rt.L,Rs.[HL])[:sat]
528*9880d681SAndroid Build Coastguard Worker// Rd=sub(Rt.L,Rs.[HL])[:sat]
529*9880d681SAndroid Build Coastguard Worker// Rd=add(Rt.[LH],Rs.[HL])[:sat][:<16]
530*9880d681SAndroid Build Coastguard Worker// Rd=sub(Rt.[LH],Rs.[HL])[:sat][:<16]
531*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
532*9880d681SAndroid Build Coastguard Worker
533*9880d681SAndroid Build Coastguard Worker//Rd=add(Rt.L,Rs.[LH])
534*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_addh_l16_ll,     int_hexagon_A2_addh_l16_ll>;
535*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_addh_l16_hl,     int_hexagon_A2_addh_l16_hl>;
536*9880d681SAndroid Build Coastguard Worker
537*9880d681SAndroid Build Coastguard Worker//Rd=add(Rt.L,Rs.[LH]):sat
538*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_addh_l16_sat_ll, int_hexagon_A2_addh_l16_sat_ll>;
539*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_addh_l16_sat_hl, int_hexagon_A2_addh_l16_sat_hl>;
540*9880d681SAndroid Build Coastguard Worker
541*9880d681SAndroid Build Coastguard Worker//Rd=sub(Rt.L,Rs.[LH])
542*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_subh_l16_ll,     int_hexagon_A2_subh_l16_ll>;
543*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_subh_l16_hl,     int_hexagon_A2_subh_l16_hl>;
544*9880d681SAndroid Build Coastguard Worker
545*9880d681SAndroid Build Coastguard Worker//Rd=sub(Rt.L,Rs.[LH]):sat
546*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_subh_l16_sat_ll, int_hexagon_A2_subh_l16_sat_ll>;
547*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_subh_l16_sat_hl, int_hexagon_A2_subh_l16_sat_hl>;
548*9880d681SAndroid Build Coastguard Worker
549*9880d681SAndroid Build Coastguard Worker//Rd=add(Rt.[LH],Rs.[LH]):<<16
550*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_addh_h16_ll,     int_hexagon_A2_addh_h16_ll>;
551*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_addh_h16_lh,     int_hexagon_A2_addh_h16_lh>;
552*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_addh_h16_hl,     int_hexagon_A2_addh_h16_hl>;
553*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_addh_h16_hh,     int_hexagon_A2_addh_h16_hh>;
554*9880d681SAndroid Build Coastguard Worker
555*9880d681SAndroid Build Coastguard Worker//Rd=sub(Rt.[LH],Rs.[LH]):<<16
556*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_subh_h16_ll,     int_hexagon_A2_subh_h16_ll>;
557*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_subh_h16_lh,     int_hexagon_A2_subh_h16_lh>;
558*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_subh_h16_hl,     int_hexagon_A2_subh_h16_hl>;
559*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_subh_h16_hh,     int_hexagon_A2_subh_h16_hh>;
560*9880d681SAndroid Build Coastguard Worker
561*9880d681SAndroid Build Coastguard Worker//Rd=add(Rt.[LH],Rs.[LH]):sat:<<16
562*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_addh_h16_sat_ll, int_hexagon_A2_addh_h16_sat_ll>;
563*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_addh_h16_sat_lh, int_hexagon_A2_addh_h16_sat_lh>;
564*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_addh_h16_sat_hl, int_hexagon_A2_addh_h16_sat_hl>;
565*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_addh_h16_sat_hh, int_hexagon_A2_addh_h16_sat_hh>;
566*9880d681SAndroid Build Coastguard Worker
567*9880d681SAndroid Build Coastguard Worker//Rd=sub(Rt.[LH],Rs.[LH]):sat:<<16
568*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_subh_h16_sat_ll, int_hexagon_A2_subh_h16_sat_ll>;
569*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_subh_h16_sat_lh, int_hexagon_A2_subh_h16_sat_lh>;
570*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_subh_h16_sat_hl, int_hexagon_A2_subh_h16_sat_hl>;
571*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <A2_subh_h16_sat_hh, int_hexagon_A2_subh_h16_sat_hh>;
572*9880d681SAndroid Build Coastguard Worker
573*9880d681SAndroid Build Coastguard Worker// ALU64 / ALU / min max
574*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat<A2_max,  int_hexagon_A2_max>;
575*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat<A2_min,  int_hexagon_A2_min>;
576*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat<A2_maxu, int_hexagon_A2_maxu>;
577*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat<A2_minu, int_hexagon_A2_minu>;
578*9880d681SAndroid Build Coastguard Worker
579*9880d681SAndroid Build Coastguard Worker// Shift and accumulate
580*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asr_i_r_nac,  int_hexagon_S2_asr_i_r_nac>;
581*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_lsr_i_r_nac,  int_hexagon_S2_lsr_i_r_nac>;
582*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asl_i_r_nac,  int_hexagon_S2_asl_i_r_nac>;
583*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asr_i_r_acc,  int_hexagon_S2_asr_i_r_acc>;
584*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_lsr_i_r_acc,  int_hexagon_S2_lsr_i_r_acc>;
585*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asl_i_r_acc,  int_hexagon_S2_asl_i_r_acc>;
586*9880d681SAndroid Build Coastguard Worker
587*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asr_i_r_and,  int_hexagon_S2_asr_i_r_and>;
588*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_lsr_i_r_and,  int_hexagon_S2_lsr_i_r_and>;
589*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asl_i_r_and,  int_hexagon_S2_asl_i_r_and>;
590*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asr_i_r_or,   int_hexagon_S2_asr_i_r_or>;
591*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_lsr_i_r_or,   int_hexagon_S2_lsr_i_r_or>;
592*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asl_i_r_or,   int_hexagon_S2_asl_i_r_or>;
593*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_lsr_i_r_xacc, int_hexagon_S2_lsr_i_r_xacc>;
594*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asl_i_r_xacc, int_hexagon_S2_asl_i_r_xacc>;
595*9880d681SAndroid Build Coastguard Worker
596*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asr_i_p_nac,  int_hexagon_S2_asr_i_p_nac>;
597*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_lsr_i_p_nac,  int_hexagon_S2_lsr_i_p_nac>;
598*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asl_i_p_nac,  int_hexagon_S2_asl_i_p_nac>;
599*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asr_i_p_acc,  int_hexagon_S2_asr_i_p_acc>;
600*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_lsr_i_p_acc,  int_hexagon_S2_lsr_i_p_acc>;
601*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asl_i_p_acc,  int_hexagon_S2_asl_i_p_acc>;
602*9880d681SAndroid Build Coastguard Worker
603*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asr_i_p_and,  int_hexagon_S2_asr_i_p_and>;
604*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_lsr_i_p_and,  int_hexagon_S2_lsr_i_p_and>;
605*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asl_i_p_and,  int_hexagon_S2_asl_i_p_and>;
606*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asr_i_p_or,   int_hexagon_S2_asr_i_p_or>;
607*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_lsr_i_p_or,   int_hexagon_S2_lsr_i_p_or>;
608*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asl_i_p_or,   int_hexagon_S2_asl_i_p_or>;
609*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_lsr_i_p_xacc, int_hexagon_S2_lsr_i_p_xacc>;
610*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asl_i_p_xacc, int_hexagon_S2_asl_i_p_xacc>;
611*9880d681SAndroid Build Coastguard Worker
612*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asr_r_r_nac,  int_hexagon_S2_asr_r_r_nac>;
613*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsr_r_r_nac,  int_hexagon_S2_lsr_r_r_nac>;
614*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asl_r_r_nac,  int_hexagon_S2_asl_r_r_nac>;
615*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsl_r_r_nac,  int_hexagon_S2_lsl_r_r_nac>;
616*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asr_r_r_acc,  int_hexagon_S2_asr_r_r_acc>;
617*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsr_r_r_acc,  int_hexagon_S2_lsr_r_r_acc>;
618*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asl_r_r_acc,  int_hexagon_S2_asl_r_r_acc>;
619*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsl_r_r_acc,  int_hexagon_S2_lsl_r_r_acc>;
620*9880d681SAndroid Build Coastguard Worker
621*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asr_r_r_and,  int_hexagon_S2_asr_r_r_and>;
622*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsr_r_r_and,  int_hexagon_S2_lsr_r_r_and>;
623*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asl_r_r_and,  int_hexagon_S2_asl_r_r_and>;
624*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsl_r_r_and,  int_hexagon_S2_lsl_r_r_and>;
625*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asr_r_r_or,   int_hexagon_S2_asr_r_r_or>;
626*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsr_r_r_or,   int_hexagon_S2_lsr_r_r_or>;
627*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asl_r_r_or,   int_hexagon_S2_asl_r_r_or>;
628*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsl_r_r_or,   int_hexagon_S2_lsl_r_r_or>;
629*9880d681SAndroid Build Coastguard Worker
630*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asr_r_p_nac,  int_hexagon_S2_asr_r_p_nac>;
631*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsr_r_p_nac,  int_hexagon_S2_lsr_r_p_nac>;
632*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asl_r_p_nac,  int_hexagon_S2_asl_r_p_nac>;
633*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsl_r_p_nac,  int_hexagon_S2_lsl_r_p_nac>;
634*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asr_r_p_acc,  int_hexagon_S2_asr_r_p_acc>;
635*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsr_r_p_acc,  int_hexagon_S2_lsr_r_p_acc>;
636*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asl_r_p_acc,  int_hexagon_S2_asl_r_p_acc>;
637*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsl_r_p_acc,  int_hexagon_S2_lsl_r_p_acc>;
638*9880d681SAndroid Build Coastguard Worker
639*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asr_r_p_and,  int_hexagon_S2_asr_r_p_and>;
640*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsr_r_p_and,  int_hexagon_S2_lsr_r_p_and>;
641*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asl_r_p_and,  int_hexagon_S2_asl_r_p_and>;
642*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsl_r_p_and,  int_hexagon_S2_lsl_r_p_and>;
643*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asr_r_p_or,   int_hexagon_S2_asr_r_p_or>;
644*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsr_r_p_or,   int_hexagon_S2_lsr_r_p_or>;
645*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asl_r_p_or,   int_hexagon_S2_asl_r_p_or>;
646*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsl_r_p_or,   int_hexagon_S2_lsl_r_p_or>;
647*9880d681SAndroid Build Coastguard Worker
648*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asr_i_r_nac,  int_hexagon_S2_asr_i_r_nac>;
649*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_lsr_i_r_nac,  int_hexagon_S2_lsr_i_r_nac>;
650*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asl_i_r_nac,  int_hexagon_S2_asl_i_r_nac>;
651*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asr_i_r_acc,  int_hexagon_S2_asr_i_r_acc>;
652*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_lsr_i_r_acc,  int_hexagon_S2_lsr_i_r_acc>;
653*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asl_i_r_acc,  int_hexagon_S2_asl_i_r_acc>;
654*9880d681SAndroid Build Coastguard Worker
655*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asr_i_r_and,  int_hexagon_S2_asr_i_r_and>;
656*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_lsr_i_r_and,  int_hexagon_S2_lsr_i_r_and>;
657*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asl_i_r_and,  int_hexagon_S2_asl_i_r_and>;
658*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asr_i_r_or,   int_hexagon_S2_asr_i_r_or>;
659*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_lsr_i_r_or,   int_hexagon_S2_lsr_i_r_or>;
660*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asl_i_r_or,   int_hexagon_S2_asl_i_r_or>;
661*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_lsr_i_r_xacc, int_hexagon_S2_lsr_i_r_xacc>;
662*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <S2_asl_i_r_xacc, int_hexagon_S2_asl_i_r_xacc>;
663*9880d681SAndroid Build Coastguard Worker
664*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asr_i_p_nac,  int_hexagon_S2_asr_i_p_nac>;
665*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_lsr_i_p_nac,  int_hexagon_S2_lsr_i_p_nac>;
666*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asl_i_p_nac,  int_hexagon_S2_asl_i_p_nac>;
667*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asr_i_p_acc,  int_hexagon_S2_asr_i_p_acc>;
668*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_lsr_i_p_acc,  int_hexagon_S2_lsr_i_p_acc>;
669*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asl_i_p_acc,  int_hexagon_S2_asl_i_p_acc>;
670*9880d681SAndroid Build Coastguard Worker
671*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asr_i_p_and,  int_hexagon_S2_asr_i_p_and>;
672*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_lsr_i_p_and,  int_hexagon_S2_lsr_i_p_and>;
673*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asl_i_p_and,  int_hexagon_S2_asl_i_p_and>;
674*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asr_i_p_or,   int_hexagon_S2_asr_i_p_or>;
675*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_lsr_i_p_or,   int_hexagon_S2_lsr_i_p_or>;
676*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asl_i_p_or,   int_hexagon_S2_asl_i_p_or>;
677*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_lsr_i_p_xacc, int_hexagon_S2_lsr_i_p_xacc>;
678*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_asl_i_p_xacc, int_hexagon_S2_asl_i_p_xacc>;
679*9880d681SAndroid Build Coastguard Worker
680*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asr_r_r_nac,  int_hexagon_S2_asr_r_r_nac>;
681*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsr_r_r_nac,  int_hexagon_S2_lsr_r_r_nac>;
682*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asl_r_r_nac,  int_hexagon_S2_asl_r_r_nac>;
683*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsl_r_r_nac,  int_hexagon_S2_lsl_r_r_nac>;
684*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asr_r_r_acc,  int_hexagon_S2_asr_r_r_acc>;
685*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsr_r_r_acc,  int_hexagon_S2_lsr_r_r_acc>;
686*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asl_r_r_acc,  int_hexagon_S2_asl_r_r_acc>;
687*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsl_r_r_acc,  int_hexagon_S2_lsl_r_r_acc>;
688*9880d681SAndroid Build Coastguard Worker
689*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asr_r_r_and,  int_hexagon_S2_asr_r_r_and>;
690*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsr_r_r_and,  int_hexagon_S2_lsr_r_r_and>;
691*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asl_r_r_and,  int_hexagon_S2_asl_r_r_and>;
692*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsl_r_r_and,  int_hexagon_S2_lsl_r_r_and>;
693*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asr_r_r_or,   int_hexagon_S2_asr_r_r_or>;
694*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsr_r_r_or,   int_hexagon_S2_lsr_r_r_or>;
695*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_asl_r_r_or,   int_hexagon_S2_asl_r_r_or>;
696*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <S2_lsl_r_r_or,   int_hexagon_S2_lsl_r_r_or>;
697*9880d681SAndroid Build Coastguard Worker
698*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asr_r_p_nac,  int_hexagon_S2_asr_r_p_nac>;
699*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsr_r_p_nac,  int_hexagon_S2_lsr_r_p_nac>;
700*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asl_r_p_nac,  int_hexagon_S2_asl_r_p_nac>;
701*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsl_r_p_nac,  int_hexagon_S2_lsl_r_p_nac>;
702*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asr_r_p_acc,  int_hexagon_S2_asr_r_p_acc>;
703*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsr_r_p_acc,  int_hexagon_S2_lsr_r_p_acc>;
704*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asl_r_p_acc,  int_hexagon_S2_asl_r_p_acc>;
705*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsl_r_p_acc,  int_hexagon_S2_lsl_r_p_acc>;
706*9880d681SAndroid Build Coastguard Worker
707*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asr_r_p_and,  int_hexagon_S2_asr_r_p_and>;
708*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsr_r_p_and,  int_hexagon_S2_lsr_r_p_and>;
709*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asl_r_p_and,  int_hexagon_S2_asl_r_p_and>;
710*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsl_r_p_and,  int_hexagon_S2_lsl_r_p_and>;
711*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asr_r_p_or,   int_hexagon_S2_asr_r_p_or>;
712*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsr_r_p_or,   int_hexagon_S2_lsr_r_p_or>;
713*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_asl_r_p_or,   int_hexagon_S2_asl_r_p_or>;
714*9880d681SAndroid Build Coastguard Workerdef : T_PPR_pat <S2_lsl_r_p_or,   int_hexagon_S2_lsl_r_p_or>;
715*9880d681SAndroid Build Coastguard Worker
716*9880d681SAndroid Build Coastguard Worker//*******************************************************************
717*9880d681SAndroid Build Coastguard Worker//           ALU32/ALU
718*9880d681SAndroid Build Coastguard Worker//*******************************************************************
719*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat<A2_add,      int_hexagon_A2_add>;
720*9880d681SAndroid Build Coastguard Workerdef : T_RI_pat<A2_addi,     int_hexagon_A2_addi>;
721*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat<A2_sub,      int_hexagon_A2_sub>;
722*9880d681SAndroid Build Coastguard Workerdef : T_IR_pat<A2_subri,    int_hexagon_A2_subri>;
723*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat<A2_and,      int_hexagon_A2_and>;
724*9880d681SAndroid Build Coastguard Workerdef : T_RI_pat<A2_andir,    int_hexagon_A2_andir>;
725*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat<A2_or,       int_hexagon_A2_or>;
726*9880d681SAndroid Build Coastguard Workerdef : T_RI_pat<A2_orir,     int_hexagon_A2_orir>;
727*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat<A2_xor,      int_hexagon_A2_xor>;
728*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat<A2_combinew, int_hexagon_A2_combinew>;
729*9880d681SAndroid Build Coastguard Worker
730*9880d681SAndroid Build Coastguard Worker// Assembler mapped from Rd32=not(Rs32) to Rd32=sub(#-1,Rs32)
731*9880d681SAndroid Build Coastguard Workerdef : Pat <(int_hexagon_A2_not I32:$Rs),
732*9880d681SAndroid Build Coastguard Worker           (A2_subri -1, I32:$Rs)>;
733*9880d681SAndroid Build Coastguard Worker
734*9880d681SAndroid Build Coastguard Worker// Assembler mapped from Rd32=neg(Rs32) to Rd32=sub(#0,Rs32)
735*9880d681SAndroid Build Coastguard Workerdef : Pat <(int_hexagon_A2_neg I32:$Rs),
736*9880d681SAndroid Build Coastguard Worker           (A2_subri 0, I32:$Rs)>;
737*9880d681SAndroid Build Coastguard Worker
738*9880d681SAndroid Build Coastguard Worker// Transfer immediate
739*9880d681SAndroid Build Coastguard Workerdef  : Pat <(int_hexagon_A2_tfril I32:$Rs, u16_0ImmPred:$Is),
740*9880d681SAndroid Build Coastguard Worker            (A2_tfril I32:$Rs, u16_0ImmPred:$Is)>;
741*9880d681SAndroid Build Coastguard Workerdef  : Pat <(int_hexagon_A2_tfrih I32:$Rs, u16_0ImmPred:$Is),
742*9880d681SAndroid Build Coastguard Worker            (A2_tfrih I32:$Rs, u16_0ImmPred:$Is)>;
743*9880d681SAndroid Build Coastguard Worker
744*9880d681SAndroid Build Coastguard Worker//  Transfer Register/immediate.
745*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <A2_tfr, int_hexagon_A2_tfr>;
746*9880d681SAndroid Build Coastguard Workerdef : T_I_pat <A2_tfrsi, int_hexagon_A2_tfrsi>;
747*9880d681SAndroid Build Coastguard Worker
748*9880d681SAndroid Build Coastguard Workerdef ImmExt64: SDNodeXForm<imm, [{
749*9880d681SAndroid Build Coastguard Worker  int64_t V = N->getSExtValue();
750*9880d681SAndroid Build Coastguard Worker  return CurDAG->getTargetConstant(V, SDLoc(N), MVT::i64);
751*9880d681SAndroid Build Coastguard Worker}]>;
752*9880d681SAndroid Build Coastguard Worker
753*9880d681SAndroid Build Coastguard Worker// A2_tfrpi has an operand of type i64. This is necessary, since it is
754*9880d681SAndroid Build Coastguard Worker// generated from "(set I64:$Rd, imm)". That pattern would not appear
755*9880d681SAndroid Build Coastguard Worker// in the DAG, if the immediate was not a 64-bit value.
756*9880d681SAndroid Build Coastguard Worker// The builtin for A2_tfrpi, on the other hand, takes a 32-bit value,
757*9880d681SAndroid Build Coastguard Worker// which makes it impossible to simply replace it with the instruction.
758*9880d681SAndroid Build Coastguard Worker// To connect the builtin with the instruction, the builtin's operand
759*9880d681SAndroid Build Coastguard Worker// needs to be extended to the right type.
760*9880d681SAndroid Build Coastguard Worker
761*9880d681SAndroid Build Coastguard Workerdef : Pat<(int_hexagon_A2_tfrpi imm:$Is),
762*9880d681SAndroid Build Coastguard Worker          (A2_tfrpi (ImmExt64 $Is))>;
763*9880d681SAndroid Build Coastguard Worker
764*9880d681SAndroid Build Coastguard Worker// Assembler mapped from Rdd32=Rss32 to Rdd32=combine(Rss.H32,Rss.L32)
765*9880d681SAndroid Build Coastguard Workerdef : Pat<(int_hexagon_A2_tfrp I64:$src),
766*9880d681SAndroid Build Coastguard Worker          (A2_combinew (HiReg I64:$src), (LoReg I64:$src))>;
767*9880d681SAndroid Build Coastguard Worker
768*9880d681SAndroid Build Coastguard Worker//*******************************************************************
769*9880d681SAndroid Build Coastguard Worker//           ALU32/PERM
770*9880d681SAndroid Build Coastguard Worker//*******************************************************************
771*9880d681SAndroid Build Coastguard Worker// Combine
772*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_combine_hh, int_hexagon_A2_combine_hh>;
773*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_combine_hl, int_hexagon_A2_combine_hl>;
774*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_combine_lh, int_hexagon_A2_combine_lh>;
775*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_combine_ll, int_hexagon_A2_combine_ll>;
776*9880d681SAndroid Build Coastguard Worker
777*9880d681SAndroid Build Coastguard Workerdef: T_II_pat<A2_combineii, int_hexagon_A2_combineii, s32ImmPred, s8ImmPred>;
778*9880d681SAndroid Build Coastguard Worker
779*9880d681SAndroid Build Coastguard Worker// Mux
780*9880d681SAndroid Build Coastguard Workerdef : T_QRR_pat<C2_mux,   int_hexagon_C2_mux>;
781*9880d681SAndroid Build Coastguard Workerdef : T_QRI_pat<C2_muxir, int_hexagon_C2_muxir, s32ImmPred>;
782*9880d681SAndroid Build Coastguard Workerdef : T_QIR_pat<C2_muxri, int_hexagon_C2_muxri, s32ImmPred>;
783*9880d681SAndroid Build Coastguard Workerdef : T_QII_pat<C2_muxii, int_hexagon_C2_muxii, s32ImmPred, s8ImmPred>;
784*9880d681SAndroid Build Coastguard Worker
785*9880d681SAndroid Build Coastguard Worker// Shift halfword
786*9880d681SAndroid Build Coastguard Workerdef : T_R_pat<A2_aslh, int_hexagon_A2_aslh>;
787*9880d681SAndroid Build Coastguard Workerdef : T_R_pat<A2_asrh, int_hexagon_A2_asrh>;
788*9880d681SAndroid Build Coastguard Workerdef : T_R_pat<A2_asrh, int_hexagon_SI_to_SXTHI_asrh>;
789*9880d681SAndroid Build Coastguard Worker
790*9880d681SAndroid Build Coastguard Worker// Sign/zero extend
791*9880d681SAndroid Build Coastguard Workerdef : T_R_pat<A2_sxth, int_hexagon_A2_sxth>;
792*9880d681SAndroid Build Coastguard Workerdef : T_R_pat<A2_sxtb, int_hexagon_A2_sxtb>;
793*9880d681SAndroid Build Coastguard Workerdef : T_R_pat<A2_zxth, int_hexagon_A2_zxth>;
794*9880d681SAndroid Build Coastguard Workerdef : T_R_pat<A2_zxtb, int_hexagon_A2_zxtb>;
795*9880d681SAndroid Build Coastguard Worker
796*9880d681SAndroid Build Coastguard Worker//*******************************************************************
797*9880d681SAndroid Build Coastguard Worker//           ALU32/PRED
798*9880d681SAndroid Build Coastguard Worker//*******************************************************************
799*9880d681SAndroid Build Coastguard Worker// Compare
800*9880d681SAndroid Build Coastguard Workerdef : T_Q_RR_pat<C2_cmpeq,  int_hexagon_C2_cmpeq>;
801*9880d681SAndroid Build Coastguard Workerdef : T_Q_RR_pat<C2_cmpgt,  int_hexagon_C2_cmpgt>;
802*9880d681SAndroid Build Coastguard Workerdef : T_Q_RR_pat<C2_cmpgtu, int_hexagon_C2_cmpgtu>;
803*9880d681SAndroid Build Coastguard Worker
804*9880d681SAndroid Build Coastguard Workerdef : T_Q_RI_pat<C2_cmpeqi,  int_hexagon_C2_cmpeqi, s32ImmPred>;
805*9880d681SAndroid Build Coastguard Workerdef : T_Q_RI_pat<C2_cmpgti,  int_hexagon_C2_cmpgti, s32ImmPred>;
806*9880d681SAndroid Build Coastguard Workerdef : T_Q_RI_pat<C2_cmpgtui, int_hexagon_C2_cmpgtui, u32ImmPred>;
807*9880d681SAndroid Build Coastguard Worker
808*9880d681SAndroid Build Coastguard Workerdef : Pat <(int_hexagon_C2_cmpgei I32:$src1, s32ImmPred:$src2),
809*9880d681SAndroid Build Coastguard Worker           (C2_tfrpr (C2_cmpgti I32:$src1,
810*9880d681SAndroid Build Coastguard Worker                                (DEC_CONST_SIGNED s32ImmPred:$src2)))>;
811*9880d681SAndroid Build Coastguard Worker
812*9880d681SAndroid Build Coastguard Workerdef : Pat <(int_hexagon_C2_cmpgeui I32:$src1, u32ImmPred:$src2),
813*9880d681SAndroid Build Coastguard Worker           (C2_tfrpr (C2_cmpgtui I32:$src1,
814*9880d681SAndroid Build Coastguard Worker                                 (DEC_CONST_UNSIGNED u32ImmPred:$src2)))>;
815*9880d681SAndroid Build Coastguard Worker
816*9880d681SAndroid Build Coastguard Workerdef : Pat <(int_hexagon_C2_cmpgeui I32:$src, 0),
817*9880d681SAndroid Build Coastguard Worker           (C2_tfrpr (C2_cmpeq I32:$src, I32:$src))>;
818*9880d681SAndroid Build Coastguard Workerdef : Pat <(int_hexagon_C2_cmplt I32:$src1, I32:$src2),
819*9880d681SAndroid Build Coastguard Worker           (C2_tfrpr (C2_cmpgt I32:$src2, I32:$src1))>;
820*9880d681SAndroid Build Coastguard Workerdef : Pat <(int_hexagon_C2_cmpltu I32:$src1, I32:$src2),
821*9880d681SAndroid Build Coastguard Worker           (C2_tfrpr (C2_cmpgtu I32:$src2, I32:$src1))>;
822*9880d681SAndroid Build Coastguard Worker
823*9880d681SAndroid Build Coastguard Worker//*******************************************************************
824*9880d681SAndroid Build Coastguard Worker//           ALU32/VH
825*9880d681SAndroid Build Coastguard Worker//*******************************************************************
826*9880d681SAndroid Build Coastguard Worker// Vector add, subtract, average halfwords
827*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_svaddh,   int_hexagon_A2_svaddh>;
828*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_svaddhs,  int_hexagon_A2_svaddhs>;
829*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_svadduhs, int_hexagon_A2_svadduhs>;
830*9880d681SAndroid Build Coastguard Worker
831*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_svsubh,   int_hexagon_A2_svsubh>;
832*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_svsubhs,  int_hexagon_A2_svsubhs>;
833*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_svsubuhs, int_hexagon_A2_svsubuhs>;
834*9880d681SAndroid Build Coastguard Worker
835*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_svavgh,   int_hexagon_A2_svavgh>;
836*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_svavghs,  int_hexagon_A2_svavghs>;
837*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_svnavgh,  int_hexagon_A2_svnavgh>;
838*9880d681SAndroid Build Coastguard Worker
839*9880d681SAndroid Build Coastguard Worker//*******************************************************************
840*9880d681SAndroid Build Coastguard Worker//           ALU64/ALU
841*9880d681SAndroid Build Coastguard Worker//*******************************************************************
842*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_addsat,     int_hexagon_A2_addsat>;
843*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<A2_subsat,     int_hexagon_A2_subsat>;
844*9880d681SAndroid Build Coastguard Workerdef: T_PP_pat<A2_addp,       int_hexagon_A2_addp>;
845*9880d681SAndroid Build Coastguard Workerdef: T_PP_pat<A2_subp,       int_hexagon_A2_subp>;
846*9880d681SAndroid Build Coastguard Worker
847*9880d681SAndroid Build Coastguard Workerdef: T_PP_pat<A2_andp,       int_hexagon_A2_andp>;
848*9880d681SAndroid Build Coastguard Workerdef: T_PP_pat<A2_orp,        int_hexagon_A2_orp>;
849*9880d681SAndroid Build Coastguard Workerdef: T_PP_pat<A2_xorp,       int_hexagon_A2_xorp>;
850*9880d681SAndroid Build Coastguard Worker
851*9880d681SAndroid Build Coastguard Workerdef: T_Q_PP_pat<C2_cmpeqp,   int_hexagon_C2_cmpeqp>;
852*9880d681SAndroid Build Coastguard Workerdef: T_Q_PP_pat<C2_cmpgtp,   int_hexagon_C2_cmpgtp>;
853*9880d681SAndroid Build Coastguard Workerdef: T_Q_PP_pat<C2_cmpgtup,  int_hexagon_C2_cmpgtup>;
854*9880d681SAndroid Build Coastguard Worker
855*9880d681SAndroid Build Coastguard Workerdef: T_PP_pat<S2_parityp,    int_hexagon_S2_parityp>;
856*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<S2_packhl,     int_hexagon_S2_packhl>;
857*9880d681SAndroid Build Coastguard Worker
858*9880d681SAndroid Build Coastguard Worker//*******************************************************************
859*9880d681SAndroid Build Coastguard Worker//           ALU64/VB
860*9880d681SAndroid Build Coastguard Worker//*******************************************************************
861*9880d681SAndroid Build Coastguard Worker// ALU64 - Vector add
862*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vaddub,   int_hexagon_A2_vaddub>;
863*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vaddubs,  int_hexagon_A2_vaddubs>;
864*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vaddh,    int_hexagon_A2_vaddh>;
865*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vaddhs,   int_hexagon_A2_vaddhs>;
866*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vadduhs,  int_hexagon_A2_vadduhs>;
867*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vaddw,    int_hexagon_A2_vaddw>;
868*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vaddws,   int_hexagon_A2_vaddws>;
869*9880d681SAndroid Build Coastguard Worker
870*9880d681SAndroid Build Coastguard Worker// ALU64 - Vector average
871*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vavgub,   int_hexagon_A2_vavgub>;
872*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vavgubr,  int_hexagon_A2_vavgubr>;
873*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vavgh,    int_hexagon_A2_vavgh>;
874*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vavghr,   int_hexagon_A2_vavghr>;
875*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vavghcr,  int_hexagon_A2_vavghcr>;
876*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vavguh,   int_hexagon_A2_vavguh>;
877*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vavguhr,  int_hexagon_A2_vavguhr>;
878*9880d681SAndroid Build Coastguard Worker
879*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vavgw,    int_hexagon_A2_vavgw>;
880*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vavgwr,   int_hexagon_A2_vavgwr>;
881*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vavgwcr,  int_hexagon_A2_vavgwcr>;
882*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vavguw,   int_hexagon_A2_vavguw>;
883*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vavguwr,  int_hexagon_A2_vavguwr>;
884*9880d681SAndroid Build Coastguard Worker
885*9880d681SAndroid Build Coastguard Worker// ALU64 - Vector negative average
886*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vnavgh,   int_hexagon_A2_vnavgh>;
887*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vnavghr,  int_hexagon_A2_vnavghr>;
888*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vnavghcr, int_hexagon_A2_vnavghcr>;
889*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vnavgw,   int_hexagon_A2_vnavgw>;
890*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vnavgwr,  int_hexagon_A2_vnavgwr>;
891*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vnavgwcr, int_hexagon_A2_vnavgwcr>;
892*9880d681SAndroid Build Coastguard Worker
893*9880d681SAndroid Build Coastguard Worker// ALU64 - Vector max
894*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vmaxh,    int_hexagon_A2_vmaxh>;
895*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vmaxw,    int_hexagon_A2_vmaxw>;
896*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vmaxub,   int_hexagon_A2_vmaxub>;
897*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vmaxuh,   int_hexagon_A2_vmaxuh>;
898*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vmaxuw,   int_hexagon_A2_vmaxuw>;
899*9880d681SAndroid Build Coastguard Worker
900*9880d681SAndroid Build Coastguard Worker// ALU64 - Vector min
901*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vminh,    int_hexagon_A2_vminh>;
902*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vminw,    int_hexagon_A2_vminw>;
903*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vminub,   int_hexagon_A2_vminub>;
904*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vminuh,   int_hexagon_A2_vminuh>;
905*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vminuw,   int_hexagon_A2_vminuw>;
906*9880d681SAndroid Build Coastguard Worker
907*9880d681SAndroid Build Coastguard Worker// ALU64 - Vector sub
908*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vsubub,   int_hexagon_A2_vsubub>;
909*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vsububs,  int_hexagon_A2_vsububs>;
910*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vsubh,    int_hexagon_A2_vsubh>;
911*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vsubhs,   int_hexagon_A2_vsubhs>;
912*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vsubuhs,  int_hexagon_A2_vsubuhs>;
913*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vsubw,    int_hexagon_A2_vsubw>;
914*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <A2_vsubws,   int_hexagon_A2_vsubws>;
915*9880d681SAndroid Build Coastguard Worker
916*9880d681SAndroid Build Coastguard Worker// ALU64 - Vector compare bytes
917*9880d681SAndroid Build Coastguard Workerdef : T_Q_PP_pat <A2_vcmpbeq,  int_hexagon_A2_vcmpbeq>;
918*9880d681SAndroid Build Coastguard Workerdef : T_Q_PP_pat <A4_vcmpbgt,  int_hexagon_A4_vcmpbgt>;
919*9880d681SAndroid Build Coastguard Workerdef : T_Q_PP_pat <A2_vcmpbgtu, int_hexagon_A2_vcmpbgtu>;
920*9880d681SAndroid Build Coastguard Worker
921*9880d681SAndroid Build Coastguard Worker// ALU64 - Vector compare halfwords
922*9880d681SAndroid Build Coastguard Workerdef : T_Q_PP_pat <A2_vcmpheq,  int_hexagon_A2_vcmpheq>;
923*9880d681SAndroid Build Coastguard Workerdef : T_Q_PP_pat <A2_vcmphgt,  int_hexagon_A2_vcmphgt>;
924*9880d681SAndroid Build Coastguard Workerdef : T_Q_PP_pat <A2_vcmphgtu, int_hexagon_A2_vcmphgtu>;
925*9880d681SAndroid Build Coastguard Worker
926*9880d681SAndroid Build Coastguard Worker// ALU64 - Vector compare words
927*9880d681SAndroid Build Coastguard Workerdef : T_Q_PP_pat <A2_vcmpweq,  int_hexagon_A2_vcmpweq>;
928*9880d681SAndroid Build Coastguard Workerdef : T_Q_PP_pat <A2_vcmpwgt,  int_hexagon_A2_vcmpwgt>;
929*9880d681SAndroid Build Coastguard Workerdef : T_Q_PP_pat <A2_vcmpwgtu, int_hexagon_A2_vcmpwgtu>;
930*9880d681SAndroid Build Coastguard Worker
931*9880d681SAndroid Build Coastguard Worker// ALU64 / VB / Vector mux.
932*9880d681SAndroid Build Coastguard Workerdef : T_QPP_pat <C2_vmux,      int_hexagon_C2_vmux>;
933*9880d681SAndroid Build Coastguard Worker
934*9880d681SAndroid Build Coastguard Worker// MPY - Multiply and use full result
935*9880d681SAndroid Build Coastguard Worker// Rdd = mpy[u](Rs, Rt)
936*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_dpmpyss_s0, int_hexagon_M2_dpmpyss_s0>;
937*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_dpmpyuu_s0, int_hexagon_M2_dpmpyuu_s0>;
938*9880d681SAndroid Build Coastguard Worker
939*9880d681SAndroid Build Coastguard Worker// Complex multiply real or imaginary
940*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_cmpyi_s0,   int_hexagon_M2_cmpyi_s0>;
941*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_cmpyr_s0,   int_hexagon_M2_cmpyr_s0>;
942*9880d681SAndroid Build Coastguard Worker
943*9880d681SAndroid Build Coastguard Worker// Complex multiply
944*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_cmpys_s0,   int_hexagon_M2_cmpys_s0>;
945*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_cmpysc_s0,  int_hexagon_M2_cmpysc_s0>;
946*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_cmpys_s1,   int_hexagon_M2_cmpys_s1>;
947*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_cmpysc_s1,  int_hexagon_M2_cmpysc_s1>;
948*9880d681SAndroid Build Coastguard Worker
949*9880d681SAndroid Build Coastguard Worker// Vector multiply halfwords
950*9880d681SAndroid Build Coastguard Worker// Rdd=vmpyh(Rs,Rt)[:<<1]:sat
951*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_vmpy2s_s0,  int_hexagon_M2_vmpy2s_s0>;
952*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_vmpy2s_s1,  int_hexagon_M2_vmpy2s_s1>;
953*9880d681SAndroid Build Coastguard Worker
954*9880d681SAndroid Build Coastguard Worker// Rxx[+-]= mpy[u](Rs,Rt)
955*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_dpmpyss_acc_s0, int_hexagon_M2_dpmpyss_acc_s0>;
956*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_dpmpyss_nac_s0, int_hexagon_M2_dpmpyss_nac_s0>;
957*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_dpmpyuu_acc_s0, int_hexagon_M2_dpmpyuu_acc_s0>;
958*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_dpmpyuu_nac_s0, int_hexagon_M2_dpmpyuu_nac_s0>;
959*9880d681SAndroid Build Coastguard Worker
960*9880d681SAndroid Build Coastguard Worker// Rxx[-+]=cmpy(Rs,Rt)[:<<1]:sat
961*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_cmacs_s0, int_hexagon_M2_cmacs_s0>;
962*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_cnacs_s0, int_hexagon_M2_cnacs_s0>;
963*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_cmacs_s1, int_hexagon_M2_cmacs_s1>;
964*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_cnacs_s1, int_hexagon_M2_cnacs_s1>;
965*9880d681SAndroid Build Coastguard Worker
966*9880d681SAndroid Build Coastguard Worker// Rxx[-+]=cmpy(Rs,Rt*)[:<<1]:sat
967*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_cmacsc_s0, int_hexagon_M2_cmacsc_s0>;
968*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_cnacsc_s0, int_hexagon_M2_cnacsc_s0>;
969*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_cmacsc_s1, int_hexagon_M2_cmacsc_s1>;
970*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_cnacsc_s1, int_hexagon_M2_cnacsc_s1>;
971*9880d681SAndroid Build Coastguard Worker
972*9880d681SAndroid Build Coastguard Worker// Rxx+=cmpy[ir](Rs,Rt)
973*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_cmaci_s0, int_hexagon_M2_cmaci_s0>;
974*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_cmacr_s0, int_hexagon_M2_cmacr_s0>;
975*9880d681SAndroid Build Coastguard Worker
976*9880d681SAndroid Build Coastguard Worker// Rxx+=vmpyh(Rs,Rt)[:<<1][:sat]
977*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_vmac2, int_hexagon_M2_vmac2>;
978*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_vmac2s_s0, int_hexagon_M2_vmac2s_s0>;
979*9880d681SAndroid Build Coastguard Workerdef : T_PRR_pat <M2_vmac2s_s1, int_hexagon_M2_vmac2s_s1>;
980*9880d681SAndroid Build Coastguard Worker
981*9880d681SAndroid Build Coastguard Worker//*******************************************************************
982*9880d681SAndroid Build Coastguard Worker//           CR
983*9880d681SAndroid Build Coastguard Worker//*******************************************************************
984*9880d681SAndroid Build Coastguard Workerdef: T_Q_Q_pat<C2_not,       int_hexagon_C2_not>;
985*9880d681SAndroid Build Coastguard Workerdef: T_Q_Q_pat<C2_all8,      int_hexagon_C2_all8>;
986*9880d681SAndroid Build Coastguard Workerdef: T_Q_Q_pat<C2_any8,      int_hexagon_C2_any8>;
987*9880d681SAndroid Build Coastguard Workerdef: T_Q_Q_pat<C2_pxfer_map, int_hexagon_C2_pxfer_map>;
988*9880d681SAndroid Build Coastguard Worker
989*9880d681SAndroid Build Coastguard Workerdef: T_Q_QQ_pat<C2_and,      int_hexagon_C2_and>;
990*9880d681SAndroid Build Coastguard Workerdef: T_Q_QQ_pat<C2_andn,     int_hexagon_C2_andn>;
991*9880d681SAndroid Build Coastguard Workerdef: T_Q_QQ_pat<C2_or,       int_hexagon_C2_or>;
992*9880d681SAndroid Build Coastguard Workerdef: T_Q_QQ_pat<C2_orn,      int_hexagon_C2_orn>;
993*9880d681SAndroid Build Coastguard Workerdef: T_Q_QQ_pat<C2_xor,      int_hexagon_C2_xor>;
994*9880d681SAndroid Build Coastguard Worker
995*9880d681SAndroid Build Coastguard Worker// Multiply 32x32 and use lower result
996*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <M2_macsip, int_hexagon_M2_macsip>;
997*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <M2_macsin, int_hexagon_M2_macsin>;
998*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_maci,   int_hexagon_M2_maci>;
999*9880d681SAndroid Build Coastguard Worker
1000*9880d681SAndroid Build Coastguard Worker// Subtract and accumulate
1001*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_subacc, int_hexagon_M2_subacc>;
1002*9880d681SAndroid Build Coastguard Worker
1003*9880d681SAndroid Build Coastguard Worker// Add and accumulate
1004*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_acci,   int_hexagon_M2_acci>;
1005*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_nacci,  int_hexagon_M2_nacci>;
1006*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <M2_accii,  int_hexagon_M2_accii>;
1007*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat <M2_naccii, int_hexagon_M2_naccii>;
1008*9880d681SAndroid Build Coastguard Worker
1009*9880d681SAndroid Build Coastguard Worker// XOR and XOR with destination
1010*9880d681SAndroid Build Coastguard Workerdef : T_RRR_pat <M2_xor_xacc, int_hexagon_M2_xor_xacc>;
1011*9880d681SAndroid Build Coastguard Worker
1012*9880d681SAndroid Build Coastguard Worker// Vector dual multiply with round and pack
1013*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_vdmpyrs_s0, int_hexagon_M2_vdmpyrs_s0>;
1014*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <M2_vdmpyrs_s1, int_hexagon_M2_vdmpyrs_s1>;
1015*9880d681SAndroid Build Coastguard Worker
1016*9880d681SAndroid Build Coastguard Worker// Vector multiply halfwords with round and pack
1017*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_vmpy2s_s0pack, int_hexagon_M2_vmpy2s_s0pack>;
1018*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_vmpy2s_s1pack, int_hexagon_M2_vmpy2s_s1pack>;
1019*9880d681SAndroid Build Coastguard Worker
1020*9880d681SAndroid Build Coastguard Worker// Multiply and use lower result
1021*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyi, int_hexagon_M2_mpyi>;
1022*9880d681SAndroid Build Coastguard Workerdef : T_RI_pat <M2_mpysmi, int_hexagon_M2_mpysmi>;
1023*9880d681SAndroid Build Coastguard Worker
1024*9880d681SAndroid Build Coastguard Worker// Assembler mapped from Rd32=mpyui(Rs32,Rt32) to Rd32=mpyi(Rs32,Rt32)
1025*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyi, int_hexagon_M2_mpyui>;
1026*9880d681SAndroid Build Coastguard Worker
1027*9880d681SAndroid Build Coastguard Worker// Multiply and use upper result
1028*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpy_up, int_hexagon_M2_mpy_up>;
1029*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_mpyu_up, int_hexagon_M2_mpyu_up>;
1030*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_hmmpyh_rs1, int_hexagon_M2_hmmpyh_rs1>;
1031*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_hmmpyl_rs1, int_hexagon_M2_hmmpyl_rs1>;
1032*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_dpmpyss_rnd_s0, int_hexagon_M2_dpmpyss_rnd_s0>;
1033*9880d681SAndroid Build Coastguard Worker
1034*9880d681SAndroid Build Coastguard Worker// Complex multiply with round and pack
1035*9880d681SAndroid Build Coastguard Worker// Rxx32+=cmpy(Rs32,[*]Rt32:<<1]:rnd:sat
1036*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_cmpyrs_s0, int_hexagon_M2_cmpyrs_s0>;
1037*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_cmpyrs_s1, int_hexagon_M2_cmpyrs_s1>;
1038*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_cmpyrsc_s0, int_hexagon_M2_cmpyrsc_s0>;
1039*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <M2_cmpyrsc_s1, int_hexagon_M2_cmpyrsc_s1>;
1040*9880d681SAndroid Build Coastguard Worker
1041*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1042*9880d681SAndroid Build Coastguard Worker//           STYPE/ALU
1043*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1044*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <A2_absp, int_hexagon_A2_absp>;
1045*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <A2_negp, int_hexagon_A2_negp>;
1046*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <A2_notp, int_hexagon_A2_notp>;
1047*9880d681SAndroid Build Coastguard Worker
1048*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1049*9880d681SAndroid Build Coastguard Worker//           STYPE/BIT
1050*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1051*9880d681SAndroid Build Coastguard Worker
1052*9880d681SAndroid Build Coastguard Worker// Count leading/trailing
1053*9880d681SAndroid Build Coastguard Workerdef: T_R_pat<S2_cl0,     int_hexagon_S2_cl0>;
1054*9880d681SAndroid Build Coastguard Workerdef: T_P_pat<S2_cl0p,    int_hexagon_S2_cl0p>;
1055*9880d681SAndroid Build Coastguard Workerdef: T_R_pat<S2_cl1,     int_hexagon_S2_cl1>;
1056*9880d681SAndroid Build Coastguard Workerdef: T_P_pat<S2_cl1p,    int_hexagon_S2_cl1p>;
1057*9880d681SAndroid Build Coastguard Workerdef: T_R_pat<S2_clb,     int_hexagon_S2_clb>;
1058*9880d681SAndroid Build Coastguard Workerdef: T_P_pat<S2_clbp,    int_hexagon_S2_clbp>;
1059*9880d681SAndroid Build Coastguard Workerdef: T_R_pat<S2_clbnorm, int_hexagon_S2_clbnorm>;
1060*9880d681SAndroid Build Coastguard Workerdef: T_R_pat<S2_ct0,     int_hexagon_S2_ct0>;
1061*9880d681SAndroid Build Coastguard Workerdef: T_R_pat<S2_ct1,     int_hexagon_S2_ct1>;
1062*9880d681SAndroid Build Coastguard Worker
1063*9880d681SAndroid Build Coastguard Worker// Compare bit mask
1064*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<C2_bitsclr,  int_hexagon_C2_bitsclr>;
1065*9880d681SAndroid Build Coastguard Workerdef: T_RI_pat<C2_bitsclri, int_hexagon_C2_bitsclri>;
1066*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<C2_bitsset,  int_hexagon_C2_bitsset>;
1067*9880d681SAndroid Build Coastguard Worker
1068*9880d681SAndroid Build Coastguard Worker// Vector shuffle
1069*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <S2_shuffeb, int_hexagon_S2_shuffeb>;
1070*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <S2_shuffob, int_hexagon_S2_shuffob>;
1071*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <S2_shuffeh, int_hexagon_S2_shuffeh>;
1072*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <S2_shuffoh, int_hexagon_S2_shuffoh>;
1073*9880d681SAndroid Build Coastguard Worker
1074*9880d681SAndroid Build Coastguard Worker// Vector truncate
1075*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <S2_vtrunewh, int_hexagon_S2_vtrunewh>;
1076*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <S2_vtrunowh, int_hexagon_S2_vtrunowh>;
1077*9880d681SAndroid Build Coastguard Worker
1078*9880d681SAndroid Build Coastguard Worker// Linear feedback-shift Iteration.
1079*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <S2_lfsp, int_hexagon_S2_lfsp>;
1080*9880d681SAndroid Build Coastguard Worker
1081*9880d681SAndroid Build Coastguard Worker// Vector align
1082*9880d681SAndroid Build Coastguard Worker// Need custom lowering
1083*9880d681SAndroid Build Coastguard Workerdef : T_PPQ_pat <S2_valignrb, int_hexagon_S2_valignrb>;
1084*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_valignib, int_hexagon_S2_valignib>;
1085*9880d681SAndroid Build Coastguard Worker
1086*9880d681SAndroid Build Coastguard Worker// Vector splice
1087*9880d681SAndroid Build Coastguard Workerdef : T_PPQ_pat <S2_vsplicerb, int_hexagon_S2_vsplicerb>;
1088*9880d681SAndroid Build Coastguard Workerdef : T_PPI_pat <S2_vspliceib, int_hexagon_S2_vspliceib>;
1089*9880d681SAndroid Build Coastguard Worker
1090*9880d681SAndroid Build Coastguard Worker// Shift by immediate and add
1091*9880d681SAndroid Build Coastguard Workerdef : T_RRI_pat<S2_addasl_rrri, int_hexagon_S2_addasl_rrri>;
1092*9880d681SAndroid Build Coastguard Worker
1093*9880d681SAndroid Build Coastguard Worker// Extract bitfield
1094*9880d681SAndroid Build Coastguard Workerdef : T_PII_pat<S2_extractup,    int_hexagon_S2_extractup>;
1095*9880d681SAndroid Build Coastguard Workerdef : T_RII_pat<S2_extractu,     int_hexagon_S2_extractu>;
1096*9880d681SAndroid Build Coastguard Workerdef : T_RP_pat <S2_extractu_rp,  int_hexagon_S2_extractu_rp>;
1097*9880d681SAndroid Build Coastguard Workerdef : T_PP_pat <S2_extractup_rp, int_hexagon_S2_extractup_rp>;
1098*9880d681SAndroid Build Coastguard Worker
1099*9880d681SAndroid Build Coastguard Worker// Insert bitfield
1100*9880d681SAndroid Build Coastguard Workerdef : Pat <(int_hexagon_S2_insert_rp I32:$src1, I32:$src2, I64:$src3),
1101*9880d681SAndroid Build Coastguard Worker           (S2_insert_rp I32:$src1, I32:$src2, I64:$src3)>;
1102*9880d681SAndroid Build Coastguard Worker
1103*9880d681SAndroid Build Coastguard Workerdef : Pat<(i64 (int_hexagon_S2_insertp_rp I64:$src1, I64:$src2, I64:$src3)),
1104*9880d681SAndroid Build Coastguard Worker          (i64 (S2_insertp_rp I64:$src1, I64:$src2, I64:$src3))>;
1105*9880d681SAndroid Build Coastguard Worker
1106*9880d681SAndroid Build Coastguard Workerdef : Pat<(int_hexagon_S2_insert I32:$src1, I32:$src2,
1107*9880d681SAndroid Build Coastguard Worker                                 u5ImmPred:$src3, u5ImmPred:$src4),
1108*9880d681SAndroid Build Coastguard Worker          (S2_insert I32:$src1, I32:$src2,
1109*9880d681SAndroid Build Coastguard Worker                     u5ImmPred:$src3, u5ImmPred:$src4)>;
1110*9880d681SAndroid Build Coastguard Worker
1111*9880d681SAndroid Build Coastguard Workerdef : Pat<(i64 (int_hexagon_S2_insertp I64:$src1, I64:$src2,
1112*9880d681SAndroid Build Coastguard Worker                                       u6ImmPred:$src3, u6ImmPred:$src4)),
1113*9880d681SAndroid Build Coastguard Worker          (i64 (S2_insertp I64:$src1, I64:$src2,
1114*9880d681SAndroid Build Coastguard Worker                           u6ImmPred:$src3, u6ImmPred:$src4))>;
1115*9880d681SAndroid Build Coastguard Worker
1116*9880d681SAndroid Build Coastguard Worker// Innterleave/deinterleave
1117*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <S2_interleave, int_hexagon_S2_interleave>;
1118*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <S2_deinterleave, int_hexagon_S2_deinterleave>;
1119*9880d681SAndroid Build Coastguard Worker
1120*9880d681SAndroid Build Coastguard Worker// Set/Clear/Toggle Bit
1121*9880d681SAndroid Build Coastguard Workerdef: T_RI_pat<S2_setbit_i,    int_hexagon_S2_setbit_i>;
1122*9880d681SAndroid Build Coastguard Workerdef: T_RI_pat<S2_clrbit_i,    int_hexagon_S2_clrbit_i>;
1123*9880d681SAndroid Build Coastguard Workerdef: T_RI_pat<S2_togglebit_i, int_hexagon_S2_togglebit_i>;
1124*9880d681SAndroid Build Coastguard Worker
1125*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<S2_setbit_r,    int_hexagon_S2_setbit_r>;
1126*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<S2_clrbit_r,    int_hexagon_S2_clrbit_r>;
1127*9880d681SAndroid Build Coastguard Workerdef: T_RR_pat<S2_togglebit_r, int_hexagon_S2_togglebit_r>;
1128*9880d681SAndroid Build Coastguard Worker
1129*9880d681SAndroid Build Coastguard Worker// Test Bit
1130*9880d681SAndroid Build Coastguard Workerdef: T_Q_RI_pat<S2_tstbit_i,  int_hexagon_S2_tstbit_i>;
1131*9880d681SAndroid Build Coastguard Workerdef: T_Q_RR_pat<S2_tstbit_r,  int_hexagon_S2_tstbit_r>;
1132*9880d681SAndroid Build Coastguard Worker
1133*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1134*9880d681SAndroid Build Coastguard Worker//           STYPE/COMPLEX
1135*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1136*9880d681SAndroid Build Coastguard Worker// Vector Complex conjugate
1137*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <A2_vconj, int_hexagon_A2_vconj>;
1138*9880d681SAndroid Build Coastguard Worker
1139*9880d681SAndroid Build Coastguard Worker// Vector Complex rotate
1140*9880d681SAndroid Build Coastguard Workerdef : T_PR_pat <S2_vcrotate, int_hexagon_S2_vcrotate>;
1141*9880d681SAndroid Build Coastguard Worker
1142*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1143*9880d681SAndroid Build Coastguard Worker//           STYPE/PERM
1144*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1145*9880d681SAndroid Build Coastguard Worker
1146*9880d681SAndroid Build Coastguard Worker// Vector saturate without pack
1147*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <S2_vsathb_nopack, int_hexagon_S2_vsathb_nopack>;
1148*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <S2_vsathub_nopack, int_hexagon_S2_vsathub_nopack>;
1149*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <S2_vsatwh_nopack, int_hexagon_S2_vsatwh_nopack>;
1150*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <S2_vsatwuh_nopack, int_hexagon_S2_vsatwuh_nopack>;
1151*9880d681SAndroid Build Coastguard Worker
1152*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1153*9880d681SAndroid Build Coastguard Worker//           STYPE/PRED
1154*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1155*9880d681SAndroid Build Coastguard Worker
1156*9880d681SAndroid Build Coastguard Worker// Predicate transfer
1157*9880d681SAndroid Build Coastguard Workerdef: Pat<(i32 (int_hexagon_C2_tfrpr I32:$Rs)),
1158*9880d681SAndroid Build Coastguard Worker         (i32 (C2_tfrpr (C2_tfrrp I32:$Rs)))>;
1159*9880d681SAndroid Build Coastguard Workerdef: Pat<(i32 (int_hexagon_C2_tfrrp I32:$Rs)),
1160*9880d681SAndroid Build Coastguard Worker         (i32 (C2_tfrpr (C2_tfrrp I32:$Rs)))>;
1161*9880d681SAndroid Build Coastguard Worker
1162*9880d681SAndroid Build Coastguard Worker// Mask generate from predicate
1163*9880d681SAndroid Build Coastguard Workerdef: Pat<(i64 (int_hexagon_C2_mask I32:$Rs)),
1164*9880d681SAndroid Build Coastguard Worker         (i64 (C2_mask (C2_tfrrp I32:$Rs)))>;
1165*9880d681SAndroid Build Coastguard Worker
1166*9880d681SAndroid Build Coastguard Worker// Viterbi pack even and odd predicate bits
1167*9880d681SAndroid Build Coastguard Workerdef: T_QQ_pat<C2_vitpack, int_hexagon_C2_vitpack>;
1168*9880d681SAndroid Build Coastguard Worker
1169*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1170*9880d681SAndroid Build Coastguard Worker//           STYPE/SHIFT
1171*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1172*9880d681SAndroid Build Coastguard Worker
1173*9880d681SAndroid Build Coastguard Workerdef : T_PI_pat <S2_asr_i_p, int_hexagon_S2_asr_i_p>;
1174*9880d681SAndroid Build Coastguard Workerdef : T_PI_pat <S2_lsr_i_p, int_hexagon_S2_lsr_i_p>;
1175*9880d681SAndroid Build Coastguard Workerdef : T_PI_pat <S2_asl_i_p, int_hexagon_S2_asl_i_p>;
1176*9880d681SAndroid Build Coastguard Worker
1177*9880d681SAndroid Build Coastguard Workerdef : T_PR_pat <S2_asr_r_p, int_hexagon_S2_asr_r_p>;
1178*9880d681SAndroid Build Coastguard Workerdef : T_PR_pat <S2_lsr_r_p, int_hexagon_S2_lsr_r_p>;
1179*9880d681SAndroid Build Coastguard Workerdef : T_PR_pat <S2_asl_r_p, int_hexagon_S2_asl_r_p>;
1180*9880d681SAndroid Build Coastguard Workerdef : T_PR_pat <S2_lsl_r_p, int_hexagon_S2_lsl_r_p>;
1181*9880d681SAndroid Build Coastguard Worker
1182*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <S2_asr_r_r, int_hexagon_S2_asr_r_r>;
1183*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <S2_lsr_r_r, int_hexagon_S2_lsr_r_r>;
1184*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <S2_asl_r_r, int_hexagon_S2_asl_r_r>;
1185*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <S2_lsl_r_r, int_hexagon_S2_lsl_r_r>;
1186*9880d681SAndroid Build Coastguard Worker
1187*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <S2_asr_r_r_sat, int_hexagon_S2_asr_r_r_sat>;
1188*9880d681SAndroid Build Coastguard Workerdef : T_RR_pat <S2_asl_r_r_sat, int_hexagon_S2_asl_r_r_sat>;
1189*9880d681SAndroid Build Coastguard Worker
1190*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <S2_vsxtbh,   int_hexagon_S2_vsxtbh>;
1191*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <S2_vzxtbh,   int_hexagon_S2_vzxtbh>;
1192*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <S2_vsxthw,   int_hexagon_S2_vsxthw>;
1193*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <S2_vzxthw,   int_hexagon_S2_vzxthw>;
1194*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <S2_vsplatrh, int_hexagon_S2_vsplatrh>;
1195*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <A2_sxtw,     int_hexagon_A2_sxtw>;
1196*9880d681SAndroid Build Coastguard Worker
1197*9880d681SAndroid Build Coastguard Worker// Vector saturate and pack
1198*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <S2_svsathb,  int_hexagon_S2_svsathb>;
1199*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <S2_svsathub, int_hexagon_S2_svsathub>;
1200*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <S2_vsathub,  int_hexagon_S2_vsathub>;
1201*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <S2_vsatwh,   int_hexagon_S2_vsatwh>;
1202*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <S2_vsatwuh,  int_hexagon_S2_vsatwuh>;
1203*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <S2_vsathb,   int_hexagon_S2_vsathb>;
1204*9880d681SAndroid Build Coastguard Worker
1205*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <S2_vtrunohb,    int_hexagon_S2_vtrunohb>;
1206*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <S2_vtrunehb,    int_hexagon_S2_vtrunehb>;
1207*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <S2_vrndpackwh,  int_hexagon_S2_vrndpackwh>;
1208*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <S2_vrndpackwhs, int_hexagon_S2_vrndpackwhs>;
1209*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <S2_brev,        int_hexagon_S2_brev>;
1210*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <S2_vsplatrb,    int_hexagon_S2_vsplatrb>;
1211*9880d681SAndroid Build Coastguard Worker
1212*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <A2_abs,    int_hexagon_A2_abs>;
1213*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <A2_abssat, int_hexagon_A2_abssat>;
1214*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <A2_negsat, int_hexagon_A2_negsat>;
1215*9880d681SAndroid Build Coastguard Worker
1216*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <A2_swiz,   int_hexagon_A2_swiz>;
1217*9880d681SAndroid Build Coastguard Worker
1218*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <A2_sat,    int_hexagon_A2_sat>;
1219*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <A2_sath,   int_hexagon_A2_sath>;
1220*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <A2_satuh,  int_hexagon_A2_satuh>;
1221*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <A2_satub,  int_hexagon_A2_satub>;
1222*9880d681SAndroid Build Coastguard Workerdef : T_R_pat <A2_satb,   int_hexagon_A2_satb>;
1223*9880d681SAndroid Build Coastguard Worker
1224*9880d681SAndroid Build Coastguard Worker// Vector arithmetic shift right by immediate with truncate and pack.
1225*9880d681SAndroid Build Coastguard Workerdef : T_PI_pat<S2_asr_i_svw_trun, int_hexagon_S2_asr_i_svw_trun>;
1226*9880d681SAndroid Build Coastguard Worker
1227*9880d681SAndroid Build Coastguard Workerdef : T_RI_pat <S2_asr_i_r,     int_hexagon_S2_asr_i_r>;
1228*9880d681SAndroid Build Coastguard Workerdef : T_RI_pat <S2_lsr_i_r,     int_hexagon_S2_lsr_i_r>;
1229*9880d681SAndroid Build Coastguard Workerdef : T_RI_pat <S2_asl_i_r,     int_hexagon_S2_asl_i_r>;
1230*9880d681SAndroid Build Coastguard Workerdef : T_RI_pat <S2_asr_i_r_rnd, int_hexagon_S2_asr_i_r_rnd>;
1231*9880d681SAndroid Build Coastguard Workerdef : T_RI_pat <S2_asr_i_r_rnd_goodsyntax,
1232*9880d681SAndroid Build Coastguard Worker                int_hexagon_S2_asr_i_r_rnd_goodsyntax>;
1233*9880d681SAndroid Build Coastguard Worker
1234*9880d681SAndroid Build Coastguard Worker// Shift left by immediate with saturation.
1235*9880d681SAndroid Build Coastguard Workerdef : T_RI_pat <S2_asl_i_r_sat, int_hexagon_S2_asl_i_r_sat>;
1236*9880d681SAndroid Build Coastguard Worker
1237*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
1238*9880d681SAndroid Build Coastguard Worker// Template 'def pat' to map tableidx[bhwd] intrinsics to :raw instructions.
1239*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
1240*9880d681SAndroid Build Coastguard Workerclass S2op_tableidx_pat <Intrinsic IntID, InstHexagon OutputInst,
1241*9880d681SAndroid Build Coastguard Worker                         SDNodeXForm XformImm>
1242*9880d681SAndroid Build Coastguard Worker  : Pat <(IntID I32:$src1, I32:$src2, u4ImmPred:$src3, u5ImmPred:$src4),
1243*9880d681SAndroid Build Coastguard Worker         (OutputInst I32:$src1, I32:$src2, u4ImmPred:$src3,
1244*9880d681SAndroid Build Coastguard Worker                     (XformImm u5ImmPred:$src4))>;
1245*9880d681SAndroid Build Coastguard Worker
1246*9880d681SAndroid Build Coastguard Worker
1247*9880d681SAndroid Build Coastguard Worker// Table Index : Extract and insert bits.
1248*9880d681SAndroid Build Coastguard Worker// Map to the real hardware instructions after subtracting appropriate
1249*9880d681SAndroid Build Coastguard Worker// values from the 4th input operand. Please note that subtraction is not
1250*9880d681SAndroid Build Coastguard Worker// needed for int_hexagon_S2_tableidxb_goodsyntax.
1251*9880d681SAndroid Build Coastguard Worker
1252*9880d681SAndroid Build Coastguard Workerdef : Pat <(int_hexagon_S2_tableidxb_goodsyntax I32:$src1, I32:$src2,
1253*9880d681SAndroid Build Coastguard Worker                                              u4ImmPred:$src3, u5ImmPred:$src4),
1254*9880d681SAndroid Build Coastguard Worker           (S2_tableidxb I32:$src1, I32:$src2,
1255*9880d681SAndroid Build Coastguard Worker                         u4ImmPred:$src3, u5ImmPred:$src4)>;
1256*9880d681SAndroid Build Coastguard Worker
1257*9880d681SAndroid Build Coastguard Workerdef : S2op_tableidx_pat <int_hexagon_S2_tableidxh_goodsyntax, S2_tableidxh,
1258*9880d681SAndroid Build Coastguard Worker                         DEC_CONST_SIGNED>;
1259*9880d681SAndroid Build Coastguard Workerdef : S2op_tableidx_pat <int_hexagon_S2_tableidxw_goodsyntax, S2_tableidxw,
1260*9880d681SAndroid Build Coastguard Worker                         DEC2_CONST_SIGNED>;
1261*9880d681SAndroid Build Coastguard Workerdef : S2op_tableidx_pat <int_hexagon_S2_tableidxd_goodsyntax, S2_tableidxd,
1262*9880d681SAndroid Build Coastguard Worker                         DEC3_CONST_SIGNED>;
1263*9880d681SAndroid Build Coastguard Worker
1264*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1265*9880d681SAndroid Build Coastguard Worker//           STYPE/VH
1266*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1267*9880d681SAndroid Build Coastguard Worker
1268*9880d681SAndroid Build Coastguard Worker// Vector absolute value halfwords with and without saturation
1269*9880d681SAndroid Build Coastguard Worker// Rdd64=vabsh(Rss64)[:sat]
1270*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <A2_vabsh, int_hexagon_A2_vabsh>;
1271*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <A2_vabshsat, int_hexagon_A2_vabshsat>;
1272*9880d681SAndroid Build Coastguard Worker
1273*9880d681SAndroid Build Coastguard Worker// Vector shift halfwords by immediate
1274*9880d681SAndroid Build Coastguard Worker// Rdd64=[vaslh/vasrh/vlsrh](Rss64,u4)
1275*9880d681SAndroid Build Coastguard Workerdef : T_PI_pat <S2_asr_i_vh, int_hexagon_S2_asr_i_vh>;
1276*9880d681SAndroid Build Coastguard Workerdef : T_PI_pat <S2_lsr_i_vh, int_hexagon_S2_lsr_i_vh>;
1277*9880d681SAndroid Build Coastguard Workerdef : T_PI_pat <S2_asl_i_vh, int_hexagon_S2_asl_i_vh>;
1278*9880d681SAndroid Build Coastguard Worker
1279*9880d681SAndroid Build Coastguard Worker// Vector shift halfwords by register
1280*9880d681SAndroid Build Coastguard Worker// Rdd64=[vaslw/vasrw/vlslw/vlsrw](Rss64,Rt32)
1281*9880d681SAndroid Build Coastguard Workerdef : T_PR_pat <S2_asr_r_vh, int_hexagon_S2_asr_r_vh>;
1282*9880d681SAndroid Build Coastguard Workerdef : T_PR_pat <S2_lsr_r_vh, int_hexagon_S2_lsr_r_vh>;
1283*9880d681SAndroid Build Coastguard Workerdef : T_PR_pat <S2_asl_r_vh, int_hexagon_S2_asl_r_vh>;
1284*9880d681SAndroid Build Coastguard Workerdef : T_PR_pat <S2_lsl_r_vh, int_hexagon_S2_lsl_r_vh>;
1285*9880d681SAndroid Build Coastguard Worker
1286*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1287*9880d681SAndroid Build Coastguard Worker//           STYPE/VW
1288*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1289*9880d681SAndroid Build Coastguard Worker
1290*9880d681SAndroid Build Coastguard Worker// Vector absolute value words with and without saturation
1291*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <A2_vabsw, int_hexagon_A2_vabsw>;
1292*9880d681SAndroid Build Coastguard Workerdef : T_P_pat <A2_vabswsat, int_hexagon_A2_vabswsat>;
1293*9880d681SAndroid Build Coastguard Worker
1294*9880d681SAndroid Build Coastguard Worker// Vector shift words by immediate.
1295*9880d681SAndroid Build Coastguard Worker// Rdd64=[vasrw/vlsrw|vaslw](Rss64,u5)
1296*9880d681SAndroid Build Coastguard Workerdef : T_PI_pat <S2_asr_i_vw, int_hexagon_S2_asr_i_vw>;
1297*9880d681SAndroid Build Coastguard Workerdef : T_PI_pat <S2_lsr_i_vw, int_hexagon_S2_lsr_i_vw>;
1298*9880d681SAndroid Build Coastguard Workerdef : T_PI_pat <S2_asl_i_vw, int_hexagon_S2_asl_i_vw>;
1299*9880d681SAndroid Build Coastguard Worker
1300*9880d681SAndroid Build Coastguard Worker// Vector shift words by register.
1301*9880d681SAndroid Build Coastguard Worker// Rdd64=[vasrw/vlsrw|vaslw|vlslw](Rss64,Rt32)
1302*9880d681SAndroid Build Coastguard Workerdef : T_PR_pat <S2_asr_r_vw, int_hexagon_S2_asr_r_vw>;
1303*9880d681SAndroid Build Coastguard Workerdef : T_PR_pat <S2_lsr_r_vw, int_hexagon_S2_lsr_r_vw>;
1304*9880d681SAndroid Build Coastguard Workerdef : T_PR_pat <S2_asl_r_vw, int_hexagon_S2_asl_r_vw>;
1305*9880d681SAndroid Build Coastguard Workerdef : T_PR_pat <S2_lsl_r_vw, int_hexagon_S2_lsl_r_vw>;
1306*9880d681SAndroid Build Coastguard Worker
1307*9880d681SAndroid Build Coastguard Worker// Vector shift words with truncate and pack
1308*9880d681SAndroid Build Coastguard Workerdef : T_PR_pat <S2_asr_r_svw_trun, int_hexagon_S2_asr_r_svw_trun>;
1309*9880d681SAndroid Build Coastguard Worker
1310*9880d681SAndroid Build Coastguard Worker// Load/store locked.
1311*9880d681SAndroid Build Coastguard Workerdef : T_R_pat<L2_loadw_locked, int_hexagon_L2_loadw_locked>;
1312*9880d681SAndroid Build Coastguard Workerdef : T_R_pat<L4_loadd_locked, int_hexagon_L4_loadd_locked>;
1313*9880d681SAndroid Build Coastguard Worker
1314*9880d681SAndroid Build Coastguard Workerdef : Pat<(int_hexagon_S2_storew_locked I32:$Rs, I32:$Rt),
1315*9880d681SAndroid Build Coastguard Worker          (C2_tfrpr (S2_storew_locked I32:$Rs, I32:$Rt))>;
1316*9880d681SAndroid Build Coastguard Workerdef : Pat<(int_hexagon_S4_stored_locked I32:$Rs, I64:$Rt),
1317*9880d681SAndroid Build Coastguard Worker          (C2_tfrpr (S4_stored_locked I32:$Rs, I64:$Rt))>;
1318*9880d681SAndroid Build Coastguard Worker
1319*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1320*9880d681SAndroid Build Coastguard Worker//           ST
1321*9880d681SAndroid Build Coastguard Worker//*******************************************************************
1322*9880d681SAndroid Build Coastguard Worker
1323*9880d681SAndroid Build Coastguard Workerclass T_stb_pat <InstHexagon MI, Intrinsic IntID, PatLeaf Val>
1324*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID I32:$Rs, Val:$Rt, I32:$Ru),
1325*9880d681SAndroid Build Coastguard Worker        (MI I32:$Rs, I32:$Ru, Val:$Rt)>;
1326*9880d681SAndroid Build Coastguard Worker
1327*9880d681SAndroid Build Coastguard Workerdef : T_stb_pat <S2_storerh_pbr, int_hexagon_brev_sth,   I32>;
1328*9880d681SAndroid Build Coastguard Workerdef : T_stb_pat <S2_storerb_pbr, int_hexagon_brev_stb,   I32>;
1329*9880d681SAndroid Build Coastguard Workerdef : T_stb_pat <S2_storeri_pbr, int_hexagon_brev_stw,   I32>;
1330*9880d681SAndroid Build Coastguard Workerdef : T_stb_pat <S2_storerf_pbr, int_hexagon_brev_sthhi, I32>;
1331*9880d681SAndroid Build Coastguard Workerdef : T_stb_pat <S2_storerd_pbr, int_hexagon_brev_std,   I64>;
1332*9880d681SAndroid Build Coastguard Worker
1333*9880d681SAndroid Build Coastguard Workerclass T_stc_pat <InstHexagon MI, Intrinsic IntID, PatLeaf Imm, PatLeaf Val>
1334*9880d681SAndroid Build Coastguard Worker  : Pat<(IntID I32:$Rs, Val:$Rt, I32:$Ru, Imm:$s),
1335*9880d681SAndroid Build Coastguard Worker        (MI I32:$Rs, Imm:$s, I32:$Ru, Val:$Rt)>;
1336*9880d681SAndroid Build Coastguard Worker
1337*9880d681SAndroid Build Coastguard Workerdef: T_stc_pat<S2_storerb_pci, int_hexagon_circ_stb,   s4_0ImmPred, I32>;
1338*9880d681SAndroid Build Coastguard Workerdef: T_stc_pat<S2_storerh_pci, int_hexagon_circ_sth,   s4_1ImmPred, I32>;
1339*9880d681SAndroid Build Coastguard Workerdef: T_stc_pat<S2_storeri_pci, int_hexagon_circ_stw,   s4_2ImmPred, I32>;
1340*9880d681SAndroid Build Coastguard Workerdef: T_stc_pat<S2_storerd_pci, int_hexagon_circ_std,   s4_3ImmPred, I64>;
1341*9880d681SAndroid Build Coastguard Workerdef: T_stc_pat<S2_storerf_pci, int_hexagon_circ_sthhi, s4_1ImmPred, I32>;
1342*9880d681SAndroid Build Coastguard Worker
1343*9880d681SAndroid Build Coastguard Workerinclude "HexagonIntrinsicsV3.td"
1344*9880d681SAndroid Build Coastguard Workerinclude "HexagonIntrinsicsV4.td"
1345*9880d681SAndroid Build Coastguard Workerinclude "HexagonIntrinsicsV5.td"
1346*9880d681SAndroid Build Coastguard Workerinclude "HexagonIntrinsicsV60.td"
1347