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 1389 : void LanaiInstPrinter::printInstruction(const MCInst *MI, raw_ostream &O) {
12 : static const char AsmStrs[] = {
13 : /* 0 */ 's', 'h', 'a', 9, 0,
14 : /* 5 */ 'u', 'l', 'd', '.', 'b', 9, 0,
15 : /* 12 */ 's', 't', '.', 'b', 9, 0,
16 : /* 18 */ 's', 'u', 'b', 'b', 9, 0,
17 : /* 24 */ 's', 'u', 'b', 9, 0,
18 : /* 29 */ 'a', 'd', 'd', 'c', 9, 0,
19 : /* 35 */ 'p', 'o', 'p', 'c', 9, 0,
20 : /* 41 */ 'a', 'd', 'd', 9, 0,
21 : /* 46 */ 'u', 'l', 'd', 9, 0,
22 : /* 51 */ 'a', 'n', 'd', 9, 0,
23 : /* 56 */ 's', 'h', 'a', '.', 'f', 9, 0,
24 : /* 63 */ 's', 'u', 'b', 'b', '.', 'f', 9, 0,
25 : /* 71 */ 's', 'u', 'b', '.', 'f', 9, 0,
26 : /* 78 */ 'a', 'd', 'd', 'c', '.', 'f', 9, 0,
27 : /* 86 */ 'a', 'd', 'd', '.', 'f', 9, 0,
28 : /* 93 */ 'a', 'n', 'd', '.', 'f', 9, 0,
29 : /* 100 */ 's', 'h', '.', 'f', 9, 0,
30 : /* 106 */ 'x', 'o', 'r', '.', 'f', 9, 0,
31 : /* 113 */ 'u', 'l', 'd', '.', 'h', 9, 0,
32 : /* 120 */ 's', 't', '.', 'h', 9, 0,
33 : /* 126 */ 's', 'h', 9, 0,
34 : /* 130 */ 'x', 'o', 'r', 9, 0,
35 : /* 135 */ 'b', 't', 9, 0,
36 : /* 139 */ 's', 't', 9, 0,
37 : /* 143 */ 'm', 'o', 'v', 9, 0,
38 : /* 148 */ 'l', 'e', 'a', 'd', 'z', 9, 0,
39 : /* 155 */ 't', 'r', 'a', 'i', 'l', 'z', 9, 0,
40 : /* 163 */ '#', 'A', 'D', 'J', 'D', 'Y', 'N', 'A', 'L', 'L', 'O', 'C', 32, 0,
41 : /* 177 */ '#', 'A', 'D', 'J', 'C', 'A', 'L', 'L', 'S', 'T', 'A', 'C', 'K', 'D', 'O', 'W', 'N', 32, 0,
42 : /* 196 */ '#', 'A', 'D', 'J', 'C', 'A', 'L', 'L', 'S', 'T', 'A', 'C', 'K', 'U', 'P', 32, 0,
43 : /* 213 */ '#', 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,
44 : /* 244 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'T', 'y', 'p', 'e', 'd', 32, 'E', 'v', 'e', 'n', 't', 32, 'L', 'o', 'g', '.', 0,
45 : /* 268 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'C', 'u', 's', 't', 'o', 'm', 32, 'E', 'v', 'e', 'n', 't', 32, 'L', 'o', 'g', '.', 0,
46 : /* 293 */ 's', 'e', 'l', '.', 0,
47 : /* 298 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', 32, 'E', 'n', 't', 'e', 'r', '.', 0,
48 : /* 321 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'T', 'a', 'i', 'l', 32, 'C', 'a', 'l', 'l', 32, 'E', 'x', 'i', 't', '.', 0,
49 : /* 344 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', 32, 'E', 'x', 'i', 't', '.', 0,
50 : /* 366 */ 'l', 'o', 'g', '_', '0', 0,
51 : /* 372 */ 'l', 'o', 'g', '_', '1', 0,
52 : /* 378 */ 'l', 'o', 'g', '_', '2', 0,
53 : /* 384 */ 'l', 'o', 'g', '_', '3', 0,
54 : /* 390 */ 'l', 'o', 'g', '_', '4', 0,
55 : /* 396 */ 'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'E', 'N', 'D', 0,
56 : /* 409 */ 'B', 'U', 'N', 'D', 'L', 'E', 0,
57 : /* 416 */ 'D', 'B', 'G', '_', 'V', 'A', 'L', 'U', 'E', 0,
58 : /* 426 */ 'D', 'B', 'G', '_', 'L', 'A', 'B', 'E', 'L', 0,
59 : /* 436 */ 'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'S', 'T', 'A', 'R', 'T', 0,
60 : /* 451 */ 's', 'h', 'a', 0,
61 : /* 455 */ 's', 'u', 'b', 'b', 0,
62 : /* 460 */ 's', 'u', 'b', 0,
63 : /* 464 */ 'a', 'd', 'd', 'c', 0,
64 : /* 469 */ 'a', 'd', 'd', 0,
65 : /* 473 */ 'a', 'n', 'd', 0,
66 : /* 477 */ 's', 'h', 'a', '.', 'f', 0,
67 : /* 483 */ 's', 'u', 'b', 'b', '.', 'f', 0,
68 : /* 490 */ 's', 'u', 'b', '.', 'f', 0,
69 : /* 496 */ 'a', 'd', 'd', 'c', '.', 'f', 0,
70 : /* 503 */ 'a', 'd', 'd', '.', 'f', 0,
71 : /* 509 */ 'a', 'n', 'd', '.', 'f', 0,
72 : /* 515 */ 's', 'h', '.', 'f', 0,
73 : /* 520 */ 'x', 'o', 'r', '.', 'f', 0,
74 : /* 526 */ 's', 'h', 0,
75 : /* 529 */ '#', 32, 'F', 'E', 'n', 't', 'r', 'y', 32, 'c', 'a', 'l', 'l', 0,
76 : /* 543 */ 'l', 'd', 9, '-', '4', '[', '%', 'f', 'p', ']', ',', 32, '%', 'p', 'c', 32, '!', 32, 'r', 'e', 't', 'u', 'r', 'n', 0,
77 : /* 568 */ 'n', 'o', 'p', 0,
78 : /* 572 */ 'x', 'o', 'r', 0,
79 : /* 576 */ 's', 0,
80 : };
81 :
82 : static const uint16_t OpInfo0[] = {
83 : 0U, // PHI
84 : 0U, // INLINEASM
85 : 0U, // CFI_INSTRUCTION
86 : 0U, // EH_LABEL
87 : 0U, // GC_LABEL
88 : 0U, // ANNOTATION_LABEL
89 : 0U, // KILL
90 : 0U, // EXTRACT_SUBREG
91 : 0U, // INSERT_SUBREG
92 : 0U, // IMPLICIT_DEF
93 : 0U, // SUBREG_TO_REG
94 : 0U, // COPY_TO_REGCLASS
95 : 417U, // DBG_VALUE
96 : 427U, // DBG_LABEL
97 : 0U, // REG_SEQUENCE
98 : 0U, // COPY
99 : 410U, // BUNDLE
100 : 437U, // LIFETIME_START
101 : 397U, // LIFETIME_END
102 : 0U, // STACKMAP
103 : 530U, // FENTRY_CALL
104 : 0U, // PATCHPOINT
105 : 0U, // LOAD_STACK_GUARD
106 : 0U, // STATEPOINT
107 : 0U, // LOCAL_ESCAPE
108 : 0U, // FAULTING_OP
109 : 0U, // PATCHABLE_OP
110 : 299U, // PATCHABLE_FUNCTION_ENTER
111 : 214U, // PATCHABLE_RET
112 : 345U, // PATCHABLE_FUNCTION_EXIT
113 : 322U, // PATCHABLE_TAIL_CALL
114 : 269U, // PATCHABLE_EVENT_CALL
115 : 245U, // PATCHABLE_TYPED_EVENT_CALL
116 : 0U, // ICALL_BRANCH_FUNNEL
117 : 0U, // G_ADD
118 : 0U, // G_SUB
119 : 0U, // G_MUL
120 : 0U, // G_SDIV
121 : 0U, // G_UDIV
122 : 0U, // G_SREM
123 : 0U, // G_UREM
124 : 0U, // G_AND
125 : 0U, // G_OR
126 : 0U, // G_XOR
127 : 0U, // G_IMPLICIT_DEF
128 : 0U, // G_PHI
129 : 0U, // G_FRAME_INDEX
130 : 0U, // G_GLOBAL_VALUE
131 : 0U, // G_EXTRACT
132 : 0U, // G_UNMERGE_VALUES
133 : 0U, // G_INSERT
134 : 0U, // G_MERGE_VALUES
135 : 0U, // G_PTRTOINT
136 : 0U, // G_INTTOPTR
137 : 0U, // G_BITCAST
138 : 0U, // G_INTRINSIC_TRUNC
139 : 0U, // G_INTRINSIC_ROUND
140 : 0U, // G_LOAD
141 : 0U, // G_SEXTLOAD
142 : 0U, // G_ZEXTLOAD
143 : 0U, // G_STORE
144 : 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS
145 : 0U, // G_ATOMIC_CMPXCHG
146 : 0U, // G_ATOMICRMW_XCHG
147 : 0U, // G_ATOMICRMW_ADD
148 : 0U, // G_ATOMICRMW_SUB
149 : 0U, // G_ATOMICRMW_AND
150 : 0U, // G_ATOMICRMW_NAND
151 : 0U, // G_ATOMICRMW_OR
152 : 0U, // G_ATOMICRMW_XOR
153 : 0U, // G_ATOMICRMW_MAX
154 : 0U, // G_ATOMICRMW_MIN
155 : 0U, // G_ATOMICRMW_UMAX
156 : 0U, // G_ATOMICRMW_UMIN
157 : 0U, // G_BRCOND
158 : 0U, // G_BRINDIRECT
159 : 0U, // G_INTRINSIC
160 : 0U, // G_INTRINSIC_W_SIDE_EFFECTS
161 : 0U, // G_ANYEXT
162 : 0U, // G_TRUNC
163 : 0U, // G_CONSTANT
164 : 0U, // G_FCONSTANT
165 : 0U, // G_VASTART
166 : 0U, // G_VAARG
167 : 0U, // G_SEXT
168 : 0U, // G_ZEXT
169 : 0U, // G_SHL
170 : 0U, // G_LSHR
171 : 0U, // G_ASHR
172 : 0U, // G_ICMP
173 : 0U, // G_FCMP
174 : 0U, // G_SELECT
175 : 0U, // G_UADDO
176 : 0U, // G_UADDE
177 : 0U, // G_USUBO
178 : 0U, // G_USUBE
179 : 0U, // G_SADDO
180 : 0U, // G_SADDE
181 : 0U, // G_SSUBO
182 : 0U, // G_SSUBE
183 : 0U, // G_UMULO
184 : 0U, // G_SMULO
185 : 0U, // G_UMULH
186 : 0U, // G_SMULH
187 : 0U, // G_FADD
188 : 0U, // G_FSUB
189 : 0U, // G_FMUL
190 : 0U, // G_FMA
191 : 0U, // G_FDIV
192 : 0U, // G_FREM
193 : 0U, // G_FPOW
194 : 0U, // G_FEXP
195 : 0U, // G_FEXP2
196 : 0U, // G_FLOG
197 : 0U, // G_FLOG2
198 : 0U, // G_FNEG
199 : 0U, // G_FPEXT
200 : 0U, // G_FPTRUNC
201 : 0U, // G_FPTOSI
202 : 0U, // G_FPTOUI
203 : 0U, // G_SITOFP
204 : 0U, // G_UITOFP
205 : 0U, // G_FABS
206 : 0U, // G_GEP
207 : 0U, // G_PTR_MASK
208 : 0U, // G_BR
209 : 0U, // G_INSERT_VECTOR_ELT
210 : 0U, // G_EXTRACT_VECTOR_ELT
211 : 0U, // G_SHUFFLE_VECTOR
212 : 0U, // G_CTTZ
213 : 0U, // G_CTTZ_ZERO_UNDEF
214 : 0U, // G_CTLZ
215 : 0U, // G_CTLZ_ZERO_UNDEF
216 : 0U, // G_CTPOP
217 : 0U, // G_BSWAP
218 : 0U, // G_ADDRSPACE_CAST
219 : 0U, // G_BLOCK_ADDR
220 : 1202U, // ADJCALLSTACKDOWN
221 : 1221U, // ADJCALLSTACKUP
222 : 1188U, // ADJDYNALLOC
223 : 0U, // CALL
224 : 0U, // CALLR
225 : 18511U, // ADDC_F_I_HI
226 : 34895U, // ADDC_F_I_LO
227 : 3569U, // ADDC_F_R
228 : 18462U, // ADDC_I_HI
229 : 34846U, // ADDC_I_LO
230 : 3537U, // ADDC_R
231 : 18519U, // ADD_F_I_HI
232 : 34903U, // ADD_F_I_LO
233 : 3576U, // ADD_F_R
234 : 18474U, // ADD_I_HI
235 : 34858U, // ADD_I_LO
236 : 3542U, // ADD_R
237 : 51294U, // AND_F_I_HI
238 : 2142U, // AND_F_I_LO
239 : 3582U, // AND_F_R
240 : 51252U, // AND_I_HI
241 : 2100U, // AND_I_LO
242 : 3546U, // AND_R
243 : 20939U, // BRCC
244 : 20939U, // BRIND_CC
245 : 5579U, // BRIND_CCA
246 : 37323U, // BRR
247 : 50312U, // BT
248 : 50312U, // JR
249 : 6192U, // LDADDR
250 : 7175U, // LDBs_RI
251 : 8199U, // LDBs_RR
252 : 7174U, // LDBz_RI
253 : 8198U, // LDBz_RR
254 : 7283U, // LDHs_RI
255 : 8307U, // LDHs_RR
256 : 7282U, // LDHz_RI
257 : 8306U, // LDHz_RR
258 : 9263U, // LDW_RI
259 : 8240U, // LDW_RR
260 : 8239U, // LDWz_RR
261 : 2197U, // LEADZ
262 : 367U, // LOG0
263 : 373U, // LOG1
264 : 379U, // LOG2
265 : 385U, // LOG3
266 : 391U, // LOG4
267 : 10384U, // MOVHI
268 : 569U, // NOP
269 : 18540U, // OR_F_I_HI
270 : 34924U, // OR_F_I_LO
271 : 3594U, // OR_F_R
272 : 18564U, // OR_I_HI
273 : 34948U, // OR_I_LO
274 : 3646U, // OR_R
275 : 2084U, // POPC
276 : 544U, // RET
277 : 34873U, // SA_F_I
278 : 34817U, // SA_I
279 : 21057U, // SCC
280 : 11558U, // SELECT
281 : 17480U, // SFSUB_F_RI_HI
282 : 17480U, // SFSUB_F_RI_LO
283 : 17480U, // SFSUB_F_RR
284 : 3588U, // SHL_F_R
285 : 3599U, // SHL_R
286 : 2192U, // SLI
287 : 34917U, // SL_F_I
288 : 34943U, // SL_I
289 : 3550U, // SRA_F_R
290 : 3524U, // SRA_R
291 : 3588U, // SRL_F_R
292 : 3599U, // SRL_R
293 : 17548U, // STADDR
294 : 17421U, // STB_RI
295 : 17421U, // STB_RR
296 : 17529U, // STH_RI
297 : 17529U, // STH_RR
298 : 18496U, // SUBB_F_I_HI
299 : 34880U, // SUBB_F_I_LO
300 : 3556U, // SUBB_F_R
301 : 18451U, // SUBB_I_HI
302 : 34835U, // SUBB_I_LO
303 : 3528U, // SUBB_R
304 : 18504U, // SUB_F_I_HI
305 : 34888U, // SUB_F_I_LO
306 : 3563U, // SUB_F_R
307 : 18457U, // SUB_I_HI
308 : 34841U, // SUB_I_LO
309 : 3533U, // SUB_R
310 : 17548U, // SW_RI
311 : 17548U, // SW_RR
312 : 2204U, // TRAILZ
313 : 18539U, // XOR_F_I_HI
314 : 34923U, // XOR_F_I_LO
315 : 3593U, // XOR_F_R
316 : 18563U, // XOR_I_HI
317 : 34947U, // XOR_I_LO
318 : 3645U, // XOR_R
319 : };
320 :
321 : static const uint8_t OpInfo1[] = {
322 : 0U, // PHI
323 : 0U, // INLINEASM
324 : 0U, // CFI_INSTRUCTION
325 : 0U, // EH_LABEL
326 : 0U, // GC_LABEL
327 : 0U, // ANNOTATION_LABEL
328 : 0U, // KILL
329 : 0U, // EXTRACT_SUBREG
330 : 0U, // INSERT_SUBREG
331 : 0U, // IMPLICIT_DEF
332 : 0U, // SUBREG_TO_REG
333 : 0U, // COPY_TO_REGCLASS
334 : 0U, // DBG_VALUE
335 : 0U, // DBG_LABEL
336 : 0U, // REG_SEQUENCE
337 : 0U, // COPY
338 : 0U, // BUNDLE
339 : 0U, // LIFETIME_START
340 : 0U, // LIFETIME_END
341 : 0U, // STACKMAP
342 : 0U, // FENTRY_CALL
343 : 0U, // PATCHPOINT
344 : 0U, // LOAD_STACK_GUARD
345 : 0U, // STATEPOINT
346 : 0U, // LOCAL_ESCAPE
347 : 0U, // FAULTING_OP
348 : 0U, // PATCHABLE_OP
349 : 0U, // PATCHABLE_FUNCTION_ENTER
350 : 0U, // PATCHABLE_RET
351 : 0U, // PATCHABLE_FUNCTION_EXIT
352 : 0U, // PATCHABLE_TAIL_CALL
353 : 0U, // PATCHABLE_EVENT_CALL
354 : 0U, // PATCHABLE_TYPED_EVENT_CALL
355 : 0U, // ICALL_BRANCH_FUNNEL
356 : 0U, // G_ADD
357 : 0U, // G_SUB
358 : 0U, // G_MUL
359 : 0U, // G_SDIV
360 : 0U, // G_UDIV
361 : 0U, // G_SREM
362 : 0U, // G_UREM
363 : 0U, // G_AND
364 : 0U, // G_OR
365 : 0U, // G_XOR
366 : 0U, // G_IMPLICIT_DEF
367 : 0U, // G_PHI
368 : 0U, // G_FRAME_INDEX
369 : 0U, // G_GLOBAL_VALUE
370 : 0U, // G_EXTRACT
371 : 0U, // G_UNMERGE_VALUES
372 : 0U, // G_INSERT
373 : 0U, // G_MERGE_VALUES
374 : 0U, // G_PTRTOINT
375 : 0U, // G_INTTOPTR
376 : 0U, // G_BITCAST
377 : 0U, // G_INTRINSIC_TRUNC
378 : 0U, // G_INTRINSIC_ROUND
379 : 0U, // G_LOAD
380 : 0U, // G_SEXTLOAD
381 : 0U, // G_ZEXTLOAD
382 : 0U, // G_STORE
383 : 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS
384 : 0U, // G_ATOMIC_CMPXCHG
385 : 0U, // G_ATOMICRMW_XCHG
386 : 0U, // G_ATOMICRMW_ADD
387 : 0U, // G_ATOMICRMW_SUB
388 : 0U, // G_ATOMICRMW_AND
389 : 0U, // G_ATOMICRMW_NAND
390 : 0U, // G_ATOMICRMW_OR
391 : 0U, // G_ATOMICRMW_XOR
392 : 0U, // G_ATOMICRMW_MAX
393 : 0U, // G_ATOMICRMW_MIN
394 : 0U, // G_ATOMICRMW_UMAX
395 : 0U, // G_ATOMICRMW_UMIN
396 : 0U, // G_BRCOND
397 : 0U, // G_BRINDIRECT
398 : 0U, // G_INTRINSIC
399 : 0U, // G_INTRINSIC_W_SIDE_EFFECTS
400 : 0U, // G_ANYEXT
401 : 0U, // G_TRUNC
402 : 0U, // G_CONSTANT
403 : 0U, // G_FCONSTANT
404 : 0U, // G_VASTART
405 : 0U, // G_VAARG
406 : 0U, // G_SEXT
407 : 0U, // G_ZEXT
408 : 0U, // G_SHL
409 : 0U, // G_LSHR
410 : 0U, // G_ASHR
411 : 0U, // G_ICMP
412 : 0U, // G_FCMP
413 : 0U, // G_SELECT
414 : 0U, // G_UADDO
415 : 0U, // G_UADDE
416 : 0U, // G_USUBO
417 : 0U, // G_USUBE
418 : 0U, // G_SADDO
419 : 0U, // G_SADDE
420 : 0U, // G_SSUBO
421 : 0U, // G_SSUBE
422 : 0U, // G_UMULO
423 : 0U, // G_SMULO
424 : 0U, // G_UMULH
425 : 0U, // G_SMULH
426 : 0U, // G_FADD
427 : 0U, // G_FSUB
428 : 0U, // G_FMUL
429 : 0U, // G_FMA
430 : 0U, // G_FDIV
431 : 0U, // G_FREM
432 : 0U, // G_FPOW
433 : 0U, // G_FEXP
434 : 0U, // G_FEXP2
435 : 0U, // G_FLOG
436 : 0U, // G_FLOG2
437 : 0U, // G_FNEG
438 : 0U, // G_FPEXT
439 : 0U, // G_FPTRUNC
440 : 0U, // G_FPTOSI
441 : 0U, // G_FPTOUI
442 : 0U, // G_SITOFP
443 : 0U, // G_UITOFP
444 : 0U, // G_FABS
445 : 0U, // G_GEP
446 : 0U, // G_PTR_MASK
447 : 0U, // G_BR
448 : 0U, // G_INSERT_VECTOR_ELT
449 : 0U, // G_EXTRACT_VECTOR_ELT
450 : 0U, // G_SHUFFLE_VECTOR
451 : 0U, // G_CTTZ
452 : 0U, // G_CTTZ_ZERO_UNDEF
453 : 0U, // G_CTLZ
454 : 0U, // G_CTLZ_ZERO_UNDEF
455 : 0U, // G_CTPOP
456 : 0U, // G_BSWAP
457 : 0U, // G_ADDRSPACE_CAST
458 : 0U, // G_BLOCK_ADDR
459 : 0U, // ADJCALLSTACKDOWN
460 : 0U, // ADJCALLSTACKUP
461 : 0U, // ADJDYNALLOC
462 : 0U, // CALL
463 : 0U, // CALLR
464 : 0U, // ADDC_F_I_HI
465 : 0U, // ADDC_F_I_LO
466 : 0U, // ADDC_F_R
467 : 0U, // ADDC_I_HI
468 : 0U, // ADDC_I_LO
469 : 0U, // ADDC_R
470 : 0U, // ADD_F_I_HI
471 : 0U, // ADD_F_I_LO
472 : 0U, // ADD_F_R
473 : 0U, // ADD_I_HI
474 : 0U, // ADD_I_LO
475 : 0U, // ADD_R
476 : 0U, // AND_F_I_HI
477 : 1U, // AND_F_I_LO
478 : 0U, // AND_F_R
479 : 0U, // AND_I_HI
480 : 1U, // AND_I_LO
481 : 0U, // AND_R
482 : 1U, // BRCC
483 : 1U, // BRIND_CC
484 : 0U, // BRIND_CCA
485 : 1U, // BRR
486 : 1U, // BT
487 : 1U, // JR
488 : 0U, // LDADDR
489 : 0U, // LDBs_RI
490 : 0U, // LDBs_RR
491 : 0U, // LDBz_RI
492 : 0U, // LDBz_RR
493 : 0U, // LDHs_RI
494 : 0U, // LDHs_RR
495 : 0U, // LDHz_RI
496 : 0U, // LDHz_RR
497 : 0U, // LDW_RI
498 : 0U, // LDW_RR
499 : 0U, // LDWz_RR
500 : 2U, // LEADZ
501 : 0U, // LOG0
502 : 0U, // LOG1
503 : 0U, // LOG2
504 : 0U, // LOG3
505 : 0U, // LOG4
506 : 0U, // MOVHI
507 : 0U, // NOP
508 : 0U, // OR_F_I_HI
509 : 0U, // OR_F_I_LO
510 : 0U, // OR_F_R
511 : 0U, // OR_I_HI
512 : 0U, // OR_I_LO
513 : 0U, // OR_R
514 : 2U, // POPC
515 : 0U, // RET
516 : 0U, // SA_F_I
517 : 0U, // SA_I
518 : 1U, // SCC
519 : 0U, // SELECT
520 : 2U, // SFSUB_F_RI_HI
521 : 6U, // SFSUB_F_RI_LO
522 : 6U, // SFSUB_F_RR
523 : 0U, // SHL_F_R
524 : 0U, // SHL_R
525 : 2U, // SLI
526 : 0U, // SL_F_I
527 : 0U, // SL_I
528 : 0U, // SRA_F_R
529 : 0U, // SRA_R
530 : 0U, // SRL_F_R
531 : 0U, // SRL_R
532 : 10U, // STADDR
533 : 14U, // STB_RI
534 : 18U, // STB_RR
535 : 14U, // STH_RI
536 : 18U, // STH_RR
537 : 0U, // SUBB_F_I_HI
538 : 0U, // SUBB_F_I_LO
539 : 0U, // SUBB_F_R
540 : 0U, // SUBB_I_HI
541 : 0U, // SUBB_I_LO
542 : 0U, // SUBB_R
543 : 0U, // SUB_F_I_HI
544 : 0U, // SUB_F_I_LO
545 : 0U, // SUB_F_R
546 : 0U, // SUB_I_HI
547 : 0U, // SUB_I_LO
548 : 0U, // SUB_R
549 : 22U, // SW_RI
550 : 18U, // SW_RR
551 : 2U, // TRAILZ
552 : 0U, // XOR_F_I_HI
553 : 0U, // XOR_F_I_LO
554 : 0U, // XOR_F_R
555 : 0U, // XOR_I_HI
556 : 0U, // XOR_I_LO
557 : 0U, // XOR_R
558 : };
559 :
560 1389 : O << "\t";
561 :
562 : // Emit the opcode for the instruction.
563 : uint32_t Bits = 0;
564 1389 : Bits |= OpInfo0[MI->getOpcode()] << 0;
565 1389 : Bits |= OpInfo1[MI->getOpcode()] << 16;
566 : assert(Bits != 0 && "Cannot print this instruction.");
567 1389 : O << AsmStrs+(Bits & 1023)-1;
568 :
569 :
570 : // Fragment 0 encoded into 4 bits for 12 unique commands.
571 1389 : switch ((Bits >> 10) & 15) {
572 0 : default: llvm_unreachable("Invalid command number.");
573 : case 0:
574 : // DBG_VALUE, DBG_LABEL, BUNDLE, LIFETIME_START, LIFETIME_END, FENTRY_CAL...
575 : return;
576 : break;
577 350 : case 1:
578 : // ADJCALLSTACKDOWN, ADJCALLSTACKUP, ADJDYNALLOC, BT, JR, SFSUB_F_RI_HI, ...
579 350 : printOperand(MI, 0, O);
580 350 : break;
581 464 : case 2:
582 : // ADDC_F_I_HI, ADDC_F_I_LO, ADDC_I_HI, ADDC_I_LO, ADD_F_I_HI, ADD_F_I_LO...
583 464 : printOperand(MI, 1, O);
584 464 : O << ", ";
585 464 : break;
586 96 : case 3:
587 : // ADDC_F_R, ADDC_R, ADD_F_R, ADD_R, AND_F_R, AND_R, OR_F_R, OR_R, SHL_F_...
588 96 : printPredicateOperand(MI, 3, O);
589 96 : O << "\t";
590 96 : printOperand(MI, 1, O);
591 96 : O << ", ";
592 96 : printOperand(MI, 2, O);
593 96 : O << ", ";
594 96 : printOperand(MI, 0, O);
595 96 : return;
596 : break;
597 155 : case 4:
598 : // BRCC, BRIND_CC, BRR, SCC
599 155 : printCCOperand(MI, 1, O);
600 155 : break;
601 0 : case 5:
602 : // BRIND_CCA
603 0 : printCCOperand(MI, 2, O);
604 0 : O << "\t";
605 0 : printOperand(MI, 0, O);
606 0 : O << " add ";
607 0 : printOperand(MI, 1, O);
608 0 : return;
609 : break;
610 5 : case 6:
611 : // LDADDR
612 5 : printMemImmOperand(MI, 1, O);
613 5 : O << ", ";
614 5 : printOperand(MI, 0, O);
615 5 : return;
616 : break;
617 98 : case 7:
618 : // LDBs_RI, LDBz_RI, LDHs_RI, LDHz_RI
619 98 : printMemSplsOperand(MI, 1, O);
620 98 : O << ", ";
621 98 : printOperand(MI, 0, O);
622 98 : return;
623 : break;
624 70 : case 8:
625 : // LDBs_RR, LDBz_RR, LDHs_RR, LDHz_RR, LDW_RR, LDWz_RR
626 70 : printMemRrOperand(MI, 1, O);
627 70 : O << ", ";
628 70 : printOperand(MI, 0, O);
629 70 : return;
630 : break;
631 0 : case 9:
632 : // LDW_RI
633 0 : printMemRiOperand(MI, 1, O);
634 0 : O << ", ";
635 0 : printOperand(MI, 0, O);
636 0 : return;
637 : break;
638 9 : case 10:
639 : // MOVHI
640 9 : printHi16ImmOperand(MI, 1, O);
641 9 : O << ", ";
642 9 : printOperand(MI, 0, O);
643 9 : return;
644 : break;
645 40 : case 11:
646 : // SELECT
647 40 : printCCOperand(MI, 3, O);
648 : O << ' ';
649 40 : printOperand(MI, 1, O);
650 40 : O << ", ";
651 40 : printOperand(MI, 2, O);
652 40 : O << ", ";
653 40 : printOperand(MI, 0, O);
654 40 : return;
655 : break;
656 : }
657 :
658 :
659 : // Fragment 1 encoded into 4 bits for 10 unique commands.
660 969 : switch ((Bits >> 14) & 15) {
661 0 : default: llvm_unreachable("Invalid command number.");
662 : case 0:
663 : // ADJCALLSTACKDOWN, ADJCALLSTACKUP, ADJDYNALLOC
664 : O << ' ';
665 0 : printOperand(MI, 1, O);
666 0 : return;
667 : break;
668 24 : case 1:
669 : // ADDC_F_I_HI, ADDC_I_HI, ADD_F_I_HI, ADD_I_HI, OR_F_I_HI, OR_I_HI, SUBB...
670 24 : printHi16ImmOperand(MI, 2, O);
671 24 : O << ", ";
672 24 : printOperand(MI, 0, O);
673 24 : return;
674 : break;
675 413 : case 2:
676 : // ADDC_F_I_LO, ADDC_I_LO, ADD_F_I_LO, ADD_I_LO, OR_F_I_LO, OR_I_LO, SA_F...
677 413 : printOperand(MI, 2, O);
678 413 : O << ", ";
679 413 : printOperand(MI, 0, O);
680 413 : return;
681 : break;
682 4 : case 3:
683 : // AND_F_I_HI, AND_I_HI
684 4 : printHi16AndImmOperand(MI, 2, O);
685 4 : O << ", ";
686 4 : printOperand(MI, 0, O);
687 4 : return;
688 : break;
689 4 : case 4:
690 : // AND_F_I_LO, AND_I_LO
691 4 : printLo16AndImmOperand(MI, 2, O);
692 4 : O << ", ";
693 4 : printOperand(MI, 0, O);
694 4 : return;
695 : break;
696 120 : case 5:
697 : // BRCC, BRIND_CC, SCC
698 120 : O << "\t";
699 120 : printOperand(MI, 0, O);
700 120 : return;
701 : break;
702 35 : case 6:
703 : // BRR
704 35 : O << ".r\t";
705 35 : printOperand(MI, 0, O);
706 35 : return;
707 : break;
708 : case 7:
709 : // BT, JR
710 : return;
711 : break;
712 19 : case 8:
713 : // LEADZ, POPC, SLI, TRAILZ
714 19 : printOperand(MI, 0, O);
715 19 : return;
716 : break;
717 323 : case 9:
718 : // SFSUB_F_RI_HI, SFSUB_F_RI_LO, SFSUB_F_RR, STADDR, STB_RI, STB_RR, STH_...
719 323 : O << ", ";
720 : break;
721 : }
722 :
723 :
724 : // Fragment 2 encoded into 3 bits for 6 unique commands.
725 323 : switch ((Bits >> 18) & 7) {
726 0 : default: llvm_unreachable("Invalid command number.");
727 0 : case 0:
728 : // SFSUB_F_RI_HI
729 0 : printHi16ImmOperand(MI, 1, O);
730 0 : O << ", %r0";
731 0 : return;
732 : break;
733 59 : case 1:
734 : // SFSUB_F_RI_LO, SFSUB_F_RR
735 59 : printOperand(MI, 1, O);
736 59 : O << ", %r0";
737 59 : return;
738 : break;
739 3 : case 2:
740 : // STADDR
741 3 : printMemImmOperand(MI, 1, O);
742 3 : return;
743 : break;
744 52 : case 3:
745 : // STB_RI, STH_RI
746 52 : printMemSplsOperand(MI, 1, O);
747 52 : return;
748 : break;
749 175 : case 4:
750 : // STB_RR, STH_RR, SW_RR
751 175 : printMemRrOperand(MI, 1, O);
752 175 : return;
753 : break;
754 34 : case 5:
755 : // SW_RI
756 34 : printMemRiOperand(MI, 1, O);
757 34 : return;
758 : break;
759 : }
760 :
761 : }
762 :
763 :
764 : /// getRegisterName - This method is automatically generated by tblgen
765 : /// from the register set description. This returns the assembler name
766 : /// for the specified register.
767 3389 : const char *LanaiInstPrinter::getRegisterName(unsigned RegNo) {
768 : assert(RegNo && RegNo < 41 && "Invalid register number!");
769 :
770 : static const char AsmStrs[] = {
771 : /* 0 */ 'r', '1', '0', 0,
772 : /* 4 */ 'r', '2', '0', 0,
773 : /* 8 */ 'r', '3', '0', 0,
774 : /* 12 */ 'r', '0', 0,
775 : /* 15 */ 'r', '1', '1', 0,
776 : /* 19 */ 'r', '2', '1', 0,
777 : /* 23 */ 'r', '3', '1', 0,
778 : /* 27 */ 'r', 'r', '1', 0,
779 : /* 31 */ 'r', '1', '2', 0,
780 : /* 35 */ 'r', '2', '2', 0,
781 : /* 39 */ 'r', 'r', '2', 0,
782 : /* 43 */ 'r', '1', '3', 0,
783 : /* 47 */ 'r', '2', '3', 0,
784 : /* 51 */ 'r', '3', 0,
785 : /* 54 */ 'r', '1', '4', 0,
786 : /* 58 */ 'r', '2', '4', 0,
787 : /* 62 */ 'r', '4', 0,
788 : /* 65 */ 'r', '1', '5', 0,
789 : /* 69 */ 'r', '2', '5', 0,
790 : /* 73 */ 'r', '5', 0,
791 : /* 76 */ 'r', '1', '6', 0,
792 : /* 80 */ 'r', '2', '6', 0,
793 : /* 84 */ 'r', '6', 0,
794 : /* 87 */ 'r', '1', '7', 0,
795 : /* 91 */ 'r', '2', '7', 0,
796 : /* 95 */ 'r', '7', 0,
797 : /* 98 */ 'r', '1', '8', 0,
798 : /* 102 */ 'r', '2', '8', 0,
799 : /* 106 */ 'r', '8', 0,
800 : /* 109 */ 'r', '1', '9', 0,
801 : /* 113 */ 'r', '2', '9', 0,
802 : /* 117 */ 'r', '9', 0,
803 : /* 120 */ 'r', 'c', 'a', 0,
804 : /* 124 */ 'p', 'c', 0,
805 : /* 127 */ 'f', 'p', 0,
806 : /* 130 */ 's', 'p', 0,
807 : /* 133 */ 'r', 'v', 0,
808 : /* 136 */ 's', 'w', 0,
809 : };
810 :
811 : static const uint8_t RegAsmOffset[] = {
812 : 127, 124, 120, 133, 130, 136, 12, 28, 40, 51, 62, 73, 84, 95,
813 : 106, 117, 0, 15, 31, 43, 54, 65, 76, 87, 98, 109, 4, 19,
814 : 35, 47, 58, 69, 80, 91, 102, 113, 8, 23, 27, 39,
815 : };
816 :
817 : assert (*(AsmStrs+RegAsmOffset[RegNo-1]) &&
818 : "Invalid alt name index for register!");
819 3389 : return AsmStrs+RegAsmOffset[RegNo-1];
820 : }
821 :
822 : #ifdef PRINT_ALIAS_INSTR
823 : #undef PRINT_ALIAS_INSTR
824 :
825 1608 : bool LanaiInstPrinter::printAliasInstr(const MCInst *MI, raw_ostream &OS) {
826 : const char *AsmString;
827 1608 : switch (MI->getOpcode()) {
828 : default: return false;
829 : case Lanai::ADD_I_HI:
830 8 : if (MI->getNumOperands() == 3 &&
831 16 : MI->getOperand(0).isReg() &&
832 16 : MRI.getRegClass(Lanai::GPRRegClassID).contains(MI->getOperand(0).getReg()) &&
833 8 : MI->getOperand(1).getReg() == Lanai::R0) {
834 : // (ADD_I_HI GPR:$dst, R0, i32hi16:$imm16)
835 : AsmString = "mov $\xFF\x03\x01, $\x01";
836 : break;
837 : }
838 : return false;
839 : case Lanai::ADD_I_LO:
840 199 : if (MI->getNumOperands() == 3 &&
841 398 : MI->getOperand(0).isReg() &&
842 398 : MRI.getRegClass(Lanai::GPRRegClassID).contains(MI->getOperand(0).getReg()) &&
843 199 : MI->getOperand(1).getReg() == Lanai::R0) {
844 : // (ADD_I_LO GPR:$dst, R0, i32lo16z:$imm16)
845 : AsmString = "mov $\x03, $\x01";
846 : break;
847 : }
848 : return false;
849 : case Lanai::ADD_R:
850 12 : if (MI->getNumOperands() == 4 &&
851 24 : MI->getOperand(0).isReg() &&
852 12 : MRI.getRegClass(Lanai::GPRRegClassID).contains(MI->getOperand(0).getReg()) &&
853 24 : MI->getOperand(1).isReg() &&
854 12 : MRI.getRegClass(Lanai::GPRRegClassID).contains(MI->getOperand(1).getReg()) &&
855 12 : MI->getOperand(2).getReg() == Lanai::R0 &&
856 14 : MI->getOperand(3).isImm() &&
857 2 : MI->getOperand(3).getImm() == 0) {
858 : // (ADD_R GPR:$dst, GPR:$src, R0, 0)
859 : AsmString = "mov $\x02, $\x01";
860 : break;
861 : }
862 : return false;
863 : case Lanai::AND_I_HI:
864 4 : if (MI->getNumOperands() == 3 &&
865 8 : MI->getOperand(0).isReg() &&
866 8 : MRI.getRegClass(Lanai::GPRRegClassID).contains(MI->getOperand(0).getReg()) &&
867 4 : MI->getOperand(1).getReg() == Lanai::R1) {
868 : // (AND_I_HI GPR:$dst, R1, i32hi16and:$imm16)
869 : AsmString = "mov $\xFF\x03\x02, $\x01";
870 : break;
871 : }
872 : return false;
873 : case Lanai::AND_I_LO:
874 5 : if (MI->getNumOperands() == 3 &&
875 10 : MI->getOperand(0).isReg() &&
876 10 : MRI.getRegClass(Lanai::GPRRegClassID).contains(MI->getOperand(0).getReg()) &&
877 5 : MI->getOperand(1).getReg() == Lanai::R1) {
878 : // (AND_I_LO GPR:$dst, R1, i32lo16and:$imm16)
879 : AsmString = "mov $\xFF\x03\x03, $\x01";
880 : break;
881 : }
882 : return false;
883 : case Lanai::LDW_RI:
884 202 : if (MI->getNumOperands() == 4 &&
885 404 : MI->getOperand(0).isReg() &&
886 202 : MRI.getRegClass(Lanai::GPRRegClassID).contains(MI->getOperand(0).getReg())) {
887 : // (LDW_RI GPR:$dst, MEMri:$src)
888 : AsmString = "ld $\xFF\x02\x04, $\x01";
889 : break;
890 : }
891 : return false;
892 : }
893 :
894 : unsigned I = 0;
895 455 : while (AsmString[I] != ' ' && AsmString[I] != '\t' &&
896 1129 : AsmString[I] != '$' && AsmString[I] != '\0')
897 455 : ++I;
898 219 : OS << '\t' << StringRef(AsmString, I);
899 219 : if (AsmString[I] != '\0') {
900 219 : if (AsmString[I] == ' ' || AsmString[I] == '\t') {
901 : OS << '\t';
902 219 : ++I;
903 : }
904 : do {
905 876 : if (AsmString[I] == '$') {
906 438 : ++I;
907 438 : if (AsmString[I] == (char)0xff) {
908 213 : ++I;
909 213 : int OpIdx = AsmString[I++] - 1;
910 213 : int PrintMethodIdx = AsmString[I++] - 1;
911 213 : printCustomAliasOperand(MI, OpIdx, PrintMethodIdx, OS);
912 : } else
913 225 : printOperand(MI, unsigned(AsmString[I++]) - 1, OS);
914 : } else {
915 438 : OS << AsmString[I++];
916 : }
917 876 : } while (AsmString[I] != '\0');
918 : }
919 :
920 : return true;
921 : }
922 :
923 213 : void LanaiInstPrinter::printCustomAliasOperand(
924 : const MCInst *MI, unsigned OpIdx,
925 : unsigned PrintMethodIdx,
926 : raw_ostream &OS) {
927 213 : switch (PrintMethodIdx) {
928 0 : default:
929 0 : llvm_unreachable("Unknown PrintMethod kind");
930 : break;
931 6 : case 0:
932 6 : printHi16ImmOperand(MI, OpIdx, OS);
933 6 : break;
934 2 : case 1:
935 2 : printHi16AndImmOperand(MI, OpIdx, OS);
936 2 : break;
937 3 : case 2:
938 3 : printLo16AndImmOperand(MI, OpIdx, OS);
939 3 : break;
940 202 : case 3:
941 202 : printMemRiOperand(MI, OpIdx, OS);
942 202 : break;
943 : }
944 213 : }
945 :
946 : #endif // PRINT_ALIAS_INSTR
|