1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* Machine Code Emitter *|
4|* *|
5|* Automatically generated file, do not edit! *|
6|* *|
7\*===----------------------------------------------------------------------===*/
8
9uint64_t LanaiMCCodeEmitter::getBinaryCodeForInstr(const MCInst &MI,
10 SmallVectorImpl<MCFixup> &Fixups,
11 const MCSubtargetInfo &STI) const {
12 static const uint64_t InstBits[] = {
13 UINT64_C(268632064), // ADDC_F_I_HI
14 UINT64_C(268566528), // ADDC_F_I_LO
15 UINT64_C(3221356800), // ADDC_F_R
16 UINT64_C(268500992), // ADDC_I_HI
17 UINT64_C(268435456), // ADDC_I_LO
18 UINT64_C(3221225728), // ADDC_R
19 UINT64_C(196608), // ADD_F_I_HI
20 UINT64_C(131072), // ADD_F_I_LO
21 UINT64_C(3221356544), // ADD_F_R
22 UINT64_C(65536), // ADD_I_HI
23 UINT64_C(0), // ADD_I_LO
24 UINT64_C(3221225472), // ADD_R
25 UINT64_C(1073938432), // AND_F_I_HI
26 UINT64_C(1073872896), // AND_F_I_LO
27 UINT64_C(3221357568), // AND_F_R
28 UINT64_C(1073807360), // AND_I_HI
29 UINT64_C(1073741824), // AND_I_LO
30 UINT64_C(3221226496), // AND_R
31 UINT64_C(3758096384), // BRCC
32 UINT64_C(3238003968), // BRIND_CC
33 UINT64_C(3238003968), // BRIND_CCA
34 UINT64_C(3774873602), // BRR
35 UINT64_C(3758096384), // BT
36 UINT64_C(3238003968), // JR
37 UINT64_C(4026531840), // LDADDR
38 UINT64_C(4026744832), // LDBs_RI
39 UINT64_C(2684354564), // LDBs_RR
40 UINT64_C(4026748928), // LDBz_RI
41 UINT64_C(2684354565), // LDBz_RR
42 UINT64_C(4026728448), // LDHs_RI
43 UINT64_C(2684354560), // LDHs_RR
44 UINT64_C(4026732544), // LDHz_RI
45 UINT64_C(2684354561), // LDHz_RR
46 UINT64_C(2147483648), // LDW_RI
47 UINT64_C(2684354562), // LDW_RR
48 UINT64_C(2684354563), // LDWz_RR
49 UINT64_C(3489660930), // LEADZ
50 UINT64_C(2), // LOG0
51 UINT64_C(3), // LOG1
52 UINT64_C(4), // LOG2
53 UINT64_C(5), // LOG3
54 UINT64_C(6), // LOG4
55 UINT64_C(65536), // MOVHI
56 UINT64_C(1), // NOP
57 UINT64_C(1342373888), // OR_F_I_HI
58 UINT64_C(1342308352), // OR_F_I_LO
59 UINT64_C(3221357824), // OR_F_R
60 UINT64_C(1342242816), // OR_I_HI
61 UINT64_C(1342177280), // OR_I_LO
62 UINT64_C(3221226752), // OR_R
63 UINT64_C(3489660929), // POPC
64 UINT64_C(2165768188), // RET
65 UINT64_C(1879244800), // SA_F_I
66 UINT64_C(1879113728), // SA_I
67 UINT64_C(3758096386), // SCC
68 UINT64_C(3221227264), // SELECT
69 UINT64_C(537067520), // SFSUB_F_RI_HI
70 UINT64_C(537001984), // SFSUB_F_RI_LO
71 UINT64_C(3221357056), // SFSUB_F_RR
72 UINT64_C(3221358464), // SHL_F_R
73 UINT64_C(3221227392), // SHL_R
74 UINT64_C(4026662912), // SLI
75 UINT64_C(1879179264), // SL_F_I
76 UINT64_C(1879048192), // SL_I
77 UINT64_C(3221358528), // SRA_F_R
78 UINT64_C(3221227456), // SRA_R
79 UINT64_C(3221358464), // SRL_F_R
80 UINT64_C(3221227392), // SRL_R
81 UINT64_C(4026597376), // STADDR
82 UINT64_C(4026753024), // STB_RI
83 UINT64_C(2952790020), // STB_RR
84 UINT64_C(4026736640), // STH_RI
85 UINT64_C(2952790016), // STH_RR
86 UINT64_C(805502976), // SUBB_F_I_HI
87 UINT64_C(805437440), // SUBB_F_I_LO
88 UINT64_C(3221357312), // SUBB_F_R
89 UINT64_C(805371904), // SUBB_I_HI
90 UINT64_C(805306368), // SUBB_I_LO
91 UINT64_C(3221226240), // SUBB_R
92 UINT64_C(537067520), // SUB_F_I_HI
93 UINT64_C(537001984), // SUB_F_I_LO
94 UINT64_C(3221357056), // SUB_F_R
95 UINT64_C(536936448), // SUB_I_HI
96 UINT64_C(536870912), // SUB_I_LO
97 UINT64_C(3221225984), // SUB_R
98 UINT64_C(2415919104), // SW_RI
99 UINT64_C(2952790018), // SW_RR
100 UINT64_C(3489660931), // TRAILZ
101 UINT64_C(1610809344), // XOR_F_I_HI
102 UINT64_C(1610743808), // XOR_F_I_LO
103 UINT64_C(3221358080), // XOR_F_R
104 UINT64_C(1610678272), // XOR_I_HI
105 UINT64_C(1610612736), // XOR_I_LO
106 UINT64_C(3221227008), // XOR_R
107 };
108 constexpr unsigned FirstSupportedOpcode = 328;
109
110 const unsigned opcode = MI.getOpcode();
111 if (opcode < FirstSupportedOpcode)
112 reportUnsupportedInst(Inst: MI);
113 unsigned TableIndex = opcode - FirstSupportedOpcode;
114 uint64_t Value = InstBits[TableIndex];
115 uint64_t op = 0;
116 (void)op; // suppress warning
117 switch (opcode) {
118 case Lanai::LOG0:
119 case Lanai::LOG1:
120 case Lanai::LOG2:
121 case Lanai::LOG3:
122 case Lanai::LOG4:
123 case Lanai::NOP:
124 case Lanai::RET: {
125 break;
126 }
127 case Lanai::BRR: {
128 // op: DDDI
129 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
130 Value |= (op & 0xe) << 24;
131 Value |= (op & 0x1);
132 // op: imm16
133 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
134 Value |= (op & 0xfffc);
135 break;
136 }
137 case Lanai::LEADZ:
138 case Lanai::POPC:
139 case Lanai::TRAILZ: {
140 // op: Rd
141 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
142 Value |= (op & 0x1f) << 23;
143 // op: Rs1
144 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
145 Value |= (op & 0x1f) << 18;
146 break;
147 }
148 case Lanai::ADDC_F_R:
149 case Lanai::ADDC_R:
150 case Lanai::ADD_F_R:
151 case Lanai::ADD_R:
152 case Lanai::AND_F_R:
153 case Lanai::AND_R:
154 case Lanai::OR_F_R:
155 case Lanai::OR_R:
156 case Lanai::SELECT:
157 case Lanai::SHL_F_R:
158 case Lanai::SHL_R:
159 case Lanai::SRA_F_R:
160 case Lanai::SRA_R:
161 case Lanai::SRL_F_R:
162 case Lanai::SRL_R:
163 case Lanai::SUBB_F_R:
164 case Lanai::SUBB_R:
165 case Lanai::SUB_F_R:
166 case Lanai::SUB_R:
167 case Lanai::XOR_F_R:
168 case Lanai::XOR_R: {
169 // op: Rd
170 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
171 Value |= (op & 0x1f) << 23;
172 // op: Rs1
173 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
174 Value |= (op & 0x1f) << 18;
175 // op: Rs2
176 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 2), Fixups, SubtargetInfo: STI);
177 Value |= (op & 0x1f) << 11;
178 // op: DDDI
179 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 3), Fixups, SubtargetInfo: STI);
180 Value |= (op & 0x1) << 16;
181 Value |= (op & 0xe) >> 1;
182 break;
183 }
184 case Lanai::ADDC_F_I_HI:
185 case Lanai::ADDC_F_I_LO:
186 case Lanai::ADDC_I_HI:
187 case Lanai::ADDC_I_LO:
188 case Lanai::ADD_F_I_HI:
189 case Lanai::ADD_F_I_LO:
190 case Lanai::ADD_I_HI:
191 case Lanai::ADD_I_LO:
192 case Lanai::AND_F_I_HI:
193 case Lanai::AND_F_I_LO:
194 case Lanai::AND_I_HI:
195 case Lanai::AND_I_LO:
196 case Lanai::OR_F_I_HI:
197 case Lanai::OR_F_I_LO:
198 case Lanai::OR_I_HI:
199 case Lanai::OR_I_LO:
200 case Lanai::SA_F_I:
201 case Lanai::SA_I:
202 case Lanai::SL_F_I:
203 case Lanai::SL_I:
204 case Lanai::SUBB_F_I_HI:
205 case Lanai::SUBB_F_I_LO:
206 case Lanai::SUBB_I_HI:
207 case Lanai::SUBB_I_LO:
208 case Lanai::SUB_F_I_HI:
209 case Lanai::SUB_F_I_LO:
210 case Lanai::SUB_I_HI:
211 case Lanai::SUB_I_LO:
212 case Lanai::XOR_F_I_HI:
213 case Lanai::XOR_F_I_LO:
214 case Lanai::XOR_I_HI:
215 case Lanai::XOR_I_LO: {
216 // op: Rd
217 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
218 Value |= (op & 0x1f) << 23;
219 // op: Rs1
220 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
221 Value |= (op & 0x1f) << 18;
222 // op: imm16
223 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 2), Fixups, SubtargetInfo: STI);
224 Value |= (op & 0xffff);
225 break;
226 }
227 case Lanai::STADDR: {
228 // op: Rd
229 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
230 Value |= (op & 0x1f) << 23;
231 // op: dst
232 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
233 Value |= (op & 0x1f0000) << 2;
234 Value |= (op & 0xffff);
235 break;
236 }
237 case Lanai::SW_RI: {
238 // op: Rd
239 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
240 Value |= (op & 0x1f) << 23;
241 // op: dst
242 op = getRiMemoryOpValue(Inst: MI, OpNo: 1, Fixups, SubtargetInfo: STI);
243 Value |= (op & 0x7fffff);
244 Value = adjustPqBitsRmAndRrm(Inst: MI, Value, STI);
245 break;
246 }
247 case Lanai::STB_RR:
248 case Lanai::STH_RR:
249 case Lanai::SW_RR: {
250 // op: Rd
251 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
252 Value |= (op & 0x1f) << 23;
253 // op: dst
254 op = getRrMemoryOpValue(Inst: MI, OpNo: 1, Fixups, SubtargetInfo: STI);
255 Value |= (op & 0xf8000) << 3;
256 Value |= (op & 0x300) << 8;
257 Value |= (op & 0x7c00) << 1;
258 Value |= (op & 0xff) << 3;
259 Value = adjustPqBitsRmAndRrm(Inst: MI, Value, STI);
260 break;
261 }
262 case Lanai::STB_RI:
263 case Lanai::STH_RI: {
264 // op: Rd
265 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
266 Value |= (op & 0x1f) << 23;
267 // op: dst
268 op = getSplsOpValue(Inst: MI, OpNo: 1, Fixups, SubtargetInfo: STI);
269 Value |= (op & 0x1f000) << 6;
270 Value |= (op & 0xfff);
271 Value = adjustPqBitsSpls(Inst: MI, Value, STI);
272 break;
273 }
274 case Lanai::SLI: {
275 // op: Rd
276 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
277 Value |= (op & 0x1f) << 23;
278 // op: imm
279 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
280 Value |= (op & 0x1f0000) << 2;
281 Value |= (op & 0xffff);
282 break;
283 }
284 case Lanai::MOVHI: {
285 // op: Rd
286 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
287 Value |= (op & 0x1f) << 23;
288 // op: imm16
289 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
290 Value |= (op & 0xffff);
291 break;
292 }
293 case Lanai::LDADDR: {
294 // op: Rd
295 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
296 Value |= (op & 0x1f) << 23;
297 // op: src
298 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
299 Value |= (op & 0x1f0000) << 2;
300 Value |= (op & 0xffff);
301 break;
302 }
303 case Lanai::LDW_RI: {
304 // op: Rd
305 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
306 Value |= (op & 0x1f) << 23;
307 // op: src
308 op = getRiMemoryOpValue(Inst: MI, OpNo: 1, Fixups, SubtargetInfo: STI);
309 Value |= (op & 0x7fffff);
310 Value = adjustPqBitsRmAndRrm(Inst: MI, Value, STI);
311 break;
312 }
313 case Lanai::LDBs_RR:
314 case Lanai::LDBz_RR:
315 case Lanai::LDHs_RR:
316 case Lanai::LDHz_RR:
317 case Lanai::LDW_RR:
318 case Lanai::LDWz_RR: {
319 // op: Rd
320 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
321 Value |= (op & 0x1f) << 23;
322 // op: src
323 op = getRrMemoryOpValue(Inst: MI, OpNo: 1, Fixups, SubtargetInfo: STI);
324 Value |= (op & 0xf8000) << 3;
325 Value |= (op & 0x300) << 8;
326 Value |= (op & 0x7c00) << 1;
327 Value |= (op & 0xff) << 3;
328 Value = adjustPqBitsRmAndRrm(Inst: MI, Value, STI);
329 break;
330 }
331 case Lanai::LDBs_RI:
332 case Lanai::LDBz_RI:
333 case Lanai::LDHs_RI:
334 case Lanai::LDHz_RI: {
335 // op: Rd
336 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
337 Value |= (op & 0x1f) << 23;
338 // op: src
339 op = getSplsOpValue(Inst: MI, OpNo: 1, Fixups, SubtargetInfo: STI);
340 Value |= (op & 0x1f000) << 6;
341 Value |= (op & 0xfff);
342 Value = adjustPqBitsSpls(Inst: MI, Value, STI);
343 break;
344 }
345 case Lanai::BRIND_CC: {
346 // op: Rs1
347 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
348 Value |= (op & 0x1f) << 18;
349 // op: DDDI
350 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
351 Value |= (op & 0x1) << 16;
352 Value |= (op & 0xe) >> 1;
353 break;
354 }
355 case Lanai::SCC: {
356 // op: Rs1
357 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
358 Value |= (op & 0x1f) << 18;
359 // op: DDDI
360 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
361 Value |= (op & 0xe) << 24;
362 Value |= (op & 0x1);
363 break;
364 }
365 case Lanai::SFSUB_F_RR: {
366 // op: Rs1
367 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
368 Value |= (op & 0x1f) << 18;
369 // op: Rs2
370 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
371 Value |= (op & 0x1f) << 11;
372 break;
373 }
374 case Lanai::BRIND_CCA: {
375 // op: Rs1
376 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
377 Value |= (op & 0x1f) << 18;
378 // op: Rs2
379 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
380 Value |= (op & 0x1f) << 11;
381 // op: DDDI
382 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 2), Fixups, SubtargetInfo: STI);
383 Value |= (op & 0x1) << 16;
384 Value |= (op & 0xe) >> 1;
385 break;
386 }
387 case Lanai::SFSUB_F_RI_HI:
388 case Lanai::SFSUB_F_RI_LO: {
389 // op: Rs1
390 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
391 Value |= (op & 0x1f) << 18;
392 // op: imm16
393 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
394 Value |= (op & 0xffff);
395 break;
396 }
397 case Lanai::JR: {
398 // op: Rs2
399 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
400 Value |= (op & 0x1f) << 11;
401 break;
402 }
403 case Lanai::BT: {
404 // op: addr
405 op = getBranchTargetOpValue(Inst: MI, OpNo: 0, Fixups, SubtargetInfo: STI);
406 Value |= (op & 0x1fffffc);
407 break;
408 }
409 case Lanai::BRCC: {
410 // op: addr
411 op = getBranchTargetOpValue(Inst: MI, OpNo: 0, Fixups, SubtargetInfo: STI);
412 Value |= (op & 0x1fffffc);
413 // op: DDDI
414 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
415 Value |= (op & 0xe) << 24;
416 Value |= (op & 0x1);
417 break;
418 }
419 default:
420 reportUnsupportedInst(Inst: MI);
421 }
422 return Value;
423}
424
425#ifdef GET_OPERAND_BIT_OFFSET
426#undef GET_OPERAND_BIT_OFFSET
427
428uint32_t LanaiMCCodeEmitter::getOperandBitOffset(const MCInst &MI,
429 unsigned OpNum,
430 const MCSubtargetInfo &STI) const {
431 switch (MI.getOpcode()) {
432 case Lanai::LOG0:
433 case Lanai::LOG1:
434 case Lanai::LOG2:
435 case Lanai::LOG3:
436 case Lanai::LOG4:
437 case Lanai::NOP:
438 case Lanai::RET: {
439 break;
440 }
441 case Lanai::ADDC_F_R:
442 case Lanai::ADDC_R:
443 case Lanai::ADD_F_R:
444 case Lanai::ADD_R:
445 case Lanai::AND_F_R:
446 case Lanai::AND_R:
447 case Lanai::OR_F_R:
448 case Lanai::OR_R:
449 case Lanai::SELECT:
450 case Lanai::SHL_F_R:
451 case Lanai::SHL_R:
452 case Lanai::SRA_F_R:
453 case Lanai::SRA_R:
454 case Lanai::SRL_F_R:
455 case Lanai::SRL_R:
456 case Lanai::SUBB_F_R:
457 case Lanai::SUBB_R:
458 case Lanai::SUB_F_R:
459 case Lanai::SUB_R:
460 case Lanai::XOR_F_R:
461 case Lanai::XOR_R: {
462 switch (OpNum) {
463 case 0:
464 // op: Rd
465 return 23;
466 case 1:
467 // op: Rs1
468 return 18;
469 case 2:
470 // op: Rs2
471 return 11;
472 case 3:
473 // op: DDDI
474 return 0;
475 }
476 break;
477 }
478 case Lanai::ADDC_F_I_HI:
479 case Lanai::ADDC_F_I_LO:
480 case Lanai::ADDC_I_HI:
481 case Lanai::ADDC_I_LO:
482 case Lanai::ADD_F_I_HI:
483 case Lanai::ADD_F_I_LO:
484 case Lanai::ADD_I_HI:
485 case Lanai::ADD_I_LO:
486 case Lanai::AND_F_I_HI:
487 case Lanai::AND_F_I_LO:
488 case Lanai::AND_I_HI:
489 case Lanai::AND_I_LO:
490 case Lanai::OR_F_I_HI:
491 case Lanai::OR_F_I_LO:
492 case Lanai::OR_I_HI:
493 case Lanai::OR_I_LO:
494 case Lanai::SA_F_I:
495 case Lanai::SA_I:
496 case Lanai::SL_F_I:
497 case Lanai::SL_I:
498 case Lanai::SUBB_F_I_HI:
499 case Lanai::SUBB_F_I_LO:
500 case Lanai::SUBB_I_HI:
501 case Lanai::SUBB_I_LO:
502 case Lanai::SUB_F_I_HI:
503 case Lanai::SUB_F_I_LO:
504 case Lanai::SUB_I_HI:
505 case Lanai::SUB_I_LO:
506 case Lanai::XOR_F_I_HI:
507 case Lanai::XOR_F_I_LO:
508 case Lanai::XOR_I_HI:
509 case Lanai::XOR_I_LO: {
510 switch (OpNum) {
511 case 0:
512 // op: Rd
513 return 23;
514 case 1:
515 // op: Rs1
516 return 18;
517 case 2:
518 // op: imm16
519 return 0;
520 }
521 break;
522 }
523 case Lanai::LEADZ:
524 case Lanai::POPC:
525 case Lanai::TRAILZ: {
526 switch (OpNum) {
527 case 0:
528 // op: Rd
529 return 23;
530 case 1:
531 // op: Rs1
532 return 18;
533 }
534 break;
535 }
536 case Lanai::STADDR:
537 case Lanai::STB_RI:
538 case Lanai::STH_RI:
539 case Lanai::SW_RI: {
540 switch (OpNum) {
541 case 0:
542 // op: Rd
543 return 23;
544 case 1:
545 // op: dst
546 return 0;
547 }
548 break;
549 }
550 case Lanai::STB_RR:
551 case Lanai::STH_RR:
552 case Lanai::SW_RR: {
553 switch (OpNum) {
554 case 0:
555 // op: Rd
556 return 23;
557 case 1:
558 // op: dst
559 return 3;
560 }
561 break;
562 }
563 case Lanai::SLI: {
564 switch (OpNum) {
565 case 0:
566 // op: Rd
567 return 23;
568 case 1:
569 // op: imm
570 return 0;
571 }
572 break;
573 }
574 case Lanai::MOVHI: {
575 switch (OpNum) {
576 case 0:
577 // op: Rd
578 return 23;
579 case 1:
580 // op: imm16
581 return 0;
582 }
583 break;
584 }
585 case Lanai::LDADDR:
586 case Lanai::LDBs_RI:
587 case Lanai::LDBz_RI:
588 case Lanai::LDHs_RI:
589 case Lanai::LDHz_RI:
590 case Lanai::LDW_RI: {
591 switch (OpNum) {
592 case 0:
593 // op: Rd
594 return 23;
595 case 1:
596 // op: src
597 return 0;
598 }
599 break;
600 }
601 case Lanai::LDBs_RR:
602 case Lanai::LDBz_RR:
603 case Lanai::LDHs_RR:
604 case Lanai::LDHz_RR:
605 case Lanai::LDW_RR:
606 case Lanai::LDWz_RR: {
607 switch (OpNum) {
608 case 0:
609 // op: Rd
610 return 23;
611 case 1:
612 // op: src
613 return 3;
614 }
615 break;
616 }
617 case Lanai::BRIND_CC:
618 case Lanai::SCC: {
619 switch (OpNum) {
620 case 0:
621 // op: Rs1
622 return 18;
623 case 1:
624 // op: DDDI
625 return 0;
626 }
627 break;
628 }
629 case Lanai::BRIND_CCA: {
630 switch (OpNum) {
631 case 0:
632 // op: Rs1
633 return 18;
634 case 1:
635 // op: Rs2
636 return 11;
637 case 2:
638 // op: DDDI
639 return 0;
640 }
641 break;
642 }
643 case Lanai::SFSUB_F_RR: {
644 switch (OpNum) {
645 case 0:
646 // op: Rs1
647 return 18;
648 case 1:
649 // op: Rs2
650 return 11;
651 }
652 break;
653 }
654 case Lanai::SFSUB_F_RI_HI:
655 case Lanai::SFSUB_F_RI_LO: {
656 switch (OpNum) {
657 case 0:
658 // op: Rs1
659 return 18;
660 case 1:
661 // op: imm16
662 return 0;
663 }
664 break;
665 }
666 case Lanai::JR: {
667 switch (OpNum) {
668 case 0:
669 // op: Rs2
670 return 11;
671 }
672 break;
673 }
674 case Lanai::BRCC: {
675 switch (OpNum) {
676 case 0:
677 // op: addr
678 return 2;
679 case 1:
680 // op: DDDI
681 return 0;
682 }
683 break;
684 }
685 case Lanai::BT: {
686 switch (OpNum) {
687 case 0:
688 // op: addr
689 return 2;
690 }
691 break;
692 }
693 case Lanai::BRR: {
694 switch (OpNum) {
695 case 1:
696 // op: DDDI
697 return 0;
698 case 0:
699 // op: imm16
700 return 2;
701 }
702 break;
703 }
704 default:
705 reportUnsupportedInst(MI);
706 }
707 reportUnsupportedOperand(MI, OpNum);
708}
709
710#endif // GET_OPERAND_BIT_OFFSET
711
712