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 1907 : void BPFInstPrinter::printInstruction(const MCInst *MI, raw_ostream &O) {
12 : static const char AsmStrs[] = {
13 : /* 0 */ 'l', 'e', 'a', 9, 0,
14 : /* 5 */ 'l', 'd', '_', 'p', 's', 'e', 'u', 'd', 'o', 9, 0,
15 : /* 16 */ 'n', 'o', 'p', 9, 0,
16 : /* 21 */ '#', 'm', 'e', 'm', 'c', 'p', 'y', 32, 'd', 's', 't', ':', 32, 0,
17 : /* 35 */ '#', 'A', 'D', 'J', 'C', 'A', 'L', 'L', 'S', 'T', 'A', 'C', 'K', 'D', 'O', 'W', 'N', 32, 0,
18 : /* 54 */ '#', 32, 'S', 'e', 'l', 'e', 'c', 't', 32, 'P', 'S', 'E', 'U', 'D', 'O', 32, 0,
19 : /* 71 */ '#', 'A', 'D', 'J', 'C', 'A', 'L', 'L', 'S', 'T', 'A', 'C', 'K', 'U', 'P', 32, 0,
20 : /* 88 */ 'i', 'f', 32, 0,
21 : /* 92 */ 'c', 'a', 'l', 'l', 32, 0,
22 : /* 98 */ 'g', 'o', 't', 'o', 32, 0,
23 : /* 104 */ 'c', 'a', 'l', 'l', 'x', 32, 0,
24 : /* 111 */ 'l', 'o', 'c', 'k', 32, '*', '(', 'u', '3', '2', 32, '*', ')', '(', 0,
25 : /* 126 */ 'l', 'o', 'c', 'k', 32, '*', '(', 'u', '6', '4', 32, '*', ')', '(', 0,
26 : /* 141 */ '*', '(', 'u', '1', '6', 32, '*', ')', '(', 0,
27 : /* 151 */ '*', '(', 'u', '8', 32, '*', ')', '(', 0,
28 : /* 160 */ '#', 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,
29 : /* 191 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'T', 'y', 'p', 'e', 'd', 32, 'E', 'v', 'e', 'n', 't', 32, 'L', 'o', 'g', '.', 0,
30 : /* 215 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'C', 'u', 's', 't', 'o', 'm', 32, 'E', 'v', 'e', 'n', 't', 32, 'L', 'o', 'g', '.', 0,
31 : /* 240 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', 32, 'E', 'n', 't', 'e', 'r', '.', 0,
32 : /* 263 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'T', 'a', 'i', 'l', 32, 'C', 'a', 'l', 'l', 32, 'E', 'x', 'i', 't', '.', 0,
33 : /* 286 */ '#', 32, 'X', 'R', 'a', 'y', 32, 'F', 'u', 'n', 'c', 't', 'i', 'o', 'n', 32, 'E', 'x', 'i', 't', '.', 0,
34 : /* 308 */ 'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'E', 'N', 'D', 0,
35 : /* 321 */ 'B', 'U', 'N', 'D', 'L', 'E', 0,
36 : /* 328 */ 'D', 'B', 'G', '_', 'V', 'A', 'L', 'U', 'E', 0,
37 : /* 338 */ 'D', 'B', 'G', '_', 'L', 'A', 'B', 'E', 'L', 0,
38 : /* 348 */ 'L', 'I', 'F', 'E', 'T', 'I', 'M', 'E', '_', 'S', 'T', 'A', 'R', 'T', 0,
39 : /* 363 */ 'r', '0', 32, '=', 32, '*', '(', 'u', '3', '2', 32, '*', ')', 's', 'k', 'b', '[', 0,
40 : /* 381 */ 'r', '0', 32, '=', 32, '*', '(', 'u', '1', '6', 32, '*', ')', 's', 'k', 'b', '[', 0,
41 : /* 399 */ 'r', '0', 32, '=', 32, '*', '(', 'u', '8', 32, '*', ')', 's', 'k', 'b', '[', 0,
42 : /* 416 */ '#', 32, 'F', 'E', 'n', 't', 'r', 'y', 32, 'c', 'a', 'l', 'l', 0,
43 : /* 430 */ 'e', 'x', 'i', 't', 0,
44 : };
45 :
46 : static const uint16_t OpInfo0[] = {
47 : 0U, // PHI
48 : 0U, // INLINEASM
49 : 0U, // CFI_INSTRUCTION
50 : 0U, // EH_LABEL
51 : 0U, // GC_LABEL
52 : 0U, // ANNOTATION_LABEL
53 : 0U, // KILL
54 : 0U, // EXTRACT_SUBREG
55 : 0U, // INSERT_SUBREG
56 : 0U, // IMPLICIT_DEF
57 : 0U, // SUBREG_TO_REG
58 : 0U, // COPY_TO_REGCLASS
59 : 329U, // DBG_VALUE
60 : 339U, // DBG_LABEL
61 : 0U, // REG_SEQUENCE
62 : 0U, // COPY
63 : 322U, // BUNDLE
64 : 349U, // LIFETIME_START
65 : 309U, // LIFETIME_END
66 : 0U, // STACKMAP
67 : 417U, // FENTRY_CALL
68 : 0U, // PATCHPOINT
69 : 0U, // LOAD_STACK_GUARD
70 : 0U, // STATEPOINT
71 : 0U, // LOCAL_ESCAPE
72 : 0U, // FAULTING_OP
73 : 0U, // PATCHABLE_OP
74 : 241U, // PATCHABLE_FUNCTION_ENTER
75 : 161U, // PATCHABLE_RET
76 : 287U, // PATCHABLE_FUNCTION_EXIT
77 : 264U, // PATCHABLE_TAIL_CALL
78 : 216U, // PATCHABLE_EVENT_CALL
79 : 192U, // PATCHABLE_TYPED_EVENT_CALL
80 : 0U, // ICALL_BRANCH_FUNNEL
81 : 0U, // G_ADD
82 : 0U, // G_SUB
83 : 0U, // G_MUL
84 : 0U, // G_SDIV
85 : 0U, // G_UDIV
86 : 0U, // G_SREM
87 : 0U, // G_UREM
88 : 0U, // G_AND
89 : 0U, // G_OR
90 : 0U, // G_XOR
91 : 0U, // G_IMPLICIT_DEF
92 : 0U, // G_PHI
93 : 0U, // G_FRAME_INDEX
94 : 0U, // G_GLOBAL_VALUE
95 : 0U, // G_EXTRACT
96 : 0U, // G_UNMERGE_VALUES
97 : 0U, // G_INSERT
98 : 0U, // G_MERGE_VALUES
99 : 0U, // G_PTRTOINT
100 : 0U, // G_INTTOPTR
101 : 0U, // G_BITCAST
102 : 0U, // G_INTRINSIC_TRUNC
103 : 0U, // G_INTRINSIC_ROUND
104 : 0U, // G_LOAD
105 : 0U, // G_SEXTLOAD
106 : 0U, // G_ZEXTLOAD
107 : 0U, // G_STORE
108 : 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS
109 : 0U, // G_ATOMIC_CMPXCHG
110 : 0U, // G_ATOMICRMW_XCHG
111 : 0U, // G_ATOMICRMW_ADD
112 : 0U, // G_ATOMICRMW_SUB
113 : 0U, // G_ATOMICRMW_AND
114 : 0U, // G_ATOMICRMW_NAND
115 : 0U, // G_ATOMICRMW_OR
116 : 0U, // G_ATOMICRMW_XOR
117 : 0U, // G_ATOMICRMW_MAX
118 : 0U, // G_ATOMICRMW_MIN
119 : 0U, // G_ATOMICRMW_UMAX
120 : 0U, // G_ATOMICRMW_UMIN
121 : 0U, // G_BRCOND
122 : 0U, // G_BRINDIRECT
123 : 0U, // G_INTRINSIC
124 : 0U, // G_INTRINSIC_W_SIDE_EFFECTS
125 : 0U, // G_ANYEXT
126 : 0U, // G_TRUNC
127 : 0U, // G_CONSTANT
128 : 0U, // G_FCONSTANT
129 : 0U, // G_VASTART
130 : 0U, // G_VAARG
131 : 0U, // G_SEXT
132 : 0U, // G_ZEXT
133 : 0U, // G_SHL
134 : 0U, // G_LSHR
135 : 0U, // G_ASHR
136 : 0U, // G_ICMP
137 : 0U, // G_FCMP
138 : 0U, // G_SELECT
139 : 0U, // G_UADDO
140 : 0U, // G_UADDE
141 : 0U, // G_USUBO
142 : 0U, // G_USUBE
143 : 0U, // G_SADDO
144 : 0U, // G_SADDE
145 : 0U, // G_SSUBO
146 : 0U, // G_SSUBE
147 : 0U, // G_UMULO
148 : 0U, // G_SMULO
149 : 0U, // G_UMULH
150 : 0U, // G_SMULH
151 : 0U, // G_FADD
152 : 0U, // G_FSUB
153 : 0U, // G_FMUL
154 : 0U, // G_FMA
155 : 0U, // G_FDIV
156 : 0U, // G_FREM
157 : 0U, // G_FPOW
158 : 0U, // G_FEXP
159 : 0U, // G_FEXP2
160 : 0U, // G_FLOG
161 : 0U, // G_FLOG2
162 : 0U, // G_FNEG
163 : 0U, // G_FPEXT
164 : 0U, // G_FPTRUNC
165 : 0U, // G_FPTOSI
166 : 0U, // G_FPTOUI
167 : 0U, // G_SITOFP
168 : 0U, // G_UITOFP
169 : 0U, // G_FABS
170 : 0U, // G_GEP
171 : 0U, // G_PTR_MASK
172 : 0U, // G_BR
173 : 0U, // G_INSERT_VECTOR_ELT
174 : 0U, // G_EXTRACT_VECTOR_ELT
175 : 0U, // G_SHUFFLE_VECTOR
176 : 0U, // G_CTTZ
177 : 0U, // G_CTTZ_ZERO_UNDEF
178 : 0U, // G_CTLZ
179 : 0U, // G_CTLZ_ZERO_UNDEF
180 : 0U, // G_CTPOP
181 : 0U, // G_BSWAP
182 : 0U, // G_ADDRSPACE_CAST
183 : 0U, // G_BLOCK_ADDR
184 : 548U, // ADJCALLSTACKDOWN
185 : 584U, // ADJCALLSTACKUP
186 : 4630U, // MEMCPY
187 : 8759U, // Select
188 : 8759U, // Select_32
189 : 8759U, // Select_32_64
190 : 8759U, // Select_64_32
191 : 8759U, // Select_Ri
192 : 8759U, // Select_Ri_32
193 : 8759U, // Select_Ri_32_64
194 : 8759U, // Select_Ri_64_32
195 : 12805U, // ADD_ri
196 : 12805U, // ADD_ri_32
197 : 12805U, // ADD_rr
198 : 12805U, // ADD_rr_32
199 : 16901U, // AND_ri
200 : 16901U, // AND_ri_32
201 : 16901U, // AND_rr
202 : 16901U, // AND_rr_32
203 : 20997U, // BE16
204 : 25093U, // BE32
205 : 29189U, // BE64
206 : 33285U, // DIV_ri
207 : 33285U, // DIV_ri_32
208 : 33285U, // DIV_rr
209 : 33285U, // DIV_rr_32
210 : 37377U, // FI_ri
211 : 41565U, // JAL
212 : 41577U, // JALX
213 : 45657U, // JEQ_ri
214 : 45657U, // JEQ_rr
215 : 1123U, // JMP
216 : 49753U, // JNE_ri
217 : 49753U, // JNE_rr
218 : 53849U, // JSGE_ri
219 : 53849U, // JSGE_rr
220 : 57945U, // JSGT_ri
221 : 57945U, // JSGT_rr
222 : 62041U, // JSLE_ri
223 : 62041U, // JSLE_rr
224 : 601U, // JSLT_ri
225 : 601U, // JSLT_rr
226 : 4697U, // JUGE_ri
227 : 4697U, // JUGE_rr
228 : 8793U, // JUGT_ri
229 : 8793U, // JUGT_rr
230 : 12889U, // JULE_ri
231 : 12889U, // JULE_rr
232 : 16985U, // JULT_ri
233 : 16985U, // JULT_rr
234 : 20997U, // LDB
235 : 20997U, // LDB32
236 : 25093U, // LDD
237 : 29189U, // LDH
238 : 29189U, // LDH32
239 : 33285U, // LDW
240 : 33285U, // LDW32
241 : 1936U, // LD_ABS_B
242 : 1918U, // LD_ABS_H
243 : 1900U, // LD_ABS_W
244 : 1936U, // LD_IND_B
245 : 1918U, // LD_IND_H
246 : 1900U, // LD_IND_W
247 : 8709U, // LD_imm64
248 : 37382U, // LD_pseudo
249 : 37381U, // LE16
250 : 41477U, // LE32
251 : 45573U, // LE64
252 : 8709U, // MOV_32_64
253 : 8709U, // MOV_ri
254 : 8709U, // MOV_ri_32
255 : 8709U, // MOV_rr
256 : 8709U, // MOV_rr_32
257 : 49669U, // MUL_ri
258 : 49669U, // MUL_ri_32
259 : 49669U, // MUL_rr
260 : 49669U, // MUL_rr_32
261 : 53765U, // NEG_32
262 : 53765U, // NEG_64
263 : 41489U, // NOP
264 : 57861U, // OR_ri
265 : 57861U, // OR_ri_32
266 : 57861U, // OR_rr
267 : 57861U, // OR_rr_32
268 : 431U, // RET
269 : 61957U, // SLL_ri
270 : 61957U, // SLL_ri_32
271 : 61957U, // SLL_rr
272 : 61957U, // SLL_rr_32
273 : 517U, // SRA_ri
274 : 517U, // SRA_ri_32
275 : 517U, // SRA_rr
276 : 517U, // SRA_rr_32
277 : 4613U, // SRL_ri
278 : 4613U, // SRL_ri_32
279 : 4613U, // SRL_rr
280 : 4613U, // SRL_rr_32
281 : 10392U, // STB
282 : 10392U, // STB32
283 : 10372U, // STD
284 : 10382U, // STH
285 : 10382U, // STH32
286 : 10357U, // STW
287 : 10357U, // STW32
288 : 12805U, // SUB_ri
289 : 12805U, // SUB_ri_32
290 : 12805U, // SUB_rr
291 : 12805U, // SUB_rr_32
292 : 18544U, // XADD32
293 : 18559U, // XADD64
294 : 20997U, // XOR_ri
295 : 20997U, // XOR_ri_32
296 : 20997U, // XOR_rr
297 : 20997U, // XOR_rr_32
298 : };
299 :
300 : static const uint8_t OpInfo1[] = {
301 : 0U, // PHI
302 : 0U, // INLINEASM
303 : 0U, // CFI_INSTRUCTION
304 : 0U, // EH_LABEL
305 : 0U, // GC_LABEL
306 : 0U, // ANNOTATION_LABEL
307 : 0U, // KILL
308 : 0U, // EXTRACT_SUBREG
309 : 0U, // INSERT_SUBREG
310 : 0U, // IMPLICIT_DEF
311 : 0U, // SUBREG_TO_REG
312 : 0U, // COPY_TO_REGCLASS
313 : 0U, // DBG_VALUE
314 : 0U, // DBG_LABEL
315 : 0U, // REG_SEQUENCE
316 : 0U, // COPY
317 : 0U, // BUNDLE
318 : 0U, // LIFETIME_START
319 : 0U, // LIFETIME_END
320 : 0U, // STACKMAP
321 : 0U, // FENTRY_CALL
322 : 0U, // PATCHPOINT
323 : 0U, // LOAD_STACK_GUARD
324 : 0U, // STATEPOINT
325 : 0U, // LOCAL_ESCAPE
326 : 0U, // FAULTING_OP
327 : 0U, // PATCHABLE_OP
328 : 0U, // PATCHABLE_FUNCTION_ENTER
329 : 0U, // PATCHABLE_RET
330 : 0U, // PATCHABLE_FUNCTION_EXIT
331 : 0U, // PATCHABLE_TAIL_CALL
332 : 0U, // PATCHABLE_EVENT_CALL
333 : 0U, // PATCHABLE_TYPED_EVENT_CALL
334 : 0U, // ICALL_BRANCH_FUNNEL
335 : 0U, // G_ADD
336 : 0U, // G_SUB
337 : 0U, // G_MUL
338 : 0U, // G_SDIV
339 : 0U, // G_UDIV
340 : 0U, // G_SREM
341 : 0U, // G_UREM
342 : 0U, // G_AND
343 : 0U, // G_OR
344 : 0U, // G_XOR
345 : 0U, // G_IMPLICIT_DEF
346 : 0U, // G_PHI
347 : 0U, // G_FRAME_INDEX
348 : 0U, // G_GLOBAL_VALUE
349 : 0U, // G_EXTRACT
350 : 0U, // G_UNMERGE_VALUES
351 : 0U, // G_INSERT
352 : 0U, // G_MERGE_VALUES
353 : 0U, // G_PTRTOINT
354 : 0U, // G_INTTOPTR
355 : 0U, // G_BITCAST
356 : 0U, // G_INTRINSIC_TRUNC
357 : 0U, // G_INTRINSIC_ROUND
358 : 0U, // G_LOAD
359 : 0U, // G_SEXTLOAD
360 : 0U, // G_ZEXTLOAD
361 : 0U, // G_STORE
362 : 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS
363 : 0U, // G_ATOMIC_CMPXCHG
364 : 0U, // G_ATOMICRMW_XCHG
365 : 0U, // G_ATOMICRMW_ADD
366 : 0U, // G_ATOMICRMW_SUB
367 : 0U, // G_ATOMICRMW_AND
368 : 0U, // G_ATOMICRMW_NAND
369 : 0U, // G_ATOMICRMW_OR
370 : 0U, // G_ATOMICRMW_XOR
371 : 0U, // G_ATOMICRMW_MAX
372 : 0U, // G_ATOMICRMW_MIN
373 : 0U, // G_ATOMICRMW_UMAX
374 : 0U, // G_ATOMICRMW_UMIN
375 : 0U, // G_BRCOND
376 : 0U, // G_BRINDIRECT
377 : 0U, // G_INTRINSIC
378 : 0U, // G_INTRINSIC_W_SIDE_EFFECTS
379 : 0U, // G_ANYEXT
380 : 0U, // G_TRUNC
381 : 0U, // G_CONSTANT
382 : 0U, // G_FCONSTANT
383 : 0U, // G_VASTART
384 : 0U, // G_VAARG
385 : 0U, // G_SEXT
386 : 0U, // G_ZEXT
387 : 0U, // G_SHL
388 : 0U, // G_LSHR
389 : 0U, // G_ASHR
390 : 0U, // G_ICMP
391 : 0U, // G_FCMP
392 : 0U, // G_SELECT
393 : 0U, // G_UADDO
394 : 0U, // G_UADDE
395 : 0U, // G_USUBO
396 : 0U, // G_USUBE
397 : 0U, // G_SADDO
398 : 0U, // G_SADDE
399 : 0U, // G_SSUBO
400 : 0U, // G_SSUBE
401 : 0U, // G_UMULO
402 : 0U, // G_SMULO
403 : 0U, // G_UMULH
404 : 0U, // G_SMULH
405 : 0U, // G_FADD
406 : 0U, // G_FSUB
407 : 0U, // G_FMUL
408 : 0U, // G_FMA
409 : 0U, // G_FDIV
410 : 0U, // G_FREM
411 : 0U, // G_FPOW
412 : 0U, // G_FEXP
413 : 0U, // G_FEXP2
414 : 0U, // G_FLOG
415 : 0U, // G_FLOG2
416 : 0U, // G_FNEG
417 : 0U, // G_FPEXT
418 : 0U, // G_FPTRUNC
419 : 0U, // G_FPTOSI
420 : 0U, // G_FPTOUI
421 : 0U, // G_SITOFP
422 : 0U, // G_UITOFP
423 : 0U, // G_FABS
424 : 0U, // G_GEP
425 : 0U, // G_PTR_MASK
426 : 0U, // G_BR
427 : 0U, // G_INSERT_VECTOR_ELT
428 : 0U, // G_EXTRACT_VECTOR_ELT
429 : 0U, // G_SHUFFLE_VECTOR
430 : 0U, // G_CTTZ
431 : 0U, // G_CTTZ_ZERO_UNDEF
432 : 0U, // G_CTLZ
433 : 0U, // G_CTLZ_ZERO_UNDEF
434 : 0U, // G_CTPOP
435 : 0U, // G_BSWAP
436 : 0U, // G_ADDRSPACE_CAST
437 : 0U, // G_BLOCK_ADDR
438 : 0U, // ADJCALLSTACKDOWN
439 : 0U, // ADJCALLSTACKUP
440 : 0U, // MEMCPY
441 : 0U, // Select
442 : 0U, // Select_32
443 : 0U, // Select_32_64
444 : 0U, // Select_64_32
445 : 0U, // Select_Ri
446 : 0U, // Select_Ri_32
447 : 0U, // Select_Ri_32_64
448 : 0U, // Select_Ri_64_32
449 : 0U, // ADD_ri
450 : 0U, // ADD_ri_32
451 : 0U, // ADD_rr
452 : 0U, // ADD_rr_32
453 : 0U, // AND_ri
454 : 0U, // AND_ri_32
455 : 0U, // AND_rr
456 : 0U, // AND_rr_32
457 : 0U, // BE16
458 : 0U, // BE32
459 : 0U, // BE64
460 : 0U, // DIV_ri
461 : 0U, // DIV_ri_32
462 : 0U, // DIV_rr
463 : 0U, // DIV_rr_32
464 : 4U, // FI_ri
465 : 0U, // JAL
466 : 0U, // JALX
467 : 0U, // JEQ_ri
468 : 0U, // JEQ_rr
469 : 0U, // JMP
470 : 0U, // JNE_ri
471 : 0U, // JNE_rr
472 : 0U, // JSGE_ri
473 : 0U, // JSGE_rr
474 : 0U, // JSGT_ri
475 : 0U, // JSGT_rr
476 : 0U, // JSLE_ri
477 : 0U, // JSLE_rr
478 : 1U, // JSLT_ri
479 : 1U, // JSLT_rr
480 : 1U, // JUGE_ri
481 : 1U, // JUGE_rr
482 : 1U, // JUGT_ri
483 : 1U, // JUGT_rr
484 : 1U, // JULE_ri
485 : 1U, // JULE_rr
486 : 1U, // JULT_ri
487 : 1U, // JULT_rr
488 : 1U, // LDB
489 : 1U, // LDB32
490 : 1U, // LDD
491 : 1U, // LDH
492 : 1U, // LDH32
493 : 1U, // LDW
494 : 1U, // LDW32
495 : 0U, // LD_ABS_B
496 : 0U, // LD_ABS_H
497 : 0U, // LD_ABS_W
498 : 0U, // LD_IND_B
499 : 0U, // LD_IND_H
500 : 0U, // LD_IND_W
501 : 8U, // LD_imm64
502 : 16U, // LD_pseudo
503 : 1U, // LE16
504 : 1U, // LE32
505 : 1U, // LE64
506 : 32U, // MOV_32_64
507 : 32U, // MOV_ri
508 : 32U, // MOV_ri_32
509 : 32U, // MOV_rr
510 : 32U, // MOV_rr_32
511 : 1U, // MUL_ri
512 : 1U, // MUL_ri_32
513 : 1U, // MUL_rr
514 : 1U, // MUL_rr_32
515 : 1U, // NEG_32
516 : 1U, // NEG_64
517 : 0U, // NOP
518 : 1U, // OR_ri
519 : 1U, // OR_ri_32
520 : 1U, // OR_rr
521 : 1U, // OR_rr_32
522 : 0U, // RET
523 : 1U, // SLL_ri
524 : 1U, // SLL_ri_32
525 : 1U, // SLL_rr
526 : 1U, // SLL_rr_32
527 : 2U, // SRA_ri
528 : 2U, // SRA_ri_32
529 : 2U, // SRA_rr
530 : 2U, // SRA_rr_32
531 : 2U, // SRL_ri
532 : 2U, // SRL_ri_32
533 : 2U, // SRL_rr
534 : 2U, // SRL_rr_32
535 : 2U, // STB
536 : 2U, // STB32
537 : 2U, // STD
538 : 2U, // STH
539 : 2U, // STH32
540 : 2U, // STW
541 : 2U, // STW32
542 : 2U, // SUB_ri
543 : 2U, // SUB_ri_32
544 : 2U, // SUB_rr
545 : 2U, // SUB_rr_32
546 : 2U, // XADD32
547 : 2U, // XADD64
548 : 2U, // XOR_ri
549 : 2U, // XOR_ri_32
550 : 2U, // XOR_rr
551 : 2U, // XOR_rr_32
552 : };
553 :
554 1907 : O << "\t";
555 :
556 : // Emit the opcode for the instruction.
557 : uint32_t Bits = 0;
558 1907 : Bits |= OpInfo0[MI->getOpcode()] << 0;
559 1907 : Bits |= OpInfo1[MI->getOpcode()] << 16;
560 : assert(Bits != 0 && "Cannot print this instruction.");
561 1907 : O << AsmStrs+(Bits & 511)-1;
562 :
563 :
564 : // Fragment 0 encoded into 3 bits for 5 unique commands.
565 1907 : switch ((Bits >> 9) & 7) {
566 0 : default: llvm_unreachable("Invalid command number.");
567 : case 0:
568 : // DBG_VALUE, DBG_LABEL, BUNDLE, LIFETIME_START, LIFETIME_END, FENTRY_CAL...
569 : return;
570 : break;
571 1371 : case 1:
572 : // ADJCALLSTACKDOWN, ADJCALLSTACKUP, MEMCPY, Select, Select_32, Select_32...
573 1371 : printOperand(MI, 0, O);
574 1371 : break;
575 21 : case 2:
576 : // JMP
577 21 : printBrTargetOperand(MI, 0, O);
578 21 : return;
579 : break;
580 74 : case 3:
581 : // LD_ABS_B, LD_ABS_H, LD_ABS_W, LD_IND_B, LD_IND_H, LD_IND_W
582 74 : printOperand(MI, 1, O);
583 : O << ']';
584 : return;
585 : break;
586 231 : case 4:
587 : // STB, STB32, STD, STH, STH32, STW, STW32, XADD32, XADD64
588 231 : printMemOperand(MI, 1, O);
589 231 : break;
590 : }
591 :
592 :
593 : // Fragment 1 encoded into 6 bits for 38 unique commands.
594 1602 : switch ((Bits >> 12) & 63) {
595 0 : default: llvm_unreachable("Invalid command number.");
596 : case 0:
597 : // ADJCALLSTACKDOWN, ADJCALLSTACKUP
598 : O << ' ';
599 0 : printOperand(MI, 1, O);
600 0 : return;
601 : break;
602 0 : case 1:
603 : // MEMCPY
604 0 : O << ", src: ";
605 0 : printOperand(MI, 1, O);
606 0 : O << ", len: ";
607 0 : printOperand(MI, 2, O);
608 0 : O << ", align: ";
609 0 : printOperand(MI, 3, O);
610 0 : return;
611 : break;
612 570 : case 2:
613 : // Select, Select_32, Select_32_64, Select_64_32, Select_Ri, Select_Ri_32...
614 570 : O << " = ";
615 570 : break;
616 122 : case 3:
617 : // ADD_ri, ADD_ri_32, ADD_rr, ADD_rr_32
618 122 : O << " += ";
619 122 : printOperand(MI, 2, O);
620 122 : return;
621 : break;
622 70 : case 4:
623 : // AND_ri, AND_ri_32, AND_rr, AND_rr_32
624 70 : O << " &= ";
625 70 : printOperand(MI, 2, O);
626 70 : return;
627 : break;
628 4 : case 5:
629 : // BE16
630 4 : O << " = be16 ";
631 4 : printOperand(MI, 1, O);
632 4 : return;
633 : break;
634 4 : case 6:
635 : // BE32
636 4 : O << " = be32 ";
637 4 : printOperand(MI, 1, O);
638 4 : return;
639 : break;
640 4 : case 7:
641 : // BE64
642 4 : O << " = be64 ";
643 4 : printOperand(MI, 1, O);
644 4 : return;
645 : break;
646 11 : case 8:
647 : // DIV_ri, DIV_ri_32, DIV_rr, DIV_rr_32
648 11 : O << " /= ";
649 11 : printOperand(MI, 2, O);
650 11 : return;
651 : break;
652 4 : case 9:
653 : // FI_ri, LD_pseudo
654 4 : O << ", ";
655 4 : break;
656 : case 10:
657 : // JAL, JALX, NOP
658 : return;
659 : break;
660 42 : case 11:
661 : // JEQ_ri, JEQ_rr
662 42 : O << " == ";
663 42 : printOperand(MI, 1, O);
664 42 : O << " goto ";
665 42 : printBrTargetOperand(MI, 2, O);
666 42 : return;
667 : break;
668 33 : case 12:
669 : // JNE_ri, JNE_rr
670 33 : O << " != ";
671 33 : printOperand(MI, 1, O);
672 33 : O << " goto ";
673 33 : printBrTargetOperand(MI, 2, O);
674 33 : return;
675 : break;
676 10 : case 13:
677 : // JSGE_ri, JSGE_rr
678 10 : O << " s>= ";
679 10 : printOperand(MI, 1, O);
680 10 : O << " goto ";
681 10 : printBrTargetOperand(MI, 2, O);
682 10 : return;
683 : break;
684 17 : case 14:
685 : // JSGT_ri, JSGT_rr
686 17 : O << " s> ";
687 17 : printOperand(MI, 1, O);
688 17 : O << " goto ";
689 17 : printBrTargetOperand(MI, 2, O);
690 17 : return;
691 : break;
692 5 : case 15:
693 : // JSLE_ri, JSLE_rr
694 5 : O << " s<= ";
695 5 : printOperand(MI, 1, O);
696 5 : O << " goto ";
697 5 : printBrTargetOperand(MI, 2, O);
698 5 : return;
699 : break;
700 6 : case 16:
701 : // JSLT_ri, JSLT_rr
702 6 : O << " s< ";
703 6 : printOperand(MI, 1, O);
704 6 : O << " goto ";
705 6 : printBrTargetOperand(MI, 2, O);
706 6 : return;
707 : break;
708 7 : case 17:
709 : // JUGE_ri, JUGE_rr
710 7 : O << " >= ";
711 7 : printOperand(MI, 1, O);
712 7 : O << " goto ";
713 7 : printBrTargetOperand(MI, 2, O);
714 7 : return;
715 : break;
716 14 : case 18:
717 : // JUGT_ri, JUGT_rr
718 14 : O << " > ";
719 14 : printOperand(MI, 1, O);
720 14 : O << " goto ";
721 14 : printBrTargetOperand(MI, 2, O);
722 14 : return;
723 : break;
724 5 : case 19:
725 : // JULE_ri, JULE_rr
726 5 : O << " <= ";
727 5 : printOperand(MI, 1, O);
728 5 : O << " goto ";
729 5 : printBrTargetOperand(MI, 2, O);
730 5 : return;
731 : break;
732 6 : case 20:
733 : // JULT_ri, JULT_rr
734 6 : O << " < ";
735 6 : printOperand(MI, 1, O);
736 6 : O << " goto ";
737 6 : printBrTargetOperand(MI, 2, O);
738 6 : return;
739 : break;
740 37 : case 21:
741 : // LDB, LDB32
742 37 : O << " = *(u8 *)(";
743 37 : printMemOperand(MI, 1, O);
744 : O << ')';
745 : return;
746 : break;
747 40 : case 22:
748 : // LDD
749 40 : O << " = *(u64 *)(";
750 40 : printMemOperand(MI, 1, O);
751 : O << ')';
752 : return;
753 : break;
754 27 : case 23:
755 : // LDH, LDH32
756 27 : O << " = *(u16 *)(";
757 27 : printMemOperand(MI, 1, O);
758 : O << ')';
759 : return;
760 : break;
761 33 : case 24:
762 : // LDW, LDW32
763 33 : O << " = *(u32 *)(";
764 33 : printMemOperand(MI, 1, O);
765 : O << ')';
766 : return;
767 : break;
768 2 : case 25:
769 : // LE16
770 2 : O << " = le16 ";
771 2 : printOperand(MI, 1, O);
772 2 : return;
773 : break;
774 2 : case 26:
775 : // LE32
776 2 : O << " = le32 ";
777 2 : printOperand(MI, 1, O);
778 2 : return;
779 : break;
780 2 : case 27:
781 : // LE64
782 2 : O << " = le64 ";
783 2 : printOperand(MI, 1, O);
784 2 : return;
785 : break;
786 18 : case 28:
787 : // MUL_ri, MUL_ri_32, MUL_rr, MUL_rr_32
788 18 : O << " *= ";
789 18 : printOperand(MI, 2, O);
790 18 : return;
791 : break;
792 6 : case 29:
793 : // NEG_32, NEG_64
794 6 : O << " = -";
795 6 : printOperand(MI, 1, O);
796 6 : return;
797 : break;
798 15 : case 30:
799 : // OR_ri, OR_ri_32, OR_rr, OR_rr_32
800 15 : O << " |= ";
801 15 : printOperand(MI, 2, O);
802 15 : return;
803 : break;
804 89 : case 31:
805 : // SLL_ri, SLL_ri_32, SLL_rr, SLL_rr_32
806 89 : O << " <<= ";
807 89 : printOperand(MI, 2, O);
808 89 : return;
809 : break;
810 57 : case 32:
811 : // SRA_ri, SRA_ri_32, SRA_rr, SRA_rr_32
812 57 : O << " s>>= ";
813 57 : printOperand(MI, 2, O);
814 57 : return;
815 : break;
816 30 : case 33:
817 : // SRL_ri, SRL_ri_32, SRL_rr, SRL_rr_32
818 30 : O << " >>= ";
819 30 : printOperand(MI, 2, O);
820 30 : return;
821 : break;
822 222 : case 34:
823 : // STB, STB32, STD, STH, STH32, STW, STW32
824 222 : O << ") = ";
825 222 : printOperand(MI, 0, O);
826 222 : return;
827 : break;
828 12 : case 35:
829 : // SUB_ri, SUB_ri_32, SUB_rr, SUB_rr_32
830 12 : O << " -= ";
831 12 : printOperand(MI, 2, O);
832 12 : return;
833 : break;
834 9 : case 36:
835 : // XADD32, XADD64
836 9 : O << ") += ";
837 9 : printOperand(MI, 3, O);
838 9 : return;
839 : break;
840 22 : case 37:
841 : // XOR_ri, XOR_ri_32, XOR_rr, XOR_rr_32
842 22 : O << " ^= ";
843 22 : printOperand(MI, 2, O);
844 22 : return;
845 : break;
846 : }
847 :
848 :
849 : // Fragment 2 encoded into 2 bits for 3 unique commands.
850 574 : switch ((Bits >> 18) & 3) {
851 0 : default: llvm_unreachable("Invalid command number.");
852 495 : case 0:
853 : // Select, Select_32, Select_32_64, Select_64_32, Select_Ri, Select_Ri_32...
854 495 : printOperand(MI, 1, O);
855 : break;
856 0 : case 1:
857 : // FI_ri
858 0 : printMemOperand(MI, 1, O);
859 0 : return;
860 : break;
861 79 : case 2:
862 : // LD_imm64
863 79 : printImm64Operand(MI, 1, O);
864 79 : O << " ll";
865 79 : return;
866 : break;
867 : }
868 :
869 :
870 : // Fragment 3 encoded into 2 bits for 3 unique commands.
871 495 : switch ((Bits >> 20) & 3) {
872 0 : default: llvm_unreachable("Invalid command number.");
873 : case 0:
874 : // Select, Select_32, Select_32_64, Select_64_32, Select_Ri, Select_Ri_32...
875 : O << ' ';
876 0 : printOperand(MI, 3, O);
877 : O << ' ';
878 0 : printOperand(MI, 2, O);
879 0 : O << " ? ";
880 0 : printOperand(MI, 4, O);
881 0 : O << " : ";
882 0 : printOperand(MI, 5, O);
883 0 : return;
884 : break;
885 4 : case 1:
886 : // LD_pseudo
887 4 : O << ", ";
888 4 : printImm64Operand(MI, 2, O);
889 4 : return;
890 : break;
891 : case 2:
892 : // MOV_32_64, MOV_ri, MOV_ri_32, MOV_rr, MOV_rr_32
893 : return;
894 : break;
895 : }
896 :
897 : }
898 :
899 :
900 : /// getRegisterName - This method is automatically generated by tblgen
901 : /// from the register set description. This returns the assembler name
902 : /// for the specified register.
903 2518 : const char *BPFInstPrinter::getRegisterName(unsigned RegNo) {
904 : assert(RegNo && RegNo < 25 && "Invalid register number!");
905 :
906 : static const char AsmStrs[] = {
907 : /* 0 */ 'r', '1', '0', 0,
908 : /* 4 */ 'w', '1', '0', 0,
909 : /* 8 */ 'r', '0', 0,
910 : /* 11 */ 'w', '0', 0,
911 : /* 14 */ 'r', '1', '1', 0,
912 : /* 18 */ 'w', '1', '1', 0,
913 : /* 22 */ 'r', '1', 0,
914 : /* 25 */ 'w', '1', 0,
915 : /* 28 */ 'r', '2', 0,
916 : /* 31 */ 'w', '2', 0,
917 : /* 34 */ 'r', '3', 0,
918 : /* 37 */ 'w', '3', 0,
919 : /* 40 */ 'r', '4', 0,
920 : /* 43 */ 'w', '4', 0,
921 : /* 46 */ 'r', '5', 0,
922 : /* 49 */ 'w', '5', 0,
923 : /* 52 */ 'r', '6', 0,
924 : /* 55 */ 'w', '6', 0,
925 : /* 58 */ 'r', '7', 0,
926 : /* 61 */ 'w', '7', 0,
927 : /* 64 */ 'r', '8', 0,
928 : /* 67 */ 'w', '8', 0,
929 : /* 70 */ 'r', '9', 0,
930 : /* 73 */ 'w', '9', 0,
931 : };
932 :
933 : static const uint8_t RegAsmOffset[] = {
934 : 8, 22, 28, 34, 40, 46, 52, 58, 64, 70, 0, 14, 11, 25,
935 : 31, 37, 43, 49, 55, 61, 67, 73, 4, 18,
936 : };
937 :
938 : assert (*(AsmStrs+RegAsmOffset[RegNo-1]) &&
939 : "Invalid alt name index for register!");
940 2518 : return AsmStrs+RegAsmOffset[RegNo-1];
941 : }
942 :
943 : #ifdef PRINT_ALIAS_INSTR
944 : #undef PRINT_ALIAS_INSTR
945 :
946 : bool BPFInstPrinter::printAliasInstr(const MCInst *MI, raw_ostream &OS) {
947 : return false;
948 : }
949 :
950 : #endif // PRINT_ALIAS_INSTR
|