10b57cec5SDimitry Andric//-- SystemZScheduleZ14.td - SystemZ Scheduling Definitions ----*- tblgen -*-=// 20b57cec5SDimitry Andric// 30b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric// 70b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric// 90b57cec5SDimitry Andric// This file defines the machine model for Z14 to support instruction 100b57cec5SDimitry Andric// scheduling and other instruction cost heuristics. 110b57cec5SDimitry Andric// 120b57cec5SDimitry Andric// Pseudos expanded right after isel do not need to be modelled here. 130b57cec5SDimitry Andric// 140b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 150b57cec5SDimitry Andric 160b57cec5SDimitry Andricdef Z14Model : SchedMachineModel { 170b57cec5SDimitry Andric 180b57cec5SDimitry Andric let UnsupportedFeatures = Arch12UnsupportedFeatures.List; 190b57cec5SDimitry Andric 200b57cec5SDimitry Andric let IssueWidth = 6; // Number of instructions decoded per cycle. 210b57cec5SDimitry Andric let MicroOpBufferSize = 60; // Issue queues 220b57cec5SDimitry Andric let LoadLatency = 1; // Optimistic load latency. 230b57cec5SDimitry Andric 240b57cec5SDimitry Andric let PostRAScheduler = 1; 250b57cec5SDimitry Andric 260b57cec5SDimitry Andric // Extra cycles for a mispredicted branch. 270b57cec5SDimitry Andric let MispredictPenalty = 20; 280b57cec5SDimitry Andric} 290b57cec5SDimitry Andric 300b57cec5SDimitry Andriclet SchedModel = Z14Model in { 310b57cec5SDimitry Andric// These definitions need the SchedModel value. They could be put in a 320b57cec5SDimitry Andric// subtarget common include file, but it seems the include system in Tablegen 330b57cec5SDimitry Andric// currently (2016) rejects multiple includes of same file. 340b57cec5SDimitry Andric 350b57cec5SDimitry Andric// Decoder grouping rules 360b57cec5SDimitry Andriclet NumMicroOps = 1 in { 370b57cec5SDimitry Andric def : WriteRes<NormalGr, []>; 380b57cec5SDimitry Andric def : WriteRes<BeginGroup, []> { let BeginGroup = 1; } 390b57cec5SDimitry Andric def : WriteRes<EndGroup, []> { let EndGroup = 1; } 400b57cec5SDimitry Andric} 410b57cec5SDimitry Andricdef : WriteRes<Cracked, []> { 420b57cec5SDimitry Andric let NumMicroOps = 2; 430b57cec5SDimitry Andric let BeginGroup = 1; 440b57cec5SDimitry Andric} 450b57cec5SDimitry Andricdef : WriteRes<GroupAlone, []> { 460b57cec5SDimitry Andric let NumMicroOps = 3; 470b57cec5SDimitry Andric let BeginGroup = 1; 480b57cec5SDimitry Andric let EndGroup = 1; 490b57cec5SDimitry Andric} 500b57cec5SDimitry Andricdef : WriteRes<GroupAlone2, []> { 510b57cec5SDimitry Andric let NumMicroOps = 6; 520b57cec5SDimitry Andric let BeginGroup = 1; 530b57cec5SDimitry Andric let EndGroup = 1; 540b57cec5SDimitry Andric} 550b57cec5SDimitry Andricdef : WriteRes<GroupAlone3, []> { 560b57cec5SDimitry Andric let NumMicroOps = 9; 570b57cec5SDimitry Andric let BeginGroup = 1; 580b57cec5SDimitry Andric let EndGroup = 1; 590b57cec5SDimitry Andric} 600b57cec5SDimitry Andric 610b57cec5SDimitry Andric// Incoming latency removed from the register operand which is used together 620b57cec5SDimitry Andric// with a memory operand by the instruction. 630b57cec5SDimitry Andricdef : ReadAdvance<RegReadAdv, 4>; 640b57cec5SDimitry Andric 650b57cec5SDimitry Andric// LoadLatency (above) is not used for instructions in this file. This is 660b57cec5SDimitry Andric// instead the role of LSULatency, which is the latency value added to the 670b57cec5SDimitry Andric// result of loads and instructions with folded memory operands. 680b57cec5SDimitry Andricdef : WriteRes<LSULatency, []> { let Latency = 4; let NumMicroOps = 0; } 690b57cec5SDimitry Andric 700b57cec5SDimitry Andriclet NumMicroOps = 0 in { 710b57cec5SDimitry Andric foreach L = 1-30 in 720b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("WLat"#L), []> { let Latency = L; } 730b57cec5SDimitry Andric} 740b57cec5SDimitry Andric 750b57cec5SDimitry Andric// Execution units. 760b57cec5SDimitry Andricdef Z14_FXaUnit : ProcResource<2>; 770b57cec5SDimitry Andricdef Z14_FXbUnit : ProcResource<2>; 780b57cec5SDimitry Andricdef Z14_LSUnit : ProcResource<2>; 790b57cec5SDimitry Andricdef Z14_VecUnit : ProcResource<2>; 800b57cec5SDimitry Andricdef Z14_VecFPdUnit : ProcResource<2> { let BufferSize = 1; /* blocking */ } 810b57cec5SDimitry Andricdef Z14_VBUnit : ProcResource<2>; 820b57cec5SDimitry Andricdef Z14_MCD : ProcResource<1>; 830b57cec5SDimitry Andric 840b57cec5SDimitry Andric// Subtarget specific definitions of scheduling resources. 850b57cec5SDimitry Andriclet NumMicroOps = 0 in { 860b57cec5SDimitry Andric def : WriteRes<FXa, [Z14_FXaUnit]>; 870b57cec5SDimitry Andric def : WriteRes<FXb, [Z14_FXbUnit]>; 880b57cec5SDimitry Andric def : WriteRes<LSU, [Z14_LSUnit]>; 890b57cec5SDimitry Andric def : WriteRes<VecBF, [Z14_VecUnit]>; 900b57cec5SDimitry Andric def : WriteRes<VecDF, [Z14_VecUnit]>; 910b57cec5SDimitry Andric def : WriteRes<VecDFX, [Z14_VecUnit]>; 920b57cec5SDimitry Andric def : WriteRes<VecMul, [Z14_VecUnit]>; 930b57cec5SDimitry Andric def : WriteRes<VecStr, [Z14_VecUnit]>; 940b57cec5SDimitry Andric def : WriteRes<VecXsPm, [Z14_VecUnit]>; 955f757f3fSDimitry Andric foreach Num = 2-5 in { let ReleaseAtCycles = [Num] in { 960b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("FXa"#Num), [Z14_FXaUnit]>; 970b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("FXb"#Num), [Z14_FXbUnit]>; 980b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("LSU"#Num), [Z14_LSUnit]>; 990b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecBF"#Num), [Z14_VecUnit]>; 1000b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecDF"#Num), [Z14_VecUnit]>; 1010b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecDFX"#Num), [Z14_VecUnit]>; 1020b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecMul"#Num), [Z14_VecUnit]>; 1030b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecStr"#Num), [Z14_VecUnit]>; 1040b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecXsPm"#Num), [Z14_VecUnit]>; 1050b57cec5SDimitry Andric }} 1060b57cec5SDimitry Andric 1075f757f3fSDimitry Andric def : WriteRes<VecFPd, [Z14_VecFPdUnit]> { let ReleaseAtCycles = [30]; } 1080b57cec5SDimitry Andric 1090b57cec5SDimitry Andric def : WriteRes<VBU, [Z14_VBUnit]>; // Virtual Branching Unit 1100b57cec5SDimitry Andric} 1110b57cec5SDimitry Andric 1120b57cec5SDimitry Andricdef : WriteRes<MCD, [Z14_MCD]> { let NumMicroOps = 3; 1130b57cec5SDimitry Andric let BeginGroup = 1; 1140b57cec5SDimitry Andric let EndGroup = 1; } 1150b57cec5SDimitry Andric 1160b57cec5SDimitry Andric// -------------------------- INSTRUCTIONS ---------------------------------- // 1170b57cec5SDimitry Andric 1180b57cec5SDimitry Andric// InstRW constructs have been used in order to preserve the 1190b57cec5SDimitry Andric// readability of the InstrInfo files. 1200b57cec5SDimitry Andric 1210b57cec5SDimitry Andric// For each instruction, as matched by a regexp, provide a list of 1220b57cec5SDimitry Andric// resources that it needs. These will be combined into a SchedClass. 1230b57cec5SDimitry Andric 1240b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1250b57cec5SDimitry Andric// Stack allocation 1260b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1270b57cec5SDimitry Andric 1280b57cec5SDimitry Andric// Pseudo -> LA / LAY 1290b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ADJDYNALLOC$")>; 1300b57cec5SDimitry Andric 1310b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1320b57cec5SDimitry Andric// Branch instructions 1330b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1340b57cec5SDimitry Andric 1350b57cec5SDimitry Andric// Branch 1360b57cec5SDimitry Andricdef : InstRW<[WLat1, VBU, NormalGr], (instregex "(Call)?BRC(L)?(Asm.*)?$")>; 1370b57cec5SDimitry Andricdef : InstRW<[WLat1, VBU, NormalGr], (instregex "(Call)?J(G)?(Asm.*)?$")>; 1380b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "(Call)?BC(R)?(Asm.*)?$")>; 1390b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "(Call)?B(R)?(Asm.*)?$")>; 1400b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "BI(C)?(Asm.*)?$")>; 1410b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, EndGroup], (instregex "BRCT(G)?$")>; 1420b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, FXb, GroupAlone], (instregex "BRCTH$")>; 1430b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, FXb, GroupAlone], (instregex "BCT(G)?(R)?$")>; 1440b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb2, GroupAlone2], 1450b57cec5SDimitry Andric (instregex "B(R)?X(H|L).*$")>; 1460b57cec5SDimitry Andric 1470b57cec5SDimitry Andric// Compare and branch 1480b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(L)?(G)?(I|R)J(Asm.*)?$")>; 1490b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb2, GroupAlone], 1500b57cec5SDimitry Andric (instregex "C(L)?(G)?(I|R)B(Call|Return|Asm.*)?$")>; 1510b57cec5SDimitry Andric 1520b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1530b57cec5SDimitry Andric// Trap instructions 1540b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1550b57cec5SDimitry Andric 1560b57cec5SDimitry Andric// Trap 1570b57cec5SDimitry Andricdef : InstRW<[WLat1, VBU, NormalGr], (instregex "(Cond)?Trap$")>; 1580b57cec5SDimitry Andric 1590b57cec5SDimitry Andric// Compare and trap 1600b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(G)?(I|R)T(Asm.*)?$")>; 1610b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CL(G)?RT(Asm.*)?$")>; 1620b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CL(F|G)IT(Asm.*)?$")>; 1630b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "CL(G)?T(Asm.*)?$")>; 1640b57cec5SDimitry Andric 1650b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1660b57cec5SDimitry Andric// Call and return instructions 1670b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1680b57cec5SDimitry Andric 1690b57cec5SDimitry Andric// Call 1700b57cec5SDimitry Andricdef : InstRW<[WLat1, VBU, FXa2, GroupAlone], (instregex "(Call)?BRAS$")>; 171fe6060f1SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "(Call)?BRASL(_XPLINK64)?$")>; 17281ad6265SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "(Call)?BAS(R)?(_XPLINK64|_STACKEXT)?$")>; 1730b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "TLS_(G|L)DCALL$")>; 1740b57cec5SDimitry Andric 1750b57cec5SDimitry Andric// Return 17681ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, EndGroup], (instregex "Return(_XPLINK)?$")>; 17781ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CondReturn(_XPLINK)?$")>; 1780b57cec5SDimitry Andric 1790b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1800b57cec5SDimitry Andric// Move instructions 1810b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1820b57cec5SDimitry Andric 1830b57cec5SDimitry Andric// Moves 1840b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "MV(G|H)?HI$")>; 1850b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "MVI(Y)?$")>; 1860b57cec5SDimitry Andric 1870b57cec5SDimitry Andric// Move character 1880b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU3, GroupAlone], (instregex "MVC$")>; 1890b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "MVCL(E|U)?$")>; 1900b57cec5SDimitry Andric 1910b57cec5SDimitry Andric// Pseudo -> reg move 1920b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "COPY(_TO_REGCLASS)?$")>; 1930b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "EXTRACT_SUBREG$")>; 1940b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "INSERT_SUBREG$")>; 1950b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "REG_SEQUENCE$")>; 1960b57cec5SDimitry Andric 1970b57cec5SDimitry Andric// Loads 1980b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "L(Y|FH|RL|Mux)?$")>; 1990b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSULatency, LSU, NormalGr], (instregex "LCBB$")>; 2000b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LG(RL)?$")>; 2010b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "L128$")>; 2020b57cec5SDimitry Andric 2030b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLIH(F|H|L)$")>; 2040b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLIL(F|H|L)$")>; 2050b57cec5SDimitry Andric 2060b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LG(F|H)I$")>; 2070b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LHI(Mux)?$")>; 208e8d8bef9SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LR$")>; 2090b57cec5SDimitry Andric 2100b57cec5SDimitry Andric// Load and zero rightmost byte 2110b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LZR(F|G)$")>; 2120b57cec5SDimitry Andric 2130b57cec5SDimitry Andric// Load and trap 2140b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "L(FH|G)?AT$")>; 2150b57cec5SDimitry Andric 2160b57cec5SDimitry Andric// Load and test 2170b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, LSU, FXa, NormalGr], (instregex "LT(G)?$")>; 2180b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LT(G)?R$")>; 2190b57cec5SDimitry Andric 2200b57cec5SDimitry Andric// Stores 2210b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STG(RL)?$")>; 2220b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "ST128$")>; 2230b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "ST(Y|FH|RL|Mux)?$")>; 2240b57cec5SDimitry Andric 2250b57cec5SDimitry Andric// String moves. 2260b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "MVST$")>; 2270b57cec5SDimitry Andric 2280b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2290b57cec5SDimitry Andric// Conditional move instructions 2300b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2310b57cec5SDimitry Andric 2320b57cec5SDimitry Andricdef : InstRW<[WLat2, FXa, NormalGr], (instregex "LOCRMux$")>; 2330b57cec5SDimitry Andricdef : InstRW<[WLat2, FXa, NormalGr], (instregex "LOC(G|FH)?R(Asm.*)?$")>; 2340b57cec5SDimitry Andricdef : InstRW<[WLat2, FXa, NormalGr], (instregex "LOC(G|H)?HI(Mux|(Asm.*))?$")>; 2350b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 2360b57cec5SDimitry Andric (instregex "LOC(G|FH|Mux)?(Asm.*)?$")>; 2370b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], 2380b57cec5SDimitry Andric (instregex "STOC(G|FH|Mux)?(Asm.*)?$")>; 2390b57cec5SDimitry Andric 2400b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2410b57cec5SDimitry Andric// Sign extensions 2420b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2430b57cec5SDimitry Andric 2440b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "L(B|H|G)R$")>; 2450b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LG(B|H|F)R$")>; 2460b57cec5SDimitry Andric 2470b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, FXa, LSU, NormalGr], (instregex "LTGF$")>; 2480b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LTGFR$")>; 2490b57cec5SDimitry Andric 2500b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LB(H|Mux)?$")>; 2510b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LH(Y)?$")>; 2520b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LH(H|Mux|RL)$")>; 2530b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LG(B|H|F)$")>; 2540b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LG(H|F)RL$")>; 2550b57cec5SDimitry Andric 2560b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2570b57cec5SDimitry Andric// Zero extensions 2580b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2590b57cec5SDimitry Andric 2600b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLCR(Mux)?$")>; 2610b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLHR(Mux)?$")>; 2620b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLG(C|H|F|T)R$")>; 2630b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLC(Mux)?$")>; 2640b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLH(Mux)?$")>; 2650b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LL(C|H)H$")>; 2660b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLHRL$")>; 2670b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLG(C|H|F|T|HRL|FRL)$")>; 2680b57cec5SDimitry Andric 2690b57cec5SDimitry Andric// Load and zero rightmost byte 2700b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLZRGF$")>; 2710b57cec5SDimitry Andric 2720b57cec5SDimitry Andric// Load and trap 2730b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "LLG(F|T)?AT$")>; 2740b57cec5SDimitry Andric 2750b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2760b57cec5SDimitry Andric// Truncations 2770b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2780b57cec5SDimitry Andric 2790b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STC(H|Y|Mux)?$")>; 2800b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STH(H|Y|RL|Mux)?$")>; 2810b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STCM(H|Y)?$")>; 2820b57cec5SDimitry Andric 2830b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2840b57cec5SDimitry Andric// Multi-register moves 2850b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2860b57cec5SDimitry Andric 2870b57cec5SDimitry Andric// Load multiple (estimated average of 5 ops) 2880b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, LSU5, GroupAlone], (instregex "LM(H|Y|G)?$")>; 2890b57cec5SDimitry Andric 2900b57cec5SDimitry Andric// Load multiple disjoint 2910b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "LMD$")>; 2920b57cec5SDimitry Andric 2930b57cec5SDimitry Andric// Store multiple 2940b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU2, FXb3, GroupAlone], (instregex "STM(G|H|Y)?$")>; 2950b57cec5SDimitry Andric 2960b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2970b57cec5SDimitry Andric// Byte swaps 2980b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 2990b57cec5SDimitry Andric 3000b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LRV(G)?R$")>; 3010b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LRV(G|H)?$")>; 3020b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STRV(G|H)?$")>; 3030b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "MVCIN$")>; 3040b57cec5SDimitry Andric 3050b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3060b57cec5SDimitry Andric// Load address instructions 3070b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3080b57cec5SDimitry Andric 3090b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LA(Y|RL)?$")>; 3100b57cec5SDimitry Andric 3110b57cec5SDimitry Andric// Load the Global Offset Table address ( -> larl ) 3120b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "GOT$")>; 3130b57cec5SDimitry Andric 3140b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3150b57cec5SDimitry Andric// Absolute and Negation 3160b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3170b57cec5SDimitry Andric 3180b57cec5SDimitry Andricdef : InstRW<[WLat1, WLat1, FXa, NormalGr], (instregex "LP(G)?R$")>; 3190b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa2, Cracked], (instregex "L(N|P)GFR$")>; 3200b57cec5SDimitry Andricdef : InstRW<[WLat1, WLat1, FXa, NormalGr], (instregex "LN(R|GR)$")>; 3210b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LC(R|GR)$")>; 3220b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa2, Cracked], (instregex "LCGFR$")>; 3230b57cec5SDimitry Andric 3240b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3250b57cec5SDimitry Andric// Insertion 3260b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3270b57cec5SDimitry Andric 3280b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], (instregex "IC(Y)?$")>; 3290b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 3300b57cec5SDimitry Andric (instregex "IC32(Y)?$")>; 3310b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, WLat1LSU, FXa, LSU, NormalGr], 3320b57cec5SDimitry Andric (instregex "ICM(H|Y)?$")>; 3330b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "II(F|H|L)Mux$")>; 3340b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IIHF(64)?$")>; 3350b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IIHH(64)?$")>; 3360b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IIHL(64)?$")>; 3370b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IILF(64)?$")>; 3380b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IILH(64)?$")>; 3390b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IILL(64)?$")>; 3400b57cec5SDimitry Andric 3410b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3420b57cec5SDimitry Andric// Addition 3430b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3440b57cec5SDimitry Andric 3450b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 3460b57cec5SDimitry Andric (instregex "A(Y)?$")>; 3470b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 3480b57cec5SDimitry Andric (instregex "AH(Y)?$")>; 3490b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AIH$")>; 3500b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AFI(Mux)?$")>; 3510b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 3520b57cec5SDimitry Andric (instregex "AG$")>; 3530b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AGFI$")>; 3540b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AGHI(K)?$")>; 3550b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AGR(K)?$")>; 3560b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AHI(K)?$")>; 3570b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AHIMux(K)?$")>; 3580b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 3590b57cec5SDimitry Andric (instregex "AL(Y)?$")>; 3600b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AL(FI|HSIK)$")>; 3610b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 3620b57cec5SDimitry Andric (instregex "ALG(F)?$")>; 3630b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALGHSIK$")>; 3640b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALGF(I|R)$")>; 3650b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALGR(K)?$")>; 3660b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALR(K)?$")>; 3670b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AR(K)?$")>; 3680b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "A(L)?HHHR$")>; 3690b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, NormalGr], (instregex "A(L)?HHLR$")>; 3700b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALSIH(N)?$")>; 3710b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "A(L)?(G)?SI$")>; 3720b57cec5SDimitry Andric 3730b57cec5SDimitry Andric// Logical addition with carry 3740b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, GroupAlone], 3750b57cec5SDimitry Andric (instregex "ALC(G)?$")>; 3760b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, GroupAlone], (instregex "ALC(G)?R$")>; 3770b57cec5SDimitry Andric 3780b57cec5SDimitry Andric// Add with sign extension (16/32 -> 64) 3790b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 3800b57cec5SDimitry Andric (instregex "AG(F|H)$")>; 3810b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, NormalGr], (instregex "AGFR$")>; 3820b57cec5SDimitry Andric 3830b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3840b57cec5SDimitry Andric// Subtraction 3850b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 3860b57cec5SDimitry Andric 3870b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 3880b57cec5SDimitry Andric (instregex "S(G|Y)?$")>; 3890b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 3900b57cec5SDimitry Andric (instregex "SH(Y)?$")>; 3910b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SGR(K)?$")>; 3920b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLFI$")>; 3930b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 3940b57cec5SDimitry Andric (instregex "SL(G|GF|Y)?$")>; 3950b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLGF(I|R)$")>; 3960b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLGR(K)?$")>; 3970b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLR(K)?$")>; 3980b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SR(K)?$")>; 3990b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "S(L)?HHHR$")>; 4000b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, NormalGr], (instregex "S(L)?HHLR$")>; 4010b57cec5SDimitry Andric 4020b57cec5SDimitry Andric// Subtraction with borrow 4030b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, GroupAlone], 4040b57cec5SDimitry Andric (instregex "SLB(G)?$")>; 4050b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, GroupAlone], (instregex "SLB(G)?R$")>; 4060b57cec5SDimitry Andric 4070b57cec5SDimitry Andric// Subtraction with sign extension (16/32 -> 64) 4080b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 4090b57cec5SDimitry Andric (instregex "SG(F|H)$")>; 4100b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, NormalGr], (instregex "SGFR$")>; 4110b57cec5SDimitry Andric 4120b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4130b57cec5SDimitry Andric// AND 4140b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4150b57cec5SDimitry Andric 4160b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 4170b57cec5SDimitry Andric (instregex "N(G|Y)?$")>; 4180b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NGR(K)?$")>; 4190b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NI(FMux|HMux|LMux)$")>; 4200b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "NI(Y)?$")>; 4210b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NIHF(64)?$")>; 4220b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NIHH(64)?$")>; 4230b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NIHL(64)?$")>; 4240b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NILF(64)?$")>; 4250b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NILH(64)?$")>; 4260b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NILL(64)?$")>; 4270b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NR(K)?$")>; 4280b57cec5SDimitry Andricdef : InstRW<[WLat3LSU, LSU2, FXb, Cracked], (instregex "NC$")>; 4290b57cec5SDimitry Andric 4300b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4310b57cec5SDimitry Andric// OR 4320b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4330b57cec5SDimitry Andric 4340b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 4350b57cec5SDimitry Andric (instregex "O(G|Y)?$")>; 4360b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OGR(K)?$")>; 4370b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "OI(Y)?$")>; 4380b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OI(FMux|HMux|LMux)$")>; 4390b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OIHF(64)?$")>; 4400b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OIHH(64)?$")>; 4410b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OIHL(64)?$")>; 4420b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OILF(64)?$")>; 4430b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OILH(64)?$")>; 4440b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OILL(64)?$")>; 4450b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OR(K)?$")>; 4460b57cec5SDimitry Andricdef : InstRW<[WLat3LSU, LSU2, FXb, Cracked], (instregex "OC$")>; 4470b57cec5SDimitry Andric 4480b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4490b57cec5SDimitry Andric// XOR 4500b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4510b57cec5SDimitry Andric 4520b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 4530b57cec5SDimitry Andric (instregex "X(G|Y)?$")>; 4540b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "XI(Y)?$")>; 4550b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XIFMux$")>; 4560b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XGR(K)?$")>; 4570b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XIHF(64)?$")>; 4580b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XILF(64)?$")>; 4590b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XR(K)?$")>; 4600b57cec5SDimitry Andricdef : InstRW<[WLat3LSU, LSU2, FXb, Cracked], (instregex "XC$")>; 4610b57cec5SDimitry Andric 4620b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4630b57cec5SDimitry Andric// Multiplication 4640b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4650b57cec5SDimitry Andric 4660b57cec5SDimitry Andricdef : InstRW<[WLat5LSU, RegReadAdv, FXa, LSU, NormalGr], 4670b57cec5SDimitry Andric (instregex "MS(GF|Y)?$")>; 4680b57cec5SDimitry Andricdef : InstRW<[WLat5, FXa, NormalGr], (instregex "MS(R|FI)$")>; 4690b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, FXa, LSU, NormalGr], (instregex "MSG$")>; 4700b57cec5SDimitry Andricdef : InstRW<[WLat7, FXa, NormalGr], (instregex "MSGR$")>; 4710b57cec5SDimitry Andricdef : InstRW<[WLat5, FXa, NormalGr], (instregex "MSGF(I|R)$")>; 4720b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, RegReadAdv, FXa2, LSU, GroupAlone], (instregex "MLG$")>; 4730b57cec5SDimitry Andricdef : InstRW<[WLat8, FXa2, GroupAlone], (instregex "MLGR$")>; 4740b57cec5SDimitry Andricdef : InstRW<[WLat4, FXa, NormalGr], (instregex "MGHI$")>; 4750b57cec5SDimitry Andricdef : InstRW<[WLat4, FXa, NormalGr], (instregex "MHI$")>; 4760b57cec5SDimitry Andricdef : InstRW<[WLat4LSU, RegReadAdv, FXa, LSU, NormalGr], (instregex "MH(Y)?$")>; 4770b57cec5SDimitry Andricdef : InstRW<[WLat6, FXa2, GroupAlone], (instregex "M(L)?R$")>; 4780b57cec5SDimitry Andricdef : InstRW<[WLat6LSU, RegReadAdv, FXa2, LSU, GroupAlone], 4790b57cec5SDimitry Andric (instregex "M(FY|L)?$")>; 4800b57cec5SDimitry Andricdef : InstRW<[WLat8, RegReadAdv, FXa, LSU, NormalGr], (instregex "MGH$")>; 4810b57cec5SDimitry Andricdef : InstRW<[WLat12, RegReadAdv, FXa2, LSU, GroupAlone], (instregex "MG$")>; 4820b57cec5SDimitry Andricdef : InstRW<[WLat8, FXa2, GroupAlone], (instregex "MGRK$")>; 4830b57cec5SDimitry Andricdef : InstRW<[WLat6LSU, WLat6LSU, RegReadAdv, FXa, LSU, NormalGr], 4840b57cec5SDimitry Andric (instregex "MSC$")>; 4850b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, WLat8LSU, RegReadAdv, FXa, LSU, NormalGr], 4860b57cec5SDimitry Andric (instregex "MSGC$")>; 4870b57cec5SDimitry Andricdef : InstRW<[WLat6, WLat6, FXa, NormalGr], (instregex "MSRKC$")>; 4880b57cec5SDimitry Andricdef : InstRW<[WLat8, WLat8, FXa, NormalGr], (instregex "MSGRKC$")>; 4890b57cec5SDimitry Andric 4900b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4910b57cec5SDimitry Andric// Division and remainder 4920b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 4930b57cec5SDimitry Andric 4940b57cec5SDimitry Andricdef : InstRW<[WLat20, FXa4, GroupAlone], (instregex "DR$")>; 4950b57cec5SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, FXa4, LSU, GroupAlone2], (instregex "D$")>; 4960b57cec5SDimitry Andricdef : InstRW<[WLat30, FXa2, GroupAlone], (instregex "DSG(F)?R$")>; 4970b57cec5SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, FXa2, LSU, GroupAlone2], 4980b57cec5SDimitry Andric (instregex "DSG(F)?$")>; 4990b57cec5SDimitry Andricdef : InstRW<[WLat20, FXa4, GroupAlone], (instregex "DLR$")>; 5000b57cec5SDimitry Andricdef : InstRW<[WLat30, FXa4, GroupAlone], (instregex "DLGR$")>; 5010b57cec5SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, FXa4, LSU, GroupAlone2], 5020b57cec5SDimitry Andric (instregex "DL(G)?$")>; 5030b57cec5SDimitry Andric 5040b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 5050b57cec5SDimitry Andric// Shifts 5060b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 5070b57cec5SDimitry Andric 5080b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLL(G|K)?$")>; 5090b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SRL(G|K)?$")>; 5100b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SRA(G|K)?$")>; 5110b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLA(G|K)?$")>; 5120b57cec5SDimitry Andricdef : InstRW<[WLat5LSU, WLat5LSU, FXa4, LSU, GroupAlone2], 5130b57cec5SDimitry Andric (instregex "S(L|R)D(A|L)$")>; 5140b57cec5SDimitry Andric 5150b57cec5SDimitry Andric// Rotate 5160b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXa, LSU, NormalGr], (instregex "RLL(G)?$")>; 5170b57cec5SDimitry Andric 5180b57cec5SDimitry Andric// Rotate and insert 5190b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "RISBG(N|32)?$")>; 5200b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "RISBH(G|H|L)$")>; 5210b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "RISBL(G|H|L)$")>; 5220b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "RISBMux$")>; 5230b57cec5SDimitry Andric 5240b57cec5SDimitry Andric// Rotate and Select 5250b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa2, Cracked], (instregex "R(N|O|X)SBG$")>; 5260b57cec5SDimitry Andric 5270b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 5280b57cec5SDimitry Andric// Comparison 5290b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 5300b57cec5SDimitry Andric 5310b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], 5320b57cec5SDimitry Andric (instregex "C(G|Y|Mux)?$")>; 5330b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CRL$")>; 5340b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(F|H)I(Mux)?$")>; 5350b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CG(F|H)I$")>; 5360b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CG(HSI|RL)$")>; 5370b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(G)?R$")>; 5380b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CIH$")>; 5390b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CHF$")>; 5400b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CHSI$")>; 5410b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], 5420b57cec5SDimitry Andric (instregex "CL(Y|Mux)?$")>; 5430b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLFHSI$")>; 5440b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLFI(Mux)?$")>; 5450b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CLG$")>; 5460b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLG(HRL|HSI)$")>; 5470b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CLGF$")>; 5480b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLGFRL$")>; 5490b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLGF(I|R)$")>; 5500b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLGR$")>; 5510b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLGRL$")>; 5520b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CLHF$")>; 5530b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLH(RL|HSI)$")>; 5540b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLIH$")>; 5550b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLI(Y)?$")>; 5560b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLR$")>; 5570b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLRL$")>; 5580b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(L)?HHR$")>; 5590b57cec5SDimitry Andricdef : InstRW<[WLat2, FXb, NormalGr], (instregex "C(L)?HLR$")>; 5600b57cec5SDimitry Andric 5610b57cec5SDimitry Andric// Compare halfword 5620b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CH(Y)?$")>; 5630b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "CHRL$")>; 5640b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CGH$")>; 5650b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "CGHRL$")>; 5660b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXa, FXb, LSU, Cracked], (instregex "CHHSI$")>; 5670b57cec5SDimitry Andric 5680b57cec5SDimitry Andric// Compare with sign extension (32 -> 64) 5690b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CGF$")>; 5700b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "CGFRL$")>; 5710b57cec5SDimitry Andricdef : InstRW<[WLat2, FXb, NormalGr], (instregex "CGFR$")>; 5720b57cec5SDimitry Andric 5730b57cec5SDimitry Andric// Compare logical character 5740b57cec5SDimitry Andricdef : InstRW<[WLat6, FXb, LSU2, Cracked], (instregex "CLC$")>; 5750b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "CLCL(E|U)?$")>; 5760b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "CLST$")>; 5770b57cec5SDimitry Andric 5780b57cec5SDimitry Andric// Test under mask 5790b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "TM(Y)?$")>; 5800b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TM(H|L)Mux$")>; 5810b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TMHH(64)?$")>; 5820b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TMHL(64)?$")>; 5830b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TMLH(64)?$")>; 5840b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TMLL(64)?$")>; 5850b57cec5SDimitry Andric 5860b57cec5SDimitry Andric// Compare logical characters under mask 5870b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXb, LSU, NormalGr], 5880b57cec5SDimitry Andric (instregex "CLM(H|Y)?$")>; 5890b57cec5SDimitry Andric 5900b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 5910b57cec5SDimitry Andric// Prefetch and execution hint 5920b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 5930b57cec5SDimitry Andric 5940b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU, NormalGr], (instregex "PFD(RL)?$")>; 5950b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "BPP$")>; 5960b57cec5SDimitry Andricdef : InstRW<[FXb, EndGroup], (instregex "BPRP$")>; 5970b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "NIAI$")>; 5980b57cec5SDimitry Andric 5990b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 6000b57cec5SDimitry Andric// Atomic operations 6010b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 6020b57cec5SDimitry Andric 6030b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, EndGroup], (instregex "Serialize$")>; 6040b57cec5SDimitry Andric 6050b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAA(G)?$")>; 6060b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAAL(G)?$")>; 6070b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAN(G)?$")>; 6080b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAO(G)?$")>; 6090b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAX(G)?$")>; 6100b57cec5SDimitry Andric 6110b57cec5SDimitry Andric// Test and set 6120b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, EndGroup], (instregex "TS$")>; 6130b57cec5SDimitry Andric 6140b57cec5SDimitry Andric// Compare and swap 6150b57cec5SDimitry Andricdef : InstRW<[WLat3LSU, WLat3LSU, FXa, FXb, LSU, GroupAlone], 6160b57cec5SDimitry Andric (instregex "CS(G|Y)?$")>; 6170b57cec5SDimitry Andric 6180b57cec5SDimitry Andric// Compare double and swap 6190b57cec5SDimitry Andricdef : InstRW<[WLat6LSU, WLat6LSU, FXa3, FXb2, LSU, GroupAlone2], 6200b57cec5SDimitry Andric (instregex "CDS(Y)?$")>; 6210b57cec5SDimitry Andricdef : InstRW<[WLat15, WLat15, FXa2, FXb4, LSU3, 6220b57cec5SDimitry Andric GroupAlone3], (instregex "CDSG$")>; 6230b57cec5SDimitry Andric 6240b57cec5SDimitry Andric// Compare and swap and store 6250b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "CSST$")>; 6260b57cec5SDimitry Andric 6270b57cec5SDimitry Andric// Perform locked operation 6280b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PLO$")>; 6290b57cec5SDimitry Andric 6300b57cec5SDimitry Andric// Load/store pair from/to quadword 6310b57cec5SDimitry Andricdef : InstRW<[WLat4LSU, LSU2, GroupAlone], (instregex "LPQ$")>; 6320b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb2, LSU, GroupAlone], (instregex "STPQ$")>; 6330b57cec5SDimitry Andric 6340b57cec5SDimitry Andric// Load pair disjoint 6350b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, LSU2, GroupAlone], (instregex "LPD(G)?$")>; 6360b57cec5SDimitry Andric 6370b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 6380b57cec5SDimitry Andric// Translate and convert 6390b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 6400b57cec5SDimitry Andric 6410b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU5, GroupAlone], (instregex "TR$")>; 6420b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, FXa3, LSU2, GroupAlone2], 6430b57cec5SDimitry Andric (instregex "TRT$")>; 6440b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "TRTR$")>; 6450b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "TRE$")>; 6460b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "TRT(R)?E(Opt)?$")>; 6470b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "TR(T|O)(T|O)(Opt)?$")>; 6480b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], 6490b57cec5SDimitry Andric (instregex "CU(12|14|21|24|41|42)(Opt)?$")>; 6500b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "(CUUTF|CUTFU)(Opt)?$")>; 6510b57cec5SDimitry Andric 6520b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 6530b57cec5SDimitry Andric// Message-security assist 6540b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 6550b57cec5SDimitry Andric 6560b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, WLat30, MCD], 6570b57cec5SDimitry Andric (instregex "KM(C|F|O|CTR|A)?$")>; 6580b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], 6590b57cec5SDimitry Andric (instregex "(KIMD|KLMD|KMAC)$")>; 6600b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], 6610b57cec5SDimitry Andric (instregex "(PCC|PPNO|PRNO)$")>; 6620b57cec5SDimitry Andric 6630b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 6640b57cec5SDimitry Andric// Guarded storage 6650b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 6660b57cec5SDimitry Andric 6670b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LGG$")>; 6680b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLGFSG$")>; 6690b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "(L|ST)GSC$")>; 6700b57cec5SDimitry Andric 6710b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 6720b57cec5SDimitry Andric// Decimal arithmetic 6730b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 6740b57cec5SDimitry Andric 6750b57cec5SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, FXb, VecDF2, LSU2, GroupAlone2], 6760b57cec5SDimitry Andric (instregex "CVBG$")>; 6770b57cec5SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, FXb, VecDF, LSU, GroupAlone2], 6780b57cec5SDimitry Andric (instregex "CVB(Y)?$")>; 6790b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb3, VecDF4, LSU, GroupAlone3], (instregex "CVDG$")>; 6800b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb2, VecDF, LSU, GroupAlone2], (instregex "CVD(Y)?$")>; 6810b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU5, GroupAlone], (instregex "MV(N|O|Z)$")>; 6820b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU5, GroupAlone], (instregex "(PACK|PKA|PKU)$")>; 6830b57cec5SDimitry Andricdef : InstRW<[WLat12, LSU5, GroupAlone], (instregex "UNPK(A|U)$")>; 6840b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU2, Cracked], (instregex "UNPK$")>; 6850b57cec5SDimitry Andric 6860b57cec5SDimitry Andricdef : InstRW<[WLat5LSU, FXb, VecDFX, LSU3, GroupAlone2], 6870b57cec5SDimitry Andric (instregex "(A|S|ZA)P$")>; 6880b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, VecDFX4, LSU3, GroupAlone2], (instregex "(M|D)P$")>; 6890b57cec5SDimitry Andricdef : InstRW<[WLat15, FXb, VecDFX2, LSU2, GroupAlone3], (instregex "SRP$")>; 6900b57cec5SDimitry Andricdef : InstRW<[WLat8, VecDFX, LSU, LSU, GroupAlone], (instregex "CP$")>; 6910b57cec5SDimitry Andricdef : InstRW<[WLat3LSU, VecDFX, LSU, Cracked], (instregex "TP$")>; 6920b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "ED(MK)?$")>; 6930b57cec5SDimitry Andric 6940b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 6950b57cec5SDimitry Andric// Access registers 6960b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 6970b57cec5SDimitry Andric 6980b57cec5SDimitry Andric// Extract/set/copy access register 6990b57cec5SDimitry Andricdef : InstRW<[WLat3, LSU, NormalGr], (instregex "(EAR|SAR|CPYA)$")>; 7000b57cec5SDimitry Andric 7010b57cec5SDimitry Andric// Load address extended 7020b57cec5SDimitry Andricdef : InstRW<[WLat5, LSU, FXa, Cracked], (instregex "LAE(Y)?$")>; 7030b57cec5SDimitry Andric 7040b57cec5SDimitry Andric// Load/store access multiple (not modeled precisely) 7050b57cec5SDimitry Andricdef : InstRW<[WLat20, WLat20, LSU5, GroupAlone], (instregex "LAM(Y)?$")>; 7060b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU5, FXb, GroupAlone2], (instregex "STAM(Y)?$")>; 7070b57cec5SDimitry Andric 7080b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 7090b57cec5SDimitry Andric// Program mask and addressing mode 7100b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 7110b57cec5SDimitry Andric 7120b57cec5SDimitry Andric// Insert Program Mask 7130b57cec5SDimitry Andricdef : InstRW<[WLat3, FXa, EndGroup], (instregex "IPM$")>; 7140b57cec5SDimitry Andric 7150b57cec5SDimitry Andric// Set Program Mask 7160b57cec5SDimitry Andricdef : InstRW<[WLat3, LSU, EndGroup], (instregex "SPM$")>; 7170b57cec5SDimitry Andric 7180b57cec5SDimitry Andric// Branch and link 7190b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "BAL(R)?$")>; 7200b57cec5SDimitry Andric 7210b57cec5SDimitry Andric// Test addressing mode 7220b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TAM$")>; 7230b57cec5SDimitry Andric 7240b57cec5SDimitry Andric// Set addressing mode 7250b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, EndGroup], (instregex "SAM(24|31|64)$")>; 7260b57cec5SDimitry Andric 7270b57cec5SDimitry Andric// Branch (and save) and set mode. 7280b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, FXb, GroupAlone], (instregex "BSM$")>; 7290b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "BASSM$")>; 7300b57cec5SDimitry Andric 7310b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 7320b57cec5SDimitry Andric// Transactional execution 7330b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 7340b57cec5SDimitry Andric 7350b57cec5SDimitry Andric// Transaction begin 7360b57cec5SDimitry Andricdef : InstRW<[WLat9, LSU2, FXb5, GroupAlone2], (instregex "TBEGIN(C)?$")>; 7370b57cec5SDimitry Andric 7380b57cec5SDimitry Andric// Transaction end 7390b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, GroupAlone], (instregex "TEND$")>; 7400b57cec5SDimitry Andric 7410b57cec5SDimitry Andric// Transaction abort 7420b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TABORT$")>; 7430b57cec5SDimitry Andric 7440b57cec5SDimitry Andric// Extract Transaction Nesting Depth 7450b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ETND$")>; 7460b57cec5SDimitry Andric 7470b57cec5SDimitry Andric// Nontransactional store 7480b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "NTSTG$")>; 7490b57cec5SDimitry Andric 7500b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 7510b57cec5SDimitry Andric// Processor assist 7520b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 7530b57cec5SDimitry Andric 7540b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, GroupAlone], (instregex "PPA$")>; 7550b57cec5SDimitry Andric 7560b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 7570b57cec5SDimitry Andric// Miscellaneous Instructions. 7580b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 7590b57cec5SDimitry Andric 7600b57cec5SDimitry Andric// Find leftmost one 7610b57cec5SDimitry Andricdef : InstRW<[WLat5, WLat5, FXa2, GroupAlone], (instregex "FLOGR$")>; 7620b57cec5SDimitry Andric 7630b57cec5SDimitry Andric// Population count 7640b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, FXa, NormalGr], (instregex "POPCNT$")>; 7650b57cec5SDimitry Andric 7660b57cec5SDimitry Andric// String instructions 7670b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "SRST(U)?$")>; 7680b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "CUSE$")>; 7690b57cec5SDimitry Andric 7700b57cec5SDimitry Andric// Various complex instructions 7710b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, WLat30, MCD], (instregex "CFC$")>; 7720b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, WLat30, WLat30, WLat30, MCD], 7730b57cec5SDimitry Andric (instregex "UPT$")>; 7740b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "CKSM$")>; 7750b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, WLat30, MCD], (instregex "CMPSC$")>; 7760b57cec5SDimitry Andric 7770b57cec5SDimitry Andric// Execute 7780b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, GroupAlone], (instregex "EX(RL)?$")>; 7790b57cec5SDimitry Andric 7800b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 7810b57cec5SDimitry Andric// .insn directive instructions 7820b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 7830b57cec5SDimitry Andric 7840b57cec5SDimitry Andric// An "empty" sched-class will be assigned instead of the "invalid sched-class". 7850b57cec5SDimitry Andric// getNumDecoderSlots() will then return 1 instead of 0. 7860b57cec5SDimitry Andricdef : InstRW<[], (instregex "Insn.*")>; 7870b57cec5SDimitry Andric 7880b57cec5SDimitry Andric 7890b57cec5SDimitry Andric// ----------------------------- Floating point ----------------------------- // 7900b57cec5SDimitry Andric 7910b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 7920b57cec5SDimitry Andric// FP: Move instructions 7930b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 7940b57cec5SDimitry Andric 7950b57cec5SDimitry Andric// Load zero 7960b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LZ(DR|ER)$")>; 7970b57cec5SDimitry Andricdef : InstRW<[WLat2, FXb2, Cracked], (instregex "LZXR$")>; 7980b57cec5SDimitry Andric 7990b57cec5SDimitry Andric// Load 8000b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "LER$")>; 8010b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LD(R|R32|GR)$")>; 8020b57cec5SDimitry Andricdef : InstRW<[WLat3, FXb, NormalGr], (instregex "LGDR$")>; 8030b57cec5SDimitry Andricdef : InstRW<[WLat2, FXb2, GroupAlone], (instregex "LXR$")>; 8040b57cec5SDimitry Andric 8050b57cec5SDimitry Andric// Load and Test 8060b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "LT(E|D)BR$")>; 8077a6dacacSDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "LTXBR$")>; 8080b57cec5SDimitry Andric 8090b57cec5SDimitry Andric// Copy sign 8100b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "CPSDR(d|s)(d|s)$")>; 8110b57cec5SDimitry Andric 8120b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 8130b57cec5SDimitry Andric// FP: Load instructions 8140b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 8150b57cec5SDimitry Andric 8160b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, VecXsPm, LSU, NormalGr], (instregex "LE(Y)?$")>; 8170b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LD(Y|E32)?$")>; 8180b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LX$")>; 8190b57cec5SDimitry Andric 8200b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 8210b57cec5SDimitry Andric// FP: Store instructions 8220b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 8230b57cec5SDimitry Andric 8240b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "ST(E|D)(Y)?$")>; 8250b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STX$")>; 8260b57cec5SDimitry Andric 8270b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 8280b57cec5SDimitry Andric// FP: Conversion instructions 8290b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 8300b57cec5SDimitry Andric 8310b57cec5SDimitry Andric// Load rounded 8320b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "LEDBR(A)?$")>; 8330b57cec5SDimitry Andricdef : InstRW<[WLat9, VecDF2, NormalGr], (instregex "L(E|D)XBR(A)?$")>; 8340b57cec5SDimitry Andric 8350b57cec5SDimitry Andric// Load lengthened 8360b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, VecBF, LSU, NormalGr], (instregex "LDEB$")>; 8370b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "LDEBR$")>; 8380b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, VecBF4, LSU, GroupAlone], (instregex "LX(E|D)B$")>; 8390b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF4, GroupAlone], (instregex "LX(E|D)BR$")>; 8400b57cec5SDimitry Andric 8410b57cec5SDimitry Andric// Convert from fixed / logical 8420b57cec5SDimitry Andricdef : InstRW<[WLat8, FXb, VecBF, Cracked], (instregex "C(E|D)(F|G)BR(A)?$")>; 8430b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF4, GroupAlone2], (instregex "CX(F|G)BR(A)?$")>; 8440b57cec5SDimitry Andricdef : InstRW<[WLat8, FXb, VecBF, Cracked], (instregex "C(E|D)L(F|G)BR$")>; 8450b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF4, GroupAlone2], (instregex "CXL(F|G)BR$")>; 8460b57cec5SDimitry Andric 8470b57cec5SDimitry Andric// Convert to fixed / logical 8480b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, FXb, VecBF, Cracked], 8490b57cec5SDimitry Andric (instregex "C(F|G)(E|D)BR(A)?$")>; 8500b57cec5SDimitry Andricdef : InstRW<[WLat12, WLat12, FXb, VecDF2, Cracked], 8510b57cec5SDimitry Andric (instregex "C(F|G)XBR(A)?$")>; 8520b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, FXb, VecBF, GroupAlone], (instregex "CLFEBR$")>; 8530b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, FXb, VecBF, Cracked], (instregex "CLFDBR$")>; 8540b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, FXb, VecBF, Cracked], (instregex "CLG(E|D)BR$")>; 8550b57cec5SDimitry Andricdef : InstRW<[WLat12, WLat12, FXb, VecDF2, Cracked], (instregex "CL(F|G)XBR$")>; 8560b57cec5SDimitry Andric 8570b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 8580b57cec5SDimitry Andric// FP: Unary arithmetic 8590b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 8600b57cec5SDimitry Andric 8610b57cec5SDimitry Andric// Load Complement / Negative / Positive 8620b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "L(C|N|P)(E|D)BR$")>; 8630b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "L(C|N|P)DFR(_32)?$")>; 8640b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "L(C|N|P)XBR$")>; 8650b57cec5SDimitry Andric 8660b57cec5SDimitry Andric// Square root 8670b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, LSU, NormalGr], (instregex "SQ(E|D)B$")>; 8680b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "SQ(E|D)BR$")>; 8690b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, GroupAlone], (instregex "SQXBR$")>; 8700b57cec5SDimitry Andric 8710b57cec5SDimitry Andric// Load FP integer 8720b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "FI(E|D)BR(A)?$")>; 8730b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF4, GroupAlone], (instregex "FIXBR(A)?$")>; 8740b57cec5SDimitry Andric 8750b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 8760b57cec5SDimitry Andric// FP: Binary arithmetic 8770b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 8780b57cec5SDimitry Andric 8790b57cec5SDimitry Andric// Addition 8800b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, WLat7LSU, RegReadAdv, VecBF, LSU, NormalGr], 8810b57cec5SDimitry Andric (instregex "A(E|D)B$")>; 8820b57cec5SDimitry Andricdef : InstRW<[WLat7, WLat7, VecBF, NormalGr], (instregex "A(E|D)BR$")>; 8830b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "AXBR$")>; 8840b57cec5SDimitry Andric 8850b57cec5SDimitry Andric// Subtraction 8860b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, WLat7LSU, RegReadAdv, VecBF, LSU, NormalGr], 8870b57cec5SDimitry Andric (instregex "S(E|D)B$")>; 8880b57cec5SDimitry Andricdef : InstRW<[WLat7, WLat7, VecBF, NormalGr], (instregex "S(E|D)BR$")>; 8890b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "SXBR$")>; 8900b57cec5SDimitry Andric 8910b57cec5SDimitry Andric// Multiply 8920b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, VecBF, LSU, NormalGr], 8930b57cec5SDimitry Andric (instregex "M(D|DE|EE)B$")>; 8940b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "M(D|DE|EE)BR$")>; 8950b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, RegReadAdv, VecBF4, LSU, GroupAlone], 8960b57cec5SDimitry Andric (instregex "MXDB$")>; 8970b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF4, GroupAlone], (instregex "MXDBR$")>; 8980b57cec5SDimitry Andricdef : InstRW<[WLat20, VecDF4, GroupAlone], (instregex "MXBR$")>; 8990b57cec5SDimitry Andric 9000b57cec5SDimitry Andric// Multiply and add / subtract 9010b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, RegReadAdv, VecBF2, LSU, GroupAlone], 9020b57cec5SDimitry Andric (instregex "M(A|S)EB$")>; 9030b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, GroupAlone], (instregex "M(A|S)EBR$")>; 9040b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, RegReadAdv, VecBF2, LSU, GroupAlone], 9050b57cec5SDimitry Andric (instregex "M(A|S)DB$")>; 9060b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "M(A|S)DBR$")>; 9070b57cec5SDimitry Andric 9080b57cec5SDimitry Andric// Division 9090b57cec5SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, VecFPd, LSU, NormalGr], 9100b57cec5SDimitry Andric (instregex "D(E|D)B$")>; 9110b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "D(E|D)BR$")>; 9120b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, GroupAlone], (instregex "DXBR$")>; 9130b57cec5SDimitry Andric 9140b57cec5SDimitry Andric// Divide to integer 9150b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "DI(E|D)BR$")>; 9160b57cec5SDimitry Andric 9170b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 9180b57cec5SDimitry Andric// FP: Comparisons 9190b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 9200b57cec5SDimitry Andric 9210b57cec5SDimitry Andric// Compare 9220b57cec5SDimitry Andricdef : InstRW<[WLat3LSU, RegReadAdv, VecXsPm, LSU, NormalGr], 9230b57cec5SDimitry Andric (instregex "(K|C)(E|D)B$")>; 9240b57cec5SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "(K|C)(E|D)BR$")>; 9250b57cec5SDimitry Andricdef : InstRW<[WLat9, VecDF2, GroupAlone], (instregex "(K|C)XBR$")>; 9260b57cec5SDimitry Andric 9270b57cec5SDimitry Andric// Test Data Class 9280b57cec5SDimitry Andricdef : InstRW<[WLat5, LSU, VecXsPm, NormalGr], (instregex "TC(E|D)B$")>; 9290b57cec5SDimitry Andricdef : InstRW<[WLat10, LSU, VecDF4, GroupAlone], (instregex "TCXB$")>; 9300b57cec5SDimitry Andric 9310b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 9320b57cec5SDimitry Andric// FP: Floating-point control register instructions 9330b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 9340b57cec5SDimitry Andric 9350b57cec5SDimitry Andricdef : InstRW<[WLat4, FXa, LSU, GroupAlone], (instregex "EFPC$")>; 9360b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, GroupAlone], (instregex "STFPC$")>; 9370b57cec5SDimitry Andricdef : InstRW<[WLat3, LSU, GroupAlone], (instregex "SFPC$")>; 9380b57cec5SDimitry Andricdef : InstRW<[WLat3LSU, LSU2, GroupAlone], (instregex "LFPC$")>; 9390b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SFASR$")>; 9400b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "LFAS$")>; 9410b57cec5SDimitry Andricdef : InstRW<[WLat3, FXb, GroupAlone], (instregex "SRNM(B|T)?$")>; 9420b57cec5SDimitry Andric 9430b57cec5SDimitry Andric 9440b57cec5SDimitry Andric// --------------------- Hexadecimal floating point ------------------------- // 9450b57cec5SDimitry Andric 9460b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 9470b57cec5SDimitry Andric// HFP: Move instructions 9480b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 9490b57cec5SDimitry Andric 9500b57cec5SDimitry Andric// Load and Test 9510b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "LT(E|D)R$")>; 9520b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "LTXR$")>; 9530b57cec5SDimitry Andric 9540b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 9550b57cec5SDimitry Andric// HFP: Conversion instructions 9560b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 9570b57cec5SDimitry Andric 9580b57cec5SDimitry Andric// Load rounded 9590b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "(LEDR|LRER)$")>; 9600b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "LEXR$")>; 9610b57cec5SDimitry Andricdef : InstRW<[WLat9, VecDF2, NormalGr], (instregex "(LDXR|LRDR)$")>; 9620b57cec5SDimitry Andric 9630b57cec5SDimitry Andric// Load lengthened 9640b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LDE$")>; 9650b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LDER$")>; 9660b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, VecBF4, LSU, GroupAlone], (instregex "LX(E|D)$")>; 9670b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF4, GroupAlone], (instregex "LX(E|D)R$")>; 9680b57cec5SDimitry Andric 9690b57cec5SDimitry Andric// Convert from fixed 9700b57cec5SDimitry Andricdef : InstRW<[WLat8, FXb, VecBF, Cracked], (instregex "C(E|D)(F|G)R$")>; 9710b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF4, GroupAlone2], (instregex "CX(F|G)R$")>; 9720b57cec5SDimitry Andric 9730b57cec5SDimitry Andric// Convert to fixed 9740b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, FXb, VecBF, Cracked], (instregex "C(F|G)(E|D)R$")>; 9750b57cec5SDimitry Andricdef : InstRW<[WLat12, WLat12, FXb, VecDF2, Cracked], (instregex "C(F|G)XR$")>; 9760b57cec5SDimitry Andric 9770b57cec5SDimitry Andric// Convert BFP to HFP / HFP to BFP. 9780b57cec5SDimitry Andricdef : InstRW<[WLat7, WLat7, VecBF, NormalGr], (instregex "THD(E)?R$")>; 9790b57cec5SDimitry Andricdef : InstRW<[WLat7, WLat7, VecBF, NormalGr], (instregex "TB(E)?DR$")>; 9800b57cec5SDimitry Andric 9810b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 9820b57cec5SDimitry Andric// HFP: Unary arithmetic 9830b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 9840b57cec5SDimitry Andric 9850b57cec5SDimitry Andric// Load Complement / Negative / Positive 9860b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "L(C|N|P)(E|D)R$")>; 9870b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "L(C|N|P)XR$")>; 9880b57cec5SDimitry Andric 9890b57cec5SDimitry Andric// Halve 9900b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "H(E|D)R$")>; 9910b57cec5SDimitry Andric 9920b57cec5SDimitry Andric// Square root 9930b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, LSU, NormalGr], (instregex "SQ(E|D)$")>; 9940b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "SQ(E|D)R$")>; 9950b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, GroupAlone], (instregex "SQXR$")>; 9960b57cec5SDimitry Andric 9970b57cec5SDimitry Andric// Load FP integer 9980b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "FI(E|D)R$")>; 9990b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF4, GroupAlone], (instregex "FIXR$")>; 10000b57cec5SDimitry Andric 10010b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 10020b57cec5SDimitry Andric// HFP: Binary arithmetic 10030b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 10040b57cec5SDimitry Andric 10050b57cec5SDimitry Andric// Addition 10060b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, WLat7LSU, RegReadAdv, VecBF, LSU, NormalGr], 10070b57cec5SDimitry Andric (instregex "A(E|D|U|W)$")>; 10080b57cec5SDimitry Andricdef : InstRW<[WLat7, WLat7, VecBF, NormalGr], (instregex "A(E|D|U|W)R$")>; 10090b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "AXR$")>; 10100b57cec5SDimitry Andric 10110b57cec5SDimitry Andric// Subtraction 10120b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, WLat7LSU, RegReadAdv, VecBF, LSU, NormalGr], 10130b57cec5SDimitry Andric (instregex "S(E|D|U|W)$")>; 10140b57cec5SDimitry Andricdef : InstRW<[WLat7, WLat7, VecBF, NormalGr], (instregex "S(E|D|U|W)R$")>; 10150b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "SXR$")>; 10160b57cec5SDimitry Andric 10170b57cec5SDimitry Andric// Multiply 10180b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, VecBF, LSU, NormalGr], 10190b57cec5SDimitry Andric (instregex "M(D|DE|E|EE)$")>; 10200b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "M(D|DE|E|EE)R$")>; 10210b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, RegReadAdv, VecBF4, LSU, GroupAlone], 10220b57cec5SDimitry Andric (instregex "MXD$")>; 10230b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF4, GroupAlone], (instregex "MXDR$")>; 10240b57cec5SDimitry Andricdef : InstRW<[WLat30, VecDF4, GroupAlone], (instregex "MXR$")>; 10250b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, RegReadAdv, VecBF4, LSU, GroupAlone], (instregex "MY$")>; 10260b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, VecBF2, LSU, GroupAlone], 10270b57cec5SDimitry Andric (instregex "MY(H|L)$")>; 10280b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF4, GroupAlone], (instregex "MYR$")>; 10290b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, GroupAlone], (instregex "MY(H|L)R$")>; 10300b57cec5SDimitry Andric 10310b57cec5SDimitry Andric// Multiply and add / subtract 10320b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, RegReadAdv, VecBF2, LSU, GroupAlone], 10330b57cec5SDimitry Andric (instregex "M(A|S)(E|D)$")>; 10340b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, GroupAlone], (instregex "M(A|S)(E|D)R$")>; 10350b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, RegReadAdv, RegReadAdv, VecBF4, LSU, GroupAlone], 10360b57cec5SDimitry Andric (instregex "MAY$")>; 10370b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, RegReadAdv, VecBF2, LSU, GroupAlone], 10380b57cec5SDimitry Andric (instregex "MAY(H|L)$")>; 10390b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF4, GroupAlone], (instregex "MAYR$")>; 10400b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, GroupAlone], (instregex "MAY(H|L)R$")>; 10410b57cec5SDimitry Andric 10420b57cec5SDimitry Andric// Division 10430b57cec5SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, VecFPd, LSU, NormalGr], (instregex "D(E|D)$")>; 10440b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "D(E|D)R$")>; 10450b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, GroupAlone], (instregex "DXR$")>; 10460b57cec5SDimitry Andric 10470b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 10480b57cec5SDimitry Andric// HFP: Comparisons 10490b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 10500b57cec5SDimitry Andric 10510b57cec5SDimitry Andric// Compare 10520b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, VecBF, LSU, NormalGr], 10530b57cec5SDimitry Andric (instregex "C(E|D)$")>; 10540b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "C(E|D)R$")>; 10550b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF2, GroupAlone], (instregex "CXR$")>; 10560b57cec5SDimitry Andric 10570b57cec5SDimitry Andric 10580b57cec5SDimitry Andric// ------------------------ Decimal floating point -------------------------- // 10590b57cec5SDimitry Andric 10600b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 10610b57cec5SDimitry Andric// DFP: Move instructions 10620b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 10630b57cec5SDimitry Andric 10640b57cec5SDimitry Andric// Load and Test 10650b57cec5SDimitry Andricdef : InstRW<[WLat8, WLat8, VecDF, NormalGr], (instregex "LTDTR$")>; 10660b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "LTXTR$")>; 10670b57cec5SDimitry Andric 10680b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 10690b57cec5SDimitry Andric// DFP: Conversion instructions 10700b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 10710b57cec5SDimitry Andric 10720b57cec5SDimitry Andric// Load rounded 10730b57cec5SDimitry Andricdef : InstRW<[WLat15, VecDF, NormalGr], (instregex "LEDTR$")>; 10740b57cec5SDimitry Andricdef : InstRW<[WLat15, VecDF2, NormalGr], (instregex "LDXTR$")>; 10750b57cec5SDimitry Andric 10760b57cec5SDimitry Andric// Load lengthened 10770b57cec5SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "LDETR$")>; 10780b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF4, GroupAlone], (instregex "LXDTR$")>; 10790b57cec5SDimitry Andric 10800b57cec5SDimitry Andric// Convert from fixed / logical 10810b57cec5SDimitry Andricdef : InstRW<[WLat30, FXb, VecDF, Cracked], (instregex "CD(F|G)TR(A)?$")>; 10820b57cec5SDimitry Andricdef : InstRW<[WLat30, FXb, VecDF4, GroupAlone2], (instregex "CX(F|G)TR(A)?$")>; 10830b57cec5SDimitry Andricdef : InstRW<[WLat30, FXb, VecDF, Cracked], (instregex "CDL(F|G)TR$")>; 10840b57cec5SDimitry Andricdef : InstRW<[WLat30, FXb, VecDF4, GroupAlone2], (instregex "CXL(F|G)TR$")>; 10850b57cec5SDimitry Andric 10860b57cec5SDimitry Andric// Convert to fixed / logical 10870b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, FXb, VecDF, Cracked], 10880b57cec5SDimitry Andric (instregex "C(F|G)DTR(A)?$")>; 10890b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, FXb, VecDF2, Cracked], 10900b57cec5SDimitry Andric (instregex "C(F|G)XTR(A)?$")>; 10910b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, FXb, VecDF, Cracked], (instregex "CL(F|G)DTR$")>; 10920b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, FXb, VecDF2, Cracked], (instregex "CL(F|G)XTR$")>; 10930b57cec5SDimitry Andric 10940b57cec5SDimitry Andric// Convert from / to signed / unsigned packed 10950b57cec5SDimitry Andricdef : InstRW<[WLat9, FXb, VecDF, Cracked], (instregex "CD(S|U)TR$")>; 10960b57cec5SDimitry Andricdef : InstRW<[WLat12, FXb2, VecDF4, GroupAlone2], (instregex "CX(S|U)TR$")>; 10970b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF, Cracked], (instregex "C(S|U)DTR$")>; 10980b57cec5SDimitry Andricdef : InstRW<[WLat15, FXb2, VecDF4, GroupAlone2], (instregex "C(S|U)XTR$")>; 10990b57cec5SDimitry Andric 11000b57cec5SDimitry Andric// Convert from / to zoned 11010b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, LSU, VecDF, Cracked], (instregex "CDZT$")>; 11020b57cec5SDimitry Andricdef : InstRW<[WLat16LSU, LSU2, VecDF4, GroupAlone3], (instregex "CXZT$")>; 11030b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecDF, Cracked], (instregex "CZDT$")>; 11040b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecDF2, GroupAlone], (instregex "CZXT$")>; 11050b57cec5SDimitry Andric 11060b57cec5SDimitry Andric// Convert from / to packed 11070b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, LSU, VecDF, Cracked], (instregex "CDPT$")>; 11080b57cec5SDimitry Andricdef : InstRW<[WLat16LSU, LSU2, VecDF4, GroupAlone3], (instregex "CXPT$")>; 11090b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecDF, Cracked], (instregex "CPDT$")>; 11100b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecDF2, GroupAlone], (instregex "CPXT$")>; 11110b57cec5SDimitry Andric 11120b57cec5SDimitry Andric// Perform floating-point operation 11130b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "PFPO$")>; 11140b57cec5SDimitry Andric 11150b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 11160b57cec5SDimitry Andric// DFP: Unary arithmetic 11170b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 11180b57cec5SDimitry Andric 11190b57cec5SDimitry Andric// Load FP integer 11200b57cec5SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "FIDTR$")>; 11210b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF4, GroupAlone], (instregex "FIXTR$")>; 11220b57cec5SDimitry Andric 11230b57cec5SDimitry Andric// Extract biased exponent 11240b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF, Cracked], (instregex "EEDTR$")>; 11250b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF, Cracked], (instregex "EEXTR$")>; 11260b57cec5SDimitry Andric 11270b57cec5SDimitry Andric// Extract significance 11280b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF, Cracked], (instregex "ESDTR$")>; 11290b57cec5SDimitry Andricdef : InstRW<[WLat12, FXb, VecDF2, Cracked], (instregex "ESXTR$")>; 11300b57cec5SDimitry Andric 11310b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 11320b57cec5SDimitry Andric// DFP: Binary arithmetic 11330b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 11340b57cec5SDimitry Andric 11350b57cec5SDimitry Andric// Addition 11360b57cec5SDimitry Andricdef : InstRW<[WLat8, WLat8, VecDF, NormalGr], (instregex "ADTR(A)?$")>; 11370b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "AXTR(A)?$")>; 11380b57cec5SDimitry Andric 11390b57cec5SDimitry Andric// Subtraction 11400b57cec5SDimitry Andricdef : InstRW<[WLat8, WLat8, VecDF, NormalGr], (instregex "SDTR(A)?$")>; 11410b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "SXTR(A)?$")>; 11420b57cec5SDimitry Andric 11430b57cec5SDimitry Andric// Multiply 11440b57cec5SDimitry Andricdef : InstRW<[WLat30, VecDF, NormalGr], (instregex "MDTR(A)?$")>; 11450b57cec5SDimitry Andricdef : InstRW<[WLat30, VecDF4, GroupAlone], (instregex "MXTR(A)?$")>; 11460b57cec5SDimitry Andric 11470b57cec5SDimitry Andric// Division 11480b57cec5SDimitry Andricdef : InstRW<[WLat30, VecDF, NormalGr], (instregex "DDTR(A)?$")>; 11490b57cec5SDimitry Andricdef : InstRW<[WLat30, VecDF4, GroupAlone], (instregex "DXTR(A)?$")>; 11500b57cec5SDimitry Andric 11510b57cec5SDimitry Andric// Quantize 11520b57cec5SDimitry Andricdef : InstRW<[WLat8, WLat8, VecDF, NormalGr], (instregex "QADTR$")>; 11530b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "QAXTR$")>; 11540b57cec5SDimitry Andric 11550b57cec5SDimitry Andric// Reround 11560b57cec5SDimitry Andricdef : InstRW<[WLat9, WLat9, FXb, VecDF, Cracked], (instregex "RRDTR$")>; 11570b57cec5SDimitry Andricdef : InstRW<[WLat11, WLat11, FXb, VecDF4, GroupAlone2], (instregex "RRXTR$")>; 11580b57cec5SDimitry Andric 11590b57cec5SDimitry Andric// Shift significand left/right 11600b57cec5SDimitry Andricdef : InstRW<[WLat11LSU, LSU, VecDF, GroupAlone], (instregex "S(L|R)DT$")>; 11610b57cec5SDimitry Andricdef : InstRW<[WLat11LSU, LSU, VecDF4, GroupAlone], (instregex "S(L|R)XT$")>; 11620b57cec5SDimitry Andric 11630b57cec5SDimitry Andric// Insert biased exponent 11640b57cec5SDimitry Andricdef : InstRW<[WLat9, FXb, VecDF, Cracked], (instregex "IEDTR$")>; 11650b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF4, GroupAlone2], (instregex "IEXTR$")>; 11660b57cec5SDimitry Andric 11670b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 11680b57cec5SDimitry Andric// DFP: Comparisons 11690b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 11700b57cec5SDimitry Andric 11710b57cec5SDimitry Andric// Compare 11720b57cec5SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "(K|C)DTR$")>; 11730b57cec5SDimitry Andricdef : InstRW<[WLat9, VecDF2, GroupAlone], (instregex "(K|C)XTR$")>; 11740b57cec5SDimitry Andric 11750b57cec5SDimitry Andric// Compare biased exponent 11760b57cec5SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "CEDTR$")>; 11770b57cec5SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "CEXTR$")>; 11780b57cec5SDimitry Andric 11790b57cec5SDimitry Andric// Test Data Class/Group 11800b57cec5SDimitry Andricdef : InstRW<[WLat15, LSU, VecDF, NormalGr], (instregex "TD(C|G)(E|D)T$")>; 11810b57cec5SDimitry Andricdef : InstRW<[WLat15, LSU, VecDF2, GroupAlone], (instregex "TD(C|G)XT$")>; 11820b57cec5SDimitry Andric 11830b57cec5SDimitry Andric 11840b57cec5SDimitry Andric// --------------------------------- Vector --------------------------------- // 11850b57cec5SDimitry Andric 11860b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 11870b57cec5SDimitry Andric// Vector: Move instructions 11880b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 11890b57cec5SDimitry Andric 11900b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "VLR(32|64)?$")>; 11910b57cec5SDimitry Andricdef : InstRW<[WLat3, FXb, NormalGr], (instregex "VLGV(B|F|G|H)?$")>; 11920b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "VLVG(B|F|G|H)?$")>; 11930b57cec5SDimitry Andricdef : InstRW<[WLat3, FXb, NormalGr], (instregex "VLVGP(32)?$")>; 11940b57cec5SDimitry Andric 11950b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 11960b57cec5SDimitry Andric// Vector: Immediate instructions 11970b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 11980b57cec5SDimitry Andric 11990b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VZERO$")>; 12000b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VONE$")>; 12010b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VGBM$")>; 12020b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VGM(B|F|G|H)?$")>; 12030b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VREPI(B|F|G|H)?$")>; 12040b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VLEI(B|F|G|H)$")>; 12050b57cec5SDimitry Andric 12060b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 12070b57cec5SDimitry Andric// Vector: Loads 12080b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 12090b57cec5SDimitry Andric 12100b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VL(Align)?$")>; 12110b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VL(L|BB)$")>; 12120b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VL(32|64)$")>; 12130b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VLLEZ(B|F|G|H|LF)?$")>; 12140b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VLREP(B|F|G|H)?$")>; 12150b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, VecXsPm, LSU, NormalGr], 12160b57cec5SDimitry Andric (instregex "VLE(B|F|G|H)$")>; 12170b57cec5SDimitry Andricdef : InstRW<[WLat5LSU, RegReadAdv, FXb, LSU, VecXsPm, Cracked], 12180b57cec5SDimitry Andric (instregex "VGE(F|G)$")>; 12190b57cec5SDimitry Andricdef : InstRW<[WLat4LSU, WLat4LSU, LSU5, GroupAlone], 12200b57cec5SDimitry Andric (instregex "VLM(Align)?$")>; 12210b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VLRL(R)?$")>; 12220b57cec5SDimitry Andric 12230b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 12240b57cec5SDimitry Andric// Vector: Stores 12250b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 12260b57cec5SDimitry Andric 12270b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "VST(Align|L|32|64)?$")>; 12280b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "VSTE(F|G)$")>; 12290b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecXsPm, Cracked], (instregex "VSTE(B|H)$")>; 12300b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU2, FXb3, GroupAlone2], (instregex "VSTM(Align)?$")>; 12310b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb2, LSU, Cracked], (instregex "VSCE(F|G)$")>; 12320b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "VSTRL(R)?$")>; 12330b57cec5SDimitry Andric 12340b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 12350b57cec5SDimitry Andric// Vector: Selects and permutes 12360b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 12370b57cec5SDimitry Andric 12380b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMRH(B|F|G|H)?$")>; 12390b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMRL(B|F|G|H)?$")>; 12400b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPERM$")>; 12410b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPDI$")>; 12420b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VBPERM$")>; 12430b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VREP(B|F|G|H)?$")>; 12440b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSEL$")>; 12450b57cec5SDimitry Andric 12460b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 12470b57cec5SDimitry Andric// Vector: Widening and narrowing 12480b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 12490b57cec5SDimitry Andric 12500b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPK(F|G|H)?$")>; 12510b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPKS(F|G|H)?$")>; 12520b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VPKS(F|G|H)S$")>; 12530b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPKLS(F|G|H)?$")>; 12540b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VPKLS(F|G|H)S$")>; 12550b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSEG(B|F|H)?$")>; 12560b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VUPH(B|F|H)?$")>; 12570b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VUPL(B|F)?$")>; 12580b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VUPLH(B|F|H|W)?$")>; 12590b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VUPLL(B|F|H)?$")>; 12600b57cec5SDimitry Andric 12610b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 12620b57cec5SDimitry Andric// Vector: Integer arithmetic 12630b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 12640b57cec5SDimitry Andric 12650b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VA(B|F|G|H|Q|C|CQ)?$")>; 12660b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VACC(B|F|G|H|Q|C|CQ)?$")>; 12670b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VAVG(B|F|G|H)?$")>; 12680b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VAVGL(B|F|G|H)?$")>; 12690b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VN(C|O|N|X)?$")>; 12700b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VO(C)?$")>; 12710b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VCKSM$")>; 12720b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCLZ(B|F|G|H)?$")>; 12730b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCTZ(B|F|G|H)?$")>; 12740b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VX$")>; 12750b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VGFM?$")>; 12760b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VGFMA(B|F|G|H)?$")>; 12770b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VGFM(B|F|G|H)$")>; 12780b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VLC(B|F|G|H)?$")>; 12790b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VLP(B|F|G|H)?$")>; 12800b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMX(B|F|G|H)?$")>; 12810b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMXL(B|F|G|H)?$")>; 12820b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMN(B|F|G|H)?$")>; 12830b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMNL(B|F|G|H)?$")>; 12840b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMAL(B|F)?$")>; 12850b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMALE(B|F|H)?$")>; 12860b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMALH(B|F|H|W)?$")>; 12870b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMALO(B|F|H)?$")>; 12880b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMAO(B|F|H)?$")>; 12890b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMAE(B|F|H)?$")>; 12900b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMAH(B|F|H)?$")>; 12910b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VME(B|F|H)?$")>; 12920b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMH(B|F|H)?$")>; 12930b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VML(B|F)?$")>; 12940b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMLE(B|F|H)?$")>; 12950b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMLH(B|F|H|W)?$")>; 12960b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMLO(B|F|H)?$")>; 12970b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMO(B|F|H)?$")>; 12980b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VMSL(G)?$")>; 12990b57cec5SDimitry Andric 13000b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPOPCT(B|F|G|H)?$")>; 13010b57cec5SDimitry Andric 13020b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VERLL(B|F|G|H)?$")>; 13030b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VERLLV(B|F|G|H)?$")>; 13040b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VERIM(B|F|G|H)?$")>; 13050b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESL(B|F|G|H)?$")>; 13060b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESLV(B|F|G|H)?$")>; 13070b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESRA(B|F|G|H)?$")>; 13080b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESRAV(B|F|G|H)?$")>; 13090b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESRL(B|F|G|H)?$")>; 13100b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESRLV(B|F|G|H)?$")>; 13110b57cec5SDimitry Andric 13120b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSL(DB)?$")>; 13130b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSLB$")>; 13140b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSR(A|L)$")>; 13150b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSR(A|L)B$")>; 13160b57cec5SDimitry Andric 13170b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSB(I|IQ|CBI|CBIQ)?$")>; 13180b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSCBI(B|F|G|H|Q)?$")>; 13190b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VS(F|G|H|Q)?$")>; 13200b57cec5SDimitry Andric 13210b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VSUM(B|H)?$")>; 13220b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VSUMG(F|H)?$")>; 13230b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VSUMQ(F|G)?$")>; 13240b57cec5SDimitry Andric 13250b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 13260b57cec5SDimitry Andric// Vector: Integer comparison 13270b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 13280b57cec5SDimitry Andric 13290b57cec5SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "VEC(B|F|G|H)?$")>; 13300b57cec5SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "VECL(B|F|G|H)?$")>; 13310b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCEQ(B|F|G|H)?$")>; 13320b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VCEQ(B|F|G|H)S$")>; 13330b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCH(B|F|G|H)?$")>; 13340b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VCH(B|F|G|H)S$")>; 13350b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCHL(B|F|G|H)?$")>; 13360b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VCHL(B|F|G|H)S$")>; 13370b57cec5SDimitry Andricdef : InstRW<[WLat4, VecStr, NormalGr], (instregex "VTM$")>; 13380b57cec5SDimitry Andric 13390b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 13400b57cec5SDimitry Andric// Vector: Floating-point arithmetic 13410b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 13420b57cec5SDimitry Andric 13430b57cec5SDimitry Andric// Conversion and rounding 13440b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VCD(L)?G$")>; 13450b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VCD(L)?GB$")>; 13460b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WCD(L)?GB$")>; 13470b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VC(L)?GD$")>; 13480b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VC(L)?GDB$")>; 13490b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WC(L)?GDB$")>; 13500b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VL(DE|ED)$")>; 13510b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VL(DE|ED)B$")>; 13520b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WL(DE|ED)B$")>; 13530b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VFL(L|R)$")>; 13540b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VFL(LS|RD)$")>; 13550b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WFL(LS|RD)$")>; 13560b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "WFLLD$")>; 13570b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF2, NormalGr], (instregex "WFLRX$")>; 13580b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VFI$")>; 13590b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VFIDB$")>; 13600b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WFIDB$")>; 13610b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VFISB$")>; 13620b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WFISB$")>; 13630b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF2, NormalGr], (instregex "WFIXB$")>; 13640b57cec5SDimitry Andric 13650b57cec5SDimitry Andric// Sign operations 13660b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VFPSO$")>; 13670b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "(V|W)FPSODB$")>; 13680b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "(V|W)FPSOSB$")>; 13690b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFPSOXB$")>; 13700b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "(V|W)FL(C|N|P)DB$")>; 13710b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "(V|W)FL(C|N|P)SB$")>; 13720b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFL(C|N|P)XB$")>; 13730b57cec5SDimitry Andric 13740b57cec5SDimitry Andric// Minimum / maximum 13750b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(MAX|MIN)$")>; 13760b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(MAX|MIN)DB$")>; 13770b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WF(MAX|MIN)DB$")>; 13780b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(MAX|MIN)SB$")>; 13790b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WF(MAX|MIN)SB$")>; 13800b57cec5SDimitry Andricdef : InstRW<[WLat2, VecDFX, NormalGr], (instregex "WF(MAX|MIN)XB$")>; 13810b57cec5SDimitry Andric 13820b57cec5SDimitry Andric// Test data class 13830b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VFTCI$")>; 13840b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "(V|W)FTCIDB$")>; 13850b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "(V|W)FTCISB$")>; 13860b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecDFX, NormalGr], (instregex "WFTCIXB$")>; 13870b57cec5SDimitry Andric 13880b57cec5SDimitry Andric// Add / subtract 13890b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VF(A|S)$")>; 13900b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VF(A|S)DB$")>; 13910b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WF(A|S)DB$")>; 13920b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VF(A|S)SB$")>; 13930b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WF(A|S)SB$")>; 13940b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF2, NormalGr], (instregex "WF(A|S)XB$")>; 13950b57cec5SDimitry Andric 13960b57cec5SDimitry Andric// Multiply / multiply-and-add/subtract 13970b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VFM$")>; 13980b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VFMDB$")>; 13990b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WFM(D|S)B$")>; 14000b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VFMSB$")>; 14010b57cec5SDimitry Andricdef : InstRW<[WLat20, VecDF2, NormalGr], (instregex "WFMXB$")>; 14020b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VF(N)?M(A|S)$")>; 14030b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VF(N)?M(A|S)DB$")>; 14040b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WF(N)?M(A|S)DB$")>; 14050b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VF(N)?M(A|S)SB$")>; 14060b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WF(N)?M(A|S)SB$")>; 14070b57cec5SDimitry Andricdef : InstRW<[WLat30, VecDF2, NormalGr], (instregex "WF(N)?M(A|S)XB$")>; 14080b57cec5SDimitry Andric 14090b57cec5SDimitry Andric// Divide / square root 14100b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "VFD$")>; 14110b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "(V|W)FDDB$")>; 14120b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "(V|W)FDSB$")>; 14130b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "WFDXB$")>; 14140b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "VFSQ$")>; 14150b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "(V|W)FSQDB$")>; 14160b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "(V|W)FSQSB$")>; 14170b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "WFSQXB$")>; 14180b57cec5SDimitry Andric 14190b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 14200b57cec5SDimitry Andric// Vector: Floating-point comparison 14210b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 14220b57cec5SDimitry Andric 14230b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(C|K)(E|H|HE)$")>; 14240b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(C|K)(E|H|HE)DB$")>; 14250b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFC(E|H|HE)DB$")>; 14260b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFK(E|H|HE)DB$")>; 14270b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(C|K)(E|H|HE)SB$")>; 14280b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFC(E|H|HE)SB$")>; 14290b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFK(E|H|HE)SB$")>; 14300b57cec5SDimitry Andricdef : InstRW<[WLat2, VecDFX, NormalGr], (instregex "WFC(E|H|HE)XB$")>; 14310b57cec5SDimitry Andricdef : InstRW<[WLat2, VecDFX, NormalGr], (instregex "WFK(E|H|HE)XB$")>; 14320b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VFC(E|H|HE)DBS$")>; 14330b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VFK(E|H|HE)DBS$")>; 14340b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], 14350b57cec5SDimitry Andric (instregex "WF(C|K)(E|H|HE)DBS$")>; 14360b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], 14370b57cec5SDimitry Andric (instregex "VF(C|K)(E|H|HE)SBS$")>; 14380b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "WFC(E|H|HE)SBS$")>; 14390b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "WFK(E|H|HE)SBS$")>; 14400b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecDFX, NormalGr], (instregex "WFC(E|H|HE)XBS$")>; 14410b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecDFX, NormalGr], (instregex "WFK(E|H|HE)XBS$")>; 14420b57cec5SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "WF(C|K)$")>; 14430b57cec5SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "WF(C|K)DB$")>; 14440b57cec5SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "WF(C|K)SB$")>; 14450b57cec5SDimitry Andricdef : InstRW<[WLat3, VecDFX, NormalGr], (instregex "WF(C|K)XB$")>; 14460b57cec5SDimitry Andric 14470b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 14480b57cec5SDimitry Andric// Vector: Floating-point insertion and extraction 14490b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 14500b57cec5SDimitry Andric 14510b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LEFR$")>; 14520b57cec5SDimitry Andricdef : InstRW<[WLat3, FXb, NormalGr], (instregex "LFER$")>; 14530b57cec5SDimitry Andric 14540b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 14550b57cec5SDimitry Andric// Vector: String instructions 14560b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 14570b57cec5SDimitry Andric 14580b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFAE(B)?$")>; 14590b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFAE(F|H)$")>; 14600b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VFAE(B|F|H)S$")>; 14610b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFAEZ(B|F|H)$")>; 14620b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VFAEZ(B|F|H)S$")>; 14630b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFEE(B|F|H|ZB|ZF|ZH)?$")>; 14640b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], 14650b57cec5SDimitry Andric (instregex "VFEE(B|F|H|ZB|ZF|ZH)S$")>; 14660b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFENE(B|F|H|ZB|ZF|ZH)?$")>; 14670b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], 14680b57cec5SDimitry Andric (instregex "VFENE(B|F|H|ZB|ZF|ZH)S$")>; 14690b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VISTR(B|F|H)?$")>; 14700b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VISTR(B|F|H)S$")>; 14710b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VSTRC(B|F|H)?$")>; 14720b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VSTRC(B|F|H)S$")>; 14730b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VSTRCZ(B|F|H)$")>; 14740b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VSTRCZ(B|F|H)S$")>; 14750b57cec5SDimitry Andric 14760b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 14770b57cec5SDimitry Andric// Vector: Packed-decimal instructions 14780b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 14790b57cec5SDimitry Andric 14800b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF2, NormalGr], (instregex "VLIP$")>; 14810b57cec5SDimitry Andricdef : InstRW<[WLat6, VecDFX, LSU, GroupAlone2], (instregex "VPKZ$")>; 14820b57cec5SDimitry Andricdef : InstRW<[WLat1, VecDFX, FXb, LSU, Cracked], (instregex "VUPKZ$")>; 14830b57cec5SDimitry Andricdef : InstRW<[WLat20, WLat20, VecDF2, FXb, GroupAlone], (instregex "VCVB(G)?$")>; 14840b57cec5SDimitry Andricdef : InstRW<[WLat20, WLat20, VecDF2, FXb, GroupAlone], (instregex "VCVD(G)?$")>; 14850b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecDFX, NormalGr], (instregex "V(A|S)P$")>; 14860b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, VecDF2, GroupAlone], (instregex "VM(S)?P$")>; 14870b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, VecDF2, GroupAlone], (instregex "V(D|R)P$")>; 14880b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "VSDP$")>; 14890b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF2, NormalGr], (instregex "VSRP$")>; 14900b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecDFX, NormalGr], (instregex "VPSOP$")>; 14910b57cec5SDimitry Andricdef : InstRW<[WLat2, VecDFX, NormalGr], (instregex "V(T|C)P$")>; 14920b57cec5SDimitry Andric 14930b57cec5SDimitry Andric 14940b57cec5SDimitry Andric// -------------------------------- System ---------------------------------- // 14950b57cec5SDimitry Andric 14960b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 14970b57cec5SDimitry Andric// System: Program-Status Word Instructions 14980b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 14990b57cec5SDimitry Andric 15000b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "EPSW$")>; 15010b57cec5SDimitry Andricdef : InstRW<[WLat20, GroupAlone3], (instregex "LPSW(E)?$")>; 15020b57cec5SDimitry Andricdef : InstRW<[WLat3, FXa, GroupAlone], (instregex "IPK$")>; 15030b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU, EndGroup], (instregex "SPKA$")>; 15040b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU, EndGroup], (instregex "SSM$")>; 15050b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, GroupAlone], (instregex "ST(N|O)SM$")>; 15060b57cec5SDimitry Andricdef : InstRW<[WLat3, FXa, NormalGr], (instregex "IAC$")>; 15070b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU, EndGroup], (instregex "SAC(F)?$")>; 15080b57cec5SDimitry Andric 15090b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15100b57cec5SDimitry Andric// System: Control Register Instructions 15110b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15120b57cec5SDimitry Andric 15130b57cec5SDimitry Andricdef : InstRW<[WLat4LSU, WLat4LSU, LSU2, GroupAlone], (instregex "LCTL(G)?$")>; 15140b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU5, FXb, GroupAlone2], (instregex "STCT(L|G)$")>; 15150b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "E(P|S)A(I)?R$")>; 15160b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SSA(I)?R$")>; 15170b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "ESEA$")>; 15180b57cec5SDimitry Andric 15190b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15200b57cec5SDimitry Andric// System: Prefix-Register Instructions 15210b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15220b57cec5SDimitry Andric 15230b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "S(T)?PX$")>; 15240b57cec5SDimitry Andric 15250b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15260b57cec5SDimitry Andric// System: Storage-Key and Real Memory Instructions 15270b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15280b57cec5SDimitry Andric 15290b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "ISKE$")>; 15300b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "IVSK$")>; 15310b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SSKE(Opt)?$")>; 15320b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "RRB(E|M)$")>; 15330b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "IRBM$")>; 15340b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PFMF$")>; 15350b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "TB$")>; 15360b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PGIN$")>; 15370b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PGOUT$")>; 15380b57cec5SDimitry Andric 15390b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15400b57cec5SDimitry Andric// System: Dynamic-Address-Translation Instructions 15410b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15420b57cec5SDimitry Andric 15430b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "IPTE(Opt)?(Opt)?$")>; 15440b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "IDTE(Opt)?$")>; 15450b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "CRDTE(Opt)?$")>; 15460b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PTLB$")>; 15470b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "CSP(G)?$")>; 15480b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "LPTEA$")>; 15490b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "LRA(Y|G)?$")>; 15500b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STRAG$")>; 15510b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "LURA(G)?$")>; 15520b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STUR(A|G)$")>; 15530b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TPROT$")>; 15540b57cec5SDimitry Andric 15550b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15560b57cec5SDimitry Andric// System: Memory-move Instructions 15570b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15580b57cec5SDimitry Andric 15590b57cec5SDimitry Andricdef : InstRW<[WLat4LSU, FXa2, FXb, LSU5, GroupAlone2], (instregex "MVC(K|P|S)$")>; 15600b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, LSU5, GroupAlone2], (instregex "MVC(S|D)K$")>; 15610b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "MVCOS$")>; 15620b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "MVPG$")>; 15630b57cec5SDimitry Andric 15640b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15650b57cec5SDimitry Andric// System: Address-Space Instructions 15660b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15670b57cec5SDimitry Andric 15680b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "LASP$")>; 15690b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU, GroupAlone], (instregex "PALB$")>; 15700b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PC$")>; 15710b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PR$")>; 15720b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PT(I)?$")>; 15730b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "RP$")>; 15740b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "BS(G|A)$")>; 15750b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TAR$")>; 15760b57cec5SDimitry Andric 15770b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15780b57cec5SDimitry Andric// System: Linkage-Stack Instructions 15790b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15800b57cec5SDimitry Andric 15810b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "BAKR$")>; 15820b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "EREG(G)?$")>; 15830b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "(E|M)STA$")>; 15840b57cec5SDimitry Andric 15850b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15860b57cec5SDimitry Andric// System: Time-Related Instructions 15870b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15880b57cec5SDimitry Andric 15890b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PTFF$")>; 15900b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SCK(PF|C)?$")>; 15910b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU2, GroupAlone], (instregex "SPT$")>; 15920b57cec5SDimitry Andricdef : InstRW<[WLat15, LSU3, FXa2, FXb, GroupAlone2], (instregex "STCK(F)?$")>; 15930b57cec5SDimitry Andricdef : InstRW<[WLat20, LSU4, FXa2, FXb2, GroupAlone3], (instregex "STCKE$")>; 15940b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STCKC$")>; 15950b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU2, FXb, Cracked], (instregex "STPT$")>; 15960b57cec5SDimitry Andric 15970b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15980b57cec5SDimitry Andric// System: CPU-Related Instructions 15990b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 16000b57cec5SDimitry Andric 16010b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STAP$")>; 16020b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STIDP$")>; 16030b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "STSI$")>; 16040b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "STFL(E)?$")>; 16050b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "ECAG$")>; 16060b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "ECTG$")>; 16070b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PTF$")>; 16080b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PCKMO$")>; 16090b57cec5SDimitry Andric 16100b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 16110b57cec5SDimitry Andric// System: Miscellaneous Instructions 16120b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 16130b57cec5SDimitry Andric 16140b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SVC$")>; 16150b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, GroupAlone], (instregex "MC$")>; 16160b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "DIAG$")>; 16170b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TRAC(E|G)$")>; 16180b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TRAP(2|4)$")>; 16190b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SIG(P|A)$")>; 16200b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SIE$")>; 16210b57cec5SDimitry Andric 16220b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 16230b57cec5SDimitry Andric// System: CPU-Measurement Facility Instructions 16240b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 16250b57cec5SDimitry Andric 16260b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LPP$")>; 16270b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "ECPGA$")>; 16280b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "E(C|P)CTR$")>; 16290b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "LCCTL$")>; 16300b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "L(P|S)CTL$")>; 16310b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "Q(S|CTR)I$")>; 16320b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "S(C|P)CTR$")>; 16330b57cec5SDimitry Andric 16340b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 16350b57cec5SDimitry Andric// System: I/O Instructions 16360b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 16370b57cec5SDimitry Andric 16380b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "(C|H|R|X)SCH$")>; 16390b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "(M|S|ST|T)SCH$")>; 16400b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "RCHP$")>; 16410b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SCHM$")>; 16420b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STC(PS|RW)$")>; 16430b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TPI$")>; 16440b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SAL$")>; 16450b57cec5SDimitry Andric 16460b57cec5SDimitry Andric} 16470b57cec5SDimitry Andric 1648