1*2874c5fdSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */ 2e3031b32SMarcin Nowakowski /* 3e3031b32SMarcin Nowakowski * Copyright (C) 2016 Imagination Technologies 4ca208b5fSMarcin Nowakowski * Author: Marcin Nowakowski <marcin.nowakowski@mips.com> 5e3031b32SMarcin Nowakowski */ 6e3031b32SMarcin Nowakowski 7e3031b32SMarcin Nowakowski #ifndef __PROBES_COMMON_H 8e3031b32SMarcin Nowakowski #define __PROBES_COMMON_H 9e3031b32SMarcin Nowakowski 10e3031b32SMarcin Nowakowski #include <asm/inst.h> 11e3031b32SMarcin Nowakowski 12d05c5130SMarcin Nowakowski int __insn_is_compact_branch(union mips_instruction insn); 13d05c5130SMarcin Nowakowski __insn_has_delay_slot(const union mips_instruction insn)14e3031b32SMarcin Nowakowskistatic inline int __insn_has_delay_slot(const union mips_instruction insn) 15e3031b32SMarcin Nowakowski { 16e3031b32SMarcin Nowakowski switch (insn.i_format.opcode) { 17e3031b32SMarcin Nowakowski /* 18e3031b32SMarcin Nowakowski * jr and jalr are in r_format format. 19e3031b32SMarcin Nowakowski */ 20e3031b32SMarcin Nowakowski case spec_op: 21e3031b32SMarcin Nowakowski switch (insn.r_format.func) { 22e3031b32SMarcin Nowakowski case jalr_op: 23e3031b32SMarcin Nowakowski case jr_op: 24e3031b32SMarcin Nowakowski return 1; 25e3031b32SMarcin Nowakowski } 26e3031b32SMarcin Nowakowski break; 27e3031b32SMarcin Nowakowski 28e3031b32SMarcin Nowakowski /* 29e3031b32SMarcin Nowakowski * This group contains: 30e3031b32SMarcin Nowakowski * bltz_op, bgez_op, bltzl_op, bgezl_op, 31e3031b32SMarcin Nowakowski * bltzal_op, bgezal_op, bltzall_op, bgezall_op. 32e3031b32SMarcin Nowakowski */ 33e3031b32SMarcin Nowakowski case bcond_op: 34e3031b32SMarcin Nowakowski switch (insn.i_format.rt) { 35e3031b32SMarcin Nowakowski case bltz_op: 36e3031b32SMarcin Nowakowski case bltzl_op: 37e3031b32SMarcin Nowakowski case bgez_op: 38e3031b32SMarcin Nowakowski case bgezl_op: 39e3031b32SMarcin Nowakowski case bltzal_op: 40e3031b32SMarcin Nowakowski case bltzall_op: 41e3031b32SMarcin Nowakowski case bgezal_op: 42e3031b32SMarcin Nowakowski case bgezall_op: 43e3031b32SMarcin Nowakowski case bposge32_op: 44e3031b32SMarcin Nowakowski return 1; 45e3031b32SMarcin Nowakowski } 46e3031b32SMarcin Nowakowski break; 47e3031b32SMarcin Nowakowski 48e3031b32SMarcin Nowakowski /* 49e3031b32SMarcin Nowakowski * These are unconditional and in j_format. 50e3031b32SMarcin Nowakowski */ 51e3031b32SMarcin Nowakowski case jal_op: 52e3031b32SMarcin Nowakowski case j_op: 53e3031b32SMarcin Nowakowski case beq_op: 54e3031b32SMarcin Nowakowski case beql_op: 55e3031b32SMarcin Nowakowski case bne_op: 56e3031b32SMarcin Nowakowski case bnel_op: 57e3031b32SMarcin Nowakowski case blez_op: /* not really i_format */ 58e3031b32SMarcin Nowakowski case blezl_op: 59e3031b32SMarcin Nowakowski case bgtz_op: 60e3031b32SMarcin Nowakowski case bgtzl_op: 61e3031b32SMarcin Nowakowski return 1; 62e3031b32SMarcin Nowakowski 63e3031b32SMarcin Nowakowski /* 64e3031b32SMarcin Nowakowski * And now the FPA/cp1 branch instructions. 65e3031b32SMarcin Nowakowski */ 66e3031b32SMarcin Nowakowski case cop1_op: 67e3031b32SMarcin Nowakowski #ifdef CONFIG_CPU_CAVIUM_OCTEON 68e3031b32SMarcin Nowakowski case lwc2_op: /* This is bbit0 on Octeon */ 69e3031b32SMarcin Nowakowski case ldc2_op: /* This is bbit032 on Octeon */ 70e3031b32SMarcin Nowakowski case swc2_op: /* This is bbit1 on Octeon */ 71e3031b32SMarcin Nowakowski case sdc2_op: /* This is bbit132 on Octeon */ 72e3031b32SMarcin Nowakowski #endif 73e3031b32SMarcin Nowakowski return 1; 74e3031b32SMarcin Nowakowski } 75e3031b32SMarcin Nowakowski 76e3031b32SMarcin Nowakowski return 0; 77e3031b32SMarcin Nowakowski } 78e3031b32SMarcin Nowakowski 79e3031b32SMarcin Nowakowski #endif /* __PROBES_COMMON_H */ 80