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