1/*===- TableGen'erated file -------------------------------------*- C++ -*-===*\
2|* *|
3|* Assembly Writer Source Fragment *|
4|* *|
5|* Automatically generated file, do not edit! *|
6|* From: BPF.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>
13BPFInstPrinter::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 */ "lea\t\000"
21 /* 5 */ "load_stack_arg\t\000"
22 /* 21 */ "store_stack_arg\t\000"
23 /* 38 */ "store_stack_arg_imm\t\000"
24 /* 59 */ "ld_pseudo\t\000"
25 /* 70 */ "nop\t\000"
26 /* 75 */ "#memcpy dst: \000"
27 /* 89 */ "#ADJCALLSTACKDOWN \000"
28 /* 108 */ "# Select PSEUDO \000"
29 /* 125 */ "#ADJCALLSTACKUP \000"
30 /* 142 */ "if \000"
31 /* 146 */ "call \000"
32 /* 152 */ "gotol \000"
33 /* 159 */ "may_goto \000"
34 /* 169 */ "callx \000"
35 /* 176 */ "gotox \000"
36 /* 183 */ "store_release((u32 *)(\000"
37 /* 206 */ "lock *(u32 *)(\000"
38 /* 221 */ "store_release((u64 *)(\000"
39 /* 244 */ "lock *(u64 *)(\000"
40 /* 259 */ "store_release((u16 *)(\000"
41 /* 282 */ "*(u16 *)(\000"
42 /* 292 */ "store_release((u8 *)(\000"
43 /* 314 */ "*(u8 *)(\000"
44 /* 323 */ "w0 = cmpxchg32_32(\000"
45 /* 342 */ "r0 = cmpxchg_64(\000"
46 /* 359 */ "core_st(\000"
47 /* 368 */ "# XRay Function Patchable RET.\000"
48 /* 399 */ "# XRay Typed Event Log.\000"
49 /* 423 */ "# XRay Custom Event Log.\000"
50 /* 448 */ "# XRay Function Enter.\000"
51 /* 471 */ "# XRay Tail Call Exit.\000"
52 /* 494 */ "# XRay Function Exit.\000"
53 /* 516 */ "LIFETIME_END\000"
54 /* 529 */ "PSEUDO_PROBE\000"
55 /* 542 */ "BUNDLE\000"
56 /* 549 */ "FAKE_USE\000"
57 /* 558 */ "DBG_VALUE\000"
58 /* 568 */ "DBG_INSTR_REF\000"
59 /* 582 */ "DBG_PHI\000"
60 /* 590 */ "DBG_LABEL\000"
61 /* 600 */ "LIFETIME_START\000"
62 /* 615 */ "DBG_VALUE_LIST\000"
63 /* 630 */ "r0 = *(u32 *)skb[\000"
64 /* 648 */ "r0 = *(u16 *)skb[\000"
65 /* 666 */ "r0 = *(u8 *)skb[\000"
66 /* 683 */ "# FEntry call\000"
67 /* 697 */ "exit\000"
68};
69#ifdef __GNUC__
70#pragma GCC diagnostic pop
71#endif
72
73 static const uint32_t OpInfo0[] = {
74 0U, // PHI
75 0U, // INLINEASM
76 0U, // INLINEASM_BR
77 0U, // CFI_INSTRUCTION
78 0U, // EH_LABEL
79 0U, // GC_LABEL
80 0U, // ANNOTATION_LABEL
81 0U, // KILL
82 0U, // EXTRACT_SUBREG
83 0U, // INSERT_SUBREG
84 0U, // IMPLICIT_DEF
85 0U, // INIT_UNDEF
86 0U, // SUBREG_TO_REG
87 0U, // COPY_TO_REGCLASS
88 559U, // DBG_VALUE
89 616U, // DBG_VALUE_LIST
90 569U, // DBG_INSTR_REF
91 583U, // DBG_PHI
92 591U, // DBG_LABEL
93 0U, // REG_SEQUENCE
94 0U, // COPY
95 0U, // COPY_LANEMASK
96 543U, // BUNDLE
97 601U, // LIFETIME_START
98 517U, // LIFETIME_END
99 530U, // PSEUDO_PROBE
100 0U, // ARITH_FENCE
101 0U, // STACKMAP
102 684U, // FENTRY_CALL
103 0U, // PATCHPOINT
104 0U, // LOAD_STACK_GUARD
105 0U, // PREALLOCATED_SETUP
106 0U, // PREALLOCATED_ARG
107 0U, // STATEPOINT
108 0U, // LOCAL_ESCAPE
109 0U, // FAULTING_OP
110 0U, // PATCHABLE_OP
111 449U, // PATCHABLE_FUNCTION_ENTER
112 369U, // PATCHABLE_RET
113 495U, // PATCHABLE_FUNCTION_EXIT
114 472U, // PATCHABLE_TAIL_CALL
115 424U, // PATCHABLE_EVENT_CALL
116 400U, // PATCHABLE_TYPED_EVENT_CALL
117 0U, // ICALL_BRANCH_FUNNEL
118 550U, // FAKE_USE
119 0U, // MEMBARRIER
120 0U, // JUMP_TABLE_DEBUG_INFO
121 0U, // RELOC_NONE
122 0U, // CONVERGENCECTRL_ENTRY
123 0U, // CONVERGENCECTRL_ANCHOR
124 0U, // CONVERGENCECTRL_LOOP
125 0U, // CONVERGENCECTRL_GLUE
126 0U, // G_ASSERT_SEXT
127 0U, // G_ASSERT_ZEXT
128 0U, // G_ASSERT_ALIGN
129 0U, // G_ADD
130 0U, // G_SUB
131 0U, // G_MUL
132 0U, // G_SDIV
133 0U, // G_UDIV
134 0U, // G_SREM
135 0U, // G_UREM
136 0U, // G_SDIVREM
137 0U, // G_UDIVREM
138 0U, // G_AND
139 0U, // G_OR
140 0U, // G_XOR
141 0U, // G_ABDS
142 0U, // G_ABDU
143 0U, // G_UAVGFLOOR
144 0U, // G_UAVGCEIL
145 0U, // G_SAVGFLOOR
146 0U, // G_SAVGCEIL
147 0U, // G_IMPLICIT_DEF
148 0U, // G_PHI
149 0U, // G_FRAME_INDEX
150 0U, // G_GLOBAL_VALUE
151 0U, // G_PTRAUTH_GLOBAL_VALUE
152 0U, // G_CONSTANT_POOL
153 0U, // G_EXTRACT
154 0U, // G_UNMERGE_VALUES
155 0U, // G_INSERT
156 0U, // G_MERGE_VALUES
157 0U, // G_BUILD_VECTOR
158 0U, // G_BUILD_VECTOR_TRUNC
159 0U, // G_CONCAT_VECTORS
160 0U, // G_PTRTOINT
161 0U, // G_INTTOPTR
162 0U, // G_BITCAST
163 0U, // G_FREEZE
164 0U, // G_CONSTANT_FOLD_BARRIER
165 0U, // G_INTRINSIC_FPTRUNC_ROUND
166 0U, // G_INTRINSIC_TRUNC
167 0U, // G_INTRINSIC_ROUND
168 0U, // G_INTRINSIC_LRINT
169 0U, // G_INTRINSIC_LLRINT
170 0U, // G_INTRINSIC_ROUNDEVEN
171 0U, // G_READCYCLECOUNTER
172 0U, // G_READSTEADYCOUNTER
173 0U, // G_LOAD
174 0U, // G_SEXTLOAD
175 0U, // G_ZEXTLOAD
176 0U, // G_FPEXTLOAD
177 0U, // G_INDEXED_LOAD
178 0U, // G_INDEXED_SEXTLOAD
179 0U, // G_INDEXED_ZEXTLOAD
180 0U, // G_STORE
181 0U, // G_FPTRUNCSTORE
182 0U, // G_INDEXED_STORE
183 0U, // G_ATOMIC_CMPXCHG_WITH_SUCCESS
184 0U, // G_ATOMIC_CMPXCHG
185 0U, // G_ATOMICRMW_XCHG
186 0U, // G_ATOMICRMW_ADD
187 0U, // G_ATOMICRMW_SUB
188 0U, // G_ATOMICRMW_AND
189 0U, // G_ATOMICRMW_NAND
190 0U, // G_ATOMICRMW_OR
191 0U, // G_ATOMICRMW_XOR
192 0U, // G_ATOMICRMW_MAX
193 0U, // G_ATOMICRMW_MIN
194 0U, // G_ATOMICRMW_UMAX
195 0U, // G_ATOMICRMW_UMIN
196 0U, // G_ATOMICRMW_FADD
197 0U, // G_ATOMICRMW_FSUB
198 0U, // G_ATOMICRMW_FMAX
199 0U, // G_ATOMICRMW_FMIN
200 0U, // G_ATOMICRMW_FMAXIMUM
201 0U, // G_ATOMICRMW_FMINIMUM
202 0U, // G_ATOMICRMW_FMAXIMUMNUM
203 0U, // G_ATOMICRMW_FMINIMUMNUM
204 0U, // G_ATOMICRMW_UINC_WRAP
205 0U, // G_ATOMICRMW_UDEC_WRAP
206 0U, // G_ATOMICRMW_USUB_COND
207 0U, // G_ATOMICRMW_USUB_SAT
208 0U, // G_FENCE
209 0U, // G_PREFETCH
210 0U, // G_BRCOND
211 0U, // G_BRINDIRECT
212 0U, // G_INVOKE_REGION_START
213 0U, // G_INTRINSIC
214 0U, // G_INTRINSIC_W_SIDE_EFFECTS
215 0U, // G_INTRINSIC_CONVERGENT
216 0U, // G_INTRINSIC_CONVERGENT_W_SIDE_EFFECTS
217 0U, // G_ANYEXT
218 0U, // G_TRUNC
219 0U, // G_TRUNC_SSAT_S
220 0U, // G_TRUNC_SSAT_U
221 0U, // G_TRUNC_USAT_U
222 0U, // G_CONSTANT
223 0U, // G_FCONSTANT
224 0U, // G_VASTART
225 0U, // G_VAARG
226 0U, // G_SEXT
227 0U, // G_SEXT_INREG
228 0U, // G_ZEXT
229 0U, // G_SHL
230 0U, // G_LSHR
231 0U, // G_ASHR
232 0U, // G_FSHL
233 0U, // G_FSHR
234 0U, // G_ROTR
235 0U, // G_ROTL
236 0U, // G_ICMP
237 0U, // G_FCMP
238 0U, // G_SCMP
239 0U, // G_UCMP
240 0U, // G_SELECT
241 0U, // G_UADDO
242 0U, // G_UADDE
243 0U, // G_USUBO
244 0U, // G_USUBE
245 0U, // G_SADDO
246 0U, // G_SADDE
247 0U, // G_SSUBO
248 0U, // G_SSUBE
249 0U, // G_UMULO
250 0U, // G_SMULO
251 0U, // G_UMULH
252 0U, // G_SMULH
253 0U, // G_UADDSAT
254 0U, // G_SADDSAT
255 0U, // G_USUBSAT
256 0U, // G_SSUBSAT
257 0U, // G_USHLSAT
258 0U, // G_SSHLSAT
259 0U, // G_SMULFIX
260 0U, // G_UMULFIX
261 0U, // G_SMULFIXSAT
262 0U, // G_UMULFIXSAT
263 0U, // G_SDIVFIX
264 0U, // G_UDIVFIX
265 0U, // G_SDIVFIXSAT
266 0U, // G_UDIVFIXSAT
267 0U, // G_FADD
268 0U, // G_FSUB
269 0U, // G_FMUL
270 0U, // G_FMA
271 0U, // G_FMAD
272 0U, // G_FDIV
273 0U, // G_FREM
274 0U, // G_FMODF
275 0U, // G_FPOW
276 0U, // G_FPOWI
277 0U, // G_FEXP
278 0U, // G_FEXP2
279 0U, // G_FEXP10
280 0U, // G_FLOG
281 0U, // G_FLOG2
282 0U, // G_FLOG10
283 0U, // G_FLDEXP
284 0U, // G_FFREXP
285 0U, // G_FNEG
286 0U, // G_FPEXT
287 0U, // G_FPTRUNC
288 0U, // G_FPTOSI
289 0U, // G_FPTOUI
290 0U, // G_SITOFP
291 0U, // G_UITOFP
292 0U, // G_FPTOSI_SAT
293 0U, // G_FPTOUI_SAT
294 0U, // G_FABS
295 0U, // G_FCOPYSIGN
296 0U, // G_IS_FPCLASS
297 0U, // G_FCANONICALIZE
298 0U, // G_FMINNUM
299 0U, // G_FMAXNUM
300 0U, // G_FMINNUM_IEEE
301 0U, // G_FMAXNUM_IEEE
302 0U, // G_FMINIMUM
303 0U, // G_FMAXIMUM
304 0U, // G_FMINIMUMNUM
305 0U, // G_FMAXIMUMNUM
306 0U, // G_GET_FPENV
307 0U, // G_SET_FPENV
308 0U, // G_RESET_FPENV
309 0U, // G_GET_FPMODE
310 0U, // G_SET_FPMODE
311 0U, // G_RESET_FPMODE
312 0U, // G_GET_ROUNDING
313 0U, // G_SET_ROUNDING
314 0U, // G_PTR_ADD
315 0U, // G_PTRMASK
316 0U, // G_SMIN
317 0U, // G_SMAX
318 0U, // G_UMIN
319 0U, // G_UMAX
320 0U, // G_ABS
321 0U, // G_LROUND
322 0U, // G_LLROUND
323 0U, // G_BR
324 0U, // G_BRJT
325 0U, // G_VSCALE
326 0U, // G_INSERT_SUBVECTOR
327 0U, // G_EXTRACT_SUBVECTOR
328 0U, // G_INSERT_VECTOR_ELT
329 0U, // G_EXTRACT_VECTOR_ELT
330 0U, // G_SHUFFLE_VECTOR
331 0U, // G_SPLAT_VECTOR
332 0U, // G_STEP_VECTOR
333 0U, // G_VECTOR_COMPRESS
334 0U, // G_CTTZ
335 0U, // G_CTTZ_ZERO_POISON
336 0U, // G_CTLZ
337 0U, // G_CTLZ_ZERO_POISON
338 0U, // G_CTLS
339 0U, // G_CTPOP
340 0U, // G_BSWAP
341 0U, // G_BITREVERSE
342 0U, // G_CLMUL
343 0U, // G_CLMULH
344 0U, // G_FCEIL
345 0U, // G_FCOS
346 0U, // G_FSIN
347 0U, // G_FSINCOS
348 0U, // G_FTAN
349 0U, // G_FACOS
350 0U, // G_FASIN
351 0U, // G_FATAN
352 0U, // G_FATAN2
353 0U, // G_FCOSH
354 0U, // G_FSINH
355 0U, // G_FTANH
356 0U, // G_FSQRT
357 0U, // G_FFLOOR
358 0U, // G_FRINT
359 0U, // G_FNEARBYINT
360 0U, // G_ADDRSPACE_CAST
361 0U, // G_BLOCK_ADDR
362 0U, // G_JUMP_TABLE
363 0U, // G_DYN_STACKALLOC
364 0U, // G_STACKSAVE
365 0U, // G_STACKRESTORE
366 0U, // G_STRICT_FADD
367 0U, // G_STRICT_FSUB
368 0U, // G_STRICT_FMUL
369 0U, // G_STRICT_FDIV
370 0U, // G_STRICT_FREM
371 0U, // G_STRICT_FMA
372 0U, // G_STRICT_FSQRT
373 0U, // G_STRICT_FLDEXP
374 0U, // G_STRICT_FCMP
375 0U, // G_STRICT_FCMPS
376 0U, // G_READ_REGISTER
377 0U, // G_WRITE_REGISTER
378 0U, // G_MEMCPY
379 0U, // G_MEMCPY_INLINE
380 0U, // G_MEMMOVE
381 0U, // G_MEMSET
382 0U, // G_BZERO
383 0U, // G_MEMSET_INLINE
384 0U, // G_TRAP
385 0U, // G_DEBUGTRAP
386 0U, // G_UBSANTRAP
387 0U, // G_VECREDUCE_SEQ_FADD
388 0U, // G_VECREDUCE_SEQ_FMUL
389 0U, // G_VECREDUCE_FADD
390 0U, // G_VECREDUCE_FMUL
391 0U, // G_VECREDUCE_FMAX
392 0U, // G_VECREDUCE_FMIN
393 0U, // G_VECREDUCE_FMAXIMUM
394 0U, // G_VECREDUCE_FMINIMUM
395 0U, // G_VECREDUCE_FMAXIMUMNUM
396 0U, // G_VECREDUCE_FMINIMUMNUM
397 0U, // G_VECREDUCE_ADD
398 0U, // G_VECREDUCE_MUL
399 0U, // G_VECREDUCE_AND
400 0U, // G_VECREDUCE_OR
401 0U, // G_VECREDUCE_XOR
402 0U, // G_VECREDUCE_SMAX
403 0U, // G_VECREDUCE_SMIN
404 0U, // G_VECREDUCE_UMAX
405 0U, // G_VECREDUCE_UMIN
406 0U, // G_SBFX
407 0U, // G_UBFX
408 1114U, // ADJCALLSTACKDOWN
409 1150U, // ADJCALLSTACKUP
410 9217U, // FI_ri
411 0U, // LDIMM64
412 1057798U, // LOAD_STACK_ARG_PSEUDO
413 17484U, // MEMCPY
414 1057831U, // STORE_STACK_ARG_IMM_PSEUDO
415 1057814U, // STORE_STACK_ARG_PSEUDO
416 5268589U, // Select
417 5268589U, // Select_32
418 5268589U, // Select_32_64
419 5268589U, // Select_64_32
420 5268589U, // Select_Ri
421 5268589U, // Select_Ri_32
422 5268589U, // Select_Ri_32_64
423 5268589U, // Select_Ri_64_32
424 33797U, // ADDR_SPACE_CAST
425 41989U, // ADD_ri
426 41989U, // ADD_ri_32
427 41989U, // ADD_rr
428 41989U, // ADD_rr_32
429 50181U, // AND_ri
430 50181U, // AND_ri_32
431 50181U, // AND_rr
432 50181U, // AND_rr_32
433 58373U, // BE16
434 66565U, // BE32
435 74757U, // BE64
436 82949U, // BSWAP16
437 91141U, // BSWAP32
438 99333U, // BSWAP64
439 108887U, // CMPXCHGD
440 117060U, // CMPXCHGW32
441 123909U, // CORE_LD32
442 132101U, // CORE_LD64
443 140293U, // CORE_SHIFT
444 10495336U, // CORE_ST
445 148485U, // DIV_ri
446 148485U, // DIV_ri_32
447 148485U, // DIV_rr
448 148485U, // DIV_rr_32
449 156819U, // JAL
450 156842U, // JALX
451 3232U, // JCOND
452 165007U, // JEQ_ri
453 165007U, // JEQ_ri_32
454 165007U, // JEQ_rr
455 165007U, // JEQ_rr_32
456 3236U, // JMP
457 3225U, // JMPL
458 173199U, // JNE_ri
459 173199U, // JNE_ri_32
460 173199U, // JNE_rr
461 173199U, // JNE_rr_32
462 181391U, // JSET_ri
463 181391U, // JSET_ri_32
464 181391U, // JSET_rr
465 181391U, // JSET_rr_32
466 189583U, // JSGE_ri
467 189583U, // JSGE_ri_32
468 189583U, // JSGE_rr
469 189583U, // JSGE_rr_32
470 197775U, // JSGT_ri
471 197775U, // JSGT_ri_32
472 197775U, // JSGT_rr
473 197775U, // JSGT_rr_32
474 205967U, // JSLE_ri
475 205967U, // JSLE_ri_32
476 205967U, // JSLE_rr
477 205967U, // JSLE_rr_32
478 214159U, // JSLT_ri
479 214159U, // JSLT_ri_32
480 214159U, // JSLT_rr
481 214159U, // JSLT_rr_32
482 222351U, // JUGE_ri
483 222351U, // JUGE_ri_32
484 222351U, // JUGE_rr
485 222351U, // JUGE_rr_32
486 230543U, // JUGT_ri
487 230543U, // JUGT_ri_32
488 230543U, // JUGT_rr
489 230543U, // JUGT_rr_32
490 238735U, // JULE_ri
491 238735U, // JULE_ri_32
492 238735U, // JULE_rr
493 238735U, // JULE_rr_32
494 246927U, // JULT_ri
495 246927U, // JULT_ri_32
496 246927U, // JULT_rr
497 246927U, // JULT_rr_32
498 156849U, // JX
499 254981U, // LDB
500 254981U, // LDB32
501 263173U, // LDBACQ32
502 271365U, // LDBSX
503 279557U, // LDD
504 287749U, // LDDACQ
505 295941U, // LDH
506 295941U, // LDH32
507 304133U, // LDHACQ32
508 312325U, // LDHSX
509 320517U, // LDW
510 320517U, // LDW32
511 328709U, // LDWACQ32
512 336901U, // LDWSX
513 345755U, // LD_ABS_B
514 345737U, // LD_ABS_H
515 345719U, // LD_ABS_W
516 345755U, // LD_IND_B
517 345737U, // LD_IND_H
518 345719U, // LD_IND_W
519 14705669U, // LD_imm64
520 26223676U, // LD_pseudo
521 353285U, // LE16
522 361477U, // LE32
523 369669U, // LE64
524 377861U, // MOD_ri
525 377861U, // MOD_ri_32
526 377861U, // MOD_rr
527 377861U, // MOD_rr_32
528 386053U, // MOVSX_rr_16
529 394245U, // MOVSX_rr_32
530 386053U, // MOVSX_rr_32_16
531 402437U, // MOVSX_rr_32_8
532 402437U, // MOVSX_rr_8
533 1074181U, // MOV_32_64
534 1074181U, // MOV_ri
535 1074181U, // MOV_ri_32
536 1074181U, // MOV_rr
537 1074181U, // MOV_rr_32
538 410629U, // MUL_ri
539 410629U, // MUL_ri_32
540 410629U, // MUL_rr
541 410629U, // MUL_rr_32
542 418821U, // NEG_32
543 418821U, // NEG_64
544 156743U, // NOP
545 427013U, // OR_ri
546 427013U, // OR_ri_32
547 427013U, // OR_rr
548 427013U, // OR_rr_32
549 698U, // RET
550 435205U, // SDIV_ri
551 435205U, // SDIV_ri_32
552 435205U, // SDIV_rr
553 435205U, // SDIV_rr_32
554 443397U, // SLL_ri
555 443397U, // SLL_ri_32
556 443397U, // SLL_rr
557 443397U, // SLL_rr_32
558 451589U, // SMOD_ri
559 451589U, // SMOD_ri_32
560 451589U, // SMOD_rr
561 451589U, // SMOD_rr_32
562 459781U, // SRA_ri
563 459781U, // SRA_ri_32
564 459781U, // SRA_rr
565 459781U, // SRA_rr_32
566 467973U, // SRL_ri
567 467973U, // SRL_ri_32
568 467973U, // SRL_rr
569 467973U, // SRL_rr_32
570 479547U, // STB
571 479547U, // STB32
572 487717U, // STBREL32
573 479547U, // STB_imm
574 479482U, // STD
575 487646U, // STDREL
576 479482U, // STD_imm
577 479515U, // STH
578 479515U, // STH32
579 487684U, // STHREL32
580 479515U, // STH_imm
581 479444U, // STW
582 479444U, // STW32
583 487608U, // STWREL32
584 479444U, // STW_imm
585 492549U, // SUB_ri
586 492549U, // SUB_ri_32
587 492549U, // SUB_rr
588 492549U, // SUB_rr_32
589 504053U, // XADDD
590 504015U, // XADDW
591 504015U, // XADDW32
592 512245U, // XANDD
593 512207U, // XANDW32
594 517125U, // XCHGD
595 525317U, // XCHGW32
596 533509U, // XFADDD
597 541701U, // XFADDW32
598 549893U, // XFANDD
599 558085U, // XFANDW32
600 566277U, // XFORD
601 574469U, // XFORW32
602 582661U, // XFXORD
603 590853U, // XFXORW32
604 602357U, // XORD
605 602319U, // XORW32
606 607237U, // XOR_ri
607 607237U, // XOR_ri_32
608 607237U, // XOR_rr
609 607237U, // XOR_rr_32
610 618741U, // XXORD
611 618703U, // XXORW32
612 };
613
614 // Emit the opcode for the instruction.
615 uint32_t Bits = 0;
616 Bits |= OpInfo0[MI.getOpcode()] << 0;
617 if (Bits == 0)
618 return {nullptr, Bits};
619 return {AsmStrs+(Bits & 1023)-1, Bits};
620
621}
622/// printInstruction - This method is automatically generated by tablegen
623/// from the instruction set description.
624LLVM_NO_PROFILE_INSTRUMENT_FUNCTION
625void BPFInstPrinter::printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O) {
626 O << "\t";
627
628 auto MnemonicInfo = getMnemonic(MI: *MI);
629
630 O << MnemonicInfo.first;
631
632 uint32_t Bits = MnemonicInfo.second;
633 assert(Bits != 0 && "Cannot print this instruction.");
634
635 // Fragment 0 encoded into 3 bits for 5 unique commands.
636 switch ((Bits >> 10) & 7) {
637 default: llvm_unreachable("Invalid command number.");
638 case 0:
639 // DBG_VALUE, DBG_VALUE_LIST, DBG_INSTR_REF, DBG_PHI, DBG_LABEL, BUNDLE, ...
640 return;
641 break;
642 case 1:
643 // ADJCALLSTACKDOWN, ADJCALLSTACKUP, FI_ri, LOAD_STACK_ARG_PSEUDO, MEMCPY...
644 printOperand(MI, OpNo: 0, O);
645 break;
646 case 2:
647 // CMPXCHGD, CMPXCHGW32
648 printMemOperand(MI, OpNo: 0, O);
649 break;
650 case 3:
651 // JCOND, JMP, JMPL
652 printBrTargetOperand(MI, OpNo: 0, O);
653 return;
654 break;
655 case 4:
656 // STB, STB32, STBREL32, STB_imm, STD, STDREL, STD_imm, STH, STH32, STHRE...
657 printMemOperand(MI, OpNo: 1, O);
658 break;
659 }
660
661
662 // Fragment 1 encoded into 7 bits for 76 unique commands.
663 switch ((Bits >> 13) & 127) {
664 default: llvm_unreachable("Invalid command number.");
665 case 0:
666 // ADJCALLSTACKDOWN, ADJCALLSTACKUP
667 O << ' ';
668 printOperand(MI, OpNo: 1, O);
669 return;
670 break;
671 case 1:
672 // FI_ri, LOAD_STACK_ARG_PSEUDO, STORE_STACK_ARG_IMM_PSEUDO, STORE_STACK_...
673 O << ", ";
674 break;
675 case 2:
676 // MEMCPY
677 O << ", src: ";
678 printOperand(MI, OpNo: 1, O);
679 O << ", len: ";
680 printOperand(MI, OpNo: 2, O);
681 O << ", align: ";
682 printOperand(MI, OpNo: 3, O);
683 return;
684 break;
685 case 3:
686 // Select, Select_32, Select_32_64, Select_64_32, Select_Ri, Select_Ri_32...
687 O << " = ";
688 break;
689 case 4:
690 // ADDR_SPACE_CAST
691 O << " = addr_space_cast(";
692 printOperand(MI, OpNo: 1, O);
693 O << ", ";
694 printOperand(MI, OpNo: 2, O);
695 O << ", ";
696 printOperand(MI, OpNo: 3, O);
697 O << ')';
698 return;
699 break;
700 case 5:
701 // ADD_ri, ADD_ri_32, ADD_rr, ADD_rr_32
702 O << " += ";
703 printOperand(MI, OpNo: 2, O);
704 return;
705 break;
706 case 6:
707 // AND_ri, AND_ri_32, AND_rr, AND_rr_32
708 O << " &= ";
709 printOperand(MI, OpNo: 2, O);
710 return;
711 break;
712 case 7:
713 // BE16
714 O << " = be16 ";
715 printOperand(MI, OpNo: 1, O);
716 return;
717 break;
718 case 8:
719 // BE32
720 O << " = be32 ";
721 printOperand(MI, OpNo: 1, O);
722 return;
723 break;
724 case 9:
725 // BE64
726 O << " = be64 ";
727 printOperand(MI, OpNo: 1, O);
728 return;
729 break;
730 case 10:
731 // BSWAP16
732 O << " = bswap16 ";
733 printOperand(MI, OpNo: 1, O);
734 return;
735 break;
736 case 11:
737 // BSWAP32
738 O << " = bswap32 ";
739 printOperand(MI, OpNo: 1, O);
740 return;
741 break;
742 case 12:
743 // BSWAP64
744 O << " = bswap64 ";
745 printOperand(MI, OpNo: 1, O);
746 return;
747 break;
748 case 13:
749 // CMPXCHGD
750 O << ", r0, ";
751 printOperand(MI, OpNo: 2, O);
752 O << ')';
753 return;
754 break;
755 case 14:
756 // CMPXCHGW32
757 O << ", w0, ";
758 printOperand(MI, OpNo: 2, O);
759 O << ')';
760 return;
761 break;
762 case 15:
763 // CORE_LD32
764 O << " = core_ld32(";
765 printImm64Operand(MI, OpNo: 1, O);
766 O << ", ";
767 printOperand(MI, OpNo: 2, O);
768 O << ", ";
769 printImm64Operand(MI, OpNo: 3, O);
770 O << ')';
771 return;
772 break;
773 case 16:
774 // CORE_LD64
775 O << " = core_ld64(";
776 printImm64Operand(MI, OpNo: 1, O);
777 O << ", ";
778 printOperand(MI, OpNo: 2, O);
779 O << ", ";
780 printImm64Operand(MI, OpNo: 3, O);
781 O << ')';
782 return;
783 break;
784 case 17:
785 // CORE_SHIFT
786 O << " = core_shift(";
787 printImm64Operand(MI, OpNo: 1, O);
788 O << ", ";
789 printOperand(MI, OpNo: 2, O);
790 O << ", ";
791 printImm64Operand(MI, OpNo: 3, O);
792 O << ')';
793 return;
794 break;
795 case 18:
796 // DIV_ri, DIV_ri_32, DIV_rr, DIV_rr_32
797 O << " /= ";
798 printOperand(MI, OpNo: 2, O);
799 return;
800 break;
801 case 19:
802 // JAL, JALX, JX, NOP
803 return;
804 break;
805 case 20:
806 // JEQ_ri, JEQ_ri_32, JEQ_rr, JEQ_rr_32
807 O << " == ";
808 printOperand(MI, OpNo: 1, O);
809 O << " goto ";
810 printBrTargetOperand(MI, OpNo: 2, O);
811 return;
812 break;
813 case 21:
814 // JNE_ri, JNE_ri_32, JNE_rr, JNE_rr_32
815 O << " != ";
816 printOperand(MI, OpNo: 1, O);
817 O << " goto ";
818 printBrTargetOperand(MI, OpNo: 2, O);
819 return;
820 break;
821 case 22:
822 // JSET_ri, JSET_ri_32, JSET_rr, JSET_rr_32
823 O << " & ";
824 printOperand(MI, OpNo: 1, O);
825 O << " goto ";
826 printBrTargetOperand(MI, OpNo: 2, O);
827 return;
828 break;
829 case 23:
830 // JSGE_ri, JSGE_ri_32, JSGE_rr, JSGE_rr_32
831 O << " s>= ";
832 printOperand(MI, OpNo: 1, O);
833 O << " goto ";
834 printBrTargetOperand(MI, OpNo: 2, O);
835 return;
836 break;
837 case 24:
838 // JSGT_ri, JSGT_ri_32, JSGT_rr, JSGT_rr_32
839 O << " s> ";
840 printOperand(MI, OpNo: 1, O);
841 O << " goto ";
842 printBrTargetOperand(MI, OpNo: 2, O);
843 return;
844 break;
845 case 25:
846 // JSLE_ri, JSLE_ri_32, JSLE_rr, JSLE_rr_32
847 O << " s<= ";
848 printOperand(MI, OpNo: 1, O);
849 O << " goto ";
850 printBrTargetOperand(MI, OpNo: 2, O);
851 return;
852 break;
853 case 26:
854 // JSLT_ri, JSLT_ri_32, JSLT_rr, JSLT_rr_32
855 O << " s< ";
856 printOperand(MI, OpNo: 1, O);
857 O << " goto ";
858 printBrTargetOperand(MI, OpNo: 2, O);
859 return;
860 break;
861 case 27:
862 // JUGE_ri, JUGE_ri_32, JUGE_rr, JUGE_rr_32
863 O << " >= ";
864 printOperand(MI, OpNo: 1, O);
865 O << " goto ";
866 printBrTargetOperand(MI, OpNo: 2, O);
867 return;
868 break;
869 case 28:
870 // JUGT_ri, JUGT_ri_32, JUGT_rr, JUGT_rr_32
871 O << " > ";
872 printOperand(MI, OpNo: 1, O);
873 O << " goto ";
874 printBrTargetOperand(MI, OpNo: 2, O);
875 return;
876 break;
877 case 29:
878 // JULE_ri, JULE_ri_32, JULE_rr, JULE_rr_32
879 O << " <= ";
880 printOperand(MI, OpNo: 1, O);
881 O << " goto ";
882 printBrTargetOperand(MI, OpNo: 2, O);
883 return;
884 break;
885 case 30:
886 // JULT_ri, JULT_ri_32, JULT_rr, JULT_rr_32
887 O << " < ";
888 printOperand(MI, OpNo: 1, O);
889 O << " goto ";
890 printBrTargetOperand(MI, OpNo: 2, O);
891 return;
892 break;
893 case 31:
894 // LDB, LDB32
895 O << " = *(u8 *)(";
896 printMemOperand(MI, OpNo: 1, O);
897 O << ')';
898 return;
899 break;
900 case 32:
901 // LDBACQ32
902 O << " = load_acquire((u8 *)(";
903 printMemOperand(MI, OpNo: 1, O);
904 O << "))";
905 return;
906 break;
907 case 33:
908 // LDBSX
909 O << " = *(s8 *)(";
910 printMemOperand(MI, OpNo: 1, O);
911 O << ')';
912 return;
913 break;
914 case 34:
915 // LDD
916 O << " = *(u64 *)(";
917 printMemOperand(MI, OpNo: 1, O);
918 O << ')';
919 return;
920 break;
921 case 35:
922 // LDDACQ
923 O << " = load_acquire((u64 *)(";
924 printMemOperand(MI, OpNo: 1, O);
925 O << "))";
926 return;
927 break;
928 case 36:
929 // LDH, LDH32
930 O << " = *(u16 *)(";
931 printMemOperand(MI, OpNo: 1, O);
932 O << ')';
933 return;
934 break;
935 case 37:
936 // LDHACQ32
937 O << " = load_acquire((u16 *)(";
938 printMemOperand(MI, OpNo: 1, O);
939 O << "))";
940 return;
941 break;
942 case 38:
943 // LDHSX
944 O << " = *(s16 *)(";
945 printMemOperand(MI, OpNo: 1, O);
946 O << ')';
947 return;
948 break;
949 case 39:
950 // LDW, LDW32
951 O << " = *(u32 *)(";
952 printMemOperand(MI, OpNo: 1, O);
953 O << ')';
954 return;
955 break;
956 case 40:
957 // LDWACQ32
958 O << " = load_acquire((u32 *)(";
959 printMemOperand(MI, OpNo: 1, O);
960 O << "))";
961 return;
962 break;
963 case 41:
964 // LDWSX
965 O << " = *(s32 *)(";
966 printMemOperand(MI, OpNo: 1, O);
967 O << ')';
968 return;
969 break;
970 case 42:
971 // LD_ABS_B, LD_ABS_H, LD_ABS_W, LD_IND_B, LD_IND_H, LD_IND_W
972 O << ']';
973 return;
974 break;
975 case 43:
976 // LE16
977 O << " = le16 ";
978 printOperand(MI, OpNo: 1, O);
979 return;
980 break;
981 case 44:
982 // LE32
983 O << " = le32 ";
984 printOperand(MI, OpNo: 1, O);
985 return;
986 break;
987 case 45:
988 // LE64
989 O << " = le64 ";
990 printOperand(MI, OpNo: 1, O);
991 return;
992 break;
993 case 46:
994 // MOD_ri, MOD_ri_32, MOD_rr, MOD_rr_32
995 O << " %= ";
996 printOperand(MI, OpNo: 2, O);
997 return;
998 break;
999 case 47:
1000 // MOVSX_rr_16, MOVSX_rr_32_16
1001 O << " = (s16)";
1002 printOperand(MI, OpNo: 1, O);
1003 return;
1004 break;
1005 case 48:
1006 // MOVSX_rr_32
1007 O << " = (s32)";
1008 printOperand(MI, OpNo: 1, O);
1009 return;
1010 break;
1011 case 49:
1012 // MOVSX_rr_32_8, MOVSX_rr_8
1013 O << " = (s8)";
1014 printOperand(MI, OpNo: 1, O);
1015 return;
1016 break;
1017 case 50:
1018 // MUL_ri, MUL_ri_32, MUL_rr, MUL_rr_32
1019 O << " *= ";
1020 printOperand(MI, OpNo: 2, O);
1021 return;
1022 break;
1023 case 51:
1024 // NEG_32, NEG_64
1025 O << " = -";
1026 printOperand(MI, OpNo: 1, O);
1027 return;
1028 break;
1029 case 52:
1030 // OR_ri, OR_ri_32, OR_rr, OR_rr_32
1031 O << " |= ";
1032 printOperand(MI, OpNo: 2, O);
1033 return;
1034 break;
1035 case 53:
1036 // SDIV_ri, SDIV_ri_32, SDIV_rr, SDIV_rr_32
1037 O << " s/= ";
1038 printOperand(MI, OpNo: 2, O);
1039 return;
1040 break;
1041 case 54:
1042 // SLL_ri, SLL_ri_32, SLL_rr, SLL_rr_32
1043 O << " <<= ";
1044 printOperand(MI, OpNo: 2, O);
1045 return;
1046 break;
1047 case 55:
1048 // SMOD_ri, SMOD_ri_32, SMOD_rr, SMOD_rr_32
1049 O << " s%= ";
1050 printOperand(MI, OpNo: 2, O);
1051 return;
1052 break;
1053 case 56:
1054 // SRA_ri, SRA_ri_32, SRA_rr, SRA_rr_32
1055 O << " s>>= ";
1056 printOperand(MI, OpNo: 2, O);
1057 return;
1058 break;
1059 case 57:
1060 // SRL_ri, SRL_ri_32, SRL_rr, SRL_rr_32
1061 O << " >>= ";
1062 printOperand(MI, OpNo: 2, O);
1063 return;
1064 break;
1065 case 58:
1066 // STB, STB32, STB_imm, STD, STD_imm, STH, STH32, STH_imm, STW, STW32, ST...
1067 O << ") = ";
1068 printOperand(MI, OpNo: 0, O);
1069 return;
1070 break;
1071 case 59:
1072 // STBREL32, STDREL, STHREL32, STWREL32
1073 O << "), ";
1074 printOperand(MI, OpNo: 0, O);
1075 O << ')';
1076 return;
1077 break;
1078 case 60:
1079 // SUB_ri, SUB_ri_32, SUB_rr, SUB_rr_32
1080 O << " -= ";
1081 printOperand(MI, OpNo: 2, O);
1082 return;
1083 break;
1084 case 61:
1085 // XADDD, XADDW, XADDW32
1086 O << ") += ";
1087 printOperand(MI, OpNo: 3, O);
1088 return;
1089 break;
1090 case 62:
1091 // XANDD, XANDW32
1092 O << ") &= ";
1093 printOperand(MI, OpNo: 3, O);
1094 return;
1095 break;
1096 case 63:
1097 // XCHGD
1098 O << " = xchg_64(";
1099 printMemOperand(MI, OpNo: 1, O);
1100 O << ", ";
1101 printOperand(MI, OpNo: 3, O);
1102 O << ')';
1103 return;
1104 break;
1105 case 64:
1106 // XCHGW32
1107 O << " = xchg32_32(";
1108 printMemOperand(MI, OpNo: 1, O);
1109 O << ", ";
1110 printOperand(MI, OpNo: 3, O);
1111 O << ')';
1112 return;
1113 break;
1114 case 65:
1115 // XFADDD
1116 O << " = atomic_fetch_add((u64 *)(";
1117 printMemOperand(MI, OpNo: 1, O);
1118 O << "), ";
1119 printOperand(MI, OpNo: 3, O);
1120 O << ')';
1121 return;
1122 break;
1123 case 66:
1124 // XFADDW32
1125 O << " = atomic_fetch_add((u32 *)(";
1126 printMemOperand(MI, OpNo: 1, O);
1127 O << "), ";
1128 printOperand(MI, OpNo: 3, O);
1129 O << ')';
1130 return;
1131 break;
1132 case 67:
1133 // XFANDD
1134 O << " = atomic_fetch_and((u64 *)(";
1135 printMemOperand(MI, OpNo: 1, O);
1136 O << "), ";
1137 printOperand(MI, OpNo: 3, O);
1138 O << ')';
1139 return;
1140 break;
1141 case 68:
1142 // XFANDW32
1143 O << " = atomic_fetch_and((u32 *)(";
1144 printMemOperand(MI, OpNo: 1, O);
1145 O << "), ";
1146 printOperand(MI, OpNo: 3, O);
1147 O << ')';
1148 return;
1149 break;
1150 case 69:
1151 // XFORD
1152 O << " = atomic_fetch_or((u64 *)(";
1153 printMemOperand(MI, OpNo: 1, O);
1154 O << "), ";
1155 printOperand(MI, OpNo: 3, O);
1156 O << ')';
1157 return;
1158 break;
1159 case 70:
1160 // XFORW32
1161 O << " = atomic_fetch_or((u32 *)(";
1162 printMemOperand(MI, OpNo: 1, O);
1163 O << "), ";
1164 printOperand(MI, OpNo: 3, O);
1165 O << ')';
1166 return;
1167 break;
1168 case 71:
1169 // XFXORD
1170 O << " = atomic_fetch_xor((u64 *)(";
1171 printMemOperand(MI, OpNo: 1, O);
1172 O << "), ";
1173 printOperand(MI, OpNo: 3, O);
1174 O << ')';
1175 return;
1176 break;
1177 case 72:
1178 // XFXORW32
1179 O << " = atomic_fetch_xor((u32 *)(";
1180 printMemOperand(MI, OpNo: 1, O);
1181 O << "), ";
1182 printOperand(MI, OpNo: 3, O);
1183 O << ')';
1184 return;
1185 break;
1186 case 73:
1187 // XORD, XORW32
1188 O << ") |= ";
1189 printOperand(MI, OpNo: 3, O);
1190 return;
1191 break;
1192 case 74:
1193 // XOR_ri, XOR_ri_32, XOR_rr, XOR_rr_32
1194 O << " ^= ";
1195 printOperand(MI, OpNo: 2, O);
1196 return;
1197 break;
1198 case 75:
1199 // XXORD, XXORW32
1200 O << ") ^= ";
1201 printOperand(MI, OpNo: 3, O);
1202 return;
1203 break;
1204 }
1205
1206
1207 // Fragment 2 encoded into 2 bits for 3 unique commands.
1208 switch ((Bits >> 20) & 3) {
1209 default: llvm_unreachable("Invalid command number.");
1210 case 0:
1211 // FI_ri
1212 printMemOperand(MI, OpNo: 1, O);
1213 return;
1214 break;
1215 case 1:
1216 // LOAD_STACK_ARG_PSEUDO, STORE_STACK_ARG_IMM_PSEUDO, STORE_STACK_ARG_PSE...
1217 printOperand(MI, OpNo: 1, O);
1218 break;
1219 case 2:
1220 // CORE_ST, LD_imm64
1221 printImm64Operand(MI, OpNo: 1, O);
1222 break;
1223 }
1224
1225
1226 // Fragment 3 encoded into 2 bits for 4 unique commands.
1227 switch ((Bits >> 22) & 3) {
1228 default: llvm_unreachable("Invalid command number.");
1229 case 0:
1230 // LOAD_STACK_ARG_PSEUDO, STORE_STACK_ARG_IMM_PSEUDO, STORE_STACK_ARG_PSE...
1231 return;
1232 break;
1233 case 1:
1234 // Select, Select_32, Select_32_64, Select_64_32, Select_Ri, Select_Ri_32...
1235 O << ' ';
1236 printOperand(MI, OpNo: 3, O);
1237 O << ' ';
1238 printOperand(MI, OpNo: 2, O);
1239 O << " ? ";
1240 printOperand(MI, OpNo: 4, O);
1241 O << " : ";
1242 printOperand(MI, OpNo: 5, O);
1243 return;
1244 break;
1245 case 2:
1246 // CORE_ST, LD_pseudo
1247 O << ", ";
1248 break;
1249 case 3:
1250 // LD_imm64
1251 O << " ll";
1252 return;
1253 break;
1254 }
1255
1256
1257 // Fragment 4 encoded into 1 bits for 2 unique commands.
1258 if ((Bits >> 24) & 1) {
1259 // LD_pseudo
1260 printImm64Operand(MI, OpNo: 2, O);
1261 return;
1262 } else {
1263 // CORE_ST
1264 printOperand(MI, OpNo: 2, O);
1265 O << ", ";
1266 printImm64Operand(MI, OpNo: 3, O);
1267 O << ')';
1268 return;
1269 }
1270
1271}
1272
1273
1274/// getRegisterName - This method is automatically generated by tblgen
1275/// from the register set description. This returns the assembler name
1276/// for the specified register.
1277const char *BPFInstPrinter::getRegisterName(MCRegister Reg) {
1278 unsigned RegNo = Reg.id();
1279 assert(RegNo && RegNo < 25 && "Invalid register number!");
1280
1281
1282#ifdef __GNUC__
1283#pragma GCC diagnostic push
1284#pragma GCC diagnostic ignored "-Woverlength-strings"
1285#endif
1286 static const char AsmStrs[] = {
1287 /* 0 */ "r10\000"
1288 /* 4 */ "w10\000"
1289 /* 8 */ "r0\000"
1290 /* 11 */ "w0\000"
1291 /* 14 */ "r11\000"
1292 /* 18 */ "w11\000"
1293 /* 22 */ "r1\000"
1294 /* 25 */ "w1\000"
1295 /* 28 */ "r2\000"
1296 /* 31 */ "w2\000"
1297 /* 34 */ "r3\000"
1298 /* 37 */ "w3\000"
1299 /* 40 */ "r4\000"
1300 /* 43 */ "w4\000"
1301 /* 46 */ "r5\000"
1302 /* 49 */ "w5\000"
1303 /* 52 */ "r6\000"
1304 /* 55 */ "w6\000"
1305 /* 58 */ "r7\000"
1306 /* 61 */ "w7\000"
1307 /* 64 */ "r8\000"
1308 /* 67 */ "w8\000"
1309 /* 70 */ "r9\000"
1310 /* 73 */ "w9\000"
1311};
1312#ifdef __GNUC__
1313#pragma GCC diagnostic pop
1314#endif
1315
1316 static const uint8_t RegAsmOffset[] = {
1317 8, 22, 28, 34, 40, 46, 52, 58, 64, 70, 0, 14, 11, 25,
1318 31, 37, 43, 49, 55, 61, 67, 73, 4, 18,
1319 };
1320
1321 assert (*(AsmStrs+RegAsmOffset[RegNo-1]) &&
1322 "Invalid alt name index for register!");
1323 return AsmStrs+RegAsmOffset[RegNo-1];
1324}
1325
1326#ifdef PRINT_ALIAS_INSTR
1327#undef PRINT_ALIAS_INSTR
1328
1329bool BPFInstPrinter::printAliasInstr(const MCInst *MI, uint64_t Address, raw_ostream &OS) {
1330 return false;
1331}
1332
1333#endif // PRINT_ALIAS_INSTR
1334