xref: /freebsd/contrib/llvm-project/llvm/lib/Target/PowerPC/P10InstrResources.td (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1349cc55cSDimitry Andric//===--- P10InstrResources.td - P10 Scheduling Definitions -*- tablegen -*-===//
2349cc55cSDimitry Andric//
3349cc55cSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4349cc55cSDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
5349cc55cSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6349cc55cSDimitry Andric//
7349cc55cSDimitry Andric//===----------------------------------------------------------------------===//
8349cc55cSDimitry Andric// Automatically generated file, do not edit!
9349cc55cSDimitry Andric//
1006c3fb27SDimitry Andric// This file defines instruction data for SchedModel of the POWER10 processor.
11349cc55cSDimitry Andric//
12349cc55cSDimitry Andric//===----------------------------------------------------------------------===//
13349cc55cSDimitry Andric// 22 Cycles Binary Floating Point operations, 2 input operands
14349cc55cSDimitry Andricdef : InstRW<[P10W_BF_22C, P10W_DISP_ANY, P10BF_Read, P10BF_Read],
15349cc55cSDimitry Andric      (instrs
16349cc55cSDimitry Andric    FDIVS,
17349cc55cSDimitry Andric    XSDIVSP
18349cc55cSDimitry Andric)>;
19349cc55cSDimitry Andric
20349cc55cSDimitry Andric// 2-way crack instructions
21349cc55cSDimitry Andric// 22 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 2 input operands
22349cc55cSDimitry Andricdef : InstRW<[P10W_BF_22C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
23349cc55cSDimitry Andric      (instrs
24349cc55cSDimitry Andric    FDIVS_rec
25349cc55cSDimitry Andric)>;
26349cc55cSDimitry Andric
27349cc55cSDimitry Andric// 24 Cycles Binary Floating Point operations, 2 input operands
28349cc55cSDimitry Andricdef : InstRW<[P10W_BF_24C, P10W_DISP_ANY, P10BF_Read, P10BF_Read],
29349cc55cSDimitry Andric      (instrs
30349cc55cSDimitry Andric    XVDIVSP
31349cc55cSDimitry Andric)>;
32349cc55cSDimitry Andric
33349cc55cSDimitry Andric// 26 Cycles Binary Floating Point operations, 1 input operands
34349cc55cSDimitry Andricdef : InstRW<[P10W_BF_26C, P10W_DISP_ANY, P10BF_Read],
35349cc55cSDimitry Andric      (instrs
36349cc55cSDimitry Andric    FSQRTS,
37349cc55cSDimitry Andric    XSSQRTSP
38349cc55cSDimitry Andric)>;
39349cc55cSDimitry Andric
40349cc55cSDimitry Andric// 2-way crack instructions
41349cc55cSDimitry Andric// 26 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 1 input operands
42349cc55cSDimitry Andricdef : InstRW<[P10W_BF_26C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
43349cc55cSDimitry Andric      (instrs
44349cc55cSDimitry Andric    FSQRTS_rec
45349cc55cSDimitry Andric)>;
46349cc55cSDimitry Andric
47349cc55cSDimitry Andric// 27 Cycles Binary Floating Point operations, 1 input operands
48349cc55cSDimitry Andricdef : InstRW<[P10W_BF_27C, P10W_DISP_ANY, P10BF_Read],
49349cc55cSDimitry Andric      (instrs
50349cc55cSDimitry Andric    XVSQRTSP
51349cc55cSDimitry Andric)>;
52349cc55cSDimitry Andric
53349cc55cSDimitry Andric// 27 Cycles Binary Floating Point operations, 2 input operands
54349cc55cSDimitry Andricdef : InstRW<[P10W_BF_27C, P10W_DISP_ANY, P10BF_Read, P10BF_Read],
55349cc55cSDimitry Andric      (instrs
56349cc55cSDimitry Andric    FDIV,
57349cc55cSDimitry Andric    XSDIVDP,
58349cc55cSDimitry Andric    XVDIVDP
59349cc55cSDimitry Andric)>;
60349cc55cSDimitry Andric
61349cc55cSDimitry Andric// 2-way crack instructions
62349cc55cSDimitry Andric// 27 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 2 input operands
63349cc55cSDimitry Andricdef : InstRW<[P10W_BF_27C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
64349cc55cSDimitry Andric      (instrs
65349cc55cSDimitry Andric    FDIV_rec
66349cc55cSDimitry Andric)>;
67349cc55cSDimitry Andric
68349cc55cSDimitry Andric// 36 Cycles Binary Floating Point operations, 1 input operands
69349cc55cSDimitry Andricdef : InstRW<[P10W_BF_36C, P10W_DISP_ANY, P10BF_Read],
70349cc55cSDimitry Andric      (instrs
71349cc55cSDimitry Andric    FSQRT,
72349cc55cSDimitry Andric    XSSQRTDP,
73349cc55cSDimitry Andric    XVSQRTDP
74349cc55cSDimitry Andric)>;
75349cc55cSDimitry Andric
76349cc55cSDimitry Andric// 2-way crack instructions
77349cc55cSDimitry Andric// 36 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 1 input operands
78349cc55cSDimitry Andricdef : InstRW<[P10W_BF_36C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
79349cc55cSDimitry Andric      (instrs
80349cc55cSDimitry Andric    FSQRT_rec
81349cc55cSDimitry Andric)>;
82349cc55cSDimitry Andric
83349cc55cSDimitry Andric// 7 Cycles Binary Floating Point operations, 1 input operands
84349cc55cSDimitry Andricdef : InstRW<[P10W_BF_7C, P10W_DISP_ANY, P10BF_Read],
85349cc55cSDimitry Andric      (instrs
86349cc55cSDimitry Andric    FCFID,
87349cc55cSDimitry Andric    FCFIDS,
88349cc55cSDimitry Andric    FCFIDU,
89349cc55cSDimitry Andric    FCFIDUS,
90349cc55cSDimitry Andric    FCTID,
91349cc55cSDimitry Andric    FCTIDU,
92349cc55cSDimitry Andric    FCTIDUZ,
93349cc55cSDimitry Andric    FCTIDZ,
94349cc55cSDimitry Andric    FCTIW,
95349cc55cSDimitry Andric    FCTIWU,
96349cc55cSDimitry Andric    FCTIWUZ,
97349cc55cSDimitry Andric    FCTIWZ,
98349cc55cSDimitry Andric    FRE,
99349cc55cSDimitry Andric    FRES,
100349cc55cSDimitry Andric    FRIMD, FRIMS,
101349cc55cSDimitry Andric    FRIND, FRINS,
102349cc55cSDimitry Andric    FRIPD, FRIPS,
103349cc55cSDimitry Andric    FRIZD, FRIZS,
104349cc55cSDimitry Andric    FRSP,
105349cc55cSDimitry Andric    FRSQRTE,
106349cc55cSDimitry Andric    FRSQRTES,
107349cc55cSDimitry Andric    VCFSX, VCFSX_0,
108349cc55cSDimitry Andric    VCFUX, VCFUX_0,
109349cc55cSDimitry Andric    VCTSXS, VCTSXS_0,
110349cc55cSDimitry Andric    VCTUXS, VCTUXS_0,
111349cc55cSDimitry Andric    VLOGEFP,
112349cc55cSDimitry Andric    VREFP,
113349cc55cSDimitry Andric    VRFIM,
114349cc55cSDimitry Andric    VRFIN,
115349cc55cSDimitry Andric    VRFIP,
116349cc55cSDimitry Andric    VRFIZ,
117349cc55cSDimitry Andric    VRSQRTEFP,
118349cc55cSDimitry Andric    XSCVDPHP,
119349cc55cSDimitry Andric    XSCVDPSP,
120349cc55cSDimitry Andric    XSCVDPSPN,
121349cc55cSDimitry Andric    XSCVDPSXDS, XSCVDPSXDSs,
122349cc55cSDimitry Andric    XSCVDPSXWS, XSCVDPSXWSs,
123349cc55cSDimitry Andric    XSCVDPUXDS, XSCVDPUXDSs,
124349cc55cSDimitry Andric    XSCVDPUXWS, XSCVDPUXWSs,
125349cc55cSDimitry Andric    XSCVSPDP,
126349cc55cSDimitry Andric    XSCVSXDDP,
127349cc55cSDimitry Andric    XSCVSXDSP,
128349cc55cSDimitry Andric    XSCVUXDDP,
129349cc55cSDimitry Andric    XSCVUXDSP,
130349cc55cSDimitry Andric    XSRDPI,
131349cc55cSDimitry Andric    XSRDPIC,
132349cc55cSDimitry Andric    XSRDPIM,
133349cc55cSDimitry Andric    XSRDPIP,
134349cc55cSDimitry Andric    XSRDPIZ,
135349cc55cSDimitry Andric    XSREDP,
136349cc55cSDimitry Andric    XSRESP,
137349cc55cSDimitry Andric    XSRSP,
138349cc55cSDimitry Andric    XSRSQRTEDP,
139349cc55cSDimitry Andric    XSRSQRTESP,
140349cc55cSDimitry Andric    XVCVDPSP,
141349cc55cSDimitry Andric    XVCVDPSXDS,
142349cc55cSDimitry Andric    XVCVDPSXWS,
143349cc55cSDimitry Andric    XVCVDPUXDS,
144349cc55cSDimitry Andric    XVCVDPUXWS,
145349cc55cSDimitry Andric    XVCVSPBF16,
146349cc55cSDimitry Andric    XVCVSPDP,
147349cc55cSDimitry Andric    XVCVSPHP,
148349cc55cSDimitry Andric    XVCVSPSXDS,
149349cc55cSDimitry Andric    XVCVSPSXWS,
150349cc55cSDimitry Andric    XVCVSPUXDS,
151349cc55cSDimitry Andric    XVCVSPUXWS,
152349cc55cSDimitry Andric    XVCVSXDDP,
153349cc55cSDimitry Andric    XVCVSXDSP,
154349cc55cSDimitry Andric    XVCVSXWDP,
155349cc55cSDimitry Andric    XVCVSXWSP,
156349cc55cSDimitry Andric    XVCVUXDDP,
157349cc55cSDimitry Andric    XVCVUXDSP,
158349cc55cSDimitry Andric    XVCVUXWDP,
159349cc55cSDimitry Andric    XVCVUXWSP,
160349cc55cSDimitry Andric    XVRDPI,
161349cc55cSDimitry Andric    XVRDPIC,
162349cc55cSDimitry Andric    XVRDPIM,
163349cc55cSDimitry Andric    XVRDPIP,
164349cc55cSDimitry Andric    XVRDPIZ,
165349cc55cSDimitry Andric    XVREDP,
166349cc55cSDimitry Andric    XVRESP,
167349cc55cSDimitry Andric    XVRSPI,
168349cc55cSDimitry Andric    XVRSPIC,
169349cc55cSDimitry Andric    XVRSPIM,
170349cc55cSDimitry Andric    XVRSPIP,
171349cc55cSDimitry Andric    XVRSPIZ,
172349cc55cSDimitry Andric    XVRSQRTEDP,
173349cc55cSDimitry Andric    XVRSQRTESP
174349cc55cSDimitry Andric)>;
175349cc55cSDimitry Andric
176349cc55cSDimitry Andric// 7 Cycles Binary Floating Point operations, 2 input operands
177349cc55cSDimitry Andricdef : InstRW<[P10W_BF_7C, P10W_DISP_ANY, P10BF_Read, P10BF_Read],
178349cc55cSDimitry Andric      (instrs
179349cc55cSDimitry Andric    FADD,
180349cc55cSDimitry Andric    FADDS,
181349cc55cSDimitry Andric    FMUL,
182349cc55cSDimitry Andric    FMULS,
183349cc55cSDimitry Andric    FSUB,
184349cc55cSDimitry Andric    FSUBS,
185349cc55cSDimitry Andric    VADDFP,
186349cc55cSDimitry Andric    VSUBFP,
187349cc55cSDimitry Andric    XSADDDP,
188349cc55cSDimitry Andric    XSADDSP,
189349cc55cSDimitry Andric    XSMULDP,
190349cc55cSDimitry Andric    XSMULSP,
191349cc55cSDimitry Andric    XSSUBDP,
192349cc55cSDimitry Andric    XSSUBSP,
193349cc55cSDimitry Andric    XVADDDP,
194349cc55cSDimitry Andric    XVADDSP,
195349cc55cSDimitry Andric    XVMULDP,
196349cc55cSDimitry Andric    XVMULSP,
197349cc55cSDimitry Andric    XVSUBDP,
198349cc55cSDimitry Andric    XVSUBSP
199349cc55cSDimitry Andric)>;
200349cc55cSDimitry Andric
201349cc55cSDimitry Andric// 7 Cycles Binary Floating Point operations, 3 input operands
202349cc55cSDimitry Andricdef : InstRW<[P10W_BF_7C, P10W_DISP_ANY, P10BF_Read, P10BF_Read, P10BF_Read],
203349cc55cSDimitry Andric      (instrs
204349cc55cSDimitry Andric    FMADD,
205349cc55cSDimitry Andric    FMADDS,
206349cc55cSDimitry Andric    FMSUB,
207349cc55cSDimitry Andric    FMSUBS,
208349cc55cSDimitry Andric    FNMADD,
209349cc55cSDimitry Andric    FNMADDS,
210349cc55cSDimitry Andric    FNMSUB,
211349cc55cSDimitry Andric    FNMSUBS,
212349cc55cSDimitry Andric    FSELD, FSELS,
213349cc55cSDimitry Andric    VMADDFP,
214349cc55cSDimitry Andric    VNMSUBFP,
215349cc55cSDimitry Andric    XSMADDADP,
216349cc55cSDimitry Andric    XSMADDASP,
217349cc55cSDimitry Andric    XSMADDMDP,
218349cc55cSDimitry Andric    XSMADDMSP,
219349cc55cSDimitry Andric    XSMSUBADP,
220349cc55cSDimitry Andric    XSMSUBASP,
221349cc55cSDimitry Andric    XSMSUBMDP,
222349cc55cSDimitry Andric    XSMSUBMSP,
223349cc55cSDimitry Andric    XSNMADDADP,
224349cc55cSDimitry Andric    XSNMADDASP,
225349cc55cSDimitry Andric    XSNMADDMDP,
226349cc55cSDimitry Andric    XSNMADDMSP,
227349cc55cSDimitry Andric    XSNMSUBADP,
228349cc55cSDimitry Andric    XSNMSUBASP,
229349cc55cSDimitry Andric    XSNMSUBMDP,
230349cc55cSDimitry Andric    XSNMSUBMSP,
231349cc55cSDimitry Andric    XVMADDADP,
232349cc55cSDimitry Andric    XVMADDASP,
233349cc55cSDimitry Andric    XVMADDMDP,
234349cc55cSDimitry Andric    XVMADDMSP,
235349cc55cSDimitry Andric    XVMSUBADP,
236349cc55cSDimitry Andric    XVMSUBASP,
237349cc55cSDimitry Andric    XVMSUBMDP,
238349cc55cSDimitry Andric    XVMSUBMSP,
239349cc55cSDimitry Andric    XVNMADDADP,
240349cc55cSDimitry Andric    XVNMADDASP,
241349cc55cSDimitry Andric    XVNMADDMDP,
242349cc55cSDimitry Andric    XVNMADDMSP,
243349cc55cSDimitry Andric    XVNMSUBADP,
244349cc55cSDimitry Andric    XVNMSUBASP,
245349cc55cSDimitry Andric    XVNMSUBMDP,
246349cc55cSDimitry Andric    XVNMSUBMSP
247349cc55cSDimitry Andric)>;
248349cc55cSDimitry Andric
249349cc55cSDimitry Andric// 2-way crack instructions
250349cc55cSDimitry Andric// 7 Cycles Binary Floating Point operations, and 7 Cycles Binary Floating Point operations, 1 input operands
251349cc55cSDimitry Andricdef : InstRW<[P10W_BF_7C, P10W_DISP_EVEN, P10W_BF_7C, P10W_DISP_ANY, P10BF_Read],
252349cc55cSDimitry Andric      (instrs
253349cc55cSDimitry Andric    VEXPTEFP
254349cc55cSDimitry Andric)>;
255349cc55cSDimitry Andric
256349cc55cSDimitry Andric// 2-way crack instructions
257349cc55cSDimitry Andric// 7 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 2 input operands
258349cc55cSDimitry Andricdef : InstRW<[P10W_BF_7C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
259349cc55cSDimitry Andric      (instrs
260349cc55cSDimitry Andric    FADD_rec,
261349cc55cSDimitry Andric    FADDS_rec,
262349cc55cSDimitry Andric    FMUL_rec,
263349cc55cSDimitry Andric    FMULS_rec,
264349cc55cSDimitry Andric    FSUB_rec,
265349cc55cSDimitry Andric    FSUBS_rec
266349cc55cSDimitry Andric)>;
267349cc55cSDimitry Andric
268349cc55cSDimitry Andric// 2-way crack instructions
269349cc55cSDimitry Andric// 7 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 1 input operands
270349cc55cSDimitry Andricdef : InstRW<[P10W_BF_7C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
271349cc55cSDimitry Andric      (instrs
272349cc55cSDimitry Andric    FCFID_rec,
273349cc55cSDimitry Andric    FCFIDS_rec,
274349cc55cSDimitry Andric    FCFIDU_rec,
275349cc55cSDimitry Andric    FCFIDUS_rec,
276349cc55cSDimitry Andric    FCTID_rec,
277349cc55cSDimitry Andric    FCTIDU_rec,
278349cc55cSDimitry Andric    FCTIDUZ_rec,
279349cc55cSDimitry Andric    FCTIDZ_rec,
280349cc55cSDimitry Andric    FCTIW_rec,
281349cc55cSDimitry Andric    FCTIWU_rec,
282349cc55cSDimitry Andric    FCTIWUZ_rec,
283349cc55cSDimitry Andric    FCTIWZ_rec,
284349cc55cSDimitry Andric    FRE_rec,
285349cc55cSDimitry Andric    FRES_rec,
286349cc55cSDimitry Andric    FRIMD_rec, FRIMS_rec,
287349cc55cSDimitry Andric    FRIND_rec, FRINS_rec,
288349cc55cSDimitry Andric    FRIPD_rec, FRIPS_rec,
289349cc55cSDimitry Andric    FRIZD_rec, FRIZS_rec,
290349cc55cSDimitry Andric    FRSP_rec,
291349cc55cSDimitry Andric    FRSQRTE_rec,
292349cc55cSDimitry Andric    FRSQRTES_rec
293349cc55cSDimitry Andric)>;
294349cc55cSDimitry Andric
295349cc55cSDimitry Andric// 2-way crack instructions
296349cc55cSDimitry Andric// 7 Cycles Binary Floating Point operations, and 3 Cycles ALU operations, 3 input operands
297349cc55cSDimitry Andricdef : InstRW<[P10W_BF_7C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
298349cc55cSDimitry Andric      (instrs
299349cc55cSDimitry Andric    FMADD_rec,
300349cc55cSDimitry Andric    FMADDS_rec,
301349cc55cSDimitry Andric    FMSUB_rec,
302349cc55cSDimitry Andric    FMSUBS_rec,
303349cc55cSDimitry Andric    FNMADD_rec,
304349cc55cSDimitry Andric    FNMADDS_rec,
305349cc55cSDimitry Andric    FNMSUB_rec,
306349cc55cSDimitry Andric    FNMSUBS_rec,
307349cc55cSDimitry Andric    FSELD_rec, FSELS_rec
308349cc55cSDimitry Andric)>;
309349cc55cSDimitry Andric
310349cc55cSDimitry Andric// 2 Cycles Branch operations, 1 input operands
311349cc55cSDimitry Andricdef : InstRW<[P10W_BR_2C, P10W_DISP_ANY, P10BR_Read],
312349cc55cSDimitry Andric      (instrs
313349cc55cSDimitry Andric    B, BCC, BCCA, BCCCTR, BCCCTR8, BCCCTRL, BCCCTRL8, BCCL, BCCLA, BCCLR, BCCLRL, CTRL_DEP, TAILB, TAILB8,
314349cc55cSDimitry Andric    BA, TAILBA, TAILBA8,
31506c3fb27SDimitry Andric    BCCTR, BCCTR8, BCCTR8n, BCCTRn, gBCCTR,
31606c3fb27SDimitry Andric    BCCTRL, BCCTRL8, BCCTRL8n, BCCTRLn, gBCCTRL,
31706c3fb27SDimitry Andric    BCLR, BCLRn, BDNZLR, BDNZLR8, BDNZLRm, BDNZLRp, BDZLR, BDZLR8, BDZLRm, BDZLRp, gBCLR,
31806c3fb27SDimitry Andric    BCLRL, BCLRLn, BDNZLRL, BDNZLRLm, BDNZLRLp, BDZLRL, BDZLRLm, BDZLRLp, gBCLRL,
31906c3fb27SDimitry Andric    BL, BL8, BL8_NOP, BL8_NOP_RM, BL8_NOP_TLS, BL8_NOTOC, BL8_NOTOC_RM, BL8_NOTOC_TLS, BL8_RM, BL8_TLS, BL8_TLS_, BLR, BLR8, BLRL, BL_NOP, BL_NOP_RM, BL_RM, BL_TLS,
320349cc55cSDimitry Andric    BLA, BLA8, BLA8_NOP, BLA8_NOP_RM, BLA8_RM, BLA_RM
321349cc55cSDimitry Andric)>;
322349cc55cSDimitry Andric
32306c3fb27SDimitry Andric// 2 Cycles Branch operations, 2 input operands
32406c3fb27SDimitry Andricdef : InstRW<[P10W_BR_2C, P10W_DISP_ANY, P10BR_Read, P10BR_Read],
325349cc55cSDimitry Andric      (instrs
32606c3fb27SDimitry Andric    BC, BCTR, BCTR8, BCTRL, BCTRL8, BCTRL8_LDinto_toc, BCTRL8_LDinto_toc_RM, BCTRL8_RM, BCTRL_LWZinto_toc, BCTRL_LWZinto_toc_RM, BCTRL_RM, BCn, BDNZ, BDNZ8, BDNZm, BDNZp, BDZ, BDZ8, BDZm, BDZp, TAILBCTR, TAILBCTR8, gBC, gBCat,
327349cc55cSDimitry Andric    BDNZA, BDNZAm, BDNZAp, BDZA, BDZAm, BDZAp, gBCA, gBCAat,
32806c3fb27SDimitry Andric    BCL, BCLalways, BCLn, BDNZL, BDNZLm, BDNZLp, BDZL, BDZLm, BDZLp, gBCL, gBCLat,
329349cc55cSDimitry Andric    BDNZLA, BDNZLAm, BDNZLAp, BDZLA, BDZLAm, BDZLAp, gBCLA, gBCLAat
330349cc55cSDimitry Andric)>;
331349cc55cSDimitry Andric
332349cc55cSDimitry Andric// 7 Cycles Crypto operations, 1 input operands
333349cc55cSDimitry Andricdef : InstRW<[P10W_CY_7C, P10W_DISP_ANY, P10CY_Read],
334349cc55cSDimitry Andric      (instrs
33506c3fb27SDimitry Andric    VGNB,
336349cc55cSDimitry Andric    VSBOX
337349cc55cSDimitry Andric)>;
338349cc55cSDimitry Andric
339349cc55cSDimitry Andric// 7 Cycles Crypto operations, 2 input operands
340349cc55cSDimitry Andricdef : InstRW<[P10W_CY_7C, P10W_DISP_ANY, P10CY_Read, P10CY_Read],
341349cc55cSDimitry Andric      (instrs
342349cc55cSDimitry Andric    CFUGED,
343349cc55cSDimitry Andric    CNTLZDM,
344349cc55cSDimitry Andric    CNTTZDM,
345349cc55cSDimitry Andric    PDEPD,
346349cc55cSDimitry Andric    PEXTD,
347349cc55cSDimitry Andric    VCFUGED,
348349cc55cSDimitry Andric    VCIPHER,
349349cc55cSDimitry Andric    VCIPHERLAST,
350349cc55cSDimitry Andric    VCLZDM,
351349cc55cSDimitry Andric    VCTZDM,
352349cc55cSDimitry Andric    VNCIPHER,
353349cc55cSDimitry Andric    VNCIPHERLAST,
354349cc55cSDimitry Andric    VPDEPD,
355349cc55cSDimitry Andric    VPEXTD,
356349cc55cSDimitry Andric    VPMSUMB,
357349cc55cSDimitry Andric    VPMSUMD,
358349cc55cSDimitry Andric    VPMSUMH,
359349cc55cSDimitry Andric    VPMSUMW
360349cc55cSDimitry Andric)>;
361349cc55cSDimitry Andric
362349cc55cSDimitry Andric// 13 Cycles Decimal Floating Point operations, 1 input operands
363349cc55cSDimitry Andricdef : InstRW<[P10W_DF_13C, P10W_DISP_ANY, P10DF_Read],
364349cc55cSDimitry Andric      (instrs
365349cc55cSDimitry Andric    XSCVDPQP,
366349cc55cSDimitry Andric    XSCVQPDP,
367349cc55cSDimitry Andric    XSCVQPDPO,
368349cc55cSDimitry Andric    XSCVQPSDZ,
369349cc55cSDimitry Andric    XSCVQPSQZ,
370349cc55cSDimitry Andric    XSCVQPSWZ,
371349cc55cSDimitry Andric    XSCVQPUDZ,
372349cc55cSDimitry Andric    XSCVQPUQZ,
373349cc55cSDimitry Andric    XSCVQPUWZ,
374349cc55cSDimitry Andric    XSCVSDQP,
375349cc55cSDimitry Andric    XSCVSQQP,
376349cc55cSDimitry Andric    XSCVUDQP,
37706c3fb27SDimitry Andric    XSCVUQQP,
37806c3fb27SDimitry Andric    XSRQPI,
37906c3fb27SDimitry Andric    XSRQPIX,
38006c3fb27SDimitry Andric    XSRQPXP
381349cc55cSDimitry Andric)>;
382349cc55cSDimitry Andric
383349cc55cSDimitry Andric// 13 Cycles Decimal Floating Point operations, 2 input operands
384349cc55cSDimitry Andricdef : InstRW<[P10W_DF_13C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
385349cc55cSDimitry Andric      (instrs
38606c3fb27SDimitry Andric    BCDSR_rec,
387349cc55cSDimitry Andric    XSADDQP,
388349cc55cSDimitry Andric    XSADDQPO,
389349cc55cSDimitry Andric    XSSUBQP,
390349cc55cSDimitry Andric    XSSUBQPO
391349cc55cSDimitry Andric)>;
392349cc55cSDimitry Andric
393349cc55cSDimitry Andric// 2-way crack instructions
39406c3fb27SDimitry Andric// 13 Cycles Decimal Floating Point operations, and 3 Cycles Store operations, 1 input operands
395349cc55cSDimitry Andricdef : InstRW<[P10W_DF_13C, P10W_DISP_EVEN, P10W_ST_3C, P10W_DISP_ANY],
396349cc55cSDimitry Andric      (instrs
39704eeddc0SDimitry Andric    HASHST, HASHST8,
39804eeddc0SDimitry Andric    HASHSTP, HASHSTP8
399349cc55cSDimitry Andric)>;
400349cc55cSDimitry Andric
401349cc55cSDimitry Andric// 24 Cycles Decimal Floating Point operations, 1 input operands
402349cc55cSDimitry Andricdef : InstRW<[P10W_DF_24C, P10W_DISP_ANY, P10DF_Read],
403349cc55cSDimitry Andric      (instrs
404349cc55cSDimitry Andric    BCDCTSQ_rec
405349cc55cSDimitry Andric)>;
406349cc55cSDimitry Andric
407349cc55cSDimitry Andric// 25 Cycles Decimal Floating Point operations, 2 input operands
408349cc55cSDimitry Andricdef : InstRW<[P10W_DF_25C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
409349cc55cSDimitry Andric      (instrs
410349cc55cSDimitry Andric    XSMULQP,
411349cc55cSDimitry Andric    XSMULQPO
412349cc55cSDimitry Andric)>;
413349cc55cSDimitry Andric
414349cc55cSDimitry Andric// 25 Cycles Decimal Floating Point operations, 3 input operands
415349cc55cSDimitry Andricdef : InstRW<[P10W_DF_25C, P10W_DISP_ANY, P10DF_Read, P10DF_Read, P10DF_Read],
416349cc55cSDimitry Andric      (instrs
417349cc55cSDimitry Andric    XSMADDQP,
418349cc55cSDimitry Andric    XSMADDQPO,
419349cc55cSDimitry Andric    XSMSUBQP,
420349cc55cSDimitry Andric    XSMSUBQPO,
421349cc55cSDimitry Andric    XSNMADDQP,
422349cc55cSDimitry Andric    XSNMADDQPO,
423349cc55cSDimitry Andric    XSNMSUBQP,
424349cc55cSDimitry Andric    XSNMSUBQPO
425349cc55cSDimitry Andric)>;
426349cc55cSDimitry Andric
42706c3fb27SDimitry Andric// 38 Cycles Decimal Floating Point operations, 1 input operands
42806c3fb27SDimitry Andricdef : InstRW<[P10W_DF_38C, P10W_DISP_ANY, P10DF_Read],
429349cc55cSDimitry Andric      (instrs
430349cc55cSDimitry Andric    BCDCFSQ_rec
431349cc55cSDimitry Andric)>;
432349cc55cSDimitry Andric
433349cc55cSDimitry Andric// 59 Cycles Decimal Floating Point operations, 2 input operands
434349cc55cSDimitry Andricdef : InstRW<[P10W_DF_59C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
435349cc55cSDimitry Andric      (instrs
436349cc55cSDimitry Andric    XSDIVQP,
437349cc55cSDimitry Andric    XSDIVQPO
438349cc55cSDimitry Andric)>;
439349cc55cSDimitry Andric
440349cc55cSDimitry Andric// 61 Cycles Decimal Floating Point operations, 2 input operands
441349cc55cSDimitry Andricdef : InstRW<[P10W_DF_61C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
442349cc55cSDimitry Andric      (instrs
443349cc55cSDimitry Andric    VDIVESQ,
444349cc55cSDimitry Andric    VDIVEUQ,
445349cc55cSDimitry Andric    VDIVSQ,
446349cc55cSDimitry Andric    VDIVUQ
447349cc55cSDimitry Andric)>;
448349cc55cSDimitry Andric
449349cc55cSDimitry Andric// 68 Cycles Decimal Floating Point operations, 2 input operands
450349cc55cSDimitry Andricdef : InstRW<[P10W_DF_68C, P10W_DISP_ANY, P10DF_Read, P10DF_Read],
451349cc55cSDimitry Andric      (instrs
452349cc55cSDimitry Andric    VMODSQ,
453349cc55cSDimitry Andric    VMODUQ
454349cc55cSDimitry Andric)>;
455349cc55cSDimitry Andric
456349cc55cSDimitry Andric// 77 Cycles Decimal Floating Point operations, 1 input operands
457349cc55cSDimitry Andricdef : InstRW<[P10W_DF_77C, P10W_DISP_ANY, P10DF_Read],
458349cc55cSDimitry Andric      (instrs
459349cc55cSDimitry Andric    XSSQRTQP,
460349cc55cSDimitry Andric    XSSQRTQPO
461349cc55cSDimitry Andric)>;
462349cc55cSDimitry Andric
463349cc55cSDimitry Andric// 20 Cycles Scalar Fixed-Point Divide operations, 2 input operands
464349cc55cSDimitry Andricdef : InstRW<[P10W_DV_20C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
465349cc55cSDimitry Andric      (instrs
466349cc55cSDimitry Andric    DIVW,
467349cc55cSDimitry Andric    DIVWO,
468349cc55cSDimitry Andric    DIVWU,
469349cc55cSDimitry Andric    DIVWUO,
470349cc55cSDimitry Andric    MODSW
471349cc55cSDimitry Andric)>;
472349cc55cSDimitry Andric
473349cc55cSDimitry Andric// 2-way crack instructions
474349cc55cSDimitry Andric// 20 Cycles Scalar Fixed-Point Divide operations, and 3 Cycles ALU operations, 2 input operands
475349cc55cSDimitry Andricdef : InstRW<[P10W_DV_20C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
476349cc55cSDimitry Andric      (instrs
477349cc55cSDimitry Andric    DIVW_rec,
478349cc55cSDimitry Andric    DIVWO_rec,
479349cc55cSDimitry Andric    DIVWU_rec,
480349cc55cSDimitry Andric    DIVWUO_rec
481349cc55cSDimitry Andric)>;
482349cc55cSDimitry Andric
483349cc55cSDimitry Andric// 25 Cycles Scalar Fixed-Point Divide operations, 2 input operands
484349cc55cSDimitry Andricdef : InstRW<[P10W_DV_25C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
485349cc55cSDimitry Andric      (instrs
486349cc55cSDimitry Andric    DIVD,
487349cc55cSDimitry Andric    DIVDO,
488349cc55cSDimitry Andric    DIVDU,
489349cc55cSDimitry Andric    DIVDUO,
490349cc55cSDimitry Andric    DIVWE,
491349cc55cSDimitry Andric    DIVWEO,
492349cc55cSDimitry Andric    DIVWEU,
493349cc55cSDimitry Andric    DIVWEUO
494349cc55cSDimitry Andric)>;
495349cc55cSDimitry Andric
496349cc55cSDimitry Andric// 2-way crack instructions
497349cc55cSDimitry Andric// 25 Cycles Scalar Fixed-Point Divide operations, and 3 Cycles ALU operations, 2 input operands
498349cc55cSDimitry Andricdef : InstRW<[P10W_DV_25C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
499349cc55cSDimitry Andric      (instrs
500349cc55cSDimitry Andric    DIVD_rec,
501349cc55cSDimitry Andric    DIVDO_rec,
502349cc55cSDimitry Andric    DIVDU_rec,
503349cc55cSDimitry Andric    DIVDUO_rec,
504349cc55cSDimitry Andric    DIVWE_rec,
505349cc55cSDimitry Andric    DIVWEO_rec,
506349cc55cSDimitry Andric    DIVWEU_rec,
507349cc55cSDimitry Andric    DIVWEUO_rec
508349cc55cSDimitry Andric)>;
509349cc55cSDimitry Andric
510349cc55cSDimitry Andric// 27 Cycles Scalar Fixed-Point Divide operations, 2 input operands
511349cc55cSDimitry Andricdef : InstRW<[P10W_DV_27C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
512349cc55cSDimitry Andric      (instrs
513349cc55cSDimitry Andric    MODSD,
514349cc55cSDimitry Andric    MODUD,
515349cc55cSDimitry Andric    MODUW
516349cc55cSDimitry Andric)>;
517349cc55cSDimitry Andric
518349cc55cSDimitry Andric// 41 Cycles Scalar Fixed-Point Divide operations, 2 input operands
519349cc55cSDimitry Andricdef : InstRW<[P10W_DV_41C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
520349cc55cSDimitry Andric      (instrs
521349cc55cSDimitry Andric    DIVDE,
522349cc55cSDimitry Andric    DIVDEO,
523349cc55cSDimitry Andric    DIVDEU,
524349cc55cSDimitry Andric    DIVDEUO
525349cc55cSDimitry Andric)>;
526349cc55cSDimitry Andric
527349cc55cSDimitry Andric// 2-way crack instructions
528349cc55cSDimitry Andric// 41 Cycles Scalar Fixed-Point Divide operations, and 3 Cycles ALU operations, 2 input operands
529349cc55cSDimitry Andricdef : InstRW<[P10W_DV_41C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
530349cc55cSDimitry Andric      (instrs
531349cc55cSDimitry Andric    DIVDE_rec,
532349cc55cSDimitry Andric    DIVDEO_rec,
533349cc55cSDimitry Andric    DIVDEU_rec,
534349cc55cSDimitry Andric    DIVDEUO_rec
535349cc55cSDimitry Andric)>;
536349cc55cSDimitry Andric
537349cc55cSDimitry Andric// 43 Cycles Scalar Fixed-Point Divide operations, 2 input operands
538349cc55cSDimitry Andricdef : InstRW<[P10W_DV_43C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
539349cc55cSDimitry Andric      (instrs
540349cc55cSDimitry Andric    VDIVSD,
541349cc55cSDimitry Andric    VDIVUD
542349cc55cSDimitry Andric)>;
543349cc55cSDimitry Andric
544349cc55cSDimitry Andric// 47 Cycles Scalar Fixed-Point Divide operations, 2 input operands
545349cc55cSDimitry Andricdef : InstRW<[P10W_DV_47C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
546349cc55cSDimitry Andric      (instrs
547349cc55cSDimitry Andric    VMODSD,
548349cc55cSDimitry Andric    VMODUD
549349cc55cSDimitry Andric)>;
550349cc55cSDimitry Andric
551349cc55cSDimitry Andric// 54 Cycles Scalar Fixed-Point Divide operations, 2 input operands
552349cc55cSDimitry Andricdef : InstRW<[P10W_DV_54C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
553349cc55cSDimitry Andric      (instrs
554349cc55cSDimitry Andric    VDIVSW,
555349cc55cSDimitry Andric    VDIVUW
556349cc55cSDimitry Andric)>;
557349cc55cSDimitry Andric
558349cc55cSDimitry Andric// 60 Cycles Scalar Fixed-Point Divide operations, 2 input operands
559349cc55cSDimitry Andricdef : InstRW<[P10W_DV_60C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
560349cc55cSDimitry Andric      (instrs
561349cc55cSDimitry Andric    VMODSW,
562349cc55cSDimitry Andric    VMODUW
563349cc55cSDimitry Andric)>;
564349cc55cSDimitry Andric
565349cc55cSDimitry Andric// 75 Cycles Scalar Fixed-Point Divide operations, 2 input operands
566349cc55cSDimitry Andricdef : InstRW<[P10W_DV_75C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
567349cc55cSDimitry Andric      (instrs
568349cc55cSDimitry Andric    VDIVESD,
569349cc55cSDimitry Andric    VDIVEUD
570349cc55cSDimitry Andric)>;
571349cc55cSDimitry Andric
572349cc55cSDimitry Andric// 83 Cycles Scalar Fixed-Point Divide operations, 2 input operands
573349cc55cSDimitry Andricdef : InstRW<[P10W_DV_83C, P10W_DISP_ANY, P10DV_Read, P10DV_Read],
574349cc55cSDimitry Andric      (instrs
575349cc55cSDimitry Andric    VDIVESW,
576349cc55cSDimitry Andric    VDIVEUW
577349cc55cSDimitry Andric)>;
578349cc55cSDimitry Andric
579349cc55cSDimitry Andric// 5 Cycles Fixed-Point and BCD operations, 1 input operands
580349cc55cSDimitry Andricdef : InstRW<[P10W_DX_5C, P10W_DISP_ANY, P10DX_Read],
581349cc55cSDimitry Andric      (instrs
58206c3fb27SDimitry Andric    BCDCFN_rec,
58306c3fb27SDimitry Andric    BCDCFZ_rec,
584349cc55cSDimitry Andric    BCDCTN_rec,
58506c3fb27SDimitry Andric    BCDCTZ_rec,
58606c3fb27SDimitry Andric    BCDSETSGN_rec,
587349cc55cSDimitry Andric    VMUL10CUQ,
588349cc55cSDimitry Andric    VMUL10UQ,
58906c3fb27SDimitry Andric    XSTSTDCQP,
59006c3fb27SDimitry Andric    XSXSIGQP,
59106c3fb27SDimitry Andric    XXGENPCVBM
592349cc55cSDimitry Andric)>;
593349cc55cSDimitry Andric
594349cc55cSDimitry Andric// 5 Cycles Fixed-Point and BCD operations, 2 input operands
595349cc55cSDimitry Andricdef : InstRW<[P10W_DX_5C, P10W_DISP_ANY, P10DX_Read, P10DX_Read],
596349cc55cSDimitry Andric      (instrs
59706c3fb27SDimitry Andric    BCDADD_rec,
598349cc55cSDimitry Andric    BCDCPSGN_rec,
59906c3fb27SDimitry Andric    BCDS_rec,
60006c3fb27SDimitry Andric    BCDSUB_rec,
60106c3fb27SDimitry Andric    BCDTRUNC_rec,
602349cc55cSDimitry Andric    BCDUS_rec,
603349cc55cSDimitry Andric    BCDUTRUNC_rec,
604349cc55cSDimitry Andric    VADDCUQ,
605349cc55cSDimitry Andric    VADDUQM,
606349cc55cSDimitry Andric    VMUL10ECUQ,
607349cc55cSDimitry Andric    VMUL10EUQ,
608349cc55cSDimitry Andric    VSUBCUQ,
609349cc55cSDimitry Andric    VSUBUQM,
610bdd1243dSDimitry Andric    XSCMPEQQP,
611349cc55cSDimitry Andric    XSCMPEXPQP,
612bdd1243dSDimitry Andric    XSCMPGEQP,
613bdd1243dSDimitry Andric    XSCMPGTQP,
614349cc55cSDimitry Andric    XSCMPOQP,
615349cc55cSDimitry Andric    XSCMPUQP,
61604eeddc0SDimitry Andric    XSMAXCQP,
61706c3fb27SDimitry Andric    XSMINCQP
618349cc55cSDimitry Andric)>;
619349cc55cSDimitry Andric
620349cc55cSDimitry Andric// 5 Cycles Fixed-Point and BCD operations, 3 input operands
621349cc55cSDimitry Andricdef : InstRW<[P10W_DX_5C, P10W_DISP_ANY, P10DX_Read, P10DX_Read, P10DX_Read],
622349cc55cSDimitry Andric      (instrs
623349cc55cSDimitry Andric    VADDECUQ,
624349cc55cSDimitry Andric    VADDEUQM,
625349cc55cSDimitry Andric    VSUBECUQ,
626349cc55cSDimitry Andric    VSUBEUQM
627349cc55cSDimitry Andric)>;
628349cc55cSDimitry Andric
629349cc55cSDimitry Andric// 4 Cycles ALU2 operations, 0 input operands
630349cc55cSDimitry Andricdef : InstRW<[P10W_F2_4C, P10W_DISP_ANY],
631349cc55cSDimitry Andric      (instrs
63206c3fb27SDimitry Andric    MTVSRBMI
633349cc55cSDimitry Andric)>;
634349cc55cSDimitry Andric
635349cc55cSDimitry Andric// 4 Cycles ALU2 operations, 1 input operands
636349cc55cSDimitry Andricdef : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read],
637349cc55cSDimitry Andric      (instrs
63806c3fb27SDimitry Andric    CBCDTD, CBCDTD8,
63906c3fb27SDimitry Andric    CDTBCD, CDTBCD8,
640349cc55cSDimitry Andric    CNTLZD,
641349cc55cSDimitry Andric    CNTLZD_rec,
642349cc55cSDimitry Andric    CNTLZW, CNTLZW8,
643349cc55cSDimitry Andric    CNTLZW8_rec, CNTLZW_rec,
644349cc55cSDimitry Andric    CNTTZD,
645349cc55cSDimitry Andric    CNTTZD_rec,
646349cc55cSDimitry Andric    CNTTZW, CNTTZW8,
647349cc55cSDimitry Andric    CNTTZW8_rec, CNTTZW_rec,
64806c3fb27SDimitry Andric    EXTSWSLI_32_64_rec, EXTSWSLI_rec,
649349cc55cSDimitry Andric    FTSQRT,
650349cc55cSDimitry Andric    MTVSRBM,
651349cc55cSDimitry Andric    MTVSRDM,
652349cc55cSDimitry Andric    MTVSRHM,
653349cc55cSDimitry Andric    MTVSRQM,
654349cc55cSDimitry Andric    MTVSRWM,
655349cc55cSDimitry Andric    POPCNTB, POPCNTB8,
656349cc55cSDimitry Andric    POPCNTD,
657349cc55cSDimitry Andric    POPCNTW,
65806c3fb27SDimitry Andric    RLDIC_rec,
65906c3fb27SDimitry Andric    RLDICL_32_rec, RLDICL_rec,
66006c3fb27SDimitry Andric    RLDICR_rec,
66106c3fb27SDimitry Andric    RLWINM8_rec, RLWINM_rec,
662349cc55cSDimitry Andric    VCLZB,
663349cc55cSDimitry Andric    VCLZD,
664349cc55cSDimitry Andric    VCLZH,
665349cc55cSDimitry Andric    VCLZW,
66606c3fb27SDimitry Andric    VCNTMBB,
66706c3fb27SDimitry Andric    VCNTMBD,
66806c3fb27SDimitry Andric    VCNTMBH,
66906c3fb27SDimitry Andric    VCNTMBW,
670349cc55cSDimitry Andric    VCTZB,
671349cc55cSDimitry Andric    VCTZD,
672349cc55cSDimitry Andric    VCTZH,
673349cc55cSDimitry Andric    VCTZW,
674349cc55cSDimitry Andric    VEXPANDBM,
675349cc55cSDimitry Andric    VEXPANDDM,
676349cc55cSDimitry Andric    VEXPANDHM,
677349cc55cSDimitry Andric    VEXPANDQM,
678349cc55cSDimitry Andric    VEXPANDWM,
679349cc55cSDimitry Andric    VEXTRACTBM,
680349cc55cSDimitry Andric    VEXTRACTDM,
681349cc55cSDimitry Andric    VEXTRACTHM,
682349cc55cSDimitry Andric    VEXTRACTQM,
683349cc55cSDimitry Andric    VEXTRACTWM,
684349cc55cSDimitry Andric    VPOPCNTB,
685349cc55cSDimitry Andric    VPOPCNTD,
686349cc55cSDimitry Andric    VPOPCNTH,
687349cc55cSDimitry Andric    VPOPCNTW,
688349cc55cSDimitry Andric    VPRTYBD,
689349cc55cSDimitry Andric    VPRTYBW,
69006c3fb27SDimitry Andric    VSHASIGMAD,
69106c3fb27SDimitry Andric    VSHASIGMAW,
692349cc55cSDimitry Andric    XSCVHPDP,
693349cc55cSDimitry Andric    XSCVSPDPN,
694349cc55cSDimitry Andric    XSTSQRTDP,
69506c3fb27SDimitry Andric    XSTSTDCDP,
69606c3fb27SDimitry Andric    XSTSTDCSP,
697349cc55cSDimitry Andric    XVCVHPSP,
698349cc55cSDimitry Andric    XVTLSBB,
699349cc55cSDimitry Andric    XVTSQRTDP,
70006c3fb27SDimitry Andric    XVTSQRTSP,
70106c3fb27SDimitry Andric    XVTSTDCDP,
70206c3fb27SDimitry Andric    XVTSTDCSP
703349cc55cSDimitry Andric)>;
704349cc55cSDimitry Andric
705349cc55cSDimitry Andric// 4 Cycles ALU2 operations, 2 input operands
706349cc55cSDimitry Andricdef : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read, P10F2_Read],
707349cc55cSDimitry Andric      (instrs
708349cc55cSDimitry Andric    CMPEQB,
70906c3fb27SDimitry Andric    CMPRB, CMPRB8,
710349cc55cSDimitry Andric    FCMPOD, FCMPOS,
711349cc55cSDimitry Andric    FCMPUD, FCMPUS,
712349cc55cSDimitry Andric    FTDIV,
71306c3fb27SDimitry Andric    RLDCL_rec,
71406c3fb27SDimitry Andric    RLDCR_rec,
71506c3fb27SDimitry Andric    RLDIMI_rec,
71606c3fb27SDimitry Andric    RLWIMI8_rec, RLWIMI_rec,
71706c3fb27SDimitry Andric    RLWNM8_rec, RLWNM_rec,
718349cc55cSDimitry Andric    SLD_rec,
719349cc55cSDimitry Andric    SLW8_rec, SLW_rec,
720349cc55cSDimitry Andric    SRD_rec,
721349cc55cSDimitry Andric    SRW8_rec, SRW_rec,
72206c3fb27SDimitry Andric    TDI,
72306c3fb27SDimitry Andric    TWI,
724349cc55cSDimitry Andric    VABSDUB,
725349cc55cSDimitry Andric    VABSDUH,
726349cc55cSDimitry Andric    VABSDUW,
727349cc55cSDimitry Andric    VADDCUW,
728349cc55cSDimitry Andric    VADDSBS,
729349cc55cSDimitry Andric    VADDSHS,
730349cc55cSDimitry Andric    VADDSWS,
731349cc55cSDimitry Andric    VADDUBS,
732349cc55cSDimitry Andric    VADDUHS,
733349cc55cSDimitry Andric    VADDUWS,
734349cc55cSDimitry Andric    VAVGSB,
735349cc55cSDimitry Andric    VAVGSH,
736349cc55cSDimitry Andric    VAVGSW,
737349cc55cSDimitry Andric    VAVGUB,
738349cc55cSDimitry Andric    VAVGUH,
739349cc55cSDimitry Andric    VAVGUW,
740349cc55cSDimitry Andric    VCMPBFP,
741349cc55cSDimitry Andric    VCMPBFP_rec,
742349cc55cSDimitry Andric    VCMPEQFP,
743349cc55cSDimitry Andric    VCMPEQFP_rec,
744349cc55cSDimitry Andric    VCMPEQUB_rec,
745349cc55cSDimitry Andric    VCMPEQUD_rec,
746349cc55cSDimitry Andric    VCMPEQUH_rec,
747349cc55cSDimitry Andric    VCMPEQUQ,
748349cc55cSDimitry Andric    VCMPEQUQ_rec,
749349cc55cSDimitry Andric    VCMPEQUW_rec,
750349cc55cSDimitry Andric    VCMPGEFP,
751349cc55cSDimitry Andric    VCMPGEFP_rec,
752349cc55cSDimitry Andric    VCMPGTFP,
753349cc55cSDimitry Andric    VCMPGTFP_rec,
754349cc55cSDimitry Andric    VCMPGTSB_rec,
755349cc55cSDimitry Andric    VCMPGTSD_rec,
756349cc55cSDimitry Andric    VCMPGTSH_rec,
757349cc55cSDimitry Andric    VCMPGTSQ,
758349cc55cSDimitry Andric    VCMPGTSQ_rec,
759349cc55cSDimitry Andric    VCMPGTSW_rec,
760349cc55cSDimitry Andric    VCMPGTUB_rec,
761349cc55cSDimitry Andric    VCMPGTUD_rec,
762349cc55cSDimitry Andric    VCMPGTUH_rec,
763349cc55cSDimitry Andric    VCMPGTUQ,
764349cc55cSDimitry Andric    VCMPGTUQ_rec,
765349cc55cSDimitry Andric    VCMPGTUW_rec,
766349cc55cSDimitry Andric    VCMPNEB_rec,
767349cc55cSDimitry Andric    VCMPNEH_rec,
768349cc55cSDimitry Andric    VCMPNEW_rec,
769349cc55cSDimitry Andric    VCMPNEZB_rec,
770349cc55cSDimitry Andric    VCMPNEZH_rec,
771349cc55cSDimitry Andric    VCMPNEZW_rec,
772349cc55cSDimitry Andric    VCMPSQ,
773349cc55cSDimitry Andric    VCMPUQ,
774349cc55cSDimitry Andric    VMAXFP,
775349cc55cSDimitry Andric    VMINFP,
776349cc55cSDimitry Andric    VSUBCUW,
777349cc55cSDimitry Andric    VSUBSBS,
778349cc55cSDimitry Andric    VSUBSHS,
779349cc55cSDimitry Andric    VSUBSWS,
780349cc55cSDimitry Andric    VSUBUBS,
781349cc55cSDimitry Andric    VSUBUHS,
782349cc55cSDimitry Andric    VSUBUWS,
783349cc55cSDimitry Andric    XSCMPEQDP,
784349cc55cSDimitry Andric    XSCMPEXPDP,
785349cc55cSDimitry Andric    XSCMPGEDP,
786349cc55cSDimitry Andric    XSCMPGTDP,
787349cc55cSDimitry Andric    XSCMPODP,
788349cc55cSDimitry Andric    XSCMPUDP,
789349cc55cSDimitry Andric    XSMAXCDP,
790349cc55cSDimitry Andric    XSMAXDP,
791349cc55cSDimitry Andric    XSMAXJDP,
792349cc55cSDimitry Andric    XSMINCDP,
793349cc55cSDimitry Andric    XSMINDP,
794349cc55cSDimitry Andric    XSMINJDP,
795349cc55cSDimitry Andric    XSTDIVDP,
796349cc55cSDimitry Andric    XVCMPEQDP,
797349cc55cSDimitry Andric    XVCMPEQDP_rec,
798349cc55cSDimitry Andric    XVCMPEQSP,
799349cc55cSDimitry Andric    XVCMPEQSP_rec,
800349cc55cSDimitry Andric    XVCMPGEDP,
801349cc55cSDimitry Andric    XVCMPGEDP_rec,
802349cc55cSDimitry Andric    XVCMPGESP,
803349cc55cSDimitry Andric    XVCMPGESP_rec,
804349cc55cSDimitry Andric    XVCMPGTDP,
805349cc55cSDimitry Andric    XVCMPGTDP_rec,
806349cc55cSDimitry Andric    XVCMPGTSP,
807349cc55cSDimitry Andric    XVCMPGTSP_rec,
808349cc55cSDimitry Andric    XVMAXDP,
809349cc55cSDimitry Andric    XVMAXSP,
810349cc55cSDimitry Andric    XVMINDP,
811349cc55cSDimitry Andric    XVMINSP,
812349cc55cSDimitry Andric    XVTDIVDP,
81306c3fb27SDimitry Andric    XVTDIVSP
814349cc55cSDimitry Andric)>;
815349cc55cSDimitry Andric
816349cc55cSDimitry Andric// 4 Cycles ALU2 operations, 3 input operands
817349cc55cSDimitry Andricdef : InstRW<[P10W_F2_4C, P10W_DISP_ANY, P10F2_Read, P10F2_Read, P10F2_Read],
818349cc55cSDimitry Andric      (instrs
819349cc55cSDimitry Andric    TD,
82006c3fb27SDimitry Andric    TRAP, TW
821349cc55cSDimitry Andric)>;
822349cc55cSDimitry Andric
82306c3fb27SDimitry Andric// Single crack instructions
82406c3fb27SDimitry Andric// 4 Cycles ALU2 operations, 1 input operands
82506c3fb27SDimitry Andricdef : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_DISP_ANY, P10F2_Read],
826349cc55cSDimitry Andric      (instrs
82706c3fb27SDimitry Andric    SRADI_rec,
8285f757f3fSDimitry Andric    SRAWI_rec
829349cc55cSDimitry Andric)>;
830349cc55cSDimitry Andric
831349cc55cSDimitry Andric// Single crack instructions
832349cc55cSDimitry Andric// 4 Cycles ALU2 operations, 2 input operands
833349cc55cSDimitry Andricdef : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_DISP_ANY, P10F2_Read, P10F2_Read],
834349cc55cSDimitry Andric      (instrs
835349cc55cSDimitry Andric    SRAD_rec,
8365f757f3fSDimitry Andric    SRAW_rec
837349cc55cSDimitry Andric)>;
838349cc55cSDimitry Andric
839349cc55cSDimitry Andric// 2-way crack instructions
840349cc55cSDimitry Andric// 4 Cycles ALU2 operations, and 4 Cycles Permute operations, 2 input operands
841349cc55cSDimitry Andricdef : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_PM_4C, P10W_DISP_ANY],
842349cc55cSDimitry Andric      (instrs
843349cc55cSDimitry Andric    VRLQ,
844349cc55cSDimitry Andric    VRLQNM,
845349cc55cSDimitry Andric    VSLQ,
846349cc55cSDimitry Andric    VSRAQ,
847349cc55cSDimitry Andric    VSRQ
848349cc55cSDimitry Andric)>;
849349cc55cSDimitry Andric
850349cc55cSDimitry Andric// 2-way crack instructions
851349cc55cSDimitry Andric// 4 Cycles ALU2 operations, and 4 Cycles Permute operations, 3 input operands
852349cc55cSDimitry Andricdef : InstRW<[P10W_F2_4C, P10W_DISP_EVEN, P10W_PM_4C, P10W_DISP_ANY],
853349cc55cSDimitry Andric      (instrs
854349cc55cSDimitry Andric    VRLQMI
855349cc55cSDimitry Andric)>;
856349cc55cSDimitry Andric
857349cc55cSDimitry Andric// 2-way crack instructions
858349cc55cSDimitry Andric// 4 Cycles ALU2 operations, and 4 Cycles ALU2 operations, 0 input operands
859349cc55cSDimitry Andricdef : InstRW<[P10W_F2_4C, P10W_DISP_PAIR, P10W_F2_4C],
860349cc55cSDimitry Andric      (instrs
861349cc55cSDimitry Andric    MFCR, MFCR8
862349cc55cSDimitry Andric)>;
863349cc55cSDimitry Andric
864349cc55cSDimitry Andric// 2 Cycles ALU operations, 1 input operands
865349cc55cSDimitry Andricdef : InstRW<[P10W_FX_2C, P10W_DISP_ANY, P10FX_Read],
866349cc55cSDimitry Andric      (instrs
867349cc55cSDimitry Andric    MTCTR, MTCTR8, MTCTR8loop, MTCTRloop,
868349cc55cSDimitry Andric    MTLR, MTLR8
869349cc55cSDimitry Andric)>;
870349cc55cSDimitry Andric
871349cc55cSDimitry Andric// 3 Cycles ALU operations, 0 input operands
872349cc55cSDimitry Andricdef : InstRW<[P10W_FX_3C, P10W_DISP_ANY],
873349cc55cSDimitry Andric      (instrs
874349cc55cSDimitry Andric    DSS, DSSALL,
875349cc55cSDimitry Andric    MCRXRX,
876349cc55cSDimitry Andric    MFCTR, MFCTR8,
877349cc55cSDimitry Andric    MFLR, MFLR8,
8785f757f3fSDimitry Andric    WAIT, WAITP10
879349cc55cSDimitry Andric)>;
880349cc55cSDimitry Andric
881349cc55cSDimitry Andric// 3 Cycles ALU operations, 1 input operands
882349cc55cSDimitry Andricdef : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read],
883349cc55cSDimitry Andric      (instrs
884*0fca6ea1SDimitry Andric    ADDI, ADDI8, ADDIdtprelL32, ADDItlsldLADDR32, ADDItocL, ADDItocL8, LI, LI8,
88506c3fb27SDimitry Andric    ADDIC, ADDIC8,
886349cc55cSDimitry Andric    ADDIS, ADDIS8, ADDISdtprelHA32, ADDIStocHA, ADDIStocHA8, LIS, LIS8,
887349cc55cSDimitry Andric    ADDME, ADDME8,
888349cc55cSDimitry Andric    ADDME8O, ADDMEO,
889349cc55cSDimitry Andric    ADDZE, ADDZE8,
890349cc55cSDimitry Andric    ADDZE8O, ADDZEO,
89106c3fb27SDimitry Andric    ANDI8_rec, ANDI_rec,
89206c3fb27SDimitry Andric    ANDIS8_rec, ANDIS_rec,
89306c3fb27SDimitry Andric    CMPDI, CMPWI,
89406c3fb27SDimitry Andric    CMPLDI, CMPLWI,
895349cc55cSDimitry Andric    EXTSB, EXTSB8, EXTSB8_32_64,
896349cc55cSDimitry Andric    EXTSB8_rec, EXTSB_rec,
897349cc55cSDimitry Andric    EXTSH, EXTSH8, EXTSH8_32_64,
898349cc55cSDimitry Andric    EXTSH8_rec, EXTSH_rec,
899349cc55cSDimitry Andric    EXTSW, EXTSW_32, EXTSW_32_64,
900349cc55cSDimitry Andric    EXTSW_32_64_rec, EXTSW_rec,
90106c3fb27SDimitry Andric    EXTSWSLI, EXTSWSLI_32_64,
902349cc55cSDimitry Andric    FABSD, FABSS,
903349cc55cSDimitry Andric    FMR,
904349cc55cSDimitry Andric    FNABSD, FNABSS,
905349cc55cSDimitry Andric    FNEGD, FNEGS,
906349cc55cSDimitry Andric    MCRF,
907349cc55cSDimitry Andric    MFOCRF, MFOCRF8,
908349cc55cSDimitry Andric    MFVRD, MFVSRD,
909349cc55cSDimitry Andric    MFVRWZ, MFVSRWZ,
910349cc55cSDimitry Andric    MTOCRF, MTOCRF8,
911349cc55cSDimitry Andric    MTVRD, MTVSRD,
912349cc55cSDimitry Andric    MTVRWA, MTVSRWA,
913349cc55cSDimitry Andric    MTVRWZ, MTVSRWZ,
914349cc55cSDimitry Andric    NEG, NEG8,
915349cc55cSDimitry Andric    NEG8_rec, NEG_rec,
916349cc55cSDimitry Andric    NEG8O, NEGO,
91706c3fb27SDimitry Andric    NOP, NOP_GT_PWR6, NOP_GT_PWR7, ORI, ORI8,
91806c3fb27SDimitry Andric    ORIS, ORIS8,
91906c3fb27SDimitry Andric    RLDIC,
92006c3fb27SDimitry Andric    RLDICL, RLDICL_32, RLDICL_32_64,
92106c3fb27SDimitry Andric    RLDICR, RLDICR_32,
92206c3fb27SDimitry Andric    RLWINM, RLWINM8,
923349cc55cSDimitry Andric    SETB, SETB8,
924349cc55cSDimitry Andric    SETBC, SETBC8,
925349cc55cSDimitry Andric    SETBCR, SETBCR8,
926349cc55cSDimitry Andric    SETNBC, SETNBC8,
927349cc55cSDimitry Andric    SETNBCR, SETNBCR8,
92806c3fb27SDimitry Andric    SRADI, SRADI_32,
92906c3fb27SDimitry Andric    SRAWI,
93006c3fb27SDimitry Andric    SUBFIC, SUBFIC8,
931349cc55cSDimitry Andric    SUBFME, SUBFME8,
932349cc55cSDimitry Andric    SUBFME8O, SUBFMEO,
933349cc55cSDimitry Andric    SUBFZE, SUBFZE8,
934349cc55cSDimitry Andric    SUBFZE8O, SUBFZEO,
935349cc55cSDimitry Andric    VEXTSB2D, VEXTSB2Ds,
936349cc55cSDimitry Andric    VEXTSB2W, VEXTSB2Ws,
937349cc55cSDimitry Andric    VEXTSD2Q,
938349cc55cSDimitry Andric    VEXTSH2D, VEXTSH2Ds,
939349cc55cSDimitry Andric    VEXTSH2W, VEXTSH2Ws,
940349cc55cSDimitry Andric    VEXTSW2D, VEXTSW2Ds,
941349cc55cSDimitry Andric    VNEGD,
942349cc55cSDimitry Andric    VNEGW,
94306c3fb27SDimitry Andric    XORI, XORI8,
94406c3fb27SDimitry Andric    XORIS, XORIS8,
945349cc55cSDimitry Andric    XSABSDP,
946349cc55cSDimitry Andric    XSABSQP,
94781ad6265SDimitry Andric    XSNABSDP, XSNABSDPs,
948349cc55cSDimitry Andric    XSNABSQP,
949349cc55cSDimitry Andric    XSNEGDP,
950349cc55cSDimitry Andric    XSNEGQP,
951349cc55cSDimitry Andric    XSXEXPDP,
952349cc55cSDimitry Andric    XSXEXPQP,
953349cc55cSDimitry Andric    XSXSIGDP,
954349cc55cSDimitry Andric    XVABSDP,
955349cc55cSDimitry Andric    XVABSSP,
956349cc55cSDimitry Andric    XVNABSDP,
957349cc55cSDimitry Andric    XVNABSSP,
958349cc55cSDimitry Andric    XVNEGDP,
959349cc55cSDimitry Andric    XVNEGSP,
960349cc55cSDimitry Andric    XVXEXPDP,
961349cc55cSDimitry Andric    XVXEXPSP,
962349cc55cSDimitry Andric    XVXSIGDP,
963349cc55cSDimitry Andric    XVXSIGSP
964349cc55cSDimitry Andric)>;
965349cc55cSDimitry Andric
966349cc55cSDimitry Andric// 3 Cycles ALU operations, 2 input operands
967349cc55cSDimitry Andricdef : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read],
968349cc55cSDimitry Andric      (instrs
969349cc55cSDimitry Andric    ADD4, ADD4TLS, ADD8, ADD8TLS, ADD8TLS_,
970349cc55cSDimitry Andric    ADD4_rec, ADD8_rec,
971349cc55cSDimitry Andric    ADDE, ADDE8,
972349cc55cSDimitry Andric    ADDE8O, ADDEO,
97306c3fb27SDimitry Andric    ADDEX, ADDEX8,
974349cc55cSDimitry Andric    ADD4O, ADD8O,
975349cc55cSDimitry Andric    AND, AND8,
976349cc55cSDimitry Andric    AND8_rec, AND_rec,
977349cc55cSDimitry Andric    ANDC, ANDC8,
978349cc55cSDimitry Andric    ANDC8_rec, ANDC_rec,
979349cc55cSDimitry Andric    CMPD, CMPW,
980349cc55cSDimitry Andric    CMPB, CMPB8,
981349cc55cSDimitry Andric    CMPLD, CMPLW,
982349cc55cSDimitry Andric    CRAND,
983349cc55cSDimitry Andric    CRANDC,
98406c3fb27SDimitry Andric    CR6SET, CREQV, CRSET,
985349cc55cSDimitry Andric    CRNAND,
986349cc55cSDimitry Andric    CRNOR,
987349cc55cSDimitry Andric    CROR,
988349cc55cSDimitry Andric    CRORC,
989349cc55cSDimitry Andric    CR6UNSET, CRUNSET, CRXOR,
99006c3fb27SDimitry Andric    DST, DST64, DSTT, DSTT64,
99106c3fb27SDimitry Andric    DSTST, DSTST64, DSTSTT, DSTSTT64,
992349cc55cSDimitry Andric    EQV, EQV8,
993349cc55cSDimitry Andric    EQV8_rec, EQV_rec,
994349cc55cSDimitry Andric    FCPSGND, FCPSGNS,
995349cc55cSDimitry Andric    NAND, NAND8,
996349cc55cSDimitry Andric    NAND8_rec, NAND_rec,
997349cc55cSDimitry Andric    NOR, NOR8,
998349cc55cSDimitry Andric    NOR8_rec, NOR_rec,
999349cc55cSDimitry Andric    COPY, OR, OR8,
1000349cc55cSDimitry Andric    OR8_rec, OR_rec,
1001349cc55cSDimitry Andric    ORC, ORC8,
1002349cc55cSDimitry Andric    ORC8_rec, ORC_rec,
100306c3fb27SDimitry Andric    RLDCL,
100406c3fb27SDimitry Andric    RLDCR,
100506c3fb27SDimitry Andric    RLDIMI,
100606c3fb27SDimitry Andric    RLWIMI, RLWIMI8,
100706c3fb27SDimitry Andric    RLWNM, RLWNM8,
1008349cc55cSDimitry Andric    SLD,
1009349cc55cSDimitry Andric    SLW, SLW8,
1010349cc55cSDimitry Andric    SRAD,
1011349cc55cSDimitry Andric    SRAW,
1012349cc55cSDimitry Andric    SRD,
1013349cc55cSDimitry Andric    SRW, SRW8,
1014349cc55cSDimitry Andric    SUBF, SUBF8,
1015349cc55cSDimitry Andric    SUBF8_rec, SUBF_rec,
1016349cc55cSDimitry Andric    SUBFE, SUBFE8,
1017349cc55cSDimitry Andric    SUBFE8O, SUBFEO,
1018349cc55cSDimitry Andric    SUBF8O, SUBFO,
1019349cc55cSDimitry Andric    VADDUBM,
1020349cc55cSDimitry Andric    VADDUDM,
1021349cc55cSDimitry Andric    VADDUHM,
1022349cc55cSDimitry Andric    VADDUWM,
1023349cc55cSDimitry Andric    VAND,
1024349cc55cSDimitry Andric    VANDC,
1025349cc55cSDimitry Andric    VCMPEQUB,
1026349cc55cSDimitry Andric    VCMPEQUD,
1027349cc55cSDimitry Andric    VCMPEQUH,
1028349cc55cSDimitry Andric    VCMPEQUW,
1029349cc55cSDimitry Andric    VCMPGTSB,
1030349cc55cSDimitry Andric    VCMPGTSD,
1031349cc55cSDimitry Andric    VCMPGTSH,
1032349cc55cSDimitry Andric    VCMPGTSW,
1033349cc55cSDimitry Andric    VCMPGTUB,
1034349cc55cSDimitry Andric    VCMPGTUD,
1035349cc55cSDimitry Andric    VCMPGTUH,
1036349cc55cSDimitry Andric    VCMPGTUW,
1037349cc55cSDimitry Andric    VCMPNEB,
1038349cc55cSDimitry Andric    VCMPNEH,
1039349cc55cSDimitry Andric    VCMPNEW,
1040349cc55cSDimitry Andric    VCMPNEZB,
1041349cc55cSDimitry Andric    VCMPNEZH,
1042349cc55cSDimitry Andric    VCMPNEZW,
1043349cc55cSDimitry Andric    VEQV,
1044349cc55cSDimitry Andric    VMAXSB,
1045349cc55cSDimitry Andric    VMAXSD,
1046349cc55cSDimitry Andric    VMAXSH,
1047349cc55cSDimitry Andric    VMAXSW,
1048349cc55cSDimitry Andric    VMAXUB,
1049349cc55cSDimitry Andric    VMAXUD,
1050349cc55cSDimitry Andric    VMAXUH,
1051349cc55cSDimitry Andric    VMAXUW,
1052349cc55cSDimitry Andric    VMINSB,
1053349cc55cSDimitry Andric    VMINSD,
1054349cc55cSDimitry Andric    VMINSH,
1055349cc55cSDimitry Andric    VMINSW,
1056349cc55cSDimitry Andric    VMINUB,
1057349cc55cSDimitry Andric    VMINUD,
1058349cc55cSDimitry Andric    VMINUH,
1059349cc55cSDimitry Andric    VMINUW,
1060349cc55cSDimitry Andric    VMRGEW,
1061349cc55cSDimitry Andric    VMRGOW,
1062349cc55cSDimitry Andric    VNAND,
1063349cc55cSDimitry Andric    VNOR,
1064349cc55cSDimitry Andric    VOR,
1065349cc55cSDimitry Andric    VORC,
1066349cc55cSDimitry Andric    VRLB,
1067349cc55cSDimitry Andric    VRLD,
1068349cc55cSDimitry Andric    VRLDNM,
1069349cc55cSDimitry Andric    VRLH,
1070349cc55cSDimitry Andric    VRLW,
1071349cc55cSDimitry Andric    VRLWNM,
1072349cc55cSDimitry Andric    VSLB,
1073349cc55cSDimitry Andric    VSLD,
1074349cc55cSDimitry Andric    VSLH,
1075349cc55cSDimitry Andric    VSLW,
1076349cc55cSDimitry Andric    VSRAB,
1077349cc55cSDimitry Andric    VSRAD,
1078349cc55cSDimitry Andric    VSRAH,
1079349cc55cSDimitry Andric    VSRAW,
1080349cc55cSDimitry Andric    VSRB,
1081349cc55cSDimitry Andric    VSRD,
1082349cc55cSDimitry Andric    VSRH,
1083349cc55cSDimitry Andric    VSRW,
1084349cc55cSDimitry Andric    VSUBUBM,
1085349cc55cSDimitry Andric    VSUBUDM,
1086349cc55cSDimitry Andric    VSUBUHM,
1087349cc55cSDimitry Andric    VSUBUWM,
108806c3fb27SDimitry Andric    VXOR, V_SET0, V_SET0B, V_SET0H,
1089349cc55cSDimitry Andric    XOR, XOR8,
1090349cc55cSDimitry Andric    XOR8_rec, XOR_rec,
1091349cc55cSDimitry Andric    XSCPSGNDP,
1092349cc55cSDimitry Andric    XSCPSGNQP,
1093349cc55cSDimitry Andric    XSIEXPDP,
1094349cc55cSDimitry Andric    XSIEXPQP,
1095349cc55cSDimitry Andric    XVCPSGNDP,
1096349cc55cSDimitry Andric    XVCPSGNSP,
1097349cc55cSDimitry Andric    XVIEXPDP,
1098349cc55cSDimitry Andric    XVIEXPSP,
1099349cc55cSDimitry Andric    XXLAND,
1100349cc55cSDimitry Andric    XXLANDC,
110106c3fb27SDimitry Andric    XXLEQV, XXLEQVOnes,
1102349cc55cSDimitry Andric    XXLNAND,
1103349cc55cSDimitry Andric    XXLNOR,
1104349cc55cSDimitry Andric    XXLOR, XXLORf,
110506c3fb27SDimitry Andric    XXLORC,
110606c3fb27SDimitry Andric    XXLXOR, XXLXORdpz, XXLXORspz, XXLXORz
1107349cc55cSDimitry Andric)>;
1108349cc55cSDimitry Andric
1109349cc55cSDimitry Andric// 3 Cycles ALU operations, 3 input operands
1110349cc55cSDimitry Andricdef : InstRW<[P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read, P10FX_Read],
1111349cc55cSDimitry Andric      (instrs
1112349cc55cSDimitry Andric    ISEL, ISEL8,
1113349cc55cSDimitry Andric    VRLDMI,
1114349cc55cSDimitry Andric    VRLWMI,
1115349cc55cSDimitry Andric    VSEL,
1116349cc55cSDimitry Andric    XXSEL
1117349cc55cSDimitry Andric)>;
1118349cc55cSDimitry Andric
1119349cc55cSDimitry Andric// Single crack instructions
1120349cc55cSDimitry Andric// 3 Cycles ALU operations, 0 input operands
1121349cc55cSDimitry Andricdef : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_DISP_ANY],
1122349cc55cSDimitry Andric      (instrs
1123349cc55cSDimitry Andric    MFFS,
1124349cc55cSDimitry Andric    MFFS_rec,
112506c3fb27SDimitry Andric    MFFSCDRNI,
112606c3fb27SDimitry Andric    MFFSCRNI,
1127349cc55cSDimitry Andric    MFFSL,
1128349cc55cSDimitry Andric    MFVSCR,
11295f757f3fSDimitry Andric    MTFSB0
1130349cc55cSDimitry Andric)>;
1131349cc55cSDimitry Andric
1132349cc55cSDimitry Andric// Single crack instructions
1133349cc55cSDimitry Andric// 3 Cycles ALU operations, 1 input operands
1134349cc55cSDimitry Andricdef : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10FX_Read],
1135349cc55cSDimitry Andric      (instrs
113606c3fb27SDimitry Andric    ADDIC_rec,
1137349cc55cSDimitry Andric    ADDME8_rec, ADDME_rec,
1138349cc55cSDimitry Andric    ADDME8O_rec, ADDMEO_rec,
1139349cc55cSDimitry Andric    ADDZE8_rec, ADDZE_rec,
1140349cc55cSDimitry Andric    ADDZE8O_rec, ADDZEO_rec,
1141349cc55cSDimitry Andric    MCRFS,
1142349cc55cSDimitry Andric    MFFSCDRN,
1143349cc55cSDimitry Andric    MFFSCRN,
1144349cc55cSDimitry Andric    MTVSCR,
1145349cc55cSDimitry Andric    NEG8O_rec, NEGO_rec,
1146349cc55cSDimitry Andric    SUBFME8_rec, SUBFME_rec,
1147349cc55cSDimitry Andric    SUBFME8O_rec, SUBFMEO_rec,
1148349cc55cSDimitry Andric    SUBFZE8_rec, SUBFZE_rec,
11495f757f3fSDimitry Andric    SUBFZE8O_rec, SUBFZEO_rec
1150349cc55cSDimitry Andric)>;
1151349cc55cSDimitry Andric
1152349cc55cSDimitry Andric// Single crack instructions
1153349cc55cSDimitry Andric// 3 Cycles ALU operations, 2 input operands
1154349cc55cSDimitry Andricdef : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10FX_Read, P10FX_Read],
1155349cc55cSDimitry Andric      (instrs
1156349cc55cSDimitry Andric    ADDE8_rec, ADDE_rec,
1157349cc55cSDimitry Andric    ADDE8O_rec, ADDEO_rec,
1158349cc55cSDimitry Andric    ADD4O_rec, ADD8O_rec,
1159349cc55cSDimitry Andric    SUBFE8_rec, SUBFE_rec,
1160349cc55cSDimitry Andric    SUBFE8O_rec, SUBFEO_rec,
1161349cc55cSDimitry Andric    SUBF8O_rec, SUBFO_rec
1162349cc55cSDimitry Andric)>;
1163349cc55cSDimitry Andric
1164349cc55cSDimitry Andric// 2-way crack instructions
116506c3fb27SDimitry Andric// 3 Cycles ALU operations, and 4 Cycles ALU2 operations, 2 input operands
116606c3fb27SDimitry Andricdef : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_F2_4C, P10W_DISP_ANY],
116706c3fb27SDimitry Andric      (instrs
116806c3fb27SDimitry Andric    ADDG6S, ADDG6S8
116906c3fb27SDimitry Andric)>;
117006c3fb27SDimitry Andric
117106c3fb27SDimitry Andric// 2-way crack instructions
1172349cc55cSDimitry Andric// 3 Cycles ALU operations, and 3 Cycles ALU operations, 0 input operands
1173349cc55cSDimitry Andricdef : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
1174349cc55cSDimitry Andric      (instrs
1175349cc55cSDimitry Andric    HRFID,
1176349cc55cSDimitry Andric    MFFSCE,
117706c3fb27SDimitry Andric    MTFSB1,
117806c3fb27SDimitry Andric    MTFSFI, MTFSFIb,
117906c3fb27SDimitry Andric    MTFSFI_rec,
118006c3fb27SDimitry Andric    RFEBB,
1181349cc55cSDimitry Andric    RFID,
118206c3fb27SDimitry Andric    SC,
1183349cc55cSDimitry Andric    STOP
1184349cc55cSDimitry Andric)>;
1185349cc55cSDimitry Andric
1186349cc55cSDimitry Andric// 2-way crack instructions
1187349cc55cSDimitry Andric// 3 Cycles ALU operations, and 3 Cycles ALU operations, 1 input operands
1188349cc55cSDimitry Andricdef : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10FX_Read],
1189349cc55cSDimitry Andric      (instrs
1190349cc55cSDimitry Andric    FABSD_rec, FABSS_rec,
1191349cc55cSDimitry Andric    FMR_rec,
1192349cc55cSDimitry Andric    FNABSD_rec, FNABSS_rec,
1193349cc55cSDimitry Andric    FNEGD_rec, FNEGS_rec,
119406c3fb27SDimitry Andric    MTFSF, MTFSFb,
119506c3fb27SDimitry Andric    MTFSF_rec
1196349cc55cSDimitry Andric)>;
1197349cc55cSDimitry Andric
1198349cc55cSDimitry Andric// 2-way crack instructions
1199349cc55cSDimitry Andric// 3 Cycles ALU operations, and 3 Cycles ALU operations, 2 input operands
1200349cc55cSDimitry Andricdef : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read],
1201349cc55cSDimitry Andric      (instrs
1202349cc55cSDimitry Andric    ADDC, ADDC8,
1203349cc55cSDimitry Andric    ADDC8_rec, ADDC_rec,
1204349cc55cSDimitry Andric    ADDC8O, ADDCO,
1205349cc55cSDimitry Andric    FCPSGND_rec, FCPSGNS_rec,
1206349cc55cSDimitry Andric    SUBFC, SUBFC8,
1207349cc55cSDimitry Andric    SUBFC8_rec, SUBFC_rec,
1208349cc55cSDimitry Andric    SUBFC8O, SUBFCO
1209349cc55cSDimitry Andric)>;
1210349cc55cSDimitry Andric
1211349cc55cSDimitry Andric// 4-way crack instructions
1212349cc55cSDimitry Andric// 3 Cycles ALU operations, 3 Cycles ALU operations, 3 Cycles ALU operations, and 3 Cycles ALU operations, 2 input operands
1213349cc55cSDimitry Andricdef : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY, P10FX_Read, P10FX_Read],
1214349cc55cSDimitry Andric      (instrs
1215349cc55cSDimitry Andric    ADDC8O_rec, ADDCO_rec,
1216349cc55cSDimitry Andric    SUBFC8O_rec, SUBFCO_rec
1217349cc55cSDimitry Andric)>;
1218349cc55cSDimitry Andric
1219349cc55cSDimitry Andric// 2-way crack instructions
1220349cc55cSDimitry Andric// 3 Cycles ALU operations, and 4 Cycles Permute operations, 1 input operands
1221349cc55cSDimitry Andricdef : InstRW<[P10W_FX_3C, P10W_DISP_EVEN, P10W_PM_4C, P10W_DISP_ANY],
1222349cc55cSDimitry Andric      (instrs
1223349cc55cSDimitry Andric    VSTRIBL_rec,
1224349cc55cSDimitry Andric    VSTRIBR_rec,
1225349cc55cSDimitry Andric    VSTRIHL_rec,
1226349cc55cSDimitry Andric    VSTRIHR_rec
1227349cc55cSDimitry Andric)>;
1228349cc55cSDimitry Andric
1229349cc55cSDimitry Andric// 2-way crack instructions
123006c3fb27SDimitry Andric// 3 Cycles ALU operations, and 3 Cycles ALU operations, 1 input operands
123106c3fb27SDimitry Andricdef : InstRW<[P10W_FX_3C, P10W_DISP_PAIR, P10W_FX_3C, P10FX_Read],
1232349cc55cSDimitry Andric      (instrs
1233349cc55cSDimitry Andric    MTCRF, MTCRF8
1234349cc55cSDimitry Andric)>;
1235349cc55cSDimitry Andric
123606c3fb27SDimitry Andric// 6 Cycles Load operations, 0 input operands
123706c3fb27SDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_ANY],
123806c3fb27SDimitry Andric      (instrs
123906c3fb27SDimitry Andric    LBZ, LBZ8,
124006c3fb27SDimitry Andric    LD, LDtoc, LDtocBA, LDtocCPT, LDtocJTI,  LDtocL, SPILLTOVSR_LD,
124106c3fb27SDimitry Andric    DFLOADf32, DFLOADf64, LFD,
124206c3fb27SDimitry Andric    LHA, LHA8,
124306c3fb27SDimitry Andric    LHZ, LHZ8,
124406c3fb27SDimitry Andric    LWA, LWA_32,
124506c3fb27SDimitry Andric    LWZ, LWZ8, LWZtoc, LWZtocL,
124606c3fb27SDimitry Andric    LXSD,
124706c3fb27SDimitry Andric    LXV
124806c3fb27SDimitry Andric)>;
124906c3fb27SDimitry Andric
1250349cc55cSDimitry Andric// 6 Cycles Load operations, 1 input operands
1251349cc55cSDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_ANY, P10LD_Read],
1252349cc55cSDimitry Andric      (instrs
125306c3fb27SDimitry Andric    LXVL,
125406c3fb27SDimitry Andric    LXVLL
125506c3fb27SDimitry Andric)>;
125606c3fb27SDimitry Andric
125706c3fb27SDimitry Andric// 6 Cycles Load operations, 2 input operands
125806c3fb27SDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_ANY, P10LD_Read, P10LD_Read],
125906c3fb27SDimitry Andric      (instrs
126006c3fb27SDimitry Andric    DCBT,
126106c3fb27SDimitry Andric    DCBTST,
126206c3fb27SDimitry Andric    ICBT,
126306c3fb27SDimitry Andric    LBZX, LBZX8, LBZXTLS, LBZXTLS_, LBZXTLS_32,
1264349cc55cSDimitry Andric    LDBRX,
126506c3fb27SDimitry Andric    LDX, LDXTLS, LDXTLS_, SPILLTOVSR_LDX,
126606c3fb27SDimitry Andric    LFDX, LFDXTLS, LFDXTLS_, XFLOADf32, XFLOADf64,
1267349cc55cSDimitry Andric    LFIWAX, LIWAX,
1268349cc55cSDimitry Andric    LFIWZX, LIWZX,
126906c3fb27SDimitry Andric    LHAX, LHAX8, LHAXTLS, LHAXTLS_, LHAXTLS_32,
1270349cc55cSDimitry Andric    LHBRX, LHBRX8,
127106c3fb27SDimitry Andric    LHZX, LHZX8, LHZXTLS, LHZXTLS_, LHZXTLS_32,
1272349cc55cSDimitry Andric    LVEBX,
1273349cc55cSDimitry Andric    LVEHX,
1274349cc55cSDimitry Andric    LVEWX,
1275349cc55cSDimitry Andric    LVX,
1276349cc55cSDimitry Andric    LVXL,
127706c3fb27SDimitry Andric    LWAX, LWAXTLS, LWAXTLS_, LWAXTLS_32, LWAX_32,
1278349cc55cSDimitry Andric    LWBRX, LWBRX8,
127906c3fb27SDimitry Andric    LWZX, LWZX8, LWZXTLS, LWZXTLS_, LWZXTLS_32,
1280349cc55cSDimitry Andric    LXSDX,
1281349cc55cSDimitry Andric    LXSIBZX,
1282349cc55cSDimitry Andric    LXSIHZX,
1283349cc55cSDimitry Andric    LXSIWAX,
1284349cc55cSDimitry Andric    LXSIWZX,
1285349cc55cSDimitry Andric    LXVB16X,
1286349cc55cSDimitry Andric    LXVD2X,
1287349cc55cSDimitry Andric    LXVDSX,
1288349cc55cSDimitry Andric    LXVH8X,
1289349cc55cSDimitry Andric    LXVRBX,
1290349cc55cSDimitry Andric    LXVRDX,
1291349cc55cSDimitry Andric    LXVRHX,
1292349cc55cSDimitry Andric    LXVRWX,
1293349cc55cSDimitry Andric    LXVW4X,
1294349cc55cSDimitry Andric    LXVWSX,
1295349cc55cSDimitry Andric    LXVX
1296349cc55cSDimitry Andric)>;
1297349cc55cSDimitry Andric
1298349cc55cSDimitry Andric// 2-way crack instructions
129906c3fb27SDimitry Andric// 6 Cycles Load operations, and 13 Cycles Decimal Floating Point operations, 1 input operands
1300349cc55cSDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_DF_13C, P10W_DISP_ANY],
1301349cc55cSDimitry Andric      (instrs
130204eeddc0SDimitry Andric    HASHCHK, HASHCHK8,
130304eeddc0SDimitry Andric    HASHCHKP, HASHCHKP8
1304349cc55cSDimitry Andric)>;
1305349cc55cSDimitry Andric
1306349cc55cSDimitry Andric// Single crack instructions
1307349cc55cSDimitry Andric// 6 Cycles Load operations, 0 input operands
1308349cc55cSDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_DISP_ANY],
1309349cc55cSDimitry Andric      (instrs
131006c3fb27SDimitry Andric    DARN,
1311349cc55cSDimitry Andric    SLBIA
1312349cc55cSDimitry Andric)>;
1313349cc55cSDimitry Andric
1314349cc55cSDimitry Andric// Single crack instructions
1315349cc55cSDimitry Andric// 6 Cycles Load operations, 1 input operands
1316349cc55cSDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_DISP_ANY, P10LD_Read],
1317349cc55cSDimitry Andric      (instrs
131806c3fb27SDimitry Andric    MTSPR, MTSPR8, MTSR, MTUDSCR, MTVRSAVE, MTVRSAVEv,
1319349cc55cSDimitry Andric    SLBFEE_rec,
1320349cc55cSDimitry Andric    SLBIE,
1321349cc55cSDimitry Andric    SLBMFEE,
1322349cc55cSDimitry Andric    SLBMFEV
1323349cc55cSDimitry Andric)>;
1324349cc55cSDimitry Andric
1325349cc55cSDimitry Andric// Single crack instructions
1326349cc55cSDimitry Andric// 6 Cycles Load operations, 2 input operands
1327349cc55cSDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_DISP_ANY, P10LD_Read, P10LD_Read],
1328349cc55cSDimitry Andric      (instrs
132906c3fb27SDimitry Andric    LBARX, LBARXL,
1330349cc55cSDimitry Andric    LBZCIX,
133106c3fb27SDimitry Andric    LDARX, LDARXL,
1332349cc55cSDimitry Andric    LDCIX,
133306c3fb27SDimitry Andric    LHARX, LHARXL,
1334349cc55cSDimitry Andric    LHZCIX,
133506c3fb27SDimitry Andric    LWARX, LWARXL,
133606c3fb27SDimitry Andric    LWZCIX
133706c3fb27SDimitry Andric)>;
133806c3fb27SDimitry Andric
133906c3fb27SDimitry Andric// Expand instructions
134006c3fb27SDimitry Andric// 6 Cycles Load operations, 6 Cycles Load operations, 6 Cycles Load operations, and 6 Cycles Load operations, 0 input operands
134106c3fb27SDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_LD_6C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY],
134206c3fb27SDimitry Andric      (instrs
134306c3fb27SDimitry Andric    LMW
1344349cc55cSDimitry Andric)>;
1345349cc55cSDimitry Andric
1346349cc55cSDimitry Andric// Expand instructions
1347349cc55cSDimitry Andric// 6 Cycles Load operations, 6 Cycles Load operations, 6 Cycles Load operations, and 6 Cycles Load operations, 1 input operands
1348349cc55cSDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_LD_6C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY, P10LD_Read],
1349349cc55cSDimitry Andric      (instrs
1350349cc55cSDimitry Andric    LSWI
1351349cc55cSDimitry Andric)>;
1352349cc55cSDimitry Andric
1353349cc55cSDimitry Andric// 2-way crack instructions
135406c3fb27SDimitry Andric// 6 Cycles Load operations, and 3 Cycles Simple Fixed-point (SFX) operations, 0 input operands
1355349cc55cSDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_SX_3C, P10W_DISP_ANY],
1356349cc55cSDimitry Andric      (instrs
1357349cc55cSDimitry Andric    LBZU, LBZU8,
1358349cc55cSDimitry Andric    LDU,
1359349cc55cSDimitry Andric    LFDU,
1360349cc55cSDimitry Andric    LHAU, LHAU8,
1361349cc55cSDimitry Andric    LHZU, LHZU8,
136206c3fb27SDimitry Andric    LWZU, LWZU8
136306c3fb27SDimitry Andric)>;
136406c3fb27SDimitry Andric
136506c3fb27SDimitry Andric// 2-way crack instructions
136606c3fb27SDimitry Andric// 6 Cycles Load operations, and 3 Cycles Simple Fixed-point (SFX) operations, 2 input operands
136706c3fb27SDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_EVEN, P10W_SX_3C, P10W_DISP_ANY],
136806c3fb27SDimitry Andric      (instrs
136906c3fb27SDimitry Andric    LBZUX, LBZUX8,
137006c3fb27SDimitry Andric    LDUX,
137106c3fb27SDimitry Andric    LFDUX,
137206c3fb27SDimitry Andric    LHAUX, LHAUX8,
1373349cc55cSDimitry Andric    LHZUX, LHZUX8,
1374349cc55cSDimitry Andric    LWAUX,
1375349cc55cSDimitry Andric    LWZUX, LWZUX8
1376349cc55cSDimitry Andric)>;
1377349cc55cSDimitry Andric
137806c3fb27SDimitry Andric// 6 Cycles Load operations, 0 input operands
137906c3fb27SDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_PAIR],
1380349cc55cSDimitry Andric      (instrs
1381349cc55cSDimitry Andric    PLBZ, PLBZ8, PLBZ8pc, PLBZpc,
1382349cc55cSDimitry Andric    PLD, PLDpc,
1383349cc55cSDimitry Andric    PLFD, PLFDpc,
1384349cc55cSDimitry Andric    PLFS, PLFSpc,
1385349cc55cSDimitry Andric    PLHA, PLHA8, PLHA8pc, PLHApc,
1386349cc55cSDimitry Andric    PLHZ, PLHZ8, PLHZ8pc, PLHZpc,
1387349cc55cSDimitry Andric    PLWA, PLWA8, PLWA8pc, PLWApc,
1388349cc55cSDimitry Andric    PLWZ, PLWZ8, PLWZ8pc, PLWZpc,
1389349cc55cSDimitry Andric    PLXSD, PLXSDpc,
1390349cc55cSDimitry Andric    PLXSSP, PLXSSPpc,
1391349cc55cSDimitry Andric    PLXV, PLXVpc,
1392349cc55cSDimitry Andric    PLXVP, PLXVPpc
1393349cc55cSDimitry Andric)>;
1394349cc55cSDimitry Andric
1395349cc55cSDimitry Andric// 2-way crack instructions
139606c3fb27SDimitry Andric// 6 Cycles Load operations, and 4 Cycles ALU2 operations, 0 input operands
1397349cc55cSDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_F2_4C],
1398349cc55cSDimitry Andric      (instrs
1399349cc55cSDimitry Andric    LFS,
140006c3fb27SDimitry Andric    LXSSP
140106c3fb27SDimitry Andric)>;
140206c3fb27SDimitry Andric
140306c3fb27SDimitry Andric// 2-way crack instructions
140406c3fb27SDimitry Andric// 6 Cycles Load operations, and 4 Cycles ALU2 operations, 2 input operands
140506c3fb27SDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_F2_4C],
140606c3fb27SDimitry Andric      (instrs
140706c3fb27SDimitry Andric    LFSX, LFSXTLS, LFSXTLS_,
1408349cc55cSDimitry Andric    LXSSPX
1409349cc55cSDimitry Andric)>;
1410349cc55cSDimitry Andric
1411349cc55cSDimitry Andric// 4-way crack instructions
141206c3fb27SDimitry Andric// 6 Cycles Load operations, 4 Cycles ALU2 operations, 3 Cycles Simple Fixed-point (SFX) operations, and 3 Cycles ALU operations, 0 input operands
1413349cc55cSDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_F2_4C, P10W_SX_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY],
1414349cc55cSDimitry Andric      (instrs
141506c3fb27SDimitry Andric    LFSU
141606c3fb27SDimitry Andric)>;
141706c3fb27SDimitry Andric
141806c3fb27SDimitry Andric// 4-way crack instructions
141906c3fb27SDimitry Andric// 6 Cycles Load operations, 4 Cycles ALU2 operations, 3 Cycles Simple Fixed-point (SFX) operations, and 3 Cycles ALU operations, 2 input operands
142006c3fb27SDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_F2_4C, P10W_SX_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY],
142106c3fb27SDimitry Andric      (instrs
1422349cc55cSDimitry Andric    LFSUX
1423349cc55cSDimitry Andric)>;
1424349cc55cSDimitry Andric
1425349cc55cSDimitry Andric// 2-way crack instructions
1426349cc55cSDimitry Andric// 6 Cycles Load operations, and 6 Cycles Load operations, 1 input operands
1427349cc55cSDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_LD_6C, P10W_DISP_PAIR, P10LD_Read],
1428349cc55cSDimitry Andric      (instrs
1429349cc55cSDimitry Andric    TLBIEL
1430349cc55cSDimitry Andric)>;
1431349cc55cSDimitry Andric
1432349cc55cSDimitry Andric// 2-way crack instructions
1433349cc55cSDimitry Andric// 6 Cycles Load operations, and 6 Cycles Load operations, 2 input operands
1434349cc55cSDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_LD_6C, P10W_DISP_PAIR, P10LD_Read, P10LD_Read],
1435349cc55cSDimitry Andric      (instrs
1436349cc55cSDimitry Andric    SLBMTE
1437349cc55cSDimitry Andric)>;
1438349cc55cSDimitry Andric
1439349cc55cSDimitry Andric// 2-way crack instructions
144006c3fb27SDimitry Andric// 6 Cycles Load operations, and 3 Cycles Simple Fixed-point (SFX) operations, 0 input operands
1441349cc55cSDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_SX_3C],
1442349cc55cSDimitry Andric      (instrs
144306c3fb27SDimitry Andric    LXVP
144406c3fb27SDimitry Andric)>;
144506c3fb27SDimitry Andric
144606c3fb27SDimitry Andric// 2-way crack instructions
144706c3fb27SDimitry Andric// 6 Cycles Load operations, and 3 Cycles Simple Fixed-point (SFX) operations, 2 input operands
144806c3fb27SDimitry Andricdef : InstRW<[P10W_LD_6C, P10W_DISP_PAIR, P10W_SX_3C],
144906c3fb27SDimitry Andric      (instrs
1450349cc55cSDimitry Andric    LXVPX
1451349cc55cSDimitry Andric)>;
1452349cc55cSDimitry Andric
1453349cc55cSDimitry Andric// Single crack instructions
1454349cc55cSDimitry Andric// 13 Cycles Unknown operations, 1 input operands
1455349cc55cSDimitry Andricdef : InstRW<[P10W_MFL_13C, P10W_DISP_EVEN, P10W_DISP_ANY],
1456349cc55cSDimitry Andric      (instrs
145781ad6265SDimitry Andric    MFSPR, MFSPR8, MFSR, MFTB8, MFUDSCR, MFVRSAVE, MFVRSAVEv
1458349cc55cSDimitry Andric)>;
1459349cc55cSDimitry Andric
1460349cc55cSDimitry Andric// 10 Cycles SIMD Matrix Multiply Engine operations, 0 input operands
1461349cc55cSDimitry Andricdef : InstRW<[P10W_MM_10C, P10W_DISP_ANY],
1462349cc55cSDimitry Andric      (instrs
1463349cc55cSDimitry Andric    XXSETACCZ
1464349cc55cSDimitry Andric)>;
1465349cc55cSDimitry Andric
1466349cc55cSDimitry Andric// 10 Cycles SIMD Matrix Multiply Engine operations, 2 input operands
1467349cc55cSDimitry Andricdef : InstRW<[P10W_MM_10C, P10W_DISP_ANY, P10MM_Read, P10MM_Read],
1468349cc55cSDimitry Andric      (instrs
1469349cc55cSDimitry Andric    XVBF16GER2,
1470349cc55cSDimitry Andric    XVF16GER2,
1471349cc55cSDimitry Andric    XVF32GER,
1472349cc55cSDimitry Andric    XVF64GER,
1473349cc55cSDimitry Andric    XVI16GER2,
1474349cc55cSDimitry Andric    XVI16GER2S,
1475349cc55cSDimitry Andric    XVI4GER8,
1476349cc55cSDimitry Andric    XVI8GER4
1477349cc55cSDimitry Andric)>;
1478349cc55cSDimitry Andric
1479349cc55cSDimitry Andric// 10 Cycles SIMD Matrix Multiply Engine operations, 3 input operands
1480349cc55cSDimitry Andricdef : InstRW<[P10W_MM_10C, P10W_DISP_ANY, P10MM_Read, P10MM_Read, P10MM_Read],
1481349cc55cSDimitry Andric      (instrs
1482349cc55cSDimitry Andric    XVBF16GER2NN,
1483349cc55cSDimitry Andric    XVBF16GER2NP,
1484349cc55cSDimitry Andric    XVBF16GER2PN,
1485349cc55cSDimitry Andric    XVBF16GER2PP,
1486349cc55cSDimitry Andric    XVF16GER2NN,
1487349cc55cSDimitry Andric    XVF16GER2NP,
1488349cc55cSDimitry Andric    XVF16GER2PN,
1489349cc55cSDimitry Andric    XVF16GER2PP,
1490349cc55cSDimitry Andric    XVF32GERNN,
1491349cc55cSDimitry Andric    XVF32GERNP,
1492349cc55cSDimitry Andric    XVF32GERPN,
1493349cc55cSDimitry Andric    XVF32GERPP,
1494349cc55cSDimitry Andric    XVF64GERNN,
1495349cc55cSDimitry Andric    XVF64GERNP,
1496349cc55cSDimitry Andric    XVF64GERPN,
1497349cc55cSDimitry Andric    XVF64GERPP,
1498349cc55cSDimitry Andric    XVI16GER2PP,
1499349cc55cSDimitry Andric    XVI16GER2SPP,
1500349cc55cSDimitry Andric    XVI4GER8PP,
1501349cc55cSDimitry Andric    XVI8GER4PP,
1502349cc55cSDimitry Andric    XVI8GER4SPP
1503349cc55cSDimitry Andric)>;
1504349cc55cSDimitry Andric
150506c3fb27SDimitry Andric// 10 Cycles SIMD Matrix Multiply Engine operations, 2 input operands
150606c3fb27SDimitry Andricdef : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10MM_Read, P10MM_Read],
1507349cc55cSDimitry Andric      (instrs
1508349cc55cSDimitry Andric    PMXVBF16GER2,
1509349cc55cSDimitry Andric    PMXVF16GER2,
151006c3fb27SDimitry Andric    PMXVF32GER,
151106c3fb27SDimitry Andric    PMXVF64GER,
1512349cc55cSDimitry Andric    PMXVI16GER2,
1513349cc55cSDimitry Andric    PMXVI16GER2S,
1514349cc55cSDimitry Andric    PMXVI4GER8,
1515349cc55cSDimitry Andric    PMXVI8GER4
1516349cc55cSDimitry Andric)>;
1517349cc55cSDimitry Andric
151806c3fb27SDimitry Andric// 10 Cycles SIMD Matrix Multiply Engine operations, 3 input operands
151906c3fb27SDimitry Andricdef : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10MM_Read, P10MM_Read, P10MM_Read],
1520349cc55cSDimitry Andric      (instrs
1521349cc55cSDimitry Andric    PMXVBF16GER2NN,
1522349cc55cSDimitry Andric    PMXVBF16GER2NP,
1523349cc55cSDimitry Andric    PMXVBF16GER2PN,
1524349cc55cSDimitry Andric    PMXVBF16GER2PP,
1525349cc55cSDimitry Andric    PMXVF16GER2NN,
1526349cc55cSDimitry Andric    PMXVF16GER2NP,
1527349cc55cSDimitry Andric    PMXVF16GER2PN,
1528349cc55cSDimitry Andric    PMXVF16GER2PP,
152906c3fb27SDimitry Andric    PMXVF32GERNN,
153006c3fb27SDimitry Andric    PMXVF32GERNP,
153106c3fb27SDimitry Andric    PMXVF32GERPN,
153206c3fb27SDimitry Andric    PMXVF32GERPP,
153306c3fb27SDimitry Andric    PMXVF64GERNN,
153406c3fb27SDimitry Andric    PMXVF64GERNP,
153506c3fb27SDimitry Andric    PMXVF64GERPN,
153606c3fb27SDimitry Andric    PMXVF64GERPP,
1537349cc55cSDimitry Andric    PMXVI16GER2PP,
1538349cc55cSDimitry Andric    PMXVI16GER2SPP,
1539349cc55cSDimitry Andric    PMXVI4GER8PP,
1540349cc55cSDimitry Andric    PMXVI8GER4PP,
1541349cc55cSDimitry Andric    PMXVI8GER4SPP
1542349cc55cSDimitry Andric)>;
1543349cc55cSDimitry Andric
1544349cc55cSDimitry Andric// 2-way crack instructions
1545349cc55cSDimitry Andric// 10 Cycles SIMD Matrix Multiply Engine operations, and 3 Cycles ALU operations, 1 input operands
1546349cc55cSDimitry Andricdef : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10W_FX_3C],
1547349cc55cSDimitry Andric      (instrs
1548349cc55cSDimitry Andric    XXMTACC
1549349cc55cSDimitry Andric)>;
1550349cc55cSDimitry Andric
1551349cc55cSDimitry Andric// 4-way crack instructions
1552349cc55cSDimitry Andric// 10 Cycles SIMD Matrix Multiply Engine operations, 3 Cycles ALU operations, 10 Cycles SIMD Matrix Multiply Engine operations, and 3 Cycles ALU operations, 1 input operands
1553349cc55cSDimitry Andricdef : InstRW<[P10W_MM_10C, P10W_DISP_PAIR, P10W_FX_3C, P10W_MM_10C, P10W_DISP_PAIR, P10W_FX_3C],
1554349cc55cSDimitry Andric      (instrs
1555349cc55cSDimitry Andric    XXMFACC
1556349cc55cSDimitry Andric)>;
1557349cc55cSDimitry Andric
155806c3fb27SDimitry Andric// 5 Cycles GPR Multiply operations, 1 input operands
155906c3fb27SDimitry Andricdef : InstRW<[P10W_MU_5C, P10W_DISP_ANY, P10MU_Read],
156006c3fb27SDimitry Andric      (instrs
156106c3fb27SDimitry Andric    MULLI, MULLI8
156206c3fb27SDimitry Andric)>;
156306c3fb27SDimitry Andric
1564349cc55cSDimitry Andric// 5 Cycles GPR Multiply operations, 2 input operands
1565349cc55cSDimitry Andricdef : InstRW<[P10W_MU_5C, P10W_DISP_ANY, P10MU_Read, P10MU_Read],
1566349cc55cSDimitry Andric      (instrs
1567349cc55cSDimitry Andric    MULHD,
1568349cc55cSDimitry Andric    MULHDU,
1569349cc55cSDimitry Andric    MULHW,
1570349cc55cSDimitry Andric    MULHWU,
1571349cc55cSDimitry Andric    MULLD,
1572349cc55cSDimitry Andric    MULLDO,
1573349cc55cSDimitry Andric    MULLW,
1574349cc55cSDimitry Andric    MULLWO,
1575349cc55cSDimitry Andric    VMULHSD,
1576349cc55cSDimitry Andric    VMULHUD,
1577349cc55cSDimitry Andric    VMULLD
1578349cc55cSDimitry Andric)>;
1579349cc55cSDimitry Andric
1580349cc55cSDimitry Andric// 5 Cycles GPR Multiply operations, 3 input operands
1581349cc55cSDimitry Andricdef : InstRW<[P10W_MU_5C, P10W_DISP_ANY, P10MU_Read, P10MU_Read, P10MU_Read],
1582349cc55cSDimitry Andric      (instrs
1583349cc55cSDimitry Andric    MADDHD,
1584349cc55cSDimitry Andric    MADDHDU,
1585349cc55cSDimitry Andric    MADDLD, MADDLD8
1586349cc55cSDimitry Andric)>;
1587349cc55cSDimitry Andric
1588349cc55cSDimitry Andric// 2-way crack instructions
1589349cc55cSDimitry Andric// 5 Cycles GPR Multiply operations, and 3 Cycles ALU operations, 2 input operands
1590349cc55cSDimitry Andricdef : InstRW<[P10W_MU_5C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
1591349cc55cSDimitry Andric      (instrs
1592349cc55cSDimitry Andric    MULHD_rec,
1593349cc55cSDimitry Andric    MULHDU_rec,
1594349cc55cSDimitry Andric    MULHW_rec,
1595349cc55cSDimitry Andric    MULHWU_rec,
1596349cc55cSDimitry Andric    MULLD_rec,
1597349cc55cSDimitry Andric    MULLDO_rec,
1598349cc55cSDimitry Andric    MULLW_rec,
1599349cc55cSDimitry Andric    MULLWO_rec
1600349cc55cSDimitry Andric)>;
1601349cc55cSDimitry Andric
1602349cc55cSDimitry Andric// 4 Cycles Permute operations, 0 input operands
1603349cc55cSDimitry Andricdef : InstRW<[P10W_PM_4C, P10W_DISP_ANY],
1604349cc55cSDimitry Andric      (instrs
160506c3fb27SDimitry Andric    LXVKQ,
160606c3fb27SDimitry Andric    VSPLTISB,
160706c3fb27SDimitry Andric    VSPLTISH,
160806c3fb27SDimitry Andric    VSPLTISW, V_SETALLONES, V_SETALLONESB, V_SETALLONESH,
160906c3fb27SDimitry Andric    XXSPLTIB
1610349cc55cSDimitry Andric)>;
1611349cc55cSDimitry Andric
1612349cc55cSDimitry Andric// 4 Cycles Permute operations, 1 input operands
1613349cc55cSDimitry Andricdef : InstRW<[P10W_PM_4C, P10W_DISP_ANY, P10PM_Read],
1614349cc55cSDimitry Andric      (instrs
1615bdd1243dSDimitry Andric    BRD,
1616bdd1243dSDimitry Andric    BRH, BRH8,
1617bdd1243dSDimitry Andric    BRW, BRW8,
1618349cc55cSDimitry Andric    MFVSRLD,
1619349cc55cSDimitry Andric    MTVSRWS,
1620349cc55cSDimitry Andric    VCLZLSBB,
1621349cc55cSDimitry Andric    VCTZLSBB,
162206c3fb27SDimitry Andric    VEXTRACTD,
162306c3fb27SDimitry Andric    VEXTRACTUB,
162406c3fb27SDimitry Andric    VEXTRACTUH,
162506c3fb27SDimitry Andric    VEXTRACTUW,
1626349cc55cSDimitry Andric    VGBBD,
162706c3fb27SDimitry Andric    VINSERTD,
162806c3fb27SDimitry Andric    VINSERTW,
1629349cc55cSDimitry Andric    VPRTYBQ,
163006c3fb27SDimitry Andric    VSPLTB, VSPLTBs,
163106c3fb27SDimitry Andric    VSPLTH, VSPLTHs,
163206c3fb27SDimitry Andric    VSPLTW,
1633349cc55cSDimitry Andric    VSTRIBL,
1634349cc55cSDimitry Andric    VSTRIBR,
1635349cc55cSDimitry Andric    VSTRIHL,
1636349cc55cSDimitry Andric    VSTRIHR,
1637349cc55cSDimitry Andric    VUPKHPX,
1638349cc55cSDimitry Andric    VUPKHSB,
1639349cc55cSDimitry Andric    VUPKHSH,
1640349cc55cSDimitry Andric    VUPKHSW,
1641349cc55cSDimitry Andric    VUPKLPX,
1642349cc55cSDimitry Andric    VUPKLSB,
1643349cc55cSDimitry Andric    VUPKLSH,
1644349cc55cSDimitry Andric    VUPKLSW,
1645349cc55cSDimitry Andric    XVCVBF16SPN,
1646349cc55cSDimitry Andric    XXBRD,
1647349cc55cSDimitry Andric    XXBRH,
1648349cc55cSDimitry Andric    XXBRQ,
1649349cc55cSDimitry Andric    XXBRW,
165006c3fb27SDimitry Andric    XXEXTRACTUW,
165106c3fb27SDimitry Andric    XXGENPCVDM,
165206c3fb27SDimitry Andric    XXGENPCVHM,
165306c3fb27SDimitry Andric    XXGENPCVWM,
165406c3fb27SDimitry Andric    XXSPLTW, XXSPLTWs
1655349cc55cSDimitry Andric)>;
1656349cc55cSDimitry Andric
1657349cc55cSDimitry Andric// 4 Cycles Permute operations, 2 input operands
1658349cc55cSDimitry Andricdef : InstRW<[P10W_PM_4C, P10W_DISP_ANY, P10PM_Read, P10PM_Read],
1659349cc55cSDimitry Andric      (instrs
1660349cc55cSDimitry Andric    BPERMD,
166106c3fb27SDimitry Andric    LVSL,
166206c3fb27SDimitry Andric    LVSR,
1663349cc55cSDimitry Andric    MTVSRDD,
1664349cc55cSDimitry Andric    VBPERMD,
1665349cc55cSDimitry Andric    VBPERMQ,
1666349cc55cSDimitry Andric    VCLRLB,
1667349cc55cSDimitry Andric    VCLRRB,
1668349cc55cSDimitry Andric    VEXTUBLX,
1669349cc55cSDimitry Andric    VEXTUBRX,
1670349cc55cSDimitry Andric    VEXTUHLX,
1671349cc55cSDimitry Andric    VEXTUHRX,
1672349cc55cSDimitry Andric    VEXTUWLX,
1673349cc55cSDimitry Andric    VEXTUWRX,
167406c3fb27SDimitry Andric    VINSD,
167506c3fb27SDimitry Andric    VINSERTB,
167606c3fb27SDimitry Andric    VINSERTH,
167706c3fb27SDimitry Andric    VINSW,
1678349cc55cSDimitry Andric    VMRGHB,
1679349cc55cSDimitry Andric    VMRGHH,
1680349cc55cSDimitry Andric    VMRGHW,
1681349cc55cSDimitry Andric    VMRGLB,
1682349cc55cSDimitry Andric    VMRGLH,
1683349cc55cSDimitry Andric    VMRGLW,
1684349cc55cSDimitry Andric    VPKPX,
1685349cc55cSDimitry Andric    VPKSDSS,
1686349cc55cSDimitry Andric    VPKSDUS,
1687349cc55cSDimitry Andric    VPKSHSS,
1688349cc55cSDimitry Andric    VPKSHUS,
1689349cc55cSDimitry Andric    VPKSWSS,
1690349cc55cSDimitry Andric    VPKSWUS,
1691349cc55cSDimitry Andric    VPKUDUM,
1692349cc55cSDimitry Andric    VPKUDUS,
1693349cc55cSDimitry Andric    VPKUHUM,
1694349cc55cSDimitry Andric    VPKUHUS,
1695349cc55cSDimitry Andric    VPKUWUM,
1696349cc55cSDimitry Andric    VPKUWUS,
1697349cc55cSDimitry Andric    VSL,
169806c3fb27SDimitry Andric    VSLDBI,
169906c3fb27SDimitry Andric    VSLDOI,
1700349cc55cSDimitry Andric    VSLO,
1701349cc55cSDimitry Andric    VSLV,
1702349cc55cSDimitry Andric    VSR,
170306c3fb27SDimitry Andric    VSRDBI,
1704349cc55cSDimitry Andric    VSRO,
1705349cc55cSDimitry Andric    VSRV,
170606c3fb27SDimitry Andric    XXINSERTW,
1707349cc55cSDimitry Andric    XXMRGHW,
1708349cc55cSDimitry Andric    XXMRGLW,
1709349cc55cSDimitry Andric    XXPERMDI, XXPERMDIs,
171006c3fb27SDimitry Andric    XXSLDWI, XXSLDWIs
1711349cc55cSDimitry Andric)>;
1712349cc55cSDimitry Andric
1713349cc55cSDimitry Andric// 4 Cycles Permute operations, 3 input operands
1714349cc55cSDimitry Andricdef : InstRW<[P10W_PM_4C, P10W_DISP_ANY, P10PM_Read, P10PM_Read, P10PM_Read],
1715349cc55cSDimitry Andric      (instrs
1716349cc55cSDimitry Andric    VEXTDDVLX,
1717349cc55cSDimitry Andric    VEXTDDVRX,
1718349cc55cSDimitry Andric    VEXTDUBVLX,
1719349cc55cSDimitry Andric    VEXTDUBVRX,
1720349cc55cSDimitry Andric    VEXTDUHVLX,
1721349cc55cSDimitry Andric    VEXTDUHVRX,
1722349cc55cSDimitry Andric    VEXTDUWVLX,
1723349cc55cSDimitry Andric    VEXTDUWVRX,
1724349cc55cSDimitry Andric    VINSBLX,
1725349cc55cSDimitry Andric    VINSBRX,
1726349cc55cSDimitry Andric    VINSBVLX,
1727349cc55cSDimitry Andric    VINSBVRX,
1728349cc55cSDimitry Andric    VINSDLX,
1729349cc55cSDimitry Andric    VINSDRX,
1730349cc55cSDimitry Andric    VINSHLX,
1731349cc55cSDimitry Andric    VINSHRX,
1732349cc55cSDimitry Andric    VINSHVLX,
1733349cc55cSDimitry Andric    VINSHVRX,
1734349cc55cSDimitry Andric    VINSWLX,
1735349cc55cSDimitry Andric    VINSWRX,
1736349cc55cSDimitry Andric    VINSWVLX,
1737349cc55cSDimitry Andric    VINSWVRX,
1738349cc55cSDimitry Andric    VPERM,
1739349cc55cSDimitry Andric    VPERMR,
1740349cc55cSDimitry Andric    VPERMXOR,
1741bdd1243dSDimitry Andric    XXPERM,
1742bdd1243dSDimitry Andric    XXPERMR
1743349cc55cSDimitry Andric)>;
1744349cc55cSDimitry Andric
1745349cc55cSDimitry Andric// 2-way crack instructions
1746349cc55cSDimitry Andric// 4 Cycles Permute operations, and 7 Cycles VMX Multiply operations, 2 input operands
1747349cc55cSDimitry Andricdef : InstRW<[P10W_PM_4C, P10W_DISP_EVEN, P10W_vMU_7C, P10W_DISP_ANY],
1748349cc55cSDimitry Andric      (instrs
1749349cc55cSDimitry Andric    VSUMSWS
1750349cc55cSDimitry Andric)>;
1751349cc55cSDimitry Andric
175206c3fb27SDimitry Andric// 4 Cycles Permute operations, 0 input operands
175306c3fb27SDimitry Andricdef : InstRW<[P10W_PM_4C, P10W_DISP_PAIR],
1754349cc55cSDimitry Andric      (instrs
1755349cc55cSDimitry Andric    XXSPLTIDP,
1756349cc55cSDimitry Andric    XXSPLTIW
1757349cc55cSDimitry Andric)>;
1758349cc55cSDimitry Andric
175906c3fb27SDimitry Andric// 4 Cycles Permute operations, 1 input operands
176006c3fb27SDimitry Andricdef : InstRW<[P10W_PM_4C, P10W_DISP_PAIR, P10PM_Read],
176106c3fb27SDimitry Andric      (instrs
176206c3fb27SDimitry Andric    XXSPLTI32DX
176306c3fb27SDimitry Andric)>;
176406c3fb27SDimitry Andric
1765349cc55cSDimitry Andric// 4 Cycles Permute operations, 3 input operands
1766349cc55cSDimitry Andricdef : InstRW<[P10W_PM_4C, P10W_DISP_PAIR, P10PM_Read, P10PM_Read, P10PM_Read],
1767349cc55cSDimitry Andric      (instrs
1768349cc55cSDimitry Andric    XXBLENDVB,
1769349cc55cSDimitry Andric    XXBLENDVD,
1770349cc55cSDimitry Andric    XXBLENDVH,
1771349cc55cSDimitry Andric    XXBLENDVW,
1772349cc55cSDimitry Andric    XXEVAL,
1773349cc55cSDimitry Andric    XXPERMX
1774349cc55cSDimitry Andric)>;
1775349cc55cSDimitry Andric
1776349cc55cSDimitry Andric// 3 Cycles Store operations, 1 input operands
1777349cc55cSDimitry Andricdef : InstRW<[P10W_ST_3C, P10W_DISP_ANY, P10ST_Read],
1778349cc55cSDimitry Andric      (instrs
177906c3fb27SDimitry Andric    PSTXVP, PSTXVPpc,
178006c3fb27SDimitry Andric    STB, STB8,
178106c3fb27SDimitry Andric    STBU, STBU8,
178206c3fb27SDimitry Andric    SPILLTOVSR_ST, STD,
178306c3fb27SDimitry Andric    STDU,
178406c3fb27SDimitry Andric    DFSTOREf32, DFSTOREf64, STFD,
178506c3fb27SDimitry Andric    STFDU,
178606c3fb27SDimitry Andric    STFS,
178706c3fb27SDimitry Andric    STFSU,
178806c3fb27SDimitry Andric    STH, STH8,
178906c3fb27SDimitry Andric    STHU, STHU8,
179006c3fb27SDimitry Andric    STW, STW8,
179106c3fb27SDimitry Andric    STWU, STWU8,
179206c3fb27SDimitry Andric    STXSD,
179306c3fb27SDimitry Andric    STXSSP,
179406c3fb27SDimitry Andric    STXV
1795349cc55cSDimitry Andric)>;
1796349cc55cSDimitry Andric
1797349cc55cSDimitry Andric// 3 Cycles Store operations, 2 input operands
1798349cc55cSDimitry Andricdef : InstRW<[P10W_ST_3C, P10W_DISP_ANY, P10ST_Read, P10ST_Read],
1799349cc55cSDimitry Andric      (instrs
180006c3fb27SDimitry Andric    CP_COPY, CP_COPY8,
1801349cc55cSDimitry Andric    DCBF,
180206c3fb27SDimitry Andric    DCBST,
180306c3fb27SDimitry Andric    DCBZ,
180406c3fb27SDimitry Andric    ICBI,
180506c3fb27SDimitry Andric    STXVL,
180606c3fb27SDimitry Andric    STXVLL
180706c3fb27SDimitry Andric)>;
180806c3fb27SDimitry Andric
180906c3fb27SDimitry Andric// 3 Cycles Store operations, 3 input operands
181006c3fb27SDimitry Andricdef : InstRW<[P10W_ST_3C, P10W_DISP_ANY, P10ST_Read, P10ST_Read, P10ST_Read],
181106c3fb27SDimitry Andric      (instrs
1812349cc55cSDimitry Andric    STBUX, STBUX8,
181306c3fb27SDimitry Andric    STBX, STBX8, STBXTLS, STBXTLS_, STBXTLS_32,
1814349cc55cSDimitry Andric    STDBRX,
1815349cc55cSDimitry Andric    STDUX,
181606c3fb27SDimitry Andric    SPILLTOVSR_STX, STDX, STDXTLS, STDXTLS_,
1817349cc55cSDimitry Andric    STFDUX,
181806c3fb27SDimitry Andric    STFDX, STFDXTLS, STFDXTLS_,
1819349cc55cSDimitry Andric    STFIWX, STIWX,
1820349cc55cSDimitry Andric    STFSUX,
182106c3fb27SDimitry Andric    STFSX, STFSXTLS, STFSXTLS_,
1822349cc55cSDimitry Andric    STHBRX,
1823349cc55cSDimitry Andric    STHUX, STHUX8,
182406c3fb27SDimitry Andric    STHX, STHX8, STHXTLS, STHXTLS_, STHXTLS_32,
1825349cc55cSDimitry Andric    STVEBX,
1826349cc55cSDimitry Andric    STVEHX,
1827349cc55cSDimitry Andric    STVEWX,
1828349cc55cSDimitry Andric    STVX,
1829349cc55cSDimitry Andric    STVXL,
1830349cc55cSDimitry Andric    STWBRX,
1831349cc55cSDimitry Andric    STWUX, STWUX8,
183206c3fb27SDimitry Andric    STWX, STWX8, STWXTLS, STWXTLS_, STWXTLS_32,
1833349cc55cSDimitry Andric    STXSDX,
1834349cc55cSDimitry Andric    STXSIBX, STXSIBXv,
1835349cc55cSDimitry Andric    STXSIHX, STXSIHXv,
1836349cc55cSDimitry Andric    STXSIWX,
1837349cc55cSDimitry Andric    STXSSPX,
1838349cc55cSDimitry Andric    STXVB16X,
1839349cc55cSDimitry Andric    STXVD2X,
1840349cc55cSDimitry Andric    STXVH8X,
1841349cc55cSDimitry Andric    STXVRBX,
1842349cc55cSDimitry Andric    STXVRDX,
1843349cc55cSDimitry Andric    STXVRHX,
1844349cc55cSDimitry Andric    STXVRWX,
1845349cc55cSDimitry Andric    STXVW4X,
1846349cc55cSDimitry Andric    STXVX
1847349cc55cSDimitry Andric)>;
1848349cc55cSDimitry Andric
1849349cc55cSDimitry Andric// Single crack instructions
1850349cc55cSDimitry Andric// 3 Cycles Store operations, 0 input operands
1851349cc55cSDimitry Andricdef : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_DISP_ANY],
1852349cc55cSDimitry Andric      (instrs
1853349cc55cSDimitry Andric    EnforceIEIO,
1854349cc55cSDimitry Andric    MSGSYNC,
1855349cc55cSDimitry Andric    SLBSYNC,
1856349cc55cSDimitry Andric    TLBSYNC
1857349cc55cSDimitry Andric)>;
1858349cc55cSDimitry Andric
1859349cc55cSDimitry Andric// Single crack instructions
1860349cc55cSDimitry Andric// 3 Cycles Store operations, 2 input operands
1861349cc55cSDimitry Andricdef : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10ST_Read, P10ST_Read],
1862349cc55cSDimitry Andric      (instrs
186306c3fb27SDimitry Andric    CP_PASTE8_rec, CP_PASTE_rec,
1864349cc55cSDimitry Andric    SLBIEG,
1865349cc55cSDimitry Andric    TLBIE
1866349cc55cSDimitry Andric)>;
1867349cc55cSDimitry Andric
1868349cc55cSDimitry Andric// Single crack instructions
1869349cc55cSDimitry Andric// 3 Cycles Store operations, 3 input operands
1870349cc55cSDimitry Andricdef : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10ST_Read, P10ST_Read, P10ST_Read],
1871349cc55cSDimitry Andric      (instrs
1872349cc55cSDimitry Andric    STBCIX,
187306c3fb27SDimitry Andric    STBCX,
1874349cc55cSDimitry Andric    STDCIX,
187506c3fb27SDimitry Andric    STDCX,
1876349cc55cSDimitry Andric    STHCIX,
187706c3fb27SDimitry Andric    STHCX,
187806c3fb27SDimitry Andric    STWCIX,
187906c3fb27SDimitry Andric    STWCX
1880349cc55cSDimitry Andric)>;
1881349cc55cSDimitry Andric
1882349cc55cSDimitry Andric// 2-way crack instructions
1883349cc55cSDimitry Andric// 3 Cycles Store operations, and 3 Cycles ALU operations, 0 input operands
1884349cc55cSDimitry Andricdef : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
1885349cc55cSDimitry Andric      (instrs
188606c3fb27SDimitry Andric    ISYNC,
18875f757f3fSDimitry Andric    SYNCP10,
1888349cc55cSDimitry Andric    SYNC
1889349cc55cSDimitry Andric)>;
1890349cc55cSDimitry Andric
1891349cc55cSDimitry Andric// Expand instructions
189206c3fb27SDimitry Andric// 3 Cycles Store operations, 3 Cycles ALU operations, 3 Cycles Store operations, 3 Cycles ALU operations, 3 Cycles Store operations, 3 Cycles ALU operations, 6 Cycles Load operations, and 3 Cycles Store operations, 1 input operands
1893349cc55cSDimitry Andricdef : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_FX_3C, P10W_DISP_ANY, P10W_LD_6C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY],
1894349cc55cSDimitry Andric      (instrs
1895349cc55cSDimitry Andric    LDAT,
1896349cc55cSDimitry Andric    LWAT
1897349cc55cSDimitry Andric)>;
1898349cc55cSDimitry Andric
1899349cc55cSDimitry Andric// 4-way crack instructions
190006c3fb27SDimitry Andric// 3 Cycles Store operations, 3 Cycles ALU operations, 3 Cycles Store operations, and 3 Cycles Store operations, 2 input operands
1901349cc55cSDimitry Andricdef : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY],
1902349cc55cSDimitry Andric      (instrs
1903349cc55cSDimitry Andric    STDAT,
1904349cc55cSDimitry Andric    STWAT
1905349cc55cSDimitry Andric)>;
1906349cc55cSDimitry Andric
1907349cc55cSDimitry Andric// Expand instructions
190806c3fb27SDimitry Andric// 3 Cycles Store operations, 3 Cycles Store operations, 3 Cycles Store operations, and 3 Cycles Store operations, 1 input operands
190906c3fb27SDimitry Andricdef : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10ST_Read],
1910349cc55cSDimitry Andric      (instrs
1911349cc55cSDimitry Andric    STMW
1912349cc55cSDimitry Andric)>;
1913349cc55cSDimitry Andric
1914349cc55cSDimitry Andric// Expand instructions
191506c3fb27SDimitry Andric// 3 Cycles Store operations, 3 Cycles Store operations, 3 Cycles Store operations, and 3 Cycles Store operations, 2 input operands
191606c3fb27SDimitry Andricdef : InstRW<[P10W_ST_3C, P10W_DISP_EVEN, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10W_ST_3C, P10W_DISP_ANY, P10ST_Read, P10ST_Read],
1917349cc55cSDimitry Andric      (instrs
1918349cc55cSDimitry Andric    STSWI
1919349cc55cSDimitry Andric)>;
1920349cc55cSDimitry Andric
192106c3fb27SDimitry Andric// 3 Cycles Store operations, 1 input operands
192206c3fb27SDimitry Andricdef : InstRW<[P10W_ST_3C, P10W_DISP_PAIR, P10ST_Read],
1923349cc55cSDimitry Andric      (instrs
1924349cc55cSDimitry Andric    PSTB, PSTB8, PSTB8pc, PSTBpc,
1925349cc55cSDimitry Andric    PSTD, PSTDpc,
1926349cc55cSDimitry Andric    PSTFD, PSTFDpc,
1927349cc55cSDimitry Andric    PSTFS, PSTFSpc,
1928349cc55cSDimitry Andric    PSTH, PSTH8, PSTH8pc, PSTHpc,
1929349cc55cSDimitry Andric    PSTW, PSTW8, PSTW8pc, PSTWpc,
1930349cc55cSDimitry Andric    PSTXSD, PSTXSDpc,
1931349cc55cSDimitry Andric    PSTXSSP, PSTXSSPpc,
1932349cc55cSDimitry Andric    PSTXV, PSTXVpc
1933349cc55cSDimitry Andric)>;
1934349cc55cSDimitry Andric
1935349cc55cSDimitry Andric// 2-way crack instructions
193606c3fb27SDimitry Andric// 3 Cycles Store operations, and 3 Cycles Store operations, 1 input operands
193706c3fb27SDimitry Andricdef : InstRW<[P10W_ST_3C, P10W_DISP_PAIR, P10W_ST_3C, P10ST_Read],
1938349cc55cSDimitry Andric      (instrs
193906c3fb27SDimitry Andric    STXVP
194006c3fb27SDimitry Andric)>;
194106c3fb27SDimitry Andric
194206c3fb27SDimitry Andric// 2-way crack instructions
194306c3fb27SDimitry Andric// 3 Cycles Store operations, and 3 Cycles Store operations, 3 input operands
194406c3fb27SDimitry Andricdef : InstRW<[P10W_ST_3C, P10W_DISP_PAIR, P10W_ST_3C, P10ST_Read, P10ST_Read, P10ST_Read],
194506c3fb27SDimitry Andric      (instrs
1946349cc55cSDimitry Andric    STXVPX
1947349cc55cSDimitry Andric)>;
1948349cc55cSDimitry Andric
1949349cc55cSDimitry Andric// FIXME - Miss scheduling information from datasheet
1950349cc55cSDimitry Andric// Temporary set it as 1 Cycles Simple Fixed-point (SFX) operations, 0 input operands
1951349cc55cSDimitry Andricdef : InstRW<[P10W_SX, P10W_DISP_ANY],
1952349cc55cSDimitry Andric      (instrs
1953349cc55cSDimitry Andric    ATTN,
1954349cc55cSDimitry Andric    CP_ABORT,
1955bdd1243dSDimitry Andric    CRNOT,
1956349cc55cSDimitry Andric    DCBA,
1957349cc55cSDimitry Andric    DCBI,
1958349cc55cSDimitry Andric    DCBZL,
1959349cc55cSDimitry Andric    DCCCI,
1960349cc55cSDimitry Andric    ICBLC,
1961349cc55cSDimitry Andric    ICBLQ,
1962349cc55cSDimitry Andric    ICBTLS,
1963349cc55cSDimitry Andric    ICCCI,
19644824e7fdSDimitry Andric    LA, LA8,
1965349cc55cSDimitry Andric    MFDCR,
1966349cc55cSDimitry Andric    MFPMR,
1967349cc55cSDimitry Andric    MFSRIN,
1968349cc55cSDimitry Andric    MSYNC,
1969349cc55cSDimitry Andric    MTDCR,
1970349cc55cSDimitry Andric    MTPMR,
1971349cc55cSDimitry Andric    MTSRIN,
1972349cc55cSDimitry Andric    NAP,
1973349cc55cSDimitry Andric    TLBIA,
1974349cc55cSDimitry Andric    TLBLD,
1975349cc55cSDimitry Andric    TLBLI,
1976349cc55cSDimitry Andric    TLBRE2,
1977349cc55cSDimitry Andric    TLBSX2,
1978349cc55cSDimitry Andric    TLBSX2D,
1979349cc55cSDimitry Andric    TLBWE2
1980349cc55cSDimitry Andric)>;
1981349cc55cSDimitry Andric
1982349cc55cSDimitry Andric// Single crack instructions
1983349cc55cSDimitry Andric// 3 Cycles Simple Fixed-point (SFX) operations, 0 input operands
1984349cc55cSDimitry Andricdef : InstRW<[P10W_SX_3C, P10W_DISP_EVEN, P10W_DISP_ANY],
1985349cc55cSDimitry Andric      (instrs
1986349cc55cSDimitry Andric    CLRBHRB,
198706c3fb27SDimitry Andric    MFBHRBE,
198806c3fb27SDimitry Andric    MFMSR,
198906c3fb27SDimitry Andric    MFTB
1990349cc55cSDimitry Andric)>;
1991349cc55cSDimitry Andric
1992349cc55cSDimitry Andric// Single crack instructions
1993349cc55cSDimitry Andric// 3 Cycles Simple Fixed-point (SFX) operations, 1 input operands
1994349cc55cSDimitry Andricdef : InstRW<[P10W_SX_3C, P10W_DISP_EVEN, P10W_DISP_ANY, P10SX_Read],
1995349cc55cSDimitry Andric      (instrs
1996349cc55cSDimitry Andric    MTMSR,
1997349cc55cSDimitry Andric    MTMSRD
1998349cc55cSDimitry Andric)>;
1999349cc55cSDimitry Andric
2000349cc55cSDimitry Andric// 2-way crack instructions
200106c3fb27SDimitry Andric// 3 Cycles Simple Fixed-point (SFX) operations, and 3 Cycles ALU operations, 0 input operands
2002349cc55cSDimitry Andricdef : InstRW<[P10W_SX_3C, P10W_DISP_EVEN, P10W_FX_3C, P10W_DISP_ANY],
2003349cc55cSDimitry Andric      (instrs
2004349cc55cSDimitry Andric    ADDPCIS
2005349cc55cSDimitry Andric)>;
2006349cc55cSDimitry Andric
2007349cc55cSDimitry Andric// 3 Cycles Simple Fixed-point (SFX) operations, 1 input operands
2008349cc55cSDimitry Andricdef : InstRW<[P10W_SX_3C, P10W_DISP_PAIR, P10SX_Read],
2009349cc55cSDimitry Andric      (instrs
2010349cc55cSDimitry Andric    PADDI, PADDI8, PADDI8pc, PADDIpc, PLI, PLI8
2011349cc55cSDimitry Andric)>;
2012349cc55cSDimitry Andric
2013349cc55cSDimitry Andric// 7 Cycles VMX Multiply operations, 2 input operands
2014349cc55cSDimitry Andricdef : InstRW<[P10W_vMU_7C, P10W_DISP_ANY, P10vMU_Read, P10vMU_Read],
2015349cc55cSDimitry Andric      (instrs
2016349cc55cSDimitry Andric    VMULESB,
2017349cc55cSDimitry Andric    VMULESD,
2018349cc55cSDimitry Andric    VMULESH,
2019349cc55cSDimitry Andric    VMULESW,
2020349cc55cSDimitry Andric    VMULEUB,
2021349cc55cSDimitry Andric    VMULEUD,
2022349cc55cSDimitry Andric    VMULEUH,
2023349cc55cSDimitry Andric    VMULEUW,
2024349cc55cSDimitry Andric    VMULHSW,
2025349cc55cSDimitry Andric    VMULHUW,
2026349cc55cSDimitry Andric    VMULOSB,
2027349cc55cSDimitry Andric    VMULOSD,
2028349cc55cSDimitry Andric    VMULOSH,
2029349cc55cSDimitry Andric    VMULOSW,
2030349cc55cSDimitry Andric    VMULOUB,
2031349cc55cSDimitry Andric    VMULOUD,
2032349cc55cSDimitry Andric    VMULOUH,
2033349cc55cSDimitry Andric    VMULOUW,
2034349cc55cSDimitry Andric    VMULUWM,
2035349cc55cSDimitry Andric    VSUM2SWS,
2036349cc55cSDimitry Andric    VSUM4SBS,
2037349cc55cSDimitry Andric    VSUM4SHS,
2038349cc55cSDimitry Andric    VSUM4UBS
2039349cc55cSDimitry Andric)>;
2040349cc55cSDimitry Andric
2041349cc55cSDimitry Andric// 7 Cycles VMX Multiply operations, 3 input operands
2042349cc55cSDimitry Andricdef : InstRW<[P10W_vMU_7C, P10W_DISP_ANY, P10vMU_Read, P10vMU_Read, P10vMU_Read],
2043349cc55cSDimitry Andric      (instrs
2044349cc55cSDimitry Andric    VMHADDSHS,
2045349cc55cSDimitry Andric    VMHRADDSHS,
2046349cc55cSDimitry Andric    VMLADDUHM,
2047349cc55cSDimitry Andric    VMSUMCUD,
2048349cc55cSDimitry Andric    VMSUMMBM,
2049349cc55cSDimitry Andric    VMSUMSHM,
2050349cc55cSDimitry Andric    VMSUMSHS,
2051349cc55cSDimitry Andric    VMSUMUBM,
2052349cc55cSDimitry Andric    VMSUMUDM,
2053349cc55cSDimitry Andric    VMSUMUHM,
2054349cc55cSDimitry Andric    VMSUMUHS
2055349cc55cSDimitry Andric)>;
20564824e7fdSDimitry Andric
2057