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