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