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