1*0b57cec5SDimitry Andric//-- SystemZScheduleZ14.td - SystemZ Scheduling Definitions ----*- tblgen -*-=// 2*0b57cec5SDimitry Andric// 3*0b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*0b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 5*0b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*0b57cec5SDimitry Andric// 7*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 8*0b57cec5SDimitry Andric// 9*0b57cec5SDimitry Andric// This file defines the machine model for Z14 to support instruction 10*0b57cec5SDimitry Andric// scheduling and other instruction cost heuristics. 11*0b57cec5SDimitry Andric// 12*0b57cec5SDimitry Andric// Pseudos expanded right after isel do not need to be modelled here. 13*0b57cec5SDimitry Andric// 14*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 15*0b57cec5SDimitry Andric 16*0b57cec5SDimitry Andricdef Z14Model : SchedMachineModel { 17*0b57cec5SDimitry Andric 18*0b57cec5SDimitry Andric let UnsupportedFeatures = Arch12UnsupportedFeatures.List; 19*0b57cec5SDimitry Andric 20*0b57cec5SDimitry Andric let IssueWidth = 6; // Number of instructions decoded per cycle. 21*0b57cec5SDimitry Andric let MicroOpBufferSize = 60; // Issue queues 22*0b57cec5SDimitry Andric let LoadLatency = 1; // Optimistic load latency. 23*0b57cec5SDimitry Andric 24*0b57cec5SDimitry Andric let PostRAScheduler = 1; 25*0b57cec5SDimitry Andric 26*0b57cec5SDimitry Andric // Extra cycles for a mispredicted branch. 27*0b57cec5SDimitry Andric let MispredictPenalty = 20; 28*0b57cec5SDimitry Andric} 29*0b57cec5SDimitry Andric 30*0b57cec5SDimitry Andriclet SchedModel = Z14Model in { 31*0b57cec5SDimitry Andric// These definitions need the SchedModel value. They could be put in a 32*0b57cec5SDimitry Andric// subtarget common include file, but it seems the include system in Tablegen 33*0b57cec5SDimitry Andric// currently (2016) rejects multiple includes of same file. 34*0b57cec5SDimitry Andric 35*0b57cec5SDimitry Andric// Decoder grouping rules 36*0b57cec5SDimitry Andriclet NumMicroOps = 1 in { 37*0b57cec5SDimitry Andric def : WriteRes<NormalGr, []>; 38*0b57cec5SDimitry Andric def : WriteRes<BeginGroup, []> { let BeginGroup = 1; } 39*0b57cec5SDimitry Andric def : WriteRes<EndGroup, []> { let EndGroup = 1; } 40*0b57cec5SDimitry Andric} 41*0b57cec5SDimitry Andricdef : WriteRes<Cracked, []> { 42*0b57cec5SDimitry Andric let NumMicroOps = 2; 43*0b57cec5SDimitry Andric let BeginGroup = 1; 44*0b57cec5SDimitry Andric} 45*0b57cec5SDimitry Andricdef : WriteRes<GroupAlone, []> { 46*0b57cec5SDimitry Andric let NumMicroOps = 3; 47*0b57cec5SDimitry Andric let BeginGroup = 1; 48*0b57cec5SDimitry Andric let EndGroup = 1; 49*0b57cec5SDimitry Andric} 50*0b57cec5SDimitry Andricdef : WriteRes<GroupAlone2, []> { 51*0b57cec5SDimitry Andric let NumMicroOps = 6; 52*0b57cec5SDimitry Andric let BeginGroup = 1; 53*0b57cec5SDimitry Andric let EndGroup = 1; 54*0b57cec5SDimitry Andric} 55*0b57cec5SDimitry Andricdef : WriteRes<GroupAlone3, []> { 56*0b57cec5SDimitry Andric let NumMicroOps = 9; 57*0b57cec5SDimitry Andric let BeginGroup = 1; 58*0b57cec5SDimitry Andric let EndGroup = 1; 59*0b57cec5SDimitry Andric} 60*0b57cec5SDimitry Andric 61*0b57cec5SDimitry Andric// Incoming latency removed from the register operand which is used together 62*0b57cec5SDimitry Andric// with a memory operand by the instruction. 63*0b57cec5SDimitry Andricdef : ReadAdvance<RegReadAdv, 4>; 64*0b57cec5SDimitry Andric 65*0b57cec5SDimitry Andric// LoadLatency (above) is not used for instructions in this file. This is 66*0b57cec5SDimitry Andric// instead the role of LSULatency, which is the latency value added to the 67*0b57cec5SDimitry Andric// result of loads and instructions with folded memory operands. 68*0b57cec5SDimitry Andricdef : WriteRes<LSULatency, []> { let Latency = 4; let NumMicroOps = 0; } 69*0b57cec5SDimitry Andric 70*0b57cec5SDimitry Andriclet NumMicroOps = 0 in { 71*0b57cec5SDimitry Andric foreach L = 1-30 in 72*0b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("WLat"#L), []> { let Latency = L; } 73*0b57cec5SDimitry Andric} 74*0b57cec5SDimitry Andric 75*0b57cec5SDimitry Andric// Execution units. 76*0b57cec5SDimitry Andricdef Z14_FXaUnit : ProcResource<2>; 77*0b57cec5SDimitry Andricdef Z14_FXbUnit : ProcResource<2>; 78*0b57cec5SDimitry Andricdef Z14_LSUnit : ProcResource<2>; 79*0b57cec5SDimitry Andricdef Z14_VecUnit : ProcResource<2>; 80*0b57cec5SDimitry Andricdef Z14_VecFPdUnit : ProcResource<2> { let BufferSize = 1; /* blocking */ } 81*0b57cec5SDimitry Andricdef Z14_VBUnit : ProcResource<2>; 82*0b57cec5SDimitry Andricdef Z14_MCD : ProcResource<1>; 83*0b57cec5SDimitry Andric 84*0b57cec5SDimitry Andric// Subtarget specific definitions of scheduling resources. 85*0b57cec5SDimitry Andriclet NumMicroOps = 0 in { 86*0b57cec5SDimitry Andric def : WriteRes<FXa, [Z14_FXaUnit]>; 87*0b57cec5SDimitry Andric def : WriteRes<FXb, [Z14_FXbUnit]>; 88*0b57cec5SDimitry Andric def : WriteRes<LSU, [Z14_LSUnit]>; 89*0b57cec5SDimitry Andric def : WriteRes<VecBF, [Z14_VecUnit]>; 90*0b57cec5SDimitry Andric def : WriteRes<VecDF, [Z14_VecUnit]>; 91*0b57cec5SDimitry Andric def : WriteRes<VecDFX, [Z14_VecUnit]>; 92*0b57cec5SDimitry Andric def : WriteRes<VecMul, [Z14_VecUnit]>; 93*0b57cec5SDimitry Andric def : WriteRes<VecStr, [Z14_VecUnit]>; 94*0b57cec5SDimitry Andric def : WriteRes<VecXsPm, [Z14_VecUnit]>; 95*0b57cec5SDimitry Andric foreach Num = 2-5 in { let ResourceCycles = [Num] in { 96*0b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("FXa"#Num), [Z14_FXaUnit]>; 97*0b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("FXb"#Num), [Z14_FXbUnit]>; 98*0b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("LSU"#Num), [Z14_LSUnit]>; 99*0b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecBF"#Num), [Z14_VecUnit]>; 100*0b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecDF"#Num), [Z14_VecUnit]>; 101*0b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecDFX"#Num), [Z14_VecUnit]>; 102*0b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecMul"#Num), [Z14_VecUnit]>; 103*0b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecStr"#Num), [Z14_VecUnit]>; 104*0b57cec5SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecXsPm"#Num), [Z14_VecUnit]>; 105*0b57cec5SDimitry Andric }} 106*0b57cec5SDimitry Andric 107*0b57cec5SDimitry Andric def : WriteRes<VecFPd, [Z14_VecFPdUnit]> { let ResourceCycles = [30]; } 108*0b57cec5SDimitry Andric 109*0b57cec5SDimitry Andric def : WriteRes<VBU, [Z14_VBUnit]>; // Virtual Branching Unit 110*0b57cec5SDimitry Andric} 111*0b57cec5SDimitry Andric 112*0b57cec5SDimitry Andricdef : WriteRes<MCD, [Z14_MCD]> { let NumMicroOps = 3; 113*0b57cec5SDimitry Andric let BeginGroup = 1; 114*0b57cec5SDimitry Andric let EndGroup = 1; } 115*0b57cec5SDimitry Andric 116*0b57cec5SDimitry Andric// -------------------------- INSTRUCTIONS ---------------------------------- // 117*0b57cec5SDimitry Andric 118*0b57cec5SDimitry Andric// InstRW constructs have been used in order to preserve the 119*0b57cec5SDimitry Andric// readability of the InstrInfo files. 120*0b57cec5SDimitry Andric 121*0b57cec5SDimitry Andric// For each instruction, as matched by a regexp, provide a list of 122*0b57cec5SDimitry Andric// resources that it needs. These will be combined into a SchedClass. 123*0b57cec5SDimitry Andric 124*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 125*0b57cec5SDimitry Andric// Stack allocation 126*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 127*0b57cec5SDimitry Andric 128*0b57cec5SDimitry Andric// Pseudo -> LA / LAY 129*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ADJDYNALLOC$")>; 130*0b57cec5SDimitry Andric 131*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 132*0b57cec5SDimitry Andric// Branch instructions 133*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 134*0b57cec5SDimitry Andric 135*0b57cec5SDimitry Andric// Branch 136*0b57cec5SDimitry Andricdef : InstRW<[WLat1, VBU, NormalGr], (instregex "(Call)?BRC(L)?(Asm.*)?$")>; 137*0b57cec5SDimitry Andricdef : InstRW<[WLat1, VBU, NormalGr], (instregex "(Call)?J(G)?(Asm.*)?$")>; 138*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "(Call)?BC(R)?(Asm.*)?$")>; 139*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "(Call)?B(R)?(Asm.*)?$")>; 140*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "BI(C)?(Asm.*)?$")>; 141*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, EndGroup], (instregex "BRCT(G)?$")>; 142*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, FXb, GroupAlone], (instregex "BRCTH$")>; 143*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, FXb, GroupAlone], (instregex "BCT(G)?(R)?$")>; 144*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb2, GroupAlone2], 145*0b57cec5SDimitry Andric (instregex "B(R)?X(H|L).*$")>; 146*0b57cec5SDimitry Andric 147*0b57cec5SDimitry Andric// Compare and branch 148*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(L)?(G)?(I|R)J(Asm.*)?$")>; 149*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb2, GroupAlone], 150*0b57cec5SDimitry Andric (instregex "C(L)?(G)?(I|R)B(Call|Return|Asm.*)?$")>; 151*0b57cec5SDimitry Andric 152*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 153*0b57cec5SDimitry Andric// Trap instructions 154*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 155*0b57cec5SDimitry Andric 156*0b57cec5SDimitry Andric// Trap 157*0b57cec5SDimitry Andricdef : InstRW<[WLat1, VBU, NormalGr], (instregex "(Cond)?Trap$")>; 158*0b57cec5SDimitry Andric 159*0b57cec5SDimitry Andric// Compare and trap 160*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(G)?(I|R)T(Asm.*)?$")>; 161*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CL(G)?RT(Asm.*)?$")>; 162*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CL(F|G)IT(Asm.*)?$")>; 163*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "CL(G)?T(Asm.*)?$")>; 164*0b57cec5SDimitry Andric 165*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 166*0b57cec5SDimitry Andric// Call and return instructions 167*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 168*0b57cec5SDimitry Andric 169*0b57cec5SDimitry Andric// Call 170*0b57cec5SDimitry Andricdef : InstRW<[WLat1, VBU, FXa2, GroupAlone], (instregex "(Call)?BRAS$")>; 171*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "(Call)?BRASL$")>; 172*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "(Call)?BAS(R)?$")>; 173*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "TLS_(G|L)DCALL$")>; 174*0b57cec5SDimitry Andric 175*0b57cec5SDimitry Andric// Return 176*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, EndGroup], (instregex "Return$")>; 177*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CondReturn$")>; 178*0b57cec5SDimitry Andric 179*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 180*0b57cec5SDimitry Andric// Move instructions 181*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 182*0b57cec5SDimitry Andric 183*0b57cec5SDimitry Andric// Moves 184*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "MV(G|H)?HI$")>; 185*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "MVI(Y)?$")>; 186*0b57cec5SDimitry Andric 187*0b57cec5SDimitry Andric// Move character 188*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU3, GroupAlone], (instregex "MVC$")>; 189*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "MVCL(E|U)?$")>; 190*0b57cec5SDimitry Andric 191*0b57cec5SDimitry Andric// Pseudo -> reg move 192*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "COPY(_TO_REGCLASS)?$")>; 193*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "EXTRACT_SUBREG$")>; 194*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "INSERT_SUBREG$")>; 195*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "REG_SEQUENCE$")>; 196*0b57cec5SDimitry Andric 197*0b57cec5SDimitry Andric// Loads 198*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "L(Y|FH|RL|Mux)?$")>; 199*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSULatency, LSU, NormalGr], (instregex "LCBB$")>; 200*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LG(RL)?$")>; 201*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "L128$")>; 202*0b57cec5SDimitry Andric 203*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLIH(F|H|L)$")>; 204*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLIL(F|H|L)$")>; 205*0b57cec5SDimitry Andric 206*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LG(F|H)I$")>; 207*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LHI(Mux)?$")>; 208*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LR(Mux)?$")>; 209*0b57cec5SDimitry Andric 210*0b57cec5SDimitry Andric// Load and zero rightmost byte 211*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LZR(F|G)$")>; 212*0b57cec5SDimitry Andric 213*0b57cec5SDimitry Andric// Load and trap 214*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "L(FH|G)?AT$")>; 215*0b57cec5SDimitry Andric 216*0b57cec5SDimitry Andric// Load and test 217*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, LSU, FXa, NormalGr], (instregex "LT(G)?$")>; 218*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LT(G)?R$")>; 219*0b57cec5SDimitry Andric 220*0b57cec5SDimitry Andric// Stores 221*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STG(RL)?$")>; 222*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "ST128$")>; 223*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "ST(Y|FH|RL|Mux)?$")>; 224*0b57cec5SDimitry Andric 225*0b57cec5SDimitry Andric// String moves. 226*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "MVST$")>; 227*0b57cec5SDimitry Andric 228*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 229*0b57cec5SDimitry Andric// Conditional move instructions 230*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 231*0b57cec5SDimitry Andric 232*0b57cec5SDimitry Andricdef : InstRW<[WLat2, FXa, NormalGr], (instregex "LOCRMux$")>; 233*0b57cec5SDimitry Andricdef : InstRW<[WLat2, FXa, NormalGr], (instregex "LOC(G|FH)?R(Asm.*)?$")>; 234*0b57cec5SDimitry Andricdef : InstRW<[WLat2, FXa, NormalGr], (instregex "LOC(G|H)?HI(Mux|(Asm.*))?$")>; 235*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 236*0b57cec5SDimitry Andric (instregex "LOC(G|FH|Mux)?(Asm.*)?$")>; 237*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], 238*0b57cec5SDimitry Andric (instregex "STOC(G|FH|Mux)?(Asm.*)?$")>; 239*0b57cec5SDimitry Andric 240*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 241*0b57cec5SDimitry Andric// Sign extensions 242*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 243*0b57cec5SDimitry Andric 244*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "L(B|H|G)R$")>; 245*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LG(B|H|F)R$")>; 246*0b57cec5SDimitry Andric 247*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, FXa, LSU, NormalGr], (instregex "LTGF$")>; 248*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LTGFR$")>; 249*0b57cec5SDimitry Andric 250*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LB(H|Mux)?$")>; 251*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LH(Y)?$")>; 252*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LH(H|Mux|RL)$")>; 253*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LG(B|H|F)$")>; 254*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LG(H|F)RL$")>; 255*0b57cec5SDimitry Andric 256*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 257*0b57cec5SDimitry Andric// Zero extensions 258*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 259*0b57cec5SDimitry Andric 260*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLCR(Mux)?$")>; 261*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLHR(Mux)?$")>; 262*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLG(C|H|F|T)R$")>; 263*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLC(Mux)?$")>; 264*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLH(Mux)?$")>; 265*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LL(C|H)H$")>; 266*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLHRL$")>; 267*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLG(C|H|F|T|HRL|FRL)$")>; 268*0b57cec5SDimitry Andric 269*0b57cec5SDimitry Andric// Load and zero rightmost byte 270*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLZRGF$")>; 271*0b57cec5SDimitry Andric 272*0b57cec5SDimitry Andric// Load and trap 273*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "LLG(F|T)?AT$")>; 274*0b57cec5SDimitry Andric 275*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 276*0b57cec5SDimitry Andric// Truncations 277*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 278*0b57cec5SDimitry Andric 279*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STC(H|Y|Mux)?$")>; 280*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STH(H|Y|RL|Mux)?$")>; 281*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STCM(H|Y)?$")>; 282*0b57cec5SDimitry Andric 283*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 284*0b57cec5SDimitry Andric// Multi-register moves 285*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 286*0b57cec5SDimitry Andric 287*0b57cec5SDimitry Andric// Load multiple (estimated average of 5 ops) 288*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, LSU5, GroupAlone], (instregex "LM(H|Y|G)?$")>; 289*0b57cec5SDimitry Andric 290*0b57cec5SDimitry Andric// Load multiple disjoint 291*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "LMD$")>; 292*0b57cec5SDimitry Andric 293*0b57cec5SDimitry Andric// Store multiple 294*0b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU2, FXb3, GroupAlone], (instregex "STM(G|H|Y)?$")>; 295*0b57cec5SDimitry Andric 296*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 297*0b57cec5SDimitry Andric// Byte swaps 298*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 299*0b57cec5SDimitry Andric 300*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LRV(G)?R$")>; 301*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LRV(G|H)?$")>; 302*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STRV(G|H)?$")>; 303*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "MVCIN$")>; 304*0b57cec5SDimitry Andric 305*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 306*0b57cec5SDimitry Andric// Load address instructions 307*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 308*0b57cec5SDimitry Andric 309*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LA(Y|RL)?$")>; 310*0b57cec5SDimitry Andric 311*0b57cec5SDimitry Andric// Load the Global Offset Table address ( -> larl ) 312*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "GOT$")>; 313*0b57cec5SDimitry Andric 314*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 315*0b57cec5SDimitry Andric// Absolute and Negation 316*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 317*0b57cec5SDimitry Andric 318*0b57cec5SDimitry Andricdef : InstRW<[WLat1, WLat1, FXa, NormalGr], (instregex "LP(G)?R$")>; 319*0b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa2, Cracked], (instregex "L(N|P)GFR$")>; 320*0b57cec5SDimitry Andricdef : InstRW<[WLat1, WLat1, FXa, NormalGr], (instregex "LN(R|GR)$")>; 321*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LC(R|GR)$")>; 322*0b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa2, Cracked], (instregex "LCGFR$")>; 323*0b57cec5SDimitry Andric 324*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 325*0b57cec5SDimitry Andric// Insertion 326*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 327*0b57cec5SDimitry Andric 328*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], (instregex "IC(Y)?$")>; 329*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 330*0b57cec5SDimitry Andric (instregex "IC32(Y)?$")>; 331*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, WLat1LSU, FXa, LSU, NormalGr], 332*0b57cec5SDimitry Andric (instregex "ICM(H|Y)?$")>; 333*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "II(F|H|L)Mux$")>; 334*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IIHF(64)?$")>; 335*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IIHH(64)?$")>; 336*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IIHL(64)?$")>; 337*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IILF(64)?$")>; 338*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IILH(64)?$")>; 339*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IILL(64)?$")>; 340*0b57cec5SDimitry Andric 341*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 342*0b57cec5SDimitry Andric// Addition 343*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 344*0b57cec5SDimitry Andric 345*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 346*0b57cec5SDimitry Andric (instregex "A(Y)?$")>; 347*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 348*0b57cec5SDimitry Andric (instregex "AH(Y)?$")>; 349*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AIH$")>; 350*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AFI(Mux)?$")>; 351*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 352*0b57cec5SDimitry Andric (instregex "AG$")>; 353*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AGFI$")>; 354*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AGHI(K)?$")>; 355*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AGR(K)?$")>; 356*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AHI(K)?$")>; 357*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AHIMux(K)?$")>; 358*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 359*0b57cec5SDimitry Andric (instregex "AL(Y)?$")>; 360*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AL(FI|HSIK)$")>; 361*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 362*0b57cec5SDimitry Andric (instregex "ALG(F)?$")>; 363*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALGHSIK$")>; 364*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALGF(I|R)$")>; 365*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALGR(K)?$")>; 366*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALR(K)?$")>; 367*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AR(K)?$")>; 368*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "A(L)?HHHR$")>; 369*0b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, NormalGr], (instregex "A(L)?HHLR$")>; 370*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALSIH(N)?$")>; 371*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "A(L)?(G)?SI$")>; 372*0b57cec5SDimitry Andric 373*0b57cec5SDimitry Andric// Logical addition with carry 374*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, GroupAlone], 375*0b57cec5SDimitry Andric (instregex "ALC(G)?$")>; 376*0b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, GroupAlone], (instregex "ALC(G)?R$")>; 377*0b57cec5SDimitry Andric 378*0b57cec5SDimitry Andric// Add with sign extension (16/32 -> 64) 379*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 380*0b57cec5SDimitry Andric (instregex "AG(F|H)$")>; 381*0b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, NormalGr], (instregex "AGFR$")>; 382*0b57cec5SDimitry Andric 383*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 384*0b57cec5SDimitry Andric// Subtraction 385*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 386*0b57cec5SDimitry Andric 387*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 388*0b57cec5SDimitry Andric (instregex "S(G|Y)?$")>; 389*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 390*0b57cec5SDimitry Andric (instregex "SH(Y)?$")>; 391*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SGR(K)?$")>; 392*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLFI$")>; 393*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 394*0b57cec5SDimitry Andric (instregex "SL(G|GF|Y)?$")>; 395*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLGF(I|R)$")>; 396*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLGR(K)?$")>; 397*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLR(K)?$")>; 398*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SR(K)?$")>; 399*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "S(L)?HHHR$")>; 400*0b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, NormalGr], (instregex "S(L)?HHLR$")>; 401*0b57cec5SDimitry Andric 402*0b57cec5SDimitry Andric// Subtraction with borrow 403*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, GroupAlone], 404*0b57cec5SDimitry Andric (instregex "SLB(G)?$")>; 405*0b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, GroupAlone], (instregex "SLB(G)?R$")>; 406*0b57cec5SDimitry Andric 407*0b57cec5SDimitry Andric// Subtraction with sign extension (16/32 -> 64) 408*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 409*0b57cec5SDimitry Andric (instregex "SG(F|H)$")>; 410*0b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, NormalGr], (instregex "SGFR$")>; 411*0b57cec5SDimitry Andric 412*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 413*0b57cec5SDimitry Andric// AND 414*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 415*0b57cec5SDimitry Andric 416*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 417*0b57cec5SDimitry Andric (instregex "N(G|Y)?$")>; 418*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NGR(K)?$")>; 419*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NI(FMux|HMux|LMux)$")>; 420*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "NI(Y)?$")>; 421*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NIHF(64)?$")>; 422*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NIHH(64)?$")>; 423*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NIHL(64)?$")>; 424*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NILF(64)?$")>; 425*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NILH(64)?$")>; 426*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NILL(64)?$")>; 427*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NR(K)?$")>; 428*0b57cec5SDimitry Andricdef : InstRW<[WLat3LSU, LSU2, FXb, Cracked], (instregex "NC$")>; 429*0b57cec5SDimitry Andric 430*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 431*0b57cec5SDimitry Andric// OR 432*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 433*0b57cec5SDimitry Andric 434*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 435*0b57cec5SDimitry Andric (instregex "O(G|Y)?$")>; 436*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OGR(K)?$")>; 437*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "OI(Y)?$")>; 438*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OI(FMux|HMux|LMux)$")>; 439*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OIHF(64)?$")>; 440*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OIHH(64)?$")>; 441*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OIHL(64)?$")>; 442*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OILF(64)?$")>; 443*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OILH(64)?$")>; 444*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OILL(64)?$")>; 445*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OR(K)?$")>; 446*0b57cec5SDimitry Andricdef : InstRW<[WLat3LSU, LSU2, FXb, Cracked], (instregex "OC$")>; 447*0b57cec5SDimitry Andric 448*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 449*0b57cec5SDimitry Andric// XOR 450*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 451*0b57cec5SDimitry Andric 452*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 453*0b57cec5SDimitry Andric (instregex "X(G|Y)?$")>; 454*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "XI(Y)?$")>; 455*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XIFMux$")>; 456*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XGR(K)?$")>; 457*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XIHF(64)?$")>; 458*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XILF(64)?$")>; 459*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XR(K)?$")>; 460*0b57cec5SDimitry Andricdef : InstRW<[WLat3LSU, LSU2, FXb, Cracked], (instregex "XC$")>; 461*0b57cec5SDimitry Andric 462*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 463*0b57cec5SDimitry Andric// Multiplication 464*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 465*0b57cec5SDimitry Andric 466*0b57cec5SDimitry Andricdef : InstRW<[WLat5LSU, RegReadAdv, FXa, LSU, NormalGr], 467*0b57cec5SDimitry Andric (instregex "MS(GF|Y)?$")>; 468*0b57cec5SDimitry Andricdef : InstRW<[WLat5, FXa, NormalGr], (instregex "MS(R|FI)$")>; 469*0b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, FXa, LSU, NormalGr], (instregex "MSG$")>; 470*0b57cec5SDimitry Andricdef : InstRW<[WLat7, FXa, NormalGr], (instregex "MSGR$")>; 471*0b57cec5SDimitry Andricdef : InstRW<[WLat5, FXa, NormalGr], (instregex "MSGF(I|R)$")>; 472*0b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, RegReadAdv, FXa2, LSU, GroupAlone], (instregex "MLG$")>; 473*0b57cec5SDimitry Andricdef : InstRW<[WLat8, FXa2, GroupAlone], (instregex "MLGR$")>; 474*0b57cec5SDimitry Andricdef : InstRW<[WLat4, FXa, NormalGr], (instregex "MGHI$")>; 475*0b57cec5SDimitry Andricdef : InstRW<[WLat4, FXa, NormalGr], (instregex "MHI$")>; 476*0b57cec5SDimitry Andricdef : InstRW<[WLat4LSU, RegReadAdv, FXa, LSU, NormalGr], (instregex "MH(Y)?$")>; 477*0b57cec5SDimitry Andricdef : InstRW<[WLat6, FXa2, GroupAlone], (instregex "M(L)?R$")>; 478*0b57cec5SDimitry Andricdef : InstRW<[WLat6LSU, RegReadAdv, FXa2, LSU, GroupAlone], 479*0b57cec5SDimitry Andric (instregex "M(FY|L)?$")>; 480*0b57cec5SDimitry Andricdef : InstRW<[WLat8, RegReadAdv, FXa, LSU, NormalGr], (instregex "MGH$")>; 481*0b57cec5SDimitry Andricdef : InstRW<[WLat12, RegReadAdv, FXa2, LSU, GroupAlone], (instregex "MG$")>; 482*0b57cec5SDimitry Andricdef : InstRW<[WLat8, FXa2, GroupAlone], (instregex "MGRK$")>; 483*0b57cec5SDimitry Andricdef : InstRW<[WLat6LSU, WLat6LSU, RegReadAdv, FXa, LSU, NormalGr], 484*0b57cec5SDimitry Andric (instregex "MSC$")>; 485*0b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, WLat8LSU, RegReadAdv, FXa, LSU, NormalGr], 486*0b57cec5SDimitry Andric (instregex "MSGC$")>; 487*0b57cec5SDimitry Andricdef : InstRW<[WLat6, WLat6, FXa, NormalGr], (instregex "MSRKC$")>; 488*0b57cec5SDimitry Andricdef : InstRW<[WLat8, WLat8, FXa, NormalGr], (instregex "MSGRKC$")>; 489*0b57cec5SDimitry Andric 490*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 491*0b57cec5SDimitry Andric// Division and remainder 492*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 493*0b57cec5SDimitry Andric 494*0b57cec5SDimitry Andricdef : InstRW<[WLat20, FXa4, GroupAlone], (instregex "DR$")>; 495*0b57cec5SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, FXa4, LSU, GroupAlone2], (instregex "D$")>; 496*0b57cec5SDimitry Andricdef : InstRW<[WLat30, FXa2, GroupAlone], (instregex "DSG(F)?R$")>; 497*0b57cec5SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, FXa2, LSU, GroupAlone2], 498*0b57cec5SDimitry Andric (instregex "DSG(F)?$")>; 499*0b57cec5SDimitry Andricdef : InstRW<[WLat20, FXa4, GroupAlone], (instregex "DLR$")>; 500*0b57cec5SDimitry Andricdef : InstRW<[WLat30, FXa4, GroupAlone], (instregex "DLGR$")>; 501*0b57cec5SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, FXa4, LSU, GroupAlone2], 502*0b57cec5SDimitry Andric (instregex "DL(G)?$")>; 503*0b57cec5SDimitry Andric 504*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 505*0b57cec5SDimitry Andric// Shifts 506*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 507*0b57cec5SDimitry Andric 508*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLL(G|K)?$")>; 509*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SRL(G|K)?$")>; 510*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SRA(G|K)?$")>; 511*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLA(G|K)?$")>; 512*0b57cec5SDimitry Andricdef : InstRW<[WLat5LSU, WLat5LSU, FXa4, LSU, GroupAlone2], 513*0b57cec5SDimitry Andric (instregex "S(L|R)D(A|L)$")>; 514*0b57cec5SDimitry Andric 515*0b57cec5SDimitry Andric// Rotate 516*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXa, LSU, NormalGr], (instregex "RLL(G)?$")>; 517*0b57cec5SDimitry Andric 518*0b57cec5SDimitry Andric// Rotate and insert 519*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "RISBG(N|32)?$")>; 520*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "RISBH(G|H|L)$")>; 521*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "RISBL(G|H|L)$")>; 522*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "RISBMux$")>; 523*0b57cec5SDimitry Andric 524*0b57cec5SDimitry Andric// Rotate and Select 525*0b57cec5SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa2, Cracked], (instregex "R(N|O|X)SBG$")>; 526*0b57cec5SDimitry Andric 527*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 528*0b57cec5SDimitry Andric// Comparison 529*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 530*0b57cec5SDimitry Andric 531*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], 532*0b57cec5SDimitry Andric (instregex "C(G|Y|Mux)?$")>; 533*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CRL$")>; 534*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(F|H)I(Mux)?$")>; 535*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CG(F|H)I$")>; 536*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CG(HSI|RL)$")>; 537*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(G)?R$")>; 538*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CIH$")>; 539*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CHF$")>; 540*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CHSI$")>; 541*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], 542*0b57cec5SDimitry Andric (instregex "CL(Y|Mux)?$")>; 543*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLFHSI$")>; 544*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLFI(Mux)?$")>; 545*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CLG$")>; 546*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLG(HRL|HSI)$")>; 547*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CLGF$")>; 548*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLGFRL$")>; 549*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLGF(I|R)$")>; 550*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLGR$")>; 551*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLGRL$")>; 552*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CLHF$")>; 553*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLH(RL|HSI)$")>; 554*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLIH$")>; 555*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLI(Y)?$")>; 556*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLR$")>; 557*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLRL$")>; 558*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(L)?HHR$")>; 559*0b57cec5SDimitry Andricdef : InstRW<[WLat2, FXb, NormalGr], (instregex "C(L)?HLR$")>; 560*0b57cec5SDimitry Andric 561*0b57cec5SDimitry Andric// Compare halfword 562*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CH(Y)?$")>; 563*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "CHRL$")>; 564*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CGH$")>; 565*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "CGHRL$")>; 566*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXa, FXb, LSU, Cracked], (instregex "CHHSI$")>; 567*0b57cec5SDimitry Andric 568*0b57cec5SDimitry Andric// Compare with sign extension (32 -> 64) 569*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CGF$")>; 570*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "CGFRL$")>; 571*0b57cec5SDimitry Andricdef : InstRW<[WLat2, FXb, NormalGr], (instregex "CGFR$")>; 572*0b57cec5SDimitry Andric 573*0b57cec5SDimitry Andric// Compare logical character 574*0b57cec5SDimitry Andricdef : InstRW<[WLat6, FXb, LSU2, Cracked], (instregex "CLC$")>; 575*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "CLCL(E|U)?$")>; 576*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "CLST$")>; 577*0b57cec5SDimitry Andric 578*0b57cec5SDimitry Andric// Test under mask 579*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "TM(Y)?$")>; 580*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TM(H|L)Mux$")>; 581*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TMHH(64)?$")>; 582*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TMHL(64)?$")>; 583*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TMLH(64)?$")>; 584*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TMLL(64)?$")>; 585*0b57cec5SDimitry Andric 586*0b57cec5SDimitry Andric// Compare logical characters under mask 587*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXb, LSU, NormalGr], 588*0b57cec5SDimitry Andric (instregex "CLM(H|Y)?$")>; 589*0b57cec5SDimitry Andric 590*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 591*0b57cec5SDimitry Andric// Prefetch and execution hint 592*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 593*0b57cec5SDimitry Andric 594*0b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU, NormalGr], (instregex "PFD(RL)?$")>; 595*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "BPP$")>; 596*0b57cec5SDimitry Andricdef : InstRW<[FXb, EndGroup], (instregex "BPRP$")>; 597*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "NIAI$")>; 598*0b57cec5SDimitry Andric 599*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 600*0b57cec5SDimitry Andric// Atomic operations 601*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 602*0b57cec5SDimitry Andric 603*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, EndGroup], (instregex "Serialize$")>; 604*0b57cec5SDimitry Andric 605*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAA(G)?$")>; 606*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAAL(G)?$")>; 607*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAN(G)?$")>; 608*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAO(G)?$")>; 609*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAX(G)?$")>; 610*0b57cec5SDimitry Andric 611*0b57cec5SDimitry Andric// Test and set 612*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, EndGroup], (instregex "TS$")>; 613*0b57cec5SDimitry Andric 614*0b57cec5SDimitry Andric// Compare and swap 615*0b57cec5SDimitry Andricdef : InstRW<[WLat3LSU, WLat3LSU, FXa, FXb, LSU, GroupAlone], 616*0b57cec5SDimitry Andric (instregex "CS(G|Y)?$")>; 617*0b57cec5SDimitry Andric 618*0b57cec5SDimitry Andric// Compare double and swap 619*0b57cec5SDimitry Andricdef : InstRW<[WLat6LSU, WLat6LSU, FXa3, FXb2, LSU, GroupAlone2], 620*0b57cec5SDimitry Andric (instregex "CDS(Y)?$")>; 621*0b57cec5SDimitry Andricdef : InstRW<[WLat15, WLat15, FXa2, FXb4, LSU3, 622*0b57cec5SDimitry Andric GroupAlone3], (instregex "CDSG$")>; 623*0b57cec5SDimitry Andric 624*0b57cec5SDimitry Andric// Compare and swap and store 625*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "CSST$")>; 626*0b57cec5SDimitry Andric 627*0b57cec5SDimitry Andric// Perform locked operation 628*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PLO$")>; 629*0b57cec5SDimitry Andric 630*0b57cec5SDimitry Andric// Load/store pair from/to quadword 631*0b57cec5SDimitry Andricdef : InstRW<[WLat4LSU, LSU2, GroupAlone], (instregex "LPQ$")>; 632*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb2, LSU, GroupAlone], (instregex "STPQ$")>; 633*0b57cec5SDimitry Andric 634*0b57cec5SDimitry Andric// Load pair disjoint 635*0b57cec5SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, LSU2, GroupAlone], (instregex "LPD(G)?$")>; 636*0b57cec5SDimitry Andric 637*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 638*0b57cec5SDimitry Andric// Translate and convert 639*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 640*0b57cec5SDimitry Andric 641*0b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU5, GroupAlone], (instregex "TR$")>; 642*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, FXa3, LSU2, GroupAlone2], 643*0b57cec5SDimitry Andric (instregex "TRT$")>; 644*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "TRTR$")>; 645*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "TRE$")>; 646*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "TRT(R)?E(Opt)?$")>; 647*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "TR(T|O)(T|O)(Opt)?$")>; 648*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], 649*0b57cec5SDimitry Andric (instregex "CU(12|14|21|24|41|42)(Opt)?$")>; 650*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "(CUUTF|CUTFU)(Opt)?$")>; 651*0b57cec5SDimitry Andric 652*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 653*0b57cec5SDimitry Andric// Message-security assist 654*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 655*0b57cec5SDimitry Andric 656*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, WLat30, MCD], 657*0b57cec5SDimitry Andric (instregex "KM(C|F|O|CTR|A)?$")>; 658*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], 659*0b57cec5SDimitry Andric (instregex "(KIMD|KLMD|KMAC)$")>; 660*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], 661*0b57cec5SDimitry Andric (instregex "(PCC|PPNO|PRNO)$")>; 662*0b57cec5SDimitry Andric 663*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 664*0b57cec5SDimitry Andric// Guarded storage 665*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 666*0b57cec5SDimitry Andric 667*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LGG$")>; 668*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLGFSG$")>; 669*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "(L|ST)GSC$")>; 670*0b57cec5SDimitry Andric 671*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 672*0b57cec5SDimitry Andric// Decimal arithmetic 673*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 674*0b57cec5SDimitry Andric 675*0b57cec5SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, FXb, VecDF2, LSU2, GroupAlone2], 676*0b57cec5SDimitry Andric (instregex "CVBG$")>; 677*0b57cec5SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, FXb, VecDF, LSU, GroupAlone2], 678*0b57cec5SDimitry Andric (instregex "CVB(Y)?$")>; 679*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb3, VecDF4, LSU, GroupAlone3], (instregex "CVDG$")>; 680*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb2, VecDF, LSU, GroupAlone2], (instregex "CVD(Y)?$")>; 681*0b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU5, GroupAlone], (instregex "MV(N|O|Z)$")>; 682*0b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU5, GroupAlone], (instregex "(PACK|PKA|PKU)$")>; 683*0b57cec5SDimitry Andricdef : InstRW<[WLat12, LSU5, GroupAlone], (instregex "UNPK(A|U)$")>; 684*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU2, Cracked], (instregex "UNPK$")>; 685*0b57cec5SDimitry Andric 686*0b57cec5SDimitry Andricdef : InstRW<[WLat5LSU, FXb, VecDFX, LSU3, GroupAlone2], 687*0b57cec5SDimitry Andric (instregex "(A|S|ZA)P$")>; 688*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, VecDFX4, LSU3, GroupAlone2], (instregex "(M|D)P$")>; 689*0b57cec5SDimitry Andricdef : InstRW<[WLat15, FXb, VecDFX2, LSU2, GroupAlone3], (instregex "SRP$")>; 690*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecDFX, LSU, LSU, GroupAlone], (instregex "CP$")>; 691*0b57cec5SDimitry Andricdef : InstRW<[WLat3LSU, VecDFX, LSU, Cracked], (instregex "TP$")>; 692*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "ED(MK)?$")>; 693*0b57cec5SDimitry Andric 694*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 695*0b57cec5SDimitry Andric// Access registers 696*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 697*0b57cec5SDimitry Andric 698*0b57cec5SDimitry Andric// Extract/set/copy access register 699*0b57cec5SDimitry Andricdef : InstRW<[WLat3, LSU, NormalGr], (instregex "(EAR|SAR|CPYA)$")>; 700*0b57cec5SDimitry Andric 701*0b57cec5SDimitry Andric// Load address extended 702*0b57cec5SDimitry Andricdef : InstRW<[WLat5, LSU, FXa, Cracked], (instregex "LAE(Y)?$")>; 703*0b57cec5SDimitry Andric 704*0b57cec5SDimitry Andric// Load/store access multiple (not modeled precisely) 705*0b57cec5SDimitry Andricdef : InstRW<[WLat20, WLat20, LSU5, GroupAlone], (instregex "LAM(Y)?$")>; 706*0b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU5, FXb, GroupAlone2], (instregex "STAM(Y)?$")>; 707*0b57cec5SDimitry Andric 708*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 709*0b57cec5SDimitry Andric// Program mask and addressing mode 710*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 711*0b57cec5SDimitry Andric 712*0b57cec5SDimitry Andric// Insert Program Mask 713*0b57cec5SDimitry Andricdef : InstRW<[WLat3, FXa, EndGroup], (instregex "IPM$")>; 714*0b57cec5SDimitry Andric 715*0b57cec5SDimitry Andric// Set Program Mask 716*0b57cec5SDimitry Andricdef : InstRW<[WLat3, LSU, EndGroup], (instregex "SPM$")>; 717*0b57cec5SDimitry Andric 718*0b57cec5SDimitry Andric// Branch and link 719*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "BAL(R)?$")>; 720*0b57cec5SDimitry Andric 721*0b57cec5SDimitry Andric// Test addressing mode 722*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TAM$")>; 723*0b57cec5SDimitry Andric 724*0b57cec5SDimitry Andric// Set addressing mode 725*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, EndGroup], (instregex "SAM(24|31|64)$")>; 726*0b57cec5SDimitry Andric 727*0b57cec5SDimitry Andric// Branch (and save) and set mode. 728*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, FXb, GroupAlone], (instregex "BSM$")>; 729*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "BASSM$")>; 730*0b57cec5SDimitry Andric 731*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 732*0b57cec5SDimitry Andric// Transactional execution 733*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 734*0b57cec5SDimitry Andric 735*0b57cec5SDimitry Andric// Transaction begin 736*0b57cec5SDimitry Andricdef : InstRW<[WLat9, LSU2, FXb5, GroupAlone2], (instregex "TBEGIN(C)?$")>; 737*0b57cec5SDimitry Andric 738*0b57cec5SDimitry Andric// Transaction end 739*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, GroupAlone], (instregex "TEND$")>; 740*0b57cec5SDimitry Andric 741*0b57cec5SDimitry Andric// Transaction abort 742*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TABORT$")>; 743*0b57cec5SDimitry Andric 744*0b57cec5SDimitry Andric// Extract Transaction Nesting Depth 745*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ETND$")>; 746*0b57cec5SDimitry Andric 747*0b57cec5SDimitry Andric// Nontransactional store 748*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "NTSTG$")>; 749*0b57cec5SDimitry Andric 750*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 751*0b57cec5SDimitry Andric// Processor assist 752*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 753*0b57cec5SDimitry Andric 754*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, GroupAlone], (instregex "PPA$")>; 755*0b57cec5SDimitry Andric 756*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 757*0b57cec5SDimitry Andric// Miscellaneous Instructions. 758*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 759*0b57cec5SDimitry Andric 760*0b57cec5SDimitry Andric// Find leftmost one 761*0b57cec5SDimitry Andricdef : InstRW<[WLat5, WLat5, FXa2, GroupAlone], (instregex "FLOGR$")>; 762*0b57cec5SDimitry Andric 763*0b57cec5SDimitry Andric// Population count 764*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, FXa, NormalGr], (instregex "POPCNT$")>; 765*0b57cec5SDimitry Andric 766*0b57cec5SDimitry Andric// String instructions 767*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "SRST(U)?$")>; 768*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "CUSE$")>; 769*0b57cec5SDimitry Andric 770*0b57cec5SDimitry Andric// Various complex instructions 771*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, WLat30, MCD], (instregex "CFC$")>; 772*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, WLat30, WLat30, WLat30, MCD], 773*0b57cec5SDimitry Andric (instregex "UPT$")>; 774*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "CKSM$")>; 775*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, WLat30, MCD], (instregex "CMPSC$")>; 776*0b57cec5SDimitry Andric 777*0b57cec5SDimitry Andric// Execute 778*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, GroupAlone], (instregex "EX(RL)?$")>; 779*0b57cec5SDimitry Andric 780*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 781*0b57cec5SDimitry Andric// .insn directive instructions 782*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 783*0b57cec5SDimitry Andric 784*0b57cec5SDimitry Andric// An "empty" sched-class will be assigned instead of the "invalid sched-class". 785*0b57cec5SDimitry Andric// getNumDecoderSlots() will then return 1 instead of 0. 786*0b57cec5SDimitry Andricdef : InstRW<[], (instregex "Insn.*")>; 787*0b57cec5SDimitry Andric 788*0b57cec5SDimitry Andric 789*0b57cec5SDimitry Andric// ----------------------------- Floating point ----------------------------- // 790*0b57cec5SDimitry Andric 791*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 792*0b57cec5SDimitry Andric// FP: Move instructions 793*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 794*0b57cec5SDimitry Andric 795*0b57cec5SDimitry Andric// Load zero 796*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LZ(DR|ER)$")>; 797*0b57cec5SDimitry Andricdef : InstRW<[WLat2, FXb2, Cracked], (instregex "LZXR$")>; 798*0b57cec5SDimitry Andric 799*0b57cec5SDimitry Andric// Load 800*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "LER$")>; 801*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LD(R|R32|GR)$")>; 802*0b57cec5SDimitry Andricdef : InstRW<[WLat3, FXb, NormalGr], (instregex "LGDR$")>; 803*0b57cec5SDimitry Andricdef : InstRW<[WLat2, FXb2, GroupAlone], (instregex "LXR$")>; 804*0b57cec5SDimitry Andric 805*0b57cec5SDimitry Andric// Load and Test 806*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "LT(E|D)BR$")>; 807*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "LT(E|D)BRCompare$")>; 808*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], 809*0b57cec5SDimitry Andric (instregex "LTXBR(Compare)?$")>; 810*0b57cec5SDimitry Andric 811*0b57cec5SDimitry Andric// Copy sign 812*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "CPSDR(d|s)(d|s)$")>; 813*0b57cec5SDimitry Andric 814*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 815*0b57cec5SDimitry Andric// FP: Load instructions 816*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 817*0b57cec5SDimitry Andric 818*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, VecXsPm, LSU, NormalGr], (instregex "LE(Y)?$")>; 819*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LD(Y|E32)?$")>; 820*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LX$")>; 821*0b57cec5SDimitry Andric 822*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 823*0b57cec5SDimitry Andric// FP: Store instructions 824*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 825*0b57cec5SDimitry Andric 826*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "ST(E|D)(Y)?$")>; 827*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STX$")>; 828*0b57cec5SDimitry Andric 829*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 830*0b57cec5SDimitry Andric// FP: Conversion instructions 831*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 832*0b57cec5SDimitry Andric 833*0b57cec5SDimitry Andric// Load rounded 834*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "LEDBR(A)?$")>; 835*0b57cec5SDimitry Andricdef : InstRW<[WLat9, VecDF2, NormalGr], (instregex "L(E|D)XBR(A)?$")>; 836*0b57cec5SDimitry Andric 837*0b57cec5SDimitry Andric// Load lengthened 838*0b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, VecBF, LSU, NormalGr], (instregex "LDEB$")>; 839*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "LDEBR$")>; 840*0b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, VecBF4, LSU, GroupAlone], (instregex "LX(E|D)B$")>; 841*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF4, GroupAlone], (instregex "LX(E|D)BR$")>; 842*0b57cec5SDimitry Andric 843*0b57cec5SDimitry Andric// Convert from fixed / logical 844*0b57cec5SDimitry Andricdef : InstRW<[WLat8, FXb, VecBF, Cracked], (instregex "C(E|D)(F|G)BR(A)?$")>; 845*0b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF4, GroupAlone2], (instregex "CX(F|G)BR(A)?$")>; 846*0b57cec5SDimitry Andricdef : InstRW<[WLat8, FXb, VecBF, Cracked], (instregex "C(E|D)L(F|G)BR$")>; 847*0b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF4, GroupAlone2], (instregex "CXL(F|G)BR$")>; 848*0b57cec5SDimitry Andric 849*0b57cec5SDimitry Andric// Convert to fixed / logical 850*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, FXb, VecBF, Cracked], 851*0b57cec5SDimitry Andric (instregex "C(F|G)(E|D)BR(A)?$")>; 852*0b57cec5SDimitry Andricdef : InstRW<[WLat12, WLat12, FXb, VecDF2, Cracked], 853*0b57cec5SDimitry Andric (instregex "C(F|G)XBR(A)?$")>; 854*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, FXb, VecBF, GroupAlone], (instregex "CLFEBR$")>; 855*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, FXb, VecBF, Cracked], (instregex "CLFDBR$")>; 856*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, FXb, VecBF, Cracked], (instregex "CLG(E|D)BR$")>; 857*0b57cec5SDimitry Andricdef : InstRW<[WLat12, WLat12, FXb, VecDF2, Cracked], (instregex "CL(F|G)XBR$")>; 858*0b57cec5SDimitry Andric 859*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 860*0b57cec5SDimitry Andric// FP: Unary arithmetic 861*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 862*0b57cec5SDimitry Andric 863*0b57cec5SDimitry Andric// Load Complement / Negative / Positive 864*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "L(C|N|P)(E|D)BR$")>; 865*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "L(C|N|P)DFR(_32)?$")>; 866*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "L(C|N|P)XBR$")>; 867*0b57cec5SDimitry Andric 868*0b57cec5SDimitry Andric// Square root 869*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, LSU, NormalGr], (instregex "SQ(E|D)B$")>; 870*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "SQ(E|D)BR$")>; 871*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, GroupAlone], (instregex "SQXBR$")>; 872*0b57cec5SDimitry Andric 873*0b57cec5SDimitry Andric// Load FP integer 874*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "FI(E|D)BR(A)?$")>; 875*0b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF4, GroupAlone], (instregex "FIXBR(A)?$")>; 876*0b57cec5SDimitry Andric 877*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 878*0b57cec5SDimitry Andric// FP: Binary arithmetic 879*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 880*0b57cec5SDimitry Andric 881*0b57cec5SDimitry Andric// Addition 882*0b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, WLat7LSU, RegReadAdv, VecBF, LSU, NormalGr], 883*0b57cec5SDimitry Andric (instregex "A(E|D)B$")>; 884*0b57cec5SDimitry Andricdef : InstRW<[WLat7, WLat7, VecBF, NormalGr], (instregex "A(E|D)BR$")>; 885*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "AXBR$")>; 886*0b57cec5SDimitry Andric 887*0b57cec5SDimitry Andric// Subtraction 888*0b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, WLat7LSU, RegReadAdv, VecBF, LSU, NormalGr], 889*0b57cec5SDimitry Andric (instregex "S(E|D)B$")>; 890*0b57cec5SDimitry Andricdef : InstRW<[WLat7, WLat7, VecBF, NormalGr], (instregex "S(E|D)BR$")>; 891*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "SXBR$")>; 892*0b57cec5SDimitry Andric 893*0b57cec5SDimitry Andric// Multiply 894*0b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, VecBF, LSU, NormalGr], 895*0b57cec5SDimitry Andric (instregex "M(D|DE|EE)B$")>; 896*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "M(D|DE|EE)BR$")>; 897*0b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, RegReadAdv, VecBF4, LSU, GroupAlone], 898*0b57cec5SDimitry Andric (instregex "MXDB$")>; 899*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF4, GroupAlone], (instregex "MXDBR$")>; 900*0b57cec5SDimitry Andricdef : InstRW<[WLat20, VecDF4, GroupAlone], (instregex "MXBR$")>; 901*0b57cec5SDimitry Andric 902*0b57cec5SDimitry Andric// Multiply and add / subtract 903*0b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, RegReadAdv, VecBF2, LSU, GroupAlone], 904*0b57cec5SDimitry Andric (instregex "M(A|S)EB$")>; 905*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, GroupAlone], (instregex "M(A|S)EBR$")>; 906*0b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, RegReadAdv, VecBF2, LSU, GroupAlone], 907*0b57cec5SDimitry Andric (instregex "M(A|S)DB$")>; 908*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "M(A|S)DBR$")>; 909*0b57cec5SDimitry Andric 910*0b57cec5SDimitry Andric// Division 911*0b57cec5SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, VecFPd, LSU, NormalGr], 912*0b57cec5SDimitry Andric (instregex "D(E|D)B$")>; 913*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "D(E|D)BR$")>; 914*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, GroupAlone], (instregex "DXBR$")>; 915*0b57cec5SDimitry Andric 916*0b57cec5SDimitry Andric// Divide to integer 917*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "DI(E|D)BR$")>; 918*0b57cec5SDimitry Andric 919*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 920*0b57cec5SDimitry Andric// FP: Comparisons 921*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 922*0b57cec5SDimitry Andric 923*0b57cec5SDimitry Andric// Compare 924*0b57cec5SDimitry Andricdef : InstRW<[WLat3LSU, RegReadAdv, VecXsPm, LSU, NormalGr], 925*0b57cec5SDimitry Andric (instregex "(K|C)(E|D)B$")>; 926*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "(K|C)(E|D)BR$")>; 927*0b57cec5SDimitry Andricdef : InstRW<[WLat9, VecDF2, GroupAlone], (instregex "(K|C)XBR$")>; 928*0b57cec5SDimitry Andric 929*0b57cec5SDimitry Andric// Test Data Class 930*0b57cec5SDimitry Andricdef : InstRW<[WLat5, LSU, VecXsPm, NormalGr], (instregex "TC(E|D)B$")>; 931*0b57cec5SDimitry Andricdef : InstRW<[WLat10, LSU, VecDF4, GroupAlone], (instregex "TCXB$")>; 932*0b57cec5SDimitry Andric 933*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 934*0b57cec5SDimitry Andric// FP: Floating-point control register instructions 935*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 936*0b57cec5SDimitry Andric 937*0b57cec5SDimitry Andricdef : InstRW<[WLat4, FXa, LSU, GroupAlone], (instregex "EFPC$")>; 938*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, GroupAlone], (instregex "STFPC$")>; 939*0b57cec5SDimitry Andricdef : InstRW<[WLat3, LSU, GroupAlone], (instregex "SFPC$")>; 940*0b57cec5SDimitry Andricdef : InstRW<[WLat3LSU, LSU2, GroupAlone], (instregex "LFPC$")>; 941*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SFASR$")>; 942*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "LFAS$")>; 943*0b57cec5SDimitry Andricdef : InstRW<[WLat3, FXb, GroupAlone], (instregex "SRNM(B|T)?$")>; 944*0b57cec5SDimitry Andric 945*0b57cec5SDimitry Andric 946*0b57cec5SDimitry Andric// --------------------- Hexadecimal floating point ------------------------- // 947*0b57cec5SDimitry Andric 948*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 949*0b57cec5SDimitry Andric// HFP: Move instructions 950*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 951*0b57cec5SDimitry Andric 952*0b57cec5SDimitry Andric// Load and Test 953*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "LT(E|D)R$")>; 954*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "LTXR$")>; 955*0b57cec5SDimitry Andric 956*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 957*0b57cec5SDimitry Andric// HFP: Conversion instructions 958*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 959*0b57cec5SDimitry Andric 960*0b57cec5SDimitry Andric// Load rounded 961*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "(LEDR|LRER)$")>; 962*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "LEXR$")>; 963*0b57cec5SDimitry Andricdef : InstRW<[WLat9, VecDF2, NormalGr], (instregex "(LDXR|LRDR)$")>; 964*0b57cec5SDimitry Andric 965*0b57cec5SDimitry Andric// Load lengthened 966*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LDE$")>; 967*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LDER$")>; 968*0b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, VecBF4, LSU, GroupAlone], (instregex "LX(E|D)$")>; 969*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF4, GroupAlone], (instregex "LX(E|D)R$")>; 970*0b57cec5SDimitry Andric 971*0b57cec5SDimitry Andric// Convert from fixed 972*0b57cec5SDimitry Andricdef : InstRW<[WLat8, FXb, VecBF, Cracked], (instregex "C(E|D)(F|G)R$")>; 973*0b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF4, GroupAlone2], (instregex "CX(F|G)R$")>; 974*0b57cec5SDimitry Andric 975*0b57cec5SDimitry Andric// Convert to fixed 976*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, FXb, VecBF, Cracked], (instregex "C(F|G)(E|D)R$")>; 977*0b57cec5SDimitry Andricdef : InstRW<[WLat12, WLat12, FXb, VecDF2, Cracked], (instregex "C(F|G)XR$")>; 978*0b57cec5SDimitry Andric 979*0b57cec5SDimitry Andric// Convert BFP to HFP / HFP to BFP. 980*0b57cec5SDimitry Andricdef : InstRW<[WLat7, WLat7, VecBF, NormalGr], (instregex "THD(E)?R$")>; 981*0b57cec5SDimitry Andricdef : InstRW<[WLat7, WLat7, VecBF, NormalGr], (instregex "TB(E)?DR$")>; 982*0b57cec5SDimitry Andric 983*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 984*0b57cec5SDimitry Andric// HFP: Unary arithmetic 985*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 986*0b57cec5SDimitry Andric 987*0b57cec5SDimitry Andric// Load Complement / Negative / Positive 988*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "L(C|N|P)(E|D)R$")>; 989*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "L(C|N|P)XR$")>; 990*0b57cec5SDimitry Andric 991*0b57cec5SDimitry Andric// Halve 992*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "H(E|D)R$")>; 993*0b57cec5SDimitry Andric 994*0b57cec5SDimitry Andric// Square root 995*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, LSU, NormalGr], (instregex "SQ(E|D)$")>; 996*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "SQ(E|D)R$")>; 997*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, GroupAlone], (instregex "SQXR$")>; 998*0b57cec5SDimitry Andric 999*0b57cec5SDimitry Andric// Load FP integer 1000*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "FI(E|D)R$")>; 1001*0b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF4, GroupAlone], (instregex "FIXR$")>; 1002*0b57cec5SDimitry Andric 1003*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1004*0b57cec5SDimitry Andric// HFP: Binary arithmetic 1005*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1006*0b57cec5SDimitry Andric 1007*0b57cec5SDimitry Andric// Addition 1008*0b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, WLat7LSU, RegReadAdv, VecBF, LSU, NormalGr], 1009*0b57cec5SDimitry Andric (instregex "A(E|D|U|W)$")>; 1010*0b57cec5SDimitry Andricdef : InstRW<[WLat7, WLat7, VecBF, NormalGr], (instregex "A(E|D|U|W)R$")>; 1011*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "AXR$")>; 1012*0b57cec5SDimitry Andric 1013*0b57cec5SDimitry Andric// Subtraction 1014*0b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, WLat7LSU, RegReadAdv, VecBF, LSU, NormalGr], 1015*0b57cec5SDimitry Andric (instregex "S(E|D|U|W)$")>; 1016*0b57cec5SDimitry Andricdef : InstRW<[WLat7, WLat7, VecBF, NormalGr], (instregex "S(E|D|U|W)R$")>; 1017*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "SXR$")>; 1018*0b57cec5SDimitry Andric 1019*0b57cec5SDimitry Andric// Multiply 1020*0b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, VecBF, LSU, NormalGr], 1021*0b57cec5SDimitry Andric (instregex "M(D|DE|E|EE)$")>; 1022*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "M(D|DE|E|EE)R$")>; 1023*0b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, RegReadAdv, VecBF4, LSU, GroupAlone], 1024*0b57cec5SDimitry Andric (instregex "MXD$")>; 1025*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF4, GroupAlone], (instregex "MXDR$")>; 1026*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecDF4, GroupAlone], (instregex "MXR$")>; 1027*0b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, RegReadAdv, VecBF4, LSU, GroupAlone], (instregex "MY$")>; 1028*0b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, VecBF2, LSU, GroupAlone], 1029*0b57cec5SDimitry Andric (instregex "MY(H|L)$")>; 1030*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF4, GroupAlone], (instregex "MYR$")>; 1031*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, GroupAlone], (instregex "MY(H|L)R$")>; 1032*0b57cec5SDimitry Andric 1033*0b57cec5SDimitry Andric// Multiply and add / subtract 1034*0b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, RegReadAdv, VecBF2, LSU, GroupAlone], 1035*0b57cec5SDimitry Andric (instregex "M(A|S)(E|D)$")>; 1036*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, GroupAlone], (instregex "M(A|S)(E|D)R$")>; 1037*0b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, RegReadAdv, RegReadAdv, VecBF4, LSU, GroupAlone], 1038*0b57cec5SDimitry Andric (instregex "MAY$")>; 1039*0b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, RegReadAdv, VecBF2, LSU, GroupAlone], 1040*0b57cec5SDimitry Andric (instregex "MAY(H|L)$")>; 1041*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF4, GroupAlone], (instregex "MAYR$")>; 1042*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, GroupAlone], (instregex "MAY(H|L)R$")>; 1043*0b57cec5SDimitry Andric 1044*0b57cec5SDimitry Andric// Division 1045*0b57cec5SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, VecFPd, LSU, NormalGr], (instregex "D(E|D)$")>; 1046*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "D(E|D)R$")>; 1047*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, GroupAlone], (instregex "DXR$")>; 1048*0b57cec5SDimitry Andric 1049*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1050*0b57cec5SDimitry Andric// HFP: Comparisons 1051*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1052*0b57cec5SDimitry Andric 1053*0b57cec5SDimitry Andric// Compare 1054*0b57cec5SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, VecBF, LSU, NormalGr], 1055*0b57cec5SDimitry Andric (instregex "C(E|D)$")>; 1056*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "C(E|D)R$")>; 1057*0b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF2, GroupAlone], (instregex "CXR$")>; 1058*0b57cec5SDimitry Andric 1059*0b57cec5SDimitry Andric 1060*0b57cec5SDimitry Andric// ------------------------ Decimal floating point -------------------------- // 1061*0b57cec5SDimitry Andric 1062*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1063*0b57cec5SDimitry Andric// DFP: Move instructions 1064*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1065*0b57cec5SDimitry Andric 1066*0b57cec5SDimitry Andric// Load and Test 1067*0b57cec5SDimitry Andricdef : InstRW<[WLat8, WLat8, VecDF, NormalGr], (instregex "LTDTR$")>; 1068*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "LTXTR$")>; 1069*0b57cec5SDimitry Andric 1070*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1071*0b57cec5SDimitry Andric// DFP: Conversion instructions 1072*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1073*0b57cec5SDimitry Andric 1074*0b57cec5SDimitry Andric// Load rounded 1075*0b57cec5SDimitry Andricdef : InstRW<[WLat15, VecDF, NormalGr], (instregex "LEDTR$")>; 1076*0b57cec5SDimitry Andricdef : InstRW<[WLat15, VecDF2, NormalGr], (instregex "LDXTR$")>; 1077*0b57cec5SDimitry Andric 1078*0b57cec5SDimitry Andric// Load lengthened 1079*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "LDETR$")>; 1080*0b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF4, GroupAlone], (instregex "LXDTR$")>; 1081*0b57cec5SDimitry Andric 1082*0b57cec5SDimitry Andric// Convert from fixed / logical 1083*0b57cec5SDimitry Andricdef : InstRW<[WLat30, FXb, VecDF, Cracked], (instregex "CD(F|G)TR(A)?$")>; 1084*0b57cec5SDimitry Andricdef : InstRW<[WLat30, FXb, VecDF4, GroupAlone2], (instregex "CX(F|G)TR(A)?$")>; 1085*0b57cec5SDimitry Andricdef : InstRW<[WLat30, FXb, VecDF, Cracked], (instregex "CDL(F|G)TR$")>; 1086*0b57cec5SDimitry Andricdef : InstRW<[WLat30, FXb, VecDF4, GroupAlone2], (instregex "CXL(F|G)TR$")>; 1087*0b57cec5SDimitry Andric 1088*0b57cec5SDimitry Andric// Convert to fixed / logical 1089*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, FXb, VecDF, Cracked], 1090*0b57cec5SDimitry Andric (instregex "C(F|G)DTR(A)?$")>; 1091*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, FXb, VecDF2, Cracked], 1092*0b57cec5SDimitry Andric (instregex "C(F|G)XTR(A)?$")>; 1093*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, FXb, VecDF, Cracked], (instregex "CL(F|G)DTR$")>; 1094*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, FXb, VecDF2, Cracked], (instregex "CL(F|G)XTR$")>; 1095*0b57cec5SDimitry Andric 1096*0b57cec5SDimitry Andric// Convert from / to signed / unsigned packed 1097*0b57cec5SDimitry Andricdef : InstRW<[WLat9, FXb, VecDF, Cracked], (instregex "CD(S|U)TR$")>; 1098*0b57cec5SDimitry Andricdef : InstRW<[WLat12, FXb2, VecDF4, GroupAlone2], (instregex "CX(S|U)TR$")>; 1099*0b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF, Cracked], (instregex "C(S|U)DTR$")>; 1100*0b57cec5SDimitry Andricdef : InstRW<[WLat15, FXb2, VecDF4, GroupAlone2], (instregex "C(S|U)XTR$")>; 1101*0b57cec5SDimitry Andric 1102*0b57cec5SDimitry Andric// Convert from / to zoned 1103*0b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, LSU, VecDF, Cracked], (instregex "CDZT$")>; 1104*0b57cec5SDimitry Andricdef : InstRW<[WLat16LSU, LSU2, VecDF4, GroupAlone3], (instregex "CXZT$")>; 1105*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecDF, Cracked], (instregex "CZDT$")>; 1106*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecDF2, GroupAlone], (instregex "CZXT$")>; 1107*0b57cec5SDimitry Andric 1108*0b57cec5SDimitry Andric// Convert from / to packed 1109*0b57cec5SDimitry Andricdef : InstRW<[WLat8LSU, LSU, VecDF, Cracked], (instregex "CDPT$")>; 1110*0b57cec5SDimitry Andricdef : InstRW<[WLat16LSU, LSU2, VecDF4, GroupAlone3], (instregex "CXPT$")>; 1111*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecDF, Cracked], (instregex "CPDT$")>; 1112*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecDF2, GroupAlone], (instregex "CPXT$")>; 1113*0b57cec5SDimitry Andric 1114*0b57cec5SDimitry Andric// Perform floating-point operation 1115*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "PFPO$")>; 1116*0b57cec5SDimitry Andric 1117*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1118*0b57cec5SDimitry Andric// DFP: Unary arithmetic 1119*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1120*0b57cec5SDimitry Andric 1121*0b57cec5SDimitry Andric// Load FP integer 1122*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "FIDTR$")>; 1123*0b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF4, GroupAlone], (instregex "FIXTR$")>; 1124*0b57cec5SDimitry Andric 1125*0b57cec5SDimitry Andric// Extract biased exponent 1126*0b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF, Cracked], (instregex "EEDTR$")>; 1127*0b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF, Cracked], (instregex "EEXTR$")>; 1128*0b57cec5SDimitry Andric 1129*0b57cec5SDimitry Andric// Extract significance 1130*0b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF, Cracked], (instregex "ESDTR$")>; 1131*0b57cec5SDimitry Andricdef : InstRW<[WLat12, FXb, VecDF2, Cracked], (instregex "ESXTR$")>; 1132*0b57cec5SDimitry Andric 1133*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1134*0b57cec5SDimitry Andric// DFP: Binary arithmetic 1135*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1136*0b57cec5SDimitry Andric 1137*0b57cec5SDimitry Andric// Addition 1138*0b57cec5SDimitry Andricdef : InstRW<[WLat8, WLat8, VecDF, NormalGr], (instregex "ADTR(A)?$")>; 1139*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "AXTR(A)?$")>; 1140*0b57cec5SDimitry Andric 1141*0b57cec5SDimitry Andric// Subtraction 1142*0b57cec5SDimitry Andricdef : InstRW<[WLat8, WLat8, VecDF, NormalGr], (instregex "SDTR(A)?$")>; 1143*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "SXTR(A)?$")>; 1144*0b57cec5SDimitry Andric 1145*0b57cec5SDimitry Andric// Multiply 1146*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecDF, NormalGr], (instregex "MDTR(A)?$")>; 1147*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecDF4, GroupAlone], (instregex "MXTR(A)?$")>; 1148*0b57cec5SDimitry Andric 1149*0b57cec5SDimitry Andric// Division 1150*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecDF, NormalGr], (instregex "DDTR(A)?$")>; 1151*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecDF4, GroupAlone], (instregex "DXTR(A)?$")>; 1152*0b57cec5SDimitry Andric 1153*0b57cec5SDimitry Andric// Quantize 1154*0b57cec5SDimitry Andricdef : InstRW<[WLat8, WLat8, VecDF, NormalGr], (instregex "QADTR$")>; 1155*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "QAXTR$")>; 1156*0b57cec5SDimitry Andric 1157*0b57cec5SDimitry Andric// Reround 1158*0b57cec5SDimitry Andricdef : InstRW<[WLat9, WLat9, FXb, VecDF, Cracked], (instregex "RRDTR$")>; 1159*0b57cec5SDimitry Andricdef : InstRW<[WLat11, WLat11, FXb, VecDF4, GroupAlone2], (instregex "RRXTR$")>; 1160*0b57cec5SDimitry Andric 1161*0b57cec5SDimitry Andric// Shift significand left/right 1162*0b57cec5SDimitry Andricdef : InstRW<[WLat11LSU, LSU, VecDF, GroupAlone], (instregex "S(L|R)DT$")>; 1163*0b57cec5SDimitry Andricdef : InstRW<[WLat11LSU, LSU, VecDF4, GroupAlone], (instregex "S(L|R)XT$")>; 1164*0b57cec5SDimitry Andric 1165*0b57cec5SDimitry Andric// Insert biased exponent 1166*0b57cec5SDimitry Andricdef : InstRW<[WLat9, FXb, VecDF, Cracked], (instregex "IEDTR$")>; 1167*0b57cec5SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF4, GroupAlone2], (instregex "IEXTR$")>; 1168*0b57cec5SDimitry Andric 1169*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1170*0b57cec5SDimitry Andric// DFP: Comparisons 1171*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1172*0b57cec5SDimitry Andric 1173*0b57cec5SDimitry Andric// Compare 1174*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "(K|C)DTR$")>; 1175*0b57cec5SDimitry Andricdef : InstRW<[WLat9, VecDF2, GroupAlone], (instregex "(K|C)XTR$")>; 1176*0b57cec5SDimitry Andric 1177*0b57cec5SDimitry Andric// Compare biased exponent 1178*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "CEDTR$")>; 1179*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "CEXTR$")>; 1180*0b57cec5SDimitry Andric 1181*0b57cec5SDimitry Andric// Test Data Class/Group 1182*0b57cec5SDimitry Andricdef : InstRW<[WLat15, LSU, VecDF, NormalGr], (instregex "TD(C|G)(E|D)T$")>; 1183*0b57cec5SDimitry Andricdef : InstRW<[WLat15, LSU, VecDF2, GroupAlone], (instregex "TD(C|G)XT$")>; 1184*0b57cec5SDimitry Andric 1185*0b57cec5SDimitry Andric 1186*0b57cec5SDimitry Andric// --------------------------------- Vector --------------------------------- // 1187*0b57cec5SDimitry Andric 1188*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1189*0b57cec5SDimitry Andric// Vector: Move instructions 1190*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1191*0b57cec5SDimitry Andric 1192*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "VLR(32|64)?$")>; 1193*0b57cec5SDimitry Andricdef : InstRW<[WLat3, FXb, NormalGr], (instregex "VLGV(B|F|G|H)?$")>; 1194*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "VLVG(B|F|G|H)?$")>; 1195*0b57cec5SDimitry Andricdef : InstRW<[WLat3, FXb, NormalGr], (instregex "VLVGP(32)?$")>; 1196*0b57cec5SDimitry Andric 1197*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1198*0b57cec5SDimitry Andric// Vector: Immediate instructions 1199*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1200*0b57cec5SDimitry Andric 1201*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VZERO$")>; 1202*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VONE$")>; 1203*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VGBM$")>; 1204*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VGM(B|F|G|H)?$")>; 1205*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VREPI(B|F|G|H)?$")>; 1206*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VLEI(B|F|G|H)$")>; 1207*0b57cec5SDimitry Andric 1208*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1209*0b57cec5SDimitry Andric// Vector: Loads 1210*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1211*0b57cec5SDimitry Andric 1212*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VL(Align)?$")>; 1213*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VL(L|BB)$")>; 1214*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VL(32|64)$")>; 1215*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VLLEZ(B|F|G|H|LF)?$")>; 1216*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VLREP(B|F|G|H)?$")>; 1217*0b57cec5SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, VecXsPm, LSU, NormalGr], 1218*0b57cec5SDimitry Andric (instregex "VLE(B|F|G|H)$")>; 1219*0b57cec5SDimitry Andricdef : InstRW<[WLat5LSU, RegReadAdv, FXb, LSU, VecXsPm, Cracked], 1220*0b57cec5SDimitry Andric (instregex "VGE(F|G)$")>; 1221*0b57cec5SDimitry Andricdef : InstRW<[WLat4LSU, WLat4LSU, LSU5, GroupAlone], 1222*0b57cec5SDimitry Andric (instregex "VLM(Align)?$")>; 1223*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VLRL(R)?$")>; 1224*0b57cec5SDimitry Andric 1225*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1226*0b57cec5SDimitry Andric// Vector: Stores 1227*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1228*0b57cec5SDimitry Andric 1229*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "VST(Align|L|32|64)?$")>; 1230*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "VSTE(F|G)$")>; 1231*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecXsPm, Cracked], (instregex "VSTE(B|H)$")>; 1232*0b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU2, FXb3, GroupAlone2], (instregex "VSTM(Align)?$")>; 1233*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb2, LSU, Cracked], (instregex "VSCE(F|G)$")>; 1234*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "VSTRL(R)?$")>; 1235*0b57cec5SDimitry Andric 1236*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1237*0b57cec5SDimitry Andric// Vector: Selects and permutes 1238*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1239*0b57cec5SDimitry Andric 1240*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMRH(B|F|G|H)?$")>; 1241*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMRL(B|F|G|H)?$")>; 1242*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPERM$")>; 1243*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPDI$")>; 1244*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VBPERM$")>; 1245*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VREP(B|F|G|H)?$")>; 1246*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSEL$")>; 1247*0b57cec5SDimitry Andric 1248*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1249*0b57cec5SDimitry Andric// Vector: Widening and narrowing 1250*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1251*0b57cec5SDimitry Andric 1252*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPK(F|G|H)?$")>; 1253*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPKS(F|G|H)?$")>; 1254*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VPKS(F|G|H)S$")>; 1255*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPKLS(F|G|H)?$")>; 1256*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VPKLS(F|G|H)S$")>; 1257*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSEG(B|F|H)?$")>; 1258*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VUPH(B|F|H)?$")>; 1259*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VUPL(B|F)?$")>; 1260*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VUPLH(B|F|H|W)?$")>; 1261*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VUPLL(B|F|H)?$")>; 1262*0b57cec5SDimitry Andric 1263*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1264*0b57cec5SDimitry Andric// Vector: Integer arithmetic 1265*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1266*0b57cec5SDimitry Andric 1267*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VA(B|F|G|H|Q|C|CQ)?$")>; 1268*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VACC(B|F|G|H|Q|C|CQ)?$")>; 1269*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VAVG(B|F|G|H)?$")>; 1270*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VAVGL(B|F|G|H)?$")>; 1271*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VN(C|O|N|X)?$")>; 1272*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VO(C)?$")>; 1273*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VCKSM$")>; 1274*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCLZ(B|F|G|H)?$")>; 1275*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCTZ(B|F|G|H)?$")>; 1276*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VX$")>; 1277*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VGFM?$")>; 1278*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VGFMA(B|F|G|H)?$")>; 1279*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VGFM(B|F|G|H)$")>; 1280*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VLC(B|F|G|H)?$")>; 1281*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VLP(B|F|G|H)?$")>; 1282*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMX(B|F|G|H)?$")>; 1283*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMXL(B|F|G|H)?$")>; 1284*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMN(B|F|G|H)?$")>; 1285*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMNL(B|F|G|H)?$")>; 1286*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMAL(B|F)?$")>; 1287*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMALE(B|F|H)?$")>; 1288*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMALH(B|F|H|W)?$")>; 1289*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMALO(B|F|H)?$")>; 1290*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMAO(B|F|H)?$")>; 1291*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMAE(B|F|H)?$")>; 1292*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMAH(B|F|H)?$")>; 1293*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VME(B|F|H)?$")>; 1294*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMH(B|F|H)?$")>; 1295*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VML(B|F)?$")>; 1296*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMLE(B|F|H)?$")>; 1297*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMLH(B|F|H|W)?$")>; 1298*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMLO(B|F|H)?$")>; 1299*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMO(B|F|H)?$")>; 1300*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VMSL(G)?$")>; 1301*0b57cec5SDimitry Andric 1302*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPOPCT(B|F|G|H)?$")>; 1303*0b57cec5SDimitry Andric 1304*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VERLL(B|F|G|H)?$")>; 1305*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VERLLV(B|F|G|H)?$")>; 1306*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VERIM(B|F|G|H)?$")>; 1307*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESL(B|F|G|H)?$")>; 1308*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESLV(B|F|G|H)?$")>; 1309*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESRA(B|F|G|H)?$")>; 1310*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESRAV(B|F|G|H)?$")>; 1311*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESRL(B|F|G|H)?$")>; 1312*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESRLV(B|F|G|H)?$")>; 1313*0b57cec5SDimitry Andric 1314*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSL(DB)?$")>; 1315*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSLB$")>; 1316*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSR(A|L)$")>; 1317*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSR(A|L)B$")>; 1318*0b57cec5SDimitry Andric 1319*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSB(I|IQ|CBI|CBIQ)?$")>; 1320*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSCBI(B|F|G|H|Q)?$")>; 1321*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VS(F|G|H|Q)?$")>; 1322*0b57cec5SDimitry Andric 1323*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VSUM(B|H)?$")>; 1324*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VSUMG(F|H)?$")>; 1325*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VSUMQ(F|G)?$")>; 1326*0b57cec5SDimitry Andric 1327*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1328*0b57cec5SDimitry Andric// Vector: Integer comparison 1329*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1330*0b57cec5SDimitry Andric 1331*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "VEC(B|F|G|H)?$")>; 1332*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "VECL(B|F|G|H)?$")>; 1333*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCEQ(B|F|G|H)?$")>; 1334*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VCEQ(B|F|G|H)S$")>; 1335*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCH(B|F|G|H)?$")>; 1336*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VCH(B|F|G|H)S$")>; 1337*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCHL(B|F|G|H)?$")>; 1338*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VCHL(B|F|G|H)S$")>; 1339*0b57cec5SDimitry Andricdef : InstRW<[WLat4, VecStr, NormalGr], (instregex "VTM$")>; 1340*0b57cec5SDimitry Andric 1341*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1342*0b57cec5SDimitry Andric// Vector: Floating-point arithmetic 1343*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1344*0b57cec5SDimitry Andric 1345*0b57cec5SDimitry Andric// Conversion and rounding 1346*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VCD(L)?G$")>; 1347*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VCD(L)?GB$")>; 1348*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WCD(L)?GB$")>; 1349*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VC(L)?GD$")>; 1350*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VC(L)?GDB$")>; 1351*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WC(L)?GDB$")>; 1352*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VL(DE|ED)$")>; 1353*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VL(DE|ED)B$")>; 1354*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WL(DE|ED)B$")>; 1355*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VFL(L|R)$")>; 1356*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VFL(LS|RD)$")>; 1357*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WFL(LS|RD)$")>; 1358*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "WFLLD$")>; 1359*0b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF2, NormalGr], (instregex "WFLRX$")>; 1360*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VFI$")>; 1361*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VFIDB$")>; 1362*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WFIDB$")>; 1363*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VFISB$")>; 1364*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WFISB$")>; 1365*0b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF2, NormalGr], (instregex "WFIXB$")>; 1366*0b57cec5SDimitry Andric 1367*0b57cec5SDimitry Andric// Sign operations 1368*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VFPSO$")>; 1369*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "(V|W)FPSODB$")>; 1370*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "(V|W)FPSOSB$")>; 1371*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFPSOXB$")>; 1372*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "(V|W)FL(C|N|P)DB$")>; 1373*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "(V|W)FL(C|N|P)SB$")>; 1374*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFL(C|N|P)XB$")>; 1375*0b57cec5SDimitry Andric 1376*0b57cec5SDimitry Andric// Minimum / maximum 1377*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(MAX|MIN)$")>; 1378*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(MAX|MIN)DB$")>; 1379*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WF(MAX|MIN)DB$")>; 1380*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(MAX|MIN)SB$")>; 1381*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WF(MAX|MIN)SB$")>; 1382*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecDFX, NormalGr], (instregex "WF(MAX|MIN)XB$")>; 1383*0b57cec5SDimitry Andric 1384*0b57cec5SDimitry Andric// Test data class 1385*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VFTCI$")>; 1386*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "(V|W)FTCIDB$")>; 1387*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "(V|W)FTCISB$")>; 1388*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecDFX, NormalGr], (instregex "WFTCIXB$")>; 1389*0b57cec5SDimitry Andric 1390*0b57cec5SDimitry Andric// Add / subtract 1391*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VF(A|S)$")>; 1392*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VF(A|S)DB$")>; 1393*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WF(A|S)DB$")>; 1394*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VF(A|S)SB$")>; 1395*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WF(A|S)SB$")>; 1396*0b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF2, NormalGr], (instregex "WF(A|S)XB$")>; 1397*0b57cec5SDimitry Andric 1398*0b57cec5SDimitry Andric// Multiply / multiply-and-add/subtract 1399*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VFM$")>; 1400*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VFMDB$")>; 1401*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WFM(D|S)B$")>; 1402*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VFMSB$")>; 1403*0b57cec5SDimitry Andricdef : InstRW<[WLat20, VecDF2, NormalGr], (instregex "WFMXB$")>; 1404*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VF(N)?M(A|S)$")>; 1405*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "VF(N)?M(A|S)DB$")>; 1406*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WF(N)?M(A|S)DB$")>; 1407*0b57cec5SDimitry Andricdef : InstRW<[WLat8, VecBF2, NormalGr], (instregex "VF(N)?M(A|S)SB$")>; 1408*0b57cec5SDimitry Andricdef : InstRW<[WLat7, VecBF, NormalGr], (instregex "WF(N)?M(A|S)SB$")>; 1409*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecDF2, NormalGr], (instregex "WF(N)?M(A|S)XB$")>; 1410*0b57cec5SDimitry Andric 1411*0b57cec5SDimitry Andric// Divide / square root 1412*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "VFD$")>; 1413*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "(V|W)FDDB$")>; 1414*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "(V|W)FDSB$")>; 1415*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "WFDXB$")>; 1416*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "VFSQ$")>; 1417*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "(V|W)FSQDB$")>; 1418*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "(V|W)FSQSB$")>; 1419*0b57cec5SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "WFSQXB$")>; 1420*0b57cec5SDimitry Andric 1421*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1422*0b57cec5SDimitry Andric// Vector: Floating-point comparison 1423*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1424*0b57cec5SDimitry Andric 1425*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(C|K)(E|H|HE)$")>; 1426*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(C|K)(E|H|HE)DB$")>; 1427*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFC(E|H|HE)DB$")>; 1428*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFK(E|H|HE)DB$")>; 1429*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(C|K)(E|H|HE)SB$")>; 1430*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFC(E|H|HE)SB$")>; 1431*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFK(E|H|HE)SB$")>; 1432*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecDFX, NormalGr], (instregex "WFC(E|H|HE)XB$")>; 1433*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecDFX, NormalGr], (instregex "WFK(E|H|HE)XB$")>; 1434*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VFC(E|H|HE)DBS$")>; 1435*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VFK(E|H|HE)DBS$")>; 1436*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], 1437*0b57cec5SDimitry Andric (instregex "WF(C|K)(E|H|HE)DBS$")>; 1438*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], 1439*0b57cec5SDimitry Andric (instregex "VF(C|K)(E|H|HE)SBS$")>; 1440*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "WFC(E|H|HE)SBS$")>; 1441*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "WFK(E|H|HE)SBS$")>; 1442*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecDFX, NormalGr], (instregex "WFC(E|H|HE)XBS$")>; 1443*0b57cec5SDimitry Andricdef : InstRW<[WLat3, WLat3, VecDFX, NormalGr], (instregex "WFK(E|H|HE)XBS$")>; 1444*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "WF(C|K)$")>; 1445*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "WF(C|K)DB$")>; 1446*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "WF(C|K)SB$")>; 1447*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecDFX, NormalGr], (instregex "WF(C|K)XB$")>; 1448*0b57cec5SDimitry Andric 1449*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1450*0b57cec5SDimitry Andric// Vector: Floating-point insertion and extraction 1451*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1452*0b57cec5SDimitry Andric 1453*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LEFR$")>; 1454*0b57cec5SDimitry Andricdef : InstRW<[WLat3, FXb, NormalGr], (instregex "LFER$")>; 1455*0b57cec5SDimitry Andric 1456*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1457*0b57cec5SDimitry Andric// Vector: String instructions 1458*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1459*0b57cec5SDimitry Andric 1460*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFAE(B)?$")>; 1461*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFAE(F|H)$")>; 1462*0b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VFAE(B|F|H)S$")>; 1463*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFAEZ(B|F|H)$")>; 1464*0b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VFAEZ(B|F|H)S$")>; 1465*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFEE(B|F|H|ZB|ZF|ZH)?$")>; 1466*0b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], 1467*0b57cec5SDimitry Andric (instregex "VFEE(B|F|H|ZB|ZF|ZH)S$")>; 1468*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFENE(B|F|H|ZB|ZF|ZH)?$")>; 1469*0b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], 1470*0b57cec5SDimitry Andric (instregex "VFENE(B|F|H|ZB|ZF|ZH)S$")>; 1471*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VISTR(B|F|H)?$")>; 1472*0b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VISTR(B|F|H)S$")>; 1473*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VSTRC(B|F|H)?$")>; 1474*0b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VSTRC(B|F|H)S$")>; 1475*0b57cec5SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VSTRCZ(B|F|H)$")>; 1476*0b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VSTRCZ(B|F|H)S$")>; 1477*0b57cec5SDimitry Andric 1478*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1479*0b57cec5SDimitry Andric// Vector: Packed-decimal instructions 1480*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1481*0b57cec5SDimitry Andric 1482*0b57cec5SDimitry Andricdef : InstRW<[WLat10, VecDF2, NormalGr], (instregex "VLIP$")>; 1483*0b57cec5SDimitry Andricdef : InstRW<[WLat6, VecDFX, LSU, GroupAlone2], (instregex "VPKZ$")>; 1484*0b57cec5SDimitry Andricdef : InstRW<[WLat1, VecDFX, FXb, LSU, Cracked], (instregex "VUPKZ$")>; 1485*0b57cec5SDimitry Andricdef : InstRW<[WLat20, WLat20, VecDF2, FXb, GroupAlone], (instregex "VCVB(G)?$")>; 1486*0b57cec5SDimitry Andricdef : InstRW<[WLat20, WLat20, VecDF2, FXb, GroupAlone], (instregex "VCVD(G)?$")>; 1487*0b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecDFX, NormalGr], (instregex "V(A|S)P$")>; 1488*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, VecDF2, GroupAlone], (instregex "VM(S)?P$")>; 1489*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, VecDF2, GroupAlone], (instregex "V(D|R)P$")>; 1490*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "VSDP$")>; 1491*0b57cec5SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF2, NormalGr], (instregex "VSRP$")>; 1492*0b57cec5SDimitry Andricdef : InstRW<[WLat4, WLat4, VecDFX, NormalGr], (instregex "VPSOP$")>; 1493*0b57cec5SDimitry Andricdef : InstRW<[WLat2, VecDFX, NormalGr], (instregex "V(T|C)P$")>; 1494*0b57cec5SDimitry Andric 1495*0b57cec5SDimitry Andric 1496*0b57cec5SDimitry Andric// -------------------------------- System ---------------------------------- // 1497*0b57cec5SDimitry Andric 1498*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1499*0b57cec5SDimitry Andric// System: Program-Status Word Instructions 1500*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1501*0b57cec5SDimitry Andric 1502*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "EPSW$")>; 1503*0b57cec5SDimitry Andricdef : InstRW<[WLat20, GroupAlone3], (instregex "LPSW(E)?$")>; 1504*0b57cec5SDimitry Andricdef : InstRW<[WLat3, FXa, GroupAlone], (instregex "IPK$")>; 1505*0b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU, EndGroup], (instregex "SPKA$")>; 1506*0b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU, EndGroup], (instregex "SSM$")>; 1507*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, GroupAlone], (instregex "ST(N|O)SM$")>; 1508*0b57cec5SDimitry Andricdef : InstRW<[WLat3, FXa, NormalGr], (instregex "IAC$")>; 1509*0b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU, EndGroup], (instregex "SAC(F)?$")>; 1510*0b57cec5SDimitry Andric 1511*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1512*0b57cec5SDimitry Andric// System: Control Register Instructions 1513*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1514*0b57cec5SDimitry Andric 1515*0b57cec5SDimitry Andricdef : InstRW<[WLat4LSU, WLat4LSU, LSU2, GroupAlone], (instregex "LCTL(G)?$")>; 1516*0b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU5, FXb, GroupAlone2], (instregex "STCT(L|G)$")>; 1517*0b57cec5SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "E(P|S)A(I)?R$")>; 1518*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SSA(I)?R$")>; 1519*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "ESEA$")>; 1520*0b57cec5SDimitry Andric 1521*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1522*0b57cec5SDimitry Andric// System: Prefix-Register Instructions 1523*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1524*0b57cec5SDimitry Andric 1525*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "S(T)?PX$")>; 1526*0b57cec5SDimitry Andric 1527*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1528*0b57cec5SDimitry Andric// System: Storage-Key and Real Memory Instructions 1529*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1530*0b57cec5SDimitry Andric 1531*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "ISKE$")>; 1532*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "IVSK$")>; 1533*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SSKE(Opt)?$")>; 1534*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "RRB(E|M)$")>; 1535*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "IRBM$")>; 1536*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PFMF$")>; 1537*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "TB$")>; 1538*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PGIN$")>; 1539*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PGOUT$")>; 1540*0b57cec5SDimitry Andric 1541*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1542*0b57cec5SDimitry Andric// System: Dynamic-Address-Translation Instructions 1543*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1544*0b57cec5SDimitry Andric 1545*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "IPTE(Opt)?(Opt)?$")>; 1546*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "IDTE(Opt)?$")>; 1547*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "CRDTE(Opt)?$")>; 1548*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PTLB$")>; 1549*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "CSP(G)?$")>; 1550*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "LPTEA$")>; 1551*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "LRA(Y|G)?$")>; 1552*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STRAG$")>; 1553*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "LURA(G)?$")>; 1554*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STUR(A|G)$")>; 1555*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TPROT$")>; 1556*0b57cec5SDimitry Andric 1557*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1558*0b57cec5SDimitry Andric// System: Memory-move Instructions 1559*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1560*0b57cec5SDimitry Andric 1561*0b57cec5SDimitry Andricdef : InstRW<[WLat4LSU, FXa2, FXb, LSU5, GroupAlone2], (instregex "MVC(K|P|S)$")>; 1562*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXa, LSU5, GroupAlone2], (instregex "MVC(S|D)K$")>; 1563*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "MVCOS$")>; 1564*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "MVPG$")>; 1565*0b57cec5SDimitry Andric 1566*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1567*0b57cec5SDimitry Andric// System: Address-Space Instructions 1568*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1569*0b57cec5SDimitry Andric 1570*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "LASP$")>; 1571*0b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU, GroupAlone], (instregex "PALB$")>; 1572*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PC$")>; 1573*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PR$")>; 1574*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PT(I)?$")>; 1575*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "RP$")>; 1576*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "BS(G|A)$")>; 1577*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TAR$")>; 1578*0b57cec5SDimitry Andric 1579*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1580*0b57cec5SDimitry Andric// System: Linkage-Stack Instructions 1581*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1582*0b57cec5SDimitry Andric 1583*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "BAKR$")>; 1584*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "EREG(G)?$")>; 1585*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "(E|M)STA$")>; 1586*0b57cec5SDimitry Andric 1587*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1588*0b57cec5SDimitry Andric// System: Time-Related Instructions 1589*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1590*0b57cec5SDimitry Andric 1591*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PTFF$")>; 1592*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SCK(PF|C)?$")>; 1593*0b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU2, GroupAlone], (instregex "SPT$")>; 1594*0b57cec5SDimitry Andricdef : InstRW<[WLat15, LSU3, FXa2, FXb, GroupAlone2], (instregex "STCK(F)?$")>; 1595*0b57cec5SDimitry Andricdef : InstRW<[WLat20, LSU4, FXa2, FXb2, GroupAlone3], (instregex "STCKE$")>; 1596*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STCKC$")>; 1597*0b57cec5SDimitry Andricdef : InstRW<[WLat1, LSU2, FXb, Cracked], (instregex "STPT$")>; 1598*0b57cec5SDimitry Andric 1599*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1600*0b57cec5SDimitry Andric// System: CPU-Related Instructions 1601*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1602*0b57cec5SDimitry Andric 1603*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STAP$")>; 1604*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STIDP$")>; 1605*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "STSI$")>; 1606*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "STFL(E)?$")>; 1607*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "ECAG$")>; 1608*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "ECTG$")>; 1609*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PTF$")>; 1610*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PCKMO$")>; 1611*0b57cec5SDimitry Andric 1612*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1613*0b57cec5SDimitry Andric// System: Miscellaneous Instructions 1614*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1615*0b57cec5SDimitry Andric 1616*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SVC$")>; 1617*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, GroupAlone], (instregex "MC$")>; 1618*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "DIAG$")>; 1619*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TRAC(E|G)$")>; 1620*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TRAP(2|4)$")>; 1621*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SIG(P|A)$")>; 1622*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SIE$")>; 1623*0b57cec5SDimitry Andric 1624*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1625*0b57cec5SDimitry Andric// System: CPU-Measurement Facility Instructions 1626*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1627*0b57cec5SDimitry Andric 1628*0b57cec5SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LPP$")>; 1629*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "ECPGA$")>; 1630*0b57cec5SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "E(C|P)CTR$")>; 1631*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "LCCTL$")>; 1632*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "L(P|S)CTL$")>; 1633*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "Q(S|CTR)I$")>; 1634*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "S(C|P)CTR$")>; 1635*0b57cec5SDimitry Andric 1636*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1637*0b57cec5SDimitry Andric// System: I/O Instructions 1638*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 1639*0b57cec5SDimitry Andric 1640*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "(C|H|R|X)SCH$")>; 1641*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "(M|S|ST|T)SCH$")>; 1642*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "RCHP$")>; 1643*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SCHM$")>; 1644*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STC(PS|RW)$")>; 1645*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TPI$")>; 1646*0b57cec5SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SAL$")>; 1647*0b57cec5SDimitry Andric 1648*0b57cec5SDimitry Andric} 1649*0b57cec5SDimitry Andric 1650