| /* | |
| * Copyright (C) 2016 Imagination Technologies | |
| * Author: Marcin Nowakowski <marcin.nowakowski@imgtec.com> | |
| * | |
| * This program is free software; you can redistribute it and/or modify it | |
| * under the terms of the GNU General Public License as published by the | |
| * Free Software Foundation; either version 2 of the License, or (at your | |
| * option) any later version. | |
| */ | |
| #ifndef __PROBES_COMMON_H | |
| #define __PROBES_COMMON_H | |
| #include <asm/inst.h> | |
| int __insn_is_compact_branch(union mips_instruction insn); | |
| static inline int __insn_has_delay_slot(const union mips_instruction insn) | |
| { | |
| switch (insn.i_format.opcode) { | |
| /* | |
| * jr and jalr are in r_format format. | |
| */ | |
| case spec_op: | |
| switch (insn.r_format.func) { | |
| case jalr_op: | |
| case jr_op: | |
| return 1; | |
| } | |
| break; | |
| /* | |
| * This group contains: | |
| * bltz_op, bgez_op, bltzl_op, bgezl_op, | |
| * bltzal_op, bgezal_op, bltzall_op, bgezall_op. | |
| */ | |
| case bcond_op: | |
| switch (insn.i_format.rt) { | |
| case bltz_op: | |
| case bltzl_op: | |
| case bgez_op: | |
| case bgezl_op: | |
| case bltzal_op: | |
| case bltzall_op: | |
| case bgezal_op: | |
| case bgezall_op: | |
| case bposge32_op: | |
| return 1; | |
| } | |
| break; | |
| /* | |
| * These are unconditional and in j_format. | |
| */ | |
| case jal_op: | |
| case j_op: | |
| case beq_op: | |
| case beql_op: | |
| case bne_op: | |
| case bnel_op: | |
| case blez_op: /* not really i_format */ | |
| case blezl_op: | |
| case bgtz_op: | |
| case bgtzl_op: | |
| return 1; | |
| /* | |
| * And now the FPA/cp1 branch instructions. | |
| */ | |
| case cop1_op: | |
| #ifdef CONFIG_CPU_CAVIUM_OCTEON | |
| case lwc2_op: /* This is bbit0 on Octeon */ | |
| case ldc2_op: /* This is bbit032 on Octeon */ | |
| case swc2_op: /* This is bbit1 on Octeon */ | |
| case sdc2_op: /* This is bbit132 on Octeon */ | |
| #endif | |
| return 1; | |
| } | |
| return 0; | |
| } | |
| #endif /* __PROBES_COMMON_H */ |