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(0),
14 UINT64_C(0),
15 UINT64_C(0),
16 UINT64_C(0),
17 UINT64_C(0),
18 UINT64_C(0),
19 UINT64_C(0),
20 UINT64_C(0),
21 UINT64_C(0),
22 UINT64_C(0),
23 UINT64_C(0),
24 UINT64_C(0),
25 UINT64_C(0),
26 UINT64_C(0),
27 UINT64_C(0),
28 UINT64_C(0),
29 UINT64_C(0),
30 UINT64_C(0),
31 UINT64_C(0),
32 UINT64_C(0),
33 UINT64_C(0),
34 UINT64_C(0),
35 UINT64_C(0),
36 UINT64_C(0),
37 UINT64_C(0),
38 UINT64_C(0),
39 UINT64_C(0),
40 UINT64_C(0),
41 UINT64_C(0),
42 UINT64_C(0),
43 UINT64_C(0),
44 UINT64_C(0),
45 UINT64_C(0),
46 UINT64_C(0),
47 UINT64_C(0),
48 UINT64_C(0),
49 UINT64_C(0),
50 UINT64_C(0),
51 UINT64_C(0),
52 UINT64_C(0),
53 UINT64_C(0),
54 UINT64_C(0),
55 UINT64_C(0),
56 UINT64_C(0),
57 UINT64_C(0),
58 UINT64_C(0),
59 UINT64_C(0),
60 UINT64_C(0),
61 UINT64_C(0),
62 UINT64_C(0),
63 UINT64_C(0),
64 UINT64_C(0),
65 UINT64_C(0),
66 UINT64_C(0),
67 UINT64_C(0),
68 UINT64_C(0),
69 UINT64_C(0),
70 UINT64_C(0),
71 UINT64_C(0),
72 UINT64_C(0),
73 UINT64_C(0),
74 UINT64_C(0),
75 UINT64_C(0),
76 UINT64_C(0),
77 UINT64_C(0),
78 UINT64_C(0),
79 UINT64_C(0),
80 UINT64_C(0),
81 UINT64_C(0),
82 UINT64_C(0),
83 UINT64_C(0),
84 UINT64_C(0),
85 UINT64_C(0),
86 UINT64_C(0),
87 UINT64_C(0),
88 UINT64_C(0),
89 UINT64_C(0),
90 UINT64_C(0),
91 UINT64_C(0),
92 UINT64_C(0),
93 UINT64_C(0),
94 UINT64_C(0),
95 UINT64_C(0),
96 UINT64_C(0),
97 UINT64_C(0),
98 UINT64_C(0),
99 UINT64_C(0),
100 UINT64_C(0),
101 UINT64_C(0),
102 UINT64_C(0),
103 UINT64_C(0),
104 UINT64_C(0),
105 UINT64_C(0),
106 UINT64_C(0),
107 UINT64_C(0),
108 UINT64_C(0),
109 UINT64_C(0),
110 UINT64_C(0),
111 UINT64_C(0),
112 UINT64_C(0),
113 UINT64_C(0),
114 UINT64_C(0),
115 UINT64_C(0),
116 UINT64_C(0),
117 UINT64_C(0),
118 UINT64_C(0),
119 UINT64_C(0),
120 UINT64_C(0),
121 UINT64_C(0),
122 UINT64_C(0),
123 UINT64_C(0),
124 UINT64_C(0),
125 UINT64_C(0),
126 UINT64_C(0),
127 UINT64_C(0),
128 UINT64_C(0),
129 UINT64_C(0),
130 UINT64_C(0),
131 UINT64_C(0),
132 UINT64_C(0),
133 UINT64_C(0),
134 UINT64_C(0),
135 UINT64_C(0),
136 UINT64_C(0),
137 UINT64_C(0),
138 UINT64_C(0),
139 UINT64_C(0),
140 UINT64_C(0),
141 UINT64_C(0),
142 UINT64_C(0),
143 UINT64_C(0),
144 UINT64_C(0),
145 UINT64_C(0),
146 UINT64_C(0),
147 UINT64_C(0),
148 UINT64_C(0),
149 UINT64_C(0),
150 UINT64_C(0),
151 UINT64_C(0),
152 UINT64_C(0),
153 UINT64_C(0),
154 UINT64_C(0),
155 UINT64_C(0),
156 UINT64_C(0),
157 UINT64_C(0),
158 UINT64_C(0),
159 UINT64_C(0),
160 UINT64_C(0),
161 UINT64_C(0),
162 UINT64_C(0),
163 UINT64_C(0),
164 UINT64_C(0),
165 UINT64_C(0),
166 UINT64_C(0),
167 UINT64_C(0),
168 UINT64_C(0),
169 UINT64_C(0),
170 UINT64_C(0),
171 UINT64_C(0),
172 UINT64_C(0),
173 UINT64_C(0),
174 UINT64_C(0),
175 UINT64_C(0),
176 UINT64_C(0),
177 UINT64_C(0),
178 UINT64_C(0),
179 UINT64_C(0),
180 UINT64_C(0),
181 UINT64_C(0),
182 UINT64_C(0),
183 UINT64_C(0),
184 UINT64_C(0),
185 UINT64_C(0),
186 UINT64_C(0),
187 UINT64_C(0),
188 UINT64_C(0),
189 UINT64_C(0),
190 UINT64_C(0),
191 UINT64_C(0),
192 UINT64_C(0),
193 UINT64_C(0),
194 UINT64_C(0),
195 UINT64_C(0),
196 UINT64_C(0),
197 UINT64_C(0),
198 UINT64_C(0),
199 UINT64_C(0),
200 UINT64_C(0),
201 UINT64_C(0),
202 UINT64_C(0),
203 UINT64_C(0),
204 UINT64_C(0),
205 UINT64_C(0),
206 UINT64_C(0),
207 UINT64_C(0),
208 UINT64_C(0),
209 UINT64_C(0),
210 UINT64_C(0),
211 UINT64_C(0),
212 UINT64_C(0),
213 UINT64_C(0),
214 UINT64_C(0),
215 UINT64_C(0),
216 UINT64_C(0),
217 UINT64_C(0),
218 UINT64_C(0),
219 UINT64_C(0),
220 UINT64_C(0),
221 UINT64_C(0),
222 UINT64_C(0),
223 UINT64_C(0),
224 UINT64_C(0),
225 UINT64_C(0),
226 UINT64_C(0),
227 UINT64_C(0),
228 UINT64_C(0),
229 UINT64_C(0),
230 UINT64_C(0),
231 UINT64_C(0),
232 UINT64_C(0),
233 UINT64_C(0),
234 UINT64_C(0),
235 UINT64_C(0),
236 UINT64_C(0),
237 UINT64_C(0),
238 UINT64_C(0),
239 UINT64_C(0),
240 UINT64_C(0),
241 UINT64_C(0),
242 UINT64_C(0),
243 UINT64_C(0),
244 UINT64_C(0),
245 UINT64_C(0),
246 UINT64_C(0),
247 UINT64_C(0),
248 UINT64_C(0),
249 UINT64_C(0),
250 UINT64_C(0),
251 UINT64_C(0),
252 UINT64_C(0),
253 UINT64_C(0),
254 UINT64_C(0),
255 UINT64_C(0),
256 UINT64_C(0),
257 UINT64_C(0),
258 UINT64_C(0),
259 UINT64_C(0),
260 UINT64_C(0),
261 UINT64_C(0),
262 UINT64_C(0),
263 UINT64_C(0),
264 UINT64_C(0),
265 UINT64_C(0),
266 UINT64_C(0),
267 UINT64_C(0),
268 UINT64_C(0),
269 UINT64_C(0),
270 UINT64_C(0),
271 UINT64_C(0),
272 UINT64_C(0),
273 UINT64_C(0),
274 UINT64_C(0),
275 UINT64_C(0),
276 UINT64_C(0),
277 UINT64_C(0),
278 UINT64_C(0),
279 UINT64_C(0),
280 UINT64_C(0),
281 UINT64_C(0),
282 UINT64_C(0),
283 UINT64_C(0),
284 UINT64_C(0),
285 UINT64_C(0),
286 UINT64_C(0),
287 UINT64_C(0),
288 UINT64_C(0),
289 UINT64_C(0),
290 UINT64_C(0),
291 UINT64_C(0),
292 UINT64_C(0),
293 UINT64_C(0),
294 UINT64_C(0),
295 UINT64_C(0),
296 UINT64_C(0),
297 UINT64_C(0),
298 UINT64_C(0),
299 UINT64_C(0),
300 UINT64_C(0),
301 UINT64_C(0),
302 UINT64_C(0),
303 UINT64_C(0),
304 UINT64_C(0),
305 UINT64_C(0),
306 UINT64_C(0),
307 UINT64_C(0),
308 UINT64_C(0),
309 UINT64_C(0),
310 UINT64_C(0),
311 UINT64_C(0),
312 UINT64_C(0),
313 UINT64_C(0),
314 UINT64_C(0),
315 UINT64_C(0),
316 UINT64_C(0),
317 UINT64_C(0),
318 UINT64_C(0),
319 UINT64_C(0),
320 UINT64_C(0),
321 UINT64_C(0),
322 UINT64_C(0),
323 UINT64_C(0),
324 UINT64_C(0),
325 UINT64_C(0),
326 UINT64_C(0),
327 UINT64_C(0),
328 UINT64_C(268632064), // ADDC_F_I_HI
329 UINT64_C(268566528), // ADDC_F_I_LO
330 UINT64_C(3221356800), // ADDC_F_R
331 UINT64_C(268500992), // ADDC_I_HI
332 UINT64_C(268435456), // ADDC_I_LO
333 UINT64_C(3221225728), // ADDC_R
334 UINT64_C(196608), // ADD_F_I_HI
335 UINT64_C(131072), // ADD_F_I_LO
336 UINT64_C(3221356544), // ADD_F_R
337 UINT64_C(65536), // ADD_I_HI
338 UINT64_C(0), // ADD_I_LO
339 UINT64_C(3221225472), // ADD_R
340 UINT64_C(1073938432), // AND_F_I_HI
341 UINT64_C(1073872896), // AND_F_I_LO
342 UINT64_C(3221357568), // AND_F_R
343 UINT64_C(1073807360), // AND_I_HI
344 UINT64_C(1073741824), // AND_I_LO
345 UINT64_C(3221226496), // AND_R
346 UINT64_C(3758096384), // BRCC
347 UINT64_C(3238003968), // BRIND_CC
348 UINT64_C(3238003968), // BRIND_CCA
349 UINT64_C(3774873602), // BRR
350 UINT64_C(3758096384), // BT
351 UINT64_C(3238003968), // JR
352 UINT64_C(4026531840), // LDADDR
353 UINT64_C(4026744832), // LDBs_RI
354 UINT64_C(2684354564), // LDBs_RR
355 UINT64_C(4026748928), // LDBz_RI
356 UINT64_C(2684354565), // LDBz_RR
357 UINT64_C(4026728448), // LDHs_RI
358 UINT64_C(2684354560), // LDHs_RR
359 UINT64_C(4026732544), // LDHz_RI
360 UINT64_C(2684354561), // LDHz_RR
361 UINT64_C(2147483648), // LDW_RI
362 UINT64_C(2684354562), // LDW_RR
363 UINT64_C(2684354563), // LDWz_RR
364 UINT64_C(3489660930), // LEADZ
365 UINT64_C(2), // LOG0
366 UINT64_C(3), // LOG1
367 UINT64_C(4), // LOG2
368 UINT64_C(5), // LOG3
369 UINT64_C(6), // LOG4
370 UINT64_C(65536), // MOVHI
371 UINT64_C(1), // NOP
372 UINT64_C(1342373888), // OR_F_I_HI
373 UINT64_C(1342308352), // OR_F_I_LO
374 UINT64_C(3221357824), // OR_F_R
375 UINT64_C(1342242816), // OR_I_HI
376 UINT64_C(1342177280), // OR_I_LO
377 UINT64_C(3221226752), // OR_R
378 UINT64_C(3489660929), // POPC
379 UINT64_C(2165768188), // RET
380 UINT64_C(1879244800), // SA_F_I
381 UINT64_C(1879113728), // SA_I
382 UINT64_C(3758096386), // SCC
383 UINT64_C(3221227264), // SELECT
384 UINT64_C(537067520), // SFSUB_F_RI_HI
385 UINT64_C(537001984), // SFSUB_F_RI_LO
386 UINT64_C(3221357056), // SFSUB_F_RR
387 UINT64_C(3221358464), // SHL_F_R
388 UINT64_C(3221227392), // SHL_R
389 UINT64_C(4026662912), // SLI
390 UINT64_C(1879179264), // SL_F_I
391 UINT64_C(1879048192), // SL_I
392 UINT64_C(3221358528), // SRA_F_R
393 UINT64_C(3221227456), // SRA_R
394 UINT64_C(3221358464), // SRL_F_R
395 UINT64_C(3221227392), // SRL_R
396 UINT64_C(4026597376), // STADDR
397 UINT64_C(4026753024), // STB_RI
398 UINT64_C(2952790020), // STB_RR
399 UINT64_C(4026736640), // STH_RI
400 UINT64_C(2952790016), // STH_RR
401 UINT64_C(805502976), // SUBB_F_I_HI
402 UINT64_C(805437440), // SUBB_F_I_LO
403 UINT64_C(3221357312), // SUBB_F_R
404 UINT64_C(805371904), // SUBB_I_HI
405 UINT64_C(805306368), // SUBB_I_LO
406 UINT64_C(3221226240), // SUBB_R
407 UINT64_C(537067520), // SUB_F_I_HI
408 UINT64_C(537001984), // SUB_F_I_LO
409 UINT64_C(3221357056), // SUB_F_R
410 UINT64_C(536936448), // SUB_I_HI
411 UINT64_C(536870912), // SUB_I_LO
412 UINT64_C(3221225984), // SUB_R
413 UINT64_C(2415919104), // SW_RI
414 UINT64_C(2952790018), // SW_RR
415 UINT64_C(3489660931), // TRAILZ
416 UINT64_C(1610809344), // XOR_F_I_HI
417 UINT64_C(1610743808), // XOR_F_I_LO
418 UINT64_C(3221358080), // XOR_F_R
419 UINT64_C(1610678272), // XOR_I_HI
420 UINT64_C(1610612736), // XOR_I_LO
421 UINT64_C(3221227008), // XOR_R
422 UINT64_C(0)
423 };
424 const unsigned opcode = MI.getOpcode();
425 uint64_t Value = InstBits[opcode];
426 uint64_t op = 0;
427 (void)op; // suppress warning
428 switch (opcode) {
429 case Lanai::LOG0:
430 case Lanai::LOG1:
431 case Lanai::LOG2:
432 case Lanai::LOG3:
433 case Lanai::LOG4:
434 case Lanai::NOP:
435 case Lanai::RET: {
436 break;
437 }
438 case Lanai::BRR: {
439 // op: DDDI
440 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
441 Value |= (op & UINT64_C(14)) << 24;
442 Value |= (op & UINT64_C(1));
443 // op: imm16
444 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
445 op &= UINT64_C(65532);
446 Value |= op;
447 break;
448 }
449 case Lanai::LEADZ:
450 case Lanai::POPC:
451 case Lanai::TRAILZ: {
452 // op: Rd
453 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
454 op &= UINT64_C(31);
455 op <<= 23;
456 Value |= op;
457 // op: Rs1
458 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
459 op &= UINT64_C(31);
460 op <<= 18;
461 Value |= op;
462 break;
463 }
464 case Lanai::ADDC_F_R:
465 case Lanai::ADDC_R:
466 case Lanai::ADD_F_R:
467 case Lanai::ADD_R:
468 case Lanai::AND_F_R:
469 case Lanai::AND_R:
470 case Lanai::OR_F_R:
471 case Lanai::OR_R:
472 case Lanai::SELECT:
473 case Lanai::SHL_F_R:
474 case Lanai::SHL_R:
475 case Lanai::SRA_F_R:
476 case Lanai::SRA_R:
477 case Lanai::SRL_F_R:
478 case Lanai::SRL_R:
479 case Lanai::SUBB_F_R:
480 case Lanai::SUBB_R:
481 case Lanai::SUB_F_R:
482 case Lanai::SUB_R:
483 case Lanai::XOR_F_R:
484 case Lanai::XOR_R: {
485 // op: Rd
486 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
487 op &= UINT64_C(31);
488 op <<= 23;
489 Value |= op;
490 // op: Rs1
491 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
492 op &= UINT64_C(31);
493 op <<= 18;
494 Value |= op;
495 // op: Rs2
496 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 2), Fixups, SubtargetInfo: STI);
497 op &= UINT64_C(31);
498 op <<= 11;
499 Value |= op;
500 // op: DDDI
501 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 3), Fixups, SubtargetInfo: STI);
502 Value |= (op & UINT64_C(1)) << 16;
503 Value |= (op & UINT64_C(14)) >> 1;
504 break;
505 }
506 case Lanai::ADDC_F_I_HI:
507 case Lanai::ADDC_F_I_LO:
508 case Lanai::ADDC_I_HI:
509 case Lanai::ADDC_I_LO:
510 case Lanai::ADD_F_I_HI:
511 case Lanai::ADD_F_I_LO:
512 case Lanai::ADD_I_HI:
513 case Lanai::ADD_I_LO:
514 case Lanai::AND_F_I_HI:
515 case Lanai::AND_F_I_LO:
516 case Lanai::AND_I_HI:
517 case Lanai::AND_I_LO:
518 case Lanai::OR_F_I_HI:
519 case Lanai::OR_F_I_LO:
520 case Lanai::OR_I_HI:
521 case Lanai::OR_I_LO:
522 case Lanai::SA_F_I:
523 case Lanai::SA_I:
524 case Lanai::SL_F_I:
525 case Lanai::SL_I:
526 case Lanai::SUBB_F_I_HI:
527 case Lanai::SUBB_F_I_LO:
528 case Lanai::SUBB_I_HI:
529 case Lanai::SUBB_I_LO:
530 case Lanai::SUB_F_I_HI:
531 case Lanai::SUB_F_I_LO:
532 case Lanai::SUB_I_HI:
533 case Lanai::SUB_I_LO:
534 case Lanai::XOR_F_I_HI:
535 case Lanai::XOR_F_I_LO:
536 case Lanai::XOR_I_HI:
537 case Lanai::XOR_I_LO: {
538 // op: Rd
539 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
540 op &= UINT64_C(31);
541 op <<= 23;
542 Value |= op;
543 // op: Rs1
544 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
545 op &= UINT64_C(31);
546 op <<= 18;
547 Value |= op;
548 // op: imm16
549 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 2), Fixups, SubtargetInfo: STI);
550 op &= UINT64_C(65535);
551 Value |= op;
552 break;
553 }
554 case Lanai::STADDR: {
555 // op: Rd
556 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
557 op &= UINT64_C(31);
558 op <<= 23;
559 Value |= op;
560 // op: dst
561 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
562 Value |= (op & UINT64_C(2031616)) << 2;
563 Value |= (op & UINT64_C(65535));
564 break;
565 }
566 case Lanai::SW_RI: {
567 // op: Rd
568 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
569 op &= UINT64_C(31);
570 op <<= 23;
571 Value |= op;
572 // op: dst
573 op = getRiMemoryOpValue(Inst: MI, OpNo: 1, Fixups, SubtargetInfo: STI);
574 op &= UINT64_C(8388607);
575 Value |= op;
576 Value = adjustPqBitsRmAndRrm(Inst: MI, Value, STI);
577 break;
578 }
579 case Lanai::STB_RR:
580 case Lanai::STH_RR:
581 case Lanai::SW_RR: {
582 // op: Rd
583 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
584 op &= UINT64_C(31);
585 op <<= 23;
586 Value |= op;
587 // op: dst
588 op = getRrMemoryOpValue(Inst: MI, OpNo: 1, Fixups, SubtargetInfo: STI);
589 Value |= (op & UINT64_C(1015808)) << 3;
590 Value |= (op & UINT64_C(768)) << 8;
591 Value |= (op & UINT64_C(31744)) << 1;
592 Value |= (op & UINT64_C(255)) << 3;
593 Value = adjustPqBitsRmAndRrm(Inst: MI, Value, STI);
594 break;
595 }
596 case Lanai::STB_RI:
597 case Lanai::STH_RI: {
598 // op: Rd
599 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
600 op &= UINT64_C(31);
601 op <<= 23;
602 Value |= op;
603 // op: dst
604 op = getSplsOpValue(Inst: MI, OpNo: 1, Fixups, SubtargetInfo: STI);
605 Value |= (op & UINT64_C(126976)) << 6;
606 Value |= (op & UINT64_C(4095));
607 Value = adjustPqBitsSpls(Inst: MI, Value, STI);
608 break;
609 }
610 case Lanai::SLI: {
611 // op: Rd
612 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
613 op &= UINT64_C(31);
614 op <<= 23;
615 Value |= op;
616 // op: imm
617 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
618 Value |= (op & UINT64_C(2031616)) << 2;
619 Value |= (op & UINT64_C(65535));
620 break;
621 }
622 case Lanai::MOVHI: {
623 // op: Rd
624 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
625 op &= UINT64_C(31);
626 op <<= 23;
627 Value |= op;
628 // op: imm16
629 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
630 op &= UINT64_C(65535);
631 Value |= op;
632 break;
633 }
634 case Lanai::LDADDR: {
635 // op: Rd
636 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
637 op &= UINT64_C(31);
638 op <<= 23;
639 Value |= op;
640 // op: src
641 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
642 Value |= (op & UINT64_C(2031616)) << 2;
643 Value |= (op & UINT64_C(65535));
644 break;
645 }
646 case Lanai::LDW_RI: {
647 // op: Rd
648 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
649 op &= UINT64_C(31);
650 op <<= 23;
651 Value |= op;
652 // op: src
653 op = getRiMemoryOpValue(Inst: MI, OpNo: 1, Fixups, SubtargetInfo: STI);
654 op &= UINT64_C(8388607);
655 Value |= op;
656 Value = adjustPqBitsRmAndRrm(Inst: MI, Value, STI);
657 break;
658 }
659 case Lanai::LDBs_RR:
660 case Lanai::LDBz_RR:
661 case Lanai::LDHs_RR:
662 case Lanai::LDHz_RR:
663 case Lanai::LDW_RR:
664 case Lanai::LDWz_RR: {
665 // op: Rd
666 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
667 op &= UINT64_C(31);
668 op <<= 23;
669 Value |= op;
670 // op: src
671 op = getRrMemoryOpValue(Inst: MI, OpNo: 1, Fixups, SubtargetInfo: STI);
672 Value |= (op & UINT64_C(1015808)) << 3;
673 Value |= (op & UINT64_C(768)) << 8;
674 Value |= (op & UINT64_C(31744)) << 1;
675 Value |= (op & UINT64_C(255)) << 3;
676 Value = adjustPqBitsRmAndRrm(Inst: MI, Value, STI);
677 break;
678 }
679 case Lanai::LDBs_RI:
680 case Lanai::LDBz_RI:
681 case Lanai::LDHs_RI:
682 case Lanai::LDHz_RI: {
683 // op: Rd
684 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
685 op &= UINT64_C(31);
686 op <<= 23;
687 Value |= op;
688 // op: src
689 op = getSplsOpValue(Inst: MI, OpNo: 1, Fixups, SubtargetInfo: STI);
690 Value |= (op & UINT64_C(126976)) << 6;
691 Value |= (op & UINT64_C(4095));
692 Value = adjustPqBitsSpls(Inst: MI, Value, STI);
693 break;
694 }
695 case Lanai::BRIND_CC: {
696 // op: Rs1
697 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
698 op &= UINT64_C(31);
699 op <<= 18;
700 Value |= op;
701 // op: DDDI
702 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
703 Value |= (op & UINT64_C(1)) << 16;
704 Value |= (op & UINT64_C(14)) >> 1;
705 break;
706 }
707 case Lanai::SCC: {
708 // op: Rs1
709 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
710 op &= UINT64_C(31);
711 op <<= 18;
712 Value |= op;
713 // op: DDDI
714 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
715 Value |= (op & UINT64_C(14)) << 24;
716 Value |= (op & UINT64_C(1));
717 break;
718 }
719 case Lanai::SFSUB_F_RR: {
720 // op: Rs1
721 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
722 op &= UINT64_C(31);
723 op <<= 18;
724 Value |= op;
725 // op: Rs2
726 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
727 op &= UINT64_C(31);
728 op <<= 11;
729 Value |= op;
730 break;
731 }
732 case Lanai::BRIND_CCA: {
733 // op: Rs1
734 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
735 op &= UINT64_C(31);
736 op <<= 18;
737 Value |= op;
738 // op: Rs2
739 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
740 op &= UINT64_C(31);
741 op <<= 11;
742 Value |= op;
743 // op: DDDI
744 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 2), Fixups, SubtargetInfo: STI);
745 Value |= (op & UINT64_C(1)) << 16;
746 Value |= (op & UINT64_C(14)) >> 1;
747 break;
748 }
749 case Lanai::SFSUB_F_RI_HI:
750 case Lanai::SFSUB_F_RI_LO: {
751 // op: Rs1
752 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
753 op &= UINT64_C(31);
754 op <<= 18;
755 Value |= op;
756 // op: imm16
757 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
758 op &= UINT64_C(65535);
759 Value |= op;
760 break;
761 }
762 case Lanai::JR: {
763 // op: Rs2
764 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 0), Fixups, SubtargetInfo: STI);
765 op &= UINT64_C(31);
766 op <<= 11;
767 Value |= op;
768 break;
769 }
770 case Lanai::BT: {
771 // op: addr
772 op = getBranchTargetOpValue(Inst: MI, OpNo: 0, Fixups, SubtargetInfo: STI);
773 op &= UINT64_C(33554428);
774 Value |= op;
775 break;
776 }
777 case Lanai::BRCC: {
778 // op: addr
779 op = getBranchTargetOpValue(Inst: MI, OpNo: 0, Fixups, SubtargetInfo: STI);
780 op &= UINT64_C(33554428);
781 Value |= op;
782 // op: DDDI
783 op = getMachineOpValue(Inst: MI, MCOp: MI.getOperand(i: 1), Fixups, SubtargetInfo: STI);
784 Value |= (op & UINT64_C(14)) << 24;
785 Value |= (op & UINT64_C(1));
786 break;
787 }
788 default:
789 std::string msg;
790 raw_string_ostream Msg(msg);
791 Msg << "Not supported instr: " << MI;
792 report_fatal_error(reason: Msg.str().c_str());
793 }
794 return Value;
795}
796
797#ifdef GET_OPERAND_BIT_OFFSET
798#undef GET_OPERAND_BIT_OFFSET
799
800uint32_t LanaiMCCodeEmitter::getOperandBitOffset(const MCInst &MI,
801 unsigned OpNum,
802 const MCSubtargetInfo &STI) const {
803 switch (MI.getOpcode()) {
804 case Lanai::LOG0:
805 case Lanai::LOG1:
806 case Lanai::LOG2:
807 case Lanai::LOG3:
808 case Lanai::LOG4:
809 case Lanai::NOP:
810 case Lanai::RET: {
811 break;
812 }
813 case Lanai::ADDC_F_R:
814 case Lanai::ADDC_R:
815 case Lanai::ADD_F_R:
816 case Lanai::ADD_R:
817 case Lanai::AND_F_R:
818 case Lanai::AND_R:
819 case Lanai::OR_F_R:
820 case Lanai::OR_R:
821 case Lanai::SELECT:
822 case Lanai::SHL_F_R:
823 case Lanai::SHL_R:
824 case Lanai::SRA_F_R:
825 case Lanai::SRA_R:
826 case Lanai::SRL_F_R:
827 case Lanai::SRL_R:
828 case Lanai::SUBB_F_R:
829 case Lanai::SUBB_R:
830 case Lanai::SUB_F_R:
831 case Lanai::SUB_R:
832 case Lanai::XOR_F_R:
833 case Lanai::XOR_R: {
834 switch (OpNum) {
835 case 0:
836 // op: Rd
837 return 23;
838 case 1:
839 // op: Rs1
840 return 18;
841 case 2:
842 // op: Rs2
843 return 11;
844 case 3:
845 // op: DDDI
846 return 0;
847 }
848 break;
849 }
850 case Lanai::ADDC_F_I_HI:
851 case Lanai::ADDC_F_I_LO:
852 case Lanai::ADDC_I_HI:
853 case Lanai::ADDC_I_LO:
854 case Lanai::ADD_F_I_HI:
855 case Lanai::ADD_F_I_LO:
856 case Lanai::ADD_I_HI:
857 case Lanai::ADD_I_LO:
858 case Lanai::AND_F_I_HI:
859 case Lanai::AND_F_I_LO:
860 case Lanai::AND_I_HI:
861 case Lanai::AND_I_LO:
862 case Lanai::OR_F_I_HI:
863 case Lanai::OR_F_I_LO:
864 case Lanai::OR_I_HI:
865 case Lanai::OR_I_LO:
866 case Lanai::SA_F_I:
867 case Lanai::SA_I:
868 case Lanai::SL_F_I:
869 case Lanai::SL_I:
870 case Lanai::SUBB_F_I_HI:
871 case Lanai::SUBB_F_I_LO:
872 case Lanai::SUBB_I_HI:
873 case Lanai::SUBB_I_LO:
874 case Lanai::SUB_F_I_HI:
875 case Lanai::SUB_F_I_LO:
876 case Lanai::SUB_I_HI:
877 case Lanai::SUB_I_LO:
878 case Lanai::XOR_F_I_HI:
879 case Lanai::XOR_F_I_LO:
880 case Lanai::XOR_I_HI:
881 case Lanai::XOR_I_LO: {
882 switch (OpNum) {
883 case 0:
884 // op: Rd
885 return 23;
886 case 1:
887 // op: Rs1
888 return 18;
889 case 2:
890 // op: imm16
891 return 0;
892 }
893 break;
894 }
895 case Lanai::LEADZ:
896 case Lanai::POPC:
897 case Lanai::TRAILZ: {
898 switch (OpNum) {
899 case 0:
900 // op: Rd
901 return 23;
902 case 1:
903 // op: Rs1
904 return 18;
905 }
906 break;
907 }
908 case Lanai::STADDR:
909 case Lanai::STB_RI:
910 case Lanai::STH_RI:
911 case Lanai::SW_RI: {
912 switch (OpNum) {
913 case 0:
914 // op: Rd
915 return 23;
916 case 1:
917 // op: dst
918 return 0;
919 }
920 break;
921 }
922 case Lanai::STB_RR:
923 case Lanai::STH_RR:
924 case Lanai::SW_RR: {
925 switch (OpNum) {
926 case 0:
927 // op: Rd
928 return 23;
929 case 1:
930 // op: dst
931 return 3;
932 }
933 break;
934 }
935 case Lanai::SLI: {
936 switch (OpNum) {
937 case 0:
938 // op: Rd
939 return 23;
940 case 1:
941 // op: imm
942 return 0;
943 }
944 break;
945 }
946 case Lanai::MOVHI: {
947 switch (OpNum) {
948 case 0:
949 // op: Rd
950 return 23;
951 case 1:
952 // op: imm16
953 return 0;
954 }
955 break;
956 }
957 case Lanai::LDADDR:
958 case Lanai::LDBs_RI:
959 case Lanai::LDBz_RI:
960 case Lanai::LDHs_RI:
961 case Lanai::LDHz_RI:
962 case Lanai::LDW_RI: {
963 switch (OpNum) {
964 case 0:
965 // op: Rd
966 return 23;
967 case 1:
968 // op: src
969 return 0;
970 }
971 break;
972 }
973 case Lanai::LDBs_RR:
974 case Lanai::LDBz_RR:
975 case Lanai::LDHs_RR:
976 case Lanai::LDHz_RR:
977 case Lanai::LDW_RR:
978 case Lanai::LDWz_RR: {
979 switch (OpNum) {
980 case 0:
981 // op: Rd
982 return 23;
983 case 1:
984 // op: src
985 return 3;
986 }
987 break;
988 }
989 case Lanai::BRIND_CC:
990 case Lanai::SCC: {
991 switch (OpNum) {
992 case 0:
993 // op: Rs1
994 return 18;
995 case 1:
996 // op: DDDI
997 return 0;
998 }
999 break;
1000 }
1001 case Lanai::BRIND_CCA: {
1002 switch (OpNum) {
1003 case 0:
1004 // op: Rs1
1005 return 18;
1006 case 1:
1007 // op: Rs2
1008 return 11;
1009 case 2:
1010 // op: DDDI
1011 return 0;
1012 }
1013 break;
1014 }
1015 case Lanai::SFSUB_F_RR: {
1016 switch (OpNum) {
1017 case 0:
1018 // op: Rs1
1019 return 18;
1020 case 1:
1021 // op: Rs2
1022 return 11;
1023 }
1024 break;
1025 }
1026 case Lanai::SFSUB_F_RI_HI:
1027 case Lanai::SFSUB_F_RI_LO: {
1028 switch (OpNum) {
1029 case 0:
1030 // op: Rs1
1031 return 18;
1032 case 1:
1033 // op: imm16
1034 return 0;
1035 }
1036 break;
1037 }
1038 case Lanai::JR: {
1039 switch (OpNum) {
1040 case 0:
1041 // op: Rs2
1042 return 11;
1043 }
1044 break;
1045 }
1046 case Lanai::BRCC: {
1047 switch (OpNum) {
1048 case 0:
1049 // op: addr
1050 return 2;
1051 case 1:
1052 // op: DDDI
1053 return 0;
1054 }
1055 break;
1056 }
1057 case Lanai::BT: {
1058 switch (OpNum) {
1059 case 0:
1060 // op: addr
1061 return 2;
1062 }
1063 break;
1064 }
1065 case Lanai::BRR: {
1066 switch (OpNum) {
1067 case 1:
1068 // op: DDDI
1069 return 0;
1070 case 0:
1071 // op: imm16
1072 return 2;
1073 }
1074 break;
1075 }
1076 }
1077 std::string msg;
1078 raw_string_ostream Msg(msg);
1079 Msg << "Not supported instr[opcode]: " << MI << "[" << OpNum << "]";
1080 report_fatal_error(Msg.str().c_str());
1081}
1082
1083#endif // GET_OPERAND_BIT_OFFSET
1084
1085