Line data Source code
1 : /*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2 : |* *|
3 : |* Assembly Writer Source Fragment *|
4 : |* *|
5 : |* Automatically generated file, do not edit! *|
6 : |* *|
7 : \*===----------------------------------------------------------------------===*/
8 :
9 : /// printInstruction - This method is automatically generated by tablegen
10 : /// from the instruction set description.
11 9094 : void AVRInstPrinter::printInstruction(const MCInst *MI, raw_ostream &O) {
12 : static const char AsmStrs[] = {
13 : /* 0 */ 's', 'u', 'b', 9, 0,
14 : /* 5 */ 'l', 'a', 'c', 9, 0,
15 : /* 10 */ 'b', 'r', 'b', 'c', 9, 0,
16 : /* 16 */ 's', 'b', 'c', 9, 0,
17 : /* 21 */ 'a', 'd', 'c', 9, 0,
18 : /* 26 */ 'd', 'e', 'c', 9, 0,
19 : /* 31 */ 's', 'b', 'i', 'c', 9, 0,
20 : /* 37 */ 'i', 'n', 'c', 9, 0,
21 : /* 42 */ 'c', 'p', 'c', 9, 0,
22 : /* 47 */ 's', 'b', 'r', 'c', 9, 0,
23 : /* 53 */ 's', 'p', 'r', 'e', 'a', 'd', 9, 0,
24 : /* 61 */ 'a', 'd', 'd', 9, 0,
25 : /* 66 */ 'l', 'd', 'd', 9, 0,
26 : /* 71 */ 'b', 'l', 'd', 9, 0,
27 : /* 76 */ 'a', 'n', 'd', 9, 0,
28 : /* 81 */ 's', 't', 'd', 9, 0,
29 : /* 86 */ 'b', 'r', 'g', 'e', 9, 0,
30 : /* 92 */ 'b', 'r', 'n', 'e', 9, 0,
31 : /* 98 */ 'c', 'p', 's', 'e', 9, 0,
32 : /* 104 */ 's', 'p', 'w', 'r', 'i', 't', 'e', 9, 0,
33 : /* 113 */ 'n', 'e', 'g', 9, 0,
34 : /* 118 */ 'x', 'c', 'h', 9, 0,
35 : /* 123 */ 'b', 'r', 's', 'h', 9, 0,
36 : /* 129 */ 'p', 'u', 's', 'h', 9, 0,
37 : /* 135 */ 'c', 'b', 'i', 9, 0,
38 : /* 140 */ 's', 'b', 'i', 9, 0,
39 : /* 145 */ 's', 'u', 'b', 'i', 9, 0,
40 : /* 151 */ 's', 'b', 'c', 'i', 9, 0,
41 : /* 157 */ 'l', 'd', 'i', 9, 0,
42 : /* 162 */ 'a', 'n', 'd', 'i', 9, 0,
43 : /* 168 */ 'b', 'r', 'm', 'i', 9, 0,
44 : /* 174 */ 'c', 'p', 'i', 9, 0,
45 : /* 179 */ 'o', 'r', 'i', 9, 0,
46 : /* 184 */ 's', 't', 'd', 's', 't', 'k', 9, 0,
47 : /* 192 */ 's', 't', 'd', 'w', 's', 't', 'k', 9, 0,
48 : /* 201 */ 'r', 'c', 'a', 'l', 'l', 9, 0,
49 : /* 208 */ 'b', 'r', 'p', 'l', 9, 0,
50 : /* 214 */ 'f', 'm', 'u', 'l', 9, 0,
51 : /* 220 */ 'c', 'o', 'm', 9, 0,
52 : /* 225 */ 'e', 'l', 'p', 'm', 9, 0,
53 : /* 231 */ 'i', 'n', 9, 0,
54 : /* 235 */ 'b', 'r', 'l', 'o', 9, 0,
55 : /* 241 */ 's', 'w', 'a', 'p', 9, 0,
56 : /* 247 */ 'c', 'p', 9, 0,
57 : /* 251 */ 'r', 'j', 'm', 'p', 9, 0,
58 : /* 257 */ 'p', 'o', 'p', 9, 0,
59 : /* 262 */ 'b', 'r', 'e', 'q', 9, 0,
60 : /* 268 */ 'c', 'b', 'r', 9, 0,
61 : /* 273 */ 'b', 'c', 'l', 'r', 9, 0,
62 : /* 279 */ 'e', 'o', 'r', 9, 0,
63 : /* 284 */ 'r', 'o', 'r', 9, 0,
64 : /* 289 */ 'a', 's', 'r', 9, 0,
65 : /* 294 */ 'l', 's', 'r', 9, 0,
66 : /* 299 */ 'l', 'a', 's', 9, 0,
67 : /* 304 */ 'b', 'r', 'b', 's', 9, 0,
68 : /* 310 */ 'l', 'd', 's', 9, 0,
69 : /* 315 */ 'd', 'e', 's', 9, 0,
70 : /* 320 */ 's', 'b', 'i', 's', 9, 0,
71 : /* 326 */ 'f', 'm', 'u', 'l', 's', 9, 0,
72 : /* 333 */ 's', 'b', 'r', 's', 9, 0,
73 : /* 339 */ 's', 't', 's', 9, 0,
74 : /* 344 */ 'l', 'a', 't', 9, 0,
75 : /* 349 */ 'b', 's', 'e', 't', 9, 0,
76 : /* 355 */ 'b', 'r', 'l', 't', 9, 0,
77 : /* 361 */ 'b', 's', 't', 9, 0,
78 : /* 366 */ 'o', 'u', 't', 9, 0,
79 : /* 371 */ 's', 'e', 'x', 't', 9, 0,
80 : /* 377 */ 'z', 'e', 'x', 't', 9, 0,
81 : /* 383 */ 'f', 'm', 'u', 'l', 's', 'u', 9, 0,
82 : /* 391 */ 'm', 'o', 'v', 9, 0,
83 : /* 396 */ 's', 'u', 'b', 'w', 9, 0,
84 : /* 402 */ 's', 'b', 'c', 'w', 9, 0,
85 : /* 408 */ 'a', 'd', 'c', 'w', 9, 0,
86 : /* 414 */ 'c', 'p', 'c', 'w', 9, 0,
87 : /* 420 */ 'a', 'd', 'd', 'w', 9, 0,
88 : /* 426 */ 'l', 'd', 'd', 'w', 9, 0,
89 : /* 432 */ 'l', 'd', 'w', 9, 0,
90 : /* 437 */ 'a', 'n', 'd', 'w', 9, 0,
91 : /* 443 */ 's', 't', 'd', 'w', 9, 0,
92 : /* 449 */ 'p', 'u', 's', 'h', 'w', 9, 0,
93 : /* 456 */ 's', 'b', 'i', 'w', 9, 0,
94 : /* 462 */ 's', 'u', 'b', 'i', 'w', 9, 0,
95 : /* 469 */ 's', 'b', 'c', 'i', 'w', 9, 0,
96 : /* 476 */ 'a', 'd', 'i', 'w', 9, 0,
97 : /* 482 */ 'l', 'd', 'i', 'w', 9, 0,
98 : /* 488 */ 'a', 'n', 'd', 'i', 'w', 9, 0,
99 : /* 495 */ 'o', 'r', 'i', 'w', 9, 0,
100 : /* 501 */ 'r', 'o', 'l', 'w', 9, 0,
101 : /* 507 */ 'l', 's', 'l', 'w', 9, 0,
102 : /* 513 */ 'c', 'o', 'm', 'w', 9, 0,
103 : /* 519 */ 'l', 'p', 'm', 'w', 9, 0,
104 : /* 525 */ 'i', 'n', 'w', 9, 0,
105 : /* 530 */ 'c', 'p', 'w', 9, 0,
106 : /* 535 */ 'p', 'o', 'p', 'w', 9, 0,
107 : /* 541 */ 'e', 'o', 'r', 'w', 9, 0,
108 : /* 547 */ 'r', 'o', 'r', 'w', 9, 0,
109 : /* 553 */ 'a', 's', 'r', 'w', 9, 0,
110 : /* 559 */ 'l', 's', 'r', 'w', 9, 0,
111 : /* 565 */ 'l', 'd', 's', 'w', 9, 0,
112 : /* 571 */ 's', 't', 's', 'w', 9, 0,
113 : /* 577 */ 's', 't', 'w', 9, 0,
114 : /* 582 */ 'o', 'u', 't', 'w', 9, 0,
115 : /* 588 */ 'm', 'o', 'v', 'w', 9, 0,
116 : /* 594 */ 'f', 'r', 'm', 'i', 'd', 'x', 9, 0,
117 : /* 602 */ 's', 'p', 'm', 32, 0,
118 : /* 607 */ 's', 't', 9, '-', 0,
119 : /* 612 */ 's', 't', 'w', 9, '-', 0,
120 : /* 618 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', 32, 'P', 'a', 't', 'c', 'h', 'a', 'b', 'l', 'e', 32, 'R', 'E', 'T', '.', 0,
121 : /* 649 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'T', 'y', 'p', 'e', 'd', 32, 'E', 'v', 'e', 'n', 't', 32, 'L', 'o', 'g', '.', 0,
122 : /* 673 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'C', 'u', 's', 't', 'o', 'm', 32, 'E', 'v', 'e', 'n', 't', 32, 'L', 'o', 'g', '.', 0,
123 : /* 698 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', 32, 'E', 'n', 't', 'e', 'r', '.', 0,
124 : /* 721 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'T', 'a', 'i', 'l', 32, 'C', 'a', 'l', 'l', 32, 'E', 'x', 'i', 't', '.', 0,
125 : /* 744 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', 32, 'E', 'x', 'i', 't', '.', 0,
126 : /* 766 */ 'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'E', 'N', 'D', 0,
127 : /* 779 */ 'B', 'U', 'N', 'D', 'L', 'E', 0,
128 : /* 786 */ 'D', 'B', 'G', '_', 'V', 'A', 'L', 'U', 'E', 0,
129 : /* 796 */ 'D', 'B', 'G', '_', 'L', 'A', 'B', 'E', 'L', 0,
130 : /* 806 */ '#', 'A', 'D', 'J', 'C', 'A', 'L', 'L', 'S', 'T', 'A', 'C', 'K', 'D', 'O', 'W', 'N', 0,
131 : /* 824 */ '#', 32, 'R', 'o', 'l', '1', '6', 32, 'P', 'S', 'E', 'U', 'D', 'O', 0,
132 : /* 839 */ '#', 32, 'L', 's', 'l', '1', '6', 32, 'P', 'S', 'E', 'U', 'D', 'O', 0,
133 : /* 854 */ '#', 32, 'R', 'o', 'r', '1', '6', 32, 'P', 'S', 'E', 'U', 'D', 'O', 0,
134 : /* 869 */ '#', 32, 'A', 's', 'r', '1', '6', 32, 'P', 'S', 'E', 'U', 'D', 'O', 0,
135 : /* 884 */ '#', 32, 'L', 's', 'r', '1', '6', 32, 'P', 'S', 'E', 'U', 'D', 'O', 0,
136 : /* 899 */ '#', 32, 'S', 'e', 'l', 'e', 'c', 't', '1', '6', 32, 'P', 'S', 'E', 'U', 'D', 'O', 0,
137 : /* 917 */ '#', 32, 'R', 'o', 'l', '8', 32, 'P', 'S', 'E', 'U', 'D', 'O', 0,
138 : /* 931 */ '#', 32, 'L', 's', 'l', '8', 32, 'P', 'S', 'E', 'U', 'D', 'O', 0,
139 : /* 945 */ '#', 32, 'R', 'o', 'r', '8', 32, 'P', 'S', 'E', 'U', 'D', 'O', 0,
140 : /* 959 */ '#', 32, 'A', 's', 'r', '8', 32, 'P', 'S', 'E', 'U', 'D', 'O', 0,
141 : /* 973 */ '#', 32, 'L', 's', 'r', '8', 32, 'P', 'S', 'E', 'U', 'D', 'O', 0,
142 : /* 987 */ '#', 32, 'S', 'e', 'l', 'e', 'c', 't', '8', 32, 'P', 'S', 'E', 'U', 'D', 'O', 0,
143 : /* 1004 */ '#', 'A', 'D', 'J', 'C', 'A', 'L', 'L', 'S', 'T', 'A', 'C', 'K', 'U', 'P', 0,
144 : /* 1020 */ 'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'S', 'T', 'A', 'R', 'T', 0,
145 : /* 1035 */ 'a', 't', 'o', 'm', 'i', 'c', '_', 'f', 'e', 'n', 'c', 'e', 0,
146 : /* 1048 */ 'r', 'e', 't', 'i', 0,
147 : /* 1053 */ 'b', 'r', 'e', 'a', 'k', 0,
148 : /* 1059 */ '#', 32, 'F', 'E', 'n', 't', 'r', 'y', 32, 'c', 'a', 'l', 'l', 0,
149 : /* 1073 */ 'e', 'i', 'c', 'a', 'l', 'l', 0,
150 : /* 1080 */ 'e', 'l', 'p', 'm', 0,
151 : /* 1085 */ 's', 'p', 'm', 0,
152 : /* 1089 */ 's', 'l', 'e', 'e', 'p', 0,
153 : /* 1095 */ 'e', 'i', 'j', 'm', 'p', 0,
154 : /* 1101 */ 'a', 't', 'o', 'm', 'i', 'c', '_', 'o', 'p', 0,
155 : /* 1111 */ 'n', 'o', 'p', 0,
156 : /* 1115 */ 'w', 'd', 'r', 0,
157 : /* 1119 */ 'r', 'e', 't', 0,
158 : };
159 :
160 : static const uint16_t OpInfo0[] = {
161 : 0U, // PHI
162 : 0U, // INLINEASM
163 : 0U, // CFI_INSTRUCTION
164 : 0U, // EH_LABEL
165 : 0U, // GC_LABEL
166 : 0U, // ANNOTATION_LABEL
167 : 0U, // KILL
168 : 0U, // EXTRACT_SUBREG
169 : 0U, // INSERT_SUBREG
170 : 0U, // IMPLICIT_DEF
171 : 0U, // SUBREG_TO_REG
172 : 0U, // COPY_TO_REGCLASS
173 : 787U, // DBG_VALUE
174 : 797U, // DBG_LABEL
175 : 0U, // REG_SEQUENCE
176 : 0U, // COPY
177 : 780U, // BUNDLE
178 : 1021U, // LIFETIME_START
179 : 767U, // LIFETIME_END
180 : 0U, // STACKMAP
181 : 1060U, // FENTRY_CALL
182 : 0U, // PATCHPOINT
183 : 0U, // LOAD_STACK_GUARD
184 : 0U, // STATEPOINT
185 : 0U, // LOCAL_ESCAPE
186 : 0U, // FAULTING_OP
187 : 0U, // PATCHABLE_OP
188 : 699U, // PATCHABLE_FUNCTION_ENTER
189 : 619U, // PATCHABLE_RET
190 : 745U, // PATCHABLE_FUNCTION_EXIT
191 : 722U, // PATCHABLE_TAIL_CALL
192 : 674U, // PATCHABLE_EVENT_CALL
193 : 650U, // PATCHABLE_TYPED_EVENT_CALL
194 : 0U, // ICALL_BRANCH_FUNNEL
195 : 0U, // G_ADD
196 : 0U, // G_SUB
197 : 0U, // G_MUL
198 : 0U, // G_SDIV
199 : 0U, // G_UDIV
200 : 0U, // G_SREM
201 : 0U, // G_UREM
202 : 0U, // G_AND
203 : 0U, // G_OR
204 : 0U, // G_XOR
205 : 0U, // G_IMPLICIT_DEF
206 : 0U, // G_PHI
207 : 0U, // G_FRAME_INDEX
208 : 0U, // G_GLOBAL_VALUE
209 : 0U, // G_EXTRACT
210 : 0U, // G_UNMERGE_VALUES
211 : 0U, // G_INSERT
212 : 0U, // G_MERGE_VALUES
213 : 0U, // G_PTRTOINT
214 : 0U, // G_INTTOPTR
215 : 0U, // G_BITCAST
216 : 0U, // G_INTRINSIC_TRUNC
217 : 0U, // G_INTRINSIC_ROUND
218 : 0U, // G_LOAD
219 : 0U, // G_SEXTLOAD
220 : 0U, // G_ZEXTLOAD
221 : 0U, // G_STORE
222 : 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS
223 : 0U, // G_ATOMIC_CMPXCHG
224 : 0U, // G_ATOMICRMW_XCHG
225 : 0U, // G_ATOMICRMW_ADD
226 : 0U, // G_ATOMICRMW_SUB
227 : 0U, // G_ATOMICRMW_AND
228 : 0U, // G_ATOMICRMW_NAND
229 : 0U, // G_ATOMICRMW_OR
230 : 0U, // G_ATOMICRMW_XOR
231 : 0U, // G_ATOMICRMW_MAX
232 : 0U, // G_ATOMICRMW_MIN
233 : 0U, // G_ATOMICRMW_UMAX
234 : 0U, // G_ATOMICRMW_UMIN
235 : 0U, // G_BRCOND
236 : 0U, // G_BRINDIRECT
237 : 0U, // G_INTRINSIC
238 : 0U, // G_INTRINSIC_W_SIDE_EFFECTS
239 : 0U, // G_ANYEXT
240 : 0U, // G_TRUNC
241 : 0U, // G_CONSTANT
242 : 0U, // G_FCONSTANT
243 : 0U, // G_VASTART
244 : 0U, // G_VAARG
245 : 0U, // G_SEXT
246 : 0U, // G_ZEXT
247 : 0U, // G_SHL
248 : 0U, // G_LSHR
249 : 0U, // G_ASHR
250 : 0U, // G_ICMP
251 : 0U, // G_FCMP
252 : 0U, // G_SELECT
253 : 0U, // G_UADDO
254 : 0U, // G_UADDE
255 : 0U, // G_USUBO
256 : 0U, // G_USUBE
257 : 0U, // G_SADDO
258 : 0U, // G_SADDE
259 : 0U, // G_SSUBO
260 : 0U, // G_SSUBE
261 : 0U, // G_UMULO
262 : 0U, // G_SMULO
263 : 0U, // G_UMULH
264 : 0U, // G_SMULH
265 : 0U, // G_FADD
266 : 0U, // G_FSUB
267 : 0U, // G_FMUL
268 : 0U, // G_FMA
269 : 0U, // G_FDIV
270 : 0U, // G_FREM
271 : 0U, // G_FPOW
272 : 0U, // G_FEXP
273 : 0U, // G_FEXP2
274 : 0U, // G_FLOG
275 : 0U, // G_FLOG2
276 : 0U, // G_FNEG
277 : 0U, // G_FPEXT
278 : 0U, // G_FPTRUNC
279 : 0U, // G_FPTOSI
280 : 0U, // G_FPTOUI
281 : 0U, // G_SITOFP
282 : 0U, // G_UITOFP
283 : 0U, // G_FABS
284 : 0U, // G_GEP
285 : 0U, // G_PTR_MASK
286 : 0U, // G_BR
287 : 0U, // G_INSERT_VECTOR_ELT
288 : 0U, // G_EXTRACT_VECTOR_ELT
289 : 0U, // G_SHUFFLE_VECTOR
290 : 0U, // G_CTTZ
291 : 0U, // G_CTTZ_ZERO_UNDEF
292 : 0U, // G_CTLZ
293 : 0U, // G_CTLZ_ZERO_UNDEF
294 : 0U, // G_CTPOP
295 : 0U, // G_BSWAP
296 : 0U, // G_ADDRSPACE_CAST
297 : 0U, // G_BLOCK_ADDR
298 : 2457U, // ADCWRdRr
299 : 2469U, // ADDWRdRr
300 : 807U, // ADJCALLSTACKDOWN
301 : 1005U, // ADJCALLSTACKUP
302 : 2537U, // ANDIWRdK
303 : 2486U, // ANDWRdRr
304 : 18986U, // ASRWRd
305 : 870U, // Asr16
306 : 960U, // Asr8
307 : 1036U, // AtomicFence
308 : 1102U, // AtomicLoad16
309 : 1102U, // AtomicLoad8
310 : 1102U, // AtomicLoadAdd16
311 : 1102U, // AtomicLoadAdd8
312 : 1102U, // AtomicLoadAnd16
313 : 1102U, // AtomicLoadAnd8
314 : 1102U, // AtomicLoadOr16
315 : 1102U, // AtomicLoadOr8
316 : 1102U, // AtomicLoadSub16
317 : 1102U, // AtomicLoadSub8
318 : 1102U, // AtomicLoadXor16
319 : 1102U, // AtomicLoadXor8
320 : 1102U, // AtomicStore16
321 : 1102U, // AtomicStore8
322 : 18946U, // COMWRd
323 : 2463U, // CPCWRdRr
324 : 2579U, // CPWRdRr
325 : 2590U, // EORWRdRr
326 : 2643U, // FRMIDX
327 : 2574U, // INWRdA
328 : 2475U, // LDDWRdPtrQ
329 : 2475U, // LDDWRdYQ
330 : 2531U, // LDIWRdK
331 : 2614U, // LDSWRdK
332 : 2481U, // LDWRdPtr
333 : 35249U, // LDWRdPtrPd
334 : 2481U, // LDWRdPtrPi
335 : 2568U, // LPMWRdZ
336 : 2568U, // LPMWRdZPi
337 : 18940U, // LSLWRd
338 : 18992U, // LSRWRd
339 : 840U, // Lsl16
340 : 932U, // Lsl8
341 : 885U, // Lsr16
342 : 974U, // Lsr8
343 : 2544U, // ORIWRdK
344 : 2591U, // ORWRdRr
345 : 2631U, // OUTWARr
346 : 18968U, // POPWRd
347 : 18882U, // PUSHWRr
348 : 18934U, // ROLWRd
349 : 18980U, // RORWRd
350 : 825U, // Rol16
351 : 918U, // Rol8
352 : 855U, // Ror16
353 : 946U, // Ror8
354 : 2518U, // SBCIWRdK
355 : 2451U, // SBCWRdRr
356 : 2420U, // SEXT
357 : 2102U, // SPREAD
358 : 2153U, // SPWRITE
359 : 2233U, // STDSPQRr
360 : 4540U, // STDWPtrQRr
361 : 2241U, // STDWSPQRr
362 : 2620U, // STSWKRr
363 : 6757U, // STWPtrPdRr
364 : 55874U, // STWPtrPiRr
365 : 2626U, // STWPtrRr
366 : 2511U, // SUBIWRdK
367 : 2445U, // SUBWRdRr
368 : 900U, // Select16
369 : 988U, // Select8
370 : 2426U, // ZEXT
371 : 2070U, // ADCRdRr
372 : 2110U, // ADDRdRr
373 : 2525U, // ADIWRdK
374 : 2211U, // ANDIRdK
375 : 2125U, // ANDRdRr
376 : 18722U, // ASRRd
377 : 18706U, // BCLRs
378 : 2120U, // BLD
379 : 2059U, // BRBCsk
380 : 2353U, // BRBSsk
381 : 1054U, // BREAK
382 : 8455U, // BREQk
383 : 8279U, // BRGEk
384 : 8428U, // BRLOk
385 : 8548U, // BRLTk
386 : 8361U, // BRMIk
387 : 8285U, // BRNEk
388 : 8401U, // BRPLk
389 : 8316U, // BRSHk
390 : 18782U, // BSETs
391 : 2410U, // BST
392 : 18635U, // CALLk
393 : 2184U, // CBIAb
394 : 2317U, // CBRRdK
395 : 18653U, // COMRd
396 : 2091U, // CPCRdRr
397 : 2223U, // CPIRdK
398 : 2296U, // CPRdRr
399 : 2147U, // CPSE
400 : 18459U, // DECRd
401 : 18748U, // DESK
402 : 1074U, // EICALL
403 : 1096U, // EIJMP
404 : 1081U, // ELPM
405 : 2274U, // ELPMRdZ
406 : 2274U, // ELPMRdZPi
407 : 2328U, // EORRdRr
408 : 2263U, // FMUL
409 : 2375U, // FMULS
410 : 2432U, // FMULSU
411 : 1075U, // ICALL
412 : 1097U, // IJMP
413 : 18470U, // INCRd
414 : 2280U, // INRdA
415 : 18685U, // JMPk
416 : 6150U, // LACZRd
417 : 6444U, // LASZRd
418 : 6489U, // LATZRd
419 : 2115U, // LDDRdPtrQ
420 : 2206U, // LDIRdK
421 : 2121U, // LDRdPtr
422 : 34889U, // LDRdPtrPd
423 : 2121U, // LDRdPtrPi
424 : 2359U, // LDSRdK
425 : 1082U, // LPM
426 : 2275U, // LPMRdZ
427 : 2275U, // LPMRdZPi
428 : 18727U, // LSRRd
429 : 2440U, // MOVRdRr
430 : 2637U, // MOVWRdRr
431 : 2264U, // MULRdRr
432 : 2376U, // MULSRdRr
433 : 2433U, // MULSURdRr
434 : 18546U, // NEGRd
435 : 1112U, // NOP
436 : 2228U, // ORIRdK
437 : 2329U, // ORRdRr
438 : 2415U, // OUTARr
439 : 18690U, // POPRd
440 : 18562U, // PUSHRr
441 : 8394U, // RCALLk
442 : 1120U, // RET
443 : 1049U, // RETI
444 : 8444U, // RJMPk
445 : 18717U, // RORRd
446 : 2200U, // SBCIRdK
447 : 2065U, // SBCRdRr
448 : 2189U, // SBIAb
449 : 2080U, // SBICAb
450 : 2369U, // SBISAb
451 : 2505U, // SBIWRdK
452 : 2096U, // SBRCRrB
453 : 2382U, // SBRSRrB
454 : 1090U, // SLEEP
455 : 1086U, // SPM
456 : 2651U, // SPMZPi
457 : 4178U, // STDPtrQRr
458 : 6752U, // STPtrPdRr
459 : 55659U, // STPtrPiRr
460 : 2411U, // STPtrRr
461 : 2388U, // STSKRr
462 : 2194U, // SUBIRdK
463 : 2049U, // SUBRdRr
464 : 18674U, // SWAPRd
465 : 1116U, // WDR
466 : 6263U, // XCHZRd
467 : };
468 :
469 : static const uint8_t OpInfo1[] = {
470 : 0U, // PHI
471 : 0U, // INLINEASM
472 : 0U, // CFI_INSTRUCTION
473 : 0U, // EH_LABEL
474 : 0U, // GC_LABEL
475 : 0U, // ANNOTATION_LABEL
476 : 0U, // KILL
477 : 0U, // EXTRACT_SUBREG
478 : 0U, // INSERT_SUBREG
479 : 0U, // IMPLICIT_DEF
480 : 0U, // SUBREG_TO_REG
481 : 0U, // COPY_TO_REGCLASS
482 : 0U, // DBG_VALUE
483 : 0U, // DBG_LABEL
484 : 0U, // REG_SEQUENCE
485 : 0U, // COPY
486 : 0U, // BUNDLE
487 : 0U, // LIFETIME_START
488 : 0U, // LIFETIME_END
489 : 0U, // STACKMAP
490 : 0U, // FENTRY_CALL
491 : 0U, // PATCHPOINT
492 : 0U, // LOAD_STACK_GUARD
493 : 0U, // STATEPOINT
494 : 0U, // LOCAL_ESCAPE
495 : 0U, // FAULTING_OP
496 : 0U, // PATCHABLE_OP
497 : 0U, // PATCHABLE_FUNCTION_ENTER
498 : 0U, // PATCHABLE_RET
499 : 0U, // PATCHABLE_FUNCTION_EXIT
500 : 0U, // PATCHABLE_TAIL_CALL
501 : 0U, // PATCHABLE_EVENT_CALL
502 : 0U, // PATCHABLE_TYPED_EVENT_CALL
503 : 0U, // ICALL_BRANCH_FUNNEL
504 : 0U, // G_ADD
505 : 0U, // G_SUB
506 : 0U, // G_MUL
507 : 0U, // G_SDIV
508 : 0U, // G_UDIV
509 : 0U, // G_SREM
510 : 0U, // G_UREM
511 : 0U, // G_AND
512 : 0U, // G_OR
513 : 0U, // G_XOR
514 : 0U, // G_IMPLICIT_DEF
515 : 0U, // G_PHI
516 : 0U, // G_FRAME_INDEX
517 : 0U, // G_GLOBAL_VALUE
518 : 0U, // G_EXTRACT
519 : 0U, // G_UNMERGE_VALUES
520 : 0U, // G_INSERT
521 : 0U, // G_MERGE_VALUES
522 : 0U, // G_PTRTOINT
523 : 0U, // G_INTTOPTR
524 : 0U, // G_BITCAST
525 : 0U, // G_INTRINSIC_TRUNC
526 : 0U, // G_INTRINSIC_ROUND
527 : 0U, // G_LOAD
528 : 0U, // G_SEXTLOAD
529 : 0U, // G_ZEXTLOAD
530 : 0U, // G_STORE
531 : 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS
532 : 0U, // G_ATOMIC_CMPXCHG
533 : 0U, // G_ATOMICRMW_XCHG
534 : 0U, // G_ATOMICRMW_ADD
535 : 0U, // G_ATOMICRMW_SUB
536 : 0U, // G_ATOMICRMW_AND
537 : 0U, // G_ATOMICRMW_NAND
538 : 0U, // G_ATOMICRMW_OR
539 : 0U, // G_ATOMICRMW_XOR
540 : 0U, // G_ATOMICRMW_MAX
541 : 0U, // G_ATOMICRMW_MIN
542 : 0U, // G_ATOMICRMW_UMAX
543 : 0U, // G_ATOMICRMW_UMIN
544 : 0U, // G_BRCOND
545 : 0U, // G_BRINDIRECT
546 : 0U, // G_INTRINSIC
547 : 0U, // G_INTRINSIC_W_SIDE_EFFECTS
548 : 0U, // G_ANYEXT
549 : 0U, // G_TRUNC
550 : 0U, // G_CONSTANT
551 : 0U, // G_FCONSTANT
552 : 0U, // G_VASTART
553 : 0U, // G_VAARG
554 : 0U, // G_SEXT
555 : 0U, // G_ZEXT
556 : 0U, // G_SHL
557 : 0U, // G_LSHR
558 : 0U, // G_ASHR
559 : 0U, // G_ICMP
560 : 0U, // G_FCMP
561 : 0U, // G_SELECT
562 : 0U, // G_UADDO
563 : 0U, // G_UADDE
564 : 0U, // G_USUBO
565 : 0U, // G_USUBE
566 : 0U, // G_SADDO
567 : 0U, // G_SADDE
568 : 0U, // G_SSUBO
569 : 0U, // G_SSUBE
570 : 0U, // G_UMULO
571 : 0U, // G_SMULO
572 : 0U, // G_UMULH
573 : 0U, // G_SMULH
574 : 0U, // G_FADD
575 : 0U, // G_FSUB
576 : 0U, // G_FMUL
577 : 0U, // G_FMA
578 : 0U, // G_FDIV
579 : 0U, // G_FREM
580 : 0U, // G_FPOW
581 : 0U, // G_FEXP
582 : 0U, // G_FEXP2
583 : 0U, // G_FLOG
584 : 0U, // G_FLOG2
585 : 0U, // G_FNEG
586 : 0U, // G_FPEXT
587 : 0U, // G_FPTRUNC
588 : 0U, // G_FPTOSI
589 : 0U, // G_FPTOUI
590 : 0U, // G_SITOFP
591 : 0U, // G_UITOFP
592 : 0U, // G_FABS
593 : 0U, // G_GEP
594 : 0U, // G_PTR_MASK
595 : 0U, // G_BR
596 : 0U, // G_INSERT_VECTOR_ELT
597 : 0U, // G_EXTRACT_VECTOR_ELT
598 : 0U, // G_SHUFFLE_VECTOR
599 : 0U, // G_CTTZ
600 : 0U, // G_CTTZ_ZERO_UNDEF
601 : 0U, // G_CTLZ
602 : 0U, // G_CTLZ_ZERO_UNDEF
603 : 0U, // G_CTPOP
604 : 0U, // G_BSWAP
605 : 0U, // G_ADDRSPACE_CAST
606 : 0U, // G_BLOCK_ADDR
607 : 0U, // ADCWRdRr
608 : 0U, // ADDWRdRr
609 : 0U, // ADJCALLSTACKDOWN
610 : 0U, // ADJCALLSTACKUP
611 : 0U, // ANDIWRdK
612 : 0U, // ANDWRdRr
613 : 0U, // ASRWRd
614 : 0U, // Asr16
615 : 0U, // Asr8
616 : 0U, // AtomicFence
617 : 0U, // AtomicLoad16
618 : 0U, // AtomicLoad8
619 : 0U, // AtomicLoadAdd16
620 : 0U, // AtomicLoadAdd8
621 : 0U, // AtomicLoadAnd16
622 : 0U, // AtomicLoadAnd8
623 : 0U, // AtomicLoadOr16
624 : 0U, // AtomicLoadOr8
625 : 0U, // AtomicLoadSub16
626 : 0U, // AtomicLoadSub8
627 : 0U, // AtomicLoadXor16
628 : 0U, // AtomicLoadXor8
629 : 0U, // AtomicStore16
630 : 0U, // AtomicStore8
631 : 0U, // COMWRd
632 : 2U, // CPCWRdRr
633 : 2U, // CPWRdRr
634 : 0U, // EORWRdRr
635 : 18U, // FRMIDX
636 : 2U, // INWRdA
637 : 4U, // LDDWRdPtrQ
638 : 4U, // LDDWRdYQ
639 : 2U, // LDIWRdK
640 : 2U, // LDSWRdK
641 : 2U, // LDWRdPtr
642 : 0U, // LDWRdPtrPd
643 : 32U, // LDWRdPtrPi
644 : 2U, // LPMWRdZ
645 : 34U, // LPMWRdZPi
646 : 0U, // LSLWRd
647 : 0U, // LSRWRd
648 : 0U, // Lsl16
649 : 0U, // Lsl8
650 : 0U, // Lsr16
651 : 0U, // Lsr8
652 : 0U, // ORIWRdK
653 : 0U, // ORWRdRr
654 : 2U, // OUTWARr
655 : 0U, // POPWRd
656 : 0U, // PUSHWRr
657 : 0U, // ROLWRd
658 : 0U, // RORWRd
659 : 0U, // Rol16
660 : 0U, // Rol8
661 : 0U, // Ror16
662 : 0U, // Ror8
663 : 0U, // SBCIWRdK
664 : 0U, // SBCWRdRr
665 : 2U, // SEXT
666 : 2U, // SPREAD
667 : 2U, // SPWRITE
668 : 0U, // STDSPQRr
669 : 0U, // STDWPtrQRr
670 : 0U, // STDWSPQRr
671 : 2U, // STSWKRr
672 : 0U, // STWPtrPdRr
673 : 0U, // STWPtrPiRr
674 : 2U, // STWPtrRr
675 : 0U, // SUBIWRdK
676 : 0U, // SUBWRdRr
677 : 0U, // Select16
678 : 0U, // Select8
679 : 2U, // ZEXT
680 : 0U, // ADCRdRr
681 : 0U, // ADDRdRr
682 : 0U, // ADIWRdK
683 : 0U, // ANDIRdK
684 : 0U, // ANDRdRr
685 : 0U, // ASRRd
686 : 0U, // BCLRs
687 : 2U, // BLD
688 : 6U, // BRBCsk
689 : 6U, // BRBSsk
690 : 0U, // BREAK
691 : 0U, // BREQk
692 : 0U, // BRGEk
693 : 0U, // BRLOk
694 : 0U, // BRLTk
695 : 0U, // BRMIk
696 : 0U, // BRNEk
697 : 0U, // BRPLk
698 : 0U, // BRSHk
699 : 0U, // BSETs
700 : 2U, // BST
701 : 0U, // CALLk
702 : 2U, // CBIAb
703 : 0U, // CBRRdK
704 : 0U, // COMRd
705 : 2U, // CPCRdRr
706 : 2U, // CPIRdK
707 : 2U, // CPRdRr
708 : 2U, // CPSE
709 : 0U, // DECRd
710 : 0U, // DESK
711 : 0U, // EICALL
712 : 0U, // EIJMP
713 : 0U, // ELPM
714 : 2U, // ELPMRdZ
715 : 34U, // ELPMRdZPi
716 : 0U, // EORRdRr
717 : 2U, // FMUL
718 : 2U, // FMULS
719 : 2U, // FMULSU
720 : 0U, // ICALL
721 : 0U, // IJMP
722 : 0U, // INCRd
723 : 2U, // INRdA
724 : 0U, // JMPk
725 : 8U, // LACZRd
726 : 8U, // LASZRd
727 : 8U, // LATZRd
728 : 4U, // LDDRdPtrQ
729 : 2U, // LDIRdK
730 : 2U, // LDRdPtr
731 : 0U, // LDRdPtrPd
732 : 32U, // LDRdPtrPi
733 : 2U, // LDSRdK
734 : 0U, // LPM
735 : 2U, // LPMRdZ
736 : 34U, // LPMRdZPi
737 : 0U, // LSRRd
738 : 2U, // MOVRdRr
739 : 2U, // MOVWRdRr
740 : 2U, // MULRdRr
741 : 2U, // MULSRdRr
742 : 2U, // MULSURdRr
743 : 0U, // NEGRd
744 : 0U, // NOP
745 : 0U, // ORIRdK
746 : 0U, // ORRdRr
747 : 2U, // OUTARr
748 : 0U, // POPRd
749 : 0U, // PUSHRr
750 : 0U, // RCALLk
751 : 0U, // RET
752 : 0U, // RETI
753 : 0U, // RJMPk
754 : 0U, // RORRd
755 : 0U, // SBCIRdK
756 : 0U, // SBCRdRr
757 : 2U, // SBIAb
758 : 2U, // SBICAb
759 : 2U, // SBISAb
760 : 0U, // SBIWRdK
761 : 2U, // SBRCRrB
762 : 2U, // SBRSRrB
763 : 0U, // SLEEP
764 : 0U, // SPM
765 : 1U, // SPMZPi
766 : 0U, // STDPtrQRr
767 : 0U, // STPtrPdRr
768 : 0U, // STPtrPiRr
769 : 2U, // STPtrRr
770 : 2U, // STSKRr
771 : 0U, // SUBIRdK
772 : 0U, // SUBRdRr
773 : 0U, // SWAPRd
774 : 0U, // WDR
775 : 8U, // XCHZRd
776 : };
777 :
778 9094 : O << "\t";
779 :
780 : // Emit the opcode for the instruction.
781 : uint32_t Bits = 0;
782 9094 : Bits |= OpInfo0[MI->getOpcode()] << 0;
783 9094 : Bits |= OpInfo1[MI->getOpcode()] << 16;
784 : assert(Bits != 0 && "Cannot print this instruction.");
785 9094 : O << AsmStrs+(Bits & 2047)-1;
786 :
787 :
788 : // Fragment 0 encoded into 3 bits for 5 unique commands.
789 9094 : switch ((Bits >> 11) & 7) {
790 0 : default: llvm_unreachable("Invalid command number.");
791 : case 0:
792 : // DBG_VALUE, DBG_LABEL, BUNDLE, LIFETIME_START, LIFETIME_END, FENTRY_CAL...
793 : return;
794 : break;
795 4205 : case 1:
796 : // ADCWRdRr, ADDWRdRr, ANDIWRdK, ANDWRdRr, ASRWRd, COMWRd, CPCWRdRr, CPWR...
797 4205 : printOperand(MI, 0, O);
798 4205 : break;
799 169 : case 2:
800 : // STDWPtrQRr, STDPtrQRr
801 169 : printMemri(MI, 0, O);
802 169 : O << ", ";
803 169 : printOperand(MI, 2, O);
804 169 : return;
805 : break;
806 16 : case 3:
807 : // STWPtrPdRr, STWPtrPiRr, LACZRd, LASZRd, LATZRd, STPtrPdRr, STPtrPiRr, ...
808 16 : printOperand(MI, 1, O);
809 16 : break;
810 212 : case 4:
811 : // BREQk, BRGEk, BRLOk, BRLTk, BRMIk, BRNEk, BRPLk, BRSHk, RCALLk, RJMPk
812 212 : printPCRelImm(MI, 0, O);
813 212 : return;
814 : break;
815 : }
816 :
817 :
818 : // Fragment 1 encoded into 3 bits for 5 unique commands.
819 4221 : switch ((Bits >> 14) & 7) {
820 0 : default: llvm_unreachable("Invalid command number.");
821 3123 : case 0:
822 : // ADCWRdRr, ADDWRdRr, ANDIWRdK, ANDWRdRr, CPCWRdRr, CPWRdRr, EORWRdRr, F...
823 3123 : O << ", ";
824 : break;
825 : case 1:
826 : // ASRWRd, COMWRd, LSLWRd, LSRWRd, POPWRd, PUSHWRr, ROLWRd, RORWRd, ASRRd...
827 : return;
828 : break;
829 0 : case 2:
830 : // LDWRdPtrPd, LDRdPtrPd
831 0 : O << ", -";
832 0 : printOperand(MI, 2, O);
833 0 : return;
834 : break;
835 0 : case 3:
836 : // STWPtrPiRr, STPtrPiRr
837 0 : O << "+, ";
838 0 : printOperand(MI, 2, O);
839 0 : return;
840 : break;
841 : case 4:
842 : // SPMZPi
843 : O << '+';
844 : return;
845 : break;
846 : }
847 :
848 :
849 : // Fragment 2 encoded into 3 bits for 5 unique commands.
850 3123 : switch ((Bits >> 17) & 7) {
851 0 : default: llvm_unreachable("Invalid command number.");
852 625 : case 0:
853 : // ADCWRdRr, ADDWRdRr, ANDIWRdK, ANDWRdRr, EORWRdRr, LDWRdPtrPi, ORIWRdK,...
854 625 : printOperand(MI, 2, O);
855 625 : break;
856 2246 : case 1:
857 : // CPCWRdRr, CPWRdRr, FRMIDX, INWRdA, LDIWRdK, LDSWRdK, LDWRdPtr, LPMWRdZ...
858 2246 : printOperand(MI, 1, O);
859 2246 : break;
860 232 : case 2:
861 : // LDDWRdPtrQ, LDDWRdYQ, LDDRdPtrQ
862 232 : printMemri(MI, 1, O);
863 232 : return;
864 : break;
865 4 : case 3:
866 : // BRBCsk, BRBSsk
867 4 : printPCRelImm(MI, 1, O);
868 4 : return;
869 : break;
870 16 : case 4:
871 : // LACZRd, LASZRd, LATZRd, XCHZRd
872 16 : printOperand(MI, 0, O);
873 16 : return;
874 : break;
875 : }
876 :
877 :
878 : // Fragment 3 encoded into 2 bits for 3 unique commands.
879 2871 : switch ((Bits >> 20) & 3) {
880 0 : default: llvm_unreachable("Invalid command number.");
881 : case 0:
882 : // ADCWRdRr, ADDWRdRr, ANDIWRdK, ANDWRdRr, CPCWRdRr, CPWRdRr, EORWRdRr, I...
883 : return;
884 : break;
885 0 : case 1:
886 : // FRMIDX
887 0 : O << ", ";
888 0 : printOperand(MI, 2, O);
889 0 : return;
890 : break;
891 : case 2:
892 : // LDWRdPtrPi, LPMWRdZPi, ELPMRdZPi, LDRdPtrPi, LPMRdZPi
893 : O << '+';
894 : return;
895 : break;
896 : }
897 :
898 : }
899 :
900 :
901 : /// getRegisterName - This method is automatically generated by tblgen
902 : /// from the register set description. This returns the assembler name
903 : /// for the specified register.
904 6509 : const char *AVRInstPrinter::
905 : getRegisterName(unsigned RegNo, unsigned AltIdx) {
906 : assert(RegNo && RegNo < 53 && "Invalid register number!");
907 :
908 : static const char AsmStrsNoRegAltName[] = {
909 : /* 0 */ 'r', '1', '1', ':', 'r', '1', '0', 0,
910 : /* 8 */ 'r', '2', '1', ':', 'r', '2', '0', 0,
911 : /* 16 */ 'r', '3', '1', ':', 'r', '3', '0', 0,
912 : /* 24 */ 'r', '1', ':', 'r', '0', 0,
913 : /* 30 */ 'r', '1', '1', 0,
914 : /* 34 */ 'r', '2', '1', 0,
915 : /* 38 */ 'r', '3', '1', 0,
916 : /* 42 */ 'r', '1', 0,
917 : /* 45 */ 'r', '1', '3', ':', 'r', '1', '2', 0,
918 : /* 53 */ 'r', '2', '3', ':', 'r', '2', '2', 0,
919 : /* 61 */ 'r', '3', ':', 'r', '2', 0,
920 : /* 67 */ 'r', '1', '3', 0,
921 : /* 71 */ 'r', '2', '3', 0,
922 : /* 75 */ 'r', '3', 0,
923 : /* 78 */ 'r', '1', '5', ':', 'r', '1', '4', 0,
924 : /* 86 */ 'r', '2', '5', ':', 'r', '2', '4', 0,
925 : /* 94 */ 'r', '5', ':', 'r', '4', 0,
926 : /* 100 */ 'r', '1', '5', 0,
927 : /* 104 */ 'r', '2', '5', 0,
928 : /* 108 */ 'r', '5', 0,
929 : /* 111 */ 'r', '1', '7', ':', 'r', '1', '6', 0,
930 : /* 119 */ 'r', '2', '7', ':', 'r', '2', '6', 0,
931 : /* 127 */ 'r', '7', ':', 'r', '6', 0,
932 : /* 133 */ 'r', '1', '7', 0,
933 : /* 137 */ 'r', '2', '7', 0,
934 : /* 141 */ 'r', '7', 0,
935 : /* 144 */ 'r', '1', '9', ':', 'r', '1', '8', 0,
936 : /* 152 */ 'r', '2', '9', ':', 'r', '2', '8', 0,
937 : /* 160 */ 'r', '9', ':', 'r', '8', 0,
938 : /* 166 */ 'r', '1', '9', 0,
939 : /* 170 */ 'r', '2', '9', 0,
940 : /* 174 */ 'r', '9', 0,
941 : /* 177 */ 'S', 'P', 'H', 0,
942 : /* 181 */ 'S', 'P', 'L', 0,
943 : /* 185 */ 'S', 'P', 0,
944 : /* 188 */ 'F', 'L', 'A', 'G', 'S', 0,
945 : };
946 :
947 : static const uint8_t RegAsmOffsetNoRegAltName[] = {
948 : 185, 177, 181, 188, 27, 42, 64, 75, 97, 108, 130, 141, 163, 174,
949 : 4, 30, 49, 67, 82, 100, 115, 133, 148, 166, 12, 34, 57, 71,
950 : 90, 104, 123, 137, 156, 170, 20, 38, 24, 61, 94, 127, 160, 0,
951 : 45, 78, 111, 144, 8, 53, 86, 119, 152, 16,
952 : };
953 :
954 : static const char AsmStrsptr[] = {
955 : /* 0 */ 'X', 0,
956 : /* 2 */ 'Y', 0,
957 : /* 4 */ 'Z', 0,
958 : };
959 :
960 : static const uint8_t RegAsmOffsetptr[] = {
961 : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
962 : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
963 : 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
964 : 1, 1, 1, 1, 1, 1, 1, 0, 2, 4,
965 : };
966 :
967 6509 : switch(AltIdx) {
968 0 : default: llvm_unreachable("Invalid register alt name index!");
969 5936 : case AVR::NoRegAltName:
970 : assert(*(AsmStrsNoRegAltName+RegAsmOffsetNoRegAltName[RegNo-1]) &&
971 : "Invalid alt name index for register!");
972 5936 : return AsmStrsNoRegAltName+RegAsmOffsetNoRegAltName[RegNo-1];
973 573 : case AVR::ptr:
974 : assert(*(AsmStrsptr+RegAsmOffsetptr[RegNo-1]) &&
975 : "Invalid alt name index for register!");
976 573 : return AsmStrsptr+RegAsmOffsetptr[RegNo-1];
977 : }
978 : }
979 :
980 : #ifdef PRINT_ALIAS_INSTR
981 : #undef PRINT_ALIAS_INSTR
982 :
983 9756 : bool AVRInstPrinter::printAliasInstr(const MCInst *MI, raw_ostream &OS) {
984 : const char *AsmString;
985 9756 : switch (MI->getOpcode()) {
986 : default: return false;
987 : case AVR::ADCRdRr:
988 275 : if (MI->getNumOperands() == 3 &&
989 550 : MI->getOperand(0).isReg() &&
990 275 : MRI.getRegClass(AVR::GPR8RegClassID).contains(MI->getOperand(0).getReg()) &&
991 550 : MI->getOperand(2).isReg() &&
992 275 : MI->getOperand(2).getReg() == MI->getOperand(0).getReg()) {
993 : // (ADCRdRr GPR8:$rd, GPR8:$rd)
994 : AsmString = "rol $\x01";
995 : break;
996 : }
997 : return false;
998 : case AVR::ADDRdRr:
999 282 : if (MI->getNumOperands() == 3 &&
1000 564 : MI->getOperand(0).isReg() &&
1001 282 : MRI.getRegClass(AVR::GPR8RegClassID).contains(MI->getOperand(0).getReg()) &&
1002 564 : MI->getOperand(2).isReg() &&
1003 282 : MI->getOperand(2).getReg() == MI->getOperand(0).getReg()) {
1004 : // (ADDRdRr GPR8:$rd, GPR8:$rd)
1005 : AsmString = "lsl $\x01";
1006 : break;
1007 : }
1008 : return false;
1009 : case AVR::ANDRdRr:
1010 32 : if (MI->getNumOperands() == 3 &&
1011 64 : MI->getOperand(0).isReg() &&
1012 32 : MRI.getRegClass(AVR::GPR8RegClassID).contains(MI->getOperand(0).getReg()) &&
1013 64 : MI->getOperand(2).isReg() &&
1014 32 : MI->getOperand(2).getReg() == MI->getOperand(0).getReg()) {
1015 : // (ANDRdRr GPR8:$rd, GPR8:$rd)
1016 : AsmString = "tst $\x01";
1017 : break;
1018 : }
1019 : return false;
1020 : case AVR::BCLRs:
1021 91 : if (MI->getNumOperands() == 1 &&
1022 91 : MI->getOperand(0).isImm() &&
1023 91 : MI->getOperand(0).getImm() == 0) {
1024 : // (BCLRs 0)
1025 : AsmString = "clc";
1026 : break;
1027 : }
1028 89 : if (MI->getNumOperands() == 1 &&
1029 89 : MI->getOperand(0).isImm() &&
1030 89 : MI->getOperand(0).getImm() == 1) {
1031 : // (BCLRs 1)
1032 : AsmString = "clz";
1033 : break;
1034 : }
1035 87 : if (MI->getNumOperands() == 1 &&
1036 87 : MI->getOperand(0).isImm() &&
1037 87 : MI->getOperand(0).getImm() == 2) {
1038 : // (BCLRs 2)
1039 : AsmString = "cln";
1040 : break;
1041 : }
1042 85 : if (MI->getNumOperands() == 1 &&
1043 85 : MI->getOperand(0).isImm() &&
1044 85 : MI->getOperand(0).getImm() == 3) {
1045 : // (BCLRs 3)
1046 : AsmString = "clv";
1047 : break;
1048 : }
1049 83 : if (MI->getNumOperands() == 1 &&
1050 83 : MI->getOperand(0).isImm() &&
1051 83 : MI->getOperand(0).getImm() == 4) {
1052 : // (BCLRs 4)
1053 : AsmString = "cls";
1054 : break;
1055 : }
1056 81 : if (MI->getNumOperands() == 1 &&
1057 81 : MI->getOperand(0).isImm() &&
1058 81 : MI->getOperand(0).getImm() == 5) {
1059 : // (BCLRs 5)
1060 : AsmString = "clh";
1061 : break;
1062 : }
1063 79 : if (MI->getNumOperands() == 1 &&
1064 79 : MI->getOperand(0).isImm() &&
1065 79 : MI->getOperand(0).getImm() == 6) {
1066 : // (BCLRs 6)
1067 : AsmString = "clt";
1068 : break;
1069 : }
1070 77 : if (MI->getNumOperands() == 1 &&
1071 77 : MI->getOperand(0).isImm() &&
1072 77 : MI->getOperand(0).getImm() == 7) {
1073 : // (BCLRs 7)
1074 : AsmString = "cli";
1075 : break;
1076 : }
1077 : return false;
1078 : case AVR::BRBCsk:
1079 20 : if (MI->getNumOperands() == 2 &&
1080 20 : MI->getOperand(0).isImm() &&
1081 20 : MI->getOperand(0).getImm() == 0) {
1082 : // (BRBCsk 0, relbrtarget_7:$k)
1083 : AsmString = "brcc $\xFF\x02\x01";
1084 : break;
1085 : }
1086 15 : if (MI->getNumOperands() == 2 &&
1087 15 : MI->getOperand(0).isImm() &&
1088 15 : MI->getOperand(0).getImm() == 5) {
1089 : // (BRBCsk 5, relbrtarget_7:$k)
1090 : AsmString = "brhc $\xFF\x02\x01";
1091 : break;
1092 : }
1093 12 : if (MI->getNumOperands() == 2 &&
1094 12 : MI->getOperand(0).isImm() &&
1095 12 : MI->getOperand(0).getImm() == 6) {
1096 : // (BRBCsk 6, relbrtarget_7:$k)
1097 : AsmString = "brtc $\xFF\x02\x01";
1098 : break;
1099 : }
1100 9 : if (MI->getNumOperands() == 2 &&
1101 9 : MI->getOperand(0).isImm() &&
1102 9 : MI->getOperand(0).getImm() == 3) {
1103 : // (BRBCsk 3, relbrtarget_7:$k)
1104 : AsmString = "brvc $\xFF\x02\x01";
1105 : break;
1106 : }
1107 5 : if (MI->getNumOperands() == 2 &&
1108 5 : MI->getOperand(0).isImm() &&
1109 5 : MI->getOperand(0).getImm() == 7) {
1110 : // (BRBCsk 7, relbrtarget_7:$k)
1111 : AsmString = "brid $\xFF\x02\x01";
1112 : break;
1113 : }
1114 : return false;
1115 : case AVR::BRBSsk:
1116 20 : if (MI->getNumOperands() == 2 &&
1117 20 : MI->getOperand(0).isImm() &&
1118 20 : MI->getOperand(0).getImm() == 0) {
1119 : // (BRBSsk 0, relbrtarget_7:$k)
1120 : AsmString = "brcs $\xFF\x02\x01";
1121 : break;
1122 : }
1123 15 : if (MI->getNumOperands() == 2 &&
1124 15 : MI->getOperand(0).isImm() &&
1125 15 : MI->getOperand(0).getImm() == 5) {
1126 : // (BRBSsk 5, relbrtarget_7:$k)
1127 : AsmString = "brhs $\xFF\x02\x01";
1128 : break;
1129 : }
1130 12 : if (MI->getNumOperands() == 2 &&
1131 12 : MI->getOperand(0).isImm() &&
1132 12 : MI->getOperand(0).getImm() == 6) {
1133 : // (BRBSsk 6, relbrtarget_7:$k)
1134 : AsmString = "brts $\xFF\x02\x01";
1135 : break;
1136 : }
1137 9 : if (MI->getNumOperands() == 2 &&
1138 9 : MI->getOperand(0).isImm() &&
1139 9 : MI->getOperand(0).getImm() == 3) {
1140 : // (BRBSsk 3, relbrtarget_7:$k)
1141 : AsmString = "brvs $\xFF\x02\x01";
1142 : break;
1143 : }
1144 5 : if (MI->getNumOperands() == 2 &&
1145 5 : MI->getOperand(0).isImm() &&
1146 5 : MI->getOperand(0).getImm() == 7) {
1147 : // (BRBSsk 7, relbrtarget_7:$k)
1148 : AsmString = "brie $\xFF\x02\x01";
1149 : break;
1150 : }
1151 : return false;
1152 : case AVR::BSETs:
1153 18 : if (MI->getNumOperands() == 1 &&
1154 18 : MI->getOperand(0).isImm() &&
1155 18 : MI->getOperand(0).getImm() == 0) {
1156 : // (BSETs 0)
1157 : AsmString = "sec";
1158 : break;
1159 : }
1160 16 : if (MI->getNumOperands() == 1 &&
1161 16 : MI->getOperand(0).isImm() &&
1162 16 : MI->getOperand(0).getImm() == 1) {
1163 : // (BSETs 1)
1164 : AsmString = "sez";
1165 : break;
1166 : }
1167 14 : if (MI->getNumOperands() == 1 &&
1168 14 : MI->getOperand(0).isImm() &&
1169 14 : MI->getOperand(0).getImm() == 2) {
1170 : // (BSETs 2)
1171 : AsmString = "sen";
1172 : break;
1173 : }
1174 12 : if (MI->getNumOperands() == 1 &&
1175 12 : MI->getOperand(0).isImm() &&
1176 12 : MI->getOperand(0).getImm() == 3) {
1177 : // (BSETs 3)
1178 : AsmString = "sev";
1179 : break;
1180 : }
1181 10 : if (MI->getNumOperands() == 1 &&
1182 10 : MI->getOperand(0).isImm() &&
1183 10 : MI->getOperand(0).getImm() == 4) {
1184 : // (BSETs 4)
1185 : AsmString = "ses";
1186 : break;
1187 : }
1188 8 : if (MI->getNumOperands() == 1 &&
1189 8 : MI->getOperand(0).isImm() &&
1190 8 : MI->getOperand(0).getImm() == 5) {
1191 : // (BSETs 5)
1192 : AsmString = "seh";
1193 : break;
1194 : }
1195 6 : if (MI->getNumOperands() == 1 &&
1196 6 : MI->getOperand(0).isImm() &&
1197 6 : MI->getOperand(0).getImm() == 6) {
1198 : // (BSETs 6)
1199 : AsmString = "set";
1200 : break;
1201 : }
1202 4 : if (MI->getNumOperands() == 1 &&
1203 4 : MI->getOperand(0).isImm() &&
1204 4 : MI->getOperand(0).getImm() == 7) {
1205 : // (BSETs 7)
1206 : AsmString = "sei";
1207 : break;
1208 : }
1209 : return false;
1210 : case AVR::EORRdRr:
1211 67 : if (MI->getNumOperands() == 3 &&
1212 134 : MI->getOperand(0).isReg() &&
1213 67 : MRI.getRegClass(AVR::GPR8RegClassID).contains(MI->getOperand(0).getReg()) &&
1214 134 : MI->getOperand(2).isReg() &&
1215 67 : MI->getOperand(2).getReg() == MI->getOperand(0).getReg()) {
1216 : // (EORRdRr GPR8:$rd, GPR8:$rd)
1217 : AsmString = "clr $\x01";
1218 : break;
1219 : }
1220 : return false;
1221 : }
1222 :
1223 : unsigned I = 0;
1224 2131 : while (AsmString[I] != ' ' && AsmString[I] != '\t' &&
1225 4815 : AsmString[I] != '$' && AsmString[I] != '\0')
1226 2022 : ++I;
1227 662 : OS << '\t' << StringRef(AsmString, I);
1228 662 : if (AsmString[I] != '\0') {
1229 553 : if (AsmString[I] == ' ' || AsmString[I] == '\t') {
1230 : OS << '\t';
1231 553 : ++I;
1232 : }
1233 : do {
1234 553 : if (AsmString[I] == '$') {
1235 553 : ++I;
1236 553 : if (AsmString[I] == (char)0xff) {
1237 36 : ++I;
1238 36 : int OpIdx = AsmString[I++] - 1;
1239 36 : int PrintMethodIdx = AsmString[I++] - 1;
1240 36 : printCustomAliasOperand(MI, OpIdx, PrintMethodIdx, OS);
1241 : } else
1242 517 : printOperand(MI, unsigned(AsmString[I++]) - 1, OS);
1243 : } else {
1244 0 : OS << AsmString[I++];
1245 : }
1246 553 : } while (AsmString[I] != '\0');
1247 : }
1248 :
1249 : return true;
1250 : }
1251 :
1252 36 : void AVRInstPrinter::printCustomAliasOperand(
1253 : const MCInst *MI, unsigned OpIdx,
1254 : unsigned PrintMethodIdx,
1255 : raw_ostream &OS) {
1256 36 : switch (PrintMethodIdx) {
1257 0 : default:
1258 0 : llvm_unreachable("Unknown PrintMethod kind");
1259 : break;
1260 36 : case 0:
1261 36 : printPCRelImm(MI, OpIdx, OS);
1262 : break;
1263 : }
1264 36 : }
1265 :
1266 : #endif // PRINT_ALIAS_INSTR
|