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