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