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