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