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