/* * Copyright (C) 2016 Imagination Technologies * Author: Marcin Nowakowski <marcin.nowakowski@mips.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 */