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