1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* Assembly Writer Source Fragment *|
4|* *|
5|* Automatically generated file, do not edit! *|
6|* From: Lanai.td *|
7|* *|
8\*===----------------------------------------------------------------------===*/
9
10/// getMnemonic - This method is automatically generated by tablegen
11/// from the instruction set description.
12std::pair<const char *, uint64_t>
13LanaiInstPrinter::getMnemonic(const MCInst &MI) const {
14
15#ifdef __GNUC__
16#pragma GCC diagnostic push
17#pragma GCC diagnostic ignored "-Woverlength-strings"
18#endif
19 static const char AsmStrs[] = {
20 /* 0 */ "sha\t\000"
21 /* 5 */ "uld.b\t\000"
22 /* 12 */ "st.b\t\000"
23 /* 18 */ "subb\t\000"
24 /* 24 */ "sub\t\000"
25 /* 29 */ "addc\t\000"
26 /* 35 */ "popc\t\000"
27 /* 41 */ "add\t\000"
28 /* 46 */ "uld\t\000"
29 /* 51 */ "and\t\000"
30 /* 56 */ "sha.f\t\000"
31 /* 63 */ "subb.f\t\000"
32 /* 71 */ "sub.f\t\000"
33 /* 78 */ "addc.f\t\000"
34 /* 86 */ "add.f\t\000"
35 /* 93 */ "and.f\t\000"
36 /* 100 */ "sh.f\t\000"
37 /* 106 */ "xor.f\t\000"
38 /* 113 */ "uld.h\t\000"
39 /* 120 */ "st.h\t\000"
40 /* 126 */ "sh\t\000"
41 /* 130 */ "xor\t\000"
42 /* 135 */ "bt\t\000"
43 /* 139 */ "st\t\000"
44 /* 143 */ "mov\t\000"
45 /* 148 */ "leadz\t\000"
46 /* 155 */ "trailz\t\000"
47 /* 163 */ "#ADJDYNALLOC \000"
48 /* 177 */ "#ADJCALLSTACKDOWN \000"
49 /* 196 */ "#ADJCALLSTACKUP \000"
50 /* 213 */ "# XRay Function Patchable RET.\000"
51 /* 244 */ "# XRay Typed Event Log.\000"
52 /* 268 */ "# XRay Custom Event Log.\000"
53 /* 293 */ "sel.\000"
54 /* 298 */ "# XRay Function Enter.\000"
55 /* 321 */ "# XRay Tail Call Exit.\000"
56 /* 344 */ "# XRay Function Exit.\000"
57 /* 366 */ "log_0\000"
58 /* 372 */ "log_1\000"
59 /* 378 */ "log_2\000"
60 /* 384 */ "log_3\000"
61 /* 390 */ "log_4\000"
62 /* 396 */ "LIFETIME_END\000"
63 /* 409 */ "PSEUDO_PROBE\000"
64 /* 422 */ "BUNDLE\000"
65 /* 429 */ "FAKE_USE\000"
66 /* 438 */ "DBG_VALUE\000"
67 /* 448 */ "DBG_INSTR_REF\000"
68 /* 462 */ "DBG_PHI\000"
69 /* 470 */ "DBG_LABEL\000"
70 /* 480 */ "LIFETIME_START\000"
71 /* 495 */ "DBG_VALUE_LIST\000"
72 /* 510 */ "sha\000"
73 /* 514 */ "subb\000"
74 /* 519 */ "sub\000"
75 /* 523 */ "addc\000"
76 /* 528 */ "add\000"
77 /* 532 */ "and\000"
78 /* 536 */ "sha.f\000"
79 /* 542 */ "subb.f\000"
80 /* 549 */ "sub.f\000"
81 /* 555 */ "addc.f\000"
82 /* 562 */ "add.f\000"
83 /* 568 */ "and.f\000"
84 /* 574 */ "sh.f\000"
85 /* 579 */ "xor.f\000"
86 /* 585 */ "sh\000"
87 /* 588 */ "# FEntry call\000"
88 /* 602 */ "ld\t-4[%fp], %pc ! return\000"
89 /* 627 */ "nop\000"
90 /* 631 */ "xor\000"
91 /* 635 */ "s\000"
92};
93#ifdef __GNUC__
94#pragma GCC diagnostic pop
95#endif
96
97 static const uint16_t OpInfo0[] = {
98 0U, // PHI
99 0U, // INLINEASM
100 0U, // INLINEASM_BR
101 0U, // CFI_INSTRUCTION
102 0U, // EH_LABEL
103 0U, // GC_LABEL
104 0U, // ANNOTATION_LABEL
105 0U, // KILL
106 0U, // EXTRACT_SUBREG
107 0U, // INSERT_SUBREG
108 0U, // IMPLICIT_DEF
109 0U, // INIT_UNDEF
110 0U, // SUBREG_TO_REG
111 0U, // COPY_TO_REGCLASS
112 439U, // DBG_VALUE
113 496U, // DBG_VALUE_LIST
114 449U, // DBG_INSTR_REF
115 463U, // DBG_PHI
116 471U, // DBG_LABEL
117 0U, // REG_SEQUENCE
118 0U, // COPY
119 0U, // COPY_LANEMASK
120 423U, // BUNDLE
121 481U, // LIFETIME_START
122 397U, // LIFETIME_END
123 410U, // PSEUDO_PROBE
124 0U, // ARITH_FENCE
125 0U, // STACKMAP
126 589U, // FENTRY_CALL
127 0U, // PATCHPOINT
128 0U, // LOAD_STACK_GUARD
129 0U, // PREALLOCATED_SETUP
130 0U, // PREALLOCATED_ARG
131 0U, // STATEPOINT
132 0U, // LOCAL_ESCAPE
133 0U, // FAULTING_OP
134 0U, // PATCHABLE_OP
135 299U, // PATCHABLE_FUNCTION_ENTER
136 214U, // PATCHABLE_RET
137 345U, // PATCHABLE_FUNCTION_EXIT
138 322U, // PATCHABLE_TAIL_CALL
139 269U, // PATCHABLE_EVENT_CALL
140 245U, // PATCHABLE_TYPED_EVENT_CALL
141 0U, // ICALL_BRANCH_FUNNEL
142 430U, // FAKE_USE
143 0U, // MEMBARRIER
144 0U, // JUMP_TABLE_DEBUG_INFO
145 0U, // RELOC_NONE
146 0U, // CONVERGENCECTRL_ENTRY
147 0U, // CONVERGENCECTRL_ANCHOR
148 0U, // CONVERGENCECTRL_LOOP
149 0U, // CONVERGENCECTRL_GLUE
150 0U, // G_ASSERT_SEXT
151 0U, // G_ASSERT_ZEXT
152 0U, // G_ASSERT_ALIGN
153 0U, // G_ADD
154 0U, // G_SUB
155 0U, // G_MUL
156 0U, // G_SDIV
157 0U, // G_UDIV
158 0U, // G_SREM
159 0U, // G_UREM
160 0U, // G_SDIVREM
161 0U, // G_UDIVREM
162 0U, // G_AND
163 0U, // G_OR
164 0U, // G_XOR
165 0U, // G_ABDS
166 0U, // G_ABDU
167 0U, // G_UAVGFLOOR
168 0U, // G_UAVGCEIL
169 0U, // G_SAVGFLOOR
170 0U, // G_SAVGCEIL
171 0U, // G_IMPLICIT_DEF
172 0U, // G_PHI
173 0U, // G_FRAME_INDEX
174 0U, // G_GLOBAL_VALUE
175 0U, // G_PTRAUTH_GLOBAL_VALUE
176 0U, // G_CONSTANT_POOL
177 0U, // G_EXTRACT
178 0U, // G_UNMERGE_VALUES
179 0U, // G_INSERT
180 0U, // G_MERGE_VALUES
181 0U, // G_BUILD_VECTOR
182 0U, // G_BUILD_VECTOR_TRUNC
183 0U, // G_CONCAT_VECTORS
184 0U, // G_PTRTOINT
185 0U, // G_INTTOPTR
186 0U, // G_BITCAST
187 0U, // G_FREEZE
188 0U, // G_CONSTANT_FOLD_BARRIER
189 0U, // G_INTRINSIC_FPTRUNC_ROUND
190 0U, // G_INTRINSIC_TRUNC
191 0U, // G_INTRINSIC_ROUND
192 0U, // G_INTRINSIC_LRINT
193 0U, // G_INTRINSIC_LLRINT
194 0U, // G_INTRINSIC_ROUNDEVEN
195 0U, // G_READCYCLECOUNTER
196 0U, // G_READSTEADYCOUNTER
197 0U, // G_LOAD
198 0U, // G_SEXTLOAD
199 0U, // G_ZEXTLOAD
200 0U, // G_INDEXED_LOAD
201 0U, // G_INDEXED_SEXTLOAD
202 0U, // G_INDEXED_ZEXTLOAD
203 0U, // G_STORE
204 0U, // G_INDEXED_STORE
205 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS
206 0U, // G_ATOMIC_CMPXCHG
207 0U, // G_ATOMICRMW_XCHG
208 0U, // G_ATOMICRMW_ADD
209 0U, // G_ATOMICRMW_SUB
210 0U, // G_ATOMICRMW_AND
211 0U, // G_ATOMICRMW_NAND
212 0U, // G_ATOMICRMW_OR
213 0U, // G_ATOMICRMW_XOR
214 0U, // G_ATOMICRMW_MAX
215 0U, // G_ATOMICRMW_MIN
216 0U, // G_ATOMICRMW_UMAX
217 0U, // G_ATOMICRMW_UMIN
218 0U, // G_ATOMICRMW_FADD
219 0U, // G_ATOMICRMW_FSUB
220 0U, // G_ATOMICRMW_FMAX
221 0U, // G_ATOMICRMW_FMIN
222 0U, // G_ATOMICRMW_FMAXIMUM
223 0U, // G_ATOMICRMW_FMINIMUM
224 0U, // G_ATOMICRMW_FMAXIMUMNUM
225 0U, // G_ATOMICRMW_FMINIMUMNUM
226 0U, // G_ATOMICRMW_UINC_WRAP
227 0U, // G_ATOMICRMW_UDEC_WRAP
228 0U, // G_ATOMICRMW_USUB_COND
229 0U, // G_ATOMICRMW_USUB_SAT
230 0U, // G_FENCE
231 0U, // G_PREFETCH
232 0U, // G_BRCOND
233 0U, // G_BRINDIRECT
234 0U, // G_INVOKE_REGION_START
235 0U, // G_INTRINSIC
236 0U, // G_INTRINSIC_W_SIDE_EFFECTS
237 0U, // G_INTRINSIC_CONVERGENT
238 0U, // G_INTRINSIC_CONVERGENT_W_SIDE_EFFECTS
239 0U, // G_ANYEXT
240 0U, // G_TRUNC
241 0U, // G_TRUNC_SSAT_S
242 0U, // G_TRUNC_SSAT_U
243 0U, // G_TRUNC_USAT_U
244 0U, // G_CONSTANT
245 0U, // G_FCONSTANT
246 0U, // G_VASTART
247 0U, // G_VAARG
248 0U, // G_SEXT
249 0U, // G_SEXT_INREG
250 0U, // G_ZEXT
251 0U, // G_SHL
252 0U, // G_LSHR
253 0U, // G_ASHR
254 0U, // G_FSHL
255 0U, // G_FSHR
256 0U, // G_ROTR
257 0U, // G_ROTL
258 0U, // G_ICMP
259 0U, // G_FCMP
260 0U, // G_SCMP
261 0U, // G_UCMP
262 0U, // G_SELECT
263 0U, // G_UADDO
264 0U, // G_UADDE
265 0U, // G_USUBO
266 0U, // G_USUBE
267 0U, // G_SADDO
268 0U, // G_SADDE
269 0U, // G_SSUBO
270 0U, // G_SSUBE
271 0U, // G_UMULO
272 0U, // G_SMULO
273 0U, // G_UMULH
274 0U, // G_SMULH
275 0U, // G_UADDSAT
276 0U, // G_SADDSAT
277 0U, // G_USUBSAT
278 0U, // G_SSUBSAT
279 0U, // G_USHLSAT
280 0U, // G_SSHLSAT
281 0U, // G_SMULFIX
282 0U, // G_UMULFIX
283 0U, // G_SMULFIXSAT
284 0U, // G_UMULFIXSAT
285 0U, // G_SDIVFIX
286 0U, // G_UDIVFIX
287 0U, // G_SDIVFIXSAT
288 0U, // G_UDIVFIXSAT
289 0U, // G_FADD
290 0U, // G_FSUB
291 0U, // G_FMUL
292 0U, // G_FMA
293 0U, // G_FMAD
294 0U, // G_FDIV
295 0U, // G_FREM
296 0U, // G_FMODF
297 0U, // G_FPOW
298 0U, // G_FPOWI
299 0U, // G_FEXP
300 0U, // G_FEXP2
301 0U, // G_FEXP10
302 0U, // G_FLOG
303 0U, // G_FLOG2
304 0U, // G_FLOG10
305 0U, // G_FLDEXP
306 0U, // G_FFREXP
307 0U, // G_FNEG
308 0U, // G_FPEXT
309 0U, // G_FPTRUNC
310 0U, // G_FPTOSI
311 0U, // G_FPTOUI
312 0U, // G_SITOFP
313 0U, // G_UITOFP
314 0U, // G_FPTOSI_SAT
315 0U, // G_FPTOUI_SAT
316 0U, // G_FABS
317 0U, // G_FCOPYSIGN
318 0U, // G_IS_FPCLASS
319 0U, // G_FCANONICALIZE
320 0U, // G_FMINNUM
321 0U, // G_FMAXNUM
322 0U, // G_FMINNUM_IEEE
323 0U, // G_FMAXNUM_IEEE
324 0U, // G_FMINIMUM
325 0U, // G_FMAXIMUM
326 0U, // G_FMINIMUMNUM
327 0U, // G_FMAXIMUMNUM
328 0U, // G_GET_FPENV
329 0U, // G_SET_FPENV
330 0U, // G_RESET_FPENV
331 0U, // G_GET_FPMODE
332 0U, // G_SET_FPMODE
333 0U, // G_RESET_FPMODE
334 0U, // G_GET_ROUNDING
335 0U, // G_SET_ROUNDING
336 0U, // G_PTR_ADD
337 0U, // G_PTRMASK
338 0U, // G_SMIN
339 0U, // G_SMAX
340 0U, // G_UMIN
341 0U, // G_UMAX
342 0U, // G_ABS
343 0U, // G_LROUND
344 0U, // G_LLROUND
345 0U, // G_BR
346 0U, // G_BRJT
347 0U, // G_VSCALE
348 0U, // G_INSERT_SUBVECTOR
349 0U, // G_EXTRACT_SUBVECTOR
350 0U, // G_INSERT_VECTOR_ELT
351 0U, // G_EXTRACT_VECTOR_ELT
352 0U, // G_SHUFFLE_VECTOR
353 0U, // G_SPLAT_VECTOR
354 0U, // G_STEP_VECTOR
355 0U, // G_VECTOR_COMPRESS
356 0U, // G_CTTZ
357 0U, // G_CTTZ_ZERO_UNDEF
358 0U, // G_CTLZ
359 0U, // G_CTLZ_ZERO_UNDEF
360 0U, // G_CTLS
361 0U, // G_CTPOP
362 0U, // G_BSWAP
363 0U, // G_BITREVERSE
364 0U, // G_FCEIL
365 0U, // G_FCOS
366 0U, // G_FSIN
367 0U, // G_FSINCOS
368 0U, // G_FTAN
369 0U, // G_FACOS
370 0U, // G_FASIN
371 0U, // G_FATAN
372 0U, // G_FATAN2
373 0U, // G_FCOSH
374 0U, // G_FSINH
375 0U, // G_FTANH
376 0U, // G_FSQRT
377 0U, // G_FFLOOR
378 0U, // G_FRINT
379 0U, // G_FNEARBYINT
380 0U, // G_ADDRSPACE_CAST
381 0U, // G_BLOCK_ADDR
382 0U, // G_JUMP_TABLE
383 0U, // G_DYN_STACKALLOC
384 0U, // G_STACKSAVE
385 0U, // G_STACKRESTORE
386 0U, // G_STRICT_FADD
387 0U, // G_STRICT_FSUB
388 0U, // G_STRICT_FMUL
389 0U, // G_STRICT_FDIV
390 0U, // G_STRICT_FREM
391 0U, // G_STRICT_FMA
392 0U, // G_STRICT_FSQRT
393 0U, // G_STRICT_FLDEXP
394 0U, // G_READ_REGISTER
395 0U, // G_WRITE_REGISTER
396 0U, // G_MEMCPY
397 0U, // G_MEMCPY_INLINE
398 0U, // G_MEMMOVE
399 0U, // G_MEMSET
400 0U, // G_BZERO
401 0U, // G_TRAP
402 0U, // G_DEBUGTRAP
403 0U, // G_UBSANTRAP
404 0U, // G_VECREDUCE_SEQ_FADD
405 0U, // G_VECREDUCE_SEQ_FMUL
406 0U, // G_VECREDUCE_FADD
407 0U, // G_VECREDUCE_FMUL
408 0U, // G_VECREDUCE_FMAX
409 0U, // G_VECREDUCE_FMIN
410 0U, // G_VECREDUCE_FMAXIMUM
411 0U, // G_VECREDUCE_FMINIMUM
412 0U, // G_VECREDUCE_ADD
413 0U, // G_VECREDUCE_MUL
414 0U, // G_VECREDUCE_AND
415 0U, // G_VECREDUCE_OR
416 0U, // G_VECREDUCE_XOR
417 0U, // G_VECREDUCE_SMAX
418 0U, // G_VECREDUCE_SMIN
419 0U, // G_VECREDUCE_UMAX
420 0U, // G_VECREDUCE_UMIN
421 0U, // G_SBFX
422 0U, // G_UBFX
423 1202U, // ADJCALLSTACKDOWN
424 1221U, // ADJCALLSTACKUP
425 1188U, // ADJDYNALLOC
426 0U, // CALL
427 0U, // CALLR
428 18511U, // ADDC_F_I_HI
429 34895U, // ADDC_F_I_LO
430 3628U, // ADDC_F_R
431 18462U, // ADDC_I_HI
432 34846U, // ADDC_I_LO
433 3596U, // ADDC_R
434 18519U, // ADD_F_I_HI
435 34903U, // ADD_F_I_LO
436 3635U, // ADD_F_R
437 18474U, // ADD_I_HI
438 34858U, // ADD_I_LO
439 3601U, // ADD_R
440 51294U, // AND_F_I_HI
441 2142U, // AND_F_I_LO
442 3641U, // AND_F_R
443 51252U, // AND_I_HI
444 2100U, // AND_I_LO
445 3605U, // AND_R
446 20998U, // BRCC
447 20998U, // BRIND_CC
448 5638U, // BRIND_CCA
449 37382U, // BRR
450 50312U, // BT
451 50312U, // JR
452 6192U, // LDADDR
453 7175U, // LDBs_RI
454 8199U, // LDBs_RR
455 7174U, // LDBz_RI
456 8198U, // LDBz_RR
457 7283U, // LDHs_RI
458 8307U, // LDHs_RR
459 7282U, // LDHz_RI
460 8306U, // LDHz_RR
461 9263U, // LDW_RI
462 8240U, // LDW_RR
463 8239U, // LDWz_RR
464 2197U, // LEADZ
465 367U, // LOG0
466 373U, // LOG1
467 379U, // LOG2
468 385U, // LOG3
469 391U, // LOG4
470 10384U, // MOVHI
471 628U, // NOP
472 18540U, // OR_F_I_HI
473 34924U, // OR_F_I_LO
474 3653U, // OR_F_R
475 18564U, // OR_I_HI
476 34948U, // OR_I_LO
477 3705U, // OR_R
478 2084U, // POPC
479 603U, // RET
480 34873U, // SA_F_I
481 34817U, // SA_I
482 21116U, // SCC
483 11558U, // SELECT
484 17480U, // SFSUB_F_RI_HI
485 17480U, // SFSUB_F_RI_LO
486 17480U, // SFSUB_F_RR
487 3647U, // SHL_F_R
488 3658U, // SHL_R
489 2192U, // SLI
490 34917U, // SL_F_I
491 34943U, // SL_I
492 3609U, // SRA_F_R
493 3583U, // SRA_R
494 3647U, // SRL_F_R
495 3658U, // SRL_R
496 17548U, // STADDR
497 17421U, // STB_RI
498 17421U, // STB_RR
499 17529U, // STH_RI
500 17529U, // STH_RR
501 18496U, // SUBB_F_I_HI
502 34880U, // SUBB_F_I_LO
503 3615U, // SUBB_F_R
504 18451U, // SUBB_I_HI
505 34835U, // SUBB_I_LO
506 3587U, // SUBB_R
507 18504U, // SUB_F_I_HI
508 34888U, // SUB_F_I_LO
509 3622U, // SUB_F_R
510 18457U, // SUB_I_HI
511 34841U, // SUB_I_LO
512 3592U, // SUB_R
513 17548U, // SW_RI
514 17548U, // SW_RR
515 2204U, // TRAILZ
516 18539U, // XOR_F_I_HI
517 34923U, // XOR_F_I_LO
518 3652U, // XOR_F_R
519 18563U, // XOR_I_HI
520 34947U, // XOR_I_LO
521 3704U, // XOR_R
522 };
523
524 static const uint8_t OpInfo1[] = {
525 0U, // PHI
526 0U, // INLINEASM
527 0U, // INLINEASM_BR
528 0U, // CFI_INSTRUCTION
529 0U, // EH_LABEL
530 0U, // GC_LABEL
531 0U, // ANNOTATION_LABEL
532 0U, // KILL
533 0U, // EXTRACT_SUBREG
534 0U, // INSERT_SUBREG
535 0U, // IMPLICIT_DEF
536 0U, // INIT_UNDEF
537 0U, // SUBREG_TO_REG
538 0U, // COPY_TO_REGCLASS
539 0U, // DBG_VALUE
540 0U, // DBG_VALUE_LIST
541 0U, // DBG_INSTR_REF
542 0U, // DBG_PHI
543 0U, // DBG_LABEL
544 0U, // REG_SEQUENCE
545 0U, // COPY
546 0U, // COPY_LANEMASK
547 0U, // BUNDLE
548 0U, // LIFETIME_START
549 0U, // LIFETIME_END
550 0U, // PSEUDO_PROBE
551 0U, // ARITH_FENCE
552 0U, // STACKMAP
553 0U, // FENTRY_CALL
554 0U, // PATCHPOINT
555 0U, // LOAD_STACK_GUARD
556 0U, // PREALLOCATED_SETUP
557 0U, // PREALLOCATED_ARG
558 0U, // STATEPOINT
559 0U, // LOCAL_ESCAPE
560 0U, // FAULTING_OP
561 0U, // PATCHABLE_OP
562 0U, // PATCHABLE_FUNCTION_ENTER
563 0U, // PATCHABLE_RET
564 0U, // PATCHABLE_FUNCTION_EXIT
565 0U, // PATCHABLE_TAIL_CALL
566 0U, // PATCHABLE_EVENT_CALL
567 0U, // PATCHABLE_TYPED_EVENT_CALL
568 0U, // ICALL_BRANCH_FUNNEL
569 0U, // FAKE_USE
570 0U, // MEMBARRIER
571 0U, // JUMP_TABLE_DEBUG_INFO
572 0U, // RELOC_NONE
573 0U, // CONVERGENCECTRL_ENTRY
574 0U, // CONVERGENCECTRL_ANCHOR
575 0U, // CONVERGENCECTRL_LOOP
576 0U, // CONVERGENCECTRL_GLUE
577 0U, // G_ASSERT_SEXT
578 0U, // G_ASSERT_ZEXT
579 0U, // G_ASSERT_ALIGN
580 0U, // G_ADD
581 0U, // G_SUB
582 0U, // G_MUL
583 0U, // G_SDIV
584 0U, // G_UDIV
585 0U, // G_SREM
586 0U, // G_UREM
587 0U, // G_SDIVREM
588 0U, // G_UDIVREM
589 0U, // G_AND
590 0U, // G_OR
591 0U, // G_XOR
592 0U, // G_ABDS
593 0U, // G_ABDU
594 0U, // G_UAVGFLOOR
595 0U, // G_UAVGCEIL
596 0U, // G_SAVGFLOOR
597 0U, // G_SAVGCEIL
598 0U, // G_IMPLICIT_DEF
599 0U, // G_PHI
600 0U, // G_FRAME_INDEX
601 0U, // G_GLOBAL_VALUE
602 0U, // G_PTRAUTH_GLOBAL_VALUE
603 0U, // G_CONSTANT_POOL
604 0U, // G_EXTRACT
605 0U, // G_UNMERGE_VALUES
606 0U, // G_INSERT
607 0U, // G_MERGE_VALUES
608 0U, // G_BUILD_VECTOR
609 0U, // G_BUILD_VECTOR_TRUNC
610 0U, // G_CONCAT_VECTORS
611 0U, // G_PTRTOINT
612 0U, // G_INTTOPTR
613 0U, // G_BITCAST
614 0U, // G_FREEZE
615 0U, // G_CONSTANT_FOLD_BARRIER
616 0U, // G_INTRINSIC_FPTRUNC_ROUND
617 0U, // G_INTRINSIC_TRUNC
618 0U, // G_INTRINSIC_ROUND
619 0U, // G_INTRINSIC_LRINT
620 0U, // G_INTRINSIC_LLRINT
621 0U, // G_INTRINSIC_ROUNDEVEN
622 0U, // G_READCYCLECOUNTER
623 0U, // G_READSTEADYCOUNTER
624 0U, // G_LOAD
625 0U, // G_SEXTLOAD
626 0U, // G_ZEXTLOAD
627 0U, // G_INDEXED_LOAD
628 0U, // G_INDEXED_SEXTLOAD
629 0U, // G_INDEXED_ZEXTLOAD
630 0U, // G_STORE
631 0U, // G_INDEXED_STORE
632 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS
633 0U, // G_ATOMIC_CMPXCHG
634 0U, // G_ATOMICRMW_XCHG
635 0U, // G_ATOMICRMW_ADD
636 0U, // G_ATOMICRMW_SUB
637 0U, // G_ATOMICRMW_AND
638 0U, // G_ATOMICRMW_NAND
639 0U, // G_ATOMICRMW_OR
640 0U, // G_ATOMICRMW_XOR
641 0U, // G_ATOMICRMW_MAX
642 0U, // G_ATOMICRMW_MIN
643 0U, // G_ATOMICRMW_UMAX
644 0U, // G_ATOMICRMW_UMIN
645 0U, // G_ATOMICRMW_FADD
646 0U, // G_ATOMICRMW_FSUB
647 0U, // G_ATOMICRMW_FMAX
648 0U, // G_ATOMICRMW_FMIN
649 0U, // G_ATOMICRMW_FMAXIMUM
650 0U, // G_ATOMICRMW_FMINIMUM
651 0U, // G_ATOMICRMW_FMAXIMUMNUM
652 0U, // G_ATOMICRMW_FMINIMUMNUM
653 0U, // G_ATOMICRMW_UINC_WRAP
654 0U, // G_ATOMICRMW_UDEC_WRAP
655 0U, // G_ATOMICRMW_USUB_COND
656 0U, // G_ATOMICRMW_USUB_SAT
657 0U, // G_FENCE
658 0U, // G_PREFETCH
659 0U, // G_BRCOND
660 0U, // G_BRINDIRECT
661 0U, // G_INVOKE_REGION_START
662 0U, // G_INTRINSIC
663 0U, // G_INTRINSIC_W_SIDE_EFFECTS
664 0U, // G_INTRINSIC_CONVERGENT
665 0U, // G_INTRINSIC_CONVERGENT_W_SIDE_EFFECTS
666 0U, // G_ANYEXT
667 0U, // G_TRUNC
668 0U, // G_TRUNC_SSAT_S
669 0U, // G_TRUNC_SSAT_U
670 0U, // G_TRUNC_USAT_U
671 0U, // G_CONSTANT
672 0U, // G_FCONSTANT
673 0U, // G_VASTART
674 0U, // G_VAARG
675 0U, // G_SEXT
676 0U, // G_SEXT_INREG
677 0U, // G_ZEXT
678 0U, // G_SHL
679 0U, // G_LSHR
680 0U, // G_ASHR
681 0U, // G_FSHL
682 0U, // G_FSHR
683 0U, // G_ROTR
684 0U, // G_ROTL
685 0U, // G_ICMP
686 0U, // G_FCMP
687 0U, // G_SCMP
688 0U, // G_UCMP
689 0U, // G_SELECT
690 0U, // G_UADDO
691 0U, // G_UADDE
692 0U, // G_USUBO
693 0U, // G_USUBE
694 0U, // G_SADDO
695 0U, // G_SADDE
696 0U, // G_SSUBO
697 0U, // G_SSUBE
698 0U, // G_UMULO
699 0U, // G_SMULO
700 0U, // G_UMULH
701 0U, // G_SMULH
702 0U, // G_UADDSAT
703 0U, // G_SADDSAT
704 0U, // G_USUBSAT
705 0U, // G_SSUBSAT
706 0U, // G_USHLSAT
707 0U, // G_SSHLSAT
708 0U, // G_SMULFIX
709 0U, // G_UMULFIX
710 0U, // G_SMULFIXSAT
711 0U, // G_UMULFIXSAT
712 0U, // G_SDIVFIX
713 0U, // G_UDIVFIX
714 0U, // G_SDIVFIXSAT
715 0U, // G_UDIVFIXSAT
716 0U, // G_FADD
717 0U, // G_FSUB
718 0U, // G_FMUL
719 0U, // G_FMA
720 0U, // G_FMAD
721 0U, // G_FDIV
722 0U, // G_FREM
723 0U, // G_FMODF
724 0U, // G_FPOW
725 0U, // G_FPOWI
726 0U, // G_FEXP
727 0U, // G_FEXP2
728 0U, // G_FEXP10
729 0U, // G_FLOG
730 0U, // G_FLOG2
731 0U, // G_FLOG10
732 0U, // G_FLDEXP
733 0U, // G_FFREXP
734 0U, // G_FNEG
735 0U, // G_FPEXT
736 0U, // G_FPTRUNC
737 0U, // G_FPTOSI
738 0U, // G_FPTOUI
739 0U, // G_SITOFP
740 0U, // G_UITOFP
741 0U, // G_FPTOSI_SAT
742 0U, // G_FPTOUI_SAT
743 0U, // G_FABS
744 0U, // G_FCOPYSIGN
745 0U, // G_IS_FPCLASS
746 0U, // G_FCANONICALIZE
747 0U, // G_FMINNUM
748 0U, // G_FMAXNUM
749 0U, // G_FMINNUM_IEEE
750 0U, // G_FMAXNUM_IEEE
751 0U, // G_FMINIMUM
752 0U, // G_FMAXIMUM
753 0U, // G_FMINIMUMNUM
754 0U, // G_FMAXIMUMNUM
755 0U, // G_GET_FPENV
756 0U, // G_SET_FPENV
757 0U, // G_RESET_FPENV
758 0U, // G_GET_FPMODE
759 0U, // G_SET_FPMODE
760 0U, // G_RESET_FPMODE
761 0U, // G_GET_ROUNDING
762 0U, // G_SET_ROUNDING
763 0U, // G_PTR_ADD
764 0U, // G_PTRMASK
765 0U, // G_SMIN
766 0U, // G_SMAX
767 0U, // G_UMIN
768 0U, // G_UMAX
769 0U, // G_ABS
770 0U, // G_LROUND
771 0U, // G_LLROUND
772 0U, // G_BR
773 0U, // G_BRJT
774 0U, // G_VSCALE
775 0U, // G_INSERT_SUBVECTOR
776 0U, // G_EXTRACT_SUBVECTOR
777 0U, // G_INSERT_VECTOR_ELT
778 0U, // G_EXTRACT_VECTOR_ELT
779 0U, // G_SHUFFLE_VECTOR
780 0U, // G_SPLAT_VECTOR
781 0U, // G_STEP_VECTOR
782 0U, // G_VECTOR_COMPRESS
783 0U, // G_CTTZ
784 0U, // G_CTTZ_ZERO_UNDEF
785 0U, // G_CTLZ
786 0U, // G_CTLZ_ZERO_UNDEF
787 0U, // G_CTLS
788 0U, // G_CTPOP
789 0U, // G_BSWAP
790 0U, // G_BITREVERSE
791 0U, // G_FCEIL
792 0U, // G_FCOS
793 0U, // G_FSIN
794 0U, // G_FSINCOS
795 0U, // G_FTAN
796 0U, // G_FACOS
797 0U, // G_FASIN
798 0U, // G_FATAN
799 0U, // G_FATAN2
800 0U, // G_FCOSH
801 0U, // G_FSINH
802 0U, // G_FTANH
803 0U, // G_FSQRT
804 0U, // G_FFLOOR
805 0U, // G_FRINT
806 0U, // G_FNEARBYINT
807 0U, // G_ADDRSPACE_CAST
808 0U, // G_BLOCK_ADDR
809 0U, // G_JUMP_TABLE
810 0U, // G_DYN_STACKALLOC
811 0U, // G_STACKSAVE
812 0U, // G_STACKRESTORE
813 0U, // G_STRICT_FADD
814 0U, // G_STRICT_FSUB
815 0U, // G_STRICT_FMUL
816 0U, // G_STRICT_FDIV
817 0U, // G_STRICT_FREM
818 0U, // G_STRICT_FMA
819 0U, // G_STRICT_FSQRT
820 0U, // G_STRICT_FLDEXP
821 0U, // G_READ_REGISTER
822 0U, // G_WRITE_REGISTER
823 0U, // G_MEMCPY
824 0U, // G_MEMCPY_INLINE
825 0U, // G_MEMMOVE
826 0U, // G_MEMSET
827 0U, // G_BZERO
828 0U, // G_TRAP
829 0U, // G_DEBUGTRAP
830 0U, // G_UBSANTRAP
831 0U, // G_VECREDUCE_SEQ_FADD
832 0U, // G_VECREDUCE_SEQ_FMUL
833 0U, // G_VECREDUCE_FADD
834 0U, // G_VECREDUCE_FMUL
835 0U, // G_VECREDUCE_FMAX
836 0U, // G_VECREDUCE_FMIN
837 0U, // G_VECREDUCE_FMAXIMUM
838 0U, // G_VECREDUCE_FMINIMUM
839 0U, // G_VECREDUCE_ADD
840 0U, // G_VECREDUCE_MUL
841 0U, // G_VECREDUCE_AND
842 0U, // G_VECREDUCE_OR
843 0U, // G_VECREDUCE_XOR
844 0U, // G_VECREDUCE_SMAX
845 0U, // G_VECREDUCE_SMIN
846 0U, // G_VECREDUCE_UMAX
847 0U, // G_VECREDUCE_UMIN
848 0U, // G_SBFX
849 0U, // G_UBFX
850 0U, // ADJCALLSTACKDOWN
851 0U, // ADJCALLSTACKUP
852 0U, // ADJDYNALLOC
853 0U, // CALL
854 0U, // CALLR
855 0U, // ADDC_F_I_HI
856 0U, // ADDC_F_I_LO
857 0U, // ADDC_F_R
858 0U, // ADDC_I_HI
859 0U, // ADDC_I_LO
860 0U, // ADDC_R
861 0U, // ADD_F_I_HI
862 0U, // ADD_F_I_LO
863 0U, // ADD_F_R
864 0U, // ADD_I_HI
865 0U, // ADD_I_LO
866 0U, // ADD_R
867 0U, // AND_F_I_HI
868 1U, // AND_F_I_LO
869 0U, // AND_F_R
870 0U, // AND_I_HI
871 1U, // AND_I_LO
872 0U, // AND_R
873 1U, // BRCC
874 1U, // BRIND_CC
875 0U, // BRIND_CCA
876 1U, // BRR
877 1U, // BT
878 1U, // JR
879 0U, // LDADDR
880 0U, // LDBs_RI
881 0U, // LDBs_RR
882 0U, // LDBz_RI
883 0U, // LDBz_RR
884 0U, // LDHs_RI
885 0U, // LDHs_RR
886 0U, // LDHz_RI
887 0U, // LDHz_RR
888 0U, // LDW_RI
889 0U, // LDW_RR
890 0U, // LDWz_RR
891 2U, // LEADZ
892 0U, // LOG0
893 0U, // LOG1
894 0U, // LOG2
895 0U, // LOG3
896 0U, // LOG4
897 0U, // MOVHI
898 0U, // NOP
899 0U, // OR_F_I_HI
900 0U, // OR_F_I_LO
901 0U, // OR_F_R
902 0U, // OR_I_HI
903 0U, // OR_I_LO
904 0U, // OR_R
905 2U, // POPC
906 0U, // RET
907 0U, // SA_F_I
908 0U, // SA_I
909 1U, // SCC
910 0U, // SELECT
911 2U, // SFSUB_F_RI_HI
912 6U, // SFSUB_F_RI_LO
913 6U, // SFSUB_F_RR
914 0U, // SHL_F_R
915 0U, // SHL_R
916 2U, // SLI
917 0U, // SL_F_I
918 0U, // SL_I
919 0U, // SRA_F_R
920 0U, // SRA_R
921 0U, // SRL_F_R
922 0U, // SRL_R
923 10U, // STADDR
924 14U, // STB_RI
925 18U, // STB_RR
926 14U, // STH_RI
927 18U, // STH_RR
928 0U, // SUBB_F_I_HI
929 0U, // SUBB_F_I_LO
930 0U, // SUBB_F_R
931 0U, // SUBB_I_HI
932 0U, // SUBB_I_LO
933 0U, // SUBB_R
934 0U, // SUB_F_I_HI
935 0U, // SUB_F_I_LO
936 0U, // SUB_F_R
937 0U, // SUB_I_HI
938 0U, // SUB_I_LO
939 0U, // SUB_R
940 22U, // SW_RI
941 18U, // SW_RR
942 2U, // TRAILZ
943 0U, // XOR_F_I_HI
944 0U, // XOR_F_I_LO
945 0U, // XOR_F_R
946 0U, // XOR_I_HI
947 0U, // XOR_I_LO
948 0U, // XOR_R
949 };
950
951 // Emit the opcode for the instruction.
952 uint32_t Bits = 0;
953 Bits |= OpInfo0[MI.getOpcode()] << 0;
954 Bits |= OpInfo1[MI.getOpcode()] << 16;
955 if (Bits == 0)
956 return {nullptr, Bits};
957 return {AsmStrs+(Bits & 1023)-1, Bits};
958
959}
960/// printInstruction - This method is automatically generated by tablegen
961/// from the instruction set description.
962LLVM_NO_PROFILE_INSTRUMENT_FUNCTION
963void LanaiInstPrinter::printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O) {
964 O << "\t";
965
966 auto MnemonicInfo = getMnemonic(MI: *MI);
967
968 O << MnemonicInfo.first;
969
970 uint32_t Bits = MnemonicInfo.second;
971 assert(Bits != 0 && "Cannot print this instruction.");
972
973 // Fragment 0 encoded into 4 bits for 12 unique commands.
974 switch ((Bits >> 10) & 15) {
975 default: llvm_unreachable("Invalid command number.");
976 case 0:
977 // DBG_VALUE, DBG_VALUE_LIST, DBG_INSTR_REF, DBG_PHI, DBG_LABEL, BUNDLE, ...
978 return;
979 break;
980 case 1:
981 // ADJCALLSTACKDOWN, ADJCALLSTACKUP, ADJDYNALLOC, BT, JR, SFSUB_F_RI_HI, ...
982 printOperand(MI, OpNo: 0, O);
983 break;
984 case 2:
985 // ADDC_F_I_HI, ADDC_F_I_LO, ADDC_I_HI, ADDC_I_LO, ADD_F_I_HI, ADD_F_I_LO...
986 printOperand(MI, OpNo: 1, O);
987 O << ", ";
988 break;
989 case 3:
990 // ADDC_F_R, ADDC_R, ADD_F_R, ADD_R, AND_F_R, AND_R, OR_F_R, OR_R, SHL_F_...
991 printPredicateOperand(MI, OpNum: 3, O);
992 O << "\t";
993 printOperand(MI, OpNo: 1, O);
994 O << ", ";
995 printOperand(MI, OpNo: 2, O);
996 O << ", ";
997 printOperand(MI, OpNo: 0, O);
998 return;
999 break;
1000 case 4:
1001 // BRCC, BRIND_CC, BRR, SCC
1002 printCCOperand(MI, OpNo: 1, O);
1003 break;
1004 case 5:
1005 // BRIND_CCA
1006 printCCOperand(MI, OpNo: 2, O);
1007 O << "\t";
1008 printOperand(MI, OpNo: 0, O);
1009 O << " add ";
1010 printOperand(MI, OpNo: 1, O);
1011 return;
1012 break;
1013 case 6:
1014 // LDADDR
1015 printMemImmOperand(MI, OpNo: 1, O);
1016 O << ", ";
1017 printOperand(MI, OpNo: 0, O);
1018 return;
1019 break;
1020 case 7:
1021 // LDBs_RI, LDBz_RI, LDHs_RI, LDHz_RI
1022 printMemSplsOperand(MI, OpNo: 1, O);
1023 O << ", ";
1024 printOperand(MI, OpNo: 0, O);
1025 return;
1026 break;
1027 case 8:
1028 // LDBs_RR, LDBz_RR, LDHs_RR, LDHz_RR, LDW_RR, LDWz_RR
1029 printMemRrOperand(MI, OpNo: 1, O);
1030 O << ", ";
1031 printOperand(MI, OpNo: 0, O);
1032 return;
1033 break;
1034 case 9:
1035 // LDW_RI
1036 printMemRiOperand(MI, OpNo: 1, O);
1037 O << ", ";
1038 printOperand(MI, OpNo: 0, O);
1039 return;
1040 break;
1041 case 10:
1042 // MOVHI
1043 printHi16ImmOperand(MI, OpNo: 1, O);
1044 O << ", ";
1045 printOperand(MI, OpNo: 0, O);
1046 return;
1047 break;
1048 case 11:
1049 // SELECT
1050 printCCOperand(MI, OpNo: 3, O);
1051 O << ' ';
1052 printOperand(MI, OpNo: 1, O);
1053 O << ", ";
1054 printOperand(MI, OpNo: 2, O);
1055 O << ", ";
1056 printOperand(MI, OpNo: 0, O);
1057 return;
1058 break;
1059 }
1060
1061
1062 // Fragment 1 encoded into 4 bits for 10 unique commands.
1063 switch ((Bits >> 14) & 15) {
1064 default: llvm_unreachable("Invalid command number.");
1065 case 0:
1066 // ADJCALLSTACKDOWN, ADJCALLSTACKUP, ADJDYNALLOC
1067 O << ' ';
1068 printOperand(MI, OpNo: 1, O);
1069 return;
1070 break;
1071 case 1:
1072 // ADDC_F_I_HI, ADDC_I_HI, ADD_F_I_HI, ADD_I_HI, OR_F_I_HI, OR_I_HI, SUBB...
1073 printHi16ImmOperand(MI, OpNo: 2, O);
1074 O << ", ";
1075 printOperand(MI, OpNo: 0, O);
1076 return;
1077 break;
1078 case 2:
1079 // ADDC_F_I_LO, ADDC_I_LO, ADD_F_I_LO, ADD_I_LO, OR_F_I_LO, OR_I_LO, SA_F...
1080 printOperand(MI, OpNo: 2, O);
1081 O << ", ";
1082 printOperand(MI, OpNo: 0, O);
1083 return;
1084 break;
1085 case 3:
1086 // AND_F_I_HI, AND_I_HI
1087 printHi16AndImmOperand(MI, OpNo: 2, O);
1088 O << ", ";
1089 printOperand(MI, OpNo: 0, O);
1090 return;
1091 break;
1092 case 4:
1093 // AND_F_I_LO, AND_I_LO
1094 printLo16AndImmOperand(MI, OpNo: 2, O);
1095 O << ", ";
1096 printOperand(MI, OpNo: 0, O);
1097 return;
1098 break;
1099 case 5:
1100 // BRCC, BRIND_CC, SCC
1101 O << "\t";
1102 printOperand(MI, OpNo: 0, O);
1103 return;
1104 break;
1105 case 6:
1106 // BRR
1107 O << ".r\t";
1108 printOperand(MI, OpNo: 0, O);
1109 return;
1110 break;
1111 case 7:
1112 // BT, JR
1113 return;
1114 break;
1115 case 8:
1116 // LEADZ, POPC, SLI, TRAILZ
1117 printOperand(MI, OpNo: 0, O);
1118 return;
1119 break;
1120 case 9:
1121 // SFSUB_F_RI_HI, SFSUB_F_RI_LO, SFSUB_F_RR, STADDR, STB_RI, STB_RR, STH_...
1122 O << ", ";
1123 break;
1124 }
1125
1126
1127 // Fragment 2 encoded into 3 bits for 6 unique commands.
1128 switch ((Bits >> 18) & 7) {
1129 default: llvm_unreachable("Invalid command number.");
1130 case 0:
1131 // SFSUB_F_RI_HI
1132 printHi16ImmOperand(MI, OpNo: 1, O);
1133 O << ", %r0";
1134 return;
1135 break;
1136 case 1:
1137 // SFSUB_F_RI_LO, SFSUB_F_RR
1138 printOperand(MI, OpNo: 1, O);
1139 O << ", %r0";
1140 return;
1141 break;
1142 case 2:
1143 // STADDR
1144 printMemImmOperand(MI, OpNo: 1, O);
1145 return;
1146 break;
1147 case 3:
1148 // STB_RI, STH_RI
1149 printMemSplsOperand(MI, OpNo: 1, O);
1150 return;
1151 break;
1152 case 4:
1153 // STB_RR, STH_RR, SW_RR
1154 printMemRrOperand(MI, OpNo: 1, O);
1155 return;
1156 break;
1157 case 5:
1158 // SW_RI
1159 printMemRiOperand(MI, OpNo: 1, O);
1160 return;
1161 break;
1162 }
1163
1164}
1165
1166
1167/// getRegisterName - This method is automatically generated by tblgen
1168/// from the register set description. This returns the assembler name
1169/// for the specified register.
1170const char *LanaiInstPrinter::getRegisterName(MCRegister Reg) {
1171 unsigned RegNo = Reg.id();
1172 assert(RegNo && RegNo < 41 && "Invalid register number!");
1173
1174
1175#ifdef __GNUC__
1176#pragma GCC diagnostic push
1177#pragma GCC diagnostic ignored "-Woverlength-strings"
1178#endif
1179 static const char AsmStrs[] = {
1180 /* 0 */ "r10\000"
1181 /* 4 */ "r20\000"
1182 /* 8 */ "r30\000"
1183 /* 12 */ "r0\000"
1184 /* 15 */ "r11\000"
1185 /* 19 */ "r21\000"
1186 /* 23 */ "r31\000"
1187 /* 27 */ "rr1\000"
1188 /* 31 */ "r12\000"
1189 /* 35 */ "r22\000"
1190 /* 39 */ "rr2\000"
1191 /* 43 */ "r13\000"
1192 /* 47 */ "r23\000"
1193 /* 51 */ "r3\000"
1194 /* 54 */ "r14\000"
1195 /* 58 */ "r24\000"
1196 /* 62 */ "r4\000"
1197 /* 65 */ "r15\000"
1198 /* 69 */ "r25\000"
1199 /* 73 */ "r5\000"
1200 /* 76 */ "r16\000"
1201 /* 80 */ "r26\000"
1202 /* 84 */ "r6\000"
1203 /* 87 */ "r17\000"
1204 /* 91 */ "r27\000"
1205 /* 95 */ "r7\000"
1206 /* 98 */ "r18\000"
1207 /* 102 */ "r28\000"
1208 /* 106 */ "r8\000"
1209 /* 109 */ "r19\000"
1210 /* 113 */ "r29\000"
1211 /* 117 */ "r9\000"
1212 /* 120 */ "rca\000"
1213 /* 124 */ "pc\000"
1214 /* 127 */ "fp\000"
1215 /* 130 */ "sp\000"
1216 /* 133 */ "rv\000"
1217 /* 136 */ "sw\000"
1218};
1219#ifdef __GNUC__
1220#pragma GCC diagnostic pop
1221#endif
1222
1223 static const uint8_t RegAsmOffset[] = {
1224 127, 124, 120, 133, 130, 136, 12, 28, 40, 51, 62, 73, 84, 95,
1225 106, 117, 0, 15, 31, 43, 54, 65, 76, 87, 98, 109, 4, 19,
1226 35, 47, 58, 69, 80, 91, 102, 113, 8, 23, 27, 39,
1227 };
1228
1229 assert (*(AsmStrs+RegAsmOffset[RegNo-1]) &&
1230 "Invalid alt name index for register!");
1231 return AsmStrs+RegAsmOffset[RegNo-1];
1232}
1233
1234#ifdef PRINT_ALIAS_INSTR
1235#undef PRINT_ALIAS_INSTR
1236
1237bool LanaiInstPrinter::printAliasInstr(const MCInst *MI, uint64_t Address, raw_ostream &OS) {
1238 static const PatternsForOpcode OpToPatterns[] = {
1239 {.Opcode: Lanai::ADD_I_HI, .PatternStart: 0, .NumPatterns: 1 },
1240 {.Opcode: Lanai::ADD_I_LO, .PatternStart: 1, .NumPatterns: 1 },
1241 {.Opcode: Lanai::ADD_R, .PatternStart: 2, .NumPatterns: 1 },
1242 {.Opcode: Lanai::AND_I_HI, .PatternStart: 3, .NumPatterns: 1 },
1243 {.Opcode: Lanai::AND_I_LO, .PatternStart: 4, .NumPatterns: 1 },
1244 {.Opcode: Lanai::LDW_RI, .PatternStart: 5, .NumPatterns: 1 },
1245 };
1246
1247 static const AliasPattern Patterns[] = {
1248 // Lanai::ADD_I_HI - 0
1249 {.AsmStrOffset: 0, .AliasCondStart: 0, .NumOperands: 3, .NumConds: 2 },
1250 // Lanai::ADD_I_LO - 1
1251 {.AsmStrOffset: 13, .AliasCondStart: 2, .NumOperands: 3, .NumConds: 2 },
1252 // Lanai::ADD_R - 2
1253 {.AsmStrOffset: 24, .AliasCondStart: 4, .NumOperands: 4, .NumConds: 4 },
1254 // Lanai::AND_I_HI - 3
1255 {.AsmStrOffset: 35, .AliasCondStart: 8, .NumOperands: 3, .NumConds: 2 },
1256 // Lanai::AND_I_LO - 4
1257 {.AsmStrOffset: 48, .AliasCondStart: 10, .NumOperands: 3, .NumConds: 2 },
1258 // Lanai::LDW_RI - 5
1259 {.AsmStrOffset: 61, .AliasCondStart: 12, .NumOperands: 4, .NumConds: 1 },
1260 };
1261
1262 static const AliasPatternCond Conds[] = {
1263 // (ADD_I_HI GPR:$dst, R0, i32hi16:$imm16) - 0
1264 {.Kind: AliasPatternCond::K_RegClass, .Value: Lanai::GPRRegClassID},
1265 {.Kind: AliasPatternCond::K_Reg, .Value: Lanai::R0},
1266 // (ADD_I_LO GPR:$dst, R0, i32lo16z:$imm16) - 2
1267 {.Kind: AliasPatternCond::K_RegClass, .Value: Lanai::GPRRegClassID},
1268 {.Kind: AliasPatternCond::K_Reg, .Value: Lanai::R0},
1269 // (ADD_R GPR:$dst, GPR:$src, R0, (pred 0)) - 4
1270 {.Kind: AliasPatternCond::K_RegClass, .Value: Lanai::GPRRegClassID},
1271 {.Kind: AliasPatternCond::K_RegClass, .Value: Lanai::GPRRegClassID},
1272 {.Kind: AliasPatternCond::K_Reg, .Value: Lanai::R0},
1273 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1274 // (AND_I_HI GPR:$dst, R1, i32hi16and:$imm16) - 8
1275 {.Kind: AliasPatternCond::K_RegClass, .Value: Lanai::GPRRegClassID},
1276 {.Kind: AliasPatternCond::K_Reg, .Value: Lanai::R1},
1277 // (AND_I_LO GPR:$dst, R1, i32lo16and:$imm16) - 10
1278 {.Kind: AliasPatternCond::K_RegClass, .Value: Lanai::GPRRegClassID},
1279 {.Kind: AliasPatternCond::K_Reg, .Value: Lanai::R1},
1280 // (LDW_RI GPR:$dst, MEMri:$src) - 12
1281 {.Kind: AliasPatternCond::K_RegClass, .Value: Lanai::GPRRegClassID},
1282 };
1283
1284 static const char AsmStrings[] =
1285 /* 0 */ "mov $\xFF\x03\x01, $\x01\0"
1286 /* 13 */ "mov $\x03, $\x01\0"
1287 /* 24 */ "mov $\x02, $\x01\0"
1288 /* 35 */ "mov $\xFF\x03\x02, $\x01\0"
1289 /* 48 */ "mov $\xFF\x03\x03, $\x01\0"
1290 /* 61 */ "ld $\xFF\x02\x04, $\x01\0"
1291 ;
1292
1293#ifndef NDEBUG
1294 static struct SortCheck {
1295 SortCheck(ArrayRef<PatternsForOpcode> OpToPatterns) {
1296 assert(std::is_sorted(
1297 OpToPatterns.begin(), OpToPatterns.end(),
1298 [](const PatternsForOpcode &L, const PatternsForOpcode &R) {
1299 return L.Opcode < R.Opcode;
1300 }) &&
1301 "tablegen failed to sort opcode patterns");
1302 }
1303 } sortCheckVar(OpToPatterns);
1304#endif
1305
1306 AliasMatchingData M {
1307 .OpToPatterns: ArrayRef(OpToPatterns),
1308 .Patterns: ArrayRef(Patterns),
1309 .PatternConds: ArrayRef(Conds),
1310 .AsmStrings: StringRef(AsmStrings, std::size(AsmStrings)),
1311 .ValidateMCOperand: nullptr,
1312 };
1313 const char *AsmString = matchAliasPatterns(MI, STI: nullptr, M);
1314 if (!AsmString) return false;
1315
1316 unsigned I = 0;
1317 while (AsmString[I] != ' ' && AsmString[I] != '\t' &&
1318 AsmString[I] != '$' && AsmString[I] != '\0')
1319 ++I;
1320 OS << '\t' << StringRef(AsmString, I);
1321 if (AsmString[I] != '\0') {
1322 if (AsmString[I] == ' ' || AsmString[I] == '\t') {
1323 OS << '\t';
1324 ++I;
1325 }
1326 do {
1327 if (AsmString[I] == '$') {
1328 ++I;
1329 if (AsmString[I] == (char)0xff) {
1330 ++I;
1331 int OpIdx = AsmString[I++] - 1;
1332 int PrintMethodIdx = AsmString[I++] - 1;
1333 printCustomAliasOperand(MI, Address, OpIdx, PrintMethodIdx, O&: OS);
1334 } else
1335 printOperand(MI, OpNo: unsigned(AsmString[I++]) - 1, O&: OS);
1336 } else {
1337 OS << AsmString[I++];
1338 }
1339 } while (AsmString[I] != '\0');
1340 }
1341
1342 return true;
1343}
1344
1345void LanaiInstPrinter::printCustomAliasOperand(
1346 const MCInst *MI, uint64_t Address, unsigned OpIdx,
1347 unsigned PrintMethodIdx,
1348 raw_ostream &OS) {
1349 switch (PrintMethodIdx) {
1350 default:
1351 llvm_unreachable("Unknown PrintMethod kind");
1352 break;
1353 case 0:
1354 printHi16ImmOperand(MI, OpNo: OpIdx, O&: OS);
1355 break;
1356 case 1:
1357 printHi16AndImmOperand(MI, OpNo: OpIdx, O&: OS);
1358 break;
1359 case 2:
1360 printLo16AndImmOperand(MI, OpNo: OpIdx, O&: OS);
1361 break;
1362 case 3:
1363 printMemRiOperand(MI, OpNo: OpIdx, O&: OS);
1364 break;
1365 }
1366}
1367
1368#endif // PRINT_ALIAS_INSTR
1369