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