Lines Matching refs:inst

45 int inst_ARM_is_direct_branch(uint32_t inst)  in inst_ARM_is_direct_branch()  argument
48 if ((inst & 0xf0000000) == 0xf0000000) { in inst_ARM_is_direct_branch()
50 if ((inst & 0xfe000000) == 0xfa000000){ in inst_ARM_is_direct_branch()
55 } else if ((inst & 0x0e000000) == 0x0a000000) { in inst_ARM_is_direct_branch()
63 int inst_ARM_wfiwfe(uint32_t inst) in inst_ARM_wfiwfe() argument
65 if ( ((inst & 0xf0000000) != 0xf0000000) && in inst_ARM_wfiwfe()
66 ((inst & 0x0ffffffe) == 0x0320f002) in inst_ARM_wfiwfe()
73 int inst_ARM_is_indirect_branch(uint32_t inst, struct decode_info *info) in inst_ARM_is_indirect_branch() argument
76 if ((inst & 0xf0000000) == 0xf0000000) { in inst_ARM_is_indirect_branch()
78 if ((inst & 0xfe500000) == 0xf8100000) { in inst_ARM_is_indirect_branch()
83 } else if ((inst & 0x0ff000d0) == 0x01200010) { in inst_ARM_is_indirect_branch()
85 if ((inst & 0xFF) == 0x1E) in inst_ARM_is_indirect_branch()
87 } else if ((inst & 0x0ff000f0) == 0x01200020) { in inst_ARM_is_indirect_branch()
89 } else if ((inst & 0x0e108000) == 0x08108000) { in inst_ARM_is_indirect_branch()
91 if ((inst & 0x0FFFA000) == 0x08BD8000) /* LDMIA SP!,{...,pc} */ in inst_ARM_is_indirect_branch()
93 } else if ((inst & 0x0e50f000) == 0x0410f000) { in inst_ARM_is_indirect_branch()
95 if ( (inst & 0x01ff0000) == 0x009D0000) in inst_ARM_is_indirect_branch()
97 } else if ((inst & 0x0e50f010) == 0x0610f000) { in inst_ARM_is_indirect_branch()
99 } else if ((inst & 0x0fe0f000) == 0x01a0f000) { in inst_ARM_is_indirect_branch()
101 if ((inst & 0x00100FFF) == 0x00E) /* ensure the S=0, LSL #0 variant - i.e plain MOV */ in inst_ARM_is_indirect_branch()
103 } else if ((inst & 0x0f900080) == 0x01000000) { in inst_ARM_is_indirect_branch()
106 } else if ((inst & 0x0f9000f0) == 0x01800090) { in inst_ARM_is_indirect_branch()
109 } else if ((inst & 0x0fb0f000) == 0x0320f000) { in inst_ARM_is_indirect_branch()
112 } else if ((inst & 0x0e00f000) == 0x0200f000) { in inst_ARM_is_indirect_branch()
114 if ((inst & 0x0f90f000) == 0x0310f000) { in inst_ARM_is_indirect_branch()
118 } else if ((inst & 0x0e00f000) == 0x0000f000) { in inst_ARM_is_indirect_branch()
126 int inst_Thumb_is_direct_branch(uint32_t inst, struct decode_info *info) in inst_Thumb_is_direct_branch() argument
129 return inst_Thumb_is_direct_branch_link(inst, &link, &cond, info); in inst_Thumb_is_direct_branch()
132 int inst_Thumb_is_direct_branch_link(uint32_t inst, uint8_t *is_link, uint8_t *is_cond, struct deco… in inst_Thumb_is_direct_branch_link() argument
136 if ((inst & 0xf0000000) == 0xd0000000 && (inst & 0x0e000000) != 0x0e000000) { in inst_Thumb_is_direct_branch_link()
139 } else if ((inst & 0xf8000000) == 0xe0000000) { in inst_Thumb_is_direct_branch_link()
141 } else if ((inst & 0xf800d000) == 0xf0008000 && (inst & 0x03800000) != 0x03800000) { in inst_Thumb_is_direct_branch_link()
144 } else if ((inst & 0xf8009000) == 0xf0009000) { in inst_Thumb_is_direct_branch_link()
146 if (inst & 0x00004000) { in inst_Thumb_is_direct_branch_link()
150 } else if ((inst & 0xf800d001) == 0xf000c000) { in inst_Thumb_is_direct_branch_link()
154 } else if ((inst & 0xf5000000) == 0xb1000000) { in inst_Thumb_is_direct_branch_link()
163 int inst_Thumb_wfiwfe(uint32_t inst) in inst_Thumb_wfiwfe() argument
167 if ((inst & 0xfffffffe) == 0xf3af8002) { in inst_Thumb_wfiwfe()
170 else if ((inst & 0xffef0000) == 0xbf200000) { in inst_Thumb_wfiwfe()
179 int inst_Thumb_is_indirect_branch(uint32_t inst, struct decode_info *info) in inst_Thumb_is_indirect_branch() argument
182 return inst_Thumb_is_indirect_branch_link(inst, &link, info); in inst_Thumb_is_indirect_branch()
185 int inst_Thumb_is_indirect_branch_link(uint32_t inst, uint8_t *is_link, struct decode_info *info) in inst_Thumb_is_indirect_branch_link() argument
190 if ((inst & 0xff000000) == 0x47000000) { in inst_Thumb_is_indirect_branch_link()
192 if (inst & 0x00800000) { in inst_Thumb_is_indirect_branch_link()
196 else if ((inst & 0x00780000) == 0x00700000) { in inst_Thumb_is_indirect_branch_link()
199 } else if ((inst & 0xfff0d000) == 0xf3c08000) { in inst_Thumb_is_indirect_branch_link()
201 } else if ((inst & 0xff000000) == 0xbd000000) { in inst_Thumb_is_indirect_branch_link()
204 } else if ((inst & 0xfd870000) == 0x44870000) { in inst_Thumb_is_indirect_branch_link()
206 if ((inst & 0xffff0000) == 0x46f70000) in inst_Thumb_is_indirect_branch_link()
208 } else if ((inst & 0xfff0ffe0) == 0xe8d0f000) { in inst_Thumb_is_indirect_branch_link()
210 } else if ((inst & 0xffd00000) == 0xe8100000) { in inst_Thumb_is_indirect_branch_link()
212 } else if ((inst & 0xffd00000) == 0xe9900000) { in inst_Thumb_is_indirect_branch_link()
214 } else if ((inst & 0xfff0d000) == 0xf3d08000) { in inst_Thumb_is_indirect_branch_link()
216 } else if ((inst & 0xfff0f000) == 0xf8d0f000) { in inst_Thumb_is_indirect_branch_link()
218 } else if ((inst & 0xff7ff000) == 0xf85ff000) { in inst_Thumb_is_indirect_branch_link()
220 } else if ((inst & 0xfff0f800) == 0xf850f800) { in inst_Thumb_is_indirect_branch_link()
222 if((inst & 0x000f0f00) == 0x000d0b00) in inst_Thumb_is_indirect_branch_link()
224 } else if ((inst & 0xfff0ffc0) == 0xf850f000) { in inst_Thumb_is_indirect_branch_link()
226 } else if ((inst & 0xfe508000) == 0xe8108000) { in inst_Thumb_is_indirect_branch_link()
228 if ((inst & 0x0FFF0000) == 0x08BD0000) /* LDMIA [SP]!, */ in inst_Thumb_is_indirect_branch_link()
236 int inst_A64_is_direct_branch(uint32_t inst, struct decode_info *info) in inst_A64_is_direct_branch() argument
239 return inst_A64_is_direct_branch_link(inst, &link, info); in inst_A64_is_direct_branch()
242 int inst_A64_is_direct_branch_link(uint32_t inst, uint8_t *is_link, struct decode_info *info) in inst_A64_is_direct_branch_link() argument
245 if ((inst & 0x7c000000) == 0x34000000) { in inst_A64_is_direct_branch_link()
247 } else if ((inst & 0xff000000) == 0x54000000) { in inst_A64_is_direct_branch_link()
250 } else if ((inst & 0x7c000000) == 0x14000000) { in inst_A64_is_direct_branch_link()
252 if (inst & 0x80000000) { in inst_A64_is_direct_branch_link()
262 int inst_A64_wfiwfe(uint32_t inst, struct decode_info *info) in inst_A64_wfiwfe() argument
265 if ((inst & 0xffffffdf) == 0xd503205f) in inst_A64_wfiwfe()
272 if ((inst & 0xffffffc0) == 0xd5031000) in inst_A64_wfiwfe()
278 int inst_A64_Tstart(uint32_t inst) in inst_A64_Tstart() argument
280 if ((inst & 0xffffffe0) == 0xd5233060) in inst_A64_Tstart()
285 int inst_A64_is_indirect_branch(uint32_t inst, struct decode_info *info) in inst_A64_is_indirect_branch() argument
288 return inst_A64_is_indirect_branch_link(inst, &link, info); in inst_A64_is_indirect_branch()
291 int inst_A64_is_indirect_branch_link(uint32_t inst, uint8_t *is_link, struct decode_info *info) in inst_A64_is_indirect_branch_link() argument
295 if ((inst & 0xffdffc1f) == 0xd61f0000) { in inst_A64_is_indirect_branch_link()
297 if (inst & 0x00200000) { in inst_A64_is_indirect_branch_link()
301 } else if ((inst & 0xfffffc1f) == 0xd65f0000) { in inst_A64_is_indirect_branch_link()
304 } else if ((inst & 0xffffffff) == 0xd69f03e0) { in inst_A64_is_indirect_branch_link()
309 if ((inst & 0xffdff800) == 0xd71f0800) { in inst_A64_is_indirect_branch_link()
311 if (inst & 0x00200000) { in inst_A64_is_indirect_branch_link()
315 } else if ((inst & 0xffdff81F) == 0xd61f081F) { in inst_A64_is_indirect_branch_link()
317 if (inst & 0x00200000) { in inst_A64_is_indirect_branch_link()
321 } else if ((inst & 0xfffffbff) == 0xd69f0bff) { in inst_A64_is_indirect_branch_link()
324 } else if ((inst & 0xfffffbff) == 0xd65f0bff) { in inst_A64_is_indirect_branch_link()
336 int inst_ARM_branch_destination(uint32_t addr, uint32_t inst, uint32_t *pnpc) in inst_ARM_branch_destination() argument
340 if ((inst & 0x0e000000) == 0x0a000000) { in inst_ARM_branch_destination()
346 npc = addr + 8 + ((int32_t)((inst & 0xffffff) << 8) >> 6); in inst_ARM_branch_destination()
347 if ((inst & 0xf0000000) == 0xf0000000) { in inst_ARM_branch_destination()
349 npc |= ((inst >> 23) & 2); /* apply the H bit */ in inst_ARM_branch_destination()
360 int inst_Thumb_branch_destination(uint32_t addr, uint32_t inst, uint32_t *pnpc) in inst_Thumb_branch_destination() argument
364 if ((inst & 0xf0000000) == 0xd0000000 && (inst & 0x0e000000) != 0x0e000000) { in inst_Thumb_branch_destination()
366 npc = addr + 4 + ((int32_t)((inst & 0x00ff0000) << 8) >> 23); in inst_Thumb_branch_destination()
368 } else if ((inst & 0xf8000000) == 0xe0000000) { in inst_Thumb_branch_destination()
370 npc = addr + 4 + ((int32_t)((inst & 0x07ff0000) << 5) >> 20); in inst_Thumb_branch_destination()
372 } else if ((inst & 0xf800d000) == 0xf0008000 && (inst & 0x03800000) != 0x03800000) { in inst_Thumb_branch_destination()
374 npc = addr + 4 + ((int32_t)(((inst & 0x04000000) << 5) | in inst_Thumb_branch_destination()
375 ((inst & 0x0800) << 19) | in inst_Thumb_branch_destination()
376 ((inst & 0x2000) << 16) | in inst_Thumb_branch_destination()
377 ((inst & 0x003f0000) << 7) | in inst_Thumb_branch_destination()
378 ((inst & 0x000007ff) << 12)) >> 11); in inst_Thumb_branch_destination()
380 } else if ((inst & 0xf8009000) == 0xf0009000) { in inst_Thumb_branch_destination()
382 uint32_t S = ((inst & 0x04000000) >> 26)-1; /* ffffffff or 0 according to S bit */ in inst_Thumb_branch_destination()
383 npc = addr + 4 + ((int32_t)(((inst & 0x04000000) << 5) | in inst_Thumb_branch_destination()
384 (((inst^S) & 0x2000) << 17) | in inst_Thumb_branch_destination()
385 (((inst^S) & 0x0800) << 18) | in inst_Thumb_branch_destination()
386 ((inst & 0x03ff0000) << 3) | in inst_Thumb_branch_destination()
387 ((inst & 0x000007ff) << 8)) >> 7); in inst_Thumb_branch_destination()
389 } else if ((inst & 0xf800d001) == 0xf000c000) { in inst_Thumb_branch_destination()
391 uint32_t S = ((inst & 0x04000000) >> 26)-1; /* ffffffff or 0 according to S bit */ in inst_Thumb_branch_destination()
393 npc = addr + 4 + ((int32_t)(((inst & 0x04000000) << 5) | in inst_Thumb_branch_destination()
394 (((inst^S) & 0x2000) << 17) | in inst_Thumb_branch_destination()
395 (((inst^S) & 0x0800) << 18) | in inst_Thumb_branch_destination()
396 ((inst & 0x03ff0000) << 3) | in inst_Thumb_branch_destination()
397 ((inst & 0x000007fe) << 8)) >> 7); in inst_Thumb_branch_destination()
399 } else if ((inst & 0xf5000000) == 0xb1000000) { in inst_Thumb_branch_destination()
402 npc = addr + 4 + ((((inst & 0x02000000) << 6) | in inst_Thumb_branch_destination()
403 ((inst & 0x00f80000) << 7)) >> 25); in inst_Thumb_branch_destination()
414 int inst_A64_branch_destination(uint64_t addr, uint32_t inst, uint64_t *pnpc) in inst_A64_branch_destination() argument
418 if ((inst & 0xff000000) == 0x54000000) { in inst_A64_branch_destination()
421 npc = addr + ((int32_t)((inst & 0x00ffffe0) << 8) >> 11); in inst_A64_branch_destination()
422 } else if ((inst & 0x7c000000) == 0x14000000) { in inst_A64_branch_destination()
424 npc = addr + ((int32_t)((inst & 0x03ffffff) << 6) >> 4); in inst_A64_branch_destination()
425 } else if ((inst & 0x7e000000) == 0x34000000) { in inst_A64_branch_destination()
427 npc = addr + ((int32_t)((inst & 0x00ffffe0) << 8) >> 11); in inst_A64_branch_destination()
428 } else if ((inst & 0x7e000000) == 0x36000000) { in inst_A64_branch_destination()
430 npc = addr + ((int32_t)((inst & 0x0007ffe0) << 13) >> 16); in inst_A64_branch_destination()
440 int inst_ARM_is_branch(uint32_t inst, struct decode_info *info) in inst_ARM_is_branch() argument
442 return inst_ARM_is_indirect_branch(inst, info) || in inst_ARM_is_branch()
443 inst_ARM_is_direct_branch(inst); in inst_ARM_is_branch()
446 int inst_Thumb_is_branch(uint32_t inst, struct decode_info *info) in inst_Thumb_is_branch() argument
448 return inst_Thumb_is_indirect_branch(inst, info) || in inst_Thumb_is_branch()
449 inst_Thumb_is_direct_branch(inst, info); in inst_Thumb_is_branch()
452 int inst_A64_is_branch(uint32_t inst, struct decode_info *info) in inst_A64_is_branch() argument
454 return inst_A64_is_indirect_branch(inst, info) || in inst_A64_is_branch()
455 inst_A64_is_direct_branch(inst, info); in inst_A64_is_branch()
458 int inst_ARM_is_branch_and_link(uint32_t inst, struct decode_info *info) in inst_ARM_is_branch_and_link() argument
461 if ((inst & 0xf0000000) == 0xf0000000) { in inst_ARM_is_branch_and_link()
462 if ((inst & 0xfe000000) == 0xfa000000){ in inst_ARM_is_branch_and_link()
468 } else if ((inst & 0x0f000000) == 0x0b000000) { in inst_ARM_is_branch_and_link()
471 } else if ((inst & 0x0ff000f0) == 0x01200030) { in inst_ARM_is_branch_and_link()
480 int inst_Thumb_is_branch_and_link(uint32_t inst, struct decode_info *info) in inst_Thumb_is_branch_and_link() argument
483 if ((inst & 0xff800000) == 0x47800000) { in inst_Thumb_is_branch_and_link()
486 } else if ((inst & 0xf800c000) == 0xf000c000) { in inst_Thumb_is_branch_and_link()
495 int inst_A64_is_branch_and_link(uint32_t inst, struct decode_info *info) in inst_A64_is_branch_and_link() argument
498 if ((inst & 0xfffffc1f) == 0xd63f0000) { in inst_A64_is_branch_and_link()
501 } else if ((inst & 0xfc000000) == 0x94000000) { in inst_A64_is_branch_and_link()
506 if ((inst & 0xfffff800) == 0xd73f0800) { in inst_A64_is_branch_and_link()
509 } else if ((inst & 0xfffff81F) == 0xd63f081F) { in inst_A64_is_branch_and_link()
521 int inst_ARM_is_conditional(uint32_t inst) in inst_ARM_is_conditional() argument
523 return (inst & 0xe0000000) != 0xe0000000; in inst_ARM_is_conditional()
526 int inst_Thumb_is_conditional(uint32_t inst) in inst_Thumb_is_conditional() argument
528 if ((inst & 0xf0000000) == 0xd0000000 && (inst & 0x0e000000) != 0x0e000000) { in inst_Thumb_is_conditional()
531 } else if ((inst & 0xf800d000) == 0xf0008000 && (inst & 0x03800000) != 0x03800000) { in inst_Thumb_is_conditional()
534 } else if ((inst & 0xf5000000) == 0xb1000000) { in inst_Thumb_is_conditional()
541 unsigned int inst_Thumb_is_IT(uint32_t inst) in inst_Thumb_is_IT() argument
543 if ((inst & 0xff000000) == 0xbf000000 && in inst_Thumb_is_IT()
544 (inst & 0x000f0000) != 0x00000000) { in inst_Thumb_is_IT()
545 if (inst & 0x00010000) { in inst_Thumb_is_IT()
547 } else if (inst & 0x00020000) { in inst_Thumb_is_IT()
549 } else if (inst & 0x00040000) { in inst_Thumb_is_IT()
552 assert(inst & 0x00080000); in inst_Thumb_is_IT()
568 int inst_A64_is_conditional(uint32_t inst) in inst_A64_is_conditional() argument
570 if ((inst & 0x7c000000) == 0x34000000) { in inst_A64_is_conditional()
573 } else if ((inst & 0xff000000) == 0x54000000) { in inst_A64_is_conditional()
581 arm_barrier_t inst_ARM_barrier(uint32_t inst) in inst_ARM_barrier() argument
583 if ((inst & 0xfff00000) == 0xf5700000) { in inst_ARM_barrier()
584 switch (inst & 0xf0) { in inst_ARM_barrier()
594 } else if ((inst & 0x0fff0f00) == 0x0e070f00) { in inst_ARM_barrier()
595 switch (inst & 0xff) { in inst_ARM_barrier()
610 arm_barrier_t inst_Thumb_barrier(uint32_t inst) in inst_Thumb_barrier() argument
612 if ((inst & 0xffffff00) == 0xf3bf8f00) { in inst_Thumb_barrier()
613 switch (inst & 0xf0) { in inst_Thumb_barrier()
623 } else if ((inst & 0xffff0f00) == 0xee070f00) { in inst_Thumb_barrier()
625 switch (inst & 0xff) { in inst_Thumb_barrier()
641 arm_barrier_t inst_A64_barrier(uint32_t inst) in inst_A64_barrier() argument
643 if ((inst & 0xfffff09f) == 0xd503309f) { in inst_A64_barrier()
644 switch (inst & 0x60) { in inst_A64_barrier()
659 int inst_ARM_is_UDF(uint32_t inst) in inst_ARM_is_UDF() argument
661 return (inst & 0xfff000f0) == 0xe7f000f0; in inst_ARM_is_UDF()
664 int inst_Thumb_is_UDF(uint32_t inst) in inst_Thumb_is_UDF() argument
666 return (inst & 0xff000000) == 0xde000000 || /* T1 */ in inst_Thumb_is_UDF()
667 (inst & 0xfff0f000) == 0xf7f0a000; /* T2 */ in inst_Thumb_is_UDF()
670 int inst_A64_is_UDF(uint32_t inst) in inst_A64_is_UDF() argument
675 return (inst & 0xffe00000) == 0x00000000 || in inst_A64_is_UDF()
676 (inst & 0xffe00000) == 0xffe00000; in inst_A64_is_UDF()