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