1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* Assembly Writer Source Fragment *|
4|* *|
5|* Automatically generated file, do not edit! *|
6|* From: MSP430.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>
13MSP430InstPrinter::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 */ "rra\t\000"
21 /* 5 */ "rra.b\t\000"
22 /* 12 */ "sub.b\t\000"
23 /* 19 */ "subc.b\t\000"
24 /* 27 */ "addc.b\t\000"
25 /* 35 */ "bic.b\t\000"
26 /* 42 */ "rrc.b\t\000"
27 /* 49 */ "dadd.b\t\000"
28 /* 57 */ "and.b\t\000"
29 /* 64 */ "push.b\t\000"
30 /* 72 */ "cmp.b\t\000"
31 /* 79 */ "xor.b\t\000"
32 /* 86 */ "bis.b\t\000"
33 /* 93 */ "bit.b\t\000"
34 /* 100 */ "mov.b\t\000"
35 /* 107 */ "swpb\t\000"
36 /* 113 */ "sub\t\000"
37 /* 118 */ "subc\t\000"
38 /* 124 */ "addc\t\000"
39 /* 130 */ "bic\t\000"
40 /* 135 */ "rrc\t\000"
41 /* 140 */ "dadd\t\000"
42 /* 146 */ "and\t\000"
43 /* 151 */ "push\t\000"
44 /* 157 */ "call\t\000"
45 /* 163 */ "cmp\t\000"
46 /* 168 */ "jmp\t\000"
47 /* 173 */ "pop\t\000"
48 /* 178 */ "br\t\000"
49 /* 182 */ "xor\t\000"
50 /* 187 */ "bis\t\000"
51 /* 192 */ "bit\t\000"
52 /* 197 */ "sxt\t\000"
53 /* 202 */ "mov\t\000"
54 /* 207 */ "#ADJCALLSTACKDOWN \000"
55 /* 226 */ "#ADJCALLSTACKUP \000"
56 /* 243 */ "# XRay Function Patchable RET.\000"
57 /* 274 */ "# XRay Typed Event Log.\000"
58 /* 298 */ "# XRay Custom Event Log.\000"
59 /* 323 */ "# XRay Function Enter.\000"
60 /* 346 */ "# XRay Tail Call Exit.\000"
61 /* 369 */ "# XRay Function Exit.\000"
62 /* 391 */ "LIFETIME_END\000"
63 /* 404 */ "PSEUDO_PROBE\000"
64 /* 417 */ "BUNDLE\000"
65 /* 424 */ "FAKE_USE\000"
66 /* 433 */ "DBG_VALUE\000"
67 /* 443 */ "DBG_INSTR_REF\000"
68 /* 457 */ "DBG_PHI\000"
69 /* 465 */ "DBG_LABEL\000"
70 /* 475 */ "# Sra16 PSEUDO\000"
71 /* 490 */ "# Shl16 PSEUDO\000"
72 /* 505 */ "# Srl16 PSEUDO\000"
73 /* 520 */ "# Select16 PSEUDO\000"
74 /* 538 */ "# Sra8 PSEUDO\000"
75 /* 552 */ "# Shl8 PSEUDO\000"
76 /* 566 */ "# Srl8 PSEUDO\000"
77 /* 580 */ "# Select8 PSEUDO\000"
78 /* 597 */ "# ADDframe PSEUDO\000"
79 /* 615 */ "LIFETIME_START\000"
80 /* 630 */ "DBG_VALUE_LIST\000"
81 /* 645 */ "reti\000"
82 /* 650 */ "j\000"
83 /* 652 */ "# FEntry call\000"
84 /* 666 */ "ret\000"
85};
86#ifdef __GNUC__
87#pragma GCC diagnostic pop
88#endif
89
90 static const uint16_t OpInfo0[] = {
91 0U, // PHI
92 0U, // INLINEASM
93 0U, // INLINEASM_BR
94 0U, // CFI_INSTRUCTION
95 0U, // EH_LABEL
96 0U, // GC_LABEL
97 0U, // ANNOTATION_LABEL
98 0U, // KILL
99 0U, // EXTRACT_SUBREG
100 0U, // INSERT_SUBREG
101 0U, // IMPLICIT_DEF
102 0U, // INIT_UNDEF
103 0U, // SUBREG_TO_REG
104 0U, // COPY_TO_REGCLASS
105 434U, // DBG_VALUE
106 631U, // DBG_VALUE_LIST
107 444U, // DBG_INSTR_REF
108 458U, // DBG_PHI
109 466U, // DBG_LABEL
110 0U, // REG_SEQUENCE
111 0U, // COPY
112 418U, // BUNDLE
113 616U, // LIFETIME_START
114 392U, // LIFETIME_END
115 405U, // PSEUDO_PROBE
116 0U, // ARITH_FENCE
117 0U, // STACKMAP
118 653U, // FENTRY_CALL
119 0U, // PATCHPOINT
120 0U, // LOAD_STACK_GUARD
121 0U, // PREALLOCATED_SETUP
122 0U, // PREALLOCATED_ARG
123 0U, // STATEPOINT
124 0U, // LOCAL_ESCAPE
125 0U, // FAULTING_OP
126 0U, // PATCHABLE_OP
127 324U, // PATCHABLE_FUNCTION_ENTER
128 244U, // PATCHABLE_RET
129 370U, // PATCHABLE_FUNCTION_EXIT
130 347U, // PATCHABLE_TAIL_CALL
131 299U, // PATCHABLE_EVENT_CALL
132 275U, // PATCHABLE_TYPED_EVENT_CALL
133 0U, // ICALL_BRANCH_FUNNEL
134 425U, // FAKE_USE
135 0U, // MEMBARRIER
136 0U, // JUMP_TABLE_DEBUG_INFO
137 0U, // CONVERGENCECTRL_ENTRY
138 0U, // CONVERGENCECTRL_ANCHOR
139 0U, // CONVERGENCECTRL_LOOP
140 0U, // CONVERGENCECTRL_GLUE
141 0U, // G_ASSERT_SEXT
142 0U, // G_ASSERT_ZEXT
143 0U, // G_ASSERT_ALIGN
144 0U, // G_ADD
145 0U, // G_SUB
146 0U, // G_MUL
147 0U, // G_SDIV
148 0U, // G_UDIV
149 0U, // G_SREM
150 0U, // G_UREM
151 0U, // G_SDIVREM
152 0U, // G_UDIVREM
153 0U, // G_AND
154 0U, // G_OR
155 0U, // G_XOR
156 0U, // G_ABDS
157 0U, // G_ABDU
158 0U, // G_IMPLICIT_DEF
159 0U, // G_PHI
160 0U, // G_FRAME_INDEX
161 0U, // G_GLOBAL_VALUE
162 0U, // G_PTRAUTH_GLOBAL_VALUE
163 0U, // G_CONSTANT_POOL
164 0U, // G_EXTRACT
165 0U, // G_UNMERGE_VALUES
166 0U, // G_INSERT
167 0U, // G_MERGE_VALUES
168 0U, // G_BUILD_VECTOR
169 0U, // G_BUILD_VECTOR_TRUNC
170 0U, // G_CONCAT_VECTORS
171 0U, // G_PTRTOINT
172 0U, // G_INTTOPTR
173 0U, // G_BITCAST
174 0U, // G_FREEZE
175 0U, // G_CONSTANT_FOLD_BARRIER
176 0U, // G_INTRINSIC_FPTRUNC_ROUND
177 0U, // G_INTRINSIC_TRUNC
178 0U, // G_INTRINSIC_ROUND
179 0U, // G_INTRINSIC_LRINT
180 0U, // G_INTRINSIC_LLRINT
181 0U, // G_INTRINSIC_ROUNDEVEN
182 0U, // G_READCYCLECOUNTER
183 0U, // G_READSTEADYCOUNTER
184 0U, // G_LOAD
185 0U, // G_SEXTLOAD
186 0U, // G_ZEXTLOAD
187 0U, // G_INDEXED_LOAD
188 0U, // G_INDEXED_SEXTLOAD
189 0U, // G_INDEXED_ZEXTLOAD
190 0U, // G_STORE
191 0U, // G_INDEXED_STORE
192 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS
193 0U, // G_ATOMIC_CMPXCHG
194 0U, // G_ATOMICRMW_XCHG
195 0U, // G_ATOMICRMW_ADD
196 0U, // G_ATOMICRMW_SUB
197 0U, // G_ATOMICRMW_AND
198 0U, // G_ATOMICRMW_NAND
199 0U, // G_ATOMICRMW_OR
200 0U, // G_ATOMICRMW_XOR
201 0U, // G_ATOMICRMW_MAX
202 0U, // G_ATOMICRMW_MIN
203 0U, // G_ATOMICRMW_UMAX
204 0U, // G_ATOMICRMW_UMIN
205 0U, // G_ATOMICRMW_FADD
206 0U, // G_ATOMICRMW_FSUB
207 0U, // G_ATOMICRMW_FMAX
208 0U, // G_ATOMICRMW_FMIN
209 0U, // G_ATOMICRMW_FMAXIMUM
210 0U, // G_ATOMICRMW_FMINIMUM
211 0U, // G_ATOMICRMW_UINC_WRAP
212 0U, // G_ATOMICRMW_UDEC_WRAP
213 0U, // G_ATOMICRMW_USUB_COND
214 0U, // G_ATOMICRMW_USUB_SAT
215 0U, // G_FENCE
216 0U, // G_PREFETCH
217 0U, // G_BRCOND
218 0U, // G_BRINDIRECT
219 0U, // G_INVOKE_REGION_START
220 0U, // G_INTRINSIC
221 0U, // G_INTRINSIC_W_SIDE_EFFECTS
222 0U, // G_INTRINSIC_CONVERGENT
223 0U, // G_INTRINSIC_CONVERGENT_W_SIDE_EFFECTS
224 0U, // G_ANYEXT
225 0U, // G_TRUNC
226 0U, // G_CONSTANT
227 0U, // G_FCONSTANT
228 0U, // G_VASTART
229 0U, // G_VAARG
230 0U, // G_SEXT
231 0U, // G_SEXT_INREG
232 0U, // G_ZEXT
233 0U, // G_SHL
234 0U, // G_LSHR
235 0U, // G_ASHR
236 0U, // G_FSHL
237 0U, // G_FSHR
238 0U, // G_ROTR
239 0U, // G_ROTL
240 0U, // G_ICMP
241 0U, // G_FCMP
242 0U, // G_SCMP
243 0U, // G_UCMP
244 0U, // G_SELECT
245 0U, // G_UADDO
246 0U, // G_UADDE
247 0U, // G_USUBO
248 0U, // G_USUBE
249 0U, // G_SADDO
250 0U, // G_SADDE
251 0U, // G_SSUBO
252 0U, // G_SSUBE
253 0U, // G_UMULO
254 0U, // G_SMULO
255 0U, // G_UMULH
256 0U, // G_SMULH
257 0U, // G_UADDSAT
258 0U, // G_SADDSAT
259 0U, // G_USUBSAT
260 0U, // G_SSUBSAT
261 0U, // G_USHLSAT
262 0U, // G_SSHLSAT
263 0U, // G_SMULFIX
264 0U, // G_UMULFIX
265 0U, // G_SMULFIXSAT
266 0U, // G_UMULFIXSAT
267 0U, // G_SDIVFIX
268 0U, // G_UDIVFIX
269 0U, // G_SDIVFIXSAT
270 0U, // G_UDIVFIXSAT
271 0U, // G_FADD
272 0U, // G_FSUB
273 0U, // G_FMUL
274 0U, // G_FMA
275 0U, // G_FMAD
276 0U, // G_FDIV
277 0U, // G_FREM
278 0U, // G_FPOW
279 0U, // G_FPOWI
280 0U, // G_FEXP
281 0U, // G_FEXP2
282 0U, // G_FEXP10
283 0U, // G_FLOG
284 0U, // G_FLOG2
285 0U, // G_FLOG10
286 0U, // G_FLDEXP
287 0U, // G_FFREXP
288 0U, // G_FNEG
289 0U, // G_FPEXT
290 0U, // G_FPTRUNC
291 0U, // G_FPTOSI
292 0U, // G_FPTOUI
293 0U, // G_SITOFP
294 0U, // G_UITOFP
295 0U, // G_FPTOSI_SAT
296 0U, // G_FPTOUI_SAT
297 0U, // G_FABS
298 0U, // G_FCOPYSIGN
299 0U, // G_IS_FPCLASS
300 0U, // G_FCANONICALIZE
301 0U, // G_FMINNUM
302 0U, // G_FMAXNUM
303 0U, // G_FMINNUM_IEEE
304 0U, // G_FMAXNUM_IEEE
305 0U, // G_FMINIMUM
306 0U, // G_FMAXIMUM
307 0U, // G_FMINIMUMNUM
308 0U, // G_FMAXIMUMNUM
309 0U, // G_GET_FPENV
310 0U, // G_SET_FPENV
311 0U, // G_RESET_FPENV
312 0U, // G_GET_FPMODE
313 0U, // G_SET_FPMODE
314 0U, // G_RESET_FPMODE
315 0U, // G_PTR_ADD
316 0U, // G_PTRMASK
317 0U, // G_SMIN
318 0U, // G_SMAX
319 0U, // G_UMIN
320 0U, // G_UMAX
321 0U, // G_ABS
322 0U, // G_LROUND
323 0U, // G_LLROUND
324 0U, // G_BR
325 0U, // G_BRJT
326 0U, // G_VSCALE
327 0U, // G_INSERT_SUBVECTOR
328 0U, // G_EXTRACT_SUBVECTOR
329 0U, // G_INSERT_VECTOR_ELT
330 0U, // G_EXTRACT_VECTOR_ELT
331 0U, // G_SHUFFLE_VECTOR
332 0U, // G_SPLAT_VECTOR
333 0U, // G_STEP_VECTOR
334 0U, // G_VECTOR_COMPRESS
335 0U, // G_CTTZ
336 0U, // G_CTTZ_ZERO_UNDEF
337 0U, // G_CTLZ
338 0U, // G_CTLZ_ZERO_UNDEF
339 0U, // G_CTPOP
340 0U, // G_BSWAP
341 0U, // G_BITREVERSE
342 0U, // G_FCEIL
343 0U, // G_FCOS
344 0U, // G_FSIN
345 0U, // G_FSINCOS
346 0U, // G_FTAN
347 0U, // G_FACOS
348 0U, // G_FASIN
349 0U, // G_FATAN
350 0U, // G_FATAN2
351 0U, // G_FCOSH
352 0U, // G_FSINH
353 0U, // G_FTANH
354 0U, // G_FSQRT
355 0U, // G_FFLOOR
356 0U, // G_FRINT
357 0U, // G_FNEARBYINT
358 0U, // G_ADDRSPACE_CAST
359 0U, // G_BLOCK_ADDR
360 0U, // G_JUMP_TABLE
361 0U, // G_DYN_STACKALLOC
362 0U, // G_STACKSAVE
363 0U, // G_STACKRESTORE
364 0U, // G_STRICT_FADD
365 0U, // G_STRICT_FSUB
366 0U, // G_STRICT_FMUL
367 0U, // G_STRICT_FDIV
368 0U, // G_STRICT_FREM
369 0U, // G_STRICT_FMA
370 0U, // G_STRICT_FSQRT
371 0U, // G_STRICT_FLDEXP
372 0U, // G_READ_REGISTER
373 0U, // G_WRITE_REGISTER
374 0U, // G_MEMCPY
375 0U, // G_MEMCPY_INLINE
376 0U, // G_MEMMOVE
377 0U, // G_MEMSET
378 0U, // G_BZERO
379 0U, // G_TRAP
380 0U, // G_DEBUGTRAP
381 0U, // G_UBSANTRAP
382 0U, // G_VECREDUCE_SEQ_FADD
383 0U, // G_VECREDUCE_SEQ_FMUL
384 0U, // G_VECREDUCE_FADD
385 0U, // G_VECREDUCE_FMUL
386 0U, // G_VECREDUCE_FMAX
387 0U, // G_VECREDUCE_FMIN
388 0U, // G_VECREDUCE_FMAXIMUM
389 0U, // G_VECREDUCE_FMINIMUM
390 0U, // G_VECREDUCE_ADD
391 0U, // G_VECREDUCE_MUL
392 0U, // G_VECREDUCE_AND
393 0U, // G_VECREDUCE_OR
394 0U, // G_VECREDUCE_XOR
395 0U, // G_VECREDUCE_SMAX
396 0U, // G_VECREDUCE_SMIN
397 0U, // G_VECREDUCE_UMAX
398 0U, // G_VECREDUCE_UMIN
399 0U, // G_SBFX
400 0U, // G_UBFX
401 1166U, // ADD16mc
402 1166U, // ADD16mi
403 2190U, // ADD16mm
404 3214U, // ADD16mn
405 4238U, // ADD16mp
406 1166U, // ADD16mr
407 17550U, // ADD16rc
408 17550U, // ADD16ri
409 18574U, // ADD16rm
410 19598U, // ADD16rn
411 5262U, // ADD16rp
412 17550U, // ADD16rr
413 1075U, // ADD8mc
414 1075U, // ADD8mi
415 2099U, // ADD8mm
416 3123U, // ADD8mn
417 4147U, // ADD8mp
418 1075U, // ADD8mr
419 17459U, // ADD8rc
420 17459U, // ADD8ri
421 18483U, // ADD8rm
422 19507U, // ADD8rn
423 5171U, // ADD8rp
424 17459U, // ADD8rr
425 1149U, // ADDC16mc
426 1149U, // ADDC16mi
427 2173U, // ADDC16mm
428 3197U, // ADDC16mn
429 4221U, // ADDC16mp
430 1149U, // ADDC16mr
431 17533U, // ADDC16rc
432 17533U, // ADDC16ri
433 18557U, // ADDC16rm
434 19581U, // ADDC16rn
435 5245U, // ADDC16rp
436 17533U, // ADDC16rr
437 1052U, // ADDC8mc
438 1052U, // ADDC8mi
439 2076U, // ADDC8mm
440 3100U, // ADDC8mn
441 4124U, // ADDC8mp
442 1052U, // ADDC8mr
443 17436U, // ADDC8rc
444 17436U, // ADDC8ri
445 18460U, // ADDC8rm
446 19484U, // ADDC8rn
447 5148U, // ADDC8rp
448 17436U, // ADDC8rr
449 598U, // ADDframe
450 39120U, // ADJCALLSTACKDOWN
451 39139U, // ADJCALLSTACKUP
452 1171U, // AND16mc
453 1171U, // AND16mi
454 2195U, // AND16mm
455 3219U, // AND16mn
456 4243U, // AND16mp
457 1171U, // AND16mr
458 17555U, // AND16rc
459 17555U, // AND16ri
460 18579U, // AND16rm
461 19603U, // AND16rn
462 5267U, // AND16rp
463 17555U, // AND16rr
464 1082U, // AND8mc
465 1082U, // AND8mi
466 2106U, // AND8mm
467 3130U, // AND8mn
468 4154U, // AND8mp
469 1082U, // AND8mr
470 17466U, // AND8rc
471 17466U, // AND8ri
472 18490U, // AND8rm
473 19514U, // AND8rn
474 5178U, // AND8rp
475 17466U, // AND8rr
476 1155U, // BIC16mc
477 1155U, // BIC16mi
478 2179U, // BIC16mm
479 3203U, // BIC16mn
480 4227U, // BIC16mp
481 1155U, // BIC16mr
482 17539U, // BIC16rc
483 17539U, // BIC16ri
484 18563U, // BIC16rm
485 19587U, // BIC16rn
486 5251U, // BIC16rp
487 17539U, // BIC16rr
488 1060U, // BIC8mc
489 1060U, // BIC8mi
490 2084U, // BIC8mm
491 3108U, // BIC8mn
492 4132U, // BIC8mp
493 1060U, // BIC8mr
494 17444U, // BIC8rc
495 17444U, // BIC8ri
496 18468U, // BIC8rm
497 19492U, // BIC8rn
498 5156U, // BIC8rp
499 17444U, // BIC8rr
500 1212U, // BIS16mc
501 1212U, // BIS16mi
502 2236U, // BIS16mm
503 3260U, // BIS16mn
504 4284U, // BIS16mp
505 1212U, // BIS16mr
506 17596U, // BIS16rc
507 17596U, // BIS16ri
508 18620U, // BIS16rm
509 19644U, // BIS16rn
510 5308U, // BIS16rp
511 17596U, // BIS16rr
512 1111U, // BIS8mc
513 1111U, // BIS8mi
514 2135U, // BIS8mm
515 3159U, // BIS8mn
516 4183U, // BIS8mp
517 1111U, // BIS8mr
518 17495U, // BIS8rc
519 17495U, // BIS8ri
520 18519U, // BIS8rm
521 19543U, // BIS8rn
522 5207U, // BIS8rp
523 17495U, // BIS8rr
524 1217U, // BIT16mc
525 1217U, // BIT16mi
526 2241U, // BIT16mm
527 3265U, // BIT16mn
528 4289U, // BIT16mp
529 1217U, // BIT16mr
530 7361U, // BIT16rc
531 7361U, // BIT16ri
532 8385U, // BIT16rm
533 9409U, // BIT16rn
534 10433U, // BIT16rp
535 7361U, // BIT16rr
536 1118U, // BIT8mc
537 1118U, // BIT8mi
538 2142U, // BIT8mm
539 3166U, // BIT8mn
540 4190U, // BIT8mp
541 1118U, // BIT8mr
542 7262U, // BIT8rc
543 7262U, // BIT8ri
544 8286U, // BIT8rm
545 9310U, // BIT8rn
546 10334U, // BIT8rp
547 7262U, // BIT8rr
548 55475U, // Bi
549 11443U, // Bm
550 55475U, // Br
551 55454U, // CALLi
552 11422U, // CALLm
553 12446U, // CALLn
554 13470U, // CALLp
555 55454U, // CALLr
556 1188U, // CMP16mc
557 1188U, // CMP16mi
558 2212U, // CMP16mm
559 3236U, // CMP16mn
560 4260U, // CMP16mp
561 1188U, // CMP16mr
562 7332U, // CMP16rc
563 7332U, // CMP16ri
564 8356U, // CMP16rm
565 9380U, // CMP16rn
566 10404U, // CMP16rp
567 7332U, // CMP16rr
568 1097U, // CMP8mc
569 1097U, // CMP8mi
570 2121U, // CMP8mm
571 3145U, // CMP8mn
572 4169U, // CMP8mp
573 1097U, // CMP8mr
574 7241U, // CMP8rc
575 7241U, // CMP8ri
576 8265U, // CMP8rm
577 9289U, // CMP8rn
578 10313U, // CMP8rp
579 7241U, // CMP8rr
580 1165U, // DADD16mc
581 1165U, // DADD16mi
582 2189U, // DADD16mm
583 3213U, // DADD16mn
584 4237U, // DADD16mp
585 1165U, // DADD16mr
586 17549U, // DADD16rc
587 17549U, // DADD16ri
588 18573U, // DADD16rm
589 19597U, // DADD16rn
590 5261U, // DADD16rp
591 17549U, // DADD16rr
592 1074U, // DADD8mc
593 1074U, // DADD8mi
594 2098U, // DADD8mm
595 3122U, // DADD8mn
596 4146U, // DADD8mp
597 1074U, // DADD8mr
598 17458U, // DADD8rc
599 17458U, // DADD8ri
600 18482U, // DADD8rm
601 19506U, // DADD8rn
602 5170U, // DADD8rp
603 17458U, // DADD8rr
604 14987U, // JCC
605 15529U, // JMP
606 1227U, // MOV16mc
607 1227U, // MOV16mi
608 2251U, // MOV16mm
609 3275U, // MOV16mn
610 1227U, // MOV16mr
611 7371U, // MOV16rc
612 7371U, // MOV16ri
613 8395U, // MOV16rm
614 9419U, // MOV16rn
615 20683U, // MOV16rp
616 7371U, // MOV16rr
617 1125U, // MOV8mc
618 1125U, // MOV8mi
619 2149U, // MOV8mm
620 3173U, // MOV8mn
621 1125U, // MOV8mr
622 7269U, // MOV8rc
623 7269U, // MOV8ri
624 8293U, // MOV8rm
625 9317U, // MOV8rn
626 20581U, // MOV8rp
627 7269U, // MOV8rr
628 8293U, // MOVZX16rm8
629 7269U, // MOVZX16rr8
630 55470U, // POP16r
631 55448U, // PUSH16c
632 55448U, // PUSH16i
633 55448U, // PUSH16r
634 55361U, // PUSH8r
635 667U, // RET
636 646U, // RETI
637 11265U, // RRA16m
638 12289U, // RRA16n
639 13313U, // RRA16p
640 55297U, // RRA16r
641 11270U, // RRA8m
642 12294U, // RRA8n
643 13318U, // RRA8p
644 55302U, // RRA8r
645 11400U, // RRC16m
646 12424U, // RRC16n
647 13448U, // RRC16p
648 55432U, // RRC16r
649 11307U, // RRC8m
650 12331U, // RRC8n
651 13355U, // RRC8p
652 55339U, // RRC8r
653 0U, // Rrcl16
654 0U, // Rrcl8
655 11462U, // SEXT16m
656 12486U, // SEXT16n
657 13510U, // SEXT16p
658 55494U, // SEXT16r
659 1138U, // SUB16mc
660 1138U, // SUB16mi
661 2162U, // SUB16mm
662 3186U, // SUB16mn
663 4210U, // SUB16mp
664 1138U, // SUB16mr
665 17522U, // SUB16rc
666 17522U, // SUB16ri
667 18546U, // SUB16rm
668 19570U, // SUB16rn
669 5234U, // SUB16rp
670 17522U, // SUB16rr
671 1037U, // SUB8mc
672 1037U, // SUB8mi
673 2061U, // SUB8mm
674 3085U, // SUB8mn
675 4109U, // SUB8mp
676 1037U, // SUB8mr
677 17421U, // SUB8rc
678 17421U, // SUB8ri
679 18445U, // SUB8rm
680 19469U, // SUB8rn
681 5133U, // SUB8rp
682 17421U, // SUB8rr
683 1143U, // SUBC16mc
684 1143U, // SUBC16mi
685 2167U, // SUBC16mm
686 3191U, // SUBC16mn
687 4215U, // SUBC16mp
688 1143U, // SUBC16mr
689 17527U, // SUBC16rc
690 17527U, // SUBC16ri
691 18551U, // SUBC16rm
692 19575U, // SUBC16rn
693 5239U, // SUBC16rp
694 17527U, // SUBC16rr
695 1044U, // SUBC8mc
696 1044U, // SUBC8mi
697 2068U, // SUBC8mm
698 3092U, // SUBC8mn
699 4116U, // SUBC8mp
700 1044U, // SUBC8mr
701 17428U, // SUBC8rc
702 17428U, // SUBC8ri
703 18452U, // SUBC8rm
704 19476U, // SUBC8rn
705 5140U, // SUBC8rp
706 17428U, // SUBC8rr
707 11372U, // SWPB16m
708 12396U, // SWPB16n
709 13420U, // SWPB16p
710 55404U, // SWPB16r
711 521U, // Select16
712 581U, // Select8
713 491U, // Shl16
714 553U, // Shl8
715 476U, // Sra16
716 539U, // Sra8
717 506U, // Srl16
718 567U, // Srl8
719 1207U, // XOR16mc
720 1207U, // XOR16mi
721 2231U, // XOR16mm
722 3255U, // XOR16mn
723 4279U, // XOR16mp
724 1207U, // XOR16mr
725 17591U, // XOR16rc
726 17591U, // XOR16ri
727 18615U, // XOR16rm
728 19639U, // XOR16rn
729 5303U, // XOR16rp
730 17591U, // XOR16rr
731 1104U, // XOR8mc
732 1104U, // XOR8mi
733 2128U, // XOR8mm
734 3152U, // XOR8mn
735 4176U, // XOR8mp
736 1104U, // XOR8mr
737 17488U, // XOR8rc
738 17488U, // XOR8ri
739 18512U, // XOR8rm
740 19536U, // XOR8rn
741 5200U, // XOR8rp
742 17488U, // XOR8rr
743 7269U, // ZEXT16r
744 };
745
746 // Emit the opcode for the instruction.
747 uint32_t Bits = 0;
748 Bits |= OpInfo0[MI.getOpcode()] << 0;
749 if (Bits == 0)
750 return {nullptr, Bits};
751 return {AsmStrs+(Bits & 1023)-1, Bits};
752
753}
754/// printInstruction - This method is automatically generated by tablegen
755/// from the instruction set description.
756LLVM_NO_PROFILE_INSTRUMENT_FUNCTION
757void MSP430InstPrinter::printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O) {
758 O << "\t";
759
760 auto MnemonicInfo = getMnemonic(MI: *MI);
761
762 O << MnemonicInfo.first;
763
764 uint32_t Bits = MnemonicInfo.second;
765 assert(Bits != 0 && "Cannot print this instruction.");
766
767 // Fragment 0 encoded into 4 bits for 16 unique commands.
768 switch ((Bits >> 10) & 15) {
769 default: llvm_unreachable("Invalid command number.");
770 case 0:
771 // DBG_VALUE, DBG_VALUE_LIST, DBG_INSTR_REF, DBG_PHI, DBG_LABEL, BUNDLE, ...
772 return;
773 break;
774 case 1:
775 // ADD16mc, ADD16mi, ADD16mr, ADD16rc, ADD16ri, ADD16rr, ADD8mc, ADD8mi, ...
776 printOperand(MI, OpNo: 2, O);
777 O << ", ";
778 break;
779 case 2:
780 // ADD16mm, ADD16rm, ADD8mm, ADD8rm, ADDC16mm, ADDC16rm, ADDC8mm, ADDC8rm...
781 printSrcMemOperand(MI, OpNo: 2, O);
782 O << ", ";
783 break;
784 case 3:
785 // ADD16mn, ADD16rn, ADD8mn, ADD8rn, ADDC16mn, ADDC16rn, ADDC8mn, ADDC8rn...
786 printIndRegOperand(MI, OpNo: 2, O);
787 O << ", ";
788 break;
789 case 4:
790 // ADD16mp, ADD8mp, ADDC16mp, ADDC8mp, AND16mp, AND8mp, BIC16mp, BIC8mp, ...
791 printPostIndRegOperand(MI, OpNo: 2, O);
792 O << ", ";
793 break;
794 case 5:
795 // ADD16rp, ADD8rp, ADDC16rp, ADDC8rp, AND16rp, AND8rp, BIC16rp, BIC8rp, ...
796 printPostIndRegOperand(MI, OpNo: 3, O);
797 O << ", ";
798 printOperand(MI, OpNo: 0, O);
799 return;
800 break;
801 case 6:
802 // ADJCALLSTACKDOWN, ADJCALLSTACKUP, Bi, Br, CALLi, CALLr, POP16r, PUSH16...
803 printOperand(MI, OpNo: 0, O);
804 break;
805 case 7:
806 // BIT16rc, BIT16ri, BIT16rr, BIT8rc, BIT8ri, BIT8rr, CMP16rc, CMP16ri, C...
807 printOperand(MI, OpNo: 1, O);
808 O << ", ";
809 printOperand(MI, OpNo: 0, O);
810 return;
811 break;
812 case 8:
813 // BIT16rm, BIT8rm, CMP16rm, CMP8rm, MOV16rm, MOV8rm, MOVZX16rm8
814 printSrcMemOperand(MI, OpNo: 1, O);
815 O << ", ";
816 printOperand(MI, OpNo: 0, O);
817 return;
818 break;
819 case 9:
820 // BIT16rn, BIT8rn, CMP16rn, CMP8rn, MOV16rn, MOV8rn
821 printIndRegOperand(MI, OpNo: 1, O);
822 O << ", ";
823 printOperand(MI, OpNo: 0, O);
824 return;
825 break;
826 case 10:
827 // BIT16rp, BIT8rp, CMP16rp, CMP8rp
828 printPostIndRegOperand(MI, OpNo: 1, O);
829 O << ", ";
830 printOperand(MI, OpNo: 0, O);
831 return;
832 break;
833 case 11:
834 // Bm, CALLm, RRA16m, RRA8m, RRC16m, RRC8m, SEXT16m, SWPB16m
835 printSrcMemOperand(MI, OpNo: 0, O);
836 return;
837 break;
838 case 12:
839 // CALLn, RRA16n, RRA8n, RRC16n, RRC8n, SEXT16n, SWPB16n
840 printIndRegOperand(MI, OpNo: 0, O);
841 return;
842 break;
843 case 13:
844 // CALLp, RRA16p, RRA8p, RRC16p, RRC8p, SEXT16p, SWPB16p
845 printPostIndRegOperand(MI, OpNo: 0, O);
846 return;
847 break;
848 case 14:
849 // JCC
850 printCCOperand(MI, OpNo: 1, O);
851 O << "\t";
852 printPCRelImmOperand(MI, OpNo: 0, O);
853 return;
854 break;
855 case 15:
856 // JMP
857 printPCRelImmOperand(MI, OpNo: 0, O);
858 return;
859 break;
860 }
861
862
863 // Fragment 1 encoded into 2 bits for 4 unique commands.
864 switch ((Bits >> 14) & 3) {
865 default: llvm_unreachable("Invalid command number.");
866 case 0:
867 // ADD16mc, ADD16mi, ADD16mm, ADD16mn, ADD16mp, ADD16mr, ADD8mc, ADD8mi, ...
868 printSrcMemOperand(MI, OpNo: 0, O);
869 return;
870 break;
871 case 1:
872 // ADD16rc, ADD16ri, ADD16rm, ADD16rn, ADD16rr, ADD8rc, ADD8ri, ADD8rm, A...
873 printOperand(MI, OpNo: 0, O);
874 return;
875 break;
876 case 2:
877 // ADJCALLSTACKDOWN, ADJCALLSTACKUP
878 O << ' ';
879 printOperand(MI, OpNo: 1, O);
880 return;
881 break;
882 case 3:
883 // Bi, Br, CALLi, CALLr, POP16r, PUSH16c, PUSH16i, PUSH16r, PUSH8r, RRA16...
884 return;
885 break;
886 }
887
888}
889
890
891/// getRegisterName - This method is automatically generated by tblgen
892/// from the register set description. This returns the assembler name
893/// for the specified register.
894const char *MSP430InstPrinter::getRegisterName(MCRegister Reg) {
895 unsigned RegNo = Reg.id();
896 assert(RegNo && RegNo < 33 && "Invalid register number!");
897
898
899#ifdef __GNUC__
900#pragma GCC diagnostic push
901#pragma GCC diagnostic ignored "-Woverlength-strings"
902#endif
903 static const char AsmStrs[] = {
904 /* 0 */ "r10\000"
905 /* 4 */ "r0\000"
906 /* 7 */ "r11\000"
907 /* 11 */ "r1\000"
908 /* 14 */ "r12\000"
909 /* 18 */ "r2\000"
910 /* 21 */ "r13\000"
911 /* 25 */ "r3\000"
912 /* 28 */ "r14\000"
913 /* 32 */ "r4\000"
914 /* 35 */ "r15\000"
915 /* 39 */ "r5\000"
916 /* 42 */ "r6\000"
917 /* 45 */ "r7\000"
918 /* 48 */ "r8\000"
919 /* 51 */ "r9\000"
920};
921#ifdef __GNUC__
922#pragma GCC diagnostic pop
923#endif
924
925 static const uint8_t RegAsmOffset[] = {
926 25, 25, 4, 4, 11, 11, 18, 18, 32, 39, 42, 45, 48, 51,
927 0, 7, 14, 21, 28, 35, 32, 39, 42, 45, 48, 51, 0, 7,
928 14, 21, 28, 35,
929 };
930
931 assert (*(AsmStrs+RegAsmOffset[RegNo-1]) &&
932 "Invalid alt name index for register!");
933 return AsmStrs+RegAsmOffset[RegNo-1];
934}
935
936#ifdef PRINT_ALIAS_INSTR
937#undef PRINT_ALIAS_INSTR
938
939bool MSP430InstPrinter::printAliasInstr(const MCInst *MI, uint64_t Address, raw_ostream &OS) {
940 static const PatternsForOpcode OpToPatterns[] = {
941 {.Opcode: MSP430::ADD16mc, .PatternStart: 0, .NumPatterns: 2 },
942 {.Opcode: MSP430::ADD16rc, .PatternStart: 2, .NumPatterns: 2 },
943 {.Opcode: MSP430::ADD8mc, .PatternStart: 4, .NumPatterns: 2 },
944 {.Opcode: MSP430::ADD8rc, .PatternStart: 6, .NumPatterns: 2 },
945 {.Opcode: MSP430::ADDC16mc, .PatternStart: 8, .NumPatterns: 1 },
946 {.Opcode: MSP430::ADDC16rc, .PatternStart: 9, .NumPatterns: 1 },
947 {.Opcode: MSP430::ADDC8mc, .PatternStart: 10, .NumPatterns: 1 },
948 {.Opcode: MSP430::ADDC8rc, .PatternStart: 11, .NumPatterns: 1 },
949 {.Opcode: MSP430::BIC16rc, .PatternStart: 12, .NumPatterns: 4 },
950 {.Opcode: MSP430::BIS16rc, .PatternStart: 16, .NumPatterns: 4 },
951 {.Opcode: MSP430::CMP16mc, .PatternStart: 20, .NumPatterns: 1 },
952 {.Opcode: MSP430::CMP16rc, .PatternStart: 21, .NumPatterns: 1 },
953 {.Opcode: MSP430::CMP8mc, .PatternStart: 22, .NumPatterns: 1 },
954 {.Opcode: MSP430::CMP8rc, .PatternStart: 23, .NumPatterns: 1 },
955 {.Opcode: MSP430::DADD16mc, .PatternStart: 24, .NumPatterns: 1 },
956 {.Opcode: MSP430::DADD16rc, .PatternStart: 25, .NumPatterns: 1 },
957 {.Opcode: MSP430::DADD8mc, .PatternStart: 26, .NumPatterns: 1 },
958 {.Opcode: MSP430::DADD8rc, .PatternStart: 27, .NumPatterns: 1 },
959 {.Opcode: MSP430::MOV16mc, .PatternStart: 28, .NumPatterns: 1 },
960 {.Opcode: MSP430::MOV16rc, .PatternStart: 29, .NumPatterns: 2 },
961 {.Opcode: MSP430::MOV8mc, .PatternStart: 31, .NumPatterns: 1 },
962 {.Opcode: MSP430::MOV8rc, .PatternStart: 32, .NumPatterns: 1 },
963 {.Opcode: MSP430::SUB16mc, .PatternStart: 33, .NumPatterns: 2 },
964 {.Opcode: MSP430::SUB16rc, .PatternStart: 35, .NumPatterns: 2 },
965 {.Opcode: MSP430::SUB8mc, .PatternStart: 37, .NumPatterns: 2 },
966 {.Opcode: MSP430::SUB8rc, .PatternStart: 39, .NumPatterns: 2 },
967 {.Opcode: MSP430::SUBC16mc, .PatternStart: 41, .NumPatterns: 1 },
968 {.Opcode: MSP430::SUBC16rc, .PatternStart: 42, .NumPatterns: 1 },
969 {.Opcode: MSP430::SUBC8mc, .PatternStart: 43, .NumPatterns: 1 },
970 {.Opcode: MSP430::SUBC8rc, .PatternStart: 44, .NumPatterns: 1 },
971 {.Opcode: MSP430::XOR16mc, .PatternStart: 45, .NumPatterns: 1 },
972 {.Opcode: MSP430::XOR16rc, .PatternStart: 46, .NumPatterns: 1 },
973 {.Opcode: MSP430::XOR8mc, .PatternStart: 47, .NumPatterns: 1 },
974 {.Opcode: MSP430::XOR8rc, .PatternStart: 48, .NumPatterns: 1 },
975 };
976
977 static const AliasPattern Patterns[] = {
978 // MSP430::ADD16mc - 0
979 {.AsmStrOffset: 0, .AliasCondStart: 0, .NumOperands: 3, .NumConds: 3 },
980 {.AsmStrOffset: 9, .AliasCondStart: 3, .NumOperands: 3, .NumConds: 3 },
981 // MSP430::ADD16rc - 2
982 {.AsmStrOffset: 19, .AliasCondStart: 6, .NumOperands: 3, .NumConds: 3 },
983 {.AsmStrOffset: 26, .AliasCondStart: 9, .NumOperands: 3, .NumConds: 3 },
984 // MSP430::ADD8mc - 4
985 {.AsmStrOffset: 34, .AliasCondStart: 12, .NumOperands: 3, .NumConds: 3 },
986 {.AsmStrOffset: 45, .AliasCondStart: 15, .NumOperands: 3, .NumConds: 3 },
987 // MSP430::ADD8rc - 6
988 {.AsmStrOffset: 57, .AliasCondStart: 18, .NumOperands: 3, .NumConds: 3 },
989 {.AsmStrOffset: 66, .AliasCondStart: 21, .NumOperands: 3, .NumConds: 3 },
990 // MSP430::ADDC16mc - 8
991 {.AsmStrOffset: 76, .AliasCondStart: 24, .NumOperands: 3, .NumConds: 3 },
992 // MSP430::ADDC16rc - 9
993 {.AsmStrOffset: 85, .AliasCondStart: 27, .NumOperands: 3, .NumConds: 3 },
994 // MSP430::ADDC8mc - 10
995 {.AsmStrOffset: 92, .AliasCondStart: 30, .NumOperands: 3, .NumConds: 3 },
996 // MSP430::ADDC8rc - 11
997 {.AsmStrOffset: 103, .AliasCondStart: 33, .NumOperands: 3, .NumConds: 3 },
998 // MSP430::BIC16rc - 12
999 {.AsmStrOffset: 112, .AliasCondStart: 36, .NumOperands: 3, .NumConds: 3 },
1000 {.AsmStrOffset: 117, .AliasCondStart: 39, .NumOperands: 3, .NumConds: 3 },
1001 {.AsmStrOffset: 122, .AliasCondStart: 42, .NumOperands: 3, .NumConds: 3 },
1002 {.AsmStrOffset: 127, .AliasCondStart: 45, .NumOperands: 3, .NumConds: 3 },
1003 // MSP430::BIS16rc - 16
1004 {.AsmStrOffset: 132, .AliasCondStart: 48, .NumOperands: 3, .NumConds: 3 },
1005 {.AsmStrOffset: 137, .AliasCondStart: 51, .NumOperands: 3, .NumConds: 3 },
1006 {.AsmStrOffset: 142, .AliasCondStart: 54, .NumOperands: 3, .NumConds: 3 },
1007 {.AsmStrOffset: 147, .AliasCondStart: 57, .NumOperands: 3, .NumConds: 3 },
1008 // MSP430::CMP16mc - 20
1009 {.AsmStrOffset: 152, .AliasCondStart: 60, .NumOperands: 3, .NumConds: 3 },
1010 // MSP430::CMP16rc - 21
1011 {.AsmStrOffset: 161, .AliasCondStart: 63, .NumOperands: 2, .NumConds: 2 },
1012 // MSP430::CMP8mc - 22
1013 {.AsmStrOffset: 168, .AliasCondStart: 65, .NumOperands: 3, .NumConds: 3 },
1014 // MSP430::CMP8rc - 23
1015 {.AsmStrOffset: 179, .AliasCondStart: 68, .NumOperands: 2, .NumConds: 2 },
1016 // MSP430::DADD16mc - 24
1017 {.AsmStrOffset: 188, .AliasCondStart: 70, .NumOperands: 3, .NumConds: 3 },
1018 // MSP430::DADD16rc - 25
1019 {.AsmStrOffset: 198, .AliasCondStart: 73, .NumOperands: 3, .NumConds: 3 },
1020 // MSP430::DADD8mc - 26
1021 {.AsmStrOffset: 206, .AliasCondStart: 76, .NumOperands: 3, .NumConds: 3 },
1022 // MSP430::DADD8rc - 27
1023 {.AsmStrOffset: 218, .AliasCondStart: 79, .NumOperands: 3, .NumConds: 3 },
1024 // MSP430::MOV16mc - 28
1025 {.AsmStrOffset: 228, .AliasCondStart: 82, .NumOperands: 3, .NumConds: 3 },
1026 // MSP430::MOV16rc - 29
1027 {.AsmStrOffset: 237, .AliasCondStart: 85, .NumOperands: 2, .NumConds: 2 },
1028 {.AsmStrOffset: 241, .AliasCondStart: 87, .NumOperands: 2, .NumConds: 2 },
1029 // MSP430::MOV8mc - 31
1030 {.AsmStrOffset: 248, .AliasCondStart: 89, .NumOperands: 3, .NumConds: 3 },
1031 // MSP430::MOV8rc - 32
1032 {.AsmStrOffset: 259, .AliasCondStart: 92, .NumOperands: 2, .NumConds: 2 },
1033 // MSP430::SUB16mc - 33
1034 {.AsmStrOffset: 268, .AliasCondStart: 94, .NumOperands: 3, .NumConds: 3 },
1035 {.AsmStrOffset: 277, .AliasCondStart: 97, .NumOperands: 3, .NumConds: 3 },
1036 // MSP430::SUB16rc - 35
1037 {.AsmStrOffset: 287, .AliasCondStart: 100, .NumOperands: 3, .NumConds: 3 },
1038 {.AsmStrOffset: 294, .AliasCondStart: 103, .NumOperands: 3, .NumConds: 3 },
1039 // MSP430::SUB8mc - 37
1040 {.AsmStrOffset: 302, .AliasCondStart: 106, .NumOperands: 3, .NumConds: 3 },
1041 {.AsmStrOffset: 313, .AliasCondStart: 109, .NumOperands: 3, .NumConds: 3 },
1042 // MSP430::SUB8rc - 39
1043 {.AsmStrOffset: 325, .AliasCondStart: 112, .NumOperands: 3, .NumConds: 3 },
1044 {.AsmStrOffset: 334, .AliasCondStart: 115, .NumOperands: 3, .NumConds: 3 },
1045 // MSP430::SUBC16mc - 41
1046 {.AsmStrOffset: 344, .AliasCondStart: 118, .NumOperands: 3, .NumConds: 3 },
1047 // MSP430::SUBC16rc - 42
1048 {.AsmStrOffset: 353, .AliasCondStart: 121, .NumOperands: 3, .NumConds: 3 },
1049 // MSP430::SUBC8mc - 43
1050 {.AsmStrOffset: 360, .AliasCondStart: 124, .NumOperands: 3, .NumConds: 3 },
1051 // MSP430::SUBC8rc - 44
1052 {.AsmStrOffset: 371, .AliasCondStart: 127, .NumOperands: 3, .NumConds: 3 },
1053 // MSP430::XOR16mc - 45
1054 {.AsmStrOffset: 380, .AliasCondStart: 130, .NumOperands: 3, .NumConds: 3 },
1055 // MSP430::XOR16rc - 46
1056 {.AsmStrOffset: 389, .AliasCondStart: 133, .NumOperands: 3, .NumConds: 3 },
1057 // MSP430::XOR8mc - 47
1058 {.AsmStrOffset: 396, .AliasCondStart: 136, .NumOperands: 3, .NumConds: 3 },
1059 // MSP430::XOR8rc - 48
1060 {.AsmStrOffset: 407, .AliasCondStart: 139, .NumOperands: 3, .NumConds: 3 },
1061 };
1062
1063 static const AliasPatternCond Conds[] = {
1064 // (ADD16mc memdst:$dst, 1) - 0
1065 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1066 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1067 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(1)},
1068 // (ADD16mc memdst:$dst, 2) - 3
1069 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1070 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1071 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(2)},
1072 // (ADD16rc GR16:$dst, 1) - 6
1073 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR16RegClassID},
1074 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1075 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(1)},
1076 // (ADD16rc GR16:$dst, 2) - 9
1077 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR16RegClassID},
1078 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1079 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(2)},
1080 // (ADD8mc memdst:$dst, 1) - 12
1081 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1082 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1083 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(1)},
1084 // (ADD8mc memdst:$dst, 2) - 15
1085 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1086 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1087 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(2)},
1088 // (ADD8rc GR8:$dst, 1) - 18
1089 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR8RegClassID},
1090 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1091 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(1)},
1092 // (ADD8rc GR8:$dst, 2) - 21
1093 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR8RegClassID},
1094 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1095 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(2)},
1096 // (ADDC16mc memdst:$dst, 0) - 24
1097 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1098 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1099 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1100 // (ADDC16rc GR16:$dst, 0) - 27
1101 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR16RegClassID},
1102 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1103 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1104 // (ADDC8mc memdst:$dst, 0) - 30
1105 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1106 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1107 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1108 // (ADDC8rc GR8:$dst, 0) - 33
1109 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR8RegClassID},
1110 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1111 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1112 // (BIC16rc SR, 8) - 36
1113 {.Kind: AliasPatternCond::K_Reg, .Value: MSP430::SR},
1114 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1115 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(8)},
1116 // (BIC16rc SR, 1) - 39
1117 {.Kind: AliasPatternCond::K_Reg, .Value: MSP430::SR},
1118 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1119 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(1)},
1120 // (BIC16rc SR, 4) - 42
1121 {.Kind: AliasPatternCond::K_Reg, .Value: MSP430::SR},
1122 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1123 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(4)},
1124 // (BIC16rc SR, 2) - 45
1125 {.Kind: AliasPatternCond::K_Reg, .Value: MSP430::SR},
1126 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1127 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(2)},
1128 // (BIS16rc SR, 8) - 48
1129 {.Kind: AliasPatternCond::K_Reg, .Value: MSP430::SR},
1130 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1131 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(8)},
1132 // (BIS16rc SR, 1) - 51
1133 {.Kind: AliasPatternCond::K_Reg, .Value: MSP430::SR},
1134 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1135 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(1)},
1136 // (BIS16rc SR, 4) - 54
1137 {.Kind: AliasPatternCond::K_Reg, .Value: MSP430::SR},
1138 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1139 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(4)},
1140 // (BIS16rc SR, 2) - 57
1141 {.Kind: AliasPatternCond::K_Reg, .Value: MSP430::SR},
1142 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1143 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(2)},
1144 // (CMP16mc memdst:$dst, 0) - 60
1145 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1146 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1147 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1148 // (CMP16rc GR16:$dst, 0) - 63
1149 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR16RegClassID},
1150 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1151 // (CMP8mc memdst:$dst, 0) - 65
1152 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1153 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1154 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1155 // (CMP8rc GR8:$dst, 0) - 68
1156 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR8RegClassID},
1157 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1158 // (DADD16mc memdst:$dst, 0) - 70
1159 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1160 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1161 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1162 // (DADD16rc GR16:$dst, 0) - 73
1163 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR16RegClassID},
1164 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1165 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1166 // (DADD8mc memdst:$dst, 0) - 76
1167 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1168 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1169 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1170 // (DADD8rc GR8:$dst, 0) - 79
1171 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR8RegClassID},
1172 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1173 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1174 // (MOV16mc memdst:$dst, 0) - 82
1175 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1176 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1177 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1178 // (MOV16rc CG, 0) - 85
1179 {.Kind: AliasPatternCond::K_Reg, .Value: MSP430::CG},
1180 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1181 // (MOV16rc GR16:$dst, 0) - 87
1182 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR16RegClassID},
1183 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1184 // (MOV8mc memdst:$dst, 0) - 89
1185 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1186 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1187 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1188 // (MOV8rc GR8:$dst, 0) - 92
1189 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR8RegClassID},
1190 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1191 // (SUB16mc memdst:$dst, 1) - 94
1192 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1193 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1194 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(1)},
1195 // (SUB16mc memdst:$dst, 2) - 97
1196 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1197 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1198 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(2)},
1199 // (SUB16rc GR16:$dst, 1) - 100
1200 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR16RegClassID},
1201 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1202 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(1)},
1203 // (SUB16rc GR16:$dst, 2) - 103
1204 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR16RegClassID},
1205 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1206 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(2)},
1207 // (SUB8mc memdst:$dst, 1) - 106
1208 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1209 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1210 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(1)},
1211 // (SUB8mc memdst:$dst, 2) - 109
1212 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1213 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1214 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(2)},
1215 // (SUB8rc GR8:$dst, 1) - 112
1216 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR8RegClassID},
1217 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1218 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(1)},
1219 // (SUB8rc GR8:$dst, 2) - 115
1220 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR8RegClassID},
1221 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1222 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(2)},
1223 // (SUBC16mc memdst:$dst, 0) - 118
1224 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1225 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1226 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1227 // (SUBC16rc GR16:$dst, 0) - 121
1228 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR16RegClassID},
1229 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1230 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1231 // (SUBC8mc memdst:$dst, 0) - 124
1232 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1233 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1234 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1235 // (SUBC8rc GR8:$dst, 0) - 127
1236 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR8RegClassID},
1237 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1238 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(0)},
1239 // (XOR16mc memdst:$dst, -1) - 130
1240 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1241 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1242 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(-1)},
1243 // (XOR16rc GR16:$dst, -1) - 133
1244 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR16RegClassID},
1245 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1246 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(-1)},
1247 // (XOR8mc memdst:$dst, -1) - 136
1248 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1249 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1250 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(-1)},
1251 // (XOR8rc GR8:$dst, -1) - 139
1252 {.Kind: AliasPatternCond::K_RegClass, .Value: MSP430::GR8RegClassID},
1253 {.Kind: AliasPatternCond::K_Ignore, .Value: 0},
1254 {.Kind: AliasPatternCond::K_Imm, .Value: uint32_t(-1)},
1255 };
1256
1257 static const char AsmStrings[] =
1258 /* 0 */ "inc $\xFF\x01\x01\0"
1259 /* 9 */ "incd $\xFF\x01\x01\0"
1260 /* 19 */ "inc $\x01\0"
1261 /* 26 */ "incd $\x01\0"
1262 /* 34 */ "inc.b $\xFF\x01\x01\0"
1263 /* 45 */ "incd.b $\xFF\x01\x01\0"
1264 /* 57 */ "inc.b $\x01\0"
1265 /* 66 */ "incd.b $\x01\0"
1266 /* 76 */ "adc $\xFF\x01\x01\0"
1267 /* 85 */ "adc $\x01\0"
1268 /* 92 */ "adc.b $\xFF\x01\x01\0"
1269 /* 103 */ "adc.b $\x01\0"
1270 /* 112 */ "dint\0"
1271 /* 117 */ "clrc\0"
1272 /* 122 */ "clrn\0"
1273 /* 127 */ "clrz\0"
1274 /* 132 */ "eint\0"
1275 /* 137 */ "setc\0"
1276 /* 142 */ "setn\0"
1277 /* 147 */ "setz\0"
1278 /* 152 */ "tst $\xFF\x01\x01\0"
1279 /* 161 */ "tst $\x01\0"
1280 /* 168 */ "tst.b $\xFF\x01\x01\0"
1281 /* 179 */ "tst.b $\x01\0"
1282 /* 188 */ "dadc $\xFF\x01\x01\0"
1283 /* 198 */ "dadc $\x01\0"
1284 /* 206 */ "dadc.b $\xFF\x01\x01\0"
1285 /* 218 */ "dadc.b $\x01\0"
1286 /* 228 */ "clr $\xFF\x01\x01\0"
1287 /* 237 */ "nop\0"
1288 /* 241 */ "clr $\x01\0"
1289 /* 248 */ "clr.b $\xFF\x01\x01\0"
1290 /* 259 */ "clr.b $\x01\0"
1291 /* 268 */ "dec $\xFF\x01\x01\0"
1292 /* 277 */ "decd $\xFF\x01\x01\0"
1293 /* 287 */ "dec $\x01\0"
1294 /* 294 */ "decd $\x01\0"
1295 /* 302 */ "dec.b $\xFF\x01\x01\0"
1296 /* 313 */ "decd.b $\xFF\x01\x01\0"
1297 /* 325 */ "dec.b $\x01\0"
1298 /* 334 */ "decd.b $\x01\0"
1299 /* 344 */ "sbc $\xFF\x01\x01\0"
1300 /* 353 */ "sbc $\x01\0"
1301 /* 360 */ "sbc.b $\xFF\x01\x01\0"
1302 /* 371 */ "sbc.b $\x01\0"
1303 /* 380 */ "inv $\xFF\x01\x01\0"
1304 /* 389 */ "inv $\x01\0"
1305 /* 396 */ "inv.b $\xFF\x01\x01\0"
1306 /* 407 */ "inv.b $\x01\0"
1307 ;
1308
1309#ifndef NDEBUG
1310 static struct SortCheck {
1311 SortCheck(ArrayRef<PatternsForOpcode> OpToPatterns) {
1312 assert(std::is_sorted(
1313 OpToPatterns.begin(), OpToPatterns.end(),
1314 [](const PatternsForOpcode &L, const PatternsForOpcode &R) {
1315 return L.Opcode < R.Opcode;
1316 }) &&
1317 "tablegen failed to sort opcode patterns");
1318 }
1319 } sortCheckVar(OpToPatterns);
1320#endif
1321
1322 AliasMatchingData M {
1323 .OpToPatterns: ArrayRef(OpToPatterns),
1324 .Patterns: ArrayRef(Patterns),
1325 .PatternConds: ArrayRef(Conds),
1326 .AsmStrings: StringRef(AsmStrings, std::size(AsmStrings)),
1327 .ValidateMCOperand: nullptr,
1328 };
1329 const char *AsmString = matchAliasPatterns(MI, STI: nullptr, M);
1330 if (!AsmString) return false;
1331
1332 unsigned I = 0;
1333 while (AsmString[I] != ' ' && AsmString[I] != '\t' &&
1334 AsmString[I] != '$' && AsmString[I] != '\0')
1335 ++I;
1336 OS << '\t' << StringRef(AsmString, I);
1337 if (AsmString[I] != '\0') {
1338 if (AsmString[I] == ' ' || AsmString[I] == '\t') {
1339 OS << '\t';
1340 ++I;
1341 }
1342 do {
1343 if (AsmString[I] == '$') {
1344 ++I;
1345 if (AsmString[I] == (char)0xff) {
1346 ++I;
1347 int OpIdx = AsmString[I++] - 1;
1348 int PrintMethodIdx = AsmString[I++] - 1;
1349 printCustomAliasOperand(MI, Address, OpIdx, PrintMethodIdx, O&: OS);
1350 } else
1351 printOperand(MI, OpNo: unsigned(AsmString[I++]) - 1, O&: OS);
1352 } else {
1353 OS << AsmString[I++];
1354 }
1355 } while (AsmString[I] != '\0');
1356 }
1357
1358 return true;
1359}
1360
1361void MSP430InstPrinter::printCustomAliasOperand(
1362 const MCInst *MI, uint64_t Address, unsigned OpIdx,
1363 unsigned PrintMethodIdx,
1364 raw_ostream &OS) {
1365 switch (PrintMethodIdx) {
1366 default:
1367 llvm_unreachable("Unknown PrintMethod kind");
1368 break;
1369 case 0:
1370 printSrcMemOperand(MI, OpNo: OpIdx, O&: OS);
1371 break;
1372 }
1373}
1374
1375#endif // PRINT_ALIAS_INSTR
1376