xref: /llvm-project/llvm/lib/Target/LoongArch/LoongArchInstrFormats.td (revision 8234c612eda1cdff702f5ede1d7db7baf3bf0e47)
133388ae8SLu Weining//===- LoongArchInstrFormats.td - LoongArch Instr. Formats -*- tablegen -*-===//
233388ae8SLu Weining//
333388ae8SLu Weining// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
433388ae8SLu Weining// See https://llvm.org/LICENSE.txt for license information.
533388ae8SLu Weining// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
633388ae8SLu Weining//
733388ae8SLu Weining//===----------------------------------------------------------------------===//
833388ae8SLu Weining
933388ae8SLu Weining//===----------------------------------------------------------------------===//
1033388ae8SLu Weining//  Describe LoongArch instructions format
1133388ae8SLu Weining//
1233388ae8SLu Weining//  opcode       - operation code.
133a49ad71SWeining Lu//  rd           - destination register operand.
143a49ad71SWeining Lu//  r{j/k}       - source register operand.
153a49ad71SWeining Lu//  immN         - immediate data operand.
1633388ae8SLu Weining//
1733388ae8SLu Weining//===----------------------------------------------------------------------===//
1833388ae8SLu Weining
19ca3c746bSWeining Luclass LAInst<dag outs, dag ins, string opcstr, string opnstr,
20ca3c746bSWeining Lu             list<dag> pattern = []>
2133388ae8SLu Weining    : Instruction {
2233388ae8SLu Weining  field bits<32> Inst;
2333388ae8SLu Weining  // SoftFail is a field the disassembler can use to provide a way for
2433388ae8SLu Weining  // instructions to not match without killing the whole decode process. It is
2533388ae8SLu Weining  // mainly used for ARM, but Tablegen expects this field to exist or it fails
2633388ae8SLu Weining  // to build the decode table.
2733388ae8SLu Weining  field bits<32> SoftFail = 0;
2833388ae8SLu Weining
2933388ae8SLu Weining  let Namespace = "LoongArch";
3033388ae8SLu Weining  let Size = 4;
3133388ae8SLu Weining  let OutOperandList = outs;
3233388ae8SLu Weining  let InOperandList = ins;
33ca3c746bSWeining Lu  let AsmString = opcstr # "\t" # opnstr;
3433388ae8SLu Weining  let Pattern = pattern;
35*8234c612SWÁNG Xuěruì
36*8234c612SWÁNG Xuěruì  // Target-specific instruction info and defaults
37*8234c612SWÁNG Xuěruì
38*8234c612SWÁNG Xuěruì  bit IsSubjectToAMORdConstraint = 0;
39*8234c612SWÁNG Xuěruì  let TSFlags{0} = IsSubjectToAMORdConstraint;
40*8234c612SWÁNG Xuěruì
41*8234c612SWÁNG Xuěruì  bit IsAMCAS = 0;
42*8234c612SWÁNG Xuěruì  let TSFlags{1} = IsAMCAS;
4333388ae8SLu Weining}
4433388ae8SLu Weining
4533388ae8SLu Weining// Pseudo instructions
46ca3c746bSWeining Luclass Pseudo<dag outs, dag ins, list<dag> pattern = [], string opcstr = "",
47ca3c746bSWeining Lu             string opnstr = "">
48ca3c746bSWeining Lu    : LAInst<outs, ins, opcstr, opnstr, pattern> {
4933388ae8SLu Weining  let isPseudo = 1;
50a1c67439Swanglei  let isCodeGenOnly = 1;
5133388ae8SLu Weining}
5233388ae8SLu Weining
53294bee10SWANG Xueruiclass deriveInsnMnemonic<string name> {
54294bee10SWANG Xuerui  string ret = !tolower(!subst("@", "_", !subst("_", ".", !subst("__", "@", name))));
55294bee10SWANG Xuerui}
56294bee10SWANG Xuerui
5733388ae8SLu Weining// 2R-type
5833388ae8SLu Weining// <opcode | rj | rd>
5946aec7bcSwangleiclass Fmt2R<bits<32> op, dag outs, dag ins, string opnstr,
605b32102cSWeining Lu            list<dag> pattern = []>
61294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
6233388ae8SLu Weining  bits<5> rj;
6333388ae8SLu Weining  bits<5> rd;
6433388ae8SLu Weining
6546aec7bcSwanglei  let Inst{31-0} = op;
6633388ae8SLu Weining  let Inst{9-5} = rj;
6733388ae8SLu Weining  let Inst{4-0} = rd;
6833388ae8SLu Weining}
6933388ae8SLu Weining
7033388ae8SLu Weining// 3R-type
7133388ae8SLu Weining// <opcode | rk | rj | rd>
7246aec7bcSwangleiclass Fmt3R<bits<32> op, dag outs, dag ins, string opnstr,
735b32102cSWeining Lu            list<dag> pattern = []>
74294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
7533388ae8SLu Weining  bits<5> rk;
7633388ae8SLu Weining  bits<5> rj;
7733388ae8SLu Weining  bits<5> rd;
7833388ae8SLu Weining
7946aec7bcSwanglei  let Inst{31-0} = op;
8033388ae8SLu Weining  let Inst{14-10} = rk;
8133388ae8SLu Weining  let Inst{9-5} = rj;
8233388ae8SLu Weining  let Inst{4-0} = rd;
8333388ae8SLu Weining}
8433388ae8SLu Weining
8533388ae8SLu Weining// 3RI2-type
8633388ae8SLu Weining// <opcode | I2 | rk | rj | rd>
8746aec7bcSwangleiclass Fmt3RI2<bits<32> op, dag outs, dag ins, string opnstr,
885b32102cSWeining Lu              list<dag> pattern = []>
89294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
9033388ae8SLu Weining  bits<2> imm2;
9133388ae8SLu Weining  bits<5> rk;
9233388ae8SLu Weining  bits<5> rj;
9333388ae8SLu Weining  bits<5> rd;
9433388ae8SLu Weining
9546aec7bcSwanglei  let Inst{31-0} = op;
9633388ae8SLu Weining  let Inst{16-15} = imm2;
9733388ae8SLu Weining  let Inst{14-10} = rk;
9833388ae8SLu Weining  let Inst{9-5} = rj;
9933388ae8SLu Weining  let Inst{4-0} = rd;
10033388ae8SLu Weining}
10133388ae8SLu Weining
10233388ae8SLu Weining// 3RI3-type
10333388ae8SLu Weining// <opcode | I3 | rk | rj | rd>
10446aec7bcSwangleiclass Fmt3RI3<bits<32> op, dag outs, dag ins, string opnstr,
1055b32102cSWeining Lu              list<dag> pattern = []>
106294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
10733388ae8SLu Weining  bits<3> imm3;
10833388ae8SLu Weining  bits<5> rk;
10933388ae8SLu Weining  bits<5> rj;
11033388ae8SLu Weining  bits<5> rd;
11133388ae8SLu Weining
11246aec7bcSwanglei  let Inst{31-0} = op;
11333388ae8SLu Weining  let Inst{17-15} = imm3;
11433388ae8SLu Weining  let Inst{14-10} = rk;
11533388ae8SLu Weining  let Inst{9-5} = rj;
11633388ae8SLu Weining  let Inst{4-0} = rd;
11733388ae8SLu Weining}
11833388ae8SLu Weining
11933388ae8SLu Weining// 2RI5-type
12033388ae8SLu Weining// <opcode | I5 | rj | rd>
12146aec7bcSwangleiclass Fmt2RI5<bits<32> op, dag outs, dag ins, string opnstr,
1225b32102cSWeining Lu              list<dag> pattern = []>
123294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
12433388ae8SLu Weining  bits<5> imm5;
12533388ae8SLu Weining  bits<5> rj;
12633388ae8SLu Weining  bits<5> rd;
12733388ae8SLu Weining
12846aec7bcSwanglei  let Inst{31-0} = op;
12933388ae8SLu Weining  let Inst{14-10} = imm5;
13033388ae8SLu Weining  let Inst{9-5} = rj;
13133388ae8SLu Weining  let Inst{4-0} = rd;
13233388ae8SLu Weining}
13333388ae8SLu Weining
13433388ae8SLu Weining// 2RI6-type
13533388ae8SLu Weining// <opcode | I6 | rj | rd>
13646aec7bcSwangleiclass Fmt2RI6<bits<32> op, dag outs, dag ins, string opnstr,
1375b32102cSWeining Lu              list<dag> pattern = []>
138294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
13933388ae8SLu Weining  bits<6> imm6;
14033388ae8SLu Weining  bits<5> rj;
14133388ae8SLu Weining  bits<5> rd;
14233388ae8SLu Weining
14346aec7bcSwanglei  let Inst{31-0} = op;
14433388ae8SLu Weining  let Inst{15-10} = imm6;
14533388ae8SLu Weining  let Inst{9-5} = rj;
14633388ae8SLu Weining  let Inst{4-0} = rd;
14733388ae8SLu Weining}
14833388ae8SLu Weining
14933388ae8SLu Weining// 2RI8-type
15033388ae8SLu Weining// <opcode | I8 | rj | rd>
15146aec7bcSwangleiclass Fmt2RI8<bits<32> op, dag outs, dag ins, string opnstr,
1525b32102cSWeining Lu              list<dag> pattern = []>
153294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
15433388ae8SLu Weining  bits<8> imm8;
15533388ae8SLu Weining  bits<5> rj;
15633388ae8SLu Weining  bits<5> rd;
15733388ae8SLu Weining
15846aec7bcSwanglei  let Inst{31-0} = op;
15933388ae8SLu Weining  let Inst{17-10} = imm8;
16033388ae8SLu Weining  let Inst{9-5} = rj;
16133388ae8SLu Weining  let Inst{4-0} = rd;
16233388ae8SLu Weining}
16333388ae8SLu Weining
16433388ae8SLu Weining// 2RI12-type
16533388ae8SLu Weining// <opcode | I12 | rj | rd>
16646aec7bcSwangleiclass Fmt2RI12<bits<32> op, dag outs, dag ins, string opnstr,
1675b32102cSWeining Lu               list<dag> pattern = []>
168294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
16933388ae8SLu Weining  bits<12> imm12;
17033388ae8SLu Weining  bits<5> rj;
17133388ae8SLu Weining  bits<5> rd;
17233388ae8SLu Weining
17346aec7bcSwanglei  let Inst{31-0} = op;
17433388ae8SLu Weining  let Inst{21-10} = imm12;
17533388ae8SLu Weining  let Inst{9-5} = rj;
17633388ae8SLu Weining  let Inst{4-0} = rd;
17733388ae8SLu Weining}
17833388ae8SLu Weining
17933388ae8SLu Weining// 2RI14-type
18033388ae8SLu Weining// <opcode | I14 | rj | rd>
18146aec7bcSwangleiclass Fmt2RI14<bits<32> op, dag outs, dag ins, string opnstr,
1825b32102cSWeining Lu               list<dag> pattern = []>
183294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
18433388ae8SLu Weining  bits<14> imm14;
18533388ae8SLu Weining  bits<5> rj;
18633388ae8SLu Weining  bits<5> rd;
18733388ae8SLu Weining
18846aec7bcSwanglei  let Inst{31-0} = op;
18933388ae8SLu Weining  let Inst{23-10} = imm14;
19033388ae8SLu Weining  let Inst{9-5} = rj;
19133388ae8SLu Weining  let Inst{4-0} = rd;
19233388ae8SLu Weining}
19333388ae8SLu Weining
19433388ae8SLu Weining// 2RI16-type
19533388ae8SLu Weining// <opcode | I16 | rj | rd>
19646aec7bcSwangleiclass Fmt2RI16<bits<32> op, dag outs, dag ins, string opnstr,
1975b32102cSWeining Lu               list<dag> pattern = []>
198294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
19933388ae8SLu Weining  bits<16> imm16;
20033388ae8SLu Weining  bits<5> rj;
20133388ae8SLu Weining  bits<5> rd;
20233388ae8SLu Weining
20346aec7bcSwanglei  let Inst{31-0} = op;
20433388ae8SLu Weining  let Inst{25-10} = imm16;
20533388ae8SLu Weining  let Inst{9-5} = rj;
20633388ae8SLu Weining  let Inst{4-0} = rd;
20733388ae8SLu Weining}
20833388ae8SLu Weining
20933388ae8SLu Weining// 1RI20-type
21033388ae8SLu Weining// <opcode | I20 | rd>
21146aec7bcSwangleiclass Fmt1RI20<bits<32> op, dag outs, dag ins, string opnstr,
2125b32102cSWeining Lu               list<dag> pattern = []>
213294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
21433388ae8SLu Weining  bits<20> imm20;
21533388ae8SLu Weining  bits<5> rd;
21633388ae8SLu Weining
21746aec7bcSwanglei  let Inst{31-0} = op;
21833388ae8SLu Weining  let Inst{24-5} = imm20;
21933388ae8SLu Weining  let Inst{4-0} = rd;
22033388ae8SLu Weining}
22133388ae8SLu Weining
22233388ae8SLu Weining// 1RI21-type
22333388ae8SLu Weining// <opcode | I21[15:0] | rj | I21[20:16]>
22446aec7bcSwangleiclass Fmt1RI21<bits<32> op, dag outs, dag ins, string opnstr,
2255b32102cSWeining Lu               list<dag> pattern = []>
226294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
22733388ae8SLu Weining  bits<21> imm21;
22833388ae8SLu Weining  bits<5> rj;
22933388ae8SLu Weining
23046aec7bcSwanglei  let Inst{31-0} = op;
23133388ae8SLu Weining  let Inst{25-10} = imm21{15-0};
23233388ae8SLu Weining  let Inst{9-5} = rj;
23333388ae8SLu Weining  let Inst{4-0} = imm21{20-16};
23433388ae8SLu Weining}
23533388ae8SLu Weining
23633388ae8SLu Weining// I15-type
23733388ae8SLu Weining// <opcode | I15>
23846aec7bcSwangleiclass FmtI15<bits<32> op, dag outs, dag ins, string opnstr,
2395b32102cSWeining Lu             list<dag> pattern = []>
240294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
24133388ae8SLu Weining  bits<15> imm15;
24233388ae8SLu Weining
24346aec7bcSwanglei  let Inst{31-0} = op;
24433388ae8SLu Weining  let Inst{14-0} = imm15;
24533388ae8SLu Weining}
24633388ae8SLu Weining
24733388ae8SLu Weining// I26-type
24833388ae8SLu Weining// <opcode | I26[15:0] | I26[25:16]>
24946aec7bcSwangleiclass FmtI26<bits<32> op, dag outs, dag ins, string opnstr,
2505b32102cSWeining Lu             list<dag> pattern = []>
251294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
25233388ae8SLu Weining  bits<26> imm26;
25333388ae8SLu Weining
25446aec7bcSwanglei  let Inst{31-0} = op;
25533388ae8SLu Weining  let Inst{25-10} = imm26{15-0};
25633388ae8SLu Weining  let Inst{9-0} = imm26{25-16};
25733388ae8SLu Weining}
25833388ae8SLu Weining
25933388ae8SLu Weining// FmtBSTR_W
26046aec7bcSwanglei// <opcode | msbw | lsbw | rj | rd>
26146aec7bcSwangleiclass FmtBSTR_W<bits<32> op, dag outs, dag ins, string opnstr,
2625b32102cSWeining Lu                list<dag> pattern = []>
263294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
26479b0fa08SWeining Lu  bits<5> msbw;
26579b0fa08SWeining Lu  bits<5> lsbw;
26633388ae8SLu Weining  bits<5> rj;
26733388ae8SLu Weining  bits<5> rd;
26833388ae8SLu Weining
26946aec7bcSwanglei  let Inst{31-0} = op;
27079b0fa08SWeining Lu  let Inst{20-16} = msbw;
27179b0fa08SWeining Lu  let Inst{14-10} = lsbw;
27233388ae8SLu Weining  let Inst{9-5} = rj;
27333388ae8SLu Weining  let Inst{4-0} = rd;
27433388ae8SLu Weining}
27533388ae8SLu Weining
27633388ae8SLu Weining// FmtBSTR_D
27779b0fa08SWeining Lu// <opcode | msbd | lsbd | rj | rd>
27846aec7bcSwangleiclass FmtBSTR_D<bits<32> op, dag outs, dag ins, string opnstr,
2795b32102cSWeining Lu                list<dag> pattern = []>
280294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
28179b0fa08SWeining Lu  bits<6> msbd;
28279b0fa08SWeining Lu  bits<6> lsbd;
28333388ae8SLu Weining  bits<5> rj;
28433388ae8SLu Weining  bits<5> rd;
28533388ae8SLu Weining
28646aec7bcSwanglei  let Inst{31-0} = op;
28779b0fa08SWeining Lu  let Inst{21-16} = msbd;
28879b0fa08SWeining Lu  let Inst{15-10} = lsbd;
28933388ae8SLu Weining  let Inst{9-5} = rj;
29033388ae8SLu Weining  let Inst{4-0} = rd;
29133388ae8SLu Weining}
29233388ae8SLu Weining
29333388ae8SLu Weining// FmtASRT
29446aec7bcSwanglei// <opcode | rk | rj>
29546aec7bcSwangleiclass FmtASRT<bits<32> op, dag outs, dag ins, string opnstr,
2965b32102cSWeining Lu              list<dag> pattern = []>
297294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
29833388ae8SLu Weining  bits<5> rk;
29933388ae8SLu Weining  bits<5> rj;
30033388ae8SLu Weining
30146aec7bcSwanglei  let Inst{31-0} = op;
30233388ae8SLu Weining  let Inst{14-10} = rk;
30333388ae8SLu Weining  let Inst{9-5} = rj;
30433388ae8SLu Weining}
30533388ae8SLu Weining
30633388ae8SLu Weining// FmtPRELD
30733388ae8SLu Weining// < 0b0010101011 | I12 | rj | I5>
308294bee10SWANG Xueruiclass FmtPRELD<dag outs, dag ins, string opnstr, list<dag> pattern = []>
309294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
31033388ae8SLu Weining  bits<12> imm12;
31133388ae8SLu Weining  bits<5> rj;
31233388ae8SLu Weining  bits<5> imm5;
31333388ae8SLu Weining
31433388ae8SLu Weining  let Inst{31-22} = 0b0010101011;
31533388ae8SLu Weining  let Inst{21-10} = imm12;
31633388ae8SLu Weining  let Inst{9-5} = rj;
31733388ae8SLu Weining  let Inst{4-0} = imm5;
31833388ae8SLu Weining}
31933388ae8SLu Weining
32033388ae8SLu Weining// FmtPRELDX
32133388ae8SLu Weining// < 0b00111000001011000 | rk | rj | I5>
322294bee10SWANG Xueruiclass FmtPRELDX<dag outs, dag ins, string opnstr, list<dag> pattern = []>
323294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
32433388ae8SLu Weining  bits<5> rk;
32533388ae8SLu Weining  bits<5> rj;
32633388ae8SLu Weining  bits<5> imm5;
32733388ae8SLu Weining
32833388ae8SLu Weining  let Inst{31-15} = 0b00111000001011000;
32933388ae8SLu Weining  let Inst{14-10} = rk;
33033388ae8SLu Weining  let Inst{9-5} = rj;
33133388ae8SLu Weining  let Inst{4-0} = imm5;
33233388ae8SLu Weining}
33311ec7307SWeining Lu
33411ec7307SWeining Lu// FmtCSR
33546aec7bcSwanglei// <opcode | csr_num | rd>
33646aec7bcSwangleiclass FmtCSR<bits<32> op, dag outs, dag ins, string opnstr,
33711ec7307SWeining Lu             list<dag> pattern = []>
338294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
33911ec7307SWeining Lu  bits<14> csr_num;
34011ec7307SWeining Lu  bits<5> rd;
34111ec7307SWeining Lu
34246aec7bcSwanglei  let Inst{31-0} = op;
34311ec7307SWeining Lu  let Inst{23-10} = csr_num;
34411ec7307SWeining Lu  let Inst{4-0} = rd;
34511ec7307SWeining Lu}
34611ec7307SWeining Lu
34711ec7307SWeining Lu// FmtCSRXCHG
34811ec7307SWeining Lu// <opcode | csr_num | rj | rd>
34946aec7bcSwangleiclass FmtCSRXCHG<bits<32> op, dag outs, dag ins, string opnstr,
35011ec7307SWeining Lu                 list<dag> pattern = []>
351294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
35211ec7307SWeining Lu  bits<14> csr_num;
35311ec7307SWeining Lu  bits<5> rj;
35411ec7307SWeining Lu  bits<5> rd;
35511ec7307SWeining Lu
35646aec7bcSwanglei  let Inst{31-0} = op;
35711ec7307SWeining Lu  let Inst{23-10} = csr_num;
35811ec7307SWeining Lu  let Inst{9-5} = rj;
35911ec7307SWeining Lu  let Inst{4-0} = rd;
36011ec7307SWeining Lu}
36111ec7307SWeining Lu
36211ec7307SWeining Lu// FmtCACOP
36311ec7307SWeining Lu// <0b0000011000 | I12 | rj | I5>
364294bee10SWANG Xueruiclass FmtCACOP<dag outs, dag ins, string opnstr, list<dag> pattern = []>
365294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
36611ec7307SWeining Lu  bits<12> imm12;
36711ec7307SWeining Lu  bits<5> rj;
36811ec7307SWeining Lu  bits<5> op;
36911ec7307SWeining Lu
37011ec7307SWeining Lu  let Inst{31-22} = 0b0000011000;
37111ec7307SWeining Lu  let Inst{21-10} = imm12;
37211ec7307SWeining Lu  let Inst{9-5} = rj;
37311ec7307SWeining Lu  let Inst{4-0} = op;
37411ec7307SWeining Lu}
37511ec7307SWeining Lu
37611ec7307SWeining Lu// FmtIMM32
37711ec7307SWeining Lu// <I32>
378294bee10SWANG Xueruiclass FmtI32<bits<32> op, list<dag> pattern = []>
379294bee10SWANG Xuerui    : LAInst<(outs), (ins), deriveInsnMnemonic<NAME>.ret, "", pattern> {
38011ec7307SWeining Lu  let Inst{31-0} = op;
38111ec7307SWeining Lu}
38211ec7307SWeining Lu
38311ec7307SWeining Lu// FmtINVTLB
38411ec7307SWeining Lu// <0b00000110010010011 | rk | rj | I5>
385294bee10SWANG Xueruiclass FmtINVTLB<dag outs, dag ins, string opnstr, list<dag> pattern = []>
386294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
38711ec7307SWeining Lu  bits<5> rk;
38811ec7307SWeining Lu  bits<5> rj;
38911ec7307SWeining Lu  bits<5> op;
39011ec7307SWeining Lu
39111ec7307SWeining Lu  let Inst{31-15} = 0b00000110010010011;
39211ec7307SWeining Lu  let Inst{14-10} = rk;
39311ec7307SWeining Lu  let Inst{9-5} = rj;
39411ec7307SWeining Lu  let Inst{4-0} = op;
39511ec7307SWeining Lu}
39611ec7307SWeining Lu
39711ec7307SWeining Lu// FmtLDPTE
39811ec7307SWeining Lu// <0b00000110010001 | seq | rj | 00000>
399294bee10SWANG Xueruiclass FmtLDPTE<dag outs, dag ins, string opnstr, list<dag> pattern = []>
400294bee10SWANG Xuerui    : LAInst<outs, ins, deriveInsnMnemonic<NAME>.ret, opnstr, pattern> {
40111ec7307SWeining Lu  bits<8> seq;
40211ec7307SWeining Lu  bits<5> rj;
40311ec7307SWeining Lu
40411ec7307SWeining Lu  let Inst{31-18} = 0b00000110010001;
40511ec7307SWeining Lu  let Inst{17-10} = seq;
40611ec7307SWeining Lu  let Inst{9-5} = rj;
40711ec7307SWeining Lu  let Inst{4-0} = 0b00000;
40811ec7307SWeining Lu}
409