xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCVSchedXiangShanNanHu.td (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
1*0fca6ea1SDimitry Andric//==- RISCVSchedXiangShanNanHu.td - XS-NanHu Scheduling Defs -*- tablegen -*-=//
2*0fca6ea1SDimitry Andric//
3*0fca6ea1SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4*0fca6ea1SDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
5*0fca6ea1SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6*0fca6ea1SDimitry Andric//
7*0fca6ea1SDimitry Andric//===----------------------------------------------------------------------===//
8*0fca6ea1SDimitry Andric
9*0fca6ea1SDimitry Andric//===----------------------------------------------------------------------===//
10*0fca6ea1SDimitry Andric
11*0fca6ea1SDimitry Andric// XiangShan is a high-performance open-source RISC-V processor developed by
12*0fca6ea1SDimitry Andric// the Institute of Computing Technology (ICT), Chinese Academy of Sciences.
13*0fca6ea1SDimitry Andric// Source: https://github.com/OpenXiangShan/XiangShan
14*0fca6ea1SDimitry Andric// Documentation: https://github.com/OpenXiangShan/XiangShan-doc
15*0fca6ea1SDimitry Andric
16*0fca6ea1SDimitry Andric// XiangShan-NanHu is the second generation of XiangShan processor series.
17*0fca6ea1SDimitry Andric// Overview: https://xiangshan-doc.readthedocs.io/zh-cn/latest/integration/overview/
18*0fca6ea1SDimitry Andric
19*0fca6ea1SDimitry Andricdef XiangShanNanHuModel : SchedMachineModel {
20*0fca6ea1SDimitry Andric  let MicroOpBufferSize = 256;
21*0fca6ea1SDimitry Andric  let LoopMicroOpBufferSize = 48;  // Instruction queue size
22*0fca6ea1SDimitry Andric  let IssueWidth = 6;  // 6-way decode and dispatch
23*0fca6ea1SDimitry Andric  let LoadLatency = 4;
24*0fca6ea1SDimitry Andric  let MispredictPenalty = 11; // Based on estimate of pipeline depth.
25*0fca6ea1SDimitry Andric  let CompleteModel = 0;
26*0fca6ea1SDimitry Andric  let UnsupportedFeatures = [HasStdExtZcmt, HasStdExtZkr, HasVInstructions,
27*0fca6ea1SDimitry Andric                             HasVInstructionsI64];
28*0fca6ea1SDimitry Andric}
29*0fca6ea1SDimitry Andric
30*0fca6ea1SDimitry Andriclet SchedModel = XiangShanNanHuModel in {
31*0fca6ea1SDimitry Andric
32*0fca6ea1SDimitry Andric// The reservation stations are distributed and grouped as 32-entry or 16-entry smaller ones.
33*0fca6ea1SDimitry Andriclet BufferSize = 16 in {
34*0fca6ea1SDimitry Andric  def XS2ALU : ProcResource<4>;
35*0fca6ea1SDimitry Andric  def XS2MDU : ProcResource<2>;
36*0fca6ea1SDimitry Andric  def XS2MISC : ProcResource<1>;
37*0fca6ea1SDimitry Andric
38*0fca6ea1SDimitry Andric  def XS2FMAC : ProcResource<4>;
39*0fca6ea1SDimitry Andric  def XS2FMISC : ProcResource<2>;
40*0fca6ea1SDimitry Andric
41*0fca6ea1SDimitry Andric  // Load/Store queues are ignored.
42*0fca6ea1SDimitry Andric  def XS2LD : ProcResource<2>;
43*0fca6ea1SDimitry Andric  def XS2ST : ProcResource<2>;
44*0fca6ea1SDimitry Andric}
45*0fca6ea1SDimitry Andric
46*0fca6ea1SDimitry Andric// Branching
47*0fca6ea1SDimitry Andricdef : WriteRes<WriteJmp, [XS2MISC]>;
48*0fca6ea1SDimitry Andricdef : WriteRes<WriteJal, [XS2MISC]>;
49*0fca6ea1SDimitry Andricdef : WriteRes<WriteJalr, [XS2MISC]>;
50*0fca6ea1SDimitry Andric
51*0fca6ea1SDimitry Andric// Integer arithmetic and logic
52*0fca6ea1SDimitry Andriclet Latency = 1 in {
53*0fca6ea1SDimitry Andricdef : WriteRes<WriteIALU, [XS2ALU]>;
54*0fca6ea1SDimitry Andricdef : WriteRes<WriteIALU32, [XS2ALU]>;
55*0fca6ea1SDimitry Andricdef : WriteRes<WriteShiftImm, [XS2ALU]>;
56*0fca6ea1SDimitry Andricdef : WriteRes<WriteShiftImm32, [XS2ALU]>;
57*0fca6ea1SDimitry Andricdef : WriteRes<WriteShiftReg, [XS2ALU]>;
58*0fca6ea1SDimitry Andricdef : WriteRes<WriteShiftReg32, [XS2ALU]>;
59*0fca6ea1SDimitry Andric}
60*0fca6ea1SDimitry Andric
61*0fca6ea1SDimitry Andric// Integer multiplication
62*0fca6ea1SDimitry Andriclet Latency = 3 in {
63*0fca6ea1SDimitry Andricdef : WriteRes<WriteIMul, [XS2MDU]>;
64*0fca6ea1SDimitry Andricdef : WriteRes<WriteIMul32, [XS2MDU]>;
65*0fca6ea1SDimitry Andric}
66*0fca6ea1SDimitry Andric
67*0fca6ea1SDimitry Andric// Integer division/remainder
68*0fca6ea1SDimitry Andric// SRT16 algorithm
69*0fca6ea1SDimitry Andriclet Latency = 20, ReleaseAtCycles = [20] in {
70*0fca6ea1SDimitry Andricdef : WriteRes<WriteIDiv32, [XS2MDU]>;
71*0fca6ea1SDimitry Andricdef : WriteRes<WriteIDiv, [XS2MDU]>;
72*0fca6ea1SDimitry Andricdef : WriteRes<WriteIRem32, [XS2MDU]>;
73*0fca6ea1SDimitry Andricdef : WriteRes<WriteIRem, [XS2MDU]>;
74*0fca6ea1SDimitry Andric}
75*0fca6ea1SDimitry Andric
76*0fca6ea1SDimitry Andric// Zb*
77*0fca6ea1SDimitry Andriclet Latency = 1 in {
78*0fca6ea1SDimitry Andric// Zba
79*0fca6ea1SDimitry Andricdef : WriteRes<WriteSHXADD, [XS2ALU]>;
80*0fca6ea1SDimitry Andricdef : WriteRes<WriteSHXADD32, [XS2ALU]>;
81*0fca6ea1SDimitry Andric
82*0fca6ea1SDimitry Andric// Zbb
83*0fca6ea1SDimitry Andricdef : WriteRes<WriteRotateImm, [XS2ALU]>;
84*0fca6ea1SDimitry Andricdef : WriteRes<WriteRotateImm32, [XS2ALU]>;
85*0fca6ea1SDimitry Andricdef : WriteRes<WriteRotateReg, [XS2ALU]>;
86*0fca6ea1SDimitry Andricdef : WriteRes<WriteRotateReg32, [XS2ALU]>;
87*0fca6ea1SDimitry Andricdef : WriteRes<WriteORCB, [XS2ALU]>;
88*0fca6ea1SDimitry Andricdef : WriteRes<WriteIMinMax, [XS2ALU]>;
89*0fca6ea1SDimitry Andricdef : WriteRes<WriteREV8, [XS2ALU]>;
90*0fca6ea1SDimitry Andric
91*0fca6ea1SDimitry Andric// Zbkb
92*0fca6ea1SDimitry Andricdef : WriteRes<WriteBREV8, [XS2ALU]>;
93*0fca6ea1SDimitry Andricdef : WriteRes<WritePACK, [XS2ALU]>;
94*0fca6ea1SDimitry Andricdef : WriteRes<WritePACK32, [XS2ALU]>;
95*0fca6ea1SDimitry Andricdef : WriteRes<WriteZIP, [XS2ALU]>;
96*0fca6ea1SDimitry Andric
97*0fca6ea1SDimitry Andric// Zbs
98*0fca6ea1SDimitry Andricdef : WriteRes<WriteSingleBit, [XS2ALU]>;
99*0fca6ea1SDimitry Andricdef : WriteRes<WriteSingleBitImm, [XS2ALU]>;
100*0fca6ea1SDimitry Andricdef : WriteRes<WriteBEXT, [XS2ALU]>;
101*0fca6ea1SDimitry Andricdef : WriteRes<WriteBEXTI, [XS2ALU]>;
102*0fca6ea1SDimitry Andric}
103*0fca6ea1SDimitry Andric
104*0fca6ea1SDimitry Andriclet Latency = 3 in {
105*0fca6ea1SDimitry Andric// Zbb
106*0fca6ea1SDimitry Andricdef : WriteRes<WriteCLZ, [XS2MDU]>;
107*0fca6ea1SDimitry Andricdef : WriteRes<WriteCLZ32, [XS2MDU]>;
108*0fca6ea1SDimitry Andricdef : WriteRes<WriteCTZ, [XS2MDU]>;
109*0fca6ea1SDimitry Andricdef : WriteRes<WriteCTZ32, [XS2MDU]>;
110*0fca6ea1SDimitry Andricdef : WriteRes<WriteCPOP, [XS2MDU]>;
111*0fca6ea1SDimitry Andricdef : WriteRes<WriteCPOP32, [XS2MDU]>;
112*0fca6ea1SDimitry Andric
113*0fca6ea1SDimitry Andric// Zbkc
114*0fca6ea1SDimitry Andricdef : WriteRes<WriteCLMUL, [XS2MDU]>;
115*0fca6ea1SDimitry Andric
116*0fca6ea1SDimitry Andric// Zbkx
117*0fca6ea1SDimitry Andricdef : WriteRes<WriteXPERM, [XS2MDU]>;
118*0fca6ea1SDimitry Andric}
119*0fca6ea1SDimitry Andric
120*0fca6ea1SDimitry Andric// Memory
121*0fca6ea1SDimitry Andricdef : WriteRes<WriteSTB, [XS2ST]>;
122*0fca6ea1SDimitry Andricdef : WriteRes<WriteSTH, [XS2ST]>;
123*0fca6ea1SDimitry Andricdef : WriteRes<WriteSTW, [XS2ST]>;
124*0fca6ea1SDimitry Andricdef : WriteRes<WriteSTD, [XS2ST]>;
125*0fca6ea1SDimitry Andricdef : WriteRes<WriteFST32, [XS2ST]>;
126*0fca6ea1SDimitry Andricdef : WriteRes<WriteFST64, [XS2ST]>;
127*0fca6ea1SDimitry Andricdef : WriteRes<WriteAtomicSTW, [XS2ST]>;
128*0fca6ea1SDimitry Andricdef : WriteRes<WriteAtomicSTD, [XS2ST]>;
129*0fca6ea1SDimitry Andric
130*0fca6ea1SDimitry Andriclet Latency = 5 in {
131*0fca6ea1SDimitry Andricdef : WriteRes<WriteLDB, [XS2LD]>;
132*0fca6ea1SDimitry Andricdef : WriteRes<WriteLDH, [XS2LD]>;
133*0fca6ea1SDimitry Andricdef : WriteRes<WriteLDW, [XS2LD]>;
134*0fca6ea1SDimitry Andricdef : WriteRes<WriteLDD, [XS2LD]>;
135*0fca6ea1SDimitry Andric
136*0fca6ea1SDimitry Andricdef : WriteRes<WriteAtomicW, [XS2LD]>;
137*0fca6ea1SDimitry Andricdef : WriteRes<WriteAtomicD, [XS2LD]>;
138*0fca6ea1SDimitry Andricdef : WriteRes<WriteAtomicLDW, [XS2LD]>;
139*0fca6ea1SDimitry Andricdef : WriteRes<WriteAtomicLDD, [XS2LD]>;
140*0fca6ea1SDimitry Andric
141*0fca6ea1SDimitry Andricdef : WriteRes<WriteFLD32, [XS2LD]>;
142*0fca6ea1SDimitry Andricdef : WriteRes<WriteFLD64, [XS2LD]>;
143*0fca6ea1SDimitry Andric}
144*0fca6ea1SDimitry Andric
145*0fca6ea1SDimitry Andric// XiangShan-NanHu uses FuDian FPU instead of Berkeley HardFloat.
146*0fca6ea1SDimitry Andric// Documentation: https://github.com/OpenXiangShan/fudian
147*0fca6ea1SDimitry Andric
148*0fca6ea1SDimitry Andriclet Latency = 3 in {
149*0fca6ea1SDimitry Andricdef : WriteRes<WriteFAdd32, [XS2FMAC]>;
150*0fca6ea1SDimitry Andricdef : WriteRes<WriteFSGNJ32, [XS2FMAC]>;
151*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMinMax32, [XS2FMAC]>;
152*0fca6ea1SDimitry Andricdef : WriteRes<WriteFAdd64, [XS2FMAC]>;
153*0fca6ea1SDimitry Andricdef : WriteRes<WriteFSGNJ64, [XS2FMAC]>;
154*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMinMax64, [XS2FMAC]>;
155*0fca6ea1SDimitry Andric
156*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtI32ToF32, [XS2FMAC]>;
157*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtI32ToF64, [XS2FMAC]>;
158*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtI64ToF32, [XS2FMAC]>;
159*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtI64ToF64, [XS2FMAC]>;
160*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtF32ToI32, [XS2FMAC]>;
161*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtF32ToI64, [XS2FMAC]>;
162*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtF64ToI32, [XS2FMAC]>;
163*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtF64ToI64, [XS2FMAC]>;
164*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtF32ToF64, [XS2FMAC]>;
165*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCvtF64ToF32, [XS2FMAC]>;
166*0fca6ea1SDimitry Andric
167*0fca6ea1SDimitry Andricdef : WriteRes<WriteFClass32, [XS2FMAC]>;
168*0fca6ea1SDimitry Andricdef : WriteRes<WriteFClass64, [XS2FMAC]>;
169*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCmp32, [XS2FMAC]>;
170*0fca6ea1SDimitry Andricdef : WriteRes<WriteFCmp64, [XS2FMAC]>;
171*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMovF32ToI32, [XS2FMAC]>;
172*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMovI32ToF32, [XS2FMAC]>;
173*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMovF64ToI64, [XS2FMAC]>;
174*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMovI64ToF64, [XS2FMAC]>;
175*0fca6ea1SDimitry Andric}
176*0fca6ea1SDimitry Andric
177*0fca6ea1SDimitry Andric// FP multiplication
178*0fca6ea1SDimitry Andriclet Latency = 3 in {
179*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMul32, [XS2FMAC]>;
180*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMul64, [XS2FMAC]>;
181*0fca6ea1SDimitry Andric}
182*0fca6ea1SDimitry Andric
183*0fca6ea1SDimitry Andriclet Latency = 5 in {
184*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMA32, [XS2FMAC]>;
185*0fca6ea1SDimitry Andricdef : WriteRes<WriteFMA64, [XS2FMAC]>;
186*0fca6ea1SDimitry Andric}
187*0fca6ea1SDimitry Andric
188*0fca6ea1SDimitry Andric// FP division
189*0fca6ea1SDimitry Andricdef : WriteRes<WriteFDiv32, [XS2FMISC]> {
190*0fca6ea1SDimitry Andric    let Latency = 11;
191*0fca6ea1SDimitry Andric}
192*0fca6ea1SDimitry Andricdef : WriteRes<WriteFDiv64, [XS2FMISC]> {
193*0fca6ea1SDimitry Andric    let Latency = 18;
194*0fca6ea1SDimitry Andric}
195*0fca6ea1SDimitry Andric
196*0fca6ea1SDimitry Andricdef : WriteRes<WriteFSqrt32, [XS2FMISC]> {
197*0fca6ea1SDimitry Andric    let Latency = 17;
198*0fca6ea1SDimitry Andric}
199*0fca6ea1SDimitry Andricdef : WriteRes<WriteFSqrt64, [XS2FMISC]> {
200*0fca6ea1SDimitry Andric    let Latency = 31;
201*0fca6ea1SDimitry Andric}
202*0fca6ea1SDimitry Andric
203*0fca6ea1SDimitry Andric// Others
204*0fca6ea1SDimitry Andricdef : WriteRes<WriteCSR, [XS2MISC]>;
205*0fca6ea1SDimitry Andricdef : WriteRes<WriteNop, []>;
206*0fca6ea1SDimitry Andric
207*0fca6ea1SDimitry Andricdef : InstRW<[WriteIALU], (instrs COPY)>;
208*0fca6ea1SDimitry Andric
209*0fca6ea1SDimitry Andric// Bypass and advance
210*0fca6ea1SDimitry Andric
211*0fca6ea1SDimitry Andricclass XS2LoadToALUBypass<SchedRead read>
212*0fca6ea1SDimitry Andric    : ReadAdvance<read, 1, [WriteLDB, WriteLDH, WriteLDW, WriteLDD, WriteAtomicW, WriteAtomicD, WriteAtomicLDW, WriteAtomicLDD]>;
213*0fca6ea1SDimitry Andric
214*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadJmp, 0>;
215*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadJalr, 0>;
216*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCSR, 0>;
217*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadStoreData, 0>;
218*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadMemBase, 0>;
219*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadIALU>;
220*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadIALU32>;
221*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadShiftImm>;
222*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadShiftImm32>;
223*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadShiftReg>;
224*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadShiftReg32>;
225*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIDiv, 0>;
226*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIDiv32, 0>;
227*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIRem, 0>;
228*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIRem32, 0>;
229*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIMul, 0>;
230*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIMul32, 0>;
231*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicWA, 0>;
232*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicWD, 0>;
233*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicDA, 0>;
234*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicDD, 0>;
235*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicLDW, 0>;
236*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicLDD, 0>;
237*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicSTW, 0>;
238*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadAtomicSTD, 0>;
239*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFStoreData, 0>;
240*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMemBase, 0>;
241*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFAdd32, 0>;
242*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFAdd64, 0>;
243*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMul32, 0>;
244*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMul64, 0>;
245*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMA32, 0>;
246*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMA32Addend, 2>; // Cascade FMA
247*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMA64, 0>;
248*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMA64Addend, 2>; // Cascade FMA
249*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFDiv32, 0>;
250*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFDiv64, 0>;
251*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFSqrt32, 0>;
252*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFSqrt64, 0>;
253*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCmp32, 0>;
254*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCmp64, 0>;
255*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFSGNJ32, 0>;
256*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFSGNJ64, 0>;
257*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMinMax32, 0>;
258*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMinMax64, 0>;
259*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtF32ToI32, 0>;
260*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtF32ToI64, 0>;
261*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtF64ToI32, 0>;
262*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtF64ToI64, 0>;
263*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtI32ToF32, 0>;
264*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtI32ToF64, 0>;
265*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtI64ToF32, 0>;
266*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtI64ToF64, 0>;
267*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtF32ToF64, 0>;
268*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFCvtF64ToF32, 0>;
269*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMovF32ToI32, 0>;
270*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMovI32ToF32, 0>;
271*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMovF64ToI64, 0>;
272*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFMovI64ToF64, 0>;
273*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFClass32, 0>;
274*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadFClass64, 0>;
275*0fca6ea1SDimitry Andric
276*0fca6ea1SDimitry Andric// Zb*
277*0fca6ea1SDimitry Andric// Zba
278*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadSHXADD>;
279*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadSHXADD32>;
280*0fca6ea1SDimitry Andric// Zbb
281*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadRotateImm>;
282*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadRotateImm32>;
283*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadRotateReg>;
284*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadRotateReg32>;
285*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCLZ, 0>;
286*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCLZ32, 0>;
287*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCTZ, 0>;
288*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCTZ32, 0>;
289*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCPOP, 0>;
290*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCPOP32, 0>;
291*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadORCB>;
292*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadIMinMax>;
293*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadREV8>;
294*0fca6ea1SDimitry Andric// Zbkc
295*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadCLMUL, 0>;
296*0fca6ea1SDimitry Andric// Zbs
297*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadSingleBit>;
298*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadSingleBitImm>;
299*0fca6ea1SDimitry Andric// Zbkb
300*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadBREV8>;
301*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadPACK>;
302*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadPACK32>;
303*0fca6ea1SDimitry Andricdef : XS2LoadToALUBypass<ReadZIP>;
304*0fca6ea1SDimitry Andric// Zbkx
305*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadXPERM, 0>;
306*0fca6ea1SDimitry Andric
307*0fca6ea1SDimitry Andric//===----------------------------------------------------------------------===//
308*0fca6ea1SDimitry Andric// Unsupported extensions
309*0fca6ea1SDimitry Andricdefm : UnsupportedSchedV;
310*0fca6ea1SDimitry Andricdefm : UnsupportedSchedZfa;
311*0fca6ea1SDimitry Andricdefm : UnsupportedSchedZfh;
312*0fca6ea1SDimitry Andricdefm : UnsupportedSchedSFB;
313*0fca6ea1SDimitry Andricdefm : UnsupportedSchedZabha;
314*0fca6ea1SDimitry Andricdefm : UnsupportedSchedXsfvcp;
315*0fca6ea1SDimitry Andricdefm : UnsupportedSchedZvk;
316*0fca6ea1SDimitry Andric}
317