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