xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/RISCV/RISCVSchedSiFiveP400.td (revision 0fca6ea1d4eea4c934cfff25ac9ee8ad6fe95583)
17a6dacacSDimitry Andric//==- RISCVSchedSiFiveP400.td - SiFiveP400 Scheduling Defs ---*- tablegen -*-=//
27a6dacacSDimitry Andric//
37a6dacacSDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
47a6dacacSDimitry Andric// See https://llvm.org/LICENSE.txt for license information.
57a6dacacSDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
67a6dacacSDimitry Andric//
77a6dacacSDimitry Andric//===----------------------------------------------------------------------===//
87a6dacacSDimitry Andric
97a6dacacSDimitry Andric//===----------------------------------------------------------------------===//
107a6dacacSDimitry Andric
117a6dacacSDimitry Andricdef SiFiveP400Model : SchedMachineModel {
127a6dacacSDimitry Andric  let IssueWidth = 3;         // 3 micro-ops are dispatched per cycle.
137a6dacacSDimitry Andric  let MicroOpBufferSize = 56; // Max micro-ops that can be buffered.
147a6dacacSDimitry Andric  let LoadLatency = 4;        // Cycles for loads to access the cache.
157a6dacacSDimitry Andric  let MispredictPenalty = 9;  // Extra cycles for a mispredicted branch.
167a6dacacSDimitry Andric  let UnsupportedFeatures = [HasStdExtZbkb, HasStdExtZbkc, HasStdExtZbkx,
177a6dacacSDimitry Andric                             HasStdExtZcmt, HasStdExtZknd, HasStdExtZkne,
187a6dacacSDimitry Andric                             HasStdExtZknh, HasStdExtZksed, HasStdExtZksh,
197a6dacacSDimitry Andric                             HasStdExtZkr];
207a6dacacSDimitry Andric  let CompleteModel = false;
217a6dacacSDimitry Andric}
227a6dacacSDimitry Andric
237a6dacacSDimitry Andric// The SiFiveP400 microarchitecure has 6 pipelines:
247a6dacacSDimitry Andric// Three pipelines for integer operations.
257a6dacacSDimitry Andric// One pipeline for FPU operations.
267a6dacacSDimitry Andric// One pipeline for Load operations.
277a6dacacSDimitry Andric// One pipeline for Store operations.
287a6dacacSDimitry Andriclet SchedModel = SiFiveP400Model in {
297a6dacacSDimitry Andric
307a6dacacSDimitry Andricdef SiFiveP400IEXQ0       : ProcResource<1>;
317a6dacacSDimitry Andricdef SiFiveP400IEXQ1       : ProcResource<1>;
327a6dacacSDimitry Andricdef SiFiveP400IEXQ2       : ProcResource<1>;
337a6dacacSDimitry Andricdef SiFiveP400FEXQ0       : ProcResource<1>;
347a6dacacSDimitry Andricdef SiFiveP400Load        : ProcResource<1>;
357a6dacacSDimitry Andricdef SiFiveP400Store       : ProcResource<1>;
367a6dacacSDimitry Andric
377a6dacacSDimitry Andricdef SiFiveP400IntArith    : ProcResGroup<[SiFiveP400IEXQ0, SiFiveP400IEXQ1, SiFiveP400IEXQ2]>;
387a6dacacSDimitry Andricdefvar SiFiveP400Branch   = SiFiveP400IEXQ0;
397a6dacacSDimitry Andricdefvar SiFiveP400SYS      = SiFiveP400IEXQ1;
407a6dacacSDimitry Andricdefvar SiFiveP400MulDiv   = SiFiveP400IEXQ2;
417a6dacacSDimitry Andricdefvar SiFiveP400I2F      = SiFiveP400IEXQ2;
427a6dacacSDimitry Andricdef SiFiveP400Div         : ProcResource<1>;
437a6dacacSDimitry Andric
447a6dacacSDimitry Andricdefvar SiFiveP400FloatArith  = SiFiveP400FEXQ0;
457a6dacacSDimitry Andricdefvar SiFiveP400F2I      = SiFiveP400FEXQ0;
467a6dacacSDimitry Andricdef SiFiveP400FloatDiv    : ProcResource<1>;
477a6dacacSDimitry Andric
487a6dacacSDimitry Andriclet Latency = 1 in {
497a6dacacSDimitry Andric// Integer arithmetic and logic
507a6dacacSDimitry Andricdef : WriteRes<WriteIALU, [SiFiveP400IntArith]>;
517a6dacacSDimitry Andricdef : WriteRes<WriteIALU32, [SiFiveP400IntArith]>;
527a6dacacSDimitry Andricdef : WriteRes<WriteShiftImm, [SiFiveP400IntArith]>;
537a6dacacSDimitry Andricdef : WriteRes<WriteShiftImm32, [SiFiveP400IntArith]>;
547a6dacacSDimitry Andricdef : WriteRes<WriteShiftReg, [SiFiveP400IntArith]>;
557a6dacacSDimitry Andricdef : WriteRes<WriteShiftReg32, [SiFiveP400IntArith]>;
567a6dacacSDimitry Andric// Branching
577a6dacacSDimitry Andricdef : WriteRes<WriteJmp, [SiFiveP400Branch]>;
587a6dacacSDimitry Andricdef : WriteRes<WriteJal, [SiFiveP400Branch]>;
597a6dacacSDimitry Andricdef : WriteRes<WriteJalr, [SiFiveP400Branch]>;
607a6dacacSDimitry Andric}
617a6dacacSDimitry Andric
627a6dacacSDimitry Andric// CMOV
637a6dacacSDimitry Andricdef P400WriteCMOV : SchedWriteRes<[SiFiveP400Branch, SiFiveP400IEXQ1]> {
647a6dacacSDimitry Andric  let Latency = 2;
657a6dacacSDimitry Andric  let NumMicroOps = 2;
667a6dacacSDimitry Andric}
677a6dacacSDimitry Andricdef : InstRW<[P400WriteCMOV], (instrs PseudoCCMOVGPRNoX0)>;
687a6dacacSDimitry Andric
697a6dacacSDimitry Andriclet Latency = 3 in {
707a6dacacSDimitry Andric// Integer multiplication
717a6dacacSDimitry Andricdef : WriteRes<WriteIMul, [SiFiveP400MulDiv]>;
727a6dacacSDimitry Andricdef : WriteRes<WriteIMul32, [SiFiveP400MulDiv]>;
737a6dacacSDimitry Andric// cpop[w] look exactly like multiply.
747a6dacacSDimitry Andricdef : WriteRes<WriteCPOP, [SiFiveP400MulDiv]>;
757a6dacacSDimitry Andricdef : WriteRes<WriteCPOP32, [SiFiveP400MulDiv]>;
767a6dacacSDimitry Andric}
777a6dacacSDimitry Andric
787a6dacacSDimitry Andric// Integer division
797a6dacacSDimitry Andricdef : WriteRes<WriteIDiv, [SiFiveP400MulDiv, SiFiveP400Div]> {
807a6dacacSDimitry Andric  let Latency = 35;
817a6dacacSDimitry Andric  let ReleaseAtCycles = [1, 34];
827a6dacacSDimitry Andric}
837a6dacacSDimitry Andricdef : WriteRes<WriteIDiv32, [SiFiveP400MulDiv, SiFiveP400Div]> {
847a6dacacSDimitry Andric  let Latency = 20;
857a6dacacSDimitry Andric  let ReleaseAtCycles = [1, 19];
867a6dacacSDimitry Andric}
877a6dacacSDimitry Andric
88*0fca6ea1SDimitry Andric// Integer remainder
89*0fca6ea1SDimitry Andricdef : WriteRes<WriteIRem, [SiFiveP400MulDiv, SiFiveP400Div]> {
90*0fca6ea1SDimitry Andric  let Latency = 35;
91*0fca6ea1SDimitry Andric  let ReleaseAtCycles = [1, 34];
92*0fca6ea1SDimitry Andric}
93*0fca6ea1SDimitry Andricdef : WriteRes<WriteIRem32, [SiFiveP400MulDiv, SiFiveP400Div]> {
94*0fca6ea1SDimitry Andric  let Latency = 20;
95*0fca6ea1SDimitry Andric  let ReleaseAtCycles = [1, 19];
96*0fca6ea1SDimitry Andric}
97*0fca6ea1SDimitry Andric
987a6dacacSDimitry Andriclet Latency = 1 in {
997a6dacacSDimitry Andric// Bitmanip
1007a6dacacSDimitry Andricdef : WriteRes<WriteRotateImm, [SiFiveP400IntArith]>;
1017a6dacacSDimitry Andricdef : WriteRes<WriteRotateImm32, [SiFiveP400IntArith]>;
1027a6dacacSDimitry Andricdef : WriteRes<WriteRotateReg, [SiFiveP400IntArith]>;
1037a6dacacSDimitry Andricdef : WriteRes<WriteRotateReg32, [SiFiveP400IntArith]>;
1047a6dacacSDimitry Andric
1057a6dacacSDimitry Andricdef : WriteRes<WriteCLZ, [SiFiveP400IntArith]>;
1067a6dacacSDimitry Andricdef : WriteRes<WriteCLZ32, [SiFiveP400IntArith]>;
1077a6dacacSDimitry Andricdef : WriteRes<WriteCTZ, [SiFiveP400IntArith]>;
1087a6dacacSDimitry Andricdef : WriteRes<WriteCTZ32, [SiFiveP400IntArith]>;
1097a6dacacSDimitry Andric
1107a6dacacSDimitry Andricdef : WriteRes<WriteORCB, [SiFiveP400IntArith]>;
111*0fca6ea1SDimitry Andricdef : WriteRes<WriteIMinMax, [SiFiveP400IntArith]>;
1127a6dacacSDimitry Andric
1137a6dacacSDimitry Andricdef : WriteRes<WriteREV8, [SiFiveP400IntArith]>;
1147a6dacacSDimitry Andric
1157a6dacacSDimitry Andricdef : WriteRes<WriteSHXADD, [SiFiveP400IntArith]>;
1167a6dacacSDimitry Andricdef : WriteRes<WriteSHXADD32, [SiFiveP400IntArith]>;
1177a6dacacSDimitry Andric
1187a6dacacSDimitry Andricdef : WriteRes<WriteSingleBit, [SiFiveP400IntArith]>;
1197a6dacacSDimitry Andricdef : WriteRes<WriteSingleBitImm, [SiFiveP400IntArith]>;
1207a6dacacSDimitry Andricdef : WriteRes<WriteBEXT, [SiFiveP400IntArith]>;
1217a6dacacSDimitry Andricdef : WriteRes<WriteBEXTI, [SiFiveP400IntArith]>;
1227a6dacacSDimitry Andric}
1237a6dacacSDimitry Andric
1247a6dacacSDimitry Andric// Memory
1257a6dacacSDimitry Andriclet Latency = 1 in {
1267a6dacacSDimitry Andricdef : WriteRes<WriteSTB, [SiFiveP400Store]>;
1277a6dacacSDimitry Andricdef : WriteRes<WriteSTH, [SiFiveP400Store]>;
1287a6dacacSDimitry Andricdef : WriteRes<WriteSTW, [SiFiveP400Store]>;
1297a6dacacSDimitry Andricdef : WriteRes<WriteSTD, [SiFiveP400Store]>;
1307a6dacacSDimitry Andricdef : WriteRes<WriteFST16, [SiFiveP400Store]>;
1317a6dacacSDimitry Andricdef : WriteRes<WriteFST32, [SiFiveP400Store]>;
1327a6dacacSDimitry Andricdef : WriteRes<WriteFST64, [SiFiveP400Store]>;
1337a6dacacSDimitry Andric}
1347a6dacacSDimitry Andriclet Latency = 4 in {
1357a6dacacSDimitry Andricdef : WriteRes<WriteLDB, [SiFiveP400Load]>;
1367a6dacacSDimitry Andricdef : WriteRes<WriteLDH, [SiFiveP400Load]>;
1377a6dacacSDimitry Andric}
1387a6dacacSDimitry Andriclet Latency = 4 in {
1397a6dacacSDimitry Andricdef : WriteRes<WriteLDW, [SiFiveP400Load]>;
1407a6dacacSDimitry Andricdef : WriteRes<WriteLDD, [SiFiveP400Load]>;
1417a6dacacSDimitry Andric}
1427a6dacacSDimitry Andric
143*0fca6ea1SDimitry Andriclet Latency = 5 in {
1447a6dacacSDimitry Andricdef : WriteRes<WriteFLD16, [SiFiveP400Load]>;
1457a6dacacSDimitry Andricdef : WriteRes<WriteFLD32, [SiFiveP400Load]>;
1467a6dacacSDimitry Andricdef : WriteRes<WriteFLD64, [SiFiveP400Load]>;
1477a6dacacSDimitry Andric}
1487a6dacacSDimitry Andric
1497a6dacacSDimitry Andric// Atomic memory
1507a6dacacSDimitry Andriclet Latency = 3 in {
1517a6dacacSDimitry Andricdef : WriteRes<WriteAtomicSTW, [SiFiveP400Store]>;
1527a6dacacSDimitry Andricdef : WriteRes<WriteAtomicSTD, [SiFiveP400Store]>;
1537a6dacacSDimitry Andricdef : WriteRes<WriteAtomicW, [SiFiveP400Load]>;
1547a6dacacSDimitry Andricdef : WriteRes<WriteAtomicD, [SiFiveP400Load]>;
1557a6dacacSDimitry Andricdef : WriteRes<WriteAtomicLDW, [SiFiveP400Load]>;
1567a6dacacSDimitry Andricdef : WriteRes<WriteAtomicLDD, [SiFiveP400Load]>;
1577a6dacacSDimitry Andric}
1587a6dacacSDimitry Andric
1597a6dacacSDimitry Andric// Floating point
1607a6dacacSDimitry Andriclet Latency = 4 in {
1617a6dacacSDimitry Andricdef : WriteRes<WriteFAdd16, [SiFiveP400FloatArith]>;
1627a6dacacSDimitry Andricdef : WriteRes<WriteFAdd32, [SiFiveP400FloatArith]>;
1637a6dacacSDimitry Andricdef : WriteRes<WriteFAdd64, [SiFiveP400FloatArith]>;
1647a6dacacSDimitry Andric
1657a6dacacSDimitry Andricdef : WriteRes<WriteFMul16, [SiFiveP400FloatArith]>;
1667a6dacacSDimitry Andricdef : WriteRes<WriteFMul32, [SiFiveP400FloatArith]>;
1677a6dacacSDimitry Andricdef : WriteRes<WriteFMul64, [SiFiveP400FloatArith]>;
1687a6dacacSDimitry Andric
1697a6dacacSDimitry Andricdef : WriteRes<WriteFMA16, [SiFiveP400FloatArith]>;
1707a6dacacSDimitry Andricdef : WriteRes<WriteFMA32, [SiFiveP400FloatArith]>;
1717a6dacacSDimitry Andricdef : WriteRes<WriteFMA64, [SiFiveP400FloatArith]>;
1727a6dacacSDimitry Andric}
1737a6dacacSDimitry Andric
1747a6dacacSDimitry Andriclet Latency = 2 in {
1757a6dacacSDimitry Andricdef : WriteRes<WriteFSGNJ16, [SiFiveP400FloatArith]>;
1767a6dacacSDimitry Andricdef : WriteRes<WriteFSGNJ32, [SiFiveP400FloatArith]>;
1777a6dacacSDimitry Andricdef : WriteRes<WriteFSGNJ64, [SiFiveP400FloatArith]>;
1787a6dacacSDimitry Andric
1797a6dacacSDimitry Andricdef : WriteRes<WriteFMinMax16, [SiFiveP400FloatArith]>;
1807a6dacacSDimitry Andricdef : WriteRes<WriteFMinMax32, [SiFiveP400FloatArith]>;
1817a6dacacSDimitry Andricdef : WriteRes<WriteFMinMax64, [SiFiveP400FloatArith]>;
1827a6dacacSDimitry Andric}
1837a6dacacSDimitry Andric
1847a6dacacSDimitry Andric// Half precision.
1857a6dacacSDimitry Andricdef : WriteRes<WriteFDiv16, [SiFiveP400FEXQ0, SiFiveP400FloatDiv]> {
1867a6dacacSDimitry Andric  let Latency = 19;
1877a6dacacSDimitry Andric  let ReleaseAtCycles = [1, 18];
1887a6dacacSDimitry Andric}
1897a6dacacSDimitry Andricdef : WriteRes<WriteFSqrt16, [SiFiveP400FEXQ0, SiFiveP400FloatDiv]> {
1907a6dacacSDimitry Andric  let Latency = 18;
1917a6dacacSDimitry Andric  let ReleaseAtCycles = [1, 17];
1927a6dacacSDimitry Andric}
1937a6dacacSDimitry Andric
1947a6dacacSDimitry Andric// Single precision.
1957a6dacacSDimitry Andricdef : WriteRes<WriteFDiv32, [SiFiveP400FEXQ0, SiFiveP400FloatDiv]> {
1967a6dacacSDimitry Andric  let Latency = 19;
1977a6dacacSDimitry Andric  let ReleaseAtCycles = [1, 18];
1987a6dacacSDimitry Andric}
1997a6dacacSDimitry Andricdef : WriteRes<WriteFSqrt32, [SiFiveP400FEXQ0, SiFiveP400FloatDiv]> {
2007a6dacacSDimitry Andric  let Latency = 18;
2017a6dacacSDimitry Andric  let ReleaseAtCycles = [1, 17];
2027a6dacacSDimitry Andric}
2037a6dacacSDimitry Andric
2047a6dacacSDimitry Andric// Double precision
2057a6dacacSDimitry Andricdef : WriteRes<WriteFDiv64, [SiFiveP400FEXQ0, SiFiveP400FloatDiv]> {
2067a6dacacSDimitry Andric  let Latency = 33;
2077a6dacacSDimitry Andric  let ReleaseAtCycles = [1, 32];
2087a6dacacSDimitry Andric}
2097a6dacacSDimitry Andricdef : WriteRes<WriteFSqrt64, [SiFiveP400FEXQ0, SiFiveP400FloatDiv]> {
2107a6dacacSDimitry Andric  let Latency = 33;
2117a6dacacSDimitry Andric  let ReleaseAtCycles = [1, 32];
2127a6dacacSDimitry Andric}
2137a6dacacSDimitry Andric
2147a6dacacSDimitry Andric// Conversions
2157a6dacacSDimitry Andriclet Latency = 2 in {
2167a6dacacSDimitry Andricdef : WriteRes<WriteFCvtI32ToF16, [SiFiveP400I2F]>;
2177a6dacacSDimitry Andricdef : WriteRes<WriteFCvtI32ToF32, [SiFiveP400I2F]>;
2187a6dacacSDimitry Andricdef : WriteRes<WriteFCvtI32ToF64, [SiFiveP400I2F]>;
2197a6dacacSDimitry Andricdef : WriteRes<WriteFCvtI64ToF16, [SiFiveP400I2F]>;
2207a6dacacSDimitry Andricdef : WriteRes<WriteFCvtI64ToF32, [SiFiveP400I2F]>;
2217a6dacacSDimitry Andricdef : WriteRes<WriteFCvtI64ToF64, [SiFiveP400I2F]>;
2227a6dacacSDimitry Andricdef : WriteRes<WriteFCvtF16ToI32, [SiFiveP400F2I]>;
2237a6dacacSDimitry Andricdef : WriteRes<WriteFCvtF16ToI64, [SiFiveP400F2I]>;
2247a6dacacSDimitry Andricdef : WriteRes<WriteFCvtF16ToF32, [SiFiveP400FloatArith]>;
2257a6dacacSDimitry Andricdef : WriteRes<WriteFCvtF16ToF64, [SiFiveP400FloatArith]>;
2267a6dacacSDimitry Andricdef : WriteRes<WriteFCvtF32ToI32, [SiFiveP400F2I]>;
2277a6dacacSDimitry Andricdef : WriteRes<WriteFCvtF32ToI64, [SiFiveP400F2I]>;
2287a6dacacSDimitry Andricdef : WriteRes<WriteFCvtF32ToF16, [SiFiveP400FloatArith]>;
2297a6dacacSDimitry Andricdef : WriteRes<WriteFCvtF32ToF64, [SiFiveP400FloatArith]>;
2307a6dacacSDimitry Andricdef : WriteRes<WriteFCvtF64ToI32, [SiFiveP400F2I]>;
2317a6dacacSDimitry Andricdef : WriteRes<WriteFCvtF64ToI64, [SiFiveP400F2I]>;
2327a6dacacSDimitry Andricdef : WriteRes<WriteFCvtF64ToF16, [SiFiveP400FloatArith]>;
2337a6dacacSDimitry Andricdef : WriteRes<WriteFCvtF64ToF32, [SiFiveP400FloatArith]>;
2347a6dacacSDimitry Andric
2357a6dacacSDimitry Andricdef : WriteRes<WriteFClass16, [SiFiveP400F2I]>;
2367a6dacacSDimitry Andricdef : WriteRes<WriteFClass32, [SiFiveP400F2I]>;
2377a6dacacSDimitry Andricdef : WriteRes<WriteFClass64, [SiFiveP400F2I]>;
2387a6dacacSDimitry Andricdef : WriteRes<WriteFCmp16, [SiFiveP400F2I]>;
2397a6dacacSDimitry Andricdef : WriteRes<WriteFCmp32, [SiFiveP400F2I]>;
2407a6dacacSDimitry Andricdef : WriteRes<WriteFCmp64, [SiFiveP400F2I]>;
2417a6dacacSDimitry Andricdef : WriteRes<WriteFMovI16ToF16, [SiFiveP400I2F]>;
2427a6dacacSDimitry Andricdef : WriteRes<WriteFMovF16ToI16, [SiFiveP400F2I]>;
2437a6dacacSDimitry Andricdef : WriteRes<WriteFMovI32ToF32, [SiFiveP400I2F]>;
2447a6dacacSDimitry Andricdef : WriteRes<WriteFMovF32ToI32, [SiFiveP400F2I]>;
2457a6dacacSDimitry Andricdef : WriteRes<WriteFMovI64ToF64, [SiFiveP400I2F]>;
2467a6dacacSDimitry Andricdef : WriteRes<WriteFMovF64ToI64, [SiFiveP400F2I]>;
2477a6dacacSDimitry Andric}
2487a6dacacSDimitry Andric
2497a6dacacSDimitry Andric// Others
2507a6dacacSDimitry Andricdef : WriteRes<WriteCSR, [SiFiveP400SYS]>;
2517a6dacacSDimitry Andricdef : WriteRes<WriteNop, []>;
2527a6dacacSDimitry Andric
2537a6dacacSDimitry Andric// FIXME: This could be better modeled by looking at the regclasses of the operands.
2547a6dacacSDimitry Andricdef : InstRW<[WriteIALU, ReadIALU], (instrs COPY)>;
2557a6dacacSDimitry Andric
2567a6dacacSDimitry Andric//===----------------------------------------------------------------------===//
2577a6dacacSDimitry Andric// Bypass and advance
2587a6dacacSDimitry Andricdef : ReadAdvance<ReadJmp, 0>;
2597a6dacacSDimitry Andricdef : ReadAdvance<ReadJalr, 0>;
2607a6dacacSDimitry Andricdef : ReadAdvance<ReadCSR, 0>;
2617a6dacacSDimitry Andricdef : ReadAdvance<ReadStoreData, 0>;
2627a6dacacSDimitry Andricdef : ReadAdvance<ReadMemBase, 0>;
2637a6dacacSDimitry Andricdef : ReadAdvance<ReadIALU, 0>;
2647a6dacacSDimitry Andricdef : ReadAdvance<ReadIALU32, 0>;
2657a6dacacSDimitry Andricdef : ReadAdvance<ReadShiftImm, 0>;
2667a6dacacSDimitry Andricdef : ReadAdvance<ReadShiftImm32, 0>;
2677a6dacacSDimitry Andricdef : ReadAdvance<ReadShiftReg, 0>;
2687a6dacacSDimitry Andricdef : ReadAdvance<ReadShiftReg32, 0>;
2697a6dacacSDimitry Andricdef : ReadAdvance<ReadIDiv, 0>;
2707a6dacacSDimitry Andricdef : ReadAdvance<ReadIDiv32, 0>;
271*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIRem, 0>;
272*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIRem32, 0>;
2737a6dacacSDimitry Andricdef : ReadAdvance<ReadIMul, 0>;
2747a6dacacSDimitry Andricdef : ReadAdvance<ReadIMul32, 0>;
2757a6dacacSDimitry Andricdef : ReadAdvance<ReadAtomicWA, 0>;
2767a6dacacSDimitry Andricdef : ReadAdvance<ReadAtomicWD, 0>;
2777a6dacacSDimitry Andricdef : ReadAdvance<ReadAtomicDA, 0>;
2787a6dacacSDimitry Andricdef : ReadAdvance<ReadAtomicDD, 0>;
2797a6dacacSDimitry Andricdef : ReadAdvance<ReadAtomicLDW, 0>;
2807a6dacacSDimitry Andricdef : ReadAdvance<ReadAtomicLDD, 0>;
2817a6dacacSDimitry Andricdef : ReadAdvance<ReadAtomicSTW, 0>;
2827a6dacacSDimitry Andricdef : ReadAdvance<ReadAtomicSTD, 0>;
2837a6dacacSDimitry Andricdef : ReadAdvance<ReadFStoreData, 0>;
2847a6dacacSDimitry Andricdef : ReadAdvance<ReadFMemBase, 0>;
2857a6dacacSDimitry Andricdef : ReadAdvance<ReadFAdd16, 0>;
2867a6dacacSDimitry Andricdef : ReadAdvance<ReadFAdd32, 0>;
2877a6dacacSDimitry Andricdef : ReadAdvance<ReadFAdd64, 0>;
2887a6dacacSDimitry Andricdef : ReadAdvance<ReadFMul16, 0>;
2897a6dacacSDimitry Andricdef : ReadAdvance<ReadFMA16, 0>;
2907a6dacacSDimitry Andricdef : ReadAdvance<ReadFMA16Addend, 0>;
2917a6dacacSDimitry Andricdef : ReadAdvance<ReadFMul32, 0>;
2927a6dacacSDimitry Andricdef : ReadAdvance<ReadFMA32, 0>;
2937a6dacacSDimitry Andricdef : ReadAdvance<ReadFMA32Addend, 0>;
2947a6dacacSDimitry Andricdef : ReadAdvance<ReadFMul64, 0>;
2957a6dacacSDimitry Andricdef : ReadAdvance<ReadFMA64, 0>;
2967a6dacacSDimitry Andricdef : ReadAdvance<ReadFMA64Addend, 0>;
2977a6dacacSDimitry Andricdef : ReadAdvance<ReadFDiv16, 0>;
2987a6dacacSDimitry Andricdef : ReadAdvance<ReadFDiv32, 0>;
2997a6dacacSDimitry Andricdef : ReadAdvance<ReadFDiv64, 0>;
3007a6dacacSDimitry Andricdef : ReadAdvance<ReadFSqrt16, 0>;
3017a6dacacSDimitry Andricdef : ReadAdvance<ReadFSqrt32, 0>;
3027a6dacacSDimitry Andricdef : ReadAdvance<ReadFSqrt64, 0>;
3037a6dacacSDimitry Andricdef : ReadAdvance<ReadFCmp16, 0>;
3047a6dacacSDimitry Andricdef : ReadAdvance<ReadFCmp32, 0>;
3057a6dacacSDimitry Andricdef : ReadAdvance<ReadFCmp64, 0>;
3067a6dacacSDimitry Andricdef : ReadAdvance<ReadFSGNJ16, 0>;
3077a6dacacSDimitry Andricdef : ReadAdvance<ReadFSGNJ32, 0>;
3087a6dacacSDimitry Andricdef : ReadAdvance<ReadFSGNJ64, 0>;
3097a6dacacSDimitry Andricdef : ReadAdvance<ReadFMinMax16, 0>;
3107a6dacacSDimitry Andricdef : ReadAdvance<ReadFMinMax32, 0>;
3117a6dacacSDimitry Andricdef : ReadAdvance<ReadFMinMax64, 0>;
3127a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtF16ToI32, 0>;
3137a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtF16ToI64, 0>;
3147a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtF32ToI32, 0>;
3157a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtF32ToI64, 0>;
3167a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtF64ToI32, 0>;
3177a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtF64ToI64, 0>;
3187a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtI32ToF16, 0>;
3197a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtI32ToF32, 0>;
3207a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtI32ToF64, 0>;
3217a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtI64ToF16, 0>;
3227a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtI64ToF32, 0>;
3237a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtI64ToF64, 0>;
3247a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtF32ToF64, 0>;
3257a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtF64ToF32, 0>;
3267a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtF16ToF32, 0>;
3277a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtF32ToF16, 0>;
3287a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtF16ToF64, 0>;
3297a6dacacSDimitry Andricdef : ReadAdvance<ReadFCvtF64ToF16, 0>;
3307a6dacacSDimitry Andricdef : ReadAdvance<ReadFMovF16ToI16, 0>;
3317a6dacacSDimitry Andricdef : ReadAdvance<ReadFMovI16ToF16, 0>;
3327a6dacacSDimitry Andricdef : ReadAdvance<ReadFMovF32ToI32, 0>;
3337a6dacacSDimitry Andricdef : ReadAdvance<ReadFMovI32ToF32, 0>;
3347a6dacacSDimitry Andricdef : ReadAdvance<ReadFMovF64ToI64, 0>;
3357a6dacacSDimitry Andricdef : ReadAdvance<ReadFMovI64ToF64, 0>;
3367a6dacacSDimitry Andricdef : ReadAdvance<ReadFClass16, 0>;
3377a6dacacSDimitry Andricdef : ReadAdvance<ReadFClass32, 0>;
3387a6dacacSDimitry Andricdef : ReadAdvance<ReadFClass64, 0>;
3397a6dacacSDimitry Andric
3407a6dacacSDimitry Andric// Bitmanip
3417a6dacacSDimitry Andricdef : ReadAdvance<ReadRotateImm, 0>;
3427a6dacacSDimitry Andricdef : ReadAdvance<ReadRotateImm32, 0>;
3437a6dacacSDimitry Andricdef : ReadAdvance<ReadRotateReg, 0>;
3447a6dacacSDimitry Andricdef : ReadAdvance<ReadRotateReg32, 0>;
3457a6dacacSDimitry Andricdef : ReadAdvance<ReadCLZ, 0>;
3467a6dacacSDimitry Andricdef : ReadAdvance<ReadCLZ32, 0>;
3477a6dacacSDimitry Andricdef : ReadAdvance<ReadCTZ, 0>;
3487a6dacacSDimitry Andricdef : ReadAdvance<ReadCTZ32, 0>;
3497a6dacacSDimitry Andricdef : ReadAdvance<ReadCPOP, 0>;
3507a6dacacSDimitry Andricdef : ReadAdvance<ReadCPOP32, 0>;
3517a6dacacSDimitry Andricdef : ReadAdvance<ReadORCB, 0>;
352*0fca6ea1SDimitry Andricdef : ReadAdvance<ReadIMinMax, 0>;
3537a6dacacSDimitry Andricdef : ReadAdvance<ReadREV8, 0>;
3547a6dacacSDimitry Andricdef : ReadAdvance<ReadSHXADD, 0>;
3557a6dacacSDimitry Andricdef : ReadAdvance<ReadSHXADD32, 0>;
3567a6dacacSDimitry Andricdef : ReadAdvance<ReadSingleBit, 0>;
3577a6dacacSDimitry Andricdef : ReadAdvance<ReadSingleBitImm, 0>;
3587a6dacacSDimitry Andric
3597a6dacacSDimitry Andric//===----------------------------------------------------------------------===//
3607a6dacacSDimitry Andric// Unsupported extensions
361*0fca6ea1SDimitry Andricdefm : UnsupportedSchedZabha;
3627a6dacacSDimitry Andricdefm : UnsupportedSchedZbc;
3637a6dacacSDimitry Andricdefm : UnsupportedSchedZbkb;
3647a6dacacSDimitry Andricdefm : UnsupportedSchedZbkx;
3657a6dacacSDimitry Andricdefm : UnsupportedSchedSFB;
3667a6dacacSDimitry Andricdefm : UnsupportedSchedZfa;
3677a6dacacSDimitry Andricdefm : UnsupportedSchedV;
368*0fca6ea1SDimitry Andricdefm : UnsupportedSchedXsfvcp;
369*0fca6ea1SDimitry Andricdefm : UnsupportedSchedZvk;
3707a6dacacSDimitry Andric}
371