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