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