xref: /aosp_15_r20/external/llvm/lib/Target/Mips/MicroMips64r6InstrFormats.td (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker//=-   MicroMips64r6InstrFormats.td - Instruction Formats  -*- tablegen -*  -=//
2*9880d681SAndroid Build Coastguard Worker//
3*9880d681SAndroid Build Coastguard Worker//                     The LLVM Compiler Infrastructure
4*9880d681SAndroid Build Coastguard Worker//
5*9880d681SAndroid Build Coastguard Worker// This file is distributed under the University of Illinois Open Source
6*9880d681SAndroid Build Coastguard Worker// License. See LICENSE.TXT for details.
7*9880d681SAndroid Build Coastguard Worker//
8*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
9*9880d681SAndroid Build Coastguard Worker//
10*9880d681SAndroid Build Coastguard Worker// This file describes microMIPS64r6 instruction formats.
11*9880d681SAndroid Build Coastguard Worker//
12*9880d681SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===//
13*9880d681SAndroid Build Coastguard Worker
14*9880d681SAndroid Build Coastguard Workerclass DAUI_FM_MMR6 {
15*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
16*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
17*9880d681SAndroid Build Coastguard Worker  bits<16> imm;
18*9880d681SAndroid Build Coastguard Worker
19*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
20*9880d681SAndroid Build Coastguard Worker
21*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b111100;
22*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
23*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
24*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm;
25*9880d681SAndroid Build Coastguard Worker}
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerclass POOL32I_ADD_IMM_FM_MMR6<bits<5> funct> {
28*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
29*9880d681SAndroid Build Coastguard Worker  bits<16> imm;
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
32*9880d681SAndroid Build Coastguard Worker
33*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010000;
34*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = funct;
35*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
36*9880d681SAndroid Build Coastguard Worker  let Inst{15-0} = imm;
37*9880d681SAndroid Build Coastguard Worker}
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerclass POOL32S_EXTBITS_FM_MMR6<bits<6> funct> {
40*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
41*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
42*9880d681SAndroid Build Coastguard Worker  bits<5> size;
43*9880d681SAndroid Build Coastguard Worker  bits<5> pos;
44*9880d681SAndroid Build Coastguard Worker
45*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010110;
48*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
49*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
50*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = size;
51*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = pos;
52*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = funct;
53*9880d681SAndroid Build Coastguard Worker}
54*9880d681SAndroid Build Coastguard Worker
55*9880d681SAndroid Build Coastguard Workerclass POOL32S_DALIGN_FM_MMR6 {
56*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
57*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
58*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
59*9880d681SAndroid Build Coastguard Worker  bits<3> bp;
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
62*9880d681SAndroid Build Coastguard Worker
63*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010110;
64*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rs;
65*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rt;
66*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
67*9880d681SAndroid Build Coastguard Worker  let Inst{10-8}  = bp;
68*9880d681SAndroid Build Coastguard Worker  let Inst{7-6}   = 0b00;
69*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0b011100;
70*9880d681SAndroid Build Coastguard Worker}
71*9880d681SAndroid Build Coastguard Worker
72*9880d681SAndroid Build Coastguard Workerclass POOL32A_DIVMOD_FM_MMR6<string instr_asm, bits<9> funct>
73*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm> {
74*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
75*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
76*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
77*9880d681SAndroid Build Coastguard Worker
78*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
79*9880d681SAndroid Build Coastguard Worker
80*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010110;
81*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
82*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
83*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
84*9880d681SAndroid Build Coastguard Worker  let Inst{10-9}  = 0b00;
85*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}  = funct;
86*9880d681SAndroid Build Coastguard Worker}
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Workerclass POOL32S_DMFTC0_FM_MMR6<string instr_asm, bits<5> funct>
89*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
90*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
91*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
92*9880d681SAndroid Build Coastguard Worker  bits<3> sel;
93*9880d681SAndroid Build Coastguard Worker
94*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
95*9880d681SAndroid Build Coastguard Worker
96*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010110;
97*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
98*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
99*9880d681SAndroid Build Coastguard Worker  let Inst{15-14} = 0;
100*9880d681SAndroid Build Coastguard Worker  let Inst{13-11} = sel;
101*9880d681SAndroid Build Coastguard Worker  let Inst{10-6}  = funct;
102*9880d681SAndroid Build Coastguard Worker  let Inst{5-0}   = 0b111100;
103*9880d681SAndroid Build Coastguard Worker}
104*9880d681SAndroid Build Coastguard Worker
105*9880d681SAndroid Build Coastguard Workerclass POOL32S_ARITH_FM_MMR6<string opstr, bits<9> funct>
106*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<opstr> {
107*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
108*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
109*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
112*9880d681SAndroid Build Coastguard Worker
113*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010110;
114*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
115*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
116*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
117*9880d681SAndroid Build Coastguard Worker  let Inst{10-9}  = 0b00;
118*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}   = funct;
119*9880d681SAndroid Build Coastguard Worker}
120*9880d681SAndroid Build Coastguard Worker
121*9880d681SAndroid Build Coastguard Workerclass DADDIU_FM_MMR6<string opstr> : MMR6Arch<opstr> {
122*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
123*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
124*9880d681SAndroid Build Coastguard Worker  bits<16> imm16;
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
127*9880d681SAndroid Build Coastguard Worker
128*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010111;
129*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
130*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
131*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = imm16;
132*9880d681SAndroid Build Coastguard Worker}
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Workerclass PCREL18_FM_MMR6<bits<3> funct> : MipsR6Inst {
135*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
136*9880d681SAndroid Build Coastguard Worker  bits<18> imm;
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
139*9880d681SAndroid Build Coastguard Worker
140*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b011110;
141*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
142*9880d681SAndroid Build Coastguard Worker  let Inst{20-18} = funct;
143*9880d681SAndroid Build Coastguard Worker  let Inst{17-0} = imm;
144*9880d681SAndroid Build Coastguard Worker}
145*9880d681SAndroid Build Coastguard Worker
146*9880d681SAndroid Build Coastguard Workerclass POOL32S_2R_FM_MMR6<string instr_asm, bits<10> funct>
147*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
148*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
149*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
150*9880d681SAndroid Build Coastguard Worker
151*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
152*9880d681SAndroid Build Coastguard Worker
153*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010110;
154*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
155*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
156*9880d681SAndroid Build Coastguard Worker  let Inst{15-6} = funct;
157*9880d681SAndroid Build Coastguard Worker  let Inst{5-0} = 0b111100;
158*9880d681SAndroid Build Coastguard Worker}
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Workerclass POOL32S_2RSA5B0_FM_MMR6<string instr_asm, bits<9> funct>
161*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
162*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
163*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
164*9880d681SAndroid Build Coastguard Worker  bits<5> sa;
165*9880d681SAndroid Build Coastguard Worker
166*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010110;
169*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
170*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
171*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = sa;
172*9880d681SAndroid Build Coastguard Worker  let Inst{10-9} = 0b00;
173*9880d681SAndroid Build Coastguard Worker  let Inst{8-0} = funct;
174*9880d681SAndroid Build Coastguard Worker}
175*9880d681SAndroid Build Coastguard Worker
176*9880d681SAndroid Build Coastguard Workerclass LD_SD_32_2R_OFFSET16_FM_MMR6<string instr_asm, bits<6> op>
177*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
178*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
179*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
180*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
181*9880d681SAndroid Build Coastguard Worker  bits<16> offset = addr{15-0};
182*9880d681SAndroid Build Coastguard Worker
183*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
184*9880d681SAndroid Build Coastguard Worker
185*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = op;
186*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
187*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
188*9880d681SAndroid Build Coastguard Worker  let Inst{15-0}  = offset;
189*9880d681SAndroid Build Coastguard Worker}
190*9880d681SAndroid Build Coastguard Worker
191*9880d681SAndroid Build Coastguard Workerclass POOL32C_2R_OFFSET12_FM_MMR6<string instr_asm, bits<4> funct>
192*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
193*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
194*9880d681SAndroid Build Coastguard Worker  bits<21> addr;
195*9880d681SAndroid Build Coastguard Worker  bits<5> base = addr{20-16};
196*9880d681SAndroid Build Coastguard Worker  bits<12> offset = addr{11-0};
197*9880d681SAndroid Build Coastguard Worker
198*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
199*9880d681SAndroid Build Coastguard Worker
200*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b011000;
201*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
202*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = base;
203*9880d681SAndroid Build Coastguard Worker  let Inst{15-12} = funct;
204*9880d681SAndroid Build Coastguard Worker  let Inst{11-0}  = offset;
205*9880d681SAndroid Build Coastguard Worker}
206*9880d681SAndroid Build Coastguard Worker
207*9880d681SAndroid Build Coastguard Workerclass POOL32S_3R_FM_MMR6<string instr_asm, bits<9> funct>
208*9880d681SAndroid Build Coastguard Worker    : MMR6Arch<instr_asm>, MipsR6Inst {
209*9880d681SAndroid Build Coastguard Worker  bits<5> rt;
210*9880d681SAndroid Build Coastguard Worker  bits<5> rs;
211*9880d681SAndroid Build Coastguard Worker  bits<5> rd;
212*9880d681SAndroid Build Coastguard Worker
213*9880d681SAndroid Build Coastguard Worker  bits<32> Inst;
214*9880d681SAndroid Build Coastguard Worker
215*9880d681SAndroid Build Coastguard Worker  let Inst{31-26} = 0b010110;
216*9880d681SAndroid Build Coastguard Worker  let Inst{25-21} = rt;
217*9880d681SAndroid Build Coastguard Worker  let Inst{20-16} = rs;
218*9880d681SAndroid Build Coastguard Worker  let Inst{15-11} = rd;
219*9880d681SAndroid Build Coastguard Worker  let Inst{10-9}  = 0b00;
220*9880d681SAndroid Build Coastguard Worker  let Inst{8-0}   = funct;
221*9880d681SAndroid Build Coastguard Worker}
222