181ad6265SDimitry Andric//-- SystemZScheduleZ16.td - SystemZ Scheduling Definitions ----*- tblgen -*-=// 281ad6265SDimitry Andric// 381ad6265SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 481ad6265SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 581ad6265SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 681ad6265SDimitry Andric// 781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 881ad6265SDimitry Andric// 981ad6265SDimitry Andric// This file defines the machine model for Z16 to support instruction 1081ad6265SDimitry Andric// scheduling and other instruction cost heuristics. 1181ad6265SDimitry Andric// 1281ad6265SDimitry Andric// Pseudos expanded right after isel do not need to be modelled here. 1381ad6265SDimitry Andric// 1481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 1581ad6265SDimitry Andric 1681ad6265SDimitry Andricdef Z16Model : SchedMachineModel { 1781ad6265SDimitry Andric 1881ad6265SDimitry Andric let UnsupportedFeatures = Arch14UnsupportedFeatures.List; 1981ad6265SDimitry Andric 2081ad6265SDimitry Andric let IssueWidth = 6; // Number of instructions decoded per cycle. 2181ad6265SDimitry Andric let MicroOpBufferSize = 60; // Issue queues 2281ad6265SDimitry Andric let LoadLatency = 1; // Optimistic load latency. 2381ad6265SDimitry Andric 2481ad6265SDimitry Andric let PostRAScheduler = 1; 2581ad6265SDimitry Andric 2681ad6265SDimitry Andric // Extra cycles for a mispredicted branch. 2781ad6265SDimitry Andric let MispredictPenalty = 20; 2881ad6265SDimitry Andric} 2981ad6265SDimitry Andric 3081ad6265SDimitry Andriclet SchedModel = Z16Model in { 3181ad6265SDimitry Andric// These definitions need the SchedModel value. They could be put in a 3281ad6265SDimitry Andric// subtarget common include file, but it seems the include system in Tablegen 3381ad6265SDimitry Andric// currently (2016) rejects multiple includes of same file. 3481ad6265SDimitry Andric 3581ad6265SDimitry Andric// Decoder grouping rules 3681ad6265SDimitry Andriclet NumMicroOps = 1 in { 3781ad6265SDimitry Andric def : WriteRes<NormalGr, []>; 3881ad6265SDimitry Andric def : WriteRes<BeginGroup, []> { let BeginGroup = 1; } 3981ad6265SDimitry Andric def : WriteRes<EndGroup, []> { let EndGroup = 1; } 4081ad6265SDimitry Andric} 4181ad6265SDimitry Andricdef : WriteRes<Cracked, []> { 4281ad6265SDimitry Andric let NumMicroOps = 2; 4381ad6265SDimitry Andric let BeginGroup = 1; 4481ad6265SDimitry Andric} 4581ad6265SDimitry Andricdef : WriteRes<GroupAlone, []> { 4681ad6265SDimitry Andric let NumMicroOps = 3; 4781ad6265SDimitry Andric let BeginGroup = 1; 4881ad6265SDimitry Andric let EndGroup = 1; 4981ad6265SDimitry Andric} 5081ad6265SDimitry Andricdef : WriteRes<GroupAlone2, []> { 5181ad6265SDimitry Andric let NumMicroOps = 6; 5281ad6265SDimitry Andric let BeginGroup = 1; 5381ad6265SDimitry Andric let EndGroup = 1; 5481ad6265SDimitry Andric} 5581ad6265SDimitry Andricdef : WriteRes<GroupAlone3, []> { 5681ad6265SDimitry Andric let NumMicroOps = 9; 5781ad6265SDimitry Andric let BeginGroup = 1; 5881ad6265SDimitry Andric let EndGroup = 1; 5981ad6265SDimitry Andric} 6081ad6265SDimitry Andric 6181ad6265SDimitry Andric// Incoming latency removed from the register operand which is used together 6281ad6265SDimitry Andric// with a memory operand by the instruction. 6381ad6265SDimitry Andricdef : ReadAdvance<RegReadAdv, 4>; 6481ad6265SDimitry Andric 6581ad6265SDimitry Andric// LoadLatency (above) is not used for instructions in this file. This is 6681ad6265SDimitry Andric// instead the role of LSULatency, which is the latency value added to the 6781ad6265SDimitry Andric// result of loads and instructions with folded memory operands. 6881ad6265SDimitry Andricdef : WriteRes<LSULatency, []> { let Latency = 4; let NumMicroOps = 0; } 6981ad6265SDimitry Andric 7081ad6265SDimitry Andriclet NumMicroOps = 0 in { 7181ad6265SDimitry Andric foreach L = 1-30 in 7281ad6265SDimitry Andric def : WriteRes<!cast<SchedWrite>("WLat"#L), []> { let Latency = L; } 7381ad6265SDimitry Andric} 7481ad6265SDimitry Andric 7581ad6265SDimitry Andric// Execution units. 7681ad6265SDimitry Andricdef Z16_FXaUnit : ProcResource<2>; 7781ad6265SDimitry Andricdef Z16_FXbUnit : ProcResource<2>; 7881ad6265SDimitry Andricdef Z16_LSUnit : ProcResource<2>; 7981ad6265SDimitry Andricdef Z16_VecUnit : ProcResource<2>; 8081ad6265SDimitry Andricdef Z16_VecFPdUnit : ProcResource<2> { let BufferSize = 1; /* blocking */ } 8181ad6265SDimitry Andricdef Z16_VBUnit : ProcResource<2>; 8281ad6265SDimitry Andricdef Z16_MCD : ProcResource<1>; 8381ad6265SDimitry Andric 8481ad6265SDimitry Andric// Subtarget specific definitions of scheduling resources. 8581ad6265SDimitry Andriclet NumMicroOps = 0 in { 8681ad6265SDimitry Andric def : WriteRes<FXa, [Z16_FXaUnit]>; 8781ad6265SDimitry Andric def : WriteRes<FXb, [Z16_FXbUnit]>; 8881ad6265SDimitry Andric def : WriteRes<LSU, [Z16_LSUnit]>; 8981ad6265SDimitry Andric def : WriteRes<VecBF, [Z16_VecUnit]>; 9081ad6265SDimitry Andric def : WriteRes<VecDF, [Z16_VecUnit]>; 9181ad6265SDimitry Andric def : WriteRes<VecDFX, [Z16_VecUnit]>; 9281ad6265SDimitry Andric def : WriteRes<VecMul, [Z16_VecUnit]>; 9381ad6265SDimitry Andric def : WriteRes<VecStr, [Z16_VecUnit]>; 9481ad6265SDimitry Andric def : WriteRes<VecXsPm, [Z16_VecUnit]>; 955f757f3fSDimitry Andric foreach Num = 2-5 in { let ReleaseAtCycles = [Num] in { 9681ad6265SDimitry Andric def : WriteRes<!cast<SchedWrite>("FXa"#Num), [Z16_FXaUnit]>; 9781ad6265SDimitry Andric def : WriteRes<!cast<SchedWrite>("FXb"#Num), [Z16_FXbUnit]>; 9881ad6265SDimitry Andric def : WriteRes<!cast<SchedWrite>("LSU"#Num), [Z16_LSUnit]>; 9981ad6265SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecBF"#Num), [Z16_VecUnit]>; 10081ad6265SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecDF"#Num), [Z16_VecUnit]>; 10181ad6265SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecDFX"#Num), [Z16_VecUnit]>; 10281ad6265SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecMul"#Num), [Z16_VecUnit]>; 10381ad6265SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecStr"#Num), [Z16_VecUnit]>; 10481ad6265SDimitry Andric def : WriteRes<!cast<SchedWrite>("VecXsPm"#Num), [Z16_VecUnit]>; 10581ad6265SDimitry Andric }} 10681ad6265SDimitry Andric 1075f757f3fSDimitry Andric def : WriteRes<VecFPd, [Z16_VecFPdUnit]> { let ReleaseAtCycles = [30]; } 1085f757f3fSDimitry Andric def : WriteRes<VecFPd20, [Z16_VecFPdUnit]> { let ReleaseAtCycles = [20]; } 10981ad6265SDimitry Andric 11081ad6265SDimitry Andric def : WriteRes<VBU, [Z16_VBUnit]>; // Virtual Branching Unit 11181ad6265SDimitry Andric} 11281ad6265SDimitry Andric 11381ad6265SDimitry Andricdef : WriteRes<MCD, [Z16_MCD]> { let NumMicroOps = 3; 11481ad6265SDimitry Andric let BeginGroup = 1; 11581ad6265SDimitry Andric let EndGroup = 1; } 11681ad6265SDimitry Andric 11781ad6265SDimitry Andric// -------------------------- INSTRUCTIONS ---------------------------------- // 11881ad6265SDimitry Andric 11981ad6265SDimitry Andric// InstRW constructs have been used in order to preserve the 12081ad6265SDimitry Andric// readability of the InstrInfo files. 12181ad6265SDimitry Andric 12281ad6265SDimitry Andric// For each instruction, as matched by a regexp, provide a list of 12381ad6265SDimitry Andric// resources that it needs. These will be combined into a SchedClass. 12481ad6265SDimitry Andric 12581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 12681ad6265SDimitry Andric// Stack allocation 12781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 12881ad6265SDimitry Andric 12981ad6265SDimitry Andric// Pseudo -> LA / LAY 13081ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ADJDYNALLOC$")>; 13181ad6265SDimitry Andric 13281ad6265SDimitry Andric//===----------------------------------------------------------------------===// 13381ad6265SDimitry Andric// Branch instructions 13481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 13581ad6265SDimitry Andric 13681ad6265SDimitry Andric// Branch 13781ad6265SDimitry Andricdef : InstRW<[WLat1, VBU, NormalGr], (instregex "(Call)?BRC(L)?(Asm.*)?$")>; 13881ad6265SDimitry Andricdef : InstRW<[WLat1, VBU, NormalGr], (instregex "(Call)?J(G)?(Asm.*)?$")>; 13981ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "(Call)?BC(R)?(Asm.*)?$")>; 14081ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "(Call)?B(R)?(Asm.*)?$")>; 14181ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "BI(C)?(Asm.*)?$")>; 14281ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, EndGroup], (instregex "BRCT(G)?$")>; 14381ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, FXb, GroupAlone], (instregex "BRCTH$")>; 14481ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, FXb, GroupAlone], (instregex "BCT(G)?(R)?$")>; 14581ad6265SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "B(R)?X(H|L).*$")>; 14681ad6265SDimitry Andric 14781ad6265SDimitry Andric// Compare and branch 14881ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(L)?(G)?(I|R)J(Asm.*)?$")>; 14981ad6265SDimitry Andricdef : InstRW<[WLat1, FXb2, GroupAlone], 15081ad6265SDimitry Andric (instregex "C(L)?(G)?(I|R)B(Call|Return|Asm.*)?$")>; 15181ad6265SDimitry Andric 15281ad6265SDimitry Andric//===----------------------------------------------------------------------===// 15381ad6265SDimitry Andric// Trap instructions 15481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 15581ad6265SDimitry Andric 15681ad6265SDimitry Andric// Trap 15781ad6265SDimitry Andricdef : InstRW<[WLat1, VBU, NormalGr], (instregex "(Cond)?Trap$")>; 15881ad6265SDimitry Andric 15981ad6265SDimitry Andric// Compare and trap 16081ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(G)?(I|R)T(Asm.*)?$")>; 16181ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CL(G)?RT(Asm.*)?$")>; 16281ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CL(F|G)IT(Asm.*)?$")>; 16381ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "CL(G)?T(Asm.*)?$")>; 16481ad6265SDimitry Andric 16581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 16681ad6265SDimitry Andric// Call and return instructions 16781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 16881ad6265SDimitry Andric 16981ad6265SDimitry Andric// Call 17081ad6265SDimitry Andricdef : InstRW<[WLat1, VBU, FXa2, GroupAlone], (instregex "(Call)?BRAS$")>; 17181ad6265SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "(Call)?BRASL(_XPLINK64)?$")>; 17281ad6265SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "(Call)?BAS(R)?(_XPLINK64|_STACKEXT)?$")>; 17381ad6265SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "TLS_(G|L)DCALL$")>; 17481ad6265SDimitry Andric 17581ad6265SDimitry Andric// Return 17681ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, EndGroup], (instregex "Return(_XPLINK)?$")>; 17781ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CondReturn(_XPLINK)?$")>; 17881ad6265SDimitry Andric 17981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 18081ad6265SDimitry Andric// Move instructions 18181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 18281ad6265SDimitry Andric 18381ad6265SDimitry Andric// Moves 18481ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "MV(G|H)?HI$")>; 18581ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "MVI(Y)?$")>; 18681ad6265SDimitry Andric 18781ad6265SDimitry Andric// Move character 18881ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU3, GroupAlone], (instregex "MVC$")>; 18981ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "MVCL(E|U)?$")>; 19081ad6265SDimitry Andricdef : InstRW<[WLat1, LSU2, GroupAlone], (instregex "MVCRL$")>; 19181ad6265SDimitry Andric 19281ad6265SDimitry Andric// Pseudo -> reg move 19381ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "COPY(_TO_REGCLASS)?$")>; 19481ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "EXTRACT_SUBREG$")>; 19581ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "INSERT_SUBREG$")>; 19681ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "REG_SEQUENCE$")>; 19781ad6265SDimitry Andric 19881ad6265SDimitry Andric// Loads 19981ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "L(Y|FH|RL|Mux)?$")>; 20081ad6265SDimitry Andricdef : InstRW<[LSULatency, LSULatency, LSU, NormalGr], (instregex "LCBB$")>; 20181ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LG(RL)?$")>; 20281ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "L128$")>; 20381ad6265SDimitry Andric 20481ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLIH(F|H|L)$")>; 20581ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLIL(F|H|L)$")>; 20681ad6265SDimitry Andric 20781ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LG(F|H)I$")>; 20881ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LHI(Mux)?$")>; 20981ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LR$")>; 21081ad6265SDimitry Andric 21181ad6265SDimitry Andric// Load and zero rightmost byte 21281ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LZR(F|G)$")>; 21381ad6265SDimitry Andric 21481ad6265SDimitry Andric// Load and trap 21581ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "L(FH|G)?AT$")>; 21681ad6265SDimitry Andric 21781ad6265SDimitry Andric// Load and test 21881ad6265SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, LSU, FXa, NormalGr], (instregex "LT(G)?$")>; 21981ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LT(G)?R$")>; 22081ad6265SDimitry Andric 22181ad6265SDimitry Andric// Stores 22281ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STG(RL)?$")>; 22381ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "ST128$")>; 22481ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "ST(Y|FH|RL|Mux)?$")>; 22581ad6265SDimitry Andric 22681ad6265SDimitry Andric// String moves. 22781ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "MVST$")>; 22881ad6265SDimitry Andric 22981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 23081ad6265SDimitry Andric// Conditional move instructions 23181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 23281ad6265SDimitry Andric 23381ad6265SDimitry Andricdef : InstRW<[WLat2, FXa, NormalGr], (instregex "LOCRMux$")>; 23481ad6265SDimitry Andricdef : InstRW<[WLat2, FXa, NormalGr], (instregex "LOC(G|FH)?R(Asm.*)?$")>; 23581ad6265SDimitry Andricdef : InstRW<[WLat2, FXa, NormalGr], (instregex "LOC(G|H)?HI(Mux|(Asm.*))?$")>; 23681ad6265SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 23781ad6265SDimitry Andric (instregex "LOC(G|FH|Mux)?(Asm.*)?$")>; 23881ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], 23981ad6265SDimitry Andric (instregex "STOC(G|FH|Mux)?(Asm.*)?$")>; 24081ad6265SDimitry Andric 24181ad6265SDimitry Andricdef : InstRW<[WLat2, FXa, NormalGr], (instregex "SELRMux$")>; 24281ad6265SDimitry Andricdef : InstRW<[WLat2, FXa, NormalGr], (instregex "SEL(G|FH)?R(Asm.*)?$")>; 24381ad6265SDimitry Andric 24481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 24581ad6265SDimitry Andric// Sign extensions 24681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 24781ad6265SDimitry Andric 24881ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "L(B|H|G)R$")>; 24981ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LG(B|H|F)R$")>; 25081ad6265SDimitry Andric 25181ad6265SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, FXa, LSU, NormalGr], (instregex "LTGF$")>; 25281ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LTGFR$")>; 25381ad6265SDimitry Andric 25481ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LB(H|Mux)?$")>; 25581ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LH(Y)?$")>; 25681ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LH(H|Mux|RL)$")>; 25781ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LG(B|H|F)$")>; 25881ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LG(H|F)RL$")>; 25981ad6265SDimitry Andric 26081ad6265SDimitry Andric//===----------------------------------------------------------------------===// 26181ad6265SDimitry Andric// Zero extensions 26281ad6265SDimitry Andric//===----------------------------------------------------------------------===// 26381ad6265SDimitry Andric 26481ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLCR(Mux)?$")>; 26581ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLHR(Mux)?$")>; 26681ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LLG(C|H|F|T)R$")>; 26781ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLC(Mux)?$")>; 26881ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLH(Mux)?$")>; 26981ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LL(C|H)H$")>; 27081ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLHRL$")>; 27181ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLG(C|H|F|T|HRL|FRL)$")>; 27281ad6265SDimitry Andric 27381ad6265SDimitry Andric// Load and zero rightmost byte 27481ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLZRGF$")>; 27581ad6265SDimitry Andric 27681ad6265SDimitry Andric// Load and trap 27781ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "LLG(F|T)?AT$")>; 27881ad6265SDimitry Andric 27981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 28081ad6265SDimitry Andric// Truncations 28181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 28281ad6265SDimitry Andric 28381ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STC(H|Y|Mux)?$")>; 28481ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STH(H|Y|RL|Mux)?$")>; 28581ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STCM(H|Y)?$")>; 28681ad6265SDimitry Andric 28781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 28881ad6265SDimitry Andric// Multi-register moves 28981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 29081ad6265SDimitry Andric 29181ad6265SDimitry Andric// Load multiple (estimated average of 5 ops) 29281ad6265SDimitry Andricdef : InstRW<[WLat10, WLat10, LSU5, GroupAlone], (instregex "LM(H|Y|G)?$")>; 29381ad6265SDimitry Andric 29481ad6265SDimitry Andric// Load multiple disjoint 29581ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "LMD$")>; 29681ad6265SDimitry Andric 29781ad6265SDimitry Andric// Store multiple 29881ad6265SDimitry Andricdef : InstRW<[WLat1, LSU2, FXb3, GroupAlone], (instregex "STM(G|H|Y)?$")>; 29981ad6265SDimitry Andric 30081ad6265SDimitry Andric//===----------------------------------------------------------------------===// 30181ad6265SDimitry Andric// Byte swaps 30281ad6265SDimitry Andric//===----------------------------------------------------------------------===// 30381ad6265SDimitry Andric 30481ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LRV(G)?R$")>; 30581ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXa, LSU, NormalGr], (instregex "LRV(G|H)?$")>; 30681ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STRV(G|H)?$")>; 30781ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "MVCIN$")>; 30881ad6265SDimitry Andric 30981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 31081ad6265SDimitry Andric// Load address instructions 31181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 31281ad6265SDimitry Andric 31381ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LA(Y|RL)?$")>; 31481ad6265SDimitry Andric 31581ad6265SDimitry Andric// Load the Global Offset Table address ( -> larl ) 31681ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "GOT$")>; 31781ad6265SDimitry Andric 31881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 31981ad6265SDimitry Andric// Absolute and Negation 32081ad6265SDimitry Andric//===----------------------------------------------------------------------===// 32181ad6265SDimitry Andric 32281ad6265SDimitry Andricdef : InstRW<[WLat1, WLat1, FXa, NormalGr], (instregex "LP(G)?R$")>; 32381ad6265SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa2, Cracked], (instregex "L(N|P)GFR$")>; 32481ad6265SDimitry Andricdef : InstRW<[WLat1, WLat1, FXa, NormalGr], (instregex "LN(R|GR)$")>; 32581ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "LC(R|GR)$")>; 32681ad6265SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa2, Cracked], (instregex "LCGFR$")>; 32781ad6265SDimitry Andric 32881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 32981ad6265SDimitry Andric// Insertion 33081ad6265SDimitry Andric//===----------------------------------------------------------------------===// 33181ad6265SDimitry Andric 33281ad6265SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], (instregex "IC(Y)?$")>; 33381ad6265SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 33481ad6265SDimitry Andric (instregex "IC32(Y)?$")>; 33581ad6265SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, WLat1LSU, FXa, LSU, NormalGr], 33681ad6265SDimitry Andric (instregex "ICM(H|Y)?$")>; 33781ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "II(F|H|L)Mux$")>; 33881ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IIHF(64)?$")>; 33981ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IIHH(64)?$")>; 34081ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IIHL(64)?$")>; 34181ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IILF(64)?$")>; 34281ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IILH(64)?$")>; 34381ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "IILL(64)?$")>; 34481ad6265SDimitry Andric 34581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 34681ad6265SDimitry Andric// Addition 34781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 34881ad6265SDimitry Andric 34981ad6265SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 35081ad6265SDimitry Andric (instregex "A(Y)?$")>; 35181ad6265SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 35281ad6265SDimitry Andric (instregex "AH(Y)?$")>; 35381ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AIH$")>; 35481ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AFI(Mux)?$")>; 35581ad6265SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 35681ad6265SDimitry Andric (instregex "AG$")>; 35781ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AGFI$")>; 35881ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AGHI(K)?$")>; 35981ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AGR(K)?$")>; 36081ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AHI(K)?$")>; 36181ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AHIMux(K)?$")>; 36281ad6265SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 36381ad6265SDimitry Andric (instregex "AL(Y)?$")>; 36481ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AL(FI|HSIK)$")>; 36581ad6265SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 36681ad6265SDimitry Andric (instregex "ALG(F)?$")>; 36781ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALGHSIK$")>; 36881ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALGF(I|R)$")>; 36981ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALGR(K)?$")>; 37081ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALR(K)?$")>; 37181ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "AR(K)?$")>; 37281ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "A(L)?HHHR$")>; 37381ad6265SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, NormalGr], (instregex "A(L)?HHLR$")>; 37481ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ALSIH(N)?$")>; 37581ad6265SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "A(L)?(G)?SI$")>; 37681ad6265SDimitry Andric 37781ad6265SDimitry Andric// Logical addition with carry 37881ad6265SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, GroupAlone], 37981ad6265SDimitry Andric (instregex "ALC(G)?$")>; 38081ad6265SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, GroupAlone], (instregex "ALC(G)?R$")>; 38181ad6265SDimitry Andric 38281ad6265SDimitry Andric// Add with sign extension (16/32 -> 64) 38381ad6265SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 38481ad6265SDimitry Andric (instregex "AG(F|H)$")>; 38581ad6265SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, NormalGr], (instregex "AGFR$")>; 38681ad6265SDimitry Andric 38781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 38881ad6265SDimitry Andric// Subtraction 38981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 39081ad6265SDimitry Andric 39181ad6265SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 39281ad6265SDimitry Andric (instregex "S(G|Y)?$")>; 39381ad6265SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 39481ad6265SDimitry Andric (instregex "SH(Y)?$")>; 39581ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SGR(K)?$")>; 39681ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLFI$")>; 39781ad6265SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 39881ad6265SDimitry Andric (instregex "SL(G|GF|Y)?$")>; 39981ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLGF(I|R)$")>; 40081ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLGR(K)?$")>; 40181ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLR(K)?$")>; 40281ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SR(K)?$")>; 40381ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "S(L)?HHHR$")>; 40481ad6265SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, NormalGr], (instregex "S(L)?HHLR$")>; 40581ad6265SDimitry Andric 40681ad6265SDimitry Andric// Subtraction with borrow 40781ad6265SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, GroupAlone], 40881ad6265SDimitry Andric (instregex "SLB(G)?$")>; 40981ad6265SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, GroupAlone], (instregex "SLB(G)?R$")>; 41081ad6265SDimitry Andric 41181ad6265SDimitry Andric// Subtraction with sign extension (16/32 -> 64) 41281ad6265SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, RegReadAdv, FXa, LSU, NormalGr], 41381ad6265SDimitry Andric (instregex "SG(F|H)$")>; 41481ad6265SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa, NormalGr], (instregex "SGFR$")>; 41581ad6265SDimitry Andric 41681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 41781ad6265SDimitry Andric// AND 41881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 41981ad6265SDimitry Andric 42081ad6265SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 42181ad6265SDimitry Andric (instregex "N(G|Y)?$")>; 42281ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NGR(K)?$")>; 42381ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NI(FMux|HMux|LMux)$")>; 42481ad6265SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "NI(Y)?$")>; 42581ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NIHF(64)?$")>; 42681ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NIHH(64)?$")>; 42781ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NIHL(64)?$")>; 42881ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NILF(64)?$")>; 42981ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NILH(64)?$")>; 43081ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NILL(64)?$")>; 43181ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NR(K)?$")>; 43281ad6265SDimitry Andricdef : InstRW<[WLat3LSU, LSU2, FXb, Cracked], (instregex "NC$")>; 43381ad6265SDimitry Andric 43481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 43581ad6265SDimitry Andric// OR 43681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 43781ad6265SDimitry Andric 43881ad6265SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 43981ad6265SDimitry Andric (instregex "O(G|Y)?$")>; 44081ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OGR(K)?$")>; 44181ad6265SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "OI(Y)?$")>; 44281ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OI(FMux|HMux|LMux)$")>; 44381ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OIHF(64)?$")>; 44481ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OIHH(64)?$")>; 44581ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OIHL(64)?$")>; 44681ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OILF(64)?$")>; 44781ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OILH(64)?$")>; 44881ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OILL(64)?$")>; 44981ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OR(K)?$")>; 45081ad6265SDimitry Andricdef : InstRW<[WLat3LSU, LSU2, FXb, Cracked], (instregex "OC$")>; 45181ad6265SDimitry Andric 45281ad6265SDimitry Andric//===----------------------------------------------------------------------===// 45381ad6265SDimitry Andric// XOR 45481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 45581ad6265SDimitry Andric 45681ad6265SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, RegReadAdv, FXa, LSU, NormalGr], 45781ad6265SDimitry Andric (instregex "X(G|Y)?$")>; 45881ad6265SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "XI(Y)?$")>; 45981ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XIFMux$")>; 46081ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XGR(K)?$")>; 46181ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XIHF(64)?$")>; 46281ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XILF(64)?$")>; 46381ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "XR(K)?$")>; 46481ad6265SDimitry Andricdef : InstRW<[WLat3LSU, LSU2, FXb, Cracked], (instregex "XC$")>; 46581ad6265SDimitry Andric 46681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 46781ad6265SDimitry Andric// Combined logical operations 46881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 46981ad6265SDimitry Andric 47081ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NC(G)?RK$")>; 47181ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "OC(G)?RK$")>; 47281ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NN(G)?RK$")>; 47381ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NO(G)?RK$")>; 47481ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "NX(G)?RK$")>; 47581ad6265SDimitry Andric 47681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 47781ad6265SDimitry Andric// Multiplication 47881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 47981ad6265SDimitry Andric 48081ad6265SDimitry Andricdef : InstRW<[WLat5LSU, RegReadAdv, FXa, LSU, NormalGr], 48181ad6265SDimitry Andric (instregex "MS(GF|Y)?$")>; 48281ad6265SDimitry Andricdef : InstRW<[WLat5, FXa, NormalGr], (instregex "MS(R|FI)$")>; 48381ad6265SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, FXa, LSU, NormalGr], (instregex "MSG$")>; 48481ad6265SDimitry Andricdef : InstRW<[WLat7, FXa, NormalGr], (instregex "MSGR$")>; 48581ad6265SDimitry Andricdef : InstRW<[WLat5, FXa, NormalGr], (instregex "MSGF(I|R)$")>; 48681ad6265SDimitry Andricdef : InstRW<[WLat8LSU, RegReadAdv, FXa2, LSU, GroupAlone], (instregex "MLG$")>; 48781ad6265SDimitry Andricdef : InstRW<[WLat8, FXa2, GroupAlone], (instregex "MLGR$")>; 48881ad6265SDimitry Andricdef : InstRW<[WLat4, FXa, NormalGr], (instregex "MGHI$")>; 48981ad6265SDimitry Andricdef : InstRW<[WLat4, FXa, NormalGr], (instregex "MHI$")>; 49081ad6265SDimitry Andricdef : InstRW<[WLat4LSU, RegReadAdv, FXa, LSU, NormalGr], (instregex "MH(Y)?$")>; 49181ad6265SDimitry Andricdef : InstRW<[WLat6, FXa2, GroupAlone], (instregex "M(L)?R$")>; 49281ad6265SDimitry Andricdef : InstRW<[WLat6LSU, RegReadAdv, FXa2, LSU, GroupAlone], 49381ad6265SDimitry Andric (instregex "M(FY|L)?$")>; 49481ad6265SDimitry Andricdef : InstRW<[WLat8, RegReadAdv, FXa, LSU, NormalGr], (instregex "MGH$")>; 49581ad6265SDimitry Andricdef : InstRW<[WLat12, RegReadAdv, FXa2, LSU, GroupAlone], (instregex "MG$")>; 49681ad6265SDimitry Andricdef : InstRW<[WLat8, FXa2, GroupAlone], (instregex "MGRK$")>; 49781ad6265SDimitry Andricdef : InstRW<[WLat6LSU, WLat6LSU, RegReadAdv, FXa, LSU, NormalGr], 49881ad6265SDimitry Andric (instregex "MSC$")>; 49981ad6265SDimitry Andricdef : InstRW<[WLat8LSU, WLat8LSU, RegReadAdv, FXa, LSU, NormalGr], 50081ad6265SDimitry Andric (instregex "MSGC$")>; 50181ad6265SDimitry Andricdef : InstRW<[WLat6, WLat6, FXa, NormalGr], (instregex "MSRKC$")>; 50281ad6265SDimitry Andricdef : InstRW<[WLat8, WLat8, FXa, NormalGr], (instregex "MSGRKC$")>; 50381ad6265SDimitry Andric 50481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 50581ad6265SDimitry Andric// Division and remainder 50681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 50781ad6265SDimitry Andric 50881ad6265SDimitry Andricdef : InstRW<[WLat20, FXa4, GroupAlone], (instregex "DR$")>; 50981ad6265SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, FXa4, LSU, GroupAlone2], (instregex "D$")>; 51081ad6265SDimitry Andricdef : InstRW<[WLat30, FXa2, GroupAlone], (instregex "DSG(F)?R$")>; 51181ad6265SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, FXa2, LSU, GroupAlone2], 51281ad6265SDimitry Andric (instregex "DSG(F)?$")>; 51381ad6265SDimitry Andricdef : InstRW<[WLat20, FXa4, GroupAlone], (instregex "DLR$")>; 51481ad6265SDimitry Andricdef : InstRW<[WLat30, FXa4, GroupAlone], (instregex "DLGR$")>; 51581ad6265SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, FXa4, LSU, GroupAlone2], 51681ad6265SDimitry Andric (instregex "DL(G)?$")>; 51781ad6265SDimitry Andric 51881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 51981ad6265SDimitry Andric// Shifts 52081ad6265SDimitry Andric//===----------------------------------------------------------------------===// 52181ad6265SDimitry Andric 52281ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLL(G|K)?$")>; 52381ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SRL(G|K)?$")>; 52481ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SRA(G|K)?$")>; 52581ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "SLA(G|K)?$")>; 52681ad6265SDimitry Andricdef : InstRW<[WLat5LSU, WLat5LSU, FXa4, LSU, GroupAlone2], 52781ad6265SDimitry Andric (instregex "S(L|R)D(A|L)$")>; 52881ad6265SDimitry Andric 52981ad6265SDimitry Andric// Rotate 53081ad6265SDimitry Andricdef : InstRW<[WLat2LSU, FXa, LSU, NormalGr], (instregex "RLL(G)?$")>; 53181ad6265SDimitry Andric 53281ad6265SDimitry Andric// Rotate and insert 53381ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "RISBG(N|32)?$")>; 53481ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "RISBH(G|H|L)$")>; 53581ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "RISBL(G|H|L)$")>; 53681ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "RISBMux$")>; 53781ad6265SDimitry Andric 53881ad6265SDimitry Andric// Rotate and Select 53981ad6265SDimitry Andricdef : InstRW<[WLat2, WLat2, FXa2, Cracked], (instregex "R(N|O|X)SBG$")>; 54081ad6265SDimitry Andric 54181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 54281ad6265SDimitry Andric// Comparison 54381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 54481ad6265SDimitry Andric 54581ad6265SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], 54681ad6265SDimitry Andric (instregex "C(G|Y|Mux)?$")>; 54781ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CRL$")>; 54881ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(F|H)I(Mux)?$")>; 54981ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CG(F|H)I$")>; 55081ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CG(HSI|RL)$")>; 55181ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(G)?R$")>; 55281ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CIH$")>; 55381ad6265SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CHF$")>; 55481ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CHSI$")>; 55581ad6265SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], 55681ad6265SDimitry Andric (instregex "CL(Y|Mux)?$")>; 55781ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLFHSI$")>; 55881ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLFI(Mux)?$")>; 55981ad6265SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CLG$")>; 56081ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLG(HRL|HSI)$")>; 56181ad6265SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CLGF$")>; 56281ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLGFRL$")>; 56381ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLGF(I|R)$")>; 56481ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLGR$")>; 56581ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLGRL$")>; 56681ad6265SDimitry Andricdef : InstRW<[WLat1LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CLHF$")>; 56781ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLH(RL|HSI)$")>; 56881ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLIH$")>; 56981ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLI(Y)?$")>; 57081ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "CLR$")>; 57181ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "CLRL$")>; 57281ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "C(L)?HHR$")>; 57381ad6265SDimitry Andricdef : InstRW<[WLat2, FXb, NormalGr], (instregex "C(L)?HLR$")>; 57481ad6265SDimitry Andric 57581ad6265SDimitry Andric// Compare halfword 57681ad6265SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CH(Y)?$")>; 57781ad6265SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "CHRL$")>; 57881ad6265SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CGH$")>; 57981ad6265SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "CGHRL$")>; 58081ad6265SDimitry Andricdef : InstRW<[WLat2LSU, FXa, FXb, LSU, Cracked], (instregex "CHHSI$")>; 58181ad6265SDimitry Andric 58281ad6265SDimitry Andric// Compare with sign extension (32 -> 64) 58381ad6265SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXb, LSU, NormalGr], (instregex "CGF$")>; 58481ad6265SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, NormalGr], (instregex "CGFRL$")>; 58581ad6265SDimitry Andricdef : InstRW<[WLat2, FXb, NormalGr], (instregex "CGFR$")>; 58681ad6265SDimitry Andric 58781ad6265SDimitry Andric// Compare logical character 58881ad6265SDimitry Andricdef : InstRW<[WLat6, FXb, LSU2, Cracked], (instregex "CLC$")>; 58981ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "CLCL(E|U)?$")>; 59081ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "CLST$")>; 59181ad6265SDimitry Andric 59281ad6265SDimitry Andric// Test under mask 59381ad6265SDimitry Andricdef : InstRW<[WLat1LSU, FXb, LSU, NormalGr], (instregex "TM(Y)?$")>; 59481ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TM(H|L)Mux$")>; 59581ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TMHH(64)?$")>; 59681ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TMHL(64)?$")>; 59781ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TMLH(64)?$")>; 59881ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TMLL(64)?$")>; 59981ad6265SDimitry Andric 60081ad6265SDimitry Andric// Compare logical characters under mask 60181ad6265SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, FXb, LSU, NormalGr], 60281ad6265SDimitry Andric (instregex "CLM(H|Y)?$")>; 60381ad6265SDimitry Andric 60481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 60581ad6265SDimitry Andric// Prefetch and execution hint 60681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 60781ad6265SDimitry Andric 60881ad6265SDimitry Andricdef : InstRW<[WLat1, LSU, NormalGr], (instregex "PFD(RL)?$")>; 60981ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "BPP$")>; 61081ad6265SDimitry Andricdef : InstRW<[FXb, EndGroup], (instregex "BPRP$")>; 61181ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "NIAI$")>; 61281ad6265SDimitry Andric 61381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 61481ad6265SDimitry Andric// Atomic operations 61581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 61681ad6265SDimitry Andric 61781ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, EndGroup], (instregex "Serialize$")>; 61881ad6265SDimitry Andric 61981ad6265SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAA(G)?$")>; 62081ad6265SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAAL(G)?$")>; 62181ad6265SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAN(G)?$")>; 62281ad6265SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAO(G)?$")>; 62381ad6265SDimitry Andricdef : InstRW<[WLat2LSU, WLat2LSU, FXb, LSU, NormalGr], (instregex "LAX(G)?$")>; 62481ad6265SDimitry Andric 62581ad6265SDimitry Andric// Test and set 62681ad6265SDimitry Andricdef : InstRW<[WLat2LSU, FXb, LSU, EndGroup], (instregex "TS$")>; 62781ad6265SDimitry Andric 62881ad6265SDimitry Andric// Compare and swap 62981ad6265SDimitry Andricdef : InstRW<[WLat3LSU, WLat3LSU, FXa, FXb, LSU, GroupAlone], 63081ad6265SDimitry Andric (instregex "CS(G|Y)?$")>; 63181ad6265SDimitry Andric 63281ad6265SDimitry Andric// Compare double and swap 63381ad6265SDimitry Andricdef : InstRW<[WLat6LSU, WLat6LSU, FXa3, FXb2, LSU, GroupAlone2], 63481ad6265SDimitry Andric (instregex "CDS(Y)?$")>; 63581ad6265SDimitry Andricdef : InstRW<[WLat15, WLat15, FXa2, FXb4, LSU3, 63681ad6265SDimitry Andric GroupAlone3], (instregex "CDSG$")>; 63781ad6265SDimitry Andric 63881ad6265SDimitry Andric// Compare and swap and store 63981ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "CSST$")>; 64081ad6265SDimitry Andric 64181ad6265SDimitry Andric// Perform locked operation 64281ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PLO$")>; 64381ad6265SDimitry Andric 64481ad6265SDimitry Andric// Load/store pair from/to quadword 64581ad6265SDimitry Andricdef : InstRW<[WLat4LSU, LSU2, GroupAlone], (instregex "LPQ$")>; 64681ad6265SDimitry Andricdef : InstRW<[WLat1, FXb2, LSU, GroupAlone], (instregex "STPQ$")>; 64781ad6265SDimitry Andric 64881ad6265SDimitry Andric// Load pair disjoint 64981ad6265SDimitry Andricdef : InstRW<[WLat1LSU, WLat1LSU, LSU2, GroupAlone], (instregex "LPD(G)?$")>; 65081ad6265SDimitry Andric 65181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 65281ad6265SDimitry Andric// Translate and convert 65381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 65481ad6265SDimitry Andric 65581ad6265SDimitry Andricdef : InstRW<[WLat1, LSU5, GroupAlone], (instregex "TR$")>; 65681ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, FXa3, LSU2, GroupAlone2], 65781ad6265SDimitry Andric (instregex "TRT$")>; 65881ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "TRTR$")>; 65981ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "TRE$")>; 66081ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "TRT(R)?E(Opt)?$")>; 66181ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "TR(T|O)(T|O)(Opt)?$")>; 66281ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], 66381ad6265SDimitry Andric (instregex "CU(12|14|21|24|41|42)(Opt)?$")>; 66481ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "(CUUTF|CUTFU)(Opt)?$")>; 66581ad6265SDimitry Andric 66681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 66781ad6265SDimitry Andric// Message-security assist 66881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 66981ad6265SDimitry Andric 67081ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, WLat30, MCD], 67181ad6265SDimitry Andric (instregex "KM(C|F|O|CTR|A)?$")>; 67281ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], 67381ad6265SDimitry Andric (instregex "(KIMD|KLMD|KMAC|KDSA)$")>; 67481ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], 67581ad6265SDimitry Andric (instregex "(PCC|PPNO|PRNO)$")>; 67681ad6265SDimitry Andric 67781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 67881ad6265SDimitry Andric// Guarded storage 67981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 68081ad6265SDimitry Andric 68181ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LGG$")>; 68281ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LLGFSG$")>; 68381ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "(L|ST)GSC$")>; 68481ad6265SDimitry Andric 68581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 68681ad6265SDimitry Andric// Decimal arithmetic 68781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 68881ad6265SDimitry Andric 68981ad6265SDimitry Andricdef : InstRW<[WLat20, RegReadAdv, FXb, VecDF2, LSU2, GroupAlone2], 69081ad6265SDimitry Andric (instregex "CVBG$")>; 69181ad6265SDimitry Andricdef : InstRW<[WLat20, RegReadAdv, FXb, VecDF, LSU, GroupAlone2], 69281ad6265SDimitry Andric (instregex "CVB(Y)?$")>; 69381ad6265SDimitry Andricdef : InstRW<[WLat1, FXb3, VecDF4, LSU, GroupAlone3], (instregex "CVDG$")>; 69481ad6265SDimitry Andricdef : InstRW<[WLat1, FXb2, VecDF, LSU, GroupAlone2], (instregex "CVD(Y)?$")>; 69581ad6265SDimitry Andricdef : InstRW<[WLat1, LSU5, GroupAlone], (instregex "MV(N|O|Z)$")>; 69681ad6265SDimitry Andricdef : InstRW<[WLat1, LSU5, GroupAlone], (instregex "(PACK|PKA|PKU)$")>; 69781ad6265SDimitry Andricdef : InstRW<[WLat12, LSU5, GroupAlone], (instregex "UNPK(A|U)$")>; 69881ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU2, Cracked], (instregex "UNPK$")>; 69981ad6265SDimitry Andric 70081ad6265SDimitry Andricdef : InstRW<[WLat5LSU, FXb, VecDFX, LSU3, GroupAlone2], 70181ad6265SDimitry Andric (instregex "(A|S|ZA)P$")>; 70281ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, VecDFX2, LSU3, GroupAlone2], (instregex "MP$")>; 70381ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, VecDFX4, LSU3, GroupAlone2], (instregex "DP$")>; 70481ad6265SDimitry Andricdef : InstRW<[WLat15, FXb, VecDFX2, LSU2, GroupAlone3], (instregex "SRP$")>; 70581ad6265SDimitry Andricdef : InstRW<[WLat8, VecDFX, LSU, LSU, GroupAlone], (instregex "CP$")>; 70681ad6265SDimitry Andricdef : InstRW<[WLat3LSU, VecDFX, LSU, Cracked], (instregex "TP$")>; 70781ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "ED(MK)?$")>; 70881ad6265SDimitry Andric 70981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 71081ad6265SDimitry Andric// Access registers 71181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 71281ad6265SDimitry Andric 71381ad6265SDimitry Andric// Extract/set/copy access register 71481ad6265SDimitry Andricdef : InstRW<[WLat3, LSU, NormalGr], (instregex "(EAR|SAR|CPYA)$")>; 71581ad6265SDimitry Andric 71681ad6265SDimitry Andric// Load address extended 71781ad6265SDimitry Andricdef : InstRW<[WLat5, LSU, FXa, Cracked], (instregex "LAE(Y)?$")>; 71881ad6265SDimitry Andric 71981ad6265SDimitry Andric// Load/store access multiple (not modeled precisely) 72081ad6265SDimitry Andricdef : InstRW<[WLat20, WLat20, LSU5, GroupAlone], (instregex "LAM(Y)?$")>; 72181ad6265SDimitry Andricdef : InstRW<[WLat1, LSU5, FXb, GroupAlone2], (instregex "STAM(Y)?$")>; 72281ad6265SDimitry Andric 72381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 72481ad6265SDimitry Andric// Program mask and addressing mode 72581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 72681ad6265SDimitry Andric 72781ad6265SDimitry Andric// Insert Program Mask 72881ad6265SDimitry Andricdef : InstRW<[WLat3, FXa, EndGroup], (instregex "IPM$")>; 72981ad6265SDimitry Andric 73081ad6265SDimitry Andric// Set Program Mask 73181ad6265SDimitry Andricdef : InstRW<[WLat3, LSU, EndGroup], (instregex "SPM$")>; 73281ad6265SDimitry Andric 73381ad6265SDimitry Andric// Branch and link 73481ad6265SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "BAL(R)?$")>; 73581ad6265SDimitry Andric 73681ad6265SDimitry Andric// Test addressing mode 73781ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TAM$")>; 73881ad6265SDimitry Andric 73981ad6265SDimitry Andric// Set addressing mode 74081ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, EndGroup], (instregex "SAM(24|31|64)$")>; 74181ad6265SDimitry Andric 74281ad6265SDimitry Andric// Branch (and save) and set mode. 74381ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, FXb, GroupAlone], (instregex "BSM$")>; 74481ad6265SDimitry Andricdef : InstRW<[WLat1, FXa2, FXb, GroupAlone], (instregex "BASSM$")>; 74581ad6265SDimitry Andric 74681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 74781ad6265SDimitry Andric// Transactional execution 74881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 74981ad6265SDimitry Andric 75081ad6265SDimitry Andric// Transaction begin 75181ad6265SDimitry Andricdef : InstRW<[WLat9, LSU2, FXb5, GroupAlone2], (instregex "TBEGIN(C)?$")>; 75281ad6265SDimitry Andric 75381ad6265SDimitry Andric// Transaction end 75481ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, GroupAlone], (instregex "TEND$")>; 75581ad6265SDimitry Andric 75681ad6265SDimitry Andric// Transaction abort 75781ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TABORT$")>; 75881ad6265SDimitry Andric 75981ad6265SDimitry Andric// Extract Transaction Nesting Depth 76081ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, NormalGr], (instregex "ETND$")>; 76181ad6265SDimitry Andric 76281ad6265SDimitry Andric// Nontransactional store 76381ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "NTSTG$")>; 76481ad6265SDimitry Andric 76581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 76681ad6265SDimitry Andric// Processor assist 76781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 76881ad6265SDimitry Andric 76981ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, GroupAlone], (instregex "PPA$")>; 77081ad6265SDimitry Andric 77181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 77281ad6265SDimitry Andric// Miscellaneous Instructions. 77381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 77481ad6265SDimitry Andric 77581ad6265SDimitry Andric// Find leftmost one 77681ad6265SDimitry Andricdef : InstRW<[WLat5, WLat5, FXa2, GroupAlone], (instregex "FLOGR$")>; 77781ad6265SDimitry Andric 77881ad6265SDimitry Andric// Population count 77981ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, FXa, NormalGr], (instregex "POPCNT(Opt)?$")>; 78081ad6265SDimitry Andric 78181ad6265SDimitry Andric// String instructions 78281ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "SRST(U)?$")>; 78381ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "CUSE$")>; 78481ad6265SDimitry Andric 78581ad6265SDimitry Andric// Various complex instructions 78681ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, WLat30, MCD], (instregex "CFC$")>; 78781ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, WLat30, WLat30, WLat30, MCD], 78881ad6265SDimitry Andric (instregex "UPT$")>; 78981ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "CKSM$")>; 79081ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, WLat30, MCD], (instregex "CMPSC$")>; 79181ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, WLat30, MCD], (instregex "SORTL$")>; 79281ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, WLat30, MCD], (instregex "DFLTCC$")>; 79381ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "NNPA$")>; 79481ad6265SDimitry Andric 79581ad6265SDimitry Andric// Execute 79681ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, GroupAlone], (instregex "EX(RL)?$")>; 79781ad6265SDimitry Andric 79881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 79981ad6265SDimitry Andric// .insn directive instructions 80081ad6265SDimitry Andric//===----------------------------------------------------------------------===// 80181ad6265SDimitry Andric 80281ad6265SDimitry Andric// An "empty" sched-class will be assigned instead of the "invalid sched-class". 80381ad6265SDimitry Andric// getNumDecoderSlots() will then return 1 instead of 0. 80481ad6265SDimitry Andricdef : InstRW<[], (instregex "Insn.*")>; 80581ad6265SDimitry Andric 80681ad6265SDimitry Andric 80781ad6265SDimitry Andric// ----------------------------- Floating point ----------------------------- // 80881ad6265SDimitry Andric 80981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 81081ad6265SDimitry Andric// FP: Move instructions 81181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 81281ad6265SDimitry Andric 81381ad6265SDimitry Andric// Load zero 81481ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LZ(DR|ER)$")>; 81581ad6265SDimitry Andricdef : InstRW<[WLat2, FXb2, Cracked], (instregex "LZXR$")>; 81681ad6265SDimitry Andric 81781ad6265SDimitry Andric// Load 81881ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "LER$")>; 81981ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LD(R|R32|GR)$")>; 82081ad6265SDimitry Andricdef : InstRW<[WLat3, FXb, NormalGr], (instregex "LGDR$")>; 82181ad6265SDimitry Andricdef : InstRW<[WLat2, FXb2, GroupAlone], (instregex "LXR$")>; 82281ad6265SDimitry Andric 82381ad6265SDimitry Andric// Load and Test 82481ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "LT(E|D)BR$")>; 825*7a6dacacSDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "LTXBR$")>; 82681ad6265SDimitry Andric 82781ad6265SDimitry Andric// Copy sign 82881ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "CPSDR(d|s)(d|s)$")>; 82981ad6265SDimitry Andric 83081ad6265SDimitry Andric//===----------------------------------------------------------------------===// 83181ad6265SDimitry Andric// FP: Load instructions 83281ad6265SDimitry Andric//===----------------------------------------------------------------------===// 83381ad6265SDimitry Andric 83481ad6265SDimitry Andricdef : InstRW<[WLat2LSU, VecXsPm, LSU, NormalGr], (instregex "LE(Y)?$")>; 83581ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LD(Y|E32)?$")>; 83681ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LX$")>; 83781ad6265SDimitry Andric 83881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 83981ad6265SDimitry Andric// FP: Store instructions 84081ad6265SDimitry Andric//===----------------------------------------------------------------------===// 84181ad6265SDimitry Andric 84281ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "ST(E|D)(Y)?$")>; 84381ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "STX$")>; 84481ad6265SDimitry Andric 84581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 84681ad6265SDimitry Andric// FP: Conversion instructions 84781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 84881ad6265SDimitry Andric 84981ad6265SDimitry Andric// Load rounded 85081ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "LEDBR(A)?$")>; 85181ad6265SDimitry Andricdef : InstRW<[WLat9, VecDF2, NormalGr], (instregex "L(E|D)XBR(A)?$")>; 85281ad6265SDimitry Andric 85381ad6265SDimitry Andric// Load lengthened 85481ad6265SDimitry Andricdef : InstRW<[WLat6LSU, VecBF, LSU, NormalGr], (instregex "LDEB$")>; 85581ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "LDEBR$")>; 85681ad6265SDimitry Andricdef : InstRW<[WLat7LSU, VecBF4, LSU, GroupAlone], (instregex "LX(E|D)B$")>; 85781ad6265SDimitry Andricdef : InstRW<[WLat7, VecBF4, GroupAlone], (instregex "LX(E|D)BR$")>; 85881ad6265SDimitry Andric 85981ad6265SDimitry Andric// Convert from fixed / logical 86081ad6265SDimitry Andricdef : InstRW<[WLat7, FXb, VecBF, Cracked], (instregex "C(E|D)(F|G)BR(A)?$")>; 86181ad6265SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF4, GroupAlone2], (instregex "CX(F|G)BR(A)?$")>; 86281ad6265SDimitry Andricdef : InstRW<[WLat7, FXb, VecBF, Cracked], (instregex "C(E|D)L(F|G)BR$")>; 86381ad6265SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF4, GroupAlone2], (instregex "CXL(F|G)BR$")>; 86481ad6265SDimitry Andric 86581ad6265SDimitry Andric// Convert to fixed / logical 86681ad6265SDimitry Andricdef : InstRW<[WLat9, WLat9, FXb, VecBF, Cracked], 86781ad6265SDimitry Andric (instregex "C(F|G)(E|D)BR(A)?$")>; 86881ad6265SDimitry Andricdef : InstRW<[WLat12, WLat12, FXb, VecDF2, Cracked], 86981ad6265SDimitry Andric (instregex "C(F|G)XBR(A)?$")>; 87081ad6265SDimitry Andricdef : InstRW<[WLat9, WLat9, FXb, VecBF, GroupAlone], (instregex "CLFEBR$")>; 87181ad6265SDimitry Andricdef : InstRW<[WLat9, WLat9, FXb, VecBF, Cracked], (instregex "CLFDBR$")>; 87281ad6265SDimitry Andricdef : InstRW<[WLat9, WLat9, FXb, VecBF, Cracked], (instregex "CLG(E|D)BR$")>; 87381ad6265SDimitry Andricdef : InstRW<[WLat12, WLat12, FXb, VecDF2, Cracked], (instregex "CL(F|G)XBR$")>; 87481ad6265SDimitry Andric 87581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 87681ad6265SDimitry Andric// FP: Unary arithmetic 87781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 87881ad6265SDimitry Andric 87981ad6265SDimitry Andric// Load Complement / Negative / Positive 88081ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "L(C|N|P)(E|D)BR$")>; 88181ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "L(C|N|P)DFR(_32)?$")>; 88281ad6265SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "L(C|N|P)XBR$")>; 88381ad6265SDimitry Andric 88481ad6265SDimitry Andric// Square root 88581ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, LSU, NormalGr], (instregex "SQ(E|D)B$")>; 88681ad6265SDimitry Andricdef : InstRW<[WLat20, VecFPd20, NormalGr], (instregex "SQEBR$")>; 88781ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "SQDBR$")>; 88881ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, GroupAlone], (instregex "SQXBR$")>; 88981ad6265SDimitry Andric 89081ad6265SDimitry Andric// Load FP integer 89181ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "FI(E|D)BR(A)?$")>; 89281ad6265SDimitry Andricdef : InstRW<[WLat10, VecDF4, GroupAlone], (instregex "FIXBR(A)?$")>; 89381ad6265SDimitry Andric 89481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 89581ad6265SDimitry Andric// FP: Binary arithmetic 89681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 89781ad6265SDimitry Andric 89881ad6265SDimitry Andric// Addition 89981ad6265SDimitry Andricdef : InstRW<[WLat6LSU, WLat6LSU, RegReadAdv, VecBF, LSU, NormalGr], 90081ad6265SDimitry Andric (instregex "A(E|D)B$")>; 90181ad6265SDimitry Andricdef : InstRW<[WLat6, WLat6, VecBF, NormalGr], (instregex "A(E|D)BR$")>; 90281ad6265SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "AXBR$")>; 90381ad6265SDimitry Andric 90481ad6265SDimitry Andric// Subtraction 90581ad6265SDimitry Andricdef : InstRW<[WLat6LSU, WLat6LSU, RegReadAdv, VecBF, LSU, NormalGr], 90681ad6265SDimitry Andric (instregex "S(E|D)B$")>; 90781ad6265SDimitry Andricdef : InstRW<[WLat6, WLat6, VecBF, NormalGr], (instregex "S(E|D)BR$")>; 90881ad6265SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "SXBR$")>; 90981ad6265SDimitry Andric 91081ad6265SDimitry Andric// Multiply 91181ad6265SDimitry Andricdef : InstRW<[WLat6LSU, RegReadAdv, VecBF, LSU, NormalGr], 91281ad6265SDimitry Andric (instregex "M(D|DE|EE)B$")>; 91381ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "M(D|DE|EE)BR$")>; 91481ad6265SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, VecBF4, LSU, GroupAlone], 91581ad6265SDimitry Andric (instregex "MXDB$")>; 91681ad6265SDimitry Andricdef : InstRW<[WLat7, VecBF4, GroupAlone], (instregex "MXDBR$")>; 91781ad6265SDimitry Andricdef : InstRW<[WLat20, VecDF4, GroupAlone], (instregex "MXBR$")>; 91881ad6265SDimitry Andric 91981ad6265SDimitry Andric// Multiply and add / subtract 92081ad6265SDimitry Andricdef : InstRW<[WLat6LSU, RegReadAdv, RegReadAdv, VecBF2, LSU, GroupAlone], 92181ad6265SDimitry Andric (instregex "M(A|S)EB$")>; 92281ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, GroupAlone], (instregex "M(A|S)EBR$")>; 92381ad6265SDimitry Andricdef : InstRW<[WLat6LSU, RegReadAdv, RegReadAdv, VecBF2, LSU, GroupAlone], 92481ad6265SDimitry Andric (instregex "M(A|S)DB$")>; 92581ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "M(A|S)DBR$")>; 92681ad6265SDimitry Andric 92781ad6265SDimitry Andric// Division 92881ad6265SDimitry Andricdef : InstRW<[WLat20, RegReadAdv, VecFPd20, LSU, NormalGr], (instregex "DEB$")>; 92981ad6265SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, VecFPd, LSU, NormalGr], (instregex "DDB$")>; 93081ad6265SDimitry Andricdef : InstRW<[WLat20, VecFPd20, NormalGr], (instregex "DEBR$")>; 93181ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "DDBR$")>; 93281ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, GroupAlone], (instregex "DXBR$")>; 93381ad6265SDimitry Andric 93481ad6265SDimitry Andric// Divide to integer 93581ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "DI(E|D)BR$")>; 93681ad6265SDimitry Andric 93781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 93881ad6265SDimitry Andric// FP: Comparisons 93981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 94081ad6265SDimitry Andric 94181ad6265SDimitry Andric// Compare 94281ad6265SDimitry Andricdef : InstRW<[WLat3LSU, RegReadAdv, VecXsPm, LSU, NormalGr], 94381ad6265SDimitry Andric (instregex "(K|C)(E|D)B$")>; 94481ad6265SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "(K|C)(E|D)BR$")>; 94581ad6265SDimitry Andricdef : InstRW<[WLat9, VecDF2, GroupAlone], (instregex "(K|C)XBR$")>; 94681ad6265SDimitry Andric 94781ad6265SDimitry Andric// Test Data Class 94881ad6265SDimitry Andricdef : InstRW<[WLat5, LSU, VecXsPm, NormalGr], (instregex "TC(E|D)B$")>; 94981ad6265SDimitry Andricdef : InstRW<[WLat10, LSU, VecDF4, GroupAlone], (instregex "TCXB$")>; 95081ad6265SDimitry Andric 95181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 95281ad6265SDimitry Andric// FP: Floating-point control register instructions 95381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 95481ad6265SDimitry Andric 95581ad6265SDimitry Andricdef : InstRW<[WLat4, FXa, LSU, GroupAlone], (instregex "EFPC$")>; 95681ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, GroupAlone], (instregex "STFPC$")>; 95781ad6265SDimitry Andricdef : InstRW<[WLat3, LSU, GroupAlone], (instregex "SFPC$")>; 95881ad6265SDimitry Andricdef : InstRW<[WLat3LSU, LSU2, GroupAlone], (instregex "LFPC$")>; 95981ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SFASR$")>; 96081ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "LFAS$")>; 96181ad6265SDimitry Andricdef : InstRW<[WLat3, FXb, GroupAlone], (instregex "SRNM(B|T)?$")>; 96281ad6265SDimitry Andric 96381ad6265SDimitry Andric 96481ad6265SDimitry Andric// --------------------- Hexadecimal floating point ------------------------- // 96581ad6265SDimitry Andric 96681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 96781ad6265SDimitry Andric// HFP: Move instructions 96881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 96981ad6265SDimitry Andric 97081ad6265SDimitry Andric// Load and Test 97181ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "LT(E|D)R$")>; 97281ad6265SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "LTXR$")>; 97381ad6265SDimitry Andric 97481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 97581ad6265SDimitry Andric// HFP: Conversion instructions 97681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 97781ad6265SDimitry Andric 97881ad6265SDimitry Andric// Load rounded 97981ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "(LEDR|LRER)$")>; 98081ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "LEXR$")>; 98181ad6265SDimitry Andricdef : InstRW<[WLat9, VecDF2, NormalGr], (instregex "(LDXR|LRDR)$")>; 98281ad6265SDimitry Andric 98381ad6265SDimitry Andric// Load lengthened 98481ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "LDE$")>; 98581ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LDER$")>; 98681ad6265SDimitry Andricdef : InstRW<[WLat7LSU, VecBF4, LSU, GroupAlone], (instregex "LX(E|D)$")>; 98781ad6265SDimitry Andricdef : InstRW<[WLat7, VecBF4, GroupAlone], (instregex "LX(E|D)R$")>; 98881ad6265SDimitry Andric 98981ad6265SDimitry Andric// Convert from fixed 99081ad6265SDimitry Andricdef : InstRW<[WLat7, FXb, VecBF, Cracked], (instregex "C(E|D)(F|G)R$")>; 99181ad6265SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF4, GroupAlone2], (instregex "CX(F|G)R$")>; 99281ad6265SDimitry Andric 99381ad6265SDimitry Andric// Convert to fixed 99481ad6265SDimitry Andricdef : InstRW<[WLat9, WLat9, FXb, VecBF, Cracked], (instregex "C(F|G)(E|D)R$")>; 99581ad6265SDimitry Andricdef : InstRW<[WLat12, WLat12, FXb, VecDF2, Cracked], (instregex "C(F|G)XR$")>; 99681ad6265SDimitry Andric 99781ad6265SDimitry Andric// Convert BFP to HFP / HFP to BFP. 99881ad6265SDimitry Andricdef : InstRW<[WLat6, WLat6, VecBF, NormalGr], (instregex "THD(E)?R$")>; 99981ad6265SDimitry Andricdef : InstRW<[WLat6, WLat6, VecBF, NormalGr], (instregex "TB(E)?DR$")>; 100081ad6265SDimitry Andric 100181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 100281ad6265SDimitry Andric// HFP: Unary arithmetic 100381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 100481ad6265SDimitry Andric 100581ad6265SDimitry Andric// Load Complement / Negative / Positive 100681ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "L(C|N|P)(E|D)R$")>; 100781ad6265SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "L(C|N|P)XR$")>; 100881ad6265SDimitry Andric 100981ad6265SDimitry Andric// Halve 101081ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "H(E|D)R$")>; 101181ad6265SDimitry Andric 101281ad6265SDimitry Andric// Square root 101381ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, LSU, NormalGr], (instregex "SQ(E|D)$")>; 101481ad6265SDimitry Andricdef : InstRW<[WLat20, VecFPd20, NormalGr], (instregex "SQER$")>; 101581ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "SQDR$")>; 101681ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, GroupAlone], (instregex "SQXR$")>; 101781ad6265SDimitry Andric 101881ad6265SDimitry Andric// Load FP integer 101981ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "FI(E|D)R$")>; 102081ad6265SDimitry Andricdef : InstRW<[WLat10, VecDF4, GroupAlone], (instregex "FIXR$")>; 102181ad6265SDimitry Andric 102281ad6265SDimitry Andric//===----------------------------------------------------------------------===// 102381ad6265SDimitry Andric// HFP: Binary arithmetic 102481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 102581ad6265SDimitry Andric 102681ad6265SDimitry Andric// Addition 102781ad6265SDimitry Andricdef : InstRW<[WLat6LSU, WLat6LSU, RegReadAdv, VecBF, LSU, NormalGr], 102881ad6265SDimitry Andric (instregex "A(E|D|U|W)$")>; 102981ad6265SDimitry Andricdef : InstRW<[WLat6, WLat6, VecBF, NormalGr], (instregex "A(E|D|U|W)R$")>; 103081ad6265SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "AXR$")>; 103181ad6265SDimitry Andric 103281ad6265SDimitry Andric// Subtraction 103381ad6265SDimitry Andricdef : InstRW<[WLat6LSU, WLat6LSU, RegReadAdv, VecBF, LSU, NormalGr], 103481ad6265SDimitry Andric (instregex "S(E|D|U|W)$")>; 103581ad6265SDimitry Andricdef : InstRW<[WLat6, WLat6, VecBF, NormalGr], (instregex "S(E|D|U|W)R$")>; 103681ad6265SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "SXR$")>; 103781ad6265SDimitry Andric 103881ad6265SDimitry Andric// Multiply 103981ad6265SDimitry Andricdef : InstRW<[WLat6LSU, RegReadAdv, VecBF, LSU, NormalGr], 104081ad6265SDimitry Andric (instregex "M(D|DE|E|EE)$")>; 104181ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "M(D|DE|E|EE)R$")>; 104281ad6265SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, VecBF4, LSU, GroupAlone], 104381ad6265SDimitry Andric (instregex "MXD$")>; 104481ad6265SDimitry Andricdef : InstRW<[WLat7, VecBF4, GroupAlone], (instregex "MXDR$")>; 104581ad6265SDimitry Andricdef : InstRW<[WLat20, VecDF4, GroupAlone], (instregex "MXR$")>; 104681ad6265SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, VecBF4, LSU, GroupAlone], (instregex "MY$")>; 104781ad6265SDimitry Andricdef : InstRW<[WLat6LSU, RegReadAdv, VecBF2, LSU, GroupAlone], 104881ad6265SDimitry Andric (instregex "MY(H|L)$")>; 104981ad6265SDimitry Andricdef : InstRW<[WLat7, VecBF4, GroupAlone], (instregex "MYR$")>; 105081ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, GroupAlone], (instregex "MY(H|L)R$")>; 105181ad6265SDimitry Andric 105281ad6265SDimitry Andric// Multiply and add / subtract 105381ad6265SDimitry Andricdef : InstRW<[WLat6LSU, RegReadAdv, RegReadAdv, VecBF2, LSU, GroupAlone], 105481ad6265SDimitry Andric (instregex "M(A|S)(E|D)$")>; 105581ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, GroupAlone], (instregex "M(A|S)(E|D)R$")>; 105681ad6265SDimitry Andricdef : InstRW<[WLat7LSU, RegReadAdv, RegReadAdv, VecBF4, LSU, GroupAlone], 105781ad6265SDimitry Andric (instregex "MAY$")>; 105881ad6265SDimitry Andricdef : InstRW<[WLat6LSU, RegReadAdv, RegReadAdv, VecBF2, LSU, GroupAlone], 105981ad6265SDimitry Andric (instregex "MAY(H|L)$")>; 106081ad6265SDimitry Andricdef : InstRW<[WLat7, VecBF4, GroupAlone], (instregex "MAYR$")>; 106181ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, GroupAlone], (instregex "MAY(H|L)R$")>; 106281ad6265SDimitry Andric 106381ad6265SDimitry Andric// Division 106481ad6265SDimitry Andricdef : InstRW<[WLat20, RegReadAdv, VecFPd20, LSU, NormalGr], (instregex "DE$")>; 106581ad6265SDimitry Andricdef : InstRW<[WLat30, RegReadAdv, VecFPd, LSU, NormalGr], (instregex "DD$")>; 106681ad6265SDimitry Andricdef : InstRW<[WLat20, VecFPd20, NormalGr], (instregex "DER$")>; 106781ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "DDR$")>; 106881ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, GroupAlone], (instregex "DXR$")>; 106981ad6265SDimitry Andric 107081ad6265SDimitry Andric//===----------------------------------------------------------------------===// 107181ad6265SDimitry Andric// HFP: Comparisons 107281ad6265SDimitry Andric//===----------------------------------------------------------------------===// 107381ad6265SDimitry Andric 107481ad6265SDimitry Andric// Compare 107581ad6265SDimitry Andricdef : InstRW<[WLat6LSU, RegReadAdv, VecBF, LSU, NormalGr], 107681ad6265SDimitry Andric (instregex "C(E|D)$")>; 107781ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "C(E|D)R$")>; 107881ad6265SDimitry Andricdef : InstRW<[WLat10, VecDF2, GroupAlone], (instregex "CXR$")>; 107981ad6265SDimitry Andric 108081ad6265SDimitry Andric 108181ad6265SDimitry Andric// ------------------------ Decimal floating point -------------------------- // 108281ad6265SDimitry Andric 108381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 108481ad6265SDimitry Andric// DFP: Move instructions 108581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 108681ad6265SDimitry Andric 108781ad6265SDimitry Andric// Load and Test 108881ad6265SDimitry Andricdef : InstRW<[WLat8, WLat8, VecDF, NormalGr], (instregex "LTDTR$")>; 108981ad6265SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "LTXTR$")>; 109081ad6265SDimitry Andric 109181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 109281ad6265SDimitry Andric// DFP: Conversion instructions 109381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 109481ad6265SDimitry Andric 109581ad6265SDimitry Andric// Load rounded 109681ad6265SDimitry Andricdef : InstRW<[WLat15, VecDF, NormalGr], (instregex "LEDTR$")>; 109781ad6265SDimitry Andricdef : InstRW<[WLat15, VecDF2, NormalGr], (instregex "LDXTR$")>; 109881ad6265SDimitry Andric 109981ad6265SDimitry Andric// Load lengthened 110081ad6265SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "LDETR$")>; 110181ad6265SDimitry Andricdef : InstRW<[WLat10, VecDF4, GroupAlone], (instregex "LXDTR$")>; 110281ad6265SDimitry Andric 110381ad6265SDimitry Andric// Convert from fixed / logical 110481ad6265SDimitry Andricdef : InstRW<[WLat15, FXb, VecDF, Cracked], (instregex "CDFTR(A)?$")>; 110581ad6265SDimitry Andricdef : InstRW<[WLat20, FXb, VecDF, Cracked], (instregex "CDGTR(A)?$")>; 110681ad6265SDimitry Andricdef : InstRW<[WLat15, FXb, VecDF4, GroupAlone2], (instregex "CXFTR(A)?$")>; 110781ad6265SDimitry Andricdef : InstRW<[WLat20, FXb, VecDF4, GroupAlone2], (instregex "CXGTR(A)?$")>; 110881ad6265SDimitry Andricdef : InstRW<[WLat15, FXb, VecDF, Cracked], (instregex "CDLFTR$")>; 110981ad6265SDimitry Andricdef : InstRW<[WLat20, FXb, VecDF, Cracked], (instregex "CDLGTR$")>; 111081ad6265SDimitry Andricdef : InstRW<[WLat15, FXb, VecDF4, GroupAlone2], (instregex "CXLFTR$")>; 111181ad6265SDimitry Andricdef : InstRW<[WLat20, FXb, VecDF4, GroupAlone2], (instregex "CXLGTR$")>; 111281ad6265SDimitry Andric 111381ad6265SDimitry Andric// Convert to fixed / logical 111481ad6265SDimitry Andricdef : InstRW<[WLat20, WLat20, FXb, VecDF, Cracked], 111581ad6265SDimitry Andric (instregex "C(F|G)DTR(A)?$")>; 111681ad6265SDimitry Andricdef : InstRW<[WLat20, WLat20, FXb, VecDF2, Cracked], 111781ad6265SDimitry Andric (instregex "C(F|G)XTR(A)?$")>; 111881ad6265SDimitry Andricdef : InstRW<[WLat20, WLat20, FXb, VecDF, Cracked], (instregex "CL(F|G)DTR$")>; 111981ad6265SDimitry Andricdef : InstRW<[WLat20, WLat20, FXb, VecDF2, Cracked], (instregex "CL(F|G)XTR$")>; 112081ad6265SDimitry Andric 112181ad6265SDimitry Andric// Convert from / to signed / unsigned packed 112281ad6265SDimitry Andricdef : InstRW<[WLat9, FXb, VecDF, Cracked], (instregex "CD(S|U)TR$")>; 112381ad6265SDimitry Andricdef : InstRW<[WLat12, FXb2, VecDF4, GroupAlone2], (instregex "CX(S|U)TR$")>; 112481ad6265SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF, Cracked], (instregex "C(S|U)DTR$")>; 112581ad6265SDimitry Andricdef : InstRW<[WLat15, FXb2, VecDF4, GroupAlone2], (instregex "C(S|U)XTR$")>; 112681ad6265SDimitry Andric 112781ad6265SDimitry Andric// Convert from / to zoned 112881ad6265SDimitry Andricdef : InstRW<[WLat8LSU, LSU, VecDF, Cracked], (instregex "CDZT$")>; 112981ad6265SDimitry Andricdef : InstRW<[WLat16LSU, LSU2, VecDF4, GroupAlone3], (instregex "CXZT$")>; 113081ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecDF, Cracked], (instregex "CZDT$")>; 113181ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecDF2, GroupAlone], (instregex "CZXT$")>; 113281ad6265SDimitry Andric 113381ad6265SDimitry Andric// Convert from / to packed 113481ad6265SDimitry Andricdef : InstRW<[WLat8LSU, LSU, VecDF, Cracked], (instregex "CDPT$")>; 113581ad6265SDimitry Andricdef : InstRW<[WLat16LSU, LSU2, VecDF4, GroupAlone3], (instregex "CXPT$")>; 113681ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecDF, Cracked], (instregex "CPDT$")>; 113781ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecDF2, GroupAlone], (instregex "CPXT$")>; 113881ad6265SDimitry Andric 113981ad6265SDimitry Andric// Perform floating-point operation 114081ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "PFPO$")>; 114181ad6265SDimitry Andric 114281ad6265SDimitry Andric//===----------------------------------------------------------------------===// 114381ad6265SDimitry Andric// DFP: Unary arithmetic 114481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 114581ad6265SDimitry Andric 114681ad6265SDimitry Andric// Load FP integer 114781ad6265SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "FIDTR$")>; 114881ad6265SDimitry Andricdef : InstRW<[WLat10, VecDF4, GroupAlone], (instregex "FIXTR$")>; 114981ad6265SDimitry Andric 115081ad6265SDimitry Andric// Extract biased exponent 115181ad6265SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF, Cracked], (instregex "EEDTR$")>; 115281ad6265SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF, Cracked], (instregex "EEXTR$")>; 115381ad6265SDimitry Andric 115481ad6265SDimitry Andric// Extract significance 115581ad6265SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF, Cracked], (instregex "ESDTR$")>; 115681ad6265SDimitry Andricdef : InstRW<[WLat12, FXb, VecDF2, Cracked], (instregex "ESXTR$")>; 115781ad6265SDimitry Andric 115881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 115981ad6265SDimitry Andric// DFP: Binary arithmetic 116081ad6265SDimitry Andric//===----------------------------------------------------------------------===// 116181ad6265SDimitry Andric 116281ad6265SDimitry Andric// Addition 116381ad6265SDimitry Andricdef : InstRW<[WLat8, WLat8, VecDF, NormalGr], (instregex "ADTR(A)?$")>; 116481ad6265SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "AXTR(A)?$")>; 116581ad6265SDimitry Andric 116681ad6265SDimitry Andric// Subtraction 116781ad6265SDimitry Andricdef : InstRW<[WLat8, WLat8, VecDF, NormalGr], (instregex "SDTR(A)?$")>; 116881ad6265SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "SXTR(A)?$")>; 116981ad6265SDimitry Andric 117081ad6265SDimitry Andric// Multiply 117181ad6265SDimitry Andricdef : InstRW<[WLat20, VecDF, NormalGr], (instregex "MDTR(A)?$")>; 117281ad6265SDimitry Andricdef : InstRW<[WLat30, VecDF4, GroupAlone], (instregex "MXTR(A)?$")>; 117381ad6265SDimitry Andric 117481ad6265SDimitry Andric// Division 117581ad6265SDimitry Andricdef : InstRW<[WLat30, VecDF, NormalGr], (instregex "DDTR(A)?$")>; 117681ad6265SDimitry Andricdef : InstRW<[WLat30, VecDF4, GroupAlone], (instregex "DXTR(A)?$")>; 117781ad6265SDimitry Andric 117881ad6265SDimitry Andric// Quantize 117981ad6265SDimitry Andricdef : InstRW<[WLat8, WLat8, VecDF, NormalGr], (instregex "QADTR$")>; 118081ad6265SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF4, GroupAlone], (instregex "QAXTR$")>; 118181ad6265SDimitry Andric 118281ad6265SDimitry Andric// Reround 118381ad6265SDimitry Andricdef : InstRW<[WLat9, WLat9, FXb, VecDF, Cracked], (instregex "RRDTR$")>; 118481ad6265SDimitry Andricdef : InstRW<[WLat11, WLat11, FXb, VecDF4, GroupAlone2], (instregex "RRXTR$")>; 118581ad6265SDimitry Andric 118681ad6265SDimitry Andric// Shift significand left/right 118781ad6265SDimitry Andricdef : InstRW<[WLat11LSU, LSU, VecDF, GroupAlone], (instregex "S(L|R)DT$")>; 118881ad6265SDimitry Andricdef : InstRW<[WLat11LSU, LSU, VecDF4, GroupAlone], (instregex "S(L|R)XT$")>; 118981ad6265SDimitry Andric 119081ad6265SDimitry Andric// Insert biased exponent 119181ad6265SDimitry Andricdef : InstRW<[WLat9, FXb, VecDF, Cracked], (instregex "IEDTR$")>; 119281ad6265SDimitry Andricdef : InstRW<[WLat11, FXb, VecDF4, GroupAlone2], (instregex "IEXTR$")>; 119381ad6265SDimitry Andric 119481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 119581ad6265SDimitry Andric// DFP: Comparisons 119681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 119781ad6265SDimitry Andric 119881ad6265SDimitry Andric// Compare 119981ad6265SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "(K|C)DTR$")>; 120081ad6265SDimitry Andricdef : InstRW<[WLat9, VecDF2, GroupAlone], (instregex "(K|C)XTR$")>; 120181ad6265SDimitry Andric 120281ad6265SDimitry Andric// Compare biased exponent 120381ad6265SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "CEDTR$")>; 120481ad6265SDimitry Andricdef : InstRW<[WLat8, VecDF, NormalGr], (instregex "CEXTR$")>; 120581ad6265SDimitry Andric 120681ad6265SDimitry Andric// Test Data Class/Group 120781ad6265SDimitry Andricdef : InstRW<[WLat15, LSU, VecDF, NormalGr], (instregex "TD(C|G)(E|D)T$")>; 120881ad6265SDimitry Andricdef : InstRW<[WLat15, LSU, VecDF2, GroupAlone], (instregex "TD(C|G)XT$")>; 120981ad6265SDimitry Andric 121081ad6265SDimitry Andric 121181ad6265SDimitry Andric// --------------------------------- Vector --------------------------------- // 121281ad6265SDimitry Andric 121381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 121481ad6265SDimitry Andric// Vector: Move instructions 121581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 121681ad6265SDimitry Andric 121781ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "VLR(32|64)?$")>; 121881ad6265SDimitry Andricdef : InstRW<[WLat3, FXb, NormalGr], (instregex "VLGV(B|F|G|H)?$")>; 121981ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "VLVG(B|F|G|H)?$")>; 122081ad6265SDimitry Andricdef : InstRW<[WLat3, FXb, NormalGr], (instregex "VLVGP(32)?$")>; 122181ad6265SDimitry Andric 122281ad6265SDimitry Andric//===----------------------------------------------------------------------===// 122381ad6265SDimitry Andric// Vector: Immediate instructions 122481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 122581ad6265SDimitry Andric 122681ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VZERO$")>; 122781ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VONE$")>; 122881ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VGBM$")>; 122981ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VGM(B|F|G|H)?$")>; 123081ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VREPI(B|F|G|H)?$")>; 123181ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VLEI(B|F|G|H)$")>; 123281ad6265SDimitry Andric 123381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 123481ad6265SDimitry Andric// Vector: Loads 123581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 123681ad6265SDimitry Andric 123781ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VL(Align)?$")>; 123881ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VL(L|BB)$")>; 123981ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VL(32|64)$")>; 124081ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VLLEZ(B|F|G|H|LF)?$")>; 124181ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VLREP(B|F|G|H)?$")>; 124281ad6265SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, VecXsPm, LSU, NormalGr], 124381ad6265SDimitry Andric (instregex "VLE(B|F|G|H)$")>; 124481ad6265SDimitry Andricdef : InstRW<[WLat5LSU, RegReadAdv, FXb, LSU, VecXsPm, Cracked], 124581ad6265SDimitry Andric (instregex "VGE(F|G)$")>; 124681ad6265SDimitry Andricdef : InstRW<[WLat4LSU, WLat4LSU, LSU5, GroupAlone], 124781ad6265SDimitry Andric (instregex "VLM(Align)?$")>; 124881ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VLRL(R)?$")>; 124981ad6265SDimitry Andric 125081ad6265SDimitry Andric//===----------------------------------------------------------------------===// 125181ad6265SDimitry Andric// Vector: Stores 125281ad6265SDimitry Andric//===----------------------------------------------------------------------===// 125381ad6265SDimitry Andric 125481ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "VST(Align|L|32|64)?$")>; 125581ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "VSTE(F|G)$")>; 125681ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecXsPm, Cracked], (instregex "VSTE(B|H)$")>; 125781ad6265SDimitry Andricdef : InstRW<[WLat1, LSU2, FXb3, GroupAlone2], (instregex "VSTM(Align)?$")>; 125881ad6265SDimitry Andricdef : InstRW<[WLat1, FXb2, LSU, Cracked], (instregex "VSCE(F|G)$")>; 125981ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "VSTRL(R)?$")>; 126081ad6265SDimitry Andric 126181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 126281ad6265SDimitry Andric// Vector: Byte swaps 126381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 126481ad6265SDimitry Andric 126581ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VLBR(H|F|G|Q)?$")>; 126681ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VLER(H|F|G)?$")>; 126781ad6265SDimitry Andricdef : InstRW<[WLat2LSU, RegReadAdv, VecXsPm, LSU, NormalGr], 126881ad6265SDimitry Andric (instregex "VLEBR(H|F|G)$")>; 126981ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VLLEBRZ(H|F|G|E)?$")>; 127081ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "VLBRREP(H|F|G)?$")>; 127181ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "VSTBR(H|F|G|Q)?$")>; 127281ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "VSTER(H|F|G)?$")>; 127381ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, VecXsPm, Cracked], (instregex "VSTEBRH$")>; 127481ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, NormalGr], (instregex "VSTEBR(F|G)$")>; 127581ad6265SDimitry Andric 127681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 127781ad6265SDimitry Andric// Vector: Selects and permutes 127881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 127981ad6265SDimitry Andric 128081ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMRH(B|F|G|H)?$")>; 128181ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMRL(B|F|G|H)?$")>; 128281ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPERM$")>; 128381ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPDI$")>; 128481ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VBPERM$")>; 128581ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VREP(B|F|G|H)?$")>; 128681ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSEL$")>; 128781ad6265SDimitry Andric 128881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 128981ad6265SDimitry Andric// Vector: Widening and narrowing 129081ad6265SDimitry Andric//===----------------------------------------------------------------------===// 129181ad6265SDimitry Andric 129281ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPK(F|G|H)?$")>; 129381ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPKS(F|G|H)?$")>; 129481ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VPKS(F|G|H)S$")>; 129581ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPKLS(F|G|H)?$")>; 129681ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VPKLS(F|G|H)S$")>; 129781ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSEG(B|F|H)?$")>; 129881ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VUPH(B|F|H)?$")>; 129981ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VUPL(B|F)?$")>; 130081ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VUPLH(B|F|H|W)?$")>; 130181ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VUPLL(B|F|H)?$")>; 130281ad6265SDimitry Andric 130381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 130481ad6265SDimitry Andric// Vector: Integer arithmetic 130581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 130681ad6265SDimitry Andric 130781ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VA(B|F|G|H|Q|C|CQ)?$")>; 130881ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VACC(B|F|G|H|Q|C|CQ)?$")>; 130981ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VAVG(B|F|G|H)?$")>; 131081ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VAVGL(B|F|G|H)?$")>; 131181ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VN(C|O|N|X)?$")>; 131281ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VO(C)?$")>; 131381ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VCKSM$")>; 131481ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCLZ(B|F|G|H)?$")>; 131581ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCTZ(B|F|G|H)?$")>; 131681ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VX$")>; 131781ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VGFM?$")>; 131881ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VGFMA(B|F|G|H)?$")>; 131981ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VGFM(B|F|G|H)$")>; 132081ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VLC(B|F|G|H)?$")>; 132181ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VLP(B|F|G|H)?$")>; 132281ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMX(B|F|G|H)?$")>; 132381ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMXL(B|F|G|H)?$")>; 132481ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMN(B|F|G|H)?$")>; 132581ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VMNL(B|F|G|H)?$")>; 132681ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMAL(B|F)?$")>; 132781ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMALE(B|F|H)?$")>; 132881ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMALH(B|F|H|W)?$")>; 132981ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMALO(B|F|H)?$")>; 133081ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMAO(B|F|H)?$")>; 133181ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMAE(B|F|H)?$")>; 133281ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMAH(B|F|H)?$")>; 133381ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VME(B|F|H)?$")>; 133481ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMH(B|F|H)?$")>; 133581ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VML(B|F)?$")>; 133681ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMLE(B|F|H)?$")>; 133781ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMLH(B|F|H|W)?$")>; 133881ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMLO(B|F|H)?$")>; 133981ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VMO(B|F|H)?$")>; 134081ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VMSL(G)?$")>; 134181ad6265SDimitry Andric 134281ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VPOPCT(B|F|G|H)?$")>; 134381ad6265SDimitry Andric 134481ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VERLL(B|F|G|H)?$")>; 134581ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VERLLV(B|F|G|H)?$")>; 134681ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VERIM(B|F|G|H)?$")>; 134781ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESL(B|F|G|H)?$")>; 134881ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESLV(B|F|G|H)?$")>; 134981ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESRA(B|F|G|H)?$")>; 135081ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESRAV(B|F|G|H)?$")>; 135181ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESRL(B|F|G|H)?$")>; 135281ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VESRLV(B|F|G|H)?$")>; 135381ad6265SDimitry Andric 135481ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSL(DB)?$")>; 135581ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSLB$")>; 135681ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSR(A|L)$")>; 135781ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSR(A|L)B$")>; 135881ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSLD$")>; 135981ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSRD$")>; 136081ad6265SDimitry Andric 136181ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSB(I|IQ|CBI|CBIQ)?$")>; 136281ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VSCBI(B|F|G|H|Q)?$")>; 136381ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VS(F|G|H|Q)?$")>; 136481ad6265SDimitry Andric 136581ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VSUM(B|H)?$")>; 136681ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VSUMG(F|H)?$")>; 136781ad6265SDimitry Andricdef : InstRW<[WLat4, VecMul, NormalGr], (instregex "VSUMQ(F|G)?$")>; 136881ad6265SDimitry Andric 136981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 137081ad6265SDimitry Andric// Vector: Integer comparison 137181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 137281ad6265SDimitry Andric 137381ad6265SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "VEC(B|F|G|H)?$")>; 137481ad6265SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "VECL(B|F|G|H)?$")>; 137581ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCEQ(B|F|G|H)?$")>; 137681ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VCEQ(B|F|G|H)S$")>; 137781ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCH(B|F|G|H)?$")>; 137881ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VCH(B|F|G|H)S$")>; 137981ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCHL(B|F|G|H)?$")>; 138081ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VCHL(B|F|G|H)S$")>; 138181ad6265SDimitry Andricdef : InstRW<[WLat4, VecStr, NormalGr], (instregex "VTM$")>; 138281ad6265SDimitry Andric 138381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 138481ad6265SDimitry Andric// Vector: Floating-point arithmetic 138581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 138681ad6265SDimitry Andric 138781ad6265SDimitry Andric// Conversion and rounding 138881ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VCFP(S|L)$")>; 138981ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VCD(L)?G$")>; 139081ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VCD(L)?GB$")>; 139181ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "WCD(L)?GB$")>; 139281ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VCE(L)?FB$")>; 139381ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "WCE(L)?FB$")>; 139481ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VC(S|L)FP$")>; 139581ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VC(L)?GD$")>; 139681ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VC(L)?GDB$")>; 139781ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "WC(L)?GDB$")>; 139881ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VC(L)?FEB$")>; 139981ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "WC(L)?FEB$")>; 140081ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VL(DE|ED)$")>; 140181ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VL(DE|ED)B$")>; 140281ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "WL(DE|ED)B$")>; 140381ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VFL(L|R)$")>; 140481ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VFL(LS|RD)$")>; 140581ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "WFL(LS|RD)$")>; 140681ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "WFLLD$")>; 140781ad6265SDimitry Andricdef : InstRW<[WLat10, VecDF2, NormalGr], (instregex "WFLRX$")>; 140881ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VFI(DB)?$")>; 140981ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "WFIDB$")>; 141081ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VFISB$")>; 141181ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "WFISB$")>; 141281ad6265SDimitry Andricdef : InstRW<[WLat10, VecDF2, NormalGr], (instregex "WFIXB$")>; 141381ad6265SDimitry Andric 141481ad6265SDimitry Andric// Sign operations 141581ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VFPSO$")>; 141681ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "(V|W)FPSODB$")>; 141781ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "(V|W)FPSOSB$")>; 141881ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFPSOXB$")>; 141981ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "(V|W)FL(C|N|P)DB$")>; 142081ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "(V|W)FL(C|N|P)SB$")>; 142181ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFL(C|N|P)XB$")>; 142281ad6265SDimitry Andric 142381ad6265SDimitry Andric// Minimum / maximum 142481ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(MAX|MIN)$")>; 142581ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(MAX|MIN)DB$")>; 142681ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WF(MAX|MIN)DB$")>; 142781ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(MAX|MIN)SB$")>; 142881ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WF(MAX|MIN)SB$")>; 142981ad6265SDimitry Andricdef : InstRW<[WLat2, VecDFX, NormalGr], (instregex "WF(MAX|MIN)XB$")>; 143081ad6265SDimitry Andric 143181ad6265SDimitry Andric// Test data class 143281ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VFTCI$")>; 143381ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "(V|W)FTCIDB$")>; 143481ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "(V|W)FTCISB$")>; 143581ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecDFX, NormalGr], (instregex "WFTCIXB$")>; 143681ad6265SDimitry Andric 143781ad6265SDimitry Andric// Add / subtract 143881ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VF(A|S)$")>; 143981ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VF(A|S)DB$")>; 144081ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "WF(A|S)DB$")>; 144181ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VF(A|S)SB$")>; 144281ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "WF(A|S)SB$")>; 144381ad6265SDimitry Andricdef : InstRW<[WLat10, VecDF2, NormalGr], (instregex "WF(A|S)XB$")>; 144481ad6265SDimitry Andric 144581ad6265SDimitry Andric// Multiply / multiply-and-add/subtract 144681ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VFM(DB)?$")>; 144781ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "WFM(D|S)B$")>; 144881ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VFMSB$")>; 144981ad6265SDimitry Andricdef : InstRW<[WLat20, VecDF2, NormalGr], (instregex "WFMXB$")>; 145081ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VF(N)?M(A|S)$")>; 145181ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VF(N)?M(A|S)DB$")>; 145281ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "WF(N)?M(A|S)DB$")>; 145381ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "VF(N)?M(A|S)SB$")>; 145481ad6265SDimitry Andricdef : InstRW<[WLat6, VecBF, NormalGr], (instregex "WF(N)?M(A|S)SB$")>; 145581ad6265SDimitry Andricdef : InstRW<[WLat20, VecDF2, NormalGr], (instregex "WF(N)?M(A|S)XB$")>; 145681ad6265SDimitry Andric 145781ad6265SDimitry Andric// Divide / square root 145881ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "VFD$")>; 145981ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "(V|W)FDDB$")>; 146081ad6265SDimitry Andricdef : InstRW<[WLat20, VecFPd20, NormalGr], (instregex "WFDSB$")>; 146181ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "VFDSB$")>; 146281ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "WFDXB$")>; 146381ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "VFSQ$")>; 146481ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "(V|W)FSQDB$")>; 146581ad6265SDimitry Andricdef : InstRW<[WLat20, VecFPd20, NormalGr], (instregex "WFSQSB$")>; 146681ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "VFSQSB$")>; 146781ad6265SDimitry Andricdef : InstRW<[WLat30, VecFPd, NormalGr], (instregex "WFSQXB$")>; 146881ad6265SDimitry Andric 146981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 147081ad6265SDimitry Andric// Vector: Floating-point comparison 147181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 147281ad6265SDimitry Andric 147381ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(C|K)(E|H|HE)$")>; 147481ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(C|K)(E|H|HE)DB$")>; 147581ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFC(E|H|HE)DB$")>; 147681ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFK(E|H|HE)DB$")>; 147781ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VF(C|K)(E|H|HE)SB$")>; 147881ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFC(E|H|HE)SB$")>; 147981ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "WFK(E|H|HE)SB$")>; 148081ad6265SDimitry Andricdef : InstRW<[WLat2, VecDFX, NormalGr], (instregex "WFC(E|H|HE)XB$")>; 148181ad6265SDimitry Andricdef : InstRW<[WLat2, VecDFX, NormalGr], (instregex "WFK(E|H|HE)XB$")>; 148281ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VFC(E|H|HE)DBS$")>; 148381ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "VFK(E|H|HE)DBS$")>; 148481ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], 148581ad6265SDimitry Andric (instregex "WF(C|K)(E|H|HE)DBS$")>; 148681ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], 148781ad6265SDimitry Andric (instregex "VF(C|K)(E|H|HE)SBS$")>; 148881ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "WFC(E|H|HE)SBS$")>; 148981ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecXsPm, NormalGr], (instregex "WFK(E|H|HE)SBS$")>; 149081ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecDFX, NormalGr], (instregex "WFC(E|H|HE)XBS$")>; 149181ad6265SDimitry Andricdef : InstRW<[WLat3, WLat3, VecDFX, NormalGr], (instregex "WFK(E|H|HE)XBS$")>; 149281ad6265SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "WF(C|K)$")>; 149381ad6265SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "WF(C|K)DB$")>; 149481ad6265SDimitry Andricdef : InstRW<[WLat3, VecXsPm, NormalGr], (instregex "WF(C|K)SB$")>; 149581ad6265SDimitry Andricdef : InstRW<[WLat3, VecDFX, NormalGr], (instregex "WF(C|K)XB$")>; 149681ad6265SDimitry Andric 149781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 149881ad6265SDimitry Andric// Vector: Floating-point insertion and extraction 149981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 150081ad6265SDimitry Andric 150181ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LEFR$")>; 150281ad6265SDimitry Andricdef : InstRW<[WLat3, FXb, NormalGr], (instregex "LFER$")>; 150381ad6265SDimitry Andric 150481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 150581ad6265SDimitry Andric// Vector: String instructions 150681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 150781ad6265SDimitry Andric 150881ad6265SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFAE(B)?$")>; 150981ad6265SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFAE(F|H)$")>; 151081ad6265SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VFAE(B|F|H)S$")>; 151181ad6265SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFAEZ(B|F|H)$")>; 151281ad6265SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VFAEZ(B|F|H)S$")>; 151381ad6265SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFEE(B|F|H|ZB|ZF|ZH)?$")>; 151481ad6265SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], 151581ad6265SDimitry Andric (instregex "VFEE(B|F|H|ZB|ZF|ZH)S$")>; 151681ad6265SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VFENE(B|F|H|ZB|ZF|ZH)?$")>; 151781ad6265SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], 151881ad6265SDimitry Andric (instregex "VFENE(B|F|H|ZB|ZF|ZH)S$")>; 151981ad6265SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VISTR(B|F|H)?$")>; 152081ad6265SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VISTR(B|F|H)S$")>; 152181ad6265SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VSTRC(B|F|H)?$")>; 152281ad6265SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VSTRC(B|F|H)S$")>; 152381ad6265SDimitry Andricdef : InstRW<[WLat3, VecStr, NormalGr], (instregex "VSTRCZ(B|F|H)$")>; 152481ad6265SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VSTRCZ(B|F|H)S$")>; 152581ad6265SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VSTRS(B|F|H)?$")>; 152681ad6265SDimitry Andricdef : InstRW<[WLat4, WLat4, VecStr, NormalGr], (instregex "VSTRSZ(B|F|H)$")>; 152781ad6265SDimitry Andric 152881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 152981ad6265SDimitry Andric// NNP assist instructions 153081ad6265SDimitry Andric//===----------------------------------------------------------------------===// 153181ad6265SDimitry Andric 153281ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCFN$")>; 153381ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VCLFN(L|H)$")>; 153481ad6265SDimitry Andricdef : InstRW<[WLat2, VecXsPm, NormalGr], (instregex "VC(R)?NF$")>; 153581ad6265SDimitry Andric 153681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 153781ad6265SDimitry Andric// Vector: Packed-decimal instructions 153881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 153981ad6265SDimitry Andric 154081ad6265SDimitry Andricdef : InstRW<[WLat2, VecDFX, NormalGr], (instregex "VLIP$")>; 154181ad6265SDimitry Andricdef : InstRW<[WLat6, VecDFX, LSU, GroupAlone2], (instregex "VPKZ$")>; 154281ad6265SDimitry Andricdef : InstRW<[WLat1, VecDFX, FXb, LSU2, GroupAlone2], (instregex "VUPKZ$")>; 154381ad6265SDimitry Andricdef : InstRW<[WLat20, WLat20, VecDF2, FXb, GroupAlone], 154481ad6265SDimitry Andric (instregex "VCVB(G)?(Opt)?$")>; 154581ad6265SDimitry Andricdef : InstRW<[WLat15, WLat15, VecDF2, FXb, GroupAlone], 154681ad6265SDimitry Andric (instregex "VCVD(G)?$")>; 154781ad6265SDimitry Andricdef : InstRW<[WLat4, WLat4, VecDFX, NormalGr], (instregex "V(A|S)P$")>; 154881ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, VecDF2, GroupAlone], (instregex "VM(S)?P$")>; 154981ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, VecDF2, GroupAlone], (instregex "V(D|R)P$")>; 155081ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, VecDF2, GroupAlone], (instregex "VSDP$")>; 155181ad6265SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF2, NormalGr], (instregex "VSRP$")>; 155281ad6265SDimitry Andricdef : InstRW<[WLat4, WLat4, VecDFX, NormalGr], (instregex "VPSOP$")>; 155381ad6265SDimitry Andricdef : InstRW<[WLat2, VecDFX, NormalGr], (instregex "V(T|C)P$")>; 155481ad6265SDimitry Andric 155581ad6265SDimitry Andricdef : InstRW<[WLat30, VecDF2, NormalGr], (instregex "VSCH(S|D|X)?P$")>; 155681ad6265SDimitry Andricdef : InstRW<[WLat30, VecDF2, NormalGr], (instregex "VSCSHP$")>; 155781ad6265SDimitry Andricdef : InstRW<[WLat30, VecDF2, NormalGr], (instregex "VCSPH")>; 155881ad6265SDimitry Andricdef : InstRW<[WLat2, WLat2, VecXsPm, NormalGr], (instregex "VCLZDP")>; 155981ad6265SDimitry Andricdef : InstRW<[WLat10, WLat10, VecDF2, NormalGr], (instregex "VSRPR")>; 156081ad6265SDimitry Andricdef : InstRW<[WLat2, WLat2, VecDFX, NormalGr], (instregex "VPKZR")>; 156181ad6265SDimitry Andricdef : InstRW<[WLat2, WLat2, VecDFX, NormalGr], (instregex "VUPKZH")>; 156281ad6265SDimitry Andricdef : InstRW<[WLat2, WLat2, VecDFX, NormalGr], (instregex "VUPKZL")>; 156381ad6265SDimitry Andric 156481ad6265SDimitry Andric// -------------------------------- System ---------------------------------- // 156581ad6265SDimitry Andric 156681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 156781ad6265SDimitry Andric// System: Program-Status Word Instructions 156881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 156981ad6265SDimitry Andric 157081ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "EPSW$")>; 157181ad6265SDimitry Andricdef : InstRW<[WLat20, GroupAlone3], (instregex "LPSW(E)?(Y)?$")>; 157281ad6265SDimitry Andricdef : InstRW<[WLat3, FXa, GroupAlone], (instregex "IPK$")>; 157381ad6265SDimitry Andricdef : InstRW<[WLat1, LSU, EndGroup], (instregex "SPKA$")>; 157481ad6265SDimitry Andricdef : InstRW<[WLat1, LSU, EndGroup], (instregex "SSM$")>; 157581ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, LSU, GroupAlone], (instregex "ST(N|O)SM$")>; 157681ad6265SDimitry Andricdef : InstRW<[WLat3, FXa, NormalGr], (instregex "IAC$")>; 157781ad6265SDimitry Andricdef : InstRW<[WLat1, LSU, EndGroup], (instregex "SAC(F)?$")>; 157881ad6265SDimitry Andric 157981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 158081ad6265SDimitry Andric// System: Control Register Instructions 158181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 158281ad6265SDimitry Andric 158381ad6265SDimitry Andricdef : InstRW<[WLat4LSU, WLat4LSU, LSU2, GroupAlone], (instregex "LCTL(G)?$")>; 158481ad6265SDimitry Andricdef : InstRW<[WLat1, LSU5, FXb, GroupAlone2], (instregex "STCT(L|G)$")>; 158581ad6265SDimitry Andricdef : InstRW<[LSULatency, LSU, NormalGr], (instregex "E(P|S)A(I)?R$")>; 158681ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SSA(I)?R$")>; 158781ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "ESEA$")>; 158881ad6265SDimitry Andric 158981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 159081ad6265SDimitry Andric// System: Prefix-Register Instructions 159181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 159281ad6265SDimitry Andric 159381ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "S(T)?PX$")>; 159481ad6265SDimitry Andric 159581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 159681ad6265SDimitry Andric// System: Breaking-Event-Address-Register Instructions 159781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 159881ad6265SDimitry Andric 159981ad6265SDimitry Andricdef : InstRW<[WLat3LSU, LSU2, GroupAlone], (instregex "LBEAR")>; 160081ad6265SDimitry Andricdef : InstRW<[WLat1, LSU2, FXb, GroupAlone], (instregex "STBEAR")>; 160181ad6265SDimitry Andric 160281ad6265SDimitry Andric//===----------------------------------------------------------------------===// 160381ad6265SDimitry Andric// System: Storage-Key and Real Memory Instructions 160481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 160581ad6265SDimitry Andric 160681ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "ISKE$")>; 160781ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "IVSK$")>; 160881ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SSKE(Opt)?$")>; 160981ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "RRB(E|M)$")>; 161081ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "IRBM$")>; 161181ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PFMF$")>; 161281ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "TB$")>; 161381ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PGIN$")>; 161481ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PGOUT$")>; 161581ad6265SDimitry Andric 161681ad6265SDimitry Andric//===----------------------------------------------------------------------===// 161781ad6265SDimitry Andric// System: Dynamic-Address-Translation Instructions 161881ad6265SDimitry Andric//===----------------------------------------------------------------------===// 161981ad6265SDimitry Andric 162081ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "IPTE(Opt)?(Opt)?$")>; 162181ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "IDTE(Opt)?$")>; 162281ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "RDP(Opt)?$")>; 162381ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "CRDTE(Opt)?$")>; 162481ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PTLB$")>; 162581ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "CSP(G)?$")>; 162681ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, WLat30, MCD], (instregex "LPTEA$")>; 162781ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "LRA(Y|G)?$")>; 162881ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STRAG$")>; 162981ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "LURA(G)?$")>; 163081ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STUR(A|G)$")>; 163181ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TPROT$")>; 163281ad6265SDimitry Andric 163381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 163481ad6265SDimitry Andric// System: Memory-move Instructions 163581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 163681ad6265SDimitry Andric 163781ad6265SDimitry Andricdef : InstRW<[WLat4LSU, FXa2, FXb, LSU5, GroupAlone2], (instregex "MVC(K|P|S)$")>; 163881ad6265SDimitry Andricdef : InstRW<[WLat1, FXa, LSU5, GroupAlone2], (instregex "MVC(S|D)K$")>; 163981ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "MVCOS$")>; 164081ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "MVPG$")>; 164181ad6265SDimitry Andric 164281ad6265SDimitry Andric//===----------------------------------------------------------------------===// 164381ad6265SDimitry Andric// System: Address-Space Instructions 164481ad6265SDimitry Andric//===----------------------------------------------------------------------===// 164581ad6265SDimitry Andric 164681ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "LASP$")>; 164781ad6265SDimitry Andricdef : InstRW<[WLat1, LSU, GroupAlone], (instregex "PALB$")>; 164881ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PC$")>; 164981ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PR$")>; 165081ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PT(I)?$")>; 165181ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "RP$")>; 165281ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "BS(G|A)$")>; 165381ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TAR$")>; 165481ad6265SDimitry Andric 165581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 165681ad6265SDimitry Andric// System: Linkage-Stack Instructions 165781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 165881ad6265SDimitry Andric 165981ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "BAKR$")>; 166081ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "EREG(G)?$")>; 166181ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "(E|M)STA$")>; 166281ad6265SDimitry Andric 166381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 166481ad6265SDimitry Andric// System: Time-Related Instructions 166581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 166681ad6265SDimitry Andric 166781ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PTFF$")>; 166881ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SCK(PF|C)?$")>; 166981ad6265SDimitry Andricdef : InstRW<[WLat1, LSU2, GroupAlone], (instregex "SPT$")>; 167081ad6265SDimitry Andricdef : InstRW<[WLat15, LSU3, FXa2, FXb, GroupAlone2], (instregex "STCK(F)?$")>; 167181ad6265SDimitry Andricdef : InstRW<[WLat20, LSU4, FXa2, FXb2, GroupAlone3], (instregex "STCKE$")>; 167281ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STCKC$")>; 167381ad6265SDimitry Andricdef : InstRW<[WLat1, LSU2, FXb, Cracked], (instregex "STPT$")>; 167481ad6265SDimitry Andric 167581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 167681ad6265SDimitry Andric// System: CPU-Related Instructions 167781ad6265SDimitry Andric//===----------------------------------------------------------------------===// 167881ad6265SDimitry Andric 167981ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STAP$")>; 168081ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STIDP$")>; 168181ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "STSI$")>; 168281ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "STFL(E)?$")>; 168381ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "ECAG$")>; 168481ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "ECTG$")>; 168581ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PTF$")>; 168681ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "PCKMO$")>; 168781ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "QPACI$")>; 168881ad6265SDimitry Andric 168981ad6265SDimitry Andric//===----------------------------------------------------------------------===// 169081ad6265SDimitry Andric// System: Miscellaneous Instructions 169181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 169281ad6265SDimitry Andric 169381ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SVC$")>; 169481ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, GroupAlone], (instregex "MC$")>; 169581ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "DIAG$")>; 169681ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "TRAC(E|G)$")>; 169781ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TRAP(2|4)$")>; 169881ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SIG(P|A)$")>; 169981ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SIE$")>; 170081ad6265SDimitry Andric 170181ad6265SDimitry Andric//===----------------------------------------------------------------------===// 170281ad6265SDimitry Andric// System: CPU-Measurement Facility Instructions 170381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 170481ad6265SDimitry Andric 170581ad6265SDimitry Andricdef : InstRW<[WLat1, FXb, NormalGr], (instregex "LPP$")>; 170681ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "ECPGA$")>; 170781ad6265SDimitry Andricdef : InstRW<[WLat30, WLat30, MCD], (instregex "E(C|P)CTR$")>; 170881ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "LCCTL$")>; 170981ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "L(P|S)CTL$")>; 171081ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "Q(S|CTR)I$")>; 171181ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "S(C|P)CTR$")>; 171281ad6265SDimitry Andric 171381ad6265SDimitry Andric//===----------------------------------------------------------------------===// 171481ad6265SDimitry Andric// System: I/O Instructions 171581ad6265SDimitry Andric//===----------------------------------------------------------------------===// 171681ad6265SDimitry Andric 171781ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "(C|H|R|X)SCH$")>; 171881ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "(M|S|ST|T)SCH$")>; 171981ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "RCHP$")>; 172081ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SCHM$")>; 172181ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "STC(PS|RW)$")>; 172281ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "TPI$")>; 172381ad6265SDimitry Andricdef : InstRW<[WLat30, MCD], (instregex "SAL$")>; 172481ad6265SDimitry Andric 172581ad6265SDimitry Andric} 172681ad6265SDimitry Andric 1727