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. |
12 | std::pair<const char *, uint64_t> |
13 | BPFInstPrinter::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. |
591 | LLVM_NO_PROFILE_INSTRUMENT_FUNCTION |
592 | void 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. |
1245 | const 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 | |
1297 | bool BPFInstPrinter::printAliasInstr(const MCInst *MI, uint64_t Address, raw_ostream &OS) { |
1298 | return false; |
1299 | } |
1300 | |
1301 | #endif // PRINT_ALIAS_INSTR |
1302 | |