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