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