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