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_FCEIL
344 0U, // G_FCOS
345 0U, // G_FSIN
346 0U, // G_FSINCOS
347 0U, // G_FTAN
348 0U, // G_FACOS
349 0U, // G_FASIN
350 0U, // G_FATAN
351 0U, // G_FATAN2
352 0U, // G_FCOSH
353 0U, // G_FSINH
354 0U, // G_FTANH
355 0U, // G_FSQRT
356 0U, // G_FFLOOR
357 0U, // G_FRINT
358 0U, // G_FNEARBYINT
359 0U, // G_ADDRSPACE_CAST
360 0U, // G_BLOCK_ADDR
361 0U, // G_JUMP_TABLE
362 0U, // G_DYN_STACKALLOC
363 0U, // G_STACKSAVE
364 0U, // G_STACKRESTORE
365 0U, // G_STRICT_FADD
366 0U, // G_STRICT_FSUB
367 0U, // G_STRICT_FMUL
368 0U, // G_STRICT_FDIV
369 0U, // G_STRICT_FREM
370 0U, // G_STRICT_FMA
371 0U, // G_STRICT_FSQRT
372 0U, // G_STRICT_FLDEXP
373 0U, // G_STRICT_FCMP
374 0U, // G_STRICT_FCMPS
375 0U, // G_READ_REGISTER
376 0U, // G_WRITE_REGISTER
377 0U, // G_MEMCPY
378 0U, // G_MEMCPY_INLINE
379 0U, // G_MEMMOVE
380 0U, // G_MEMSET
381 0U, // G_BZERO
382 0U, // G_MEMSET_INLINE
383 0U, // G_TRAP
384 0U, // G_DEBUGTRAP
385 0U, // G_UBSANTRAP
386 0U, // G_VECREDUCE_SEQ_FADD
387 0U, // G_VECREDUCE_SEQ_FMUL
388 0U, // G_VECREDUCE_FADD
389 0U, // G_VECREDUCE_FMUL
390 0U, // G_VECREDUCE_FMAX
391 0U, // G_VECREDUCE_FMIN
392 0U, // G_VECREDUCE_FMAXIMUM
393 0U, // G_VECREDUCE_FMINIMUM
394 0U, // G_VECREDUCE_FMAXIMUMNUM
395 0U, // G_VECREDUCE_FMINIMUMNUM
396 0U, // G_VECREDUCE_ADD
397 0U, // G_VECREDUCE_MUL
398 0U, // G_VECREDUCE_AND
399 0U, // G_VECREDUCE_OR
400 0U, // G_VECREDUCE_XOR
401 0U, // G_VECREDUCE_SMAX
402 0U, // G_VECREDUCE_SMIN
403 0U, // G_VECREDUCE_UMAX
404 0U, // G_VECREDUCE_UMIN
405 0U, // G_SBFX
406 0U, // G_UBFX
407 1114U, // ADJCALLSTACKDOWN
408 1150U, // ADJCALLSTACKUP
409 9217U, // FI_ri
410 0U, // LDIMM64
411 1057798U, // LOAD_STACK_ARG_PSEUDO
412 17484U, // MEMCPY
413 1057831U, // STORE_STACK_ARG_IMM_PSEUDO
414 1057814U, // STORE_STACK_ARG_PSEUDO
415 5268589U, // Select
416 5268589U, // Select_32
417 5268589U, // Select_32_64
418 5268589U, // Select_64_32
419 5268589U, // Select_Ri
420 5268589U, // Select_Ri_32
421 5268589U, // Select_Ri_32_64
422 5268589U, // Select_Ri_64_32
423 33797U, // ADDR_SPACE_CAST
424 41989U, // ADD_ri
425 41989U, // ADD_ri_32
426 41989U, // ADD_rr
427 41989U, // ADD_rr_32
428 50181U, // AND_ri
429 50181U, // AND_ri_32
430 50181U, // AND_rr
431 50181U, // AND_rr_32
432 58373U, // BE16
433 66565U, // BE32
434 74757U, // BE64
435 82949U, // BSWAP16
436 91141U, // BSWAP32
437 99333U, // BSWAP64
438 108887U, // CMPXCHGD
439 117060U, // CMPXCHGW32
440 123909U, // CORE_LD32
441 132101U, // CORE_LD64
442 140293U, // CORE_SHIFT
443 10495336U, // CORE_ST
444 148485U, // DIV_ri
445 148485U, // DIV_ri_32
446 148485U, // DIV_rr
447 148485U, // DIV_rr_32
448 156819U, // JAL
449 156842U, // JALX
450 3232U, // JCOND
451 165007U, // JEQ_ri
452 165007U, // JEQ_ri_32
453 165007U, // JEQ_rr
454 165007U, // JEQ_rr_32
455 3236U, // JMP
456 3225U, // JMPL
457 173199U, // JNE_ri
458 173199U, // JNE_ri_32
459 173199U, // JNE_rr
460 173199U, // JNE_rr_32
461 181391U, // JSET_ri
462 181391U, // JSET_ri_32
463 181391U, // JSET_rr
464 181391U, // JSET_rr_32
465 189583U, // JSGE_ri
466 189583U, // JSGE_ri_32
467 189583U, // JSGE_rr
468 189583U, // JSGE_rr_32
469 197775U, // JSGT_ri
470 197775U, // JSGT_ri_32
471 197775U, // JSGT_rr
472 197775U, // JSGT_rr_32
473 205967U, // JSLE_ri
474 205967U, // JSLE_ri_32
475 205967U, // JSLE_rr
476 205967U, // JSLE_rr_32
477 214159U, // JSLT_ri
478 214159U, // JSLT_ri_32
479 214159U, // JSLT_rr
480 214159U, // JSLT_rr_32
481 222351U, // JUGE_ri
482 222351U, // JUGE_ri_32
483 222351U, // JUGE_rr
484 222351U, // JUGE_rr_32
485 230543U, // JUGT_ri
486 230543U, // JUGT_ri_32
487 230543U, // JUGT_rr
488 230543U, // JUGT_rr_32
489 238735U, // JULE_ri
490 238735U, // JULE_ri_32
491 238735U, // JULE_rr
492 238735U, // JULE_rr_32
493 246927U, // JULT_ri
494 246927U, // JULT_ri_32
495 246927U, // JULT_rr
496 246927U, // JULT_rr_32
497 156849U, // JX
498 254981U, // LDB
499 254981U, // LDB32
500 263173U, // LDBACQ32
501 271365U, // LDBSX
502 279557U, // LDD
503 287749U, // LDDACQ
504 295941U, // LDH
505 295941U, // LDH32
506 304133U, // LDHACQ32
507 312325U, // LDHSX
508 320517U, // LDW
509 320517U, // LDW32
510 328709U, // LDWACQ32
511 336901U, // LDWSX
512 345755U, // LD_ABS_B
513 345737U, // LD_ABS_H
514 345719U, // LD_ABS_W
515 345755U, // LD_IND_B
516 345737U, // LD_IND_H
517 345719U, // LD_IND_W
518 14705669U, // LD_imm64
519 26223676U, // LD_pseudo
520 353285U, // LE16
521 361477U, // LE32
522 369669U, // LE64
523 377861U, // MOD_ri
524 377861U, // MOD_ri_32
525 377861U, // MOD_rr
526 377861U, // MOD_rr_32
527 386053U, // MOVSX_rr_16
528 394245U, // MOVSX_rr_32
529 386053U, // MOVSX_rr_32_16
530 402437U, // MOVSX_rr_32_8
531 402437U, // MOVSX_rr_8
532 1074181U, // MOV_32_64
533 1074181U, // MOV_ri
534 1074181U, // MOV_ri_32
535 1074181U, // MOV_rr
536 1074181U, // MOV_rr_32
537 410629U, // MUL_ri
538 410629U, // MUL_ri_32
539 410629U, // MUL_rr
540 410629U, // MUL_rr_32
541 418821U, // NEG_32
542 418821U, // NEG_64
543 156743U, // NOP
544 427013U, // OR_ri
545 427013U, // OR_ri_32
546 427013U, // OR_rr
547 427013U, // OR_rr_32
548 698U, // RET
549 435205U, // SDIV_ri
550 435205U, // SDIV_ri_32
551 435205U, // SDIV_rr
552 435205U, // SDIV_rr_32
553 443397U, // SLL_ri
554 443397U, // SLL_ri_32
555 443397U, // SLL_rr
556 443397U, // SLL_rr_32
557 451589U, // SMOD_ri
558 451589U, // SMOD_ri_32
559 451589U, // SMOD_rr
560 451589U, // SMOD_rr_32
561 459781U, // SRA_ri
562 459781U, // SRA_ri_32
563 459781U, // SRA_rr
564 459781U, // SRA_rr_32
565 467973U, // SRL_ri
566 467973U, // SRL_ri_32
567 467973U, // SRL_rr
568 467973U, // SRL_rr_32
569 479547U, // STB
570 479547U, // STB32
571 487717U, // STBREL32
572 479547U, // STB_imm
573 479482U, // STD
574 487646U, // STDREL
575 479482U, // STD_imm
576 479515U, // STH
577 479515U, // STH32
578 487684U, // STHREL32
579 479515U, // STH_imm
580 479444U, // STW
581 479444U, // STW32
582 487608U, // STWREL32
583 479444U, // STW_imm
584 492549U, // SUB_ri
585 492549U, // SUB_ri_32
586 492549U, // SUB_rr
587 492549U, // SUB_rr_32
588 504053U, // XADDD
589 504015U, // XADDW
590 504015U, // XADDW32
591 512245U, // XANDD
592 512207U, // XANDW32
593 517125U, // XCHGD
594 525317U, // XCHGW32
595 533509U, // XFADDD
596 541701U, // XFADDW32
597 549893U, // XFANDD
598 558085U, // XFANDW32
599 566277U, // XFORD
600 574469U, // XFORW32
601 582661U, // XFXORD
602 590853U, // XFXORW32
603 602357U, // XORD
604 602319U, // XORW32
605 607237U, // XOR_ri
606 607237U, // XOR_ri_32
607 607237U, // XOR_rr
608 607237U, // XOR_rr_32
609 618741U, // XXORD
610 618703U, // XXORW32
611 };
612
613 // Emit the opcode for the instruction.
614 uint32_t Bits = 0;
615 Bits |= OpInfo0[MI.getOpcode()] << 0;
616 if (Bits == 0)
617 return {nullptr, Bits};
618 return {AsmStrs+(Bits & 1023)-1, Bits};
619
620}
621/// printInstruction - This method is automatically generated by tablegen
622/// from the instruction set description.
623LLVM_NO_PROFILE_INSTRUMENT_FUNCTION
624void BPFInstPrinter::printInstruction(const MCInst *MI, uint64_t Address, raw_ostream &O) {
625 O << "\t";
626
627 auto MnemonicInfo = getMnemonic(MI: *MI);
628
629 O << MnemonicInfo.first;
630
631 uint32_t Bits = MnemonicInfo.second;
632 assert(Bits != 0 && "Cannot print this instruction.");
633
634 // Fragment 0 encoded into 3 bits for 5 unique commands.
635 switch ((Bits >> 10) & 7) {
636 default: llvm_unreachable("Invalid command number.");
637 case 0:
638 // DBG_VALUE, DBG_VALUE_LIST, DBG_INSTR_REF, DBG_PHI, DBG_LABEL, BUNDLE, ...
639 return;
640 break;
641 case 1:
642 // ADJCALLSTACKDOWN, ADJCALLSTACKUP, FI_ri, LOAD_STACK_ARG_PSEUDO, MEMCPY...
643 printOperand(MI, OpNo: 0, O);
644 break;
645 case 2:
646 // CMPXCHGD, CMPXCHGW32
647 printMemOperand(MI, OpNo: 0, O);
648 break;
649 case 3:
650 // JCOND, JMP, JMPL
651 printBrTargetOperand(MI, OpNo: 0, O);
652 return;
653 break;
654 case 4:
655 // STB, STB32, STBREL32, STB_imm, STD, STDREL, STD_imm, STH, STH32, STHRE...
656 printMemOperand(MI, OpNo: 1, O);
657 break;
658 }
659
660
661 // Fragment 1 encoded into 7 bits for 76 unique commands.
662 switch ((Bits >> 13) & 127) {
663 default: llvm_unreachable("Invalid command number.");
664 case 0:
665 // ADJCALLSTACKDOWN, ADJCALLSTACKUP
666 O << ' ';
667 printOperand(MI, OpNo: 1, O);
668 return;
669 break;
670 case 1:
671 // FI_ri, LOAD_STACK_ARG_PSEUDO, STORE_STACK_ARG_IMM_PSEUDO, STORE_STACK_...
672 O << ", ";
673 break;
674 case 2:
675 // MEMCPY
676 O << ", src: ";
677 printOperand(MI, OpNo: 1, O);
678 O << ", len: ";
679 printOperand(MI, OpNo: 2, O);
680 O << ", align: ";
681 printOperand(MI, OpNo: 3, O);
682 return;
683 break;
684 case 3:
685 // Select, Select_32, Select_32_64, Select_64_32, Select_Ri, Select_Ri_32...
686 O << " = ";
687 break;
688 case 4:
689 // ADDR_SPACE_CAST
690 O << " = addr_space_cast(";
691 printOperand(MI, OpNo: 1, O);
692 O << ", ";
693 printOperand(MI, OpNo: 2, O);
694 O << ", ";
695 printOperand(MI, OpNo: 3, O);
696 O << ')';
697 return;
698 break;
699 case 5:
700 // ADD_ri, ADD_ri_32, ADD_rr, ADD_rr_32
701 O << " += ";
702 printOperand(MI, OpNo: 2, O);
703 return;
704 break;
705 case 6:
706 // AND_ri, AND_ri_32, AND_rr, AND_rr_32
707 O << " &= ";
708 printOperand(MI, OpNo: 2, O);
709 return;
710 break;
711 case 7:
712 // BE16
713 O << " = be16 ";
714 printOperand(MI, OpNo: 1, O);
715 return;
716 break;
717 case 8:
718 // BE32
719 O << " = be32 ";
720 printOperand(MI, OpNo: 1, O);
721 return;
722 break;
723 case 9:
724 // BE64
725 O << " = be64 ";
726 printOperand(MI, OpNo: 1, O);
727 return;
728 break;
729 case 10:
730 // BSWAP16
731 O << " = bswap16 ";
732 printOperand(MI, OpNo: 1, O);
733 return;
734 break;
735 case 11:
736 // BSWAP32
737 O << " = bswap32 ";
738 printOperand(MI, OpNo: 1, O);
739 return;
740 break;
741 case 12:
742 // BSWAP64
743 O << " = bswap64 ";
744 printOperand(MI, OpNo: 1, O);
745 return;
746 break;
747 case 13:
748 // CMPXCHGD
749 O << ", r0, ";
750 printOperand(MI, OpNo: 2, O);
751 O << ')';
752 return;
753 break;
754 case 14:
755 // CMPXCHGW32
756 O << ", w0, ";
757 printOperand(MI, OpNo: 2, O);
758 O << ')';
759 return;
760 break;
761 case 15:
762 // CORE_LD32
763 O << " = core_ld32(";
764 printImm64Operand(MI, OpNo: 1, O);
765 O << ", ";
766 printOperand(MI, OpNo: 2, O);
767 O << ", ";
768 printImm64Operand(MI, OpNo: 3, O);
769 O << ')';
770 return;
771 break;
772 case 16:
773 // CORE_LD64
774 O << " = core_ld64(";
775 printImm64Operand(MI, OpNo: 1, O);
776 O << ", ";
777 printOperand(MI, OpNo: 2, O);
778 O << ", ";
779 printImm64Operand(MI, OpNo: 3, O);
780 O << ')';
781 return;
782 break;
783 case 17:
784 // CORE_SHIFT
785 O << " = core_shift(";
786 printImm64Operand(MI, OpNo: 1, O);
787 O << ", ";
788 printOperand(MI, OpNo: 2, O);
789 O << ", ";
790 printImm64Operand(MI, OpNo: 3, O);
791 O << ')';
792 return;
793 break;
794 case 18:
795 // DIV_ri, DIV_ri_32, DIV_rr, DIV_rr_32
796 O << " /= ";
797 printOperand(MI, OpNo: 2, O);
798 return;
799 break;
800 case 19:
801 // JAL, JALX, JX, NOP
802 return;
803 break;
804 case 20:
805 // JEQ_ri, JEQ_ri_32, JEQ_rr, JEQ_rr_32
806 O << " == ";
807 printOperand(MI, OpNo: 1, O);
808 O << " goto ";
809 printBrTargetOperand(MI, OpNo: 2, O);
810 return;
811 break;
812 case 21:
813 // JNE_ri, JNE_ri_32, JNE_rr, JNE_rr_32
814 O << " != ";
815 printOperand(MI, OpNo: 1, O);
816 O << " goto ";
817 printBrTargetOperand(MI, OpNo: 2, O);
818 return;
819 break;
820 case 22:
821 // JSET_ri, JSET_ri_32, JSET_rr, JSET_rr_32
822 O << " & ";
823 printOperand(MI, OpNo: 1, O);
824 O << " goto ";
825 printBrTargetOperand(MI, OpNo: 2, O);
826 return;
827 break;
828 case 23:
829 // JSGE_ri, JSGE_ri_32, JSGE_rr, JSGE_rr_32
830 O << " s>= ";
831 printOperand(MI, OpNo: 1, O);
832 O << " goto ";
833 printBrTargetOperand(MI, OpNo: 2, O);
834 return;
835 break;
836 case 24:
837 // JSGT_ri, JSGT_ri_32, JSGT_rr, JSGT_rr_32
838 O << " s> ";
839 printOperand(MI, OpNo: 1, O);
840 O << " goto ";
841 printBrTargetOperand(MI, OpNo: 2, O);
842 return;
843 break;
844 case 25:
845 // JSLE_ri, JSLE_ri_32, JSLE_rr, JSLE_rr_32
846 O << " s<= ";
847 printOperand(MI, OpNo: 1, O);
848 O << " goto ";
849 printBrTargetOperand(MI, OpNo: 2, O);
850 return;
851 break;
852 case 26:
853 // JSLT_ri, JSLT_ri_32, JSLT_rr, JSLT_rr_32
854 O << " s< ";
855 printOperand(MI, OpNo: 1, O);
856 O << " goto ";
857 printBrTargetOperand(MI, OpNo: 2, O);
858 return;
859 break;
860 case 27:
861 // JUGE_ri, JUGE_ri_32, JUGE_rr, JUGE_rr_32
862 O << " >= ";
863 printOperand(MI, OpNo: 1, O);
864 O << " goto ";
865 printBrTargetOperand(MI, OpNo: 2, O);
866 return;
867 break;
868 case 28:
869 // JUGT_ri, JUGT_ri_32, JUGT_rr, JUGT_rr_32
870 O << " > ";
871 printOperand(MI, OpNo: 1, O);
872 O << " goto ";
873 printBrTargetOperand(MI, OpNo: 2, O);
874 return;
875 break;
876 case 29:
877 // JULE_ri, JULE_ri_32, JULE_rr, JULE_rr_32
878 O << " <= ";
879 printOperand(MI, OpNo: 1, O);
880 O << " goto ";
881 printBrTargetOperand(MI, OpNo: 2, O);
882 return;
883 break;
884 case 30:
885 // JULT_ri, JULT_ri_32, JULT_rr, JULT_rr_32
886 O << " < ";
887 printOperand(MI, OpNo: 1, O);
888 O << " goto ";
889 printBrTargetOperand(MI, OpNo: 2, O);
890 return;
891 break;
892 case 31:
893 // LDB, LDB32
894 O << " = *(u8 *)(";
895 printMemOperand(MI, OpNo: 1, O);
896 O << ')';
897 return;
898 break;
899 case 32:
900 // LDBACQ32
901 O << " = load_acquire((u8 *)(";
902 printMemOperand(MI, OpNo: 1, O);
903 O << "))";
904 return;
905 break;
906 case 33:
907 // LDBSX
908 O << " = *(s8 *)(";
909 printMemOperand(MI, OpNo: 1, O);
910 O << ')';
911 return;
912 break;
913 case 34:
914 // LDD
915 O << " = *(u64 *)(";
916 printMemOperand(MI, OpNo: 1, O);
917 O << ')';
918 return;
919 break;
920 case 35:
921 // LDDACQ
922 O << " = load_acquire((u64 *)(";
923 printMemOperand(MI, OpNo: 1, O);
924 O << "))";
925 return;
926 break;
927 case 36:
928 // LDH, LDH32
929 O << " = *(u16 *)(";
930 printMemOperand(MI, OpNo: 1, O);
931 O << ')';
932 return;
933 break;
934 case 37:
935 // LDHACQ32
936 O << " = load_acquire((u16 *)(";
937 printMemOperand(MI, OpNo: 1, O);
938 O << "))";
939 return;
940 break;
941 case 38:
942 // LDHSX
943 O << " = *(s16 *)(";
944 printMemOperand(MI, OpNo: 1, O);
945 O << ')';
946 return;
947 break;
948 case 39:
949 // LDW, LDW32
950 O << " = *(u32 *)(";
951 printMemOperand(MI, OpNo: 1, O);
952 O << ')';
953 return;
954 break;
955 case 40:
956 // LDWACQ32
957 O << " = load_acquire((u32 *)(";
958 printMemOperand(MI, OpNo: 1, O);
959 O << "))";
960 return;
961 break;
962 case 41:
963 // LDWSX
964 O << " = *(s32 *)(";
965 printMemOperand(MI, OpNo: 1, O);
966 O << ')';
967 return;
968 break;
969 case 42:
970 // LD_ABS_B, LD_ABS_H, LD_ABS_W, LD_IND_B, LD_IND_H, LD_IND_W
971 O << ']';
972 return;
973 break;
974 case 43:
975 // LE16
976 O << " = le16 ";
977 printOperand(MI, OpNo: 1, O);
978 return;
979 break;
980 case 44:
981 // LE32
982 O << " = le32 ";
983 printOperand(MI, OpNo: 1, O);
984 return;
985 break;
986 case 45:
987 // LE64
988 O << " = le64 ";
989 printOperand(MI, OpNo: 1, O);
990 return;
991 break;
992 case 46:
993 // MOD_ri, MOD_ri_32, MOD_rr, MOD_rr_32
994 O << " %= ";
995 printOperand(MI, OpNo: 2, O);
996 return;
997 break;
998 case 47:
999 // MOVSX_rr_16, MOVSX_rr_32_16
1000 O << " = (s16)";
1001 printOperand(MI, OpNo: 1, O);
1002 return;
1003 break;
1004 case 48:
1005 // MOVSX_rr_32
1006 O << " = (s32)";
1007 printOperand(MI, OpNo: 1, O);
1008 return;
1009 break;
1010 case 49:
1011 // MOVSX_rr_32_8, MOVSX_rr_8
1012 O << " = (s8)";
1013 printOperand(MI, OpNo: 1, O);
1014 return;
1015 break;
1016 case 50:
1017 // MUL_ri, MUL_ri_32, MUL_rr, MUL_rr_32
1018 O << " *= ";
1019 printOperand(MI, OpNo: 2, O);
1020 return;
1021 break;
1022 case 51:
1023 // NEG_32, NEG_64
1024 O << " = -";
1025 printOperand(MI, OpNo: 1, O);
1026 return;
1027 break;
1028 case 52:
1029 // OR_ri, OR_ri_32, OR_rr, OR_rr_32
1030 O << " |= ";
1031 printOperand(MI, OpNo: 2, O);
1032 return;
1033 break;
1034 case 53:
1035 // SDIV_ri, SDIV_ri_32, SDIV_rr, SDIV_rr_32
1036 O << " s/= ";
1037 printOperand(MI, OpNo: 2, O);
1038 return;
1039 break;
1040 case 54:
1041 // SLL_ri, SLL_ri_32, SLL_rr, SLL_rr_32
1042 O << " <<= ";
1043 printOperand(MI, OpNo: 2, O);
1044 return;
1045 break;
1046 case 55:
1047 // SMOD_ri, SMOD_ri_32, SMOD_rr, SMOD_rr_32
1048 O << " s%= ";
1049 printOperand(MI, OpNo: 2, O);
1050 return;
1051 break;
1052 case 56:
1053 // SRA_ri, SRA_ri_32, SRA_rr, SRA_rr_32
1054 O << " s>>= ";
1055 printOperand(MI, OpNo: 2, O);
1056 return;
1057 break;
1058 case 57:
1059 // SRL_ri, SRL_ri_32, SRL_rr, SRL_rr_32
1060 O << " >>= ";
1061 printOperand(MI, OpNo: 2, O);
1062 return;
1063 break;
1064 case 58:
1065 // STB, STB32, STB_imm, STD, STD_imm, STH, STH32, STH_imm, STW, STW32, ST...
1066 O << ") = ";
1067 printOperand(MI, OpNo: 0, O);
1068 return;
1069 break;
1070 case 59:
1071 // STBREL32, STDREL, STHREL32, STWREL32
1072 O << "), ";
1073 printOperand(MI, OpNo: 0, O);
1074 O << ')';
1075 return;
1076 break;
1077 case 60:
1078 // SUB_ri, SUB_ri_32, SUB_rr, SUB_rr_32
1079 O << " -= ";
1080 printOperand(MI, OpNo: 2, O);
1081 return;
1082 break;
1083 case 61:
1084 // XADDD, XADDW, XADDW32
1085 O << ") += ";
1086 printOperand(MI, OpNo: 3, O);
1087 return;
1088 break;
1089 case 62:
1090 // XANDD, XANDW32
1091 O << ") &= ";
1092 printOperand(MI, OpNo: 3, O);
1093 return;
1094 break;
1095 case 63:
1096 // XCHGD
1097 O << " = xchg_64(";
1098 printMemOperand(MI, OpNo: 1, O);
1099 O << ", ";
1100 printOperand(MI, OpNo: 3, O);
1101 O << ')';
1102 return;
1103 break;
1104 case 64:
1105 // XCHGW32
1106 O << " = xchg32_32(";
1107 printMemOperand(MI, OpNo: 1, O);
1108 O << ", ";
1109 printOperand(MI, OpNo: 3, O);
1110 O << ')';
1111 return;
1112 break;
1113 case 65:
1114 // XFADDD
1115 O << " = atomic_fetch_add((u64 *)(";
1116 printMemOperand(MI, OpNo: 1, O);
1117 O << "), ";
1118 printOperand(MI, OpNo: 3, O);
1119 O << ')';
1120 return;
1121 break;
1122 case 66:
1123 // XFADDW32
1124 O << " = atomic_fetch_add((u32 *)(";
1125 printMemOperand(MI, OpNo: 1, O);
1126 O << "), ";
1127 printOperand(MI, OpNo: 3, O);
1128 O << ')';
1129 return;
1130 break;
1131 case 67:
1132 // XFANDD
1133 O << " = atomic_fetch_and((u64 *)(";
1134 printMemOperand(MI, OpNo: 1, O);
1135 O << "), ";
1136 printOperand(MI, OpNo: 3, O);
1137 O << ')';
1138 return;
1139 break;
1140 case 68:
1141 // XFANDW32
1142 O << " = atomic_fetch_and((u32 *)(";
1143 printMemOperand(MI, OpNo: 1, O);
1144 O << "), ";
1145 printOperand(MI, OpNo: 3, O);
1146 O << ')';
1147 return;
1148 break;
1149 case 69:
1150 // XFORD
1151 O << " = atomic_fetch_or((u64 *)(";
1152 printMemOperand(MI, OpNo: 1, O);
1153 O << "), ";
1154 printOperand(MI, OpNo: 3, O);
1155 O << ')';
1156 return;
1157 break;
1158 case 70:
1159 // XFORW32
1160 O << " = atomic_fetch_or((u32 *)(";
1161 printMemOperand(MI, OpNo: 1, O);
1162 O << "), ";
1163 printOperand(MI, OpNo: 3, O);
1164 O << ')';
1165 return;
1166 break;
1167 case 71:
1168 // XFXORD
1169 O << " = atomic_fetch_xor((u64 *)(";
1170 printMemOperand(MI, OpNo: 1, O);
1171 O << "), ";
1172 printOperand(MI, OpNo: 3, O);
1173 O << ')';
1174 return;
1175 break;
1176 case 72:
1177 // XFXORW32
1178 O << " = atomic_fetch_xor((u32 *)(";
1179 printMemOperand(MI, OpNo: 1, O);
1180 O << "), ";
1181 printOperand(MI, OpNo: 3, O);
1182 O << ')';
1183 return;
1184 break;
1185 case 73:
1186 // XORD, XORW32
1187 O << ") |= ";
1188 printOperand(MI, OpNo: 3, O);
1189 return;
1190 break;
1191 case 74:
1192 // XOR_ri, XOR_ri_32, XOR_rr, XOR_rr_32
1193 O << " ^= ";
1194 printOperand(MI, OpNo: 2, O);
1195 return;
1196 break;
1197 case 75:
1198 // XXORD, XXORW32
1199 O << ") ^= ";
1200 printOperand(MI, OpNo: 3, O);
1201 return;
1202 break;
1203 }
1204
1205
1206 // Fragment 2 encoded into 2 bits for 3 unique commands.
1207 switch ((Bits >> 20) & 3) {
1208 default: llvm_unreachable("Invalid command number.");
1209 case 0:
1210 // FI_ri
1211 printMemOperand(MI, OpNo: 1, O);
1212 return;
1213 break;
1214 case 1:
1215 // LOAD_STACK_ARG_PSEUDO, STORE_STACK_ARG_IMM_PSEUDO, STORE_STACK_ARG_PSE...
1216 printOperand(MI, OpNo: 1, O);
1217 break;
1218 case 2:
1219 // CORE_ST, LD_imm64
1220 printImm64Operand(MI, OpNo: 1, O);
1221 break;
1222 }
1223
1224
1225 // Fragment 3 encoded into 2 bits for 4 unique commands.
1226 switch ((Bits >> 22) & 3) {
1227 default: llvm_unreachable("Invalid command number.");
1228 case 0:
1229 // LOAD_STACK_ARG_PSEUDO, STORE_STACK_ARG_IMM_PSEUDO, STORE_STACK_ARG_PSE...
1230 return;
1231 break;
1232 case 1:
1233 // Select, Select_32, Select_32_64, Select_64_32, Select_Ri, Select_Ri_32...
1234 O << ' ';
1235 printOperand(MI, OpNo: 3, O);
1236 O << ' ';
1237 printOperand(MI, OpNo: 2, O);
1238 O << " ? ";
1239 printOperand(MI, OpNo: 4, O);
1240 O << " : ";
1241 printOperand(MI, OpNo: 5, O);
1242 return;
1243 break;
1244 case 2:
1245 // CORE_ST, LD_pseudo
1246 O << ", ";
1247 break;
1248 case 3:
1249 // LD_imm64
1250 O << " ll";
1251 return;
1252 break;
1253 }
1254
1255
1256 // Fragment 4 encoded into 1 bits for 2 unique commands.
1257 if ((Bits >> 24) & 1) {
1258 // LD_pseudo
1259 printImm64Operand(MI, OpNo: 2, O);
1260 return;
1261 } else {
1262 // CORE_ST
1263 printOperand(MI, OpNo: 2, O);
1264 O << ", ";
1265 printImm64Operand(MI, OpNo: 3, O);
1266 O << ')';
1267 return;
1268 }
1269
1270}
1271
1272
1273/// getRegisterName - This method is automatically generated by tblgen
1274/// from the register set description. This returns the assembler name
1275/// for the specified register.
1276const char *BPFInstPrinter::getRegisterName(MCRegister Reg) {
1277 unsigned RegNo = Reg.id();
1278 assert(RegNo && RegNo < 25 && "Invalid register number!");
1279
1280
1281#ifdef __GNUC__
1282#pragma GCC diagnostic push
1283#pragma GCC diagnostic ignored "-Woverlength-strings"
1284#endif
1285 static const char AsmStrs[] = {
1286 /* 0 */ "r10\000"
1287 /* 4 */ "w10\000"
1288 /* 8 */ "r0\000"
1289 /* 11 */ "w0\000"
1290 /* 14 */ "r11\000"
1291 /* 18 */ "w11\000"
1292 /* 22 */ "r1\000"
1293 /* 25 */ "w1\000"
1294 /* 28 */ "r2\000"
1295 /* 31 */ "w2\000"
1296 /* 34 */ "r3\000"
1297 /* 37 */ "w3\000"
1298 /* 40 */ "r4\000"
1299 /* 43 */ "w4\000"
1300 /* 46 */ "r5\000"
1301 /* 49 */ "w5\000"
1302 /* 52 */ "r6\000"
1303 /* 55 */ "w6\000"
1304 /* 58 */ "r7\000"
1305 /* 61 */ "w7\000"
1306 /* 64 */ "r8\000"
1307 /* 67 */ "w8\000"
1308 /* 70 */ "r9\000"
1309 /* 73 */ "w9\000"
1310};
1311#ifdef __GNUC__
1312#pragma GCC diagnostic pop
1313#endif
1314
1315 static const uint8_t RegAsmOffset[] = {
1316 8, 22, 28, 34, 40, 46, 52, 58, 64, 70, 0, 14, 11, 25,
1317 31, 37, 43, 49, 55, 61, 67, 73, 4, 18,
1318 };
1319
1320 assert (*(AsmStrs+RegAsmOffset[RegNo-1]) &&
1321 "Invalid alt name index for register!");
1322 return AsmStrs+RegAsmOffset[RegNo-1];
1323}
1324
1325#ifdef PRINT_ALIAS_INSTR
1326#undef PRINT_ALIAS_INSTR
1327
1328bool BPFInstPrinter::printAliasInstr(const MCInst *MI, uint64_t Address, raw_ostream &OS) {
1329 return false;
1330}
1331
1332#endif // PRINT_ALIAS_INSTR
1333