1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* Assembly Writer Source Fragment *|
4|* *|
5|* Automatically generated file, do not edit! *|
6|* From: AVR.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>
13AVRInstPrinter::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 */ "rolb\t\000"
21 /* 6 */ "elpmb\t\000"
22 /* 13 */ "rorb\t\000"
23 /* 19 */ "sub\t\000"
24 /* 24 */ "lac\t\000"
25 /* 29 */ "brbc\t\000"
26 /* 35 */ "sbc\t\000"
27 /* 40 */ "adc\t\000"
28 /* 45 */ "dec\t\000"
29 /* 50 */ "sbic\t\000"
30 /* 56 */ "inc\t\000"
31 /* 61 */ "cpc\t\000"
32 /* 66 */ "sbrc\t\000"
33 /* 72 */ "spread\t\000"
34 /* 80 */ "add\t\000"
35 /* 85 */ "ldd\t\000"
36 /* 90 */ "bld\t\000"
37 /* 95 */ "and\t\000"
38 /* 100 */ "std\t\000"
39 /* 105 */ "brge\t\000"
40 /* 111 */ "brne\t\000"
41 /* 117 */ "cpse\t\000"
42 /* 123 */ "spwrite\t\000"
43 /* 132 */ "neg\t\000"
44 /* 137 */ "xch\t\000"
45 /* 142 */ "brsh\t\000"
46 /* 148 */ "push\t\000"
47 /* 154 */ "cbi\t\000"
48 /* 159 */ "sbi\t\000"
49 /* 164 */ "subi\t\000"
50 /* 170 */ "sbci\t\000"
51 /* 176 */ "ldi\t\000"
52 /* 181 */ "andi\t\000"
53 /* 187 */ "lslwhi\t\000"
54 /* 195 */ "brmi\t\000"
55 /* 201 */ "cpi\t\000"
56 /* 206 */ "ori\t\000"
57 /* 211 */ "stdstk\t\000"
58 /* 219 */ "stdwstk\t\000"
59 /* 228 */ "rcall\t\000"
60 /* 235 */ "brpl\t\000"
61 /* 241 */ "fmul\t\000"
62 /* 247 */ "com\t\000"
63 /* 252 */ "elpm\t\000"
64 /* 258 */ "lslbn\t\000"
65 /* 265 */ "asrbn\t\000"
66 /* 272 */ "lsrbn\t\000"
67 /* 279 */ "in\t\000"
68 /* 283 */ "lslwn\t\000"
69 /* 290 */ "asrwn\t\000"
70 /* 297 */ "lsrwn\t\000"
71 /* 304 */ "brlo\t\000"
72 /* 310 */ "asrwlo\t\000"
73 /* 318 */ "lsrwlo\t\000"
74 /* 326 */ "swap\t\000"
75 /* 332 */ "cp\t\000"
76 /* 336 */ "rjmp\t\000"
77 /* 342 */ "pop\t\000"
78 /* 347 */ "frmsp\t\000"
79 /* 354 */ "breq\t\000"
80 /* 360 */ "bclr\t\000"
81 /* 366 */ "eor\t\000"
82 /* 371 */ "ror\t\000"
83 /* 376 */ "asr\t\000"
84 /* 381 */ "lsr\t\000"
85 /* 386 */ "las\t\000"
86 /* 391 */ "brbs\t\000"
87 /* 397 */ "lds\t\000"
88 /* 402 */ "des\t\000"
89 /* 407 */ "sbis\t\000"
90 /* 413 */ "fmuls\t\000"
91 /* 420 */ "sbrs\t\000"
92 /* 426 */ "sts\t\000"
93 /* 431 */ "lat\t\000"
94 /* 436 */ "bset\t\000"
95 /* 442 */ "brlt\t\000"
96 /* 448 */ "bst\t\000"
97 /* 453 */ "out\t\000"
98 /* 458 */ "sext\t\000"
99 /* 464 */ "zext\t\000"
100 /* 470 */ "fmulsu\t\000"
101 /* 478 */ "mov\t\000"
102 /* 483 */ "subw\t\000"
103 /* 489 */ "sbcw\t\000"
104 /* 495 */ "adcw\t\000"
105 /* 501 */ "cpcw\t\000"
106 /* 507 */ "addw\t\000"
107 /* 513 */ "lddw\t\000"
108 /* 519 */ "ldw\t\000"
109 /* 524 */ "andw\t\000"
110 /* 530 */ "stdw\t\000"
111 /* 536 */ "negw\t\000"
112 /* 542 */ "pushw\t\000"
113 /* 549 */ "sbiw\t\000"
114 /* 555 */ "subiw\t\000"
115 /* 562 */ "sbciw\t\000"
116 /* 569 */ "adiw\t\000"
117 /* 575 */ "ldiw\t\000"
118 /* 581 */ "andiw\t\000"
119 /* 588 */ "oriw\t\000"
120 /* 594 */ "rolw\t\000"
121 /* 600 */ "lslw\t\000"
122 /* 606 */ "comw\t\000"
123 /* 612 */ "elpmw\t\000"
124 /* 619 */ "inw\t\000"
125 /* 624 */ "cpw\t\000"
126 /* 629 */ "popw\t\000"
127 /* 635 */ "eorw\t\000"
128 /* 641 */ "rorw\t\000"
129 /* 647 */ "asrw\t\000"
130 /* 653 */ "lsrw\t\000"
131 /* 659 */ "ldsw\t\000"
132 /* 665 */ "stsw\t\000"
133 /* 671 */ "stw\t\000"
134 /* 676 */ "outw\t\000"
135 /* 682 */ "movw\t\000"
136 /* 688 */ "frmidx\t\000"
137 /* 696 */ "clrz\t\000"
138 /* 702 */ "spm \000"
139 /* 707 */ "st\t-\000"
140 /* 712 */ "stw\t-\000"
141 /* 718 */ "# XRay Function Patchable RET.\000"
142 /* 749 */ "# XRay Typed Event Log.\000"
143 /* 773 */ "# XRay Custom Event Log.\000"
144 /* 798 */ "# XRay Function Enter.\000"
145 /* 821 */ "# XRay Tail Call Exit.\000"
146 /* 844 */ "# XRay Function Exit.\000"
147 /* 866 */ "LIFETIME_END\000"
148 /* 879 */ "PSEUDO_PROBE\000"
149 /* 892 */ "BUNDLE\000"
150 /* 899 */ "FAKE_USE\000"
151 /* 908 */ "DBG_VALUE\000"
152 /* 918 */ "DBG_INSTR_REF\000"
153 /* 932 */ "DBG_PHI\000"
154 /* 940 */ "DBG_LABEL\000"
155 /* 950 */ "#ADJCALLSTACKDOWN\000"
156 /* 968 */ "# Lsl32 PSEUDO\000"
157 /* 983 */ "# Asr32 PSEUDO\000"
158 /* 998 */ "# Lsr32 PSEUDO\000"
159 /* 1013 */ "# Rol16 PSEUDO\000"
160 /* 1028 */ "# Lsl16 PSEUDO\000"
161 /* 1043 */ "# Ror16 PSEUDO\000"
162 /* 1058 */ "# Asr16 PSEUDO\000"
163 /* 1073 */ "# Lsr16 PSEUDO\000"
164 /* 1088 */ "# Select16 PSEUDO\000"
165 /* 1106 */ "# Rol8 PSEUDO\000"
166 /* 1120 */ "# Lsl8 PSEUDO\000"
167 /* 1134 */ "# Ror8 PSEUDO\000"
168 /* 1148 */ "# Asr8 PSEUDO\000"
169 /* 1162 */ "# Lsr8 PSEUDO\000"
170 /* 1176 */ "# Select8 PSEUDO\000"
171 /* 1193 */ "#ADJCALLSTACKUP\000"
172 /* 1209 */ "LIFETIME_START\000"
173 /* 1224 */ "DBG_VALUE_LIST\000"
174 /* 1239 */ "atomic_fence\000"
175 /* 1252 */ "reti\000"
176 /* 1257 */ "break\000"
177 /* 1263 */ "# FEntry call\000"
178 /* 1277 */ "eicall\000"
179 /* 1284 */ "elpm\000"
180 /* 1289 */ "spm\000"
181 /* 1293 */ "sleep\000"
182 /* 1299 */ "eijmp\000"
183 /* 1305 */ "atomic_op\000"
184 /* 1315 */ "nop\000"
185 /* 1319 */ "wdr\000"
186 /* 1323 */ "ret\000"
187};
188#ifdef __GNUC__
189#pragma GCC diagnostic pop
190#endif
191
192 static const uint16_t OpInfo0[] = {
193 0U, // PHI
194 0U, // INLINEASM
195 0U, // INLINEASM_BR
196 0U, // CFI_INSTRUCTION
197 0U, // EH_LABEL
198 0U, // GC_LABEL
199 0U, // ANNOTATION_LABEL
200 0U, // KILL
201 0U, // EXTRACT_SUBREG
202 0U, // INSERT_SUBREG
203 0U, // IMPLICIT_DEF
204 0U, // INIT_UNDEF
205 0U, // SUBREG_TO_REG
206 0U, // COPY_TO_REGCLASS
207 909U, // DBG_VALUE
208 1225U, // DBG_VALUE_LIST
209 919U, // DBG_INSTR_REF
210 933U, // DBG_PHI
211 941U, // DBG_LABEL
212 0U, // REG_SEQUENCE
213 0U, // COPY
214 0U, // COPY_LANEMASK
215 893U, // BUNDLE
216 1210U, // LIFETIME_START
217 867U, // LIFETIME_END
218 880U, // PSEUDO_PROBE
219 0U, // ARITH_FENCE
220 0U, // STACKMAP
221 1264U, // FENTRY_CALL
222 0U, // PATCHPOINT
223 0U, // LOAD_STACK_GUARD
224 0U, // PREALLOCATED_SETUP
225 0U, // PREALLOCATED_ARG
226 0U, // STATEPOINT
227 0U, // LOCAL_ESCAPE
228 0U, // FAULTING_OP
229 0U, // PATCHABLE_OP
230 799U, // PATCHABLE_FUNCTION_ENTER
231 719U, // PATCHABLE_RET
232 845U, // PATCHABLE_FUNCTION_EXIT
233 822U, // PATCHABLE_TAIL_CALL
234 774U, // PATCHABLE_EVENT_CALL
235 750U, // PATCHABLE_TYPED_EVENT_CALL
236 0U, // ICALL_BRANCH_FUNNEL
237 900U, // FAKE_USE
238 0U, // MEMBARRIER
239 0U, // JUMP_TABLE_DEBUG_INFO
240 0U, // RELOC_NONE
241 0U, // CONVERGENCECTRL_ENTRY
242 0U, // CONVERGENCECTRL_ANCHOR
243 0U, // CONVERGENCECTRL_LOOP
244 0U, // CONVERGENCECTRL_GLUE
245 0U, // G_ASSERT_SEXT
246 0U, // G_ASSERT_ZEXT
247 0U, // G_ASSERT_ALIGN
248 0U, // G_ADD
249 0U, // G_SUB
250 0U, // G_MUL
251 0U, // G_SDIV
252 0U, // G_UDIV
253 0U, // G_SREM
254 0U, // G_UREM
255 0U, // G_SDIVREM
256 0U, // G_UDIVREM
257 0U, // G_AND
258 0U, // G_OR
259 0U, // G_XOR
260 0U, // G_ABDS
261 0U, // G_ABDU
262 0U, // G_UAVGFLOOR
263 0U, // G_UAVGCEIL
264 0U, // G_SAVGFLOOR
265 0U, // G_SAVGCEIL
266 0U, // G_IMPLICIT_DEF
267 0U, // G_PHI
268 0U, // G_FRAME_INDEX
269 0U, // G_GLOBAL_VALUE
270 0U, // G_PTRAUTH_GLOBAL_VALUE
271 0U, // G_CONSTANT_POOL
272 0U, // G_EXTRACT
273 0U, // G_UNMERGE_VALUES
274 0U, // G_INSERT
275 0U, // G_MERGE_VALUES
276 0U, // G_BUILD_VECTOR
277 0U, // G_BUILD_VECTOR_TRUNC
278 0U, // G_CONCAT_VECTORS
279 0U, // G_PTRTOINT
280 0U, // G_INTTOPTR
281 0U, // G_BITCAST
282 0U, // G_FREEZE
283 0U, // G_CONSTANT_FOLD_BARRIER
284 0U, // G_INTRINSIC_FPTRUNC_ROUND
285 0U, // G_INTRINSIC_TRUNC
286 0U, // G_INTRINSIC_ROUND
287 0U, // G_INTRINSIC_LRINT
288 0U, // G_INTRINSIC_LLRINT
289 0U, // G_INTRINSIC_ROUNDEVEN
290 0U, // G_READCYCLECOUNTER
291 0U, // G_READSTEADYCOUNTER
292 0U, // G_LOAD
293 0U, // G_SEXTLOAD
294 0U, // G_ZEXTLOAD
295 0U, // G_FPEXTLOAD
296 0U, // G_INDEXED_LOAD
297 0U, // G_INDEXED_SEXTLOAD
298 0U, // G_INDEXED_ZEXTLOAD
299 0U, // G_STORE
300 0U, // G_FPTRUNCSTORE
301 0U, // G_INDEXED_STORE
302 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS
303 0U, // G_ATOMIC_CMPXCHG
304 0U, // G_ATOMICRMW_XCHG
305 0U, // G_ATOMICRMW_ADD
306 0U, // G_ATOMICRMW_SUB
307 0U, // G_ATOMICRMW_AND
308 0U, // G_ATOMICRMW_NAND
309 0U, // G_ATOMICRMW_OR
310 0U, // G_ATOMICRMW_XOR
311 0U, // G_ATOMICRMW_MAX
312 0U, // G_ATOMICRMW_MIN
313 0U, // G_ATOMICRMW_UMAX
314 0U, // G_ATOMICRMW_UMIN
315 0U, // G_ATOMICRMW_FADD
316 0U, // G_ATOMICRMW_FSUB
317 0U, // G_ATOMICRMW_FMAX
318 0U, // G_ATOMICRMW_FMIN
319 0U, // G_ATOMICRMW_FMAXIMUM
320 0U, // G_ATOMICRMW_FMINIMUM
321 0U, // G_ATOMICRMW_FMAXIMUMNUM
322 0U, // G_ATOMICRMW_FMINIMUMNUM
323 0U, // G_ATOMICRMW_UINC_WRAP
324 0U, // G_ATOMICRMW_UDEC_WRAP
325 0U, // G_ATOMICRMW_USUB_COND
326 0U, // G_ATOMICRMW_USUB_SAT
327 0U, // G_FENCE
328 0U, // G_PREFETCH
329 0U, // G_BRCOND
330 0U, // G_BRINDIRECT
331 0U, // G_INVOKE_REGION_START
332 0U, // G_INTRINSIC
333 0U, // G_INTRINSIC_W_SIDE_EFFECTS
334 0U, // G_INTRINSIC_CONVERGENT
335 0U, // G_INTRINSIC_CONVERGENT_W_SIDE_EFFECTS
336 0U, // G_ANYEXT
337 0U, // G_TRUNC
338 0U, // G_TRUNC_SSAT_S
339 0U, // G_TRUNC_SSAT_U
340 0U, // G_TRUNC_USAT_U
341 0U, // G_CONSTANT
342 0U, // G_FCONSTANT
343 0U, // G_VASTART
344 0U, // G_VAARG
345 0U, // G_SEXT
346 0U, // G_SEXT_INREG
347 0U, // G_ZEXT
348 0U, // G_SHL
349 0U, // G_LSHR
350 0U, // G_ASHR
351 0U, // G_FSHL
352 0U, // G_FSHR
353 0U, // G_ROTR
354 0U, // G_ROTL
355 0U, // G_ICMP
356 0U, // G_FCMP
357 0U, // G_SCMP
358 0U, // G_UCMP
359 0U, // G_SELECT
360 0U, // G_UADDO
361 0U, // G_UADDE
362 0U, // G_USUBO
363 0U, // G_USUBE
364 0U, // G_SADDO
365 0U, // G_SADDE
366 0U, // G_SSUBO
367 0U, // G_SSUBE
368 0U, // G_UMULO
369 0U, // G_SMULO
370 0U, // G_UMULH
371 0U, // G_SMULH
372 0U, // G_UADDSAT
373 0U, // G_SADDSAT
374 0U, // G_USUBSAT
375 0U, // G_SSUBSAT
376 0U, // G_USHLSAT
377 0U, // G_SSHLSAT
378 0U, // G_SMULFIX
379 0U, // G_UMULFIX
380 0U, // G_SMULFIXSAT
381 0U, // G_UMULFIXSAT
382 0U, // G_SDIVFIX
383 0U, // G_UDIVFIX
384 0U, // G_SDIVFIXSAT
385 0U, // G_UDIVFIXSAT
386 0U, // G_FADD
387 0U, // G_FSUB
388 0U, // G_FMUL
389 0U, // G_FMA
390 0U, // G_FMAD
391 0U, // G_FDIV
392 0U, // G_FREM
393 0U, // G_FMODF
394 0U, // G_FPOW
395 0U, // G_FPOWI
396 0U, // G_FEXP
397 0U, // G_FEXP2
398 0U, // G_FEXP10
399 0U, // G_FLOG
400 0U, // G_FLOG2
401 0U, // G_FLOG10
402 0U, // G_FLDEXP
403 0U, // G_FFREXP
404 0U, // G_FNEG
405 0U, // G_FPEXT
406 0U, // G_FPTRUNC
407 0U, // G_FPTOSI
408 0U, // G_FPTOUI
409 0U, // G_SITOFP
410 0U, // G_UITOFP
411 0U, // G_FPTOSI_SAT
412 0U, // G_FPTOUI_SAT
413 0U, // G_FABS
414 0U, // G_FCOPYSIGN
415 0U, // G_IS_FPCLASS
416 0U, // G_FCANONICALIZE
417 0U, // G_FMINNUM
418 0U, // G_FMAXNUM
419 0U, // G_FMINNUM_IEEE
420 0U, // G_FMAXNUM_IEEE
421 0U, // G_FMINIMUM
422 0U, // G_FMAXIMUM
423 0U, // G_FMINIMUMNUM
424 0U, // G_FMAXIMUMNUM
425 0U, // G_GET_FPENV
426 0U, // G_SET_FPENV
427 0U, // G_RESET_FPENV
428 0U, // G_GET_FPMODE
429 0U, // G_SET_FPMODE
430 0U, // G_RESET_FPMODE
431 0U, // G_GET_ROUNDING
432 0U, // G_SET_ROUNDING
433 0U, // G_PTR_ADD
434 0U, // G_PTRMASK
435 0U, // G_SMIN
436 0U, // G_SMAX
437 0U, // G_UMIN
438 0U, // G_UMAX
439 0U, // G_ABS
440 0U, // G_LROUND
441 0U, // G_LLROUND
442 0U, // G_BR
443 0U, // G_BRJT
444 0U, // G_VSCALE
445 0U, // G_INSERT_SUBVECTOR
446 0U, // G_EXTRACT_SUBVECTOR
447 0U, // G_INSERT_VECTOR_ELT
448 0U, // G_EXTRACT_VECTOR_ELT
449 0U, // G_SHUFFLE_VECTOR
450 0U, // G_SPLAT_VECTOR
451 0U, // G_STEP_VECTOR
452 0U, // G_VECTOR_COMPRESS
453 0U, // G_CTTZ
454 0U, // G_CTTZ_ZERO_POISON
455 0U, // G_CTLZ
456 0U, // G_CTLZ_ZERO_POISON
457 0U, // G_CTLS
458 0U, // G_CTPOP
459 0U, // G_BSWAP
460 0U, // G_BITREVERSE
461 0U, // G_CLMUL
462 0U, // G_CLMULH
463 0U, // G_FCEIL
464 0U, // G_FCOS
465 0U, // G_FSIN
466 0U, // G_FSINCOS
467 0U, // G_FTAN
468 0U, // G_FACOS
469 0U, // G_FASIN
470 0U, // G_FATAN
471 0U, // G_FATAN2
472 0U, // G_FCOSH
473 0U, // G_FSINH
474 0U, // G_FTANH
475 0U, // G_FSQRT
476 0U, // G_FFLOOR
477 0U, // G_FRINT
478 0U, // G_FNEARBYINT
479 0U, // G_ADDRSPACE_CAST
480 0U, // G_BLOCK_ADDR
481 0U, // G_JUMP_TABLE
482 0U, // G_DYN_STACKALLOC
483 0U, // G_STACKSAVE
484 0U, // G_STACKRESTORE
485 0U, // G_STRICT_FADD
486 0U, // G_STRICT_FSUB
487 0U, // G_STRICT_FMUL
488 0U, // G_STRICT_FDIV
489 0U, // G_STRICT_FREM
490 0U, // G_STRICT_FMA
491 0U, // G_STRICT_FSQRT
492 0U, // G_STRICT_FLDEXP
493 0U, // G_STRICT_FCMP
494 0U, // G_STRICT_FCMPS
495 0U, // G_READ_REGISTER
496 0U, // G_WRITE_REGISTER
497 0U, // G_MEMCPY
498 0U, // G_MEMCPY_INLINE
499 0U, // G_MEMMOVE
500 0U, // G_MEMSET
501 0U, // G_BZERO
502 0U, // G_MEMSET_INLINE
503 0U, // G_TRAP
504 0U, // G_DEBUGTRAP
505 0U, // G_UBSANTRAP
506 0U, // G_VECREDUCE_SEQ_FADD
507 0U, // G_VECREDUCE_SEQ_FMUL
508 0U, // G_VECREDUCE_FADD
509 0U, // G_VECREDUCE_FMUL
510 0U, // G_VECREDUCE_FMAX
511 0U, // G_VECREDUCE_FMIN
512 0U, // G_VECREDUCE_FMAXIMUM
513 0U, // G_VECREDUCE_FMINIMUM
514 0U, // G_VECREDUCE_FMAXIMUMNUM
515 0U, // G_VECREDUCE_FMINIMUMNUM
516 0U, // G_VECREDUCE_ADD
517 0U, // G_VECREDUCE_MUL
518 0U, // G_VECREDUCE_AND
519 0U, // G_VECREDUCE_OR
520 0U, // G_VECREDUCE_XOR
521 0U, // G_VECREDUCE_SMAX
522 0U, // G_VECREDUCE_SMIN
523 0U, // G_VECREDUCE_UMAX
524 0U, // G_VECREDUCE_UMIN
525 0U, // G_SBFX
526 0U, // G_UBFX
527 2544U, // ADCWRdRr
528 2556U, // ADDWRdRr
529 2618U, // ADIWRdKP
530 951U, // ADJCALLSTACKDOWN
531 1194U, // ADJCALLSTACKUP
532 2630U, // ANDIWRdK
533 2573U, // ANDWRdRr
534 2314U, // ASRBNRd
535 18743U, // ASRWLoRd
536 2339U, // ASRWNRd
537 19080U, // ASRWRd
538 1059U, // Asr16
539 984U, // Asr32
540 1149U, // Asr8
541 1240U, // AtomicFence
542 1306U, // AtomicLoad16
543 1306U, // AtomicLoad8
544 1306U, // AtomicLoadAdd16
545 1306U, // AtomicLoadAdd8
546 1306U, // AtomicLoadAnd16
547 1306U, // AtomicLoadAnd8
548 1306U, // AtomicLoadOr16
549 1306U, // AtomicLoadOr8
550 1306U, // AtomicLoadSub16
551 1306U, // AtomicLoadSub8
552 1306U, // AtomicLoadXor16
553 1306U, // AtomicLoadXor8
554 1306U, // AtomicStore16
555 1306U, // AtomicStore8
556 19039U, // COMWRd
557 2550U, // CPCWRdRr
558 2673U, // CPWRdRr
559 19129U, // CopyZero
560 2055U, // ELPMBRdZ
561 2055U, // ELPMBRdZPi
562 2661U, // ELPMWRdZ
563 2661U, // ELPMWRdZPi
564 2684U, // EORWRdRr
565 2737U, // FRMIDX
566 2396U, // FRMSP
567 2668U, // INWRdA
568 2562U, // LDDWRdPtrQ
569 2562U, // LDDWRdYQ
570 2624U, // LDIWRdK
571 2708U, // LDSWRdK
572 2568U, // LDWRdPtr
573 35336U, // LDWRdPtrPd
574 2568U, // LDWRdPtrPi
575 2056U, // LPMBRdZ
576 2662U, // LPMWRdZ
577 2662U, // LPMWRdZPi
578 2307U, // LSLBNRd
579 18620U, // LSLWHiRd
580 2332U, // LSLWNRd
581 19033U, // LSLWRd
582 2321U, // LSRBNRd
583 18751U, // LSRWLoRd
584 2346U, // LSRWNRd
585 19086U, // LSRWRd
586 1029U, // Lsl16
587 969U, // Lsl32
588 1121U, // Lsl8
589 1074U, // Lsr16
590 999U, // Lsr32
591 1163U, // Lsr8
592 18969U, // NEGWRd
593 2637U, // ORIWRdK
594 2685U, // ORWRdRr
595 2725U, // OUTWARr
596 19062U, // POPWRd
597 18975U, // PUSHWRr
598 18433U, // ROLBRdR1
599 18433U, // ROLBRdR17
600 19027U, // ROLWRd
601 18446U, // RORBRd
602 19074U, // RORWRd
603 1014U, // Rol16
604 1107U, // Rol8
605 1044U, // Ror16
606 1135U, // Ror8
607 2611U, // SBCIWRdK
608 2538U, // SBCWRdRr
609 2507U, // SEXT
610 2121U, // SPREAD
611 2172U, // SPWRITE
612 4308U, // STDSPQRr
613 6675U, // STDWPtrQRr
614 4316U, // STDWSPQRr
615 2714U, // STSWKRr
616 8905U, // STWPtrPdRr
617 58016U, // STWPtrPiRr
618 2720U, // STWPtrRr
619 2604U, // SUBIWRdK
620 2532U, // SUBWRdRr
621 1089U, // Select16
622 1177U, // Select8
623 2513U, // ZEXT
624 2089U, // ADCRdRr
625 2129U, // ADDRdRr
626 2618U, // ADIWRdK
627 2230U, // ANDIRdK
628 2144U, // ANDRdRr
629 18809U, // ASRRd
630 18793U, // BCLRs
631 2139U, // BLD
632 2078U, // BRBCsk
633 2440U, // BRBSsk
634 1258U, // BREAK
635 10595U, // BREQk
636 10346U, // BRGEk
637 10545U, // BRLOk
638 10683U, // BRLTk
639 10436U, // BRMIk
640 10352U, // BRNEk
641 10476U, // BRPLk
642 10383U, // BRSHk
643 18869U, // BSETs
644 2497U, // BST
645 18662U, // CALLk
646 2203U, // CBIAb
647 18680U, // COMRd
648 2110U, // CPCRdRr
649 2250U, // CPIRdK
650 2381U, // CPRdRr
651 2166U, // CPSE
652 18478U, // DECRd
653 18835U, // DESK
654 1278U, // EICALL
655 1300U, // EIJMP
656 1285U, // ELPM
657 2301U, // ELPMRdZ
658 2301U, // ELPMRdZPi
659 2415U, // EORRdRr
660 2290U, // FMUL
661 2462U, // FMULS
662 2519U, // FMULSU
663 1279U, // ICALL
664 1301U, // IJMP
665 18489U, // INCRd
666 2328U, // INRdA
667 18770U, // JMPk
668 8217U, // LACZRd
669 8579U, // LASZRd
670 8624U, // LATZRd
671 2134U, // LDDRdPtrQ
672 2225U, // LDIRdK
673 2140U, // LDRdPtr
674 34908U, // LDRdPtrPd
675 2140U, // LDRdPtrPi
676 2446U, // LDSRdK
677 2446U, // LDSRdKTiny
678 1286U, // LPM
679 2302U, // LPMRdZ
680 2302U, // LPMRdZPi
681 18814U, // LSRRd
682 2527U, // MOVRdRr
683 2731U, // MOVWRdRr
684 2291U, // MULRdRr
685 2463U, // MULSRdRr
686 2520U, // MULSURdRr
687 18565U, // NEGRd
688 1316U, // NOP
689 2255U, // ORIRdK
690 2416U, // ORRdRr
691 2502U, // OUTARr
692 18775U, // POPRd
693 18581U, // PUSHRr
694 10469U, // RCALLk
695 1324U, // RET
696 1253U, // RETI
697 10577U, // RJMPk
698 18804U, // RORRd
699 2219U, // SBCIRdK
700 2084U, // SBCRdRr
701 2208U, // SBIAb
702 2099U, // SBICAb
703 2456U, // SBISAb
704 2598U, // SBIWRdK
705 2115U, // SBRCRrB
706 2469U, // SBRSRrB
707 1294U, // SLEEP
708 1290U, // SPM
709 2751U, // SPMZPi
710 6245U, // STDPtrQRr
711 8900U, // STPtrPdRr
712 57794U, // STPtrPiRr
713 2498U, // STPtrRr
714 2475U, // STSKRr
715 2475U, // STSKRrTiny
716 2213U, // SUBIRdK
717 2068U, // SUBRdRr
718 18759U, // SWAPRd
719 1320U, // WDR
720 8330U, // XCHZRd
721 };
722
723 static const uint8_t OpInfo1[] = {
724 0U, // PHI
725 0U, // INLINEASM
726 0U, // INLINEASM_BR
727 0U, // CFI_INSTRUCTION
728 0U, // EH_LABEL
729 0U, // GC_LABEL
730 0U, // ANNOTATION_LABEL
731 0U, // KILL
732 0U, // EXTRACT_SUBREG
733 0U, // INSERT_SUBREG
734 0U, // IMPLICIT_DEF
735 0U, // INIT_UNDEF
736 0U, // SUBREG_TO_REG
737 0U, // COPY_TO_REGCLASS
738 0U, // DBG_VALUE
739 0U, // DBG_VALUE_LIST
740 0U, // DBG_INSTR_REF
741 0U, // DBG_PHI
742 0U, // DBG_LABEL
743 0U, // REG_SEQUENCE
744 0U, // COPY
745 0U, // COPY_LANEMASK
746 0U, // BUNDLE
747 0U, // LIFETIME_START
748 0U, // LIFETIME_END
749 0U, // PSEUDO_PROBE
750 0U, // ARITH_FENCE
751 0U, // STACKMAP
752 0U, // FENTRY_CALL
753 0U, // PATCHPOINT
754 0U, // LOAD_STACK_GUARD
755 0U, // PREALLOCATED_SETUP
756 0U, // PREALLOCATED_ARG
757 0U, // STATEPOINT
758 0U, // LOCAL_ESCAPE
759 0U, // FAULTING_OP
760 0U, // PATCHABLE_OP
761 0U, // PATCHABLE_FUNCTION_ENTER
762 0U, // PATCHABLE_RET
763 0U, // PATCHABLE_FUNCTION_EXIT
764 0U, // PATCHABLE_TAIL_CALL
765 0U, // PATCHABLE_EVENT_CALL
766 0U, // PATCHABLE_TYPED_EVENT_CALL
767 0U, // ICALL_BRANCH_FUNNEL
768 0U, // FAKE_USE
769 0U, // MEMBARRIER
770 0U, // JUMP_TABLE_DEBUG_INFO
771 0U, // RELOC_NONE
772 0U, // CONVERGENCECTRL_ENTRY
773 0U, // CONVERGENCECTRL_ANCHOR
774 0U, // CONVERGENCECTRL_LOOP
775 0U, // CONVERGENCECTRL_GLUE
776 0U, // G_ASSERT_SEXT
777 0U, // G_ASSERT_ZEXT
778 0U, // G_ASSERT_ALIGN
779 0U, // G_ADD
780 0U, // G_SUB
781 0U, // G_MUL
782 0U, // G_SDIV
783 0U, // G_UDIV
784 0U, // G_SREM
785 0U, // G_UREM
786 0U, // G_SDIVREM
787 0U, // G_UDIVREM
788 0U, // G_AND
789 0U, // G_OR
790 0U, // G_XOR
791 0U, // G_ABDS
792 0U, // G_ABDU
793 0U, // G_UAVGFLOOR
794 0U, // G_UAVGCEIL
795 0U, // G_SAVGFLOOR
796 0U, // G_SAVGCEIL
797 0U, // G_IMPLICIT_DEF
798 0U, // G_PHI
799 0U, // G_FRAME_INDEX
800 0U, // G_GLOBAL_VALUE
801 0U, // G_PTRAUTH_GLOBAL_VALUE
802 0U, // G_CONSTANT_POOL
803 0U, // G_EXTRACT
804 0U, // G_UNMERGE_VALUES
805 0U, // G_INSERT
806 0U, // G_MERGE_VALUES
807 0U, // G_BUILD_VECTOR
808 0U, // G_BUILD_VECTOR_TRUNC
809 0U, // G_CONCAT_VECTORS
810 0U, // G_PTRTOINT
811 0U, // G_INTTOPTR
812 0U, // G_BITCAST
813 0U, // G_FREEZE
814 0U, // G_CONSTANT_FOLD_BARRIER
815 0U, // G_INTRINSIC_FPTRUNC_ROUND
816 0U, // G_INTRINSIC_TRUNC
817 0U, // G_INTRINSIC_ROUND
818 0U, // G_INTRINSIC_LRINT
819 0U, // G_INTRINSIC_LLRINT
820 0U, // G_INTRINSIC_ROUNDEVEN
821 0U, // G_READCYCLECOUNTER
822 0U, // G_READSTEADYCOUNTER
823 0U, // G_LOAD
824 0U, // G_SEXTLOAD
825 0U, // G_ZEXTLOAD
826 0U, // G_FPEXTLOAD
827 0U, // G_INDEXED_LOAD
828 0U, // G_INDEXED_SEXTLOAD
829 0U, // G_INDEXED_ZEXTLOAD
830 0U, // G_STORE
831 0U, // G_FPTRUNCSTORE
832 0U, // G_INDEXED_STORE
833 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS
834 0U, // G_ATOMIC_CMPXCHG
835 0U, // G_ATOMICRMW_XCHG
836 0U, // G_ATOMICRMW_ADD
837 0U, // G_ATOMICRMW_SUB
838 0U, // G_ATOMICRMW_AND
839 0U, // G_ATOMICRMW_NAND
840 0U, // G_ATOMICRMW_OR
841 0U, // G_ATOMICRMW_XOR
842 0U, // G_ATOMICRMW_MAX
843 0U, // G_ATOMICRMW_MIN
844 0U, // G_ATOMICRMW_UMAX
845 0U, // G_ATOMICRMW_UMIN
846 0U, // G_ATOMICRMW_FADD
847 0U, // G_ATOMICRMW_FSUB
848 0U, // G_ATOMICRMW_FMAX
849 0U, // G_ATOMICRMW_FMIN
850 0U, // G_ATOMICRMW_FMAXIMUM
851 0U, // G_ATOMICRMW_FMINIMUM
852 0U, // G_ATOMICRMW_FMAXIMUMNUM
853 0U, // G_ATOMICRMW_FMINIMUMNUM
854 0U, // G_ATOMICRMW_UINC_WRAP
855 0U, // G_ATOMICRMW_UDEC_WRAP
856 0U, // G_ATOMICRMW_USUB_COND
857 0U, // G_ATOMICRMW_USUB_SAT
858 0U, // G_FENCE
859 0U, // G_PREFETCH
860 0U, // G_BRCOND
861 0U, // G_BRINDIRECT
862 0U, // G_INVOKE_REGION_START
863 0U, // G_INTRINSIC
864 0U, // G_INTRINSIC_W_SIDE_EFFECTS
865 0U, // G_INTRINSIC_CONVERGENT
866 0U, // G_INTRINSIC_CONVERGENT_W_SIDE_EFFECTS
867 0U, // G_ANYEXT
868 0U, // G_TRUNC
869 0U, // G_TRUNC_SSAT_S
870 0U, // G_TRUNC_SSAT_U
871 0U, // G_TRUNC_USAT_U
872 0U, // G_CONSTANT
873 0U, // G_FCONSTANT
874 0U, // G_VASTART
875 0U, // G_VAARG
876 0U, // G_SEXT
877 0U, // G_SEXT_INREG
878 0U, // G_ZEXT
879 0U, // G_SHL
880 0U, // G_LSHR
881 0U, // G_ASHR
882 0U, // G_FSHL
883 0U, // G_FSHR
884 0U, // G_ROTR
885 0U, // G_ROTL
886 0U, // G_ICMP
887 0U, // G_FCMP
888 0U, // G_SCMP
889 0U, // G_UCMP
890 0U, // G_SELECT
891 0U, // G_UADDO
892 0U, // G_UADDE
893 0U, // G_USUBO
894 0U, // G_USUBE
895 0U, // G_SADDO
896 0U, // G_SADDE
897 0U, // G_SSUBO
898 0U, // G_SSUBE
899 0U, // G_UMULO
900 0U, // G_SMULO
901 0U, // G_UMULH
902 0U, // G_SMULH
903 0U, // G_UADDSAT
904 0U, // G_SADDSAT
905 0U, // G_USUBSAT
906 0U, // G_SSUBSAT
907 0U, // G_USHLSAT
908 0U, // G_SSHLSAT
909 0U, // G_SMULFIX
910 0U, // G_UMULFIX
911 0U, // G_SMULFIXSAT
912 0U, // G_UMULFIXSAT
913 0U, // G_SDIVFIX
914 0U, // G_UDIVFIX
915 0U, // G_SDIVFIXSAT
916 0U, // G_UDIVFIXSAT
917 0U, // G_FADD
918 0U, // G_FSUB
919 0U, // G_FMUL
920 0U, // G_FMA
921 0U, // G_FMAD
922 0U, // G_FDIV
923 0U, // G_FREM
924 0U, // G_FMODF
925 0U, // G_FPOW
926 0U, // G_FPOWI
927 0U, // G_FEXP
928 0U, // G_FEXP2
929 0U, // G_FEXP10
930 0U, // G_FLOG
931 0U, // G_FLOG2
932 0U, // G_FLOG10
933 0U, // G_FLDEXP
934 0U, // G_FFREXP
935 0U, // G_FNEG
936 0U, // G_FPEXT
937 0U, // G_FPTRUNC
938 0U, // G_FPTOSI
939 0U, // G_FPTOUI
940 0U, // G_SITOFP
941 0U, // G_UITOFP
942 0U, // G_FPTOSI_SAT
943 0U, // G_FPTOUI_SAT
944 0U, // G_FABS
945 0U, // G_FCOPYSIGN
946 0U, // G_IS_FPCLASS
947 0U, // G_FCANONICALIZE
948 0U, // G_FMINNUM
949 0U, // G_FMAXNUM
950 0U, // G_FMINNUM_IEEE
951 0U, // G_FMAXNUM_IEEE
952 0U, // G_FMINIMUM
953 0U, // G_FMAXIMUM
954 0U, // G_FMINIMUMNUM
955 0U, // G_FMAXIMUMNUM
956 0U, // G_GET_FPENV
957 0U, // G_SET_FPENV
958 0U, // G_RESET_FPENV
959 0U, // G_GET_FPMODE
960 0U, // G_SET_FPMODE
961 0U, // G_RESET_FPMODE
962 0U, // G_GET_ROUNDING
963 0U, // G_SET_ROUNDING
964 0U, // G_PTR_ADD
965 0U, // G_PTRMASK
966 0U, // G_SMIN
967 0U, // G_SMAX
968 0U, // G_UMIN
969 0U, // G_UMAX
970 0U, // G_ABS
971 0U, // G_LROUND
972 0U, // G_LLROUND
973 0U, // G_BR
974 0U, // G_BRJT
975 0U, // G_VSCALE
976 0U, // G_INSERT_SUBVECTOR
977 0U, // G_EXTRACT_SUBVECTOR
978 0U, // G_INSERT_VECTOR_ELT
979 0U, // G_EXTRACT_VECTOR_ELT
980 0U, // G_SHUFFLE_VECTOR
981 0U, // G_SPLAT_VECTOR
982 0U, // G_STEP_VECTOR
983 0U, // G_VECTOR_COMPRESS
984 0U, // G_CTTZ
985 0U, // G_CTTZ_ZERO_POISON
986 0U, // G_CTLZ
987 0U, // G_CTLZ_ZERO_POISON
988 0U, // G_CTLS
989 0U, // G_CTPOP
990 0U, // G_BSWAP
991 0U, // G_BITREVERSE
992 0U, // G_CLMUL
993 0U, // G_CLMULH
994 0U, // G_FCEIL
995 0U, // G_FCOS
996 0U, // G_FSIN
997 0U, // G_FSINCOS
998 0U, // G_FTAN
999 0U, // G_FACOS
1000 0U, // G_FASIN
1001 0U, // G_FATAN
1002 0U, // G_FATAN2
1003 0U, // G_FCOSH
1004 0U, // G_FSINH
1005 0U, // G_FTANH
1006 0U, // G_FSQRT
1007 0U, // G_FFLOOR
1008 0U, // G_FRINT
1009 0U, // G_FNEARBYINT
1010 0U, // G_ADDRSPACE_CAST
1011 0U, // G_BLOCK_ADDR
1012 0U, // G_JUMP_TABLE
1013 0U, // G_DYN_STACKALLOC
1014 0U, // G_STACKSAVE
1015 0U, // G_STACKRESTORE
1016 0U, // G_STRICT_FADD
1017 0U, // G_STRICT_FSUB
1018 0U, // G_STRICT_FMUL
1019 0U, // G_STRICT_FDIV
1020 0U, // G_STRICT_FREM
1021 0U, // G_STRICT_FMA
1022 0U, // G_STRICT_FSQRT
1023 0U, // G_STRICT_FLDEXP
1024 0U, // G_STRICT_FCMP
1025 0U, // G_STRICT_FCMPS
1026 0U, // G_READ_REGISTER
1027 0U, // G_WRITE_REGISTER
1028 0U, // G_MEMCPY
1029 0U, // G_MEMCPY_INLINE
1030 0U, // G_MEMMOVE
1031 0U, // G_MEMSET
1032 0U, // G_BZERO
1033 0U, // G_MEMSET_INLINE
1034 0U, // G_TRAP
1035 0U, // G_DEBUGTRAP
1036 0U, // G_UBSANTRAP
1037 0U, // G_VECREDUCE_SEQ_FADD
1038 0U, // G_VECREDUCE_SEQ_FMUL
1039 0U, // G_VECREDUCE_FADD
1040 0U, // G_VECREDUCE_FMUL
1041 0U, // G_VECREDUCE_FMAX
1042 0U, // G_VECREDUCE_FMIN
1043 0U, // G_VECREDUCE_FMAXIMUM
1044 0U, // G_VECREDUCE_FMINIMUM
1045 0U, // G_VECREDUCE_FMAXIMUMNUM
1046 0U, // G_VECREDUCE_FMINIMUMNUM
1047 0U, // G_VECREDUCE_ADD
1048 0U, // G_VECREDUCE_MUL
1049 0U, // G_VECREDUCE_AND
1050 0U, // G_VECREDUCE_OR
1051 0U, // G_VECREDUCE_XOR
1052 0U, // G_VECREDUCE_SMAX
1053 0U, // G_VECREDUCE_SMIN
1054 0U, // G_VECREDUCE_UMAX
1055 0U, // G_VECREDUCE_UMIN
1056 0U, // G_SBFX
1057 0U, // G_UBFX
1058 0U, // ADCWRdRr
1059 0U, // ADDWRdRr
1060 0U, // ADIWRdKP
1061 0U, // ADJCALLSTACKDOWN
1062 0U, // ADJCALLSTACKUP
1063 0U, // ANDIWRdK
1064 0U, // ANDWRdRr
1065 0U, // ASRBNRd
1066 0U, // ASRWLoRd
1067 0U, // ASRWNRd
1068 0U, // ASRWRd
1069 0U, // Asr16
1070 0U, // Asr32
1071 0U, // Asr8
1072 0U, // AtomicFence
1073 0U, // AtomicLoad16
1074 0U, // AtomicLoad8
1075 0U, // AtomicLoadAdd16
1076 0U, // AtomicLoadAdd8
1077 0U, // AtomicLoadAnd16
1078 0U, // AtomicLoadAnd8
1079 0U, // AtomicLoadOr16
1080 0U, // AtomicLoadOr8
1081 0U, // AtomicLoadSub16
1082 0U, // AtomicLoadSub8
1083 0U, // AtomicLoadXor16
1084 0U, // AtomicLoadXor8
1085 0U, // AtomicStore16
1086 0U, // AtomicStore8
1087 0U, // COMWRd
1088 2U, // CPCWRdRr
1089 2U, // CPWRdRr
1090 0U, // CopyZero
1091 18U, // ELPMBRdZ
1092 34U, // ELPMBRdZPi
1093 18U, // ELPMWRdZ
1094 34U, // ELPMWRdZPi
1095 0U, // EORWRdRr
1096 82U, // FRMIDX
1097 2U, // FRMSP
1098 2U, // INWRdA
1099 4U, // LDDWRdPtrQ
1100 4U, // LDDWRdYQ
1101 2U, // LDIWRdK
1102 2U, // LDSWRdK
1103 2U, // LDWRdPtr
1104 0U, // LDWRdPtrPd
1105 48U, // LDWRdPtrPi
1106 2U, // LPMBRdZ
1107 2U, // LPMWRdZ
1108 50U, // LPMWRdZPi
1109 0U, // LSLBNRd
1110 0U, // LSLWHiRd
1111 0U, // LSLWNRd
1112 0U, // LSLWRd
1113 0U, // LSRBNRd
1114 0U, // LSRWLoRd
1115 0U, // LSRWNRd
1116 0U, // LSRWRd
1117 0U, // Lsl16
1118 0U, // Lsl32
1119 0U, // Lsl8
1120 0U, // Lsr16
1121 0U, // Lsr32
1122 0U, // Lsr8
1123 0U, // NEGWRd
1124 0U, // ORIWRdK
1125 0U, // ORWRdRr
1126 2U, // OUTWARr
1127 0U, // POPWRd
1128 0U, // PUSHWRr
1129 0U, // ROLBRdR1
1130 0U, // ROLBRdR17
1131 0U, // ROLWRd
1132 0U, // RORBRd
1133 0U, // RORWRd
1134 0U, // Rol16
1135 0U, // Rol8
1136 0U, // Ror16
1137 0U, // Ror8
1138 0U, // SBCIWRdK
1139 0U, // SBCWRdRr
1140 2U, // SEXT
1141 2U, // SPREAD
1142 2U, // SPWRITE
1143 0U, // STDSPQRr
1144 0U, // STDWPtrQRr
1145 0U, // STDWSPQRr
1146 2U, // STSWKRr
1147 0U, // STWPtrPdRr
1148 0U, // STWPtrPiRr
1149 2U, // STWPtrRr
1150 0U, // SUBIWRdK
1151 0U, // SUBWRdRr
1152 0U, // Select16
1153 0U, // Select8
1154 2U, // ZEXT
1155 0U, // ADCRdRr
1156 0U, // ADDRdRr
1157 0U, // ADIWRdK
1158 0U, // ANDIRdK
1159 0U, // ANDRdRr
1160 0U, // ASRRd
1161 0U, // BCLRs
1162 0U, // BLD
1163 6U, // BRBCsk
1164 6U, // BRBSsk
1165 0U, // BREAK
1166 0U, // BREQk
1167 0U, // BRGEk
1168 0U, // BRLOk
1169 0U, // BRLTk
1170 0U, // BRMIk
1171 0U, // BRNEk
1172 0U, // BRPLk
1173 0U, // BRSHk
1174 0U, // BSETs
1175 2U, // BST
1176 0U, // CALLk
1177 2U, // CBIAb
1178 0U, // COMRd
1179 2U, // CPCRdRr
1180 2U, // CPIRdK
1181 2U, // CPRdRr
1182 2U, // CPSE
1183 0U, // DECRd
1184 0U, // DESK
1185 0U, // EICALL
1186 0U, // EIJMP
1187 0U, // ELPM
1188 2U, // ELPMRdZ
1189 50U, // ELPMRdZPi
1190 0U, // EORRdRr
1191 2U, // FMUL
1192 2U, // FMULS
1193 2U, // FMULSU
1194 0U, // ICALL
1195 0U, // IJMP
1196 0U, // INCRd
1197 2U, // INRdA
1198 0U, // JMPk
1199 8U, // LACZRd
1200 8U, // LASZRd
1201 8U, // LATZRd
1202 4U, // LDDRdPtrQ
1203 2U, // LDIRdK
1204 2U, // LDRdPtr
1205 0U, // LDRdPtrPd
1206 48U, // LDRdPtrPi
1207 2U, // LDSRdK
1208 2U, // LDSRdKTiny
1209 0U, // LPM
1210 2U, // LPMRdZ
1211 50U, // LPMRdZPi
1212 0U, // LSRRd
1213 2U, // MOVRdRr
1214 2U, // MOVWRdRr
1215 2U, // MULRdRr
1216 2U, // MULSRdRr
1217 2U, // MULSURdRr
1218 0U, // NEGRd
1219 0U, // NOP
1220 0U, // ORIRdK
1221 0U, // ORRdRr
1222 2U, // OUTARr
1223 0U, // POPRd
1224 0U, // PUSHRr
1225 0U, // RCALLk
1226 0U, // RET
1227 0U, // RETI
1228 0U, // RJMPk
1229 0U, // RORRd
1230 0U, // SBCIRdK
1231 0U, // SBCRdRr
1232 2U, // SBIAb
1233 2U, // SBICAb
1234 2U, // SBISAb
1235 0U, // SBIWRdK
1236 2U, // SBRCRrB
1237 2U, // SBRSRrB
1238 0U, // SLEEP
1239 0U, // SPM
1240 1U, // SPMZPi
1241 0U, // STDPtrQRr
1242 0U, // STPtrPdRr
1243 0U, // STPtrPiRr
1244 2U, // STPtrRr
1245 2U, // STSKRr
1246 2U, // STSKRrTiny
1247 0U, // SUBIRdK
1248 0U, // SUBRdRr
1249 0U, // SWAPRd
1250 0U, // WDR
1251 8U, // XCHZRd
1252 };
1253
1254 // Emit the opcode for the instruction.
1255 uint32_t Bits = 0;
1256 Bits |= OpInfo0[MI.getOpcode()] << 0;
1257 Bits |= OpInfo1[MI.getOpcode()] << 16;
1258 if (Bits == 0)
1259 return {nullptr, Bits};
1260 return {AsmStrs+(Bits & 2047)-1, Bits};
1261
1262}
1263/// printInstruction - This method is automatically generated by tablegen
1264/// from the instruction set description.
1265LLVM_NO_PROFILE_INSTRUMENT_FUNCTION
1266void AVRInstPrinter::printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O) {
1267 O << "\t";
1268
1269 auto MnemonicInfo = getMnemonic(MI: *MI);
1270
1271 O << MnemonicInfo.first;
1272
1273 uint32_t Bits = MnemonicInfo.second;
1274 assert(Bits != 0 && "Cannot print this instruction.");
1275
1276 // Fragment 0 encoded into 3 bits for 6 unique commands.
1277 switch ((Bits >> 11) & 7) {
1278 default: llvm_unreachable("Invalid command number.");
1279 case 0:
1280 // DBG_VALUE, DBG_VALUE_LIST, DBG_INSTR_REF, DBG_PHI, DBG_LABEL, BUNDLE, ...
1281 return;
1282 break;
1283 case 1:
1284 // ADCWRdRr, ADDWRdRr, ADIWRdKP, ANDIWRdK, ANDWRdRr, ASRBNRd, ASRWLoRd, A...
1285 printOperand(MI, OpNo: 0, O);
1286 break;
1287 case 2:
1288 // STDSPQRr, STDWSPQRr
1289 printMemspi(MI, OpNo: 0, O);
1290 O << ", ";
1291 printOperand(MI, OpNo: 2, O);
1292 return;
1293 break;
1294 case 3:
1295 // STDWPtrQRr, STDPtrQRr
1296 printMemri(MI, OpNo: 0, O);
1297 O << ", ";
1298 printOperand(MI, OpNo: 2, O);
1299 return;
1300 break;
1301 case 4:
1302 // STWPtrPdRr, STWPtrPiRr, LACZRd, LASZRd, LATZRd, STPtrPdRr, STPtrPiRr, ...
1303 printOperand(MI, OpNo: 1, O);
1304 break;
1305 case 5:
1306 // BREQk, BRGEk, BRLOk, BRLTk, BRMIk, BRNEk, BRPLk, BRSHk, RCALLk, RJMPk
1307 printPCRelImm(MI, OpNo: 0, O);
1308 return;
1309 break;
1310 }
1311
1312
1313 // Fragment 1 encoded into 3 bits for 5 unique commands.
1314 switch ((Bits >> 14) & 7) {
1315 default: llvm_unreachable("Invalid command number.");
1316 case 0:
1317 // ADCWRdRr, ADDWRdRr, ADIWRdKP, ANDIWRdK, ANDWRdRr, ASRBNRd, ASRWNRd, CP...
1318 O << ", ";
1319 break;
1320 case 1:
1321 // ASRWLoRd, ASRWRd, COMWRd, CopyZero, LSLWHiRd, LSLWRd, LSRWLoRd, LSRWRd...
1322 return;
1323 break;
1324 case 2:
1325 // LDWRdPtrPd, LDRdPtrPd
1326 O << ", -";
1327 printOperand(MI, OpNo: 2, O);
1328 return;
1329 break;
1330 case 3:
1331 // STWPtrPiRr, STPtrPiRr
1332 O << "+, ";
1333 printOperand(MI, OpNo: 2, O);
1334 return;
1335 break;
1336 case 4:
1337 // SPMZPi
1338 O << '+';
1339 return;
1340 break;
1341 }
1342
1343
1344 // Fragment 2 encoded into 3 bits for 5 unique commands.
1345 switch ((Bits >> 17) & 7) {
1346 default: llvm_unreachable("Invalid command number.");
1347 case 0:
1348 // ADCWRdRr, ADDWRdRr, ADIWRdKP, ANDIWRdK, ANDWRdRr, ASRBNRd, ASRWNRd, EO...
1349 printOperand(MI, OpNo: 2, O);
1350 break;
1351 case 1:
1352 // CPCWRdRr, CPWRdRr, ELPMBRdZ, ELPMBRdZPi, ELPMWRdZ, ELPMWRdZPi, FRMIDX,...
1353 printOperand(MI, OpNo: 1, O);
1354 break;
1355 case 2:
1356 // LDDWRdPtrQ, LDDWRdYQ, LDDRdPtrQ
1357 printMemri(MI, OpNo: 1, O);
1358 return;
1359 break;
1360 case 3:
1361 // BRBCsk, BRBSsk
1362 printPCRelImm(MI, OpNo: 1, O);
1363 return;
1364 break;
1365 case 4:
1366 // LACZRd, LASZRd, LATZRd, XCHZRd
1367 printOperand(MI, OpNo: 0, O);
1368 return;
1369 break;
1370 }
1371
1372
1373 // Fragment 3 encoded into 2 bits for 4 unique commands.
1374 switch ((Bits >> 20) & 3) {
1375 default: llvm_unreachable("Invalid command number.");
1376 case 0:
1377 // ADCWRdRr, ADDWRdRr, ADIWRdKP, ANDIWRdK, ANDWRdRr, ASRBNRd, ASRWNRd, CP...
1378 return;
1379 break;
1380 case 1:
1381 // ELPMBRdZ, ELPMWRdZ, FRMIDX
1382 O << ", ";
1383 printOperand(MI, OpNo: 2, O);
1384 break;
1385 case 2:
1386 // ELPMBRdZPi, ELPMWRdZPi
1387 O << "+, ";
1388 printOperand(MI, OpNo: 2, O);
1389 return;
1390 break;
1391 case 3:
1392 // LDWRdPtrPi, LPMWRdZPi, ELPMRdZPi, LDRdPtrPi, LPMRdZPi
1393 O << '+';
1394 return;
1395 break;
1396 }
1397
1398
1399 // Fragment 4 encoded into 1 bits for 2 unique commands.
1400 if ((Bits >> 22) & 1) {
1401 // FRMIDX
1402 O << ", ";
1403 printOperand(MI, OpNo: 3, O);
1404 return;
1405 } else {
1406 // ELPMBRdZ, ELPMWRdZ
1407 return;
1408 }
1409
1410}
1411
1412
1413/// getRegisterName - This method is automatically generated by tblgen
1414/// from the register set description. This returns the assembler name
1415/// for the specified register.
1416const char *AVRInstPrinter::
1417getRegisterName(MCRegister Reg, unsigned AltIdx) {
1418 unsigned RegNo = Reg.id();
1419 assert(RegNo && RegNo < 62 && "Invalid register number!");
1420
1421
1422#ifdef __GNUC__
1423#pragma GCC diagnostic push
1424#pragma GCC diagnostic ignored "-Woverlength-strings"
1425#endif
1426 static const char AsmStrsNoRegAltName[] = {
1427 /* 0 */ "r11:r10\000"
1428 /* 8 */ "r21:r20\000"
1429 /* 16 */ "r31:r30\000"
1430 /* 24 */ "r1:r0\000"
1431 /* 30 */ "r12:r11\000"
1432 /* 38 */ "r22:r21\000"
1433 /* 46 */ "r31\000"
1434 /* 50 */ "r1\000"
1435 /* 53 */ "r13:r12\000"
1436 /* 61 */ "r23:r22\000"
1437 /* 69 */ "r3:r2\000"
1438 /* 75 */ "r14:r13\000"
1439 /* 83 */ "r24:r23\000"
1440 /* 91 */ "r3\000"
1441 /* 94 */ "r15:r14\000"
1442 /* 102 */ "r25:r24\000"
1443 /* 110 */ "r5:r4\000"
1444 /* 116 */ "r16:r15\000"
1445 /* 124 */ "r26:r25\000"
1446 /* 132 */ "r5\000"
1447 /* 135 */ "r17:r16\000"
1448 /* 143 */ "r27:r26\000"
1449 /* 151 */ "r7:r6\000"
1450 /* 157 */ "r18:r17\000"
1451 /* 165 */ "r27\000"
1452 /* 169 */ "r7\000"
1453 /* 172 */ "r19:r18\000"
1454 /* 180 */ "r29:r28\000"
1455 /* 188 */ "r9:r8\000"
1456 /* 194 */ "r20:r19\000"
1457 /* 202 */ "r29\000"
1458 /* 206 */ "r10:r9\000"
1459 /* 213 */ "SPH\000"
1460 /* 217 */ "SPL\000"
1461 /* 221 */ "SP\000"
1462 /* 224 */ "FLAGS\000"
1463};
1464#ifdef __GNUC__
1465#pragma GCC diagnostic pop
1466#endif
1467
1468 static const uint8_t RegAsmOffsetNoRegAltName[] = {
1469 221, 213, 217, 224, 27, 50, 72, 91, 113, 132, 154, 169, 191, 210,
1470 4, 34, 57, 79, 98, 120, 139, 161, 176, 198, 12, 42, 65, 87,
1471 106, 128, 147, 165, 184, 202, 20, 46, 24, 69, 110, 151, 188, 206,
1472 0, 30, 53, 75, 94, 116, 135, 157, 172, 194, 8, 38, 61, 83,
1473 102, 124, 143, 180, 16,
1474 };
1475
1476
1477#ifdef __GNUC__
1478#pragma GCC diagnostic push
1479#pragma GCC diagnostic ignored "-Woverlength-strings"
1480#endif
1481 static const char AsmStrsptr[] = {
1482 /* 0 */ "X\000"
1483 /* 2 */ "Y\000"
1484 /* 4 */ "Z\000"
1485};
1486#ifdef __GNUC__
1487#pragma GCC diagnostic pop
1488#endif
1489
1490 static const uint8_t RegAsmOffsetptr[] = {
1491 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1492 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1493 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1494 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1495 1, 1, 0, 2, 4,
1496 };
1497
1498 switch(AltIdx) {
1499 default: llvm_unreachable("Invalid register alt name index!");
1500 case AVR::NoRegAltName:
1501 assert(*(AsmStrsNoRegAltName+RegAsmOffsetNoRegAltName[RegNo-1]) &&
1502 "Invalid alt name index for register!");
1503 return AsmStrsNoRegAltName+RegAsmOffsetNoRegAltName[RegNo-1];
1504 case AVR::ptr:
1505 assert(*(AsmStrsptr+RegAsmOffsetptr[RegNo-1]) &&
1506 "Invalid alt name index for register!");
1507 return AsmStrsptr+RegAsmOffsetptr[RegNo-1];
1508 }
1509}
1510
1511#ifdef PRINT_ALIAS_INSTR
1512#undef PRINT_ALIAS_INSTR
1513
1514bool AVRInstPrinter::printAliasInstr(const MCInst *MI, uint64_t Address, raw_ostream &OS) {
1515 static const PatternsForOpcode OpToPatterns[] = {
1516 {.Opcode: AVR::ADCRdRr, .PatternStart: 0, .NumPatterns: 1 },
1517 {.Opcode: AVR::ADDRdRr, .PatternStart: 1, .NumPatterns: 1 },
1518 {.Opcode: AVR::ANDRdRr, .PatternStart: 2, .NumPatterns: 1 },
1519 {.Opcode: AVR::BCLRs, .PatternStart: 3, .NumPatterns: 8 },
1520 {.Opcode: AVR::BRBCsk, .PatternStart: 11, .NumPatterns: 5 },
1521 {.Opcode: AVR::BRBSsk, .PatternStart: 16, .NumPatterns: 5 },
1522 {.Opcode: AVR::BSETs, .PatternStart: 21, .NumPatterns: 8 },
1523 {.Opcode: AVR::EORRdRr, .PatternStart: 29, .NumPatterns: 1 },
1524 };
1525
1526 static const AliasPattern Patterns[] = {
1527 // AVR::ADCRdRr - 0
1528 {.AsmStrOffset: 0, .AliasCondStart: 0, .NumOperands: 3, .NumConds: 3 },
1529 // AVR::ADDRdRr - 1
1530 {.AsmStrOffset: 7, .AliasCondStart: 3, .NumOperands: 3, .NumConds: 3 },
1531 // AVR::ANDRdRr - 2
1532 {.AsmStrOffset: 14, .AliasCondStart: 6, .NumOperands: 3, .NumConds: 3 },
1533 // AVR::BCLRs - 3
1534 {.AsmStrOffset: 21, .AliasCondStart: 9, .NumOperands: 1, .NumConds: 1 },
1535 {.AsmStrOffset: 25, .AliasCondStart: 10, .NumOperands: 1, .NumConds: 1 },
1536 {.AsmStrOffset: 29, .AliasCondStart: 11, .NumOperands: 1, .NumConds: 1 },
1537 {.AsmStrOffset: 33, .AliasCondStart: 12, .NumOperands: 1, .NumConds: 1 },
1538 {.AsmStrOffset: 37, .AliasCondStart: 13, .NumOperands: 1, .NumConds: 1 },
1539 {.AsmStrOffset: 41, .AliasCondStart: 14, .NumOperands: 1, .NumConds: 1 },
1540 {.AsmStrOffset: 45, .AliasCondStart: 15, .NumOperands: 1, .NumConds: 1 },
1541 {.AsmStrOffset: 49, .AliasCondStart: 16, .NumOperands: 1, .NumConds: 1 },
1542 // AVR::BRBCsk - 11
1543 {.AsmStrOffset: 53, .AliasCondStart: 17, .NumOperands: 2, .NumConds: 1 },
1544 {.AsmStrOffset: 63, .AliasCondStart: 18, .NumOperands: 2, .NumConds: 1 },
1545 {.AsmStrOffset: 73, .AliasCondStart: 19, .NumOperands: 2, .NumConds: 1 },
1546 {.AsmStrOffset: 83, .AliasCondStart: 20, .NumOperands: 2, .NumConds: 1 },
1547 {.AsmStrOffset: 93, .AliasCondStart: 21, .NumOperands: 2, .NumConds: 1 },
1548 // AVR::BRBSsk - 16
1549 {.AsmStrOffset: 103, .AliasCondStart: 22, .NumOperands: 2, .NumConds: 1 },
1550 {.AsmStrOffset: 113, .AliasCondStart: 23, .NumOperands: 2, .NumConds: 1 },
1551 {.AsmStrOffset: 123, .AliasCondStart: 24, .NumOperands: 2, .NumConds: 1 },
1552 {.AsmStrOffset: 133, .AliasCondStart: 25, .NumOperands: 2, .NumConds: 1 },
1553 {.AsmStrOffset: 143, .AliasCondStart: 26, .NumOperands: 2, .NumConds: 1 },
1554 // AVR::BSETs - 21
1555 {.AsmStrOffset: 153, .AliasCondStart: 27, .NumOperands: 1, .NumConds: 1 },
1556 {.AsmStrOffset: 157, .AliasCondStart: 28, .NumOperands: 1, .NumConds: 1 },
1557 {.AsmStrOffset: 161, .AliasCondStart: 29, .NumOperands: 1, .NumConds: 1 },
1558 {.AsmStrOffset: 165, .AliasCondStart: 30, .NumOperands: 1, .NumConds: 1 },
1559 {.AsmStrOffset: 169, .AliasCondStart: 31, .NumOperands: 1, .NumConds: 1 },
1560 {.AsmStrOffset: 173, .AliasCondStart: 32, .NumOperands: 1, .NumConds: 1 },
1561 {.AsmStrOffset: 177, .AliasCondStart: 33, .NumOperands: 1, .NumConds: 1 },
1562 {.AsmStrOffset: 181, .AliasCondStart: 34, .NumOperands: 1, .NumConds: 1 },
1563 // AVR::EORRdRr - 29
1564 {.AsmStrOffset: 185, .AliasCondStart: 35, .NumOperands: 3, .NumConds: 3 },
1565 };
1566
1567 static const AliasPatternCond Conds[] = {
1568 // (ADCRdRr GPR8:$rd, GPR8:$rd) - 0
1569 {.Kind: AliasPatternCond::K_RegClass, .Value: AVR::GPR8RegClassID},
1570 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1571 {.Kind: AliasPatternCond::K_TiedReg, .Value: 0},
1572 // (ADDRdRr GPR8:$rd, GPR8:$rd) - 3
1573 {.Kind: AliasPatternCond::K_RegClass, .Value: AVR::GPR8RegClassID},
1574 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1575 {.Kind: AliasPatternCond::K_TiedReg, .Value: 0},
1576 // (ANDRdRr GPR8:$rd, GPR8:$rd) - 6
1577 {.Kind: AliasPatternCond::K_RegClass, .Value: AVR::GPR8RegClassID},
1578 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1579 {.Kind: AliasPatternCond::K_TiedReg, .Value: 0},
1580 // (BCLRs 0) - 9
1581 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1582 // (BCLRs 1) - 10
1583 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(1)},
1584 // (BCLRs 2) - 11
1585 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(2)},
1586 // (BCLRs 3) - 12
1587 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(3)},
1588 // (BCLRs 4) - 13
1589 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(4)},
1590 // (BCLRs 5) - 14
1591 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(5)},
1592 // (BCLRs 6) - 15
1593 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(6)},
1594 // (BCLRs 7) - 16
1595 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(7)},
1596 // (BRBCsk 0, relbrtarget_7:$k) - 17
1597 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1598 // (BRBCsk 5, relbrtarget_7:$k) - 18
1599 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(5)},
1600 // (BRBCsk 6, relbrtarget_7:$k) - 19
1601 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(6)},
1602 // (BRBCsk 3, relbrtarget_7:$k) - 20
1603 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(3)},
1604 // (BRBCsk 7, relbrtarget_7:$k) - 21
1605 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(7)},
1606 // (BRBSsk 0, relbrtarget_7:$k) - 22
1607 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1608 // (BRBSsk 5, relbrtarget_7:$k) - 23
1609 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(5)},
1610 // (BRBSsk 6, relbrtarget_7:$k) - 24
1611 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(6)},
1612 // (BRBSsk 3, relbrtarget_7:$k) - 25
1613 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(3)},
1614 // (BRBSsk 7, relbrtarget_7:$k) - 26
1615 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(7)},
1616 // (BSETs 0) - 27
1617 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1618 // (BSETs 1) - 28
1619 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(1)},
1620 // (BSETs 2) - 29
1621 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(2)},
1622 // (BSETs 3) - 30
1623 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(3)},
1624 // (BSETs 4) - 31
1625 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(4)},
1626 // (BSETs 5) - 32
1627 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(5)},
1628 // (BSETs 6) - 33
1629 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(6)},
1630 // (BSETs 7) - 34
1631 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(7)},
1632 // (EORRdRr GPR8:$rd, GPR8:$rd) - 35
1633 {.Kind: AliasPatternCond::K_RegClass, .Value: AVR::GPR8RegClassID},
1634 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1635 {.Kind: AliasPatternCond::K_TiedReg, .Value: 0},
1636 };
1637
1638 static const char AsmStrings[] =
1639 /* 0 */ "rol $\x01\0"
1640 /* 7 */ "lsl $\x01\0"
1641 /* 14 */ "tst $\x01\0"
1642 /* 21 */ "clc\0"
1643 /* 25 */ "clz\0"
1644 /* 29 */ "cln\0"
1645 /* 33 */ "clv\0"
1646 /* 37 */ "cls\0"
1647 /* 41 */ "clh\0"
1648 /* 45 */ "clt\0"
1649 /* 49 */ "cli\0"
1650 /* 53 */ "brcc $\xFF\x02\x01\0"
1651 /* 63 */ "brhc $\xFF\x02\x01\0"
1652 /* 73 */ "brtc $\xFF\x02\x01\0"
1653 /* 83 */ "brvc $\xFF\x02\x01\0"
1654 /* 93 */ "brid $\xFF\x02\x01\0"
1655 /* 103 */ "brcs $\xFF\x02\x01\0"
1656 /* 113 */ "brhs $\xFF\x02\x01\0"
1657 /* 123 */ "brts $\xFF\x02\x01\0"
1658 /* 133 */ "brvs $\xFF\x02\x01\0"
1659 /* 143 */ "brie $\xFF\x02\x01\0"
1660 /* 153 */ "sec\0"
1661 /* 157 */ "sez\0"
1662 /* 161 */ "sen\0"
1663 /* 165 */ "sev\0"
1664 /* 169 */ "ses\0"
1665 /* 173 */ "seh\0"
1666 /* 177 */ "set\0"
1667 /* 181 */ "sei\0"
1668 /* 185 */ "clr $\x01\0"
1669 ;
1670
1671#ifndef NDEBUG
1672 static struct SortCheck {
1673 SortCheck(ArrayRef<PatternsForOpcode> OpToPatterns) {
1674 assert(std::is_sorted(
1675 OpToPatterns.begin(), OpToPatterns.end(),
1676 [](const PatternsForOpcode &L, const PatternsForOpcode &R) {
1677 return L.Opcode < R.Opcode;
1678 }) &&
1679 "tablegen failed to sort opcode patterns");
1680 }
1681 } sortCheckVar(OpToPatterns);
1682#endif
1683
1684 AliasMatchingData M {
1685 .OpToPatterns: ArrayRef(OpToPatterns),
1686 .Patterns: ArrayRef(Patterns),
1687 .PatternConds: ArrayRef(Conds),
1688 .AsmStrings: StringRef(AsmStrings, std::size(AsmStrings)),
1689 .ValidateMCOperand: nullptr,
1690 };
1691 const char *AsmString = matchAliasPatterns(MI, STI: nullptr, M);
1692 if (!AsmString) return false;
1693
1694 unsigned I = 0;
1695 while (AsmString[I] != ' ' && AsmString[I] != '\t' &&
1696 AsmString[I] != '$' && AsmString[I] != '\0')
1697 ++I;
1698 OS << '\t' << StringRef(AsmString, I);
1699 if (AsmString[I] != '\0') {
1700 if (AsmString[I] == ' ' || AsmString[I] == '\t') {
1701 OS << '\t';
1702 ++I;
1703 }
1704 do {
1705 if (AsmString[I] == '$') {
1706 ++I;
1707 if (AsmString[I] == (char)0xff) {
1708 ++I;
1709 int OpIdx = AsmString[I++] - 1;
1710 int PrintMethodIdx = AsmString[I++] - 1;
1711 printCustomAliasOperand(MI, Address, OpIdx, PrintMethodIdx, O&: OS);
1712 } else
1713 printOperand(MI, OpNo: unsigned(AsmString[I++]) - 1, O&: OS);
1714 } else {
1715 OS << AsmString[I++];
1716 }
1717 } while (AsmString[I] != '\0');
1718 }
1719
1720 return true;
1721}
1722
1723void AVRInstPrinter::printCustomAliasOperand(
1724 const MCInst *MI, uint64_t Address, unsigned OpIdx,
1725 unsigned PrintMethodIdx,
1726 raw_ostream &OS) {
1727 switch (PrintMethodIdx) {
1728 default:
1729 llvm_unreachable("Unknown PrintMethod kind");
1730 break;
1731 case 0:
1732 printPCRelImm(MI, OpNo: OpIdx, O&: OS);
1733 break;
1734 }
1735}
1736
1737#endif // PRINT_ALIAS_INSTR
1738