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